]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Add new release TBB 2.2.
authorbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 20 Aug 2009 20:12:30 +0000 (20:12 +0000)
committerbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 20 Aug 2009 20:12:30 +0000 (20:12 +0000)
git-svn-id: https://svn.dealii.org/trunk@19317 0785d39b-7218-0410-832d-ea1e28bc413d

921 files changed:
deal.II/contrib/tbb/tbb22_20090809oss/CHANGES [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/COPYING [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/README [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/FreeBSD.gcc.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/FreeBSD.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/Makefile.rml [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/Makefile.tbb [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/Makefile.tbbmalloc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/Makefile.test [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/SunOS.gcc.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/SunOS.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/SunOS.suncc.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/codecov.txt [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/common.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/common_rules.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/detect.js [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/generate_tbbvars.bat [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/generate_tbbvars.sh [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/linux.gcc.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/linux.icc.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/linux.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/macos.gcc.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/macos.icc.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/macos.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/suncc.map.pause [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/test_launcher.bat [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/test_launcher.sh [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_linux.sh [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_macos.sh [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_sunos.sh [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_windows.js [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_winlrb.js [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/makefile.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/tbb.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/tbbmalloc.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/tbbmalloc_proxy.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/version_string.tmp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/windows.cl.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/windows.gcc.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/windows.icl.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/windows.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/winlrb.cl.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/winlrb.icc.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/build/winlrb.inc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/Release_Notes.txt [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00001.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00002.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00003.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00004.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00005.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00006.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00007.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00009.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00011.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00012.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00013.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00015.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00016.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00017.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00018.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00019.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00021.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00022.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00025.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00029.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00030.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00031.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00032.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00033.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00034.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00035.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00036.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00037.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00038.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00039.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00041.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00043.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00044.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00045.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00046.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00047.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00048.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00049.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00050.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00051.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00052.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00053.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00055.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00057.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00058.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00059.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00060.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00061.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00063.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00064.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00065.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00073.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00075.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00077.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00079.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00081.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00083.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00084.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00085.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00086.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00087.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00088.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00095.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00098.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00099.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00115.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00116.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00117.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00118.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00119.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00120.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00121.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00122.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00123.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00124.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00125.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00126.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00127.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00128.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00129.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00130.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00131.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00132.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00133.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00134.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00135.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00136.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00137.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00138.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00139.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00140.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00141.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00142.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00143.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00144.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00145.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00146.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00147.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00148.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00149.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00150.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00151.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00152.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00153.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00154.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00155.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00156.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00157.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00158.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00159.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00160.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00161.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00162.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00163.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00164.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00165.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00166.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00167.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00168.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00169.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00170.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00171.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00172.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00173.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00174.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00175.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00176.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00177.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00178.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00179.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00180.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00210.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00229.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00232.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00233.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00234.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00235.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00236.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00237.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00238.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00239.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00255.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00257.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00258.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00266.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00267.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00268.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00269.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00271.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00272.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00281.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00282.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00291.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00299.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00301.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00302.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00303.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00312.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00316.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00318.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00324.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00328.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00334.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00338.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00342.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00347.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00348.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00349.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00350.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00351.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00352.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00353.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00354.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00363.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00371.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00372.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00374.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00375.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00379.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00380.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00381.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00382.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00385.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00386.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00391.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00399.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00401.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/annotated.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/concepts.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/deprecated.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/doxygen.css [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/files.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_enum.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_eval.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_func.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_rela.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_type.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_vars.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/globals.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/globals_func.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/graph_legend.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/hierarchy.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/modules.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_enum.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_eval.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_func.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_type.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_vars.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespaces.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/pages.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_do_body_req.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_for_body_req.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_reduce_body_req.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_reduce_lambda_req.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_scan_body_req.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_sort_iter_req.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/range_req.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tab_b.gif [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tab_l.gif [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tab_r.gif [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tabs.css [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_extended.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_pretty.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_extended.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_pretty.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_extended.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_pretty.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/Makefile.gmake [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/Makefile.win [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/convideo.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/ddvideo.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/dxcheck.bat [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/gdivideo.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/macvideo.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/video.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/winvideo.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/xvideo.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/common/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/count_strings.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc8/count_strings.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc8/count_strings.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc8/count_strings.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc9/count_strings.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc9/count_strings.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc9/count_strings.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Graph.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Graph.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Matrix.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/parallel_preorder.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/AssemblyInfo.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Board.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Evolution.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Evolution.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Form1.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Game_of_life.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Update_state.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/Game_of_life.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/Game_of_life.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/app.ico [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/app.rc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/resource.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/Game_of_life.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/Game_of_life.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/app.ico [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/app.rc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/resource.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/polymain.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/polymain.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/polyover.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/polyover.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/pover_global.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/pover_video.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/pover_video.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/rpolygon.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/speedup.gif [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/pover.rc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/pover.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/pover.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/pover.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/resource.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/pover.rc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/pover.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/pover.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/pover.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/resource.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/pover.rc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/pover.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/pover.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/pover.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/resource.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/classes.nib [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/info.nib [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/objects.xib [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/Info.plist [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.pch [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/SeismicSimulation.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.ico [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.rc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/resource.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/small.ico [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.ico [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.rc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/resource.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/small.ico [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.ico [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.rc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/resource.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/small.ico [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/English.lproj/main.nib/classes.nib [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/English.lproj/main.nib/info.nib [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/English.lproj/main.nib/objects.xib [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/Info.plist [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/SeismicSimulation.pch [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/820spheres.dat [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/balls.dat [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/balls3.dat [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/lattice.dat [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/model2.dat [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/teapot.dat [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/trypsin4pti.dat [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/api.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/api.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/apigeom.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/apitrigeom.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/apitrigeom.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/bndbox.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/bndbox.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/box.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/box.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/camera.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/camera.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/coordsys.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/coordsys.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/cylinder.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/cylinder.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/extvol.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/extvol.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/getargs.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/getargs.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/global.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/global.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/grid.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/grid.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/imageio.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/imageio.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/imap.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/imap.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/intersect.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/intersect.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/jpeg.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/jpeg.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/light.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/light.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/machine.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/macros.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/objbound.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/objbound.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/parse.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/parse.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/plane.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/plane.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ppm.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ppm.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/pthread.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/pthread.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/quadric.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/quadric.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/render.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/render.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ring.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ring.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/shade.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/shade.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/sphere.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/sphere.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/texture.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/texture.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/tgafile.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/tgafile.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace.serial.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace.tbb.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace.tbb1d.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace_rest.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/triangle.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/triangle.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/types.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ui.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ui.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/util.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/util.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/vector.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/vector.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/video.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/video.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/vol.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/vol.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/gui.ico [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/gui.rc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/resource.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/small.ico [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.serial.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.tbb.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.tbb1d.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.serial.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.tbb.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.tbb1d.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.serial.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.tbb.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.tbb1d.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/classes.nib [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/info.nib [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/objects.xib [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/Info.plist [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/tachyon.pch [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/convex_hull.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc7.1/convex_hull.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc7.1/convex_hull.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_bench.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_sample.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc8/convex_hull.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc8/convex_hull.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc8/convex_hull_benchmark.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc8/convex_hull_sample.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc9/convex_hull.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc9/convex_hull.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc9/convex_hull_benchmark.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc9/convex_hull_sample.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/primes.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc7.1/primes.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc7.1/primes.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc7.1/primes.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc8/primes.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc8/primes.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc8/primes.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc9/primes.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc9/primes.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc9/primes.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Graph.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Graph.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Matrix.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/parallel_preorder.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/gen_input.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/square.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc7.1/gen_input.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc7.1/square.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc7.1/square.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc8/gen_input.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc8/square.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc8/square.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc9/gen_input.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc9/square.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc9/square.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/text_filter.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc7.1/text_filter.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc7.1/text_filter.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc7.1/text_filter.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc8/text_filter.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc8/text_filter.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc8/text_filter.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc9/text_filter.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc9/text_filter.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc9/text_filter.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/xcode/text_filter.xcodeproj/project.pbxproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/OptimizedParallelSumTree.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/SerialSumTree.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/SimpleParallelSumTree.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/common.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/main.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc7.1/tree_sum.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc7.1/tree_sum.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc7.1/tree_sum.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc8/tree_sum.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc8/tree_sum.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc8/tree_sum.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc9/tree_sum.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc9/tree_sum.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc9/tree_sum.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/Fibonacci.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/Makefile.windows [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc7.1/fibonacci.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc7.1/fibonacci.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc7.1/fibonacci.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc8/fibonacci.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc8/fibonacci.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc8/fibonacci.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc9/fibonacci.sln [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc9/fibonacci.suo [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc9/fibonacci.vcproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/_concurrent_queue_internal.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/_tbb_windef.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/aligned_space.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/atomic.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/blocked_range.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/blocked_range2d.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/blocked_range3d.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/cache_aligned_allocator.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/combinable.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/compat/ppl.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/concurrent_hash_map.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/concurrent_queue.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/concurrent_vector.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/enumerable_thread_specific.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/ibm_aix51.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/linux_common.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/linux_ia32.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/linux_ia64.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/linux_intel64.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/mac_ppc.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/windows_ia32.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/windows_intel64.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/mutex.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/null_mutex.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/null_rw_mutex.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_do.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_for.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_for_each.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_invoke.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_reduce.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_scan.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_sort.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_while.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/partitioner.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/pipeline.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/queuing_mutex.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/queuing_rw_mutex.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/recursive_mutex.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/scalable_allocator.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/spin_mutex.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/spin_rw_mutex.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/task.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/task_group.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/task_scheduler_init.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/task_scheduler_observer.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_allocator.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_config.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_exception.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_machine.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_profiling.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_stddef.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_thread.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbbmalloc_proxy.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tick_count.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/Makefile [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/old/concurrent_queue_v2.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/old/concurrent_queue_v2.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/old/concurrent_vector_v2.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/old/concurrent_vector_v2.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/old/spin_rw_mutex_v2.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/old/spin_rw_mutex_v2.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/old/test_concurrent_queue_v2.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/old/test_concurrent_vector_v2.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/old/test_mutex_v2.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/fibonacci_cutoff.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/fibonacci_impl_tbb.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/perf_util.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/statistics.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/statistics.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/statistics_xml.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_base.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_framework.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_hash_map.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_hash_map_fill.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_locked_work.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_sandbox.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_unit.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_vector.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/library_assert.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/omp_dynamic_link.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/omp_dynamic_link.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/rml_factory.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/rml_omp.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/rml_tbb.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/include/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/include/rml_base.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/include/rml_omp.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/include/rml_tbb.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/omp_nested.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/omp_simple.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/tbb_multi_omp.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/tbb_simple.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/thread_level.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/hunk.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/irml.rc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/job_automaton.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/lin-rml-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/ring.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/rml_server.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/thread_monitor.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/wait_counter.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/win32-rml-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/win64-rml-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/rml_omp_stub.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_hunk.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_job_automaton.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_ring.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_rml_mixed.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_rml_omp.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_rml_omp_c_linkage.c [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_rml_tbb.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_server.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_thread_monitor.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/cache_aligned_allocator.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/concurrent_hash_map.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/concurrent_queue.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/concurrent_vector.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/dynamic_link.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/dynamic_link.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/enumerable_thread_specific.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/gate.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia32-masm/atomic_support.asm [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia32-masm/lock_byte.asm [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/atomic_support.s [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/ia64_misc.s [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/lock_byte.s [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/log2.s [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/pause.s [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ibm_aix51/atomic_support.c [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/index.html [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/intel64-masm/atomic_support.asm [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_annotate.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_annotate.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_notify.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_notify.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_notify_proxy.c [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/lin32-tbb-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/lin64-tbb-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/lin64ipf-tbb-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/mac32-tbb-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/mac64-tbb-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/mutex.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/pipeline.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/private_server.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/queuing_mutex.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/queuing_rw_mutex.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/recursive_mutex.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/spin_mutex.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/spin_rw_mutex.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/task.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_assert_impl.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_misc.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_misc.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_resource.rc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_thread.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_version.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tls.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/_config.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/_disable_warnings.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/_ittnotify_static.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/ittnotify.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/ittnotify_static.c [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/win32-tbb-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/win64-tbb-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/Customize.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/LifoQueue.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/MapMemory.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/MemoryAllocator.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/Statistics.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/TypeDefinitions.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/lin-tbbmalloc-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/lin32-proxy-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/lin64-proxy-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/lin64ipf-proxy-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/mac32-tbbmalloc-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/mac64-tbbmalloc-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/proxy.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/proxy.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/tbb_function_replacement.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/tbb_function_replacement.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/tbbmalloc.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/tbbmalloc.rc [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/win-gcc-tbbmalloc-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/win32-tbbmalloc-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/win64-tbbmalloc-export.def [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_allocator.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_assert.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_bad_expr.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_barrier.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_concurrency_tracker.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_cpu.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_eh.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_iterator.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_lrb.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_lrb_host.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_m128.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_memory.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_report.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_ScalableAllocator.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_ScalableAllocator_STL.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_aligned_space.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_allocator.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_allocator_STL.h [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_assembly.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_atomic.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_blocked_range.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_blocked_range2d.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_blocked_range3d.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_cache_aligned_allocator.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_cache_aligned_allocator_STL.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_combinable.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_compiler.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_concurrent_hash_map.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_concurrent_queue.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_concurrent_vector.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_eh_algorithms.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_eh_tasks.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_enumerable_thread_specific.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_halt.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_handle_perror.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_inits_loop.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_ittnotify.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_compliance.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_functionality.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_overload.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_pure_c.c [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_regression.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_model_plugin.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_mutex.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_mutex_native_threads.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_openmp.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_do.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_for.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_for_each.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_invoke.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_reduce.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_scan.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_sort.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_while.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_pipeline.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_pipeline_with_tbf.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_rwm_upgrade_downgrade.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_assertions.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_auto_init.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_group.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_leaks.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_scheduler_init.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_scheduler_observer.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_tbb_header.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_tbb_thread.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_tbb_version.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_tick_count.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_user_events.cpp [new file with mode: 0644]
deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_yield.cpp [new file with mode: 0644]

diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/CHANGES b/deal.II/contrib/tbb/tbb22_20090809oss/CHANGES
new file mode 100644 (file)
index 0000000..971b650
--- /dev/null
@@ -0,0 +1,642 @@
+20090809 open-source release
+
+Changes (w.r.t. TBB 2.2 commercial-aligned release):
+
+- Fixed known exception safety issues in concurrent_vector.
+- Improved scalability of concurrent_vector
+- TBB allocator further improves performance of large object allocation.
+- Problem with source of text relocations was fixed on Linux
+- Fixed bugs related to malloc replacement under Windows
+- A few other small changes in code and documentation.
+
+------------------------------------------------------------------------
+TBB 2.2 commercial-aligned release
+
+Changes (w.r.t. TBB 2.1 U4 commercial-aligned release):
+
+- Incorporates all changes from open-source releases below.
+- Architecture folders renamed from em64t to intel64 and from itanium
+    to ia64.
+- Major Interface version changed from 3 to 4. Deprecated interfaces 
+    might be removed in future releases.
+- Improved memory allocator performance for allocations bigger than 8K.
+- Added new thread-bound filters functionality for pipeline.
+- New implementation of concurrent_hash_map that improves performance 
+    significantly.
+- A few other small changes in code and documentation.
+
+------------------------------------------------------------------------
+20090511 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Basic support for MinGW32 development kit.
+- Added tbb::zero_allocator class that initializes memory with zeros.
+    It can be used as an adaptor to any STL-compatible allocator class.
+- Added tbb::parallel_for_each template function as alias to parallel_do.
+- Added more overloads for tbb::parallel_for.
+- Added support for exact exception propagation (can only be used with 
+    compilers that support C++0x std::exception_ptr).
+- tbb::atomic template class can be used with enumerations.
+- mutex, recursive_mutex, spin_mutex, spin_rw_mutex classes extended
+    with explicit lock/unlock methods.
+- Fixed size() and grow_to_at_least() methods of tbb::concurrent_vector
+    to provide space allocation guarantees. More methods added for
+    compatibility with std::vector, including some from C++0x.
+- Preview of a lambda-friendly interface for low-level use of tasks.
+- scalable_msize function added to the scalable allocator (Windows only).
+- Rationalized internal auxiliary functions for spin-waiting and backoff.
+- Several tests undergo decent refactoring.
+
+Changes affecting backward compatibility:
+
+- Improvements in concurrent_queue, including limited API changes. 
+    The previous version is deprecated; its functionality is accessible 
+    via methods of the new tbb::concurrent_bounded_queue class.
+- grow* and push_back methods of concurrent_vector changed to return
+    iterators; old semantics is deprecated. 
+
+------------------------------------------------------------------------
+TBB 2.1 Update 4 commercial-aligned release
+
+Changes (w.r.t. TBB 2.1 U3 commercial-aligned release):
+
+- Added tests for aligned memory allocations and malloc replacement.
+- Several improvements for better bundling with Intel(R) C++ Compiler.
+- A few other small changes in code and documentaion.
+
+Bugs fixed: 
+
+- 150 - request to build TBB examples with debug info in release mode.
+- backward compatibility issue with concurrent_queue on Windows.
+- dependency on VS 2005 SP1 runtime libraries removed.
+- compilation of GUI examples under XCode* 3.1 (1577).
+- On Windows, TBB allocator classes can be instantiated with const types 
+    for compatibility with MS implementation of STL containers (1566).
+
+------------------------------------------------------------------------
+20090313 open-source release
+
+Changes (w.r.t. 20081109 open-source release):
+
+- Includes all changes introduced in TBB 2.1 Update 2 & Update 3
+    commercial-aligned releases (see below for details).
+- Added tbb::parallel_invoke template function. It runs up to 10 
+    user-defined functions in parallel and waits for them to complete.
+- Added a special library providing ability to replace the standard
+    memory allocation routines in Microsoft* C/C++ RTL (malloc/free,
+    global new/delete, etc.) with the TBB memory allocator. 
+    Usage details are described in include/tbb/tbbmalloc_proxy.h file.
+- Task scheduler switched to use new implementation of its core 
+    functionality (deque based task pool, new structure of arena slots).
+- Preview of Microsoft* Visual Studio* 2005 project files for 
+    building the library is available in build/vsproject folder.
+- Added tests for aligned memory allocations and malloc replacement.
+- Added parallel_for/game_of_life.net example (for Windows only) 
+    showing TBB usage in a .NET application.
+- A number of other fixes and improvements to code, tests, makefiles,
+    examples and documents.
+
+Bugs fixed: 
+
+- The same list as in TBB 2.1 Update 4 right above.
+
+------------------------------------------------------------------------
+TBB 2.1 Update 3 commercial-aligned release
+
+Changes (w.r.t. TBB 2.1 U2 commercial-aligned release):
+
+- Added support for aligned allocations to the TBB memory allocator.
+- Added a special library to use with LD_PRELOAD on Linux* in order to 
+    replace the standard memory allocation routines in C/C++ with the 
+    TBB memory allocator.
+- Added null_mutex and null_rw_mutex: no-op classes interface-compliant 
+    to other TBB mutexes.
+- Improved performance of parallel_sort, to close most of the serial gap
+    with std::sort, and beat it on 2 and more cores.
+- A few other small changes.
+
+Bugs fixed:
+
+- the problem where parallel_for hanged after exception throw 
+    if affinity_partitioner was used (1556).
+- get rid of VS warnings about mbstowcs deprecation (1560),
+    as well as some other warnings.
+- operator== for concurrent_vector::iterator fixed to work correctly
+    with different vector instances.
+
+------------------------------------------------------------------------
+TBB 2.1 Update 2 commercial-aligned release
+
+Changes (w.r.t. TBB 2.1 U1 commercial-aligned release):
+
+- Incorporates all open-source-release changes down to TBB 2.1 U1,
+    except for:
+    - 20081019 addition of enumerable_thread_specific;
+- Warning level for Microsoft* Visual C++* compiler raised to /W4 /Wp64;
+    warnings found on this level were cleaned or suppressed.
+- Added TBB_runtime_interface_version API function.
+- Added new example: pipeline/square.
+- Added exception handling and cancellation support
+    for parallel_do and pipeline.
+- Added copy constructor and [begin,end) constructor to concurrent_queue.
+- Added some support for beta version of Intel(R) Parallel Amplifier.
+- Added scripts to set environment for cross-compilation of 32-bit 
+    applications on 64-bit Linux with Intel(R) C++ Compiler.
+- Fixed semantics of concurrent_vector::clear() to not deallocate
+    internal arrays. Fixed compact() to perform such deallocation later.
+- Fixed the issue with atomic<T*> when T is incomplete type.
+- Improved support for PowerPC* Macintosh*, including the fix 
+    for a bug in masked compare-and-swap reported by a customer.
+- As usual, a number of other improvements everywhere.
+
+------------------------------------------------------------------------
+20081109 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Added new serial out of order filter for tbb::pipeline.
+- Fixed the issue with atomic<T*>::operator= reported at the forum.
+- Fixed the issue with using tbb::task::self() in task destructor 
+    reported at the forum.
+- A number of other improvements to code, tests, makefiles, examples 
+    and documents.
+
+Open-source contributions integrated: 
+- Changes in the memory allocator were partially integrated.
+
+------------------------------------------------------------------------
+20081019 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Introduced enumerable_thread_specific<T>.  This new class provides a 
+    wrapper around native thread local storage as well as iterators and 
+    ranges for accessing the thread local copies (1533).
+- Improved support for Intel(R) Threading Analysis Tools
+    on Intel(R) 64 architecture.
+- Dependency from Microsoft* CRT was integrated to the libraries using 
+    manifests, to avoid issues if called from code that uses different 
+    version of Visual C++* runtime than the library.
+- Introduced new defines TBB_USE_ASSERT, TBB_USE_DEBUG, 
+    TBB_USE_PERFORMANCE_WARNINGS, TBB_USE_THREADING_TOOLS.
+- A number of other improvements to code, tests, makefiles, examples 
+    and documents.
+
+Open-source contributions integrated:
+
+- linker optimization: /incremental:no .
+
+------------------------------------------------------------------------
+20080925 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Same fix for a memory leak in the memory allocator as in TBB 2.1 U1.
+- Improved support for lambda functions.
+- Fixed more concurrent_queue issues reported at the forum.
+- A number of other improvements to code, tests, makefiles, examples 
+    and documents.
+
+------------------------------------------------------------------------
+TBB 2.1 Update 1 commercial-aligned release
+
+Changes (w.r.t. TBB 2.1 Gold commercial-aligned release):
+
+- Fixed small memory leak in the memory allocator.
+- Incorporates all open-source-release changes down to TBB 2.1 GOLD,
+    except for:
+    - 20080825 changes for parallel_do;
+
+------------------------------------------------------------------------
+20080825 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Added exception handling and cancellation support for parallel_do.
+- Added default HashCompare template argument for concurrent_hash_map.
+- Fixed concurrent_queue.clear() issues due to incorrect assumption
+    about clear() being private method.
+- Added the possibility to use TBB in applications that change
+    default calling conventions (Windows* only).
+- Many improvements to code, tests, examples, makefiles and documents.
+
+Bugs fixed:
+
+- 120, 130 - memset declaration missed in concurrent_hash_map.h
+
+------------------------------------------------------------------------
+20080724 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Inline assembly for atomic operations improved for gcc 4.3
+- A few more improvements to the code.
+
+------------------------------------------------------------------------
+20080709 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- operator=() was added to the tbb_thread class according to
+    the current working draft for std::thread.
+- Recognizing SPARC* in makefiles for Linux* and Sun Solaris*.
+
+Bugs fixed:
+
+- 127 - concurrent_hash_map::range fixed to split correctly.
+
+Open-source contributions integrated:
+
+- fix_set_midpoint.diff by jyasskin
+- SPARC* support in makefiles by Raf Schietekat
+
+------------------------------------------------------------------------
+20080622 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Fixed a hang that rarely happened on Linux
+    during deinitialization of the TBB scheduler.
+- Improved support for Intel(R) Thread Checker.
+- A few more improvements to the code.
+
+------------------------------------------------------------------------
+TBB 2.1 GOLD commercial-aligned release
+
+Changes (w.r.t. TBB 2.0 U3 commercial-aligned release):
+
+- All open-source-release changes down to, and including, TBB 2.0 GOLD
+    below, were incorporated into this release.
+
+------------------------------------------------------------------------
+20080605 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Explicit control of exported symbols by version scripts added on Linux.
+- Interfaces polished for exception handling & algorithm cancellation.
+- Cache behavior improvements in the scalable allocator.
+- Improvements in text_filter, polygon_overlay, and other examples.
+- A lot of other stability improvements in code, tests, and makefiles.
+- First release where binary packages include headers/docs/examples, so
+    binary packages are now self-sufficient for using TBB.
+
+Open-source contributions integrated:
+
+- atomics patch (partially).
+- tick_count warning patch.
+
+Bugs fixed:
+
+- 118 - fix for boost compatibility.
+- 123 - fix for tbb_machine.h.
+
+------------------------------------------------------------------------
+20080512 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Fixed a problem with backward binary compatibility
+    of debug Linux builds.
+- Sun* Studio* support added.
+- soname support added on Linux via linker script. To restore backward 
+    binary compatibility, *.so -> *.so.2 softlinks should be created.
+- concurrent_hash_map improvements - added few new forms of insert() 
+    method and fixed precondition and guarantees of erase() methods.   
+    Added runtime warning reporting about bad hash function used for 
+    the container. Various improvements for performance and concurrency.
+- Cancellation mechanism reworked so that it does not hurt scalability.
+- Algorithm parallel_do reworked. Requirement for Body::argument_type 
+    definition removed, and work item argument type can be arbitrarily 
+    cv-qualified.
+- polygon_overlay example added.
+- A few more improvements to code, tests, examples and Makefiles.
+
+Open-source contributions integrated:
+
+- Soname support patch for Bugzilla #112.
+
+Bugs fixed:
+
+- 112 - fix for soname support.
+
+------------------------------------------------------------------------
+TBB 2.0 U3 commercial-aligned release (package 017, April 20, 2008)
+
+Corresponds to commercial 019 (for Linux*, 020; for Mac OS* X, 018)
+packages.
+
+Changes (w.r.t. TBB 2.0 U2 commercial-aligned release):
+
+- Does not contain open-source-release changes below; this release is
+    only a minor update of TBB 2.0 U2.
+- Removed spin-waiting in pipeline and concurrent_queue.
+- A few more small bug fixes from open-source releases below.
+
+------------------------------------------------------------------------
+20080408 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- count_strings example reworked: new word generator implemented, hash 
+    function replaced, and tbb_allocator is used with std::string class.
+- Static methods of spin_rw_mutex were replaced by normal member 
+    functions, and the class name was versioned.
+- tacheon example was renamed to tachyon.
+- Improved support for Intel(R) Thread Checker.
+- A few more minor improvements.
+
+Open-source contributions integrated:
+
+- Two sets of Sun patches for IA Solaris support.
+
+------------------------------------------------------------------------
+20080402 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Exception handling and cancellation support for tasks and algorithms 
+    fully enabled.
+- Exception safety guaranties defined and fixed for all concurrent 
+    containers.
+- User-defined memory allocator support added to all concurrent 
+    containers.
+- Performance improvement of concurrent_hash_map, spin_rw_mutex.
+- Critical fix for a rare race condition during scheduler 
+    initialization/de-initialization.
+- New methods added for concurrent containers to be closer to STL,
+    as well as automatic filters removal from pipeline
+    and __TBB_AtomicAND function.
+- The volatile keyword dropped from where it is not really needed.
+- A few more minor improvements.
+
+------------------------------------------------------------------------
+20080319 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Support for gcc version 4.3 was added.
+- tbb_thread class, near compatible with std::thread expected in C++0x, 
+    was added.
+
+Bugs fixed:
+
+- 116 - fix for compilation issues with gcc version 4.2.1.
+- 120 - fix for compilation issues with gcc version 4.3.
+------------------------------------------------------------------------
+20080311 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- An enumerator added for pipeline filter types (serial vs. parallel).
+- New task_scheduler_observer class introduced, to observe when
+    threads start and finish interacting with the TBB task scheduler.
+- task_scheduler_init reverted to not use internal versioned class;
+    binary compatibility guaranteed with stable releases only.
+- Various improvements to code, tests, examples and Makefiles.
+------------------------------------------------------------------------
+20080304 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Task-to-thread affinity support, previously kept under a macro,
+    now fully legalized.
+- Work-in-progress on cache_aligned_allocator improvements.
+- Pipeline really supports parallel input stage; it's no more serialized.
+- Various improvements to code, tests, examples and Makefiles.
+Bugs fixed:
+
+- 119 - fix for scalable_malloc sometimes failing to return a big block.
+- TR575 - fixed a deadlock occurring on Windows in startup/shutdown
+    under some conditions.
+
+------------------------------------------------------------------------
+20080226 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Introduced tbb_allocator to select between standard allocator and
+    tbb::scalable_allocator when available.
+- Removed spin-waiting in pipeline and concurrent_queue.
+- Improved performance of concurrent_hash_map by using tbb_allocator.
+- Improved support for Intel(R) Thread Checker.
+- Various improvements to code, tests, examples and Makefiles.
+
+------------------------------------------------------------------------
+TBB 2.0 U2 commercial-aligned release (package 017, February 14, 2008)
+
+Corresponds to commercial 017 (for Linux*, 018; for Mac OS* X, 016)
+packages.
+
+Changes (w.r.t. TBB 2.0 U1 commercial-aligned release):
+
+- Does not contain open-source-release changes below; this release is
+    only a minor update of TBB 2.0 U1.
+- Add support for Microsoft* Visual Studio* 2008, including binary
+    libraries and VS2008 projects for examples.
+- Use SwitchToThread() not Sleep() to yield threads on Windows*.
+- Enhancements to Doxygen-readable comments in source code.
+- A few more small bug fixes from open-source releases below.
+
+Bugs fixed:
+
+- TR569 - Memory leak in concurrent_queue.
+
+------------------------------------------------------------------------
+20080207 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Improvements and minor fixes in VS2008 projects for examples.
+- Improvements in code for gating worker threads that wait for work,
+  previously consolidated under #if IMPROVED_GATING, now legalized.
+- Cosmetic changes in code, examples, tests.
+
+Bugs fixed:
+
+- 113 - Iterators and ranges should be convertible to their const
+    counterparts.
+- TR569 - Memory leak in concurrent_queue.
+
+------------------------------------------------------------------------
+20080122 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Updated examples/parallel_for/seismic to improve the visuals and to
+    use the affinity_partitioner (20071127 and forward) for better
+    performance.
+- Minor improvements to unittests and performance tests.
+
+------------------------------------------------------------------------
+20080115 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Cleanup, simplifications and enhancements to the Makefiles for
+    building the libraries (see build/index.html for high-level
+    changes) and the examples.
+- Use SwitchToThread() not Sleep() to yield threads on Windows*.
+- Engineering work-in-progress on exception safety/support.
+- Engineering work-in-progress on affinity_partitioner for
+    parallel_reduce.
+- Engineering work-in-progress on improved gating for worker threads
+    (idle workers now block in the OS instead of spinning).
+- Enhancements to Doxygen-readable comments in source code.
+
+Bugs fixed:
+
+- 102 - Support for parallel build with gmake -j
+- 114 - /Wp64 build warning on Windows*.
+
+------------------------------------------------------------------------
+20071218 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Full support for Microsoft* Visual Studio* 2008 in open-source.
+    Binaries for vc9/ will be available in future stable releases.
+- New recursive_mutex class.
+- Full support for 32-bit PowerMac including export files for builds.
+- Improvements to parallel_do.
+
+------------------------------------------------------------------------
+20071206 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Support for Microsoft* Visual Studio* 2008 in building libraries
+    from source as well as in vc9/ projects for examples.
+- Small fixes to the affinity_partitioner first introduced in 20071127.
+- Small fixes to the thread-stack size hook first introduced in 20071127.
+- Engineering work in progress on concurrent_vector.
+- Engineering work in progress on exception behavior.
+- Unittest improvements.
+
+------------------------------------------------------------------------
+20071127 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Task-to-thread affinity support (affinity partitioner) first appears.
+- More work on concurrent_vector.
+- New parallel_do algorithm (function-style version of parallel while)
+    and parallel_do/parallel_preorder example.
+- New task_scheduler_init() hooks for getting default_num_threads() and
+    for setting thread stack size.
+- Support for weak memory consistency models in the code base.
+- Futex usage in the task scheduler (Linux).
+- Started adding 32-bit PowerMac support.
+- Intel(R) 9.1 compilers are now the base supported Intel(R) compiler
+    version.
+- TBB libraries added to link line automatically on Microsoft Windows*
+    systems via #pragma comment linker directives.
+
+Open-source contributions integrated:
+
+- FreeBSD platform support patches.
+- AIX weak memory model patch.
+
+Bugs fixed:
+
+- 108 - Removed broken affinity.h reference.
+- 101 - Does not build on Debian Lenny (replaced arch with uname -m).
+
+------------------------------------------------------------------------
+20071030 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- More work on concurrent_vector.
+- Better support for building with -Wall -Werror (or not) as desired.
+- A few fixes to eliminate extraneous warnings.
+- Begin introduction of versioning hooks so that the internal/API
+    version is tracked via TBB_INTERFACE_VERSION.  The newest binary
+    libraries should always work with previously-compiled code when-
+    ever possible.
+- Engineering work in progress on using futex inside the mutexes (Linux).
+- Engineering work in progress on exception behavior.
+- Engineering work in progress on a new parallel_do algorithm.
+- Unittest improvements.
+
+------------------------------------------------------------------------
+20070927 open-source release
+
+Changes:
+
+- Minor update to TBB 2.0 U1 below.
+- Begin introduction of new concurrent_vector interfaces not released
+    with TBB 2.0 U1.
+
+------------------------------------------------------------------------
+TBB 2.0 U1 commercial-aligned release (package 014, October 1, 2007)
+
+Corresponds to commercial 014 (for Linux*, 016) packages.
+
+Changes (w.r.t. previous commercial-aligned release):
+
+- All open-source-release changes down to, and including, TBB 2.0 GOLD
+    below, were incorporated into this release.
+- Made a number of changes to the officially supported OS list:
+    Added Linux* OSs:
+       Asianux* 3, Debian* 4.0, Fedora Core* 6, Fedora* 7,
+       Turbo Linux* 11, Ubuntu* 7.04;
+    Dropped Linux* OSs:
+       Asianux* 2, Fedora Core* 4, Haansoft* Linux 2006 Server,
+       Mandriva/Mandrake* 10.1, Miracle Linux* 4.0,
+       Red Flag* DC Server 5.0;
+    Only Mac OS* X 10.4.9 (and forward) and Xcode* tool suite 2.4.1 (and
+       forward) are now supported.
+- Commercial installers on Linux* fixed to recommend the correct
+    binaries to use in more cases, with less unnecessary warnings.
+- Changes to eliminate spurious build warnings.
+
+Open-source contributions integrated:
+
+- Two small header guard macro patches; it also fixed bug #94.
+- New blocked_range3d class.
+
+Bugs fixed:
+
+- 93 - Removed misleading comments in task.h.
+- 94 - See above.
+
+------------------------------------------------------------------------
+20070815 open-source release
+
+Changes:
+
+- Changes to eliminate spurious build warnings.
+- Engineering work in progress on concurrent_vector allocator behavior.
+- Added hooks to use the Intel(R) compiler code coverage tools.
+
+Open-source contributions integrated:
+
+- Mac OS* X build warning patch.
+
+Bugs fixed:
+
+- 88 - Fixed TBB compilation errors if both VS2005 and Windows SDK are
+    installed.
+
+------------------------------------------------------------------------
+20070719 open-source release
+
+Changes:
+
+- Minor update to TBB 2.0 GOLD below.
+- Changes to eliminate spurious build warnings.
+
+------------------------------------------------------------------------
+TBB 2.0 GOLD commercial-aligned release (package 010, July 19, 2007)
+
+Corresponds to commercial 010 (for Linux*, 012) packages.
+
+- TBB open-source debut release.
+
+------------------------------------------------------------------------
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/COPYING b/deal.II/contrib/tbb/tbb22_20090809oss/COPYING
new file mode 100644 (file)
index 0000000..5af6ed8
--- /dev/null
@@ -0,0 +1,353 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser 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) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <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 Lesser General
+Public License instead of this License.
+----------------     END OF Gnu General Public License     ----------------
+
+The source code of Threading Building Blocks is distributed under version 2
+of the GNU General Public License, with the so-called "runtime exception,"
+as follows (or see any header or implementation file):
+
+   As a special exception, you may use this file as part of a free software
+   library without restriction.  Specifically, if other files instantiate
+   templates or use macros or inline functions from this file, or you compile
+   this file and link it with other files to produce an executable, this
+   file does not by itself cause the resulting executable to be covered by
+   the GNU General Public License.  This exception does not however
+   invalidate any other reasons why the executable file might be covered by
+   the GNU General Public License.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/Makefile
new file mode 100644 (file)
index 0000000..ceac272
--- /dev/null
@@ -0,0 +1,85 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+tbb_root?=.
+include $(tbb_root)/build/common.inc
+.PHONY: default all tbb tbbmalloc test examples
+
+#workaround for non-depend targets tbb and tbbmalloc which both depend on version_string.tmp
+#According to documentation submakes should run in parallel
+.NOTPARALLEL: tbb tbbmalloc
+
+default: tbb tbbmalloc
+
+all: tbb tbbmalloc test examples
+
+tbb: mkdir
+       $(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.tbb cfg=debug tbb_root=$(tbb_root)
+       $(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.tbb cfg=release tbb_root=$(tbb_root)
+
+tbbmalloc: mkdir
+       $(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc tbb_root=$(tbb_root)
+       $(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc tbb_root=$(tbb_root)
+
+test: tbb tbbmalloc
+       -$(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_test tbb_root=$(tbb_root)
+       -$(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.test cfg=debug tbb_root=$(tbb_root)
+       -$(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc_test tbb_root=$(tbb_root)
+       -$(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.test cfg=release tbb_root=$(tbb_root) 
+
+rml: mkdir
+       $(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.rml cfg=debug tbb_root=$(tbb_root)
+       $(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.rml cfg=release tbb_root=$(tbb_root)
+
+
+examples: tbb tbbmalloc
+       $(MAKE) -C examples -r -f Makefile tbb_root=.. release test
+
+.PHONY: clean clean_examples mkdir info
+
+clean: clean_examples
+       $(shell $(RM) $(work_dir)_release$(SLASH)*.* >$(NUL) 2>$(NUL))
+       $(shell $(RD) $(work_dir)_release >$(NUL) 2>$(NUL))
+       $(shell $(RM) $(work_dir)_debug$(SLASH)*.* >$(NUL) 2>$(NUL))
+       $(shell $(RD) $(work_dir)_debug >$(NUL) 2>$(NUL))
+       @echo clean done
+
+clean_examples:
+       $(shell $(MAKE) -s -i -r -C examples -f Makefile tbb_root=.. clean >$(NUL) 2>$(NUL))
+
+mkdir:
+       $(shell $(MD) "$(work_dir)_release" >$(NUL) 2>$(NUL))
+       $(if $(subst undefined,,$(origin_build_dir)),,cd "$(work_dir)_release" && $(MAKE_TBBVARS) $(tbb_build_prefix)_release)
+       $(shell $(MD) "$(work_dir)_debug" >$(NUL) 2>$(NUL))
+       $(if $(subst undefined,,$(origin_build_dir)),,cd "$(work_dir)_debug" && $(MAKE_TBBVARS) $(tbb_build_prefix)_debug)
+
+info:
+       @echo OS: $(tbb_os)
+       @echo arch=$(arch)
+       @echo compiler=$(compiler)
+       @echo runtime=$(runtime)
+       @echo tbb_build_prefix=$(tbb_build_prefix)
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/README b/deal.II/contrib/tbb/tbb22_20090809oss/README
new file mode 100644 (file)
index 0000000..67ab8ad
--- /dev/null
@@ -0,0 +1,11 @@
+Threading Building Blocks - README
+
+See index.html for directions and documentation.
+
+If source is present (./Makefile and src/ directories),
+type 'gmake' in this directory to build and test.
+
+See examples/index.html for runnable examples and directions.
+
+See http://threadingbuildingblocks.org for full documentation
+and software information.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/FreeBSD.gcc.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/FreeBSD.gcc.inc
new file mode 100644 (file)
index 0000000..3004535
--- /dev/null
@@ -0,0 +1,93 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -Wall
+DYLIB_KEY = -shared
+
+TBB_NOSTRICT = 1
+
+CPLUS = g++ 
+CONLY = gcc
+LIB_LINK_FLAGS = -shared
+LIBS = -lpthread 
+C_FLAGS = $(CPLUS_FLAGS)
+
+ifeq ($(cfg), release)
+        CPLUS_FLAGS = -O2 -DUSE_PTHREAD
+endif
+ifeq ($(cfg), debug)
+        CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD
+endif
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+
+ifeq (ia64,$(arch))
+# Position-independent code (PIC) is a must on IA-64, even for regular (not shared) executables
+    CPLUS_FLAGS += $(PIC_KEY)
+endif 
+
+ifeq (intel64,$(arch))
+    CPLUS_FLAGS += -m64
+    LIB_LINK_FLAGS += -m64
+endif 
+
+ifeq (ia32,$(arch))
+    CPLUS_FLAGS += -m32
+    LIB_LINK_FLAGS += -m32
+endif 
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+ASSEMBLY_SOURCE=$(arch)-gas
+ifeq (ia64,$(arch))
+    ASM=as
+    TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o
+endif 
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions -fno-schedule-insns2
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/FreeBSD.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/FreeBSD.inc
new file mode 100644 (file)
index 0000000..82b3daa
--- /dev/null
@@ -0,0 +1,81 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+ifndef arch
+        ifeq ($(shell uname -m),i386)
+                export arch:=ia32
+        endif
+        ifeq ($(shell uname -m),ia64)
+                export arch:=ia64
+        endif
+        ifeq ($(shell uname -m),amd64)
+                export arch:=intel64
+        endif
+endif
+
+ifndef runtime
+        gcc_version:=$(shell gcc -v 2>&1 | grep 'gcc version' | sed -e 's/^gcc version //' | sed -e 's/ .*$$//')
+        os_version:=$(shell uname -r)
+        os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')
+        export runtime:=cc$(gcc_version)_kernel$(os_kernel_version)
+endif
+
+native_compiler := gcc
+export compiler ?= gcc
+debugger ?= gdb
+
+CMD=$(SHELL) -c
+CWD=$(shell pwd)
+RM?=rm -f
+RD?=rmdir
+MD?=mkdir -p
+NUL= /dev/null
+SLASH=/
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
+MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
+
+ifdef LD_LIBRARY_PATH
+        export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH)
+else
+        export LD_LIBRARY_PATH := .
+endif
+
+####### Build settings ########################################################
+
+OBJ = o
+DLL = so
+
+TBB.DEF = 
+TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+LINK_TBB.LIB = $(TBB.LIB)
+
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.LIB = $(MALLOC.DLL)
+
+TBB_NOSTRICT=1
+
+TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/Makefile.rml b/deal.II/contrib/tbb/tbb22_20090809oss/build/Makefile.rml
new file mode 100644 (file)
index 0000000..18ea885
--- /dev/null
@@ -0,0 +1,159 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+tbb_root ?= $(TBB22_INSTALL_DIR)
+BUILDING_PHASE=1
+include $(tbb_root)/build/common.inc
+DEBUG_SUFFIX=$(findstring _debug,_$(cfg))
+
+# default target
+default_rml: rml rml_test
+
+RML_ROOT ?= $(tbb_root)/src/rml
+RML_SERVER_ROOT = $(RML_ROOT)/server
+
+VPATH = $(tbb_root)/src/tbb $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE)
+VPATH += $(RML_ROOT)/server $(RML_ROOT)/client $(RML_ROOT)/test
+
+include $(tbb_root)/build/common_rules.inc
+
+#--------------------------------------------------------------------------
+# Define rules for making the RML server shared library and client objects.
+#--------------------------------------------------------------------------
+
+# Object files that make up RML server 
+RML_SERVER.OBJ = rml_server.$(OBJ)
+
+# Object files that RML clients need
+RML_TBB_CLIENT.OBJ = rml_tbb.$(OBJ) dynamic_link.$(OBJ)
+RML_OMP_CLIENT.OBJ = rml_omp.$(OBJ) omp_dynamic_link.$(OBJ)
+
+RML.OBJ = $(RML_SERVER.OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ)
+ifeq (windows,$(tbb_os))
+RML_ASM.OBJ = $(if $(findstring intel64,$(arch)),$(TBB_ASM.OBJ))
+endif
+ifeq (linux,$(tbb_os))
+RML_ASM.OBJ = $(if $(findstring ia64,$(arch)),$(TBB_ASM.OBJ))
+endif
+
+RML_TBB_DEP= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) concurrent_vector_rml.$(OBJ) tbb_misc_rml.$(OBJ)
+TBB_DEP_NON_RML_TEST= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) $(RML_ASM.OBJ)
+TBB_DEP_RML_TEST= $(RML_ASM.OBJ)
+ifeq ($(cfg),debug)
+RML_TBB_DEP+= spin_mutex_rml.$(OBJ) 
+TBB_DEP_NON_RML_TEST+= tbb_misc_rml.$(OBJ) 
+TBB_DEP_RML_TEST+= tbb_misc_rml.$(OBJ) 
+endif
+LIBS += $(LIBDL)
+
+INCLUDES += $(INCLUDE_KEY)$(RML_ROOT)/include $(INCLUDE_KEY).
+T_INCLUDES = $(INCLUDES) $(INCLUDE_KEY)$(tbb_root)/src/test $(INCLUDE_KEY)$(RML_SERVER_ROOT)
+WARNING_SUPPRESS += $(RML_WARNING_SUPPRESS) 
+
+# Suppress superfluous warnings for RML compilation
+R_CPLUS_FLAGS =  $(subst DO_ITT_NOTIFY,DO_ITT_NOTIFY=0,$(CPLUS_FLAGS_NOSTRICT)) $(WARNING_SUPPRESS) \
+                $(DEFINE_KEY)TBB_USE_THREADING_TOOLS=0 $(DEFINE_KEY)__TBB_RML_STATIC=1 $(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1
+
+%.$(OBJ): %.cpp
+       $(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(INCLUDES) $<
+
+tbb_misc_rml.$(OBJ): version_string.tmp
+
+RML_TEST.OBJ = test_hunk.$(OBJ) test_job_automaton.$(OBJ) test_ring.$(OBJ) test_thread_monitor.$(OBJ) test_rml_tbb.$(OBJ) test_rml_omp.$(OBJ) test_rml_mixed.$(OBJ)
+
+$(RML_TBB_DEP): %_rml.$(OBJ): %.cpp
+       $(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(R_CPLUS_FLAGS) $(PIC_KEY) $(INCLUDES) $< 
+
+$(RML_TEST.OBJ): %.$(OBJ): %.cpp
+       $(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(T_INCLUDES) $<
+
+ifneq (,$(RML.DEF))
+rml.def: $(RML.DEF)
+       $(CMD) "$(CPLUS) $(PREPROC_ONLY) $(RML.DEF) $(filter $(DEFINE_KEY)%,$(CPLUS_FLAGS)) >rml.def 2>$(NUL) || exit 0"
+
+LIB_LINK_FLAGS += $(EXPORT_KEY)rml.def
+$(RML.DLL): rml.def
+endif
+
+$(RML.DLL): BUILDING_LIBRARY = $(RML.DLL)
+$(RML.DLL): $(RML_SERVER.OBJ) $(RML.RES) $(RML_NO_VERSION.DLL) $(RML_TBB_DEP) $(RML_ASM.OBJ)
+       $(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(RML.DLL) $(RML_SERVER.OBJ) $(RML_TBB_DEP) $(RML_ASM.OBJ) $(RML.RES) $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS)
+
+ifneq (,$(RML_NO_VERSION.DLL))
+$(RML_NO_VERSION.DLL):
+       echo "INPUT ($(RML.DLL))" > $(RML_NO_VERSION.DLL)
+endif
+
+rml: $(RML.DLL) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ)
+
+#------------------------------------------------------
+# End of rules for making the RML server shared library
+#------------------------------------------------------
+
+#------------------------------------------------------
+# Define rules for making the RML unit tests
+#------------------------------------------------------
+
+add_debug=$(basename $(1))_debug$(suffix $(1))
+cross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1))
+
+RML_TESTS = test_hunk.exe test_job_automaton.exe test_ring.exe test_thread_monitor.exe test_rml_tbb.exe test_rml_omp.exe test_rml_mixed.exe test_rml_omp_c_linkage.exe
+
+test_rml_tbb.exe: test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS)
+
+test_rml_omp.exe: test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS) 
+
+test_rml_mixed.exe: test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS) 
+
+rml_omp_stub.$(OBJ): rml_omp_stub.cpp
+       $(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(WARNING_SUPPRESS) $(T_INCLUDES) $(PIC_KEY) $<
+
+test_rml_omp_c_linkage.exe: test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ)
+       $(CONLY) $(C_FLAGS) $(OUTPUT_KEY)$@ test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ)
+
+test_%.exe: test_%.$(OBJ) $(TBB_DEP_NON_RML_TEST)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS)
+
+### run_cmd is usually empty
+rml_test: $(call cross_suffix,$(RML.DLL)) $(RML_TESTS)
+       $(run_cmd) ./test_hunk.exe
+       $(run_cmd) ./test_job_automaton.exe
+       $(run_cmd) ./test_ring.exe
+       $(run_cmd) ./test_thread_monitor.exe
+       $(run_cmd) ./test_rml_tbb.exe
+       $(run_cmd) ./test_rml_omp.exe
+       $(run_cmd) ./test_rml_mixed.exe
+       $(run_cmd) ./test_rml_omp_c_linkage.exe
+
+#------------------------------------------------------
+# End of rules for making the TBBMalloc unit tests
+#------------------------------------------------------
+
+# Include automatically generated dependences
+-include *.d
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/Makefile.tbb b/deal.II/contrib/tbb/tbb22_20090809oss/build/Makefile.tbb
new file mode 100644 (file)
index 0000000..ba6c5dc
--- /dev/null
@@ -0,0 +1,125 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+#------------------------------------------------------------------------------
+# Define rules for making the TBB shared library.
+#------------------------------------------------------------------------------
+
+tbb_root ?= "$(TBB22_INSTALL_DIR)"
+BUILDING_PHASE=1
+include $(tbb_root)/build/common.inc
+DEBUG_SUFFIX=$(findstring _debug,_$(cfg))
+
+#------------------------------------------------------------
+# Define static pattern rules dealing with .cpp source files
+#------------------------------------------------------------
+$(warning CONFIG: cfg=$(cfg) arch=$(arch) compiler=$(compiler) os=$(tbb_os) runtime=$(runtime))
+
+default_tbb: $(TBB.DLL)
+.PHONY: default_tbb tbbvars clean
+.PRECIOUS: %.$(OBJ)
+
+VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/old
+
+CPLUS_FLAGS += $(PIC_KEY) $(DEFINE_KEY)__TBB_BUILD=1
+
+ifeq (1,$(TBB_NOSTRICT))
+# GNU 3.2.3 headers have a ISO syntax that is rejected by Intel compiler in -strict_ansi mode.
+# The Mac uses gcc, so the list is empty for that platform.
+# The files below need the -strict_ansi flag downgraded to -ansi to compile
+
+KNOWN_NOSTRICT = concurrent_hash_map.o \
+       concurrent_queue.o    \
+       concurrent_vector_v2.o \
+       concurrent_vector.o
+
+endif
+
+# Object files (that were compiled from C++ code) that gmake up TBB
+TBB_CPLUS.OBJ = concurrent_hash_map.$(OBJ) \
+               concurrent_queue.$(OBJ) \
+               concurrent_vector.$(OBJ) \
+               dynamic_link.$(OBJ) \
+               itt_notify.$(OBJ) \
+               cache_aligned_allocator.$(OBJ) \
+               pipeline.$(OBJ) \
+               queuing_mutex.$(OBJ) \
+               queuing_rw_mutex.$(OBJ) \
+               spin_rw_mutex.$(OBJ) \
+               spin_mutex.$(OBJ) \
+               task.$(OBJ) \
+               tbb_misc.$(OBJ) \
+               mutex.$(OBJ) \
+               recursive_mutex.$(OBJ) \
+               tbb_thread.$(OBJ) \
+               itt_notify_proxy.$(OBJ) \
+               itt_annotate.$(OBJ)
+
+# OLD/Legacy object files for backward binary compatibility
+ifeq (,$(findstring $(DEFINE_KEY)TBB_NO_LEGACY,$(CPLUS_FLAGS)))
+TBB_CPLUS_OLD.OBJ = \
+               concurrent_vector_v2.$(OBJ) \
+               concurrent_queue_v2.$(OBJ) \
+               spin_rw_mutex_v2.$(OBJ)
+endif
+
+# Object files that gmake up TBB (TBB_ASM.OBJ is platform-specific)
+TBB.OBJ = $(TBB_CPLUS.OBJ) $(TBB_CPLUS_OLD.OBJ) $(TBB_ASM.OBJ)
+
+# Suppress superfluous warnings for TBB compilation
+WARNING_KEY += $(WARNING_SUPPRESS)
+
+ifneq (,$(RML))
+VPATH += $(tbb_root)/src/rml/client
+TBB.OBJ += rml_tbb.$(OBJ) private_server.$(OBJ)
+CPLUS_FLAGS += $(DEFINE_KEY)__TBB_RML=1 $(INCLUDE_KEY)$(tbb_root)/src/rml/include
+CXX_WARN_SUPPRESS = $(RML_WARNING_SUPPRESS)
+endif 
+
+include $(tbb_root)/build/common_rules.inc
+
+ifneq (,$(TBB.DEF))
+tbb.def: $(TBB.DEF)
+       $(CMD) "$(CPLUS) $(PREPROC_ONLY) $(TBB.DEF) $(INCLUDES) $(filter $(DEFINE_KEY)%,$(CPLUS_FLAGS)) >tbb.def 2>$(NUL) || exit 0"
+
+LIB_LINK_FLAGS += $(EXPORT_KEY)tbb.def
+$(TBB.DLL): tbb.def
+endif
+
+$(TBB.DLL): BUILDING_LIBRARY = $(TBB.DLL)
+$(TBB.DLL): $(TBB.OBJ) $(TBB.RES) tbbvars $(TBB_NO_VERSION.DLL)
+       $(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(TBB.DLL) $(TBB.OBJ) $(TBB.RES) $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS)
+
+ifneq (,$(TBB_NO_VERSION.DLL))
+$(TBB_NO_VERSION.DLL):
+       echo "INPUT ($(TBB.DLL))" > $(TBB_NO_VERSION.DLL)
+endif
+
+#clean:
+#      $(RM) *.$(OBJ) *.$(DLL) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d core core.*[0-9][0-9]
+
+# Include automatically generated dependences
+-include *.d
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/Makefile.tbbmalloc b/deal.II/contrib/tbb/tbb22_20090809oss/build/Makefile.tbbmalloc
new file mode 100644 (file)
index 0000000..1c84bc9
--- /dev/null
@@ -0,0 +1,181 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# default target
+default_malloc: malloc malloc_test
+
+tbb_root ?= $(TBB22_INSTALL_DIR)
+BUILDING_PHASE=1
+TEST_RESOURCE = $(TBB.RES)
+include $(tbb_root)/build/common.inc
+DEBUG_SUFFIX=$(findstring _debug,_$(cfg))
+
+MALLOC_ROOT ?= $(tbb_root)/src/tbbmalloc
+MALLOC_SOURCE_ROOT ?= $(MALLOC_ROOT)
+
+VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/test
+VPATH += $(MALLOC_ROOT) $(MALLOC_SOURCE_ROOT)
+
+KNOWN_NOSTRICT = test_ScalableAllocator_STL.$(OBJ) test_malloc_compliance.$(OBJ) test_malloc_overload.$(OBJ)
+
+CPLUS_FLAGS += $(if $(crosstest),$(DEFINE_KEY)__TBBMALLOC_NO_IMPLICIT_LINKAGE=1)
+
+include $(tbb_root)/build/common_rules.inc
+
+#------------------------------------------------------
+# Define rules for making the TBBMalloc shared library.
+#------------------------------------------------------
+
+# Object files that make up TBBMalloc
+MALLOC_CPLUS.OBJ = tbbmalloc.$(OBJ) dynamic_link.$(OBJ)
+MALLOC_CUSTOM.OBJ += tbb_misc_malloc.$(OBJ)
+MALLOC_ASM.OBJ = $(TBB_ASM.OBJ)
+
+# MALLOC_CPLUS.OBJ is built in two steps due to Intel Compiler Tracker # C69574
+MALLOC.OBJ := $(MALLOC_CPLUS.OBJ) $(MALLOC_ASM.OBJ) $(MALLOC_CUSTOM.OBJ) MemoryAllocator.$(OBJ) itt_notify_proxy.$(OBJ)
+MALLOC_CPLUS.OBJ += MemoryAllocator.$(OBJ)
+PROXY.OBJ := proxy.$(OBJ) tbb_function_replacement.$(OBJ)
+M_CPLUS_FLAGS := $(subst $(WARNING_KEY),,$(M_CPLUS_FLAGS)) $(DEFINE_KEY)__TBB_BUILD=1
+M_INCLUDES = $(INCLUDES) $(INCLUDE_KEY)$(MALLOC_ROOT) $(INCLUDE_KEY)$(MALLOC_SOURCE_ROOT)
+
+# Suppress superfluous warnings for TBBmalloc compilation
+$(MALLOC.OBJ): M_CPLUS_FLAGS += $(WARNING_SUPPRESS)
+
+itt_notify_proxy.$(OBJ): C_FLAGS += $(PIC_KEY)
+
+$(PROXY.OBJ): %.$(OBJ): %.cpp
+       $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(PIC_KEY) $(M_INCLUDES) $<
+
+$(MALLOC_CPLUS.OBJ): %.$(OBJ): %.cpp
+       $(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(M_INCLUDES) $<
+
+tbb_misc_malloc.$(OBJ): tbb_misc.cpp version_string.tmp
+       $(CPLUS) $(COMPILE_ONLY) $(subst -strict_ansi,-ansi,$(M_CPLUS_FLAGS)) $(PIC_KEY) $(OUTPUTOBJ_KEY)$@ $(INCLUDE_KEY). $(INCLUDES) $<
+
+MALLOC_LINK_FLAGS = $(LIB_LINK_FLAGS)
+PROXY_LINK_FLAGS = $(LIB_LINK_FLAGS) 
+
+ifneq (,$(MALLOC.DEF))
+tbbmalloc.def: $(MALLOC.DEF)
+       $(CMD) "$(CPLUS) $(PREPROC_ONLY) $(MALLOC.DEF) $(filter $(DEFINE_KEY)%,$(CPLUS_FLAGS)) >tbbmalloc.def 2>$(NUL) || exit 0"
+
+MALLOC_LINK_FLAGS += $(EXPORT_KEY)tbbmalloc.def
+$(MALLOC.DLL): tbbmalloc.def
+endif
+
+$(MALLOC.DLL): BUILDING_LIBRARY = $(MALLOC.DLL)
+$(MALLOC.DLL): $(MALLOC.OBJ) $(MALLOC.RES) $(MALLOC_NO_VERSION.DLL)
+       $(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(MALLOC.DLL) $(MALLOC.OBJ) $(MALLOC.RES) $(LIB_LINK_LIBS) $(MALLOC_LINK_FLAGS)
+
+ifneq (,$(MALLOCPROXY.DEF))
+tbbmallocproxy.def: $(MALLOCPROXY.DEF)
+       $(CMD) "$(CPLUS) $(PREPROC_ONLY) $(MALLOCPROXY.DEF) $(filter $(DEFINE_KEY)%,$(CPLUS_FLAGS)) >tbbmallocproxy.def 2>$(NUL) || exit 0"
+
+PROXY_LINK_FLAGS += $(EXPORT_KEY)tbbmallocproxy.def
+$(MALLOCPROXY.DLL): tbbmallocproxy.def
+endif
+
+ifneq (,$(MALLOCPROXY.DLL))
+$(MALLOCPROXY.DLL): BUILDING_LIBRARY = $(MALLOCPROXY.DLL)
+$(MALLOCPROXY.DLL): $(PROXY.OBJ) $(MALLOCPROXY_NO_VERSION.DLL) $(MALLOC.DLL) $(MALLOC.RES)
+       $(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(MALLOCPROXY.DLL) $(PROXY.OBJ) $(MALLOC.RES) $(LIB_LINK_LIBS) $(LINK_MALLOC.LIB) $(PROXY_LINK_FLAGS)
+
+malloc: $(MALLOCPROXY.DLL)
+endif
+
+ifneq (,$(MALLOC_NO_VERSION.DLL))
+$(MALLOC_NO_VERSION.DLL):
+       echo "INPUT ($(MALLOC.DLL))" > $(MALLOC_NO_VERSION.DLL)
+endif
+
+ifneq (,$(MALLOCPROXY_NO_VERSION.DLL))
+$(MALLOCPROXY_NO_VERSION.DLL):
+       echo "INPUT ($(MALLOCPROXY.DLL))" > $(MALLOCPROXY_NO_VERSION.DLL)
+endif
+
+malloc: $(MALLOC.DLL) $(MALLOCPROXY.DLL)
+
+malloc_dll: $(MALLOC.DLL) 
+
+malloc_proxy_dll: $(MALLOCPROXY.DLL)
+
+.PHONY: malloc malloc_dll malloc_proxy_dll
+
+#------------------------------------------------------
+# End of rules for making the TBBMalloc shared library
+#------------------------------------------------------
+
+#------------------------------------------------------
+# Define rules for making the TBBMalloc unit tests
+#------------------------------------------------------
+
+add_debug=$(basename $(1))_debug$(suffix $(1))
+cross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1))
+
+MALLOC_MAIN_TESTS = test_ScalableAllocator.$(TEST_EXT) test_ScalableAllocator_STL.$(TEST_EXT) test_malloc_compliance.$(TEST_EXT) test_malloc_regression.$(TEST_EXT) test_malloc_functionality.$(TEST_EXT)
+MALLOC_OVERLOAD_TESTS =  test_malloc_overload.$(TEST_EXT) test_malloc_overload_proxy.$(TEST_EXT)
+
+MALLOC_LIB = $(call cross_suffix,$(MALLOC.LIB))
+MALLOC_PROXY_LIB = $(call cross_suffix,$(MALLOCPROXY.LIB))
+
+ifeq (windows.gcc,$(tbb_os).$(compiler))
+test_malloc_overload.$(TEST_EXT): LIBS += $(MALLOC_PROXY_LIB)
+endif
+
+test_malloc_overload.$(TEST_EXT): test_malloc_overload.$(OBJ)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LIBDL) $(LIBS) $(LINK_FLAGS)
+test_malloc_overload_proxy.$(TEST_EXT): test_malloc_overload.$(OBJ) $(MALLOC_PROXY_LIB)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LIBDL) $(MALLOC_PROXY_LIB) $(LIBS) $(LINK_FLAGS)
+
+$(MALLOC_MAIN_TESTS): %.$(TEST_EXT): %.$(OBJ) $(MALLOC_LIB)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(MALLOC_LIB) $(LIBS) $(LINK_FLAGS)
+
+ifeq (,$(NO_C_TESTS))
+MALLOC_C_TESTS = test_malloc_pure_c.$(TEST_EXT)
+
+$(MALLOC_C_TESTS): %.$(TEST_EXT): %.$(OBJ) $(MALLOC_LIB)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBS) $(LINK_FLAGS)
+endif
+
+# run_cmd is usually empty
+malloc_test: $(call cross_suffix,$(MALLOC.DLL)) $(MALLOC_MAIN_TESTS) $(MALLOC_C_TESTS) $(MALLOC_OVERLOAD_TESTS) $(AUX_TEST_DEPENDENCIES)
+       $(run_cmd) ./test_malloc_functionality.$(TEST_EXT) 1:4
+       $(run_cmd) $(TEST_LAUNCHER) -l $(call cross_suffix,$(MALLOCPROXY.DLL)) test_malloc_overload.$(TEST_EXT)
+       $(run_cmd) $(TEST_LAUNCHER) test_malloc_overload_proxy.$(TEST_EXT)
+       $(run_cmd) $(TEST_LAUNCHER) test_malloc_compliance.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_ScalableAllocator.$(TEST_EXT)
+       $(run_cmd) ./test_ScalableAllocator_STL.$(TEST_EXT)
+       $(run_cmd) ./test_malloc_regression.$(TEST_EXT)
+ifeq (,$(NO_C_TESTS))
+       $(run_cmd) ./test_malloc_pure_c.$(TEST_EXT)
+endif
+
+#------------------------------------------------------
+# End of rules for making the TBBMalloc unit tests
+#------------------------------------------------------
+
+# Include automatically generated dependences
+-include *.d
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/Makefile.test b/deal.II/contrib/tbb/tbb22_20090809oss/build/Makefile.test
new file mode 100644 (file)
index 0000000..cf9dbbf
--- /dev/null
@@ -0,0 +1,324 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+#------------------------------------------------------------------------------
+# Define rules for making the TBB tests.
+#------------------------------------------------------------------------------
+.PHONY: default test_tbb_plain test_tbb_old clean
+
+default: test_tbb_plain test_tbb_old
+
+tbb_root ?= $(TBB22_INSTALL_DIR)
+BUILDING_PHASE=1
+TEST_RESOURCE = $(TBB.RES)
+include $(tbb_root)/build/common.inc
+DEBUG_SUFFIX=$(findstring _debug,$(call cross_cfg,_$(cfg)))
+
+ifneq (,$(codecov))
+       profmerge
+       codecov $(if $(findstring -,$(codecov)),$(codecov),) -demang -comp $(tbb_root)/build/codecov.txt
+endif
+
+#------------------------------------------------------------
+# Define static pattern rules dealing with .cpp source files
+#------------------------------------------------------------
+
+VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/old $(tbb_root)/src/test $(tbb_root)/src/perf
+
+CPLUS_FLAGS += $(if $(crosstest),$(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1)
+CPLUS_FLAGS += $(if $(RML),$(DEFINE_KEY)__TEST_TBB_RML=1)
+
+ifeq (1,$(TBB_NOSTRICT))
+# GNU 3.2.3 headers have a ISO syntax that is rejected by Intel compiler in -strict_ansi mode.
+# The Mac uses gcc 4.0, so the list is empty for that platform.
+# The files below need the -strict_ansi flag downgraded to -ansi to compile
+
+KNOWN_NOSTRICT += \
+       test_concurrent_hash_map.o      \
+       test_concurrent_vector.o        \
+       test_concurrent_queue.o         \
+       test_enumerable_thread_specific.o \
+       test_handle_perror.o            \
+       test_cache_aligned_allocator_STL.o      \
+       test_task_scheduler_init.o      \
+       test_model_plugin.o     \
+       test_parallel_do.o      \
+       test_eh_algorithms.o    \
+       test_parallel_sort.o    \
+       test_parallel_for_each.o        \
+       test_task_group.o       \
+       test_tbb_header.o       \
+       test_combinable.o       \
+       test_tbb_version.o
+
+endif
+
+include $(tbb_root)/build/common_rules.inc
+
+# Rule for generating executable test
+%.$(TEST_EXT): %.$(OBJ) $(TBB.LIB)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LINK_TBB.LIB) $(LIBS) $(LINK_FLAGS)
+
+# Rules for generating a test DLL
+%.$(DLL).$(OBJ): %.cpp
+       $(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(CPLUS_FLAGS_NOSTRICT) $(PIC_KEY) $(DEFINE_KEY)_USRDLL $(INCLUDES) $<
+%.$(DLL): %.$(DLL).$(OBJ) $(TBB.LIB)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(PIC_KEY) $< $(LINK_TBB.LIB) $(LIBS) $(LINK_FLAGS) $(DYLIB_KEY)
+
+# Rules for the tests, which use TBB in a dynamically loadable library
+test_model_plugin.$(TEST_EXT): test_model_plugin.$(OBJ) test_model_plugin.$(DLL)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LIBDL) $(LIBS) $(LINK_FLAGS)
+
+TASK_CPP_DEPENDENCIES = $(TBB_ASM.OBJ) cache_aligned_allocator.$(OBJ) dynamic_link.$(OBJ) tbb_misc.$(OBJ) itt_notify.$(OBJ) mutex.$(OBJ) spin_rw_mutex.$(OBJ) spin_mutex.$(OBJ) itt_annotate.$(OBJ)
+ifeq (,$(codecov))
+    TASK_CPP_DEPENDENCIES += itt_notify_proxy.$(OBJ)
+endif
+
+# These executables don't depend on the TBB library, but include task.cpp directly
+TASK_CPP_DIRECTLY_INCLUDED = test_eh_tasks.$(TEST_EXT) \
+ test_task_leaks.$(TEST_EXT) \
+ test_task_assertions.$(TEST_EXT) \
+ test_assembly.$(TEST_EXT)
+
+$(TASK_CPP_DIRECTLY_INCLUDED): WARNING_KEY += $(WARNING_SUPPRESS)
+
+$(TASK_CPP_DIRECTLY_INCLUDED): %.$(TEST_EXT) : %.$(OBJ) $(TASK_CPP_DEPENDENCIES)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBDL) $(LIBS) $(LINK_FLAGS)
+
+test_handle_perror.$(TEST_EXT): test_handle_perror.$(OBJ) tbb_misc.$(OBJ) $(TBB_ASM.OBJ)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LINK_TBB.LIB) $(LIBS) $(LINK_FLAGS)
+
+
+# Rules for the tests, which depend on tbbmalloc
+test_concurrent_hash_map_string.$(TEST_EXT): test_concurrent_hash_map_string.$(OBJ)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LINK_TBB.LIB) $(MALLOC.LIB) $(LIBS) $(LINK_FLAGS)
+
+# Rules for test_virtual tests which override the itt_annotate object
+VIRTUAL_TEST_DEPENDENCIES = $(TBB_ASM.OBJ) \
+               concurrent_hash_map.$(OBJ) \
+               concurrent_queue.$(OBJ) \
+               concurrent_vector.$(OBJ) \
+               dynamic_link.$(OBJ) \
+               itt_notify.$(OBJ) \
+               cache_aligned_allocator.$(OBJ) \
+               pipeline.$(OBJ) \
+               queuing_mutex.$(OBJ) \
+               queuing_rw_mutex.$(OBJ) \
+               spin_rw_mutex.$(OBJ) \
+               spin_mutex.$(OBJ) \
+               tbb_misc.$(OBJ) \
+               mutex.$(OBJ) \
+               recursive_mutex.$(OBJ) \
+               tbb_thread.$(OBJ) \
+               itt_notify_proxy.$(OBJ) \
+               static_task.$(OBJ)
+
+VIRTUAL_TESTS = test_virtual_tasks.$(TEST_EXT) test_virtual_steal.$(TEST_EXT) test_virtual_locks.$(TEST_EXT)
+
+static_task.$(OBJ): task.$(OBJ)
+
+$(VIRTUAL_TESTS): %.$(TEST_EXT): %.$(OBJ) $(VIRTUAL_TEST_DEPENDENCIES)
+       $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBDL) $(LIBS) $(LINK_FLAGS)
+
+# These are in alphabetical order
+TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
+       test_aligned_space.$(TEST_EXT)               \
+       test_task_assertions.$(TEST_EXT)             \
+       test_atomic.$(TEST_EXT)                      \
+       test_blocked_range.$(TEST_EXT)               \
+       test_blocked_range2d.$(TEST_EXT)             \
+       test_blocked_range3d.$(TEST_EXT)             \
+       test_compiler.$(TEST_EXT)                    \
+       test_concurrent_queue.$(TEST_EXT)            \
+       test_concurrent_vector.$(TEST_EXT)           \
+       test_concurrent_hash_map.$(TEST_EXT)         \
+       test_enumerable_thread_specific.$(TEST_EXT)  \
+       test_handle_perror.$(TEST_EXT)               \
+       test_halt.$(TEST_EXT)                        \
+       test_model_plugin.$(TEST_EXT)                \
+       test_mutex.$(TEST_EXT)                       \
+       test_mutex_native_threads.$(TEST_EXT)        \
+       test_rwm_upgrade_downgrade.$(TEST_EXT)       \
+       test_cache_aligned_allocator_STL.$(TEST_EXT) \
+       test_cache_aligned_allocator.$(TEST_EXT)     \
+       test_parallel_for.$(TEST_EXT)                \
+       test_parallel_reduce.$(TEST_EXT)             \
+       test_parallel_sort.$(TEST_EXT)               \
+       test_parallel_scan.$(TEST_EXT)               \
+       test_parallel_while.$(TEST_EXT)              \
+       test_parallel_do.$(TEST_EXT)                 \
+       test_pipeline.$(TEST_EXT)                    \
+       test_pipeline_with_tbf.$(TEST_EXT)           \
+       test_task_scheduler_init.$(TEST_EXT)         \
+       test_task_scheduler_observer.$(TEST_EXT)     \
+       test_task.$(TEST_EXT)                        \
+       test_task_leaks.$(TEST_EXT)                  \
+       test_tbb_thread.$(TEST_EXT)                  \
+       test_tick_count.$(TEST_EXT)                  \
+       test_inits_loop.$(TEST_EXT)                  \
+       test_yield.$(TEST_EXT)                       \
+       test_eh_tasks.$(TEST_EXT)                    \
+       test_eh_algorithms.$(TEST_EXT)               \
+       test_parallel_invoke.$(TEST_EXT)             \
+       test_task_group.$(TEST_EXT)                  \
+       test_ittnotify.$(TEST_EXT)                   \
+       test_parallel_for_each.$(TEST_EXT)           \
+       test_tbb_header.$(TEST_EXT)                  \
+       test_tbb_version.$(TEST_EXT)                 \
+       test_combinable.$(TEST_EXT)                  \
+       test_task_auto_init.$(TEST_EXT)              \
+       test_virtual_tasks.$(TEST_EXT)               \
+       test_virtual_steal.$(TEST_EXT)               \
+       test_virtual_locks.$(TEST_EXT)               \
+       test_tbb_version.$(TEST_EXT)                 # insert new files right above
+
+ifdef OPENMP_FLAG
+       TEST_TBB_PLAIN.EXE += test_tbb_openmp
+test_openmp.$(TEST_EXT): test_openmp.cpp
+       $(CPLUS) $(OPENMP_FLAG) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(INCLUDES) $< $(LIBS) $(LINK_TBB.LIB) $(LINK_FLAGS)
+.PHONY: test_tbb_openmp
+test_tbb_openmp: test_openmp.$(TEST_EXT)
+       ./test_openmp.$(TEST_EXT) 1:4
+
+endif
+
+# Run tests that are in TEST_TBB_PLAIN.EXE
+# The test are ordered so that simpler components are tested first.
+# If a component Y uses component X, then tests for Y should come after tests for X.
+# Note that usually run_cmd is empty, and tests run directly
+test_tbb_plain: $(TEST_TBB_PLAIN.EXE)
+       $(run_cmd) ./test_assembly.$(TEST_EXT)
+       $(run_cmd) ./test_compiler.$(TEST_EXT)
+        # Yes, 4:8 is intended on the next line. 
+       $(run_cmd) ./test_yield.$(TEST_EXT) 4:8
+       $(run_cmd) ./test_handle_perror.$(TEST_EXT)
+       $(run_cmd) ./test_task_auto_init.$(TEST_EXT)
+       $(run_cmd) ./test_task_scheduler_init.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_task_scheduler_observer.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_task_assertions.$(TEST_EXT)
+       $(run_cmd) ./test_task.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_task_leaks.$(TEST_EXT)
+       $(run_cmd) ./test_atomic.$(TEST_EXT)
+       $(run_cmd) ./test_cache_aligned_allocator.$(TEST_EXT)
+       $(run_cmd) ./test_cache_aligned_allocator_STL.$(TEST_EXT)
+       $(run_cmd) ./test_blocked_range.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_blocked_range2d.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_blocked_range3d.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_parallel_for.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_parallel_sort.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_aligned_space.$(TEST_EXT)
+       $(run_cmd) ./test_parallel_reduce.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_parallel_scan.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_parallel_while.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_parallel_do.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_inits_loop.$(TEST_EXT)
+       $(run_cmd) ./test_mutex.$(TEST_EXT) 1
+       $(run_cmd) ./test_mutex.$(TEST_EXT) 2
+       $(run_cmd) ./test_mutex.$(TEST_EXT) 4
+       $(run_cmd) ./test_mutex_native_threads.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_rwm_upgrade_downgrade.$(TEST_EXT) 4
+        # Yes, 4:8 is intended on the next line. 
+       $(run_cmd) ./test_halt.$(TEST_EXT) 4:8
+       $(run_cmd) ./test_pipeline.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_pipeline_with_tbf.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_tick_count.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_concurrent_queue.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_concurrent_vector.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_concurrent_hash_map.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_enumerable_thread_specific.$(TEST_EXT) 0:4
+       $(run_cmd) ./test_combinable.$(TEST_EXT) 0:4
+       $(run_cmd) ./test_model_plugin.$(TEST_EXT) 4
+       $(run_cmd) ./test_eh_tasks.$(TEST_EXT) 2:4
+       $(run_cmd) ./test_eh_algorithms.$(TEST_EXT) 2:4
+       $(run_cmd) ./test_tbb_thread.$(TEST_EXT)
+       $(run_cmd) ./test_parallel_invoke.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_task_group.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_ittnotify.$(TEST_EXT) 2:2
+       $(run_cmd) ./test_parallel_for_each.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_tbb_header.$(TEST_EXT)
+       $(run_cmd) ./test_virtual_tasks.$(TEST_EXT)
+       $(run_cmd) ./test_virtual_steal.$(TEST_EXT)
+       $(run_cmd) ./test_virtual_locks.$(TEST_EXT)
+       $(run_cmd) ./test_tbb_version.$(TEST_EXT)
+
+CPLUS_FLAGS_DEPRECATED = $(DEFINE_KEY)TBB_DEPRECATED=1 $(subst $(WARNING_KEY),,$(CPLUS_FLAGS_NOSTRICT)) $(WARNING_SUPPRESS)
+
+TEST_TBB_OLD.OBJ = test_concurrent_vector_v2.$(OBJ) test_concurrent_queue_v2.$(OBJ) test_mutex_v2.$(OBJ)
+
+TEST_TBB_DEPRECATED.OBJ = test_concurrent_queue_deprecated.$(OBJ) \
+       test_concurrent_vector_deprecated.$(OBJ) \
+
+
+# For deprecated files, we don't mind warnings etc., thus compilation rules are most relaxed
+$(TEST_TBB_OLD.OBJ): %.$(OBJ): %.cpp
+       $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS_DEPRECATED) $(INCLUDES) $<
+
+%_deprecated.$(OBJ): %.cpp
+       $(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(CPLUS_FLAGS_DEPRECATED) $(INCLUDES) $<
+
+TEST_TBB_OLD.EXE = $(subst .$(OBJ),.$(TEST_EXT),$(TEST_TBB_OLD.OBJ) $(TEST_TBB_DEPRECATED.OBJ))
+
+ifeq (,$(NO_LEGACY_TESTS))
+test_tbb_old: $(TEST_TBB_OLD.EXE)
+       $(run_cmd) ./test_concurrent_vector_v2.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_concurrent_vector_deprecated.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_concurrent_queue_v2.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_concurrent_queue_deprecated.$(TEST_EXT) 1:4
+       $(run_cmd) ./test_mutex_v2.$(TEST_EXT) 1
+       $(run_cmd) ./test_mutex_v2.$(TEST_EXT) 2
+       $(run_cmd) ./test_mutex_v2.$(TEST_EXT) 4
+else
+test_tbb_old:
+       @echo Legacy tests skipped
+endif
+
+test_% debug_%: test_%.$(TEST_EXT) $(AUX_TEST_DEPENDENCIES)
+ifeq (,$(repeat))
+       $(run_cmd) ./$< $(args)
+else
+ifeq (windows,$(tbb_os))
+       for /L %%i in (1,1,$(repeat)) do echo %%i of $(repeat): && $< $(args)
+else
+       for ((i=1;i<=$(repeat);++i)); do echo $$i of $(repeat): && ./$< $(args); done
+endif
+endif # repeat
+ifneq (,$(codecov))
+       profmerge
+       codecov $(if $(findstring -,$(codecov)),$(codecov),) -demang -comp $(tbb_root)/build/codecov.txt
+endif
+
+time_%: time_%.$(TEST_EXT) $(AUX_TEST_DEPENDENCIES)
+       $(run_cmd) ./$< $(args)
+
+
+clean_%: 
+       $(RM) $*.$(OBJ) $*.exe $*.$(DLL) $*.$(LIBEXT) $*.res $*.map $*.ilk $*.pdb $*.exp $*.*manifest $*.tmp $*.d
+
+clean:
+       $(RM) *.$(OBJ) *.exe *.$(DLL) *.$(LIBEXT) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d pgopti.* *.dyn core core.*[0-9][0-9]
+
+# Include automatically generated dependences
+-include *.d
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/SunOS.gcc.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/SunOS.gcc.inc
new file mode 100644 (file)
index 0000000..f60073b
--- /dev/null
@@ -0,0 +1,99 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -Wall
+DYLIB_KEY = -shared
+LIBDL = -ldl
+
+TBB_NOSTRICT = 1
+
+CPLUS = g++ 
+LIB_LINK_FLAGS = -shared
+LIBS = -lpthread -lrt -ldl 
+C_FLAGS = $(CPLUS_FLAGS) -x c
+
+ifeq ($(cfg), release)
+        CPLUS_FLAGS = -O2 -DUSE_PTHREAD
+endif
+ifeq ($(cfg), debug)
+        CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD
+endif
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+
+ifeq (ia64,$(arch))
+# Position-independent code (PIC) is a must for IA-64
+    CPLUS_FLAGS += $(PIC_KEY)
+endif 
+
+ifeq (intel64,$(arch))
+    CPLUS_FLAGS += -m64
+    LIB_LINK_FLAGS += -m64
+endif 
+
+ifeq (ia32,$(arch))
+    CPLUS_FLAGS += -m32
+    LIB_LINK_FLAGS += -m32
+endif 
+
+# for some gcc versions on Solaris, -m64 may imply V9, but perhaps not everywhere (TODO: verify)
+ifeq (sparc,$(arch))
+    CPLUS_FLAGS    += -mcpu=v9 -m64
+    LIB_LINK_FLAGS += -mcpu=v9 -m64
+endif 
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+ASSEMBLY_SOURCE=$(arch)-gas
+ifeq (ia64,$(arch))
+    ASM=ias
+    TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o
+endif 
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions -fno-schedule-insns2
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/SunOS.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/SunOS.inc
new file mode 100644 (file)
index 0000000..a3b378a
--- /dev/null
@@ -0,0 +1,90 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+ifndef arch
+        arch:=$(shell uname -p)
+        ifeq ($(arch),i386)
+            ifeq ($(shell isainfo -b),64)
+                arch:=intel64
+            else
+                arch:=ia32
+            endif
+        endif
+        export arch
+# For non-IA systems running Sun OS, 'arch' will contain whatever is printed by uname -p.
+# In particular, for SPARC architecture it will contain "sparc".
+endif
+
+ifndef runtime
+        gcc_version:=$(shell gcc -v 2>&1 | grep 'gcc version' | sed -e 's/^gcc version //' | sed -e 's/ .*$$//')
+        os_version:=$(shell uname -r)
+        os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')
+        export runtime:=cc$(gcc_version)_kernel$(os_kernel_version)
+endif
+
+native_compiler := suncc
+export compiler ?= suncc
+# debugger ?= gdb
+
+CMD=$(SHELL) -c
+CWD=$(shell pwd)
+RM?=rm -f
+RD?=rmdir
+MD?=mkdir -p
+NUL= /dev/null
+SLASH=/
+MAKE_VERSIONS=bash $(tbb_root)/build/version_info_sunos.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
+MAKE_TBBVARS=bash $(tbb_root)/build/generate_tbbvars.sh
+
+ifeq ($(compiler),suncc)
+        export TBB_CUSTOM_VARS_SH=CXXFLAGS="-I$(CWD)/../include -library=stlport4 $(CXXFLAGS) -M$(CWD)/../build/suncc.map.pause"
+        export TBB_CUSTOM_VARS_CSH=CXXFLAGS "-I$(CWD)/../include -library=stlport4 $(CXXFLAGS) -M$(CWD)/../build/suncc.map.pause"
+endif
+       
+ifdef LD_LIBRARY_PATH
+        export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH)
+else
+        export LD_LIBRARY_PATH := .
+endif
+
+####### Build settings ########################################################
+
+OBJ = o
+DLL = so
+
+TBB.DEF = 
+TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+LINK_TBB.LIB = $(TBB.LIB)
+
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.LIB = $(MALLOC.DLL)
+
+MALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)
+
+TBB_NOSTRICT=1
+
+TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/SunOS.suncc.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/SunOS.suncc.inc
new file mode 100644 (file)
index 0000000..9aac117
--- /dev/null
@@ -0,0 +1,95 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+COMPILE_ONLY = -c -xMMD -errtags
+PREPROC_ONLY = -E -xMMD
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -KPIC
+DYLIB_KEY = -G
+LIBDL = -ldl
+# WARNING_AS_ERROR_KEY = -errwarn=%all
+WARNING_AS_ERROR_KEY = Warning as error
+WARNING_SUPPRESS = -erroff=unassigned,attrskipunsup,badargtype2w,badbinaryopw,wbadasg,wvarhidemem
+tbb_strict=0
+
+TBB_NOSTRICT = 1
+
+CPLUS = CC
+CONLY = cc
+LIB_LINK_FLAGS = -G -R . -M$(tbb_root)/build/suncc.map.pause
+LINK_FLAGS += -M$(tbb_root)/build/suncc.map.pause
+LIBS = -lpthread -lrt -R .
+C_FLAGS = $(CPLUS_FLAGS)
+
+ifeq ($(cfg), release)
+        CPLUS_FLAGS = -mt -xO2 -library=stlport4 -DUSE_PTHREAD $(WARNING_SUPPRESS)
+endif
+ifeq ($(cfg), debug)
+        CPLUS_FLAGS = -mt -DTBB_USE_DEBUG -g -library=stlport4 -DUSE_PTHREAD $(WARNING_SUPPRESS)
+endif
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+
+ifeq (intel64,$(arch))
+    CPLUS_FLAGS += -m64
+    ASM_FLAGS += -m64
+    LIB_LINK_FLAGS += -m64
+endif 
+
+ifeq (ia32,$(arch))
+    CPLUS_FLAGS += -m32
+    LIB_LINK_FLAGS += -m32
+endif 
+
+# TODO: verify whether -m64 implies V9 on relevant Sun Studio versions
+#       (those that handle gcc assembler syntax)
+ifeq (sparc,$(arch))
+    CPLUS_FLAGS    += -m64
+    LIB_LINK_FLAGS += -m64
+endif 
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+ASSEMBLY_SOURCE=$(arch)-fbe
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+M_INCLUDES = $(INCLUDES) -I$(MALLOC_ROOT) -I$(MALLOC_SOURCE_ROOT)
+M_CPLUS_FLAGS = $(CPLUS_FLAGS)
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/codecov.txt b/deal.II/contrib/tbb/tbb22_20090809oss/build/codecov.txt
new file mode 100644 (file)
index 0000000..b22397e
--- /dev/null
@@ -0,0 +1,4 @@
+src/tbb
+src/tbbmalloc
+include/tbb
+source/malloc
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/common.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/common.inc
new file mode 100644 (file)
index 0000000..90af75d
--- /dev/null
@@ -0,0 +1,96 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+ifndef tbb_os
+ ifeq ($(OS), Windows_NT)
+  export tbb_os=windows
+ else
+  OS:=$(shell uname)
+  ifeq ($(OS),)
+   $(error "$(OS) is not supported")
+  else
+   export tbb_os=$(OS)
+   ifeq ($(OS), Linux)
+    export tbb_os=linux
+   endif
+   ifeq ($(OS), Darwin)
+    export tbb_os=macos
+   endif
+  endif # OS successfully detected
+ endif # !Windows
+endif # !tbb_os
+
+ifeq ($(wildcard $(tbb_root)/build/$(tbb_os).inc),)
+  $(error "$(tbb_os)" is not supported. Add build/$(tbb_os).inc file with os-specific settings )
+endif
+
+# detect arch and runtime versions, provide common os-specific definitions
+include $(tbb_root)/build/$(tbb_os).inc
+
+ifeq ($(arch),)
+ $(error Architecture not detected)
+endif
+ifeq ($(runtime),)
+ $(error Runtime version not detected)
+endif
+ifeq ($(wildcard $(tbb_root)/build/$(tbb_os).$(compiler).inc),)
+  $(error Compiler "$(compiler)" is not supported on $(tbb_os). Add build/$(tbb_os).$(compiler).inc file with compiler-specific settings )
+endif
+
+# Support for running debug tests to release library and vice versa
+flip_cfg=$(subst _flipcfg,_release,$(subst _release,_debug,$(subst _debug,_flipcfg,$(1))))
+cross_cfg = $(if $(crosstest),$(call flip_cfg,$(1)),$(1))
+
+ifdef BUILDING_PHASE
+ # Setting default configuration to release
+ cfg?=release
+ # And no lambas support by default for compilers that require special options to enable it
+ lambdas ?= 0
+  # include compiler-specific build configurations
+ -include $(tbb_root)/build/$(tbb_os).$(compiler).inc
+ ifdef extra_inc
+  -include $(tbb_root)/build/$(extra_inc)
+ endif
+endif
+ifneq ($(BUILDING_PHASE),1)
+ # definitions for top-level Makefiles
+ origin_build_dir:=$(origin tbb_build_dir)
+ tbb_build_dir?=$(tbb_root)$(SLASH)build
+ tbb_build_prefix?=$(tbb_os)_$(arch)_$(compiler)_$(runtime)
+ work_dir=$(tbb_build_dir)$(SLASH)$(tbb_build_prefix)
+ ifneq ($(BUILDING_PHASE),0)
+  work_dir:=$(work_dir)
+  # assign new value for tbb_root if path is not absolute (the filter keeps only /* paths)
+  ifeq ($(filter /% $(SLASH)%, $(subst :, ,$(tbb_root)) ),)
+   ifeq ($(origin_build_dir),undefined)
+    override tbb_root:=../..
+   else
+    override tbb_root:=$(CWD)/$(tbb_root)
+   endif
+  endif
+  export tbb_root
+ endif # BUILDING_PHASE != 0
+endif  # BUILDING_PHASE != 1
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/common_rules.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/common_rules.inc
new file mode 100644 (file)
index 0000000..7029052
--- /dev/null
@@ -0,0 +1,125 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+.PRECIOUS: %.$(OBJ) %.$(DLL).$(OBJ) %.exe
+
+ifeq ($(tbb_strict),1)
+  ifeq ($(WARNING_AS_ERROR_KEY),)
+    $(error WARNING_AS_ERROR_KEY is empty)
+  endif
+  # Do not remove line below!
+  WARNING_KEY += $(WARNING_AS_ERROR_KEY)
+endif
+
+ifndef TEST_EXT
+    TEST_EXT = exe
+endif
+
+INCLUDES += $(INCLUDE_KEY)$(tbb_root)/src $(INCLUDE_KEY)$(tbb_root)/include
+
+CPLUS_FLAGS += $(WARNING_KEY) $(CXXFLAGS)
+LINK_FLAGS += $(LDFLAGS)
+LIB_LINK_FLAGS += $(LDFLAGS)
+CPLUS_FLAGS_NOSTRICT:=$(subst -strict_ansi,-ansi,$(CPLUS_FLAGS))
+
+LIB_LINK_CMD ?= $(CPLUS) $(PIC_KEY)
+ifeq ($(origin LIB_OUTPUT_KEY), undefined)
+    LIB_OUTPUT_KEY = $(OUTPUT_KEY)
+endif
+ifeq ($(origin LIB_LINK_LIBS), undefined)
+    LIB_LINK_LIBS = $(LIBDL) $(LIBS)
+endif
+
+CONLY ?= $(CPLUS)
+
+# The most generic rules
+%.$(OBJ): %.cpp
+       $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $<
+
+%.$(OBJ): %.c
+       $(CONLY) $(COMPILE_ONLY) $(C_FLAGS) $(INCLUDES) $<
+
+%.$(OBJ): %.asm
+       $(ASM) $(ASM_FLAGS) $<
+
+%.$(OBJ): %.s
+       cpp <$< | grep -v '^#' >$*.tmp
+       $(ASM) $(ASM_FLAGS) -o $@ $*.tmp
+       rm $*.tmp
+
+# Rule for generating .E file if needed for visual inspection
+%.E: %.cpp
+       $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) $(PREPROC_ONLY) $< >$@
+
+# TODO Rule for generating .asm file if needed for visual inspection
+%.asm: %.cpp
+       $(CPLUS) /c /Fa $(CPLUS_FLAGS) $(INCLUDES) $<
+
+# TODO Rule for generating .s file if needed for visual inspection
+%.s: %.cpp
+       $(CPLUS) -S $(CPLUS_FLAGS) $(INCLUDES) $<
+
+# Customizations
+
+ifeq (1,$(TBB_NOSTRICT))
+# GNU 3.2.3 headers have a ISO syntax that is rejected by Intel compiler in -strict_ansi mode.
+# The Mac uses gcc, so the list is empty for that platform.
+# The files below need the -strict_ansi flag downgraded to -ansi to compile
+
+$(KNOWN_NOSTRICT): %.$(OBJ): %.cpp
+       $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS_NOSTRICT) $(INCLUDES) $<
+endif
+
+$(KNOWN_WARNINGS): %.$(OBJ): %.cpp
+       $(CPLUS) $(COMPILE_ONLY) $(subst $(WARNING_KEY),,$(CPLUS_FLAGS_NOSTRICT)) $(INCLUDES) $<
+
+tbb_misc.$(OBJ): tbb_misc.cpp version_string.tmp
+       $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS_NOSTRICT) $(INCLUDE_KEY). $(INCLUDES) $<
+
+tbb_misc.E: tbb_misc.cpp version_string.tmp
+       $(CPLUS) $(CPLUS_FLAGS_NOSTRICT) $(INCLUDE_KEY). $(INCLUDES) $(PREPROC_ONLY) $< >$@
+
+%.res: %.rc version_string.tmp $(TBB.MANIFEST)
+       rc /Fo$@ $(INCLUDES) $(filter /D%,$(CPLUS_FLAGS)) $<
+
+tbbvars:
+       $(MAKE_TBBVARS)
+
+ifneq (,$(TBB.MANIFEST))
+$(TBB.MANIFEST):
+       cmd /C "echo #include ^<stdio.h^> >tbbmanifest.c"
+       cmd /C "echo int main(){return 0;} >>tbbmanifest.c"
+       cl $(C_FLAGS) tbbmanifest.c
+
+version_string.tmp: $(TBB.MANIFEST)
+       $(MAKE_VERSIONS)
+       cmd /C "echo #define TBB_MANIFEST 1 >> version_string.tmp"
+
+else
+version_string.tmp:
+       $(MAKE_VERSIONS)
+endif
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/detect.js b/deal.II/contrib/tbb/tbb22_20090809oss/build/detect.js
new file mode 100644 (file)
index 0000000..b11c954
--- /dev/null
@@ -0,0 +1,129 @@
+// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+function doWork() {
+               var WshShell = WScript.CreateObject("WScript.Shell");
+
+               var fso = new ActiveXObject("Scripting.FileSystemObject");
+
+               var tmpExec;
+
+               if ( WScript.Arguments.Count() > 1 && WScript.Arguments(1) == "gcc" ) {
+                       if ( WScript.Arguments(0) == "/arch" ) {
+                               WScript.Echo( "ia32" );
+                       }
+                       else if ( WScript.Arguments(0) == "/runtime" ) {
+                               WScript.Echo( "mingw" );
+                       }
+                       return;
+               }
+
+               //Compile binary
+               tmpExec = WshShell.Exec("cmd /c echo int main(){return 0;} >detect.c");
+               while ( tmpExec.Status == 0 ) {
+                       WScript.Sleep(100);
+               }
+               
+               tmpExec = WshShell.Exec("cl /MD detect.c /link /MAP");
+               while ( tmpExec.Status == 0 ) {
+                       WScript.Sleep(100);
+               }
+
+               if ( WScript.Arguments(0) == "/arch" ) {
+                       //read compiler banner
+                       var clVersion = tmpExec.StdErr.ReadAll();
+                       
+                       //detect target architecture
+                       var intel64=/AMD64|EM64T|x64/mgi;
+                       var ia64=/IA-64|Itanium/mgi;
+                       var ia32=/80x86/mgi;
+                       if ( clVersion.match(intel64) ) {
+                               WScript.Echo( "intel64" );
+                       } else if ( clVersion.match(ia64) ) {
+                               WScript.Echo( "ia64" );
+                       } else if ( clVersion.match(ia32) ) {
+                               WScript.Echo( "ia32" );
+                       } else {
+                               WScript.Echo( "unknown" );
+                       }
+               }
+
+               if ( WScript.Arguments(0) == "/runtime" ) {
+                       //read map-file
+                       var map = fso.OpenTextFile("detect.map", 1, 0);
+                       var mapContext = map.readAll();
+                       map.Close();
+                       
+                       //detect runtime
+                       var vc71=/MSVCR71\.DLL/mgi;
+                       var vc80=/MSVCR80\.DLL/mgi;
+                       var vc90=/MSVCR90\.DLL/mgi;
+                       var vc100=/MSVCR100\.DLL/mgi;
+                       var psdk=/MSVCRT\.DLL/mgi;
+                       if ( mapContext.match(vc71) ) {
+                               WScript.Echo( "vc7.1" );
+                       } else if ( mapContext.match(vc80) ) {
+                               WScript.Echo( "vc8" );
+                       } else if ( mapContext.match(vc90) ) {
+                               WScript.Echo( "vc9" );
+                       } else if ( mapContext.match(vc100) ) {
+                               WScript.Echo( "vc10" );
+                       } else if ( mapContext.match(psdk) ) {
+                               // Our current naming convention assumes vc7.1 for 64-bit Windows PSDK
+                               WScript.Echo( "vc7.1" ); 
+                       } else {
+                               WScript.Echo( "unknown" );
+                       }
+               }
+
+               // delete intermediate files
+               if ( fso.FileExists("detect.c") )
+                       fso.DeleteFile ("detect.c", false);
+               if ( fso.FileExists("detect.obj") )
+                       fso.DeleteFile ("detect.obj", false);
+               if ( fso.FileExists("detect.map") )
+                       fso.DeleteFile ("detect.map", false);
+               if ( fso.FileExists("detect.exe") )
+                       fso.DeleteFile ("detect.exe", false);
+               if ( fso.FileExists("detect.exe.manifest") )
+                       fso.DeleteFile ("detect.exe.manifest", false);
+}
+
+if ( WScript.Arguments.Count() > 0 ) {
+       
+       try {
+               doWork();
+       } catch( error )
+       {
+               WScript.Echo( "unknown" );
+               WScript.Quit( 0 );
+       }
+
+} else {
+
+       WScript.Echo( "/arch or /runtime should be set" );
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/generate_tbbvars.bat b/deal.II/contrib/tbb/tbb22_20090809oss/build/generate_tbbvars.bat
new file mode 100644 (file)
index 0000000..0a20885
--- /dev/null
@@ -0,0 +1,98 @@
+@echo off
+REM
+REM Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+REM
+REM This file is part of Threading Building Blocks.
+REM
+REM Threading Building Blocks is free software; you can redistribute it
+REM and/or modify it under the terms of the GNU General Public License
+REM version 2 as published by the Free Software Foundation.
+REM
+REM Threading Building Blocks is distributed in the hope that it will be
+REM useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+REM of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+REM GNU General Public License for more details.
+REM
+REM You should have received a copy of the GNU General Public License
+REM along with Threading Building Blocks; if not, write to the Free Software
+REM Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+REM
+REM As a special exception, you may use this file as part of a free software
+REM library without restriction.  Specifically, if other files instantiate
+REM templates or use macros or inline functions from this file, or you compile
+REM this file and link it with other files to produce an executable, this
+REM file does not by itself cause the resulting executable to be covered by
+REM the GNU General Public License.  This exception does not however
+REM invalidate any other reasons why the executable file might be covered by
+REM the GNU General Public License.
+REM
+if exist tbbvars.bat exit
+echo Generating tbbvars.bat
+echo @echo off>tbbvars.bat
+setlocal
+for %%D in ("%tbb_root%") do set actual_root=%%~fD
+if x%1==x goto without
+
+echo SET TBB22_INSTALL_DIR=%actual_root%>>tbbvars.bat
+echo SET TBB_ARCH_PLATFORM=%arch%\%runtime%>>tbbvars.bat
+echo SET INCLUDE=%%TBB22_INSTALL_DIR%%\include;%%INCLUDE%%>>tbbvars.bat
+echo SET LIB=%%TBB22_INSTALL_DIR%%\build\%1;%%LIB%%>>tbbvars.bat
+echo SET PATH=%%TBB22_INSTALL_DIR%%\build\%1;%%PATH%%>>tbbvars.bat
+
+if exist tbbvars.sh goto skipsh
+set fslash_root=%actual_root:\=/%
+echo Generating tbbvars.sh
+echo #!/bin/sh>tbbvars.sh
+echo export TBB22_INSTALL_DIR="%fslash_root%">>tbbvars.sh
+echo TBB_ARCH_PLATFORM="%arch%\%runtime%">>tbbvars.sh
+echo if [ -z "${PATH}" ]; then>>tbbvars.sh
+echo     export PATH="${TBB22_INSTALL_DIR}/build/%1">>tbbvars.sh
+echo else>>tbbvars.sh
+echo     export PATH="${TBB22_INSTALL_DIR}/build/%1;$PATH">>tbbvars.sh
+echo fi>>tbbvars.sh
+echo if [ -z "${LIB}" ]; then>>tbbvars.sh
+echo     export LIB="${TBB22_INSTALL_DIR}/build/%1">>tbbvars.sh
+echo else>>tbbvars.sh
+echo     export LIB="${TBB22_INSTALL_DIR}/build/%1;$LIB">>tbbvars.sh
+echo fi>>tbbvars.sh
+echo if [ -z "${INCLUDE}" ]; then>>tbbvars.sh
+echo     export INCLUDE="${TBB22_INSTALL_DIR}/include">>tbbvars.sh
+echo else>>tbbvars.sh
+echo     export INCLUDE="${TBB22_INSTALL_DIR}/include;$INCLUDE">>tbbvars.sh
+echo fi>>tbbvars.sh
+:skipsh
+
+if exist tbbvars.csh goto skipcsh
+echo Generating tbbvars.csh
+echo #!/bin/csh>tbbvars.csh
+echo setenv TBB22_INSTALL_DIR "%actual_root%">>tbbvars.csh
+echo setenv TBB_ARCH_PLATFORM "%arch%\%runtime%">>tbbvars.csh
+echo if (! $?PATH) then>>tbbvars.csh
+echo     setenv PATH "${TBB22_INSTALL_DIR}\build\%1">>tbbvars.csh
+echo else>>tbbvars.csh
+echo     setenv PATH "${TBB22_INSTALL_DIR}\build\%1;$PATH">>tbbvars.csh
+echo endif>>tbbvars.csh
+echo if (! $?LIB) then>>tbbvars.csh
+echo     setenv LIB "${TBB22_INSTALL_DIR}\build\%1">>tbbvars.csh
+echo else>>tbbvars.csh
+echo     setenv LIB "${TBB22_INSTALL_DIR}\build\%1;$LIB">>tbbvars.csh
+echo endif>>tbbvars.csh
+echo if (! $?INCLUDE) then>>tbbvars.csh
+echo     setenv INCLUDE "${TBB22_INSTALL_DIR}\include">>tbbvars.csh
+echo else>>tbbvars.csh
+echo     setenv INCLUDE "${TBB22_INSTALL_DIR}\include;$INCLUDE">>tbbvars.csh
+echo endif>>tbbvars.csh
+)
+:skipcsh
+exit
+
+:without
+set bin_dir=%CD%
+echo SET tbb_root=%actual_root%>>tbbvars.bat
+echo SET tbb_bin=%bin_dir%>>tbbvars.bat
+echo SET TBB_ARCH_PLATFORM=%arch%\%runtime%>>tbbvars.bat
+echo SET INCLUDE="%%tbb_root%%\include";%%INCLUDE%%>>tbbvars.bat
+echo SET LIB="%%tbb_bin%%";%%LIB%%>>tbbvars.bat
+echo SET PATH="%%tbb_bin%%";%%PATH%%>>tbbvars.bat
+
+endlocal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/generate_tbbvars.sh b/deal.II/contrib/tbb/tbb22_20090809oss/build/generate_tbbvars.sh
new file mode 100644 (file)
index 0000000..1e1b02c
--- /dev/null
@@ -0,0 +1,132 @@
+#!/bin/bash
+#
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Script used to generate tbbvars.[c]sh scripts
+bin_dir="$PWD"  # 
+cd "$tbb_root"  # keep this comments here
+tbb_root="$PWD" # to make it unsensible
+cd "$bin_dir"   # to EOL encoding
+[ "`uname`" = "Darwin" ] && dll_path="DYLD_LIBRARY_PATH" || dll_path="LD_LIBRARY_PATH" #
+custom_exp="$CXXFLAGS" #
+if [ -z "$TBB_CUSTOM_VARS_SH" ]; then #
+custom_exp_sh="" #
+else #
+custom_exp_sh="export $TBB_CUSTOM_VARS_SH" #
+fi #
+if [ -z "$TBB_CUSTOM_VARS_CSH" ]; then #
+custom_exp_csh="" #
+else #
+custom_exp_csh="setenv $TBB_CUSTOM_VARS_CSH" #
+fi #
+if [ -z "$1" ]; then # custom tbb_build_dir, can't make with TBB_INSTALL_DIR
+[ -f ./tbbvars.sh ] || cat >./tbbvars.sh <<EOF
+#!/bin/bash
+tbb_root="${tbb_root}" #
+tbb_bin="${bin_dir}" #
+if [ -z "\$CPATH" ]; then #
+    export CPATH="\${tbb_root}/include" #
+else #
+    export CPATH="\${tbb_root}/include:\$CPATH" #
+fi #
+if [ -z "\$LIBRARY_PATH" ]; then #
+    export LIBRARY_PATH="\${tbb_bin}" #
+else #
+    export LIBRARY_PATH="\${tbb_bin}:\$LIBRARY_PATH" #
+fi #
+if [ -z "\$${dll_path}" ]; then #
+    export ${dll_path}="\${tbb_bin}" #
+else #
+    export ${dll_path}="\${tbb_bin}:\$${dll_path}" #
+fi #
+${custom_exp_sh} #
+EOF
+[ -f ./tbbvars.csh ] || cat >./tbbvars.csh <<EOF
+#!/bin/csh
+setenv tbb_root "${tbb_root}" #
+setenv tbb_bin "${bin_dir}" #
+if (! \$?CPATH) then #
+    setenv CPATH "\${tbb_root}/include" #
+else #
+    setenv CPATH "\${tbb_root}/include:\$CPATH" #
+endif #
+if (! \$?LIBRARY_PATH) then #
+    setenv LIBRARY_PATH "\${tbb_bin}" #
+else #
+    setenv LIBRARY_PATH "\${tbb_bin}:\$LIBRARY_PATH" #
+endif #
+if (! \$?${dll_path}) then #
+    setenv ${dll_path} "\${tbb_bin}" #
+else #
+    setenv ${dll_path} "\${tbb_bin}:\$${dll_path}" #
+endif #
+${custom_exp_csh} #
+EOF
+else # make with TBB_INSTALL_DIR
+[ -f ./tbbvars.sh ] || cat >./tbbvars.sh <<EOF
+#!/bin/bash
+export TBB22_INSTALL_DIR="${tbb_root}" #
+tbb_bin="\${TBB22_INSTALL_DIR}/build/$1" #
+if [ -z "\$CPATH" ]; then #
+    export CPATH="\${TBB22_INSTALL_DIR}/include" #
+else #
+    export CPATH="\${TBB22_INSTALL_DIR}/include:\$CPATH" #
+fi #
+if [ -z "\$LIBRARY_PATH" ]; then #
+    export LIBRARY_PATH="\${tbb_bin}" #
+else #
+    export LIBRARY_PATH="\${tbb_bin}:\$LIBRARY_PATH" #
+fi #
+if [ -z "\$${dll_path}" ]; then #
+    export ${dll_path}="\${tbb_bin}" #
+else #
+    export ${dll_path}="\${tbb_bin}:\$${dll_path}" #
+fi #
+${custom_exp_sh} #
+EOF
+[ -f ./tbbvars.csh ] || cat >./tbbvars.csh <<EOF
+#!/bin/csh
+setenv TBB22_INSTALL_DIR "${tbb_root}" #
+setenv tbb_bin "\${TBB22_INSTALL_DIR}/build/$1" #
+if (! \$?CPATH) then #
+    setenv CPATH "\${TBB22_INSTALL_DIR}/include" #
+else #
+    setenv CPATH "\${TBB22_INSTALL_DIR}/include:\$CPATH" #
+endif #
+if (! \$?LIBRARY_PATH) then #
+    setenv LIBRARY_PATH "\${tbb_bin}" #
+else #
+    setenv LIBRARY_PATH "\${tbb_bin}:\$LIBRARY_PATH" #
+endif #
+if (! \$?${dll_path}) then #
+    setenv ${dll_path} "\${tbb_bin}" #
+else #
+    setenv ${dll_path} "\${tbb_bin}:\$${dll_path}" #
+endif #
+${custom_exp_csh} #
+EOF
+fi #
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/build/index.html
new file mode 100644 (file)
index 0000000..db60186
--- /dev/null
@@ -0,0 +1,230 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains the internal Makefile infrastructure for Threading Building Blocks.
+
+<P>
+See below for how to <A HREF=#build>build</A> TBB and how to <A HREF=#port>port</A> TBB
+to a new platform, operating system or architecture.
+</P>
+
+<H2>Files</H2>
+The files here are not intended to be used directly.  See below for usage.
+<DL>
+<DT><A HREF="Makefile.tbb">Makefile.tbb</A>
+<DD>Main Makefile to build the TBB library.
+    Invoked via 'make tbb' from <A HREF=../Makefile>top-level Makefile</A>.
+<DT><A HREF="Makefile.tbbmalloc">Makefile.tbbmalloc</A>
+<DD>Main Makefile to build the TBB scalable memory allocator library as well as its tests.
+    Invoked via 'make tbbmalloc' from <A HREF=../Makefile>top-level Makefile</A>.
+<DT><A HREF="Makefile.test">Makefile.test</A>
+<DD>Main Makefile to build and run the tests for the TBB library.
+    Invoked via 'make test' from <A HREF=../Makefile>top-level Makefile</A>.
+<DT><A HREF="common.inc">common.inc</A>
+<DD>Main common included Makefile that includes OS-specific and compiler-specific Makefiles.
+<DT>&lt;os&gt;.inc
+<DD>OS-specific Makefile for a particular &lt;os&gt;.
+<DT>&lt;os&gt;.&lt;compiler&gt;.inc
+<DD>Compiler-specific Makefile for a particular &lt;os&gt; / &lt;compiler&gt; combination.
+<DT>*.sh
+<DD>Infrastructure utilities for Linux*, Mac OS* X, and UNIX*-related systems.
+<DT>*.js, *.bat
+<DD>Infrastructure utilities for Windows* systems.
+</DL>
+
+<A NAME=build><H2>To Build</H2></A>
+<P>
+To port TBB to a new platform, operating system or architecture, see the <A HREF=#port>porting directions</A> below.
+</P>
+
+<H3>Software prerequisites:</H3>
+<OL>
+<LI>C++ compiler for the platform, operating system and architecture of interest.
+    Either the native compiler for your system, or, optionally, the appropriate Intel&reg; C++ compiler, may be used.
+<LI>GNU make utility. On Windows*, if a UNIX* emulator is used to run GNU make,
+    it should be able to run Windows* utilities and commands. On Linux*, Mac OS* X, etc.,
+    shell commands issued by GNU make should execute in a Bourne or BASH compatible shell.
+</OL>
+
+<P>
+TBB libraries can be built by performing the following steps.
+On systems that support only one ABI (e.g., 32-bit), these steps build the libraries for that ABI.
+On systems that support both 64-bit and 32-bit libraries, these steps build the 64-bit libraries
+(Linux*, Mac OS* X, and related systems) or whichever ABI is selected in the development environment (Windows* systems).
+</P>
+<OL>
+<LI>Change to the <A HREF=../index.html>top-level directory</A> of the installed software.
+<LI>If using the Intel&reg; C++ compiler, make sure the appropriate compiler is available in your PATH
+    (e.g., by sourcing the appropriate iccvars script for the compiler to be used).
+<LI>Invoke GNU make using no arguments, for example, 'gmake'.
+</OL>
+
+<P>
+To build TBB libraries for other than the default ABI (e.g., to build 32-bit libraries on Linux*, Mac OS* X,
+or related systems that support both 64-bit and 32-bit libraries), perform the following steps.
+</P>
+<OL>
+<LI>Change to the <A HREF=../index.html>top-level directory</A> of the installed software.
+<LI>If using the Intel&reg; C++ compiler, make sure the appropriate compiler is available in your PATH
+    (e.g., by sourcing the appropriate iccvars script for the compiler to be used).
+<LI>Invoke GNU make as follows, 'gmake arch=ia32'.
+</OL>
+
+<P>The default make target will build the release and debug versions of the TBB library.</P>
+<P>Other targets are available in the top-level Makefile. You might find the following targets useful:
+<UL>
+<LI>'make test' will build and run TBB <A HREF=../src/test>unit-tests</A>;
+<LI>'make examples' will build and run TBB <A HREF=../examples/index.html>examples</A>;
+<LI>'make all' will do all of the above.
+</UL>
+See also the list of other targets below.
+</P>
+
+<P>
+By default, the libraries will be built in sub-directories within the build/ directory.
+The sub-directories are named according to the operating system, architecture, compiler and software environment used
+(the sub-directory names also distinguish release vs. debug libraries).  On Linux*, the software environment comprises
+the GCC, libc and kernel version used.  On Mac OS* X, the software environment comprises the GCC and OS version used.
+On Windows, the software environment comprises the Microsoft* Visual Studio* version used.
+See below for how to change the default build directory.
+</P>
+
+<P>
+To perform different build and/or test operations, use the following steps.
+</P>
+<OL>
+<LI>Change to the <A HREF=../index.html>top-level directory</A> of the installed software.
+<LI>If using the Intel&reg; C++ compiler, make sure the appropriate compiler is available in your PATH
+    (e.g., by sourcing the appropriate iccvars script for the compiler to be used).
+<LI>Invoke GNU make by using one or more of the following commands.
+    <DL>
+    <DT><TT>make</TT>
+    <DD>Default build.  Equivalent to 'make tbb tbbmalloc'.
+    <DT><TT>make all</TT>
+    <DD>Equivalent to 'make tbb tbbmalloc test examples'.
+    <DT><TT>cd src;make release</TT>
+    <DD>Build and test release libraries only.
+    <DT><TT>cd src;make debug</TT>
+    <DD>Build and test debug libraries only. 
+    <DT><TT>make tbb</TT>
+    <DD>Make TBB release and debug libraries.
+    <DT><TT>make tbbmalloc</TT>
+    <DD>Make TBB scalable memory allocator libraries.
+    <DT><TT>make test</TT>
+    <DD>Compile and run unit-tests
+    <DT><TT>make examples</TT>
+    <DD>Build libraries and run all examples, like doing 'make debug clean release' from
+       <A HREF=../examples/Makefile>the general example Makefile</A>.
+    <DT><TT>make compiler=<B>{</B>icl, icc<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
+    <DD>Build and run as above, but use Intel&reg; compilers instead of default, native compilers
+       (e.g., icl instead of cl.exe on Windows* systems, or icc instead of g++ on Linux* or Mac OS* X systems).
+    <DT><TT>make arch=<B>{</B>ia32, intel64, ia64<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
+    <DD>Build and run as above, but build libraries for the selected ABI.
+        Might be useful for cross-compilation; ensure proper environment is set before running this command.
+    <DT><TT>make tbb_root=<B>{</B>(TBB directory)<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
+    <DD>Build and run as above; for use when invoking 'make' from a directory other than
+       the <A HREF=../index.html>top-level directory</A>.
+    <DT><TT>make tbb_build_dir=<B>{</B>(build directory)<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
+    <DD>Build and run as above, but place the built libraries in the specified directory, rather than in the default
+       sub-directory within the build/ directory. This command might have troubles with the build in case the sources 
+       installed to the directory with spaces in the path.
+    <DT><TT>make tbb_build_prefix=<B>{</B>(build sub-directory)<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
+    <DD>Build and run as above, but place the built libraries in the specified sub-directory within the build/ directory,
+       rather than using the default sub-directory name.
+    <DT><TT>make <B>[</B>(above options)<B>]</B> clean</TT>
+    <DD>Remove any executables or intermediate files produced by the above commands.
+        Includes build directories, object files, libraries and test executables.
+    </DL>
+</OL>
+
+<A NAME=port><H2>To Port</H2></A>
+<P>
+This section provides information on how to port TBB to a new platform, operating system or architecture.
+A subset or a superset of these steps may be required for porting to a given platform.
+</P>
+
+<H4>To port the TBB source code:</H4>
+<OL>
+<LI>If porting to a new architecture, create a file that describes the architecture-specific details for that architecture.
+    <UL>
+    <LI>Create a &lt;os&gt;_&lt;architecture&gt;.h file in the <A HREF=../include/tbb/machine>include/tbb/machine</A> directory
+       that describes these details.
+       <UL>
+       <LI>The &lt;os&gt;_&lt;architecture&gt;.h is named after the operating system and architecture as recognized by
+           <A HREF=../include/tbb/tbb_machine.h>include/tbb/tbb_machine.h</A> and the Makefile infrastructure.
+       <LI>This file defines the implementations of synchronization operations, and also the
+           scheduler yield function, for the operating system and architecture.
+       <LI>Several examples of &lt;os&gt;_&lt;architecture&gt;.h files can be found in the
+           <A HREF=../include/tbb/machine>include/tbb/machine</A> directory.
+           <UL>
+           <LI>A minimal implementation defines the 4-byte and 8-byte compare-and-swap operations,
+               and the scheduler yield function.  See <A HREF=../include/tbb/machine/mac_ppc.h>include/tbb/machine/mac_ppc.h</A>
+               for an example of a minimal implementation.
+           <LI>More complex implementation examples can also be found in the
+               <A HREF=../include/tbb/machine>include/tbb/machine</A> directory
+               that implement all the individual variants of synchronization operations that TBB uses.
+               Such implementations are more verbose but may achieve better performance on a given architecture.
+           <LI>In a given implementation, any synchronization operation that is not defined is implemented, by default,
+               in terms of 4-byte or 8-byte compare-and-swap.  More operations can thus be added incrementally to increase
+               the performance of an implementation.
+           <LI>In most cases, synchronization operations are implemented as inline assembly code; examples also exist,
+               (e.g., for Intel&reg; Itanium&reg; processors) that use out-of-line assembly code in *.s or *.asm files
+               (see the assembly code sub-directories in the <A HREF=../src/tbb>src/tbb</A> directory).
+           </UL>
+       </UL>
+    <LI>Modify <A HREF=../include/tbb/tbb_machine.h>include/tbb/tbb_machine.h</A>, if needed, to invoke the appropriate
+       &lt;os&gt;_&lt;architecture&gt;.h file in the <A HREF=../include/tbb/machine>include/tbb/machine</A> directory.
+    </UL>
+<LI>Add an implementation of DetectNumberOfWorkers() in <A HREF=../src/tbb/tbb_misc.h>src/tbb/tbb_misc.h</A>,
+    if needed, that returns the number of cores found on the system.  This is used to determine the default
+    number of threads for the TBB task scheduler.
+<LI>Either properly define FillDynamicLinks for use in
+    <A HREF=../src/tbb/cache_aligned_allocator.cpp>src/tbb/cache_aligned_allocator.cpp</A>,
+    or hardcode the allocator to be used.
+<LI>Additional types might be required in the union defined in
+    <A HREF=../include/tbb/aligned_space.h>include/tbb/aligned_space.h</A>
+    to ensure proper alignment on your platform.
+<LI>Changes may be required in <A HREF=../include/tbb/tick_count.h>include/tbb/tick_count.h</A>
+    for systems that do not provide gettimeofday.
+</OL>
+
+<H4>To port the Makefile infrastructure:</H4>
+Modify the appropriate files in the Makefile infrastructure to add a new platform, operating system or architecture as needed.
+See the Makefile infrastructure files for examples.
+<OL>
+<LI>The <A HREF=../Makefile>top-level Makefile</A> includes <A HREF=common.inc>common.inc</A> to determine the operating system.
+    <UL>
+    <LI>To add a new operating system, add the appropriate test to <A HREF=common.inc>common.inc</A>,
+       and create the needed &lt;os&gt;.inc and &lt;os&gt;.&lt;compiler&gt;.inc files (see below).
+    </UL>
+<LI>The &lt;os&gt;.inc file makes OS-specific settings for a particular &lt;os&gt;.
+    <UL>
+    <LI>For example, <A HREF=linux.inc>linux.inc</A> makes settings specific to Linux* systems.
+    <LI>This file performs OS-dependent tests to determine the specific platform and/or architecture,
+       and sets other platform-dependent values.
+    <LI>Add a new &lt;os&gt;.inc file for each new operating system added.
+    </UL>
+<LI>The &lt;os&gt;.&lt;compiler&gt;.inc file makes compiler-specific settings for a particular
+    &lt;os&gt; / &lt;compiler&gt; combination.
+    <UL>
+    <LI>For example, <A HREF=linux.gcc.inc>linux.gcc.inc</A> makes specific settings for using GCC on Linux* systems,
+       and <A HREF=linux.icc.inc>linux.icc.inc</A> makes specific settings for using the Intel&reg; C++ compiler on Linux* systems.
+    <LI>This file sets particular compiler, assembler and linker options required when using a particular
+       &lt;os&gt; / &lt;compiler&gt; combination.
+    <LI>Add a new &lt;os&gt;.&lt;compiler&gt;.inc file for each new &lt;os&gt; / &lt;compiler&gt; combination added.
+    </UL>
+</OL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<P></P>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<P></P>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<P></P>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/linux.gcc.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/linux.gcc.inc
new file mode 100644 (file)
index 0000000..a81b6df
--- /dev/null
@@ -0,0 +1,103 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -Wall
+WARNING_SUPPRESS = -Wno-parentheses
+RML_WARNING_SUPPRESS = -Wno-non-virtual-dtor
+DYLIB_KEY = -shared
+LIBDL = -ldl
+
+TBB_NOSTRICT = 1
+
+CPLUS = g++ 
+CONLY = gcc
+LIB_LINK_FLAGS = -shared -Wl,-soname=$(BUILDING_LIBRARY)
+LIBS = -lpthread -lrt 
+C_FLAGS = $(CPLUS_FLAGS)
+
+ifeq ($(cfg), release)
+        CPLUS_FLAGS = -DDO_ITT_NOTIFY -O2 -DUSE_PTHREAD
+endif
+ifeq ($(cfg), debug)
+        CPLUS_FLAGS = -DTBB_USE_DEBUG -DDO_ITT_NOTIFY -g -O0 -DUSE_PTHREAD
+endif
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+
+ifeq (ia64,$(arch))
+# Position-independent code (PIC) is a must on IA-64, even for regular (not shared) executables
+    CPLUS_FLAGS += $(PIC_KEY)
+endif 
+
+ifeq (intel64,$(arch))
+    CPLUS_FLAGS += -m64
+    LIB_LINK_FLAGS += -m64
+endif 
+
+ifeq (ia32,$(arch))
+    CPLUS_FLAGS += -m32
+    LIB_LINK_FLAGS += -m32
+endif 
+
+# for some gcc versions on Solaris, -m64 may imply V9, but perhaps not everywhere (TODO: verify)
+ifeq (sparc,$(arch))
+    CPLUS_FLAGS    += -mcpu=v9 -m64
+    LIB_LINK_FLAGS += -mcpu=v9 -m64
+endif 
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+ASSEMBLY_SOURCE=$(arch)-gas
+ifeq (ia64,$(arch))
+    ASM=as
+    ASM_FLAGS += -xexplicit
+    TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o ia64_misc.o
+endif 
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions -fno-schedule-insns2
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/linux.icc.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/linux.icc.inc
new file mode 100644 (file)
index 0000000..ea68195
--- /dev/null
@@ -0,0 +1,98 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -w1
+DYLIB_KEY = -shared
+LIBDL = -ldl
+export COMPILER_VERSION := ICC: $(shell icc -V </dev/null 2>&1 | grep 'Version')
+#TODO: autodetection of arch from COMPILER_VERSION!!
+
+TBB_NOSTRICT = 1
+
+CPLUS = icpc 
+CONLY = icc
+
+ifeq (release,$(cfg))
+CPLUS_FLAGS = -O2 -strict_ansi -DUSE_PTHREAD
+else
+CPLUS_FLAGS = -O0 -g -strict_ansi -DUSE_PTHREAD -DTBB_USE_DEBUG
+endif
+
+ifneq (,$(codecov))
+    CPLUS_FLAGS += -prof-genx
+else
+    CPLUS_FLAGS += -DDO_ITT_NOTIFY
+endif
+
+OPENMP_FLAG = -openmp
+LIB_LINK_FLAGS = -shared -i-static -Wl,-soname=$(BUILDING_LIBRARY)
+LIBS = -lpthread -lrt 
+C_FLAGS = $(CPLUS_FLAGS)
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+
+ifeq (ia64,$(arch))
+# Position-independent code (PIC) is a must on IA-64, even for regular (not shared) executables
+    CPLUS_FLAGS += $(PIC_KEY)
+endif 
+
+ifneq (0,$(lambdas))
+       CPLUS_FLAGS += -std=c++0x -D_TBB_CPP0X
+endif
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+ASSEMBLY_SOURCE=$(arch)-gas
+ifeq (ia64,$(arch))
+    ASM=ias
+    TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o ia64_misc.o
+endif 
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/linux.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/linux.inc
new file mode 100644 (file)
index 0000000..d858445
--- /dev/null
@@ -0,0 +1,108 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+ifndef arch
+        uname_m:=$(shell uname -m)
+        ifeq ($(uname_m),i686)
+                export arch:=ia32
+        endif
+        ifeq ($(uname_m),ia64)
+                export arch:=ia64
+        endif
+        ifeq ($(uname_m),x86_64)
+                export arch:=intel64
+        endif
+        ifeq ($(uname_m),sparc64)
+                export arch:=sparc
+        endif
+endif
+
+ifndef runtime
+        #gcc_version:=$(shell gcc -v 2>&1 | grep 'gcc --version' | sed -e 's/^gcc version //' | sed -e 's/ .*$$//')
+        gcc_version_full=$(shell gcc --version | grep 'gcc'| egrep -o ' [0-9]+\.[0-9]+\.[0-9]+.*' | sed -e 's/^\ //')
+        gcc_version=$(shell echo "$(gcc_version_full)" | egrep -o '^[0-9]+\.[0-9]+\.[0-9]+\s*' | head -n 1 | sed -e 's/ *//g')
+        os_version:=$(shell uname -r)
+        os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')
+        export os_glibc_version_full:=$(shell getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //')
+        os_glibc_version:=$(shell echo "$(os_glibc_version_full)" | sed -e '2,$$d' -e 's/-.*$$//')
+        export runtime:=cc$(gcc_version)_libc$(os_glibc_version)_kernel$(os_kernel_version)
+endif
+
+native_compiler := gcc
+export compiler ?= gcc
+debugger ?= gdb
+
+CMD=sh -c
+CWD=$(shell pwd)
+RM?=rm -f
+RD?=rmdir
+MD?=mkdir -p
+NUL= /dev/null
+SLASH=/
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
+MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
+
+ifdef LD_LIBRARY_PATH
+        export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH)
+else
+        export LD_LIBRARY_PATH := .
+endif
+
+####### Build settings ########################################################
+
+OBJ = o
+DLL = so
+LIBEXT = so
+SONAME_SUFFIX =$(shell grep TBB_COMPATIBLE_INTERFACE_VERSION $(tbb_root)/include/tbb/tbb_stddef.h | egrep -o [0-9.]+)
+
+def_prefix = $(if $(findstring 32,$(arch)),lin32,$(if $(findstring intel64,$(arch)),lin64,lin64ipf))
+TBB.DEF = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.def
+
+EXPORT_KEY = -Wl,--version-script,
+TBB.DLL = $(TBB_NO_VERSION.DLL).$(SONAME_SUFFIX)
+TBB.LIB = $(TBB.DLL)
+TBB_NO_VERSION.DLL=libtbb$(DEBUG_SUFFIX).$(DLL)
+LINK_TBB.LIB = $(TBB_NO_VERSION.DLL)
+
+MALLOC_NO_VERSION.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.DEF = $(MALLOC_ROOT)/lin-tbbmalloc-export.def
+MALLOC.DLL = $(MALLOC_NO_VERSION.DLL).$(SONAME_SUFFIX)
+MALLOC.LIB = $(MALLOC_NO_VERSION.DLL)
+LINK_MALLOC.LIB = $(MALLOC_NO_VERSION.DLL)
+
+MALLOCPROXY_NO_VERSION.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)
+MALLOCPROXY.DEF = $(MALLOC_ROOT)/$(def_prefix)-proxy-export.def
+MALLOCPROXY.DLL = $(MALLOCPROXY_NO_VERSION.DLL).$(SONAME_SUFFIX)
+MALLOCPROXY.LIB = $(MALLOCPROXY_NO_VERSION.DLL)
+
+RML_NO_VERSION.DLL = libirml$(DEBUG_SUFFIX).$(DLL)
+RML.DEF = $(RML_SERVER_ROOT)/lin-rml-export.def
+RML.DLL = $(RML_NO_VERSION.DLL).1
+RML.LIB = $(RML_NO_VERSION.DLL)
+
+TBB_NOSTRICT=1
+
+TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/macos.gcc.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/macos.gcc.inc
new file mode 100644 (file)
index 0000000..89a2182
--- /dev/null
@@ -0,0 +1,83 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+CPLUS = g++
+CONLY = gcc
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -Wall
+WARNING_SUPPRESS =
+DYLIB_KEY = -dynamiclib
+EXPORT_KEY = -Wl,-exported_symbols_list,
+LIBDL = -ldl
+
+LIBS = -lpthread
+LINK_FLAGS = 
+LIB_LINK_FLAGS = -dynamiclib
+C_FLAGS = $(CPLUS_FLAGS)
+
+ifeq ($(cfg), release)
+    CPLUS_FLAGS = -O2
+else
+    CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG
+endif
+
+CPLUS_FLAGS += -DUSE_PTHREAD
+
+ifeq (intel64,$(arch))
+    CPLUS_FLAGS += -m64
+    LINK_FLAGS += -m64
+    LIB_LINK_FLAGS += -m64
+endif
+
+ifeq (ppc64,$(arch))
+    CPLUS_FLAGS += -arch ppc64
+    LINK_FLAGS += -arch ppc64
+    LIB_LINK_FLAGS += -arch ppc64
+endif
+
+ifeq (ppc,$(arch))
+    CPLUS_FLAGS += -arch ppc
+    LINK_FLAGS += -arch ppc
+    LIB_LINK_FLAGS += -arch ppc
+endif
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions -fno-schedule-insns2
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/macos.icc.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/macos.icc.inc
new file mode 100644 (file)
index 0000000..039ea74
--- /dev/null
@@ -0,0 +1,75 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+CPLUS = icpc
+CONLY = icc
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -w1
+DYLIB_KEY = -dynamiclib
+EXPORT_KEY = -Wl,-exported_symbols_list,
+LIBDL = -ldl
+export COMPILER_VERSION := $(shell icc -V </dev/null 2>&1 | grep 'Version')
+#TODO: autodetection of arch from COMPILER_VERSION!!
+
+OPENMP_FLAG = -openmp
+LIBS = -lpthread
+LINK_FLAGS = 
+LIB_LINK_FLAGS = -dynamiclib -i-static
+C_FLAGS = $(CPLUS_FLAGS)
+
+ifeq ($(cfg), release)
+    CPLUS_FLAGS = -O2 -fno-omit-frame-pointer
+else
+    CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG
+endif
+
+CPLUS_FLAGS += -DUSE_PTHREAD
+
+ifneq (,$(codecov))
+    CPLUS_FLAGS += -prof-genx
+endif
+
+ifneq (0,$(lambdas))
+       CPLUS_FLAGS += -std=c++0x -D_TBB_CPP0X
+endif
+
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/macos.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/macos.inc
new file mode 100644 (file)
index 0000000..4e2f4db
--- /dev/null
@@ -0,0 +1,85 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+####### Detections and Commands ###############################################
+ifndef arch
+ ifeq ($(shell /usr/sbin/sysctl -n hw.machine),Power Macintosh)
+   ifeq ($(shell /usr/sbin/sysctl -n hw.optional.64bitops),1)
+     export arch:=ppc64
+   else
+     export arch:=ppc32
+   endif
+ else
+   ifeq ($(shell /usr/sbin/sysctl -n hw.optional.x86_64 2>/dev/null),1)
+     export arch:=intel64
+   else
+     export arch:=ia32
+   endif
+ endif
+endif
+
+ifndef runtime
+ #gcc_version:=$(shell gcc -v 2>&1 | grep 'gcc version' | sed -e 's/^gcc version //' | sed -e 's/ .*$$//' )
+ gcc_version_full=$(shell gcc --version | grep 'gcc'| egrep -o ' [0-9]+\.[0-9]+\.[0-9]+.*' | sed -e 's/^\ //')
+ gcc_version=$(shell echo "$(gcc_version_full)" | egrep -o '^[0-9]+\.[0-9]+\.[0-9]+\s*' | head -n 1 | sed -e 's/ *//g')
+ os_version:=$(shell /usr/bin/sw_vers -productVersion)
+ export runtime:=cc$(gcc_version)_os$(os_version)
+endif
+
+native_compiler := gcc
+export compiler ?= gcc
+debugger ?= gdb
+
+CMD=$(SHELL) -c
+CWD=$(shell pwd)
+RM?=rm -f
+RD?=rmdir
+MD?=mkdir -p
+NUL= /dev/null
+SLASH=/
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_macos.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
+MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
+
+####### Build settings ########################################################
+
+OBJ=o
+DLL=dylib
+LIBEXT=dylib
+
+def_prefix = $(if $(findstring 32,$(arch)),mac32,mac64)
+
+TBB.DEF = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.def
+TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+LINK_TBB.LIB = $(TBB.LIB)
+
+MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.LIB = $(MALLOC.DLL)
+
+TBB_NOSTRICT=1
+
+TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/suncc.map.pause b/deal.II/contrib/tbb/tbb22_20090809oss/build/suncc.map.pause
new file mode 100644 (file)
index 0000000..a92d08e
--- /dev/null
@@ -0,0 +1 @@
+hwcap_1 = OVERRIDE;
\ No newline at end of file
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/test_launcher.bat b/deal.II/contrib/tbb/tbb22_20090809oss/build/test_launcher.bat
new file mode 100644 (file)
index 0000000..bc52a44
--- /dev/null
@@ -0,0 +1,36 @@
+@echo off
+REM
+REM Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+REM
+REM This file is part of Threading Building Blocks.
+REM
+REM Threading Building Blocks is free software; you can redistribute it
+REM and/or modify it under the terms of the GNU General Public License
+REM version 2 as published by the Free Software Foundation.
+REM
+REM Threading Building Blocks is distributed in the hope that it will be
+REM useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+REM of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+REM GNU General Public License for more details.
+REM
+REM You should have received a copy of the GNU General Public License
+REM along with Threading Building Blocks; if not, write to the Free Software
+REM Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+REM
+REM As a special exception, you may use this file as part of a free software
+REM library without restriction.  Specifically, if other files instantiate
+REM templates or use macros or inline functions from this file, or you compile
+REM this file and link it with other files to produce an executable, this
+REM file does not by itself cause the resulting executable to be covered by
+REM the GNU General Public License.  This exception does not however
+REM invalidate any other reasons why the executable file might be covered by
+REM the GNU General Public License.
+REM
+
+REM no LD_PRELOAD under Windows
+if "%1"=="-l" (
+    echo skip
+    exit
+)
+
+%*
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/test_launcher.sh b/deal.II/contrib/tbb/tbb22_20090809oss/build/test_launcher.sh
new file mode 100644 (file)
index 0000000..0f691ba
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/sh
+#
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+while getopts  "l:" flag #
+do #
+    if [ `uname` != 'Linux' ] ; then #
+        echo 'skip' #
+        exit #
+    fi #
+    LD_PRELOAD=$OPTARG #
+    shift `expr $OPTIND - 1` #
+done #
+# Set stack limit
+ulimit -s 10240 # 
+# Run the command line passed via parameters
+export LD_PRELOAD #
+./$* # 
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_linux.sh b/deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_linux.sh
new file mode 100644 (file)
index 0000000..87d7551
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/sh
+#
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Script used to generate version info string
+echo "#define __TBB_VERSION_STRINGS \\"
+echo '"TBB:' "BUILD_HOST\t\t"`hostname -s`" ("`uname -m`")"'" ENDL \'
+# find OS name in *-release and issue* files by filtering blank lines and lsb-release content out
+echo '"TBB:' "BUILD_OS\t\t"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/["\\\\]//g'`'" ENDL \'
+echo '"TBB:' "BUILD_KERNEL\t"`uname -srv`'" ENDL \'
+echo '"TBB:' "BUILD_GCC\t\t"`g++ -v </dev/null 2>&1 | grep 'gcc.*version'`'" ENDL \'
+[ -z "$COMPILER_VERSION" ] || echo '"TBB:' "BUILD_COMPILER\t"$COMPILER_VERSION'" ENDL \'
+echo '"TBB:' "BUILD_GLIBC\t"`getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //'`'" ENDL \'
+echo '"TBB:' "BUILD_LD\t\t"`ld -v 2>&1 | grep 'version'`'" ENDL \'
+echo '"TBB:' "BUILD_TARGET\t$arch on $runtime"'" ENDL \'
+echo '"TBB:' "BUILD_COMMAND\t"$*'" ENDL \'
+echo ""
+echo "#define __TBB_DATETIME \""`date -u`"\""
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_macos.sh b/deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_macos.sh
new file mode 100644 (file)
index 0000000..d6a40af
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Script used to generate version info string
+echo "#define __TBB_VERSION_STRINGS \\"
+echo '"TBB:' "BUILD_HOST\t\t"`hostname -s`" ("`arch`")"'" ENDL \'
+echo '"TBB:' "BUILD_OS\t\t"`sw_vers -productName`" version "`sw_vers -productVersion`'" ENDL \'
+echo '"TBB:' "BUILD_KERNEL\t"`uname -v`'" ENDL \'
+echo '"TBB:' "BUILD_GCC\t\t"`gcc -v </dev/null 2>&1 | grep 'version'`'" ENDL \'
+[ -z "$COMPILER_VERSION" ] || echo '"TBB:' "BUILD_COMPILER\t"$COMPILER_VERSION'" ENDL \'
+echo '"TBB:' "BUILD_TARGET\t$arch on $runtime"'" ENDL \'
+echo '"TBB:' "BUILD_COMMAND\t"$*'" ENDL \'
+echo ""
+echo "#define __TBB_DATETIME \""`date -u`"\""
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_sunos.sh b/deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_sunos.sh
new file mode 100644 (file)
index 0000000..1634116
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Script used to generate version info string
+echo "#define __TBB_VERSION_STRINGS \\"
+echo '"TBB:' "BUILD_HOST\t"`hostname`" ("`arch`")"'" ENDL \'
+echo '"TBB:' "BUILD_OS\t\t"`uname`'" ENDL \'
+echo '"TBB:' "BUILD_KERNEL\t"`uname -srv`'" ENDL \'
+echo '"TBB:' "BUILD_SUNCC\t"`CC -V </dev/null 2>&1 | grep 'C++'`'" ENDL \'
+[ -z "$COMPILER_VERSION" ] || echo '"TBB: ' "BUILD_COMPILER\t"$COMPILER_VERSION'" ENDL \'
+echo '"TBB:' "BUILD_TARGET\t$arch on $runtime"'" ENDL \'
+echo '"TBB:' "BUILD_COMMAND\t"$*'" ENDL \'
+echo ""
+echo "#define __TBB_DATETIME \""`date -u`"\""
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_windows.js b/deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_windows.js
new file mode 100644 (file)
index 0000000..1d1efb9
--- /dev/null
@@ -0,0 +1,136 @@
+// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+var WshShell = WScript.CreateObject("WScript.Shell");
+
+var tmpExec;
+
+WScript.Echo("#define __TBB_VERSION_STRINGS \\");
+
+//Getting BUILD_HOST
+WScript.echo( "\"TBB: BUILD_HOST\\t\\t" + 
+              WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") +
+              "\" ENDL \\" );
+
+//Getting BUILD_OS
+tmpExec = WshShell.Exec("cmd /c ver");
+while ( tmpExec.Status == 0 ) {
+    WScript.Sleep(100);
+}
+tmpExec.StdOut.ReadLine();
+
+WScript.echo( "\"TBB: BUILD_OS\\t\\t" + 
+              tmpExec.StdOut.ReadLine() +
+              "\" ENDL \\" );
+
+if ( WScript.Arguments(0).toLowerCase().match("gcc") ) {
+    tmpExec = WshShell.Exec("gcc --version");
+    WScript.echo( "\"TBB: BUILD_COMPILER\\t" + 
+                  tmpExec.StdOut.ReadLine() + 
+                  "\" ENDL \\" );
+
+} else { // MS / Intel compilers
+    //Getting BUILD_CL
+    tmpExec = WshShell.Exec("cmd /c echo #define 0 0>empty.cpp");
+    tmpExec = WshShell.Exec("cl -c empty.cpp ");
+    while ( tmpExec.Status == 0 ) {
+        WScript.Sleep(100);
+    }
+    var clVersion = tmpExec.StdErr.ReadLine();
+    WScript.echo( "\"TBB: BUILD_CL\\t\\t" + 
+                  clVersion +
+                  "\" ENDL \\" );
+
+    //Getting BUILD_COMPILER
+    if ( WScript.Arguments(0).toLowerCase().match("icl") ) {
+        tmpExec = WshShell.Exec("icl -c empty.cpp ");
+        while ( tmpExec.Status == 0 ) {
+            WScript.Sleep(100);
+        }
+        WScript.echo( "\"TBB: BUILD_COMPILER\\t" + 
+                      tmpExec.StdErr.ReadLine() + 
+                      "\" ENDL \\" );
+    } else {
+        WScript.echo( "\"TBB: BUILD_COMPILER\\t\\t" + 
+                      clVersion +
+                      "\" ENDL \\" );
+    }
+    tmpExec = WshShell.Exec("cmd /c del /F /Q empty.obj empty.cpp");
+}
+
+//Getting BUILD_TARGET
+WScript.echo( "\"TBB: BUILD_TARGET\\t" + 
+              WScript.Arguments(1) + 
+              "\" ENDL \\" );
+
+//Getting BUILD_COMMAND
+WScript.echo( "\"TBB: BUILD_COMMAND\\t" + WScript.Arguments(2) + "\" ENDL" );
+
+//Getting __TBB_DATETIME and __TBB_VERSION_YMD
+var date = new Date();
+WScript.echo( "#define __TBB_DATETIME \"" + date.toUTCString() + "\"" );
+WScript.echo( "#define __TBB_VERSION_YMD " + date.getUTCFullYear() + ", " + 
+              (date.getUTCMonth() > 8 ? (date.getUTCMonth()+1):("0"+(date.getUTCMonth()+1))) + 
+              (date.getUTCDate() > 9 ? date.getUTCDate():("0"+date.getUTCDate())) );
+
+
+/*
+
+Original strings
+
+#define __TBB_VERSION_STRINGS \
+"TBB: BUILD_HOST\t\tvpolin-mobl1 (ia32)" ENDL \
+"TBB: BUILD_OS\t\tMicrosoft Windows XP [Version 5.1.2600]" ENDL \
+"TBB: BUILD_CL\t\tMicrosoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86" ENDL \
+"TBB: BUILD_COMPILER\tIntel(R) C++ Compiler for 32-bit applications, Version 9.1 Build 20070109Z Package ID: W_CC_C_9.1.034 " ENDL \
+"TBB: BUILD_TARGET\t" ENDL \
+"TBB: BUILD_COMMAND\t" ENDL \
+
+#define __TBB_DATETIME "Mon Jun 4 10:16:07 UTC 2007"
+#define __TBB_VERSION_YMD 2007, 0604
+
+
+
+# The script must be run from two directory levels below this level.
+x='"TBB: '
+y='" ENDL \'
+echo "#define __TBB_VERSION_STRINGS \\"
+echo $x "BUILD_HOST\t\t"`hostname`" ("`../../arch.exe`")"$y
+echo $x "BUILD_OS\t\t"`../../win_version.bat|grep -i 'Version'`$y
+echo >empty.cpp
+echo $x "BUILD_CL\t\t"`cl -c empty.cpp 2>&1 | grep -i Version`$y
+echo $x "BUILD_COMPILER\t"`icl -c empty.cpp 2>&1 | grep -i Version`$y
+echo $x "BUILD_TARGET\t"$TBB_ARCH$y
+echo $x "BUILD_COMMAND\t"$*$y
+echo ""
+# A workaround for MKS 8.6 where `date -u` crashes.
+date -u > date.tmp
+echo "#define __TBB_DATETIME \""`cat date.tmp`"\""
+echo "#define __TBB_VERSION_YMD "`date '+%Y, %m%d'`
+rm empty.cpp
+rm empty.obj
+rm date.tmp
+*/
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_winlrb.js b/deal.II/contrib/tbb/tbb22_20090809oss/build/version_info_winlrb.js
new file mode 100644 (file)
index 0000000..67f2a29
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+var WshShell = WScript.CreateObject("WScript.Shell");
+
+var tmpExec;
+
+WScript.Echo("#define __TBB_VERSION_STRINGS \\");
+
+//Getting BUILD_HOST
+WScript.echo( "\"TBB: BUILD_HOST\\t\\t" + 
+                         WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") +
+                         "\" ENDL \\" );
+
+//Getting BUILD_OS
+tmpExec = WshShell.Exec("cmd /c ver");
+while ( tmpExec.Status == 0 ) {
+       WScript.Sleep(100);
+}
+tmpExec.StdOut.ReadLine();
+
+WScript.echo( "\"TBB: BUILD_OS\\t\\t" + 
+                         tmpExec.StdOut.ReadLine() +
+                         "\" ENDL \\" );
+
+var Unknown = "Unknown";
+
+WScript.echo( "\"TBB: BUILD_KERNEL\\t" + 
+              Unknown +
+              "\" ENDL \\" );
+
+//Getting BUILD_COMPILER
+tmpExec = WshShell.Exec("icc --version");
+while ( tmpExec.Status == 0 ) {
+       WScript.Sleep(100);
+}
+var ccVersion = tmpExec.StdErr.ReadLine();
+WScript.echo( "\"TBB: BUILD_GCC\\t" + 
+              ccVersion +
+              "\" ENDL \\" );
+WScript.echo( "\"TBB: BUILD_COMPILER\\t" + 
+              ccVersion +
+              "\" ENDL \\" );
+
+WScript.echo( "\"TBB: BUILD_GLIBC\\t" + 
+              Unknown +
+              "\" ENDL \\" );
+
+WScript.echo( "\"TBB: BUILD_LD\\t" + 
+              Unknown +
+              "\" ENDL \\" );
+
+//Getting BUILD_TARGET
+WScript.echo( "\"TBB: BUILD_TARGET\\t" + 
+                         WScript.Arguments(1) + 
+                         "\" ENDL \\" );
+
+//Getting BUILD_COMMAND
+WScript.echo( "\"TBB: BUILD_COMMAND\\t" + WScript.Arguments(2) + "\" ENDL" );
+
+//Getting __TBB_DATETIME and __TBB_VERSION_YMD
+var date = new Date();
+WScript.echo( "#define __TBB_DATETIME \"" + date.toUTCString() + "\"" );
+WScript.echo( "#define __TBB_VERSION_YMD " + date.getUTCFullYear() + ", " + 
+                         (date.getUTCMonth() > 8 ? (date.getUTCMonth()+1):("0"+(date.getUTCMonth()+1))) + 
+                         (date.getUTCDate() > 9 ? date.getUTCDate():("0"+date.getUTCDate())) );
+
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/index.html
new file mode 100644 (file)
index 0000000..82cad00
--- /dev/null
@@ -0,0 +1,31 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains the visual studio* 2005 solution to build Threading Building Blocks.
+
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="makefile.sln">makefile.sln</A>
+<DD>Solution file.
+<DT><A HREF="tbb.vcproj">tbb.vcproj</A>
+<DD>Library project file.
+<DT><A HREF="tbbmalloc.vcproj">tbbmalloc.vcproj</A>
+<DD>Scalable allocator library project file. Allocator sources are expected to be located in <A HREF="../../src/tbbmalloc">../../src/tbbmalloc</A> folder.
+<DT><A HREF="tbbmalloc_proxy.vcproj">tbbmalloc_proxy.vcproj</A>
+<DD>Standard allocator replacement project file. 
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<P></P>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<P></P>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<P></P>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/makefile.sln b/deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/makefile.sln
new file mode 100644 (file)
index 0000000..2a681d4
--- /dev/null
@@ -0,0 +1,72 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tbb", "tbb.vcproj", "{F62787DD-1327-448B-9818-030062BCFAA5}"
+       ProjectSection(WebsiteProperties) = preProject
+               Debug.AspNetCompiler.Debug = "True"
+               Release.AspNetCompiler.Debug = "False"
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tbbmalloc", "tbbmalloc.vcproj", "{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}"
+       ProjectSection(WebsiteProperties) = preProject
+               Debug.AspNetCompiler.Debug = "True"
+               Release.AspNetCompiler.Debug = "False"
+       EndProjectSection
+       ProjectSection(ProjectDependencies) = postProject
+               {F62787DD-1327-448B-9818-030062BCFAA5} = {F62787DD-1327-448B-9818-030062BCFAA5}
+       EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8898CE0B-0BFB-45AE-AA71-83735ED2510D}"
+       ProjectSection(WebsiteProperties) = preProject
+               Debug.AspNetCompiler.Debug = "True"
+               Release.AspNetCompiler.Debug = "False"
+       EndProjectSection
+       ProjectSection(SolutionItems) = preProject
+               index.html = index.html
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tbbmalloc_proxy", "tbbmalloc_proxy.vcproj", "{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}"
+       ProjectSection(WebsiteProperties) = preProject
+               Debug.AspNetCompiler.Debug = "True"
+               Release.AspNetCompiler.Debug = "False"
+       EndProjectSection
+       ProjectSection(ProjectDependencies) = postProject
+               {B15F131E-328A-4D42-ADC2-9FF4CA6306D8} = {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {F62787DD-1327-448B-9818-030062BCFAA5}.Debug|Win32.ActiveCfg = Debug|Win32
+               {F62787DD-1327-448B-9818-030062BCFAA5}.Debug|Win32.Build.0 = Debug|Win32
+               {F62787DD-1327-448B-9818-030062BCFAA5}.Debug|x64.ActiveCfg = Debug|x64
+               {F62787DD-1327-448B-9818-030062BCFAA5}.Debug|x64.Build.0 = Debug|x64
+               {F62787DD-1327-448B-9818-030062BCFAA5}.Release|Win32.ActiveCfg = Release|Win32
+               {F62787DD-1327-448B-9818-030062BCFAA5}.Release|Win32.Build.0 = Release|Win32
+               {F62787DD-1327-448B-9818-030062BCFAA5}.Release|x64.ActiveCfg = Release|x64
+               {F62787DD-1327-448B-9818-030062BCFAA5}.Release|x64.Build.0 = Release|x64
+               {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|Win32.ActiveCfg = Debug|Win32
+               {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|Win32.Build.0 = Debug|Win32
+               {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|x64.ActiveCfg = Debug|x64
+               {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|x64.Build.0 = Debug|x64
+               {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|Win32.ActiveCfg = Release|Win32
+               {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|Win32.Build.0 = Release|Win32
+               {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|x64.ActiveCfg = Release|x64
+               {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|x64.Build.0 = Release|x64
+               {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|Win32.ActiveCfg = Debug|Win32
+               {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|Win32.Build.0 = Debug|Win32
+               {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|x64.ActiveCfg = Debug|x64
+               {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|x64.Build.0 = Debug|x64
+               {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|Win32.ActiveCfg = Release|Win32
+               {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|Win32.Build.0 = Release|Win32
+               {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|x64.ActiveCfg = Release|x64
+               {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/tbb.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/tbb.vcproj
new file mode 100644 (file)
index 0000000..bf726f6
--- /dev/null
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="windows-1251"?>\r
+<VisualStudioProject ProjectType="Visual C++" Version="8,00" Name="tbb" ProjectGUID="{F62787DD-1327-448B-9818-030062BCFAA5}" RootNamespace="tbb" Keyword="Win32Proj">\r
+       <Platforms>\r
+               <Platform Name="Win32"/>\r
+               <Platform Name="x64"/>\r
+       </Platforms>\r
+       <ToolFiles>\r
+               <DefaultToolFile FileName="masm.rules"/>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration Name="Debug|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">\r
+                       <Tool Name="VCPreBuildEventTool"/>\r
+                       <Tool Name="VCCustomBuildTool"/>\r
+                       <Tool Name="MASM"/>\r
+                       <Tool Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool Name="VCMIDLTool"/>\r
+                       <Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /DDO_ITT_ANNOTATE /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../include" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="3" UsePrecompiledHeader="0" WarningLevel="4" Detect64BitPortabilityProblems="false" DebugInformationFormat="3"/>\r
+                       <Tool Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool Name="VCResourceCompilerTool"/>\r
+                       <Tool Name="VCPreLinkEventTool"/>\r
+                       <Tool Name="VCLinkerTool" AdditionalOptions="/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbb.def" OutputFile="$(OutDir)\tbb_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1"/>\r
+                       <Tool Name="VCALinkTool"/>\r
+                       <Tool Name="VCManifestTool"/>\r
+                       <Tool Name="VCXDCMakeTool"/>\r
+                       <Tool Name="VCBscMakeTool"/>\r
+                       <Tool Name="VCFxCopTool"/>\r
+                       <Tool Name="VCAppVerifierTool"/>\r
+                       <Tool Name="VCWebDeploymentTool"/>\r
+                       <Tool Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration Name="Debug|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">\r
+                       <Tool Name="VCPreBuildEventTool"/>\r
+                       <Tool Name="VCCustomBuildTool"/>\r
+                       <Tool Name="MASM"/>\r
+                       <Tool Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool Name="VCMIDLTool" TargetEnvironment="3"/>\r
+                       <Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /DDO_ITT_ANNOTATE /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../include" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="3" UsePrecompiledHeader="0" WarningLevel="4" Detect64BitPortabilityProblems="false" DebugInformationFormat="3" ShowIncludes="false"/>\r
+                       <Tool Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool Name="VCResourceCompilerTool"/>\r
+                       <Tool Name="VCPreLinkEventTool"/>\r
+                       <Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbb.def" OutputFile="$(OutDir)\tbb_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17"/>\r
+                       <Tool Name="VCALinkTool"/>\r
+                       <Tool Name="VCManifestTool"/>\r
+                       <Tool Name="VCXDCMakeTool"/>\r
+                       <Tool Name="VCBscMakeTool"/>\r
+                       <Tool Name="VCFxCopTool"/>\r
+                       <Tool Name="VCAppVerifierTool"/>\r
+                       <Tool Name="VCWebDeploymentTool"/>\r
+                       <Tool Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration Name="Release|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">\r
+                       <Tool Name="VCPreBuildEventTool"/>\r
+                       <Tool Name="VCCustomBuildTool"/>\r
+                       <Tool Name="MASM"/>\r
+                       <Tool Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool Name="VCMIDLTool"/>\r
+                       <Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /Oy /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" Detect64BitPortabilityProblems="false" DebugInformationFormat="3"/>\r
+                       <Tool Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool Name="VCResourceCompilerTool"/>\r
+                       <Tool Name="VCPreLinkEventTool"/>\r
+                       <Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbb.def" OutputFile="$(OutDir)\tbb.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="1"/>\r
+                       <Tool Name="VCALinkTool"/>\r
+                       <Tool Name="VCManifestTool"/>\r
+                       <Tool Name="VCXDCMakeTool"/>\r
+                       <Tool Name="VCBscMakeTool"/>\r
+                       <Tool Name="VCFxCopTool"/>\r
+                       <Tool Name="VCAppVerifierTool"/>\r
+                       <Tool Name="VCWebDeploymentTool"/>\r
+                       <Tool Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration Name="Release|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">\r
+                       <Tool Name="VCPreBuildEventTool"/>\r
+                       <Tool Name="VCCustomBuildTool"/>\r
+                       <Tool Name="MASM"/>\r
+                       <Tool Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool Name="VCMIDLTool" TargetEnvironment="3"/>\r
+                       <Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /W4 /Wp64 /I../../src /I../../include" AdditionalIncludeDirectories="." PreprocessorDefinitions="" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" Detect64BitPortabilityProblems="false" DebugInformationFormat="3"/>\r
+                       <Tool Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool Name="VCResourceCompilerTool"/>\r
+                       <Tool Name="VCPreLinkEventTool"/>\r
+                       <Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:$(IntDir)\tbb.def" OutputFile="$(OutDir)\tbb.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="17"/>\r
+                       <Tool Name="VCALinkTool"/>\r
+                       <Tool Name="VCManifestTool"/>\r
+                       <Tool Name="VCXDCMakeTool"/>\r
+                       <Tool Name="VCBscMakeTool"/>\r
+                       <Tool Name="VCFxCopTool"/>\r
+                       <Tool Name="VCAppVerifierTool"/>\r
+                       <Tool Name="VCWebDeploymentTool"/>\r
+                       <Tool Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter Name="Source Files" Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">\r
+                       <File RelativePath="..\..\src\tbb\ia32-masm\atomic_support.asm">\r
+                               <FileConfiguration Name="Debug|Win32">\r
+                                       <Tool Name="MASM" AdditionalOptions="/coff /Zi"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">\r
+                                       <Tool Name="MASM" AdditionalOptions="/coff /Zi"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|x64" ExcludedFromBuild="true">\r
+                                       <Tool Name="MASM"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\intel64-masm\atomic_support.asm">\r
+                               <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true">\r
+                                       <Tool Name="MASM"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Debug|x64">\r
+                                       <Tool Name="VCCustomBuildTool" Description="building atomic_support.obj" CommandLine="ml64 /Fo&quot;intel64\Debug\atomic_support.obj&quot; /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm\r
+" Outputs="intel64\Debug\atomic_support.obj"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true">\r
+                                       <Tool Name="MASM"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|x64">\r
+                                       <Tool Name="VCCustomBuildTool" Description="building atomic_support.obj" CommandLine="ml64 /Fo&quot;intel64\Release\atomic_support.obj&quot;  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm\r
+" Outputs="intel64\Release\atomic_support.obj"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\itt_notify_proxy.c">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\ia32-masm\lock_byte.asm">\r
+                               <FileConfiguration Name="Debug|Win32">\r
+                                       <Tool Name="MASM" AdditionalOptions="/coff /Zi"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">\r
+                                       <Tool Name="MASM" AdditionalOptions="/coff /Zi"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|x64" ExcludedFromBuild="true">\r
+                                       <Tool Name="MASM"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\win32-tbb-export.def">\r
+                               <FileConfiguration Name="Debug|Win32">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include &gt;$(IntDir)\tbb.def\r
+" Outputs="$(IntDir)\tbb.def"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;$(IntDir)\tbb.def\r
+" Outputs="$(IntDir)\tbb.def"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|Win32">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include &gt;$(IntDir)\tbb.def\r
+" Outputs="$(IntDir)\tbb.def"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|x64" ExcludedFromBuild="true">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;$(IntDir)\tbb.def\r
+" Outputs="$(IntDir)\tbb.def"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\win64-tbb-export.def">\r
+                               <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;$(IntDir)\tbb.def\r
+" Outputs="$(IntDir)\tbb.def"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Debug|x64">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include &gt;$(IntDir)\tbb.def\r
+" Outputs="$(IntDir)\tbb.def"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;$(IntDir)\tbb.def\r
+" Outputs="$(IntDir)\tbb.def"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|x64">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include &gt;$(IntDir)\tbb.def\r
+" Outputs="$(IntDir)\tbb.def"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\concurrent_hash_map.cpp"/><File RelativePath="..\..\src\tbb\concurrent_queue.cpp"/><File RelativePath="..\..\src\tbb\concurrent_vector.cpp"/><File RelativePath="..\..\src\tbb\dynamic_link.cpp"/><File RelativePath="..\..\src\tbb\itt_notify.cpp"/><File RelativePath="..\..\src\tbb\cache_aligned_allocator.cpp"/><File RelativePath="..\..\src\tbb\pipeline.cpp"/><File RelativePath="..\..\src\tbb\queuing_mutex.cpp"/><File RelativePath="..\..\src\tbb\queuing_rw_mutex.cpp"/><File RelativePath="..\..\src\tbb\spin_rw_mutex.cpp"/><File RelativePath="..\..\src\tbb\spin_mutex.cpp"/><File RelativePath="..\..\src\tbb\task.cpp"/><File RelativePath="..\..\src\tbb\tbb_misc.cpp"/><File RelativePath="..\..\src\tbb\mutex.cpp"/><File RelativePath="..\..\src\tbb\recursive_mutex.cpp"/><File RelativePath="..\..\src\tbb\tbb_thread.cpp"/><File RelativePath="..\..\src\tbb\itt_annotate.cpp"/><File RelativePath="..\..\src\old\concurrent_vector_v2.cpp"/><File RelativePath="..\..\src\old\concurrent_queue_v2.cpp"/><File RelativePath="..\..\src\old\spin_rw_mutex_v2.cpp"/></Filter>\r
+               <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl;inc;xsd" UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">\r
+                       <File RelativePath="..\..\include\tbb\_tbb_windef.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\aligned_space.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\atomic.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\blocked_range.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\blocked_range2d.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\blocked_range3d.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\cache_aligned_allocator.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\concurrent_hash_map.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\concurrent_queue.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\old\concurrent_queue_v2.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\concurrent_vector.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\old\concurrent_vector_v2.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\dynamic_link.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\enumerable_thread_specific.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\gate.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\machine\ibm_aix51.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\itt_notify.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\machine\linux_common.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\machine\linux_intel64.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\machine\linux_ia32.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\machine\linux_ia64.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\machine\mac_ppc.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\null_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\null_rw_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\parallel_do.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\parallel_for.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\parallel_reduce.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\parallel_scan.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\parallel_sort.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\parallel_while.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\partitioner.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\pipeline.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\queuing_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\queuing_rw_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\recursive_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\scalable_allocator.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\spin_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\spin_rw_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\old\spin_rw_mutex_v2.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\task.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\task_scheduler_init.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\task_scheduler_observer.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbb_allocator.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\tbb_assert_impl.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbb_exception.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbb_machine.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\tbb_misc.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbb_profiling.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbb_stddef.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbb_thread.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\tbb_version.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbbmalloc_proxy.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tick_count.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\machine\windows_intel64.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\machine\windows_ia32.h">\r
+                       </File>\r
+               </Filter>\r
+               <Filter Name="Resource Files" Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">\r
+                       <File RelativePath="..\..\src\tbb\tbb_resource.rc">\r
+                               <FileConfiguration Name="Debug|Win32">\r
+                                       <Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Debug|x64">\r
+                                       <Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|Win32">\r
+                                       <Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|x64">\r
+                                       <Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/tbbmalloc.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/tbbmalloc.vcproj
new file mode 100644 (file)
index 0000000..f8696dd
--- /dev/null
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="windows-1251"?>\r
+<VisualStudioProject ProjectType="Visual C++" Version="8,00" Name="tbbmalloc" ProjectGUID="{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}" RootNamespace="tbbmalloc" Keyword="Win32Proj">\r
+       <Platforms>\r
+               <Platform Name="Win32"/>\r
+               <Platform Name="x64"/>\r
+       </Platforms>\r
+       <ToolFiles>\r
+               <DefaultToolFile FileName="masm.rules"/>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration Name="Debug|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">\r
+                       <Tool Name="VCPreBuildEventTool"/>\r
+                       <Tool Name="VCCustomBuildTool"/>\r
+                       <Tool Name="MASM"/>\r
+                       <Tool Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool Name="VCMIDLTool"/>\r
+                       <Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /DDO_ITT_ANNOTATE /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling="0" BasicRuntimeChecks="0" RuntimeLibrary="3" UsePrecompiledHeader="0" WarningLevel="4" SuppressStartupBanner="false" Detect64BitPortabilityProblems="false" DebugInformationFormat="3"/>\r
+                       <Tool Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool Name="VCResourceCompilerTool"/>\r
+                       <Tool Name="VCPreLinkEventTool"/>\r
+                       <Tool Name="VCLinkerTool" AdditionalOptions="/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbbmalloc.def" OutputFile="$(OutDir)\tbbmalloc_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1"/>\r
+                       <Tool Name="VCALinkTool"/>\r
+                       <Tool Name="VCManifestTool"/>\r
+                       <Tool Name="VCXDCMakeTool"/>\r
+                       <Tool Name="VCBscMakeTool"/>\r
+                       <Tool Name="VCFxCopTool"/>\r
+                       <Tool Name="VCAppVerifierTool"/>\r
+                       <Tool Name="VCWebDeploymentTool"/>\r
+                       <Tool Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration Name="Debug|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">\r
+                       <Tool Name="VCPreBuildEventTool"/>\r
+                       <Tool Name="VCCustomBuildTool"/>\r
+                       <Tool Name="MASM"/>\r
+                       <Tool Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool Name="VCMIDLTool" TargetEnvironment="3"/>\r
+                       <Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /DDO_ITT_ANNOTATE /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." MinimalRebuild="false" ExceptionHandling="0" BasicRuntimeChecks="0" RuntimeLibrary="3" TreatWChar_tAsBuiltInType="true" UsePrecompiledHeader="0" WarningLevel="4" SuppressStartupBanner="false" Detect64BitPortabilityProblems="false" DebugInformationFormat="3" ShowIncludes="false"/>\r
+                       <Tool Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool Name="VCResourceCompilerTool"/>\r
+                       <Tool Name="VCPreLinkEventTool"/>\r
+                       <Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbbmalloc.def" OutputFile="$(OutDir)\tbbmalloc_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17"/>\r
+                       <Tool Name="VCALinkTool"/>\r
+                       <Tool Name="VCManifestTool"/>\r
+                       <Tool Name="VCXDCMakeTool"/>\r
+                       <Tool Name="VCBscMakeTool"/>\r
+                       <Tool Name="VCFxCopTool"/>\r
+                       <Tool Name="VCAppVerifierTool"/>\r
+                       <Tool Name="VCWebDeploymentTool"/>\r
+                       <Tool Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration Name="Release|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">\r
+                       <Tool Name="VCPreBuildEventTool"/>\r
+                       <Tool Name="VCCustomBuildTool"/>\r
+                       <Tool Name="MASM"/>\r
+                       <Tool Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool Name="VCMIDLTool"/>\r
+                       <Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /Oy /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" SuppressStartupBanner="false" Detect64BitPortabilityProblems="false" DebugInformationFormat="3"/>\r
+                       <Tool Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool Name="VCResourceCompilerTool"/>\r
+                       <Tool Name="VCPreLinkEventTool"/>\r
+                       <Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbbmalloc.def" OutputFile="$(OutDir)\tbbmalloc.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="1"/>\r
+                       <Tool Name="VCALinkTool"/>\r
+                       <Tool Name="VCManifestTool"/>\r
+                       <Tool Name="VCXDCMakeTool"/>\r
+                       <Tool Name="VCBscMakeTool"/>\r
+                       <Tool Name="VCFxCopTool"/>\r
+                       <Tool Name="VCAppVerifierTool"/>\r
+                       <Tool Name="VCWebDeploymentTool"/>\r
+                       <Tool Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration Name="Release|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">\r
+                       <Tool Name="VCPreBuildEventTool"/>\r
+                       <Tool Name="VCCustomBuildTool"/>\r
+                       <Tool Name="MASM"/>\r
+                       <Tool Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool Name="VCMIDLTool" TargetEnvironment="3"/>\r
+                       <Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" SuppressStartupBanner="false" Detect64BitPortabilityProblems="false" DebugInformationFormat="3"/>\r
+                       <Tool Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool Name="VCResourceCompilerTool"/>\r
+                       <Tool Name="VCPreLinkEventTool"/>\r
+                       <Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:$(IntDir)\tbbmalloc.def" OutputFile="$(OutDir)\tbbmalloc.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="17"/>\r
+                       <Tool Name="VCALinkTool"/>\r
+                       <Tool Name="VCManifestTool"/>\r
+                       <Tool Name="VCXDCMakeTool"/>\r
+                       <Tool Name="VCBscMakeTool"/>\r
+                       <Tool Name="VCFxCopTool"/>\r
+                       <Tool Name="VCAppVerifierTool"/>\r
+                       <Tool Name="VCWebDeploymentTool"/>\r
+                       <Tool Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter Name="Source Files" Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">\r
+                       <File RelativePath="..\..\src\tbb\ia32-masm\atomic_support.asm">\r
+                               <FileConfiguration Name="Debug|Win32">\r
+                                       <Tool Name="MASM" AdditionalOptions="/coff /Zi"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">\r
+                                       <Tool Name="MASM" AdditionalOptions="/coff /Zi"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|x64" ExcludedFromBuild="true">\r
+                                       <Tool Name="MASM"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\intel64-masm\atomic_support.asm">\r
+                               <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true">\r
+                                       <Tool Name="MASM"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Debug|x64">\r
+                                       <Tool Name="VCCustomBuildTool" Description="building atomic_support.obj" CommandLine="ml64 /Fo&quot;intel64\Debug\atomic_support.obj&quot; /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm\r
+" Outputs="intel64\Debug\atomic_support.obj"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true">\r
+                                       <Tool Name="MASM"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|x64">\r
+                                       <Tool Name="VCCustomBuildTool" Description="building atomic_support.obj" CommandLine="ml64 /Fo&quot;intel64\Release\atomic_support.obj&quot;  /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm\r
+" Outputs="intel64\Release\atomic_support.obj"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\itt_notify_proxy.c">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbb\ia32-masm\lock_byte.asm">\r
+                               <FileConfiguration Name="Debug|Win32">\r
+                                       <Tool Name="MASM" AdditionalOptions="/coff /Zi"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">\r
+                                       <Tool Name="MASM" AdditionalOptions="/coff /Zi"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|x64" ExcludedFromBuild="true">\r
+                                       <Tool Name="MASM"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbbmalloc\win32-tbbmalloc-export.def">\r
+                               <FileConfiguration Name="Debug|Win32">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;$(IntDir)\tbbmalloc.def\r
+" Outputs="$(IntDir)\tbbmalloc.def"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Debug|x64" ExcludedFromBuild="true">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;$(IntDir)\tbbmalloc.def\r
+" Outputs="$(IntDir)\tbbmalloc.def"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|Win32">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;$(IntDir)\tbbmalloc.def\r
+" Outputs="$(IntDir)\tbbmalloc.def"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|x64" ExcludedFromBuild="true">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;$(IntDir)\tbb.def\r
+" Outputs="$(IntDir)\tbb.def"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbbmalloc\win64-tbbmalloc-export.def">\r
+                               <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;$(IntDir)\tbb.def\r
+" Outputs="$(IntDir)\tbb.def"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Debug|x64">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;$(IntDir)\tbbmalloc.def\r
+" Outputs="$(IntDir)\tbbmalloc.def"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbb.def file" CommandLine="cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;$(IntDir)\tbb.def\r
+" Outputs="$(IntDir)\tbb.def"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|x64">\r
+                                       <Tool Name="VCCustomBuildTool" Description="generating tbbmalloc.def file" CommandLine="cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 &gt;$(IntDir)\tbbmalloc.def\r
+" Outputs="$(IntDir)\tbbmalloc.def"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbbmalloc\tbbmalloc.cpp"/><File RelativePath="..\..\src\tbb\dynamic_link.cpp"/><File RelativePath="..\..\src\tbb\tbb_misc.cpp"/><File RelativePath="..\..\src\tbbmalloc\MemoryAllocator.cpp"/></Filter>\r
+               <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl;inc;xsd" UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">\r
+                       <File RelativePath="..\..\include\tbb\_tbb_windef.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\aligned_space.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\atomic.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\blocked_range.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\blocked_range2d.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\blocked_range3d.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\cache_aligned_allocator.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\concurrent_hash_map.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\concurrent_queue.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\concurrent_vector.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbbmalloc\Customize.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\enumerable_thread_specific.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbbmalloc\LifoQueue.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbbmalloc\MapMemory.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\null_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\null_rw_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\parallel_do.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\parallel_for.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\parallel_reduce.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\parallel_scan.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\parallel_sort.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\parallel_while.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\partitioner.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\pipeline.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\queuing_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\queuing_rw_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\recursive_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\scalable_allocator.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\spin_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\spin_rw_mutex.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbbmalloc\Statistics.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\task.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\task_scheduler_init.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\task_scheduler_observer.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbb_allocator.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbb_exception.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbb_machine.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbb_profiling.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbb_stddef.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbb_thread.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbbmalloc_proxy.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tick_count.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\src\tbbmalloc\TypeDefinitions.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\machine\windows_intel64.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\machine\windows_ia32.h">\r
+                       </File>\r
+               </Filter>\r
+               <Filter Name="Resource Files" Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">\r
+                       <File RelativePath="..\..\src\tbbmalloc\tbbmalloc.rc">\r
+                               <FileConfiguration Name="Debug|Win32">\r
+                                       <Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Debug|x64">\r
+                                       <Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|Win32">\r
+                                       <Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|x64">\r
+                                       <Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/tbbmalloc_proxy.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/tbbmalloc_proxy.vcproj
new file mode 100644 (file)
index 0000000..8653241
--- /dev/null
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="windows-1251"?>\r
+<VisualStudioProject ProjectType="Visual C++" Version="8,00" Name="tbbmalloc_proxy" ProjectGUID="{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}" RootNamespace="tbbmalloc_proxy" Keyword="Win32Proj">\r
+       <Platforms>\r
+               <Platform Name="Win32"/>\r
+               <Platform Name="x64"/>\r
+       </Platforms>\r
+       <ToolFiles>\r
+               <DefaultToolFile FileName="masm.rules"/>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration Name="Debug|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">\r
+                       <Tool Name="VCPreBuildEventTool"/>\r
+                       <Tool Name="VCCustomBuildTool"/>\r
+                       <Tool Name="MASM"/>\r
+                       <Tool Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool Name="VCMIDLTool"/>\r
+                       <Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /DDO_ITT_ANNOTATE /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling="1" BasicRuntimeChecks="0" RuntimeLibrary="3" UsePrecompiledHeader="0" WarningLevel="4" SuppressStartupBanner="false" Detect64BitPortabilityProblems="false" DebugInformationFormat="3"/>\r
+                       <Tool Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool Name="VCResourceCompilerTool"/>\r
+                       <Tool Name="VCPreLinkEventTool"/>\r
+                       <Tool Name="VCLinkerTool" AdditionalOptions="/DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO " AdditionalDependencies="$(OutDir)\tbbmalloc_debug.lib" OutputFile="$(OutDir)\tbbmalloc_proxy_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1"/>\r
+                       <Tool Name="VCALinkTool"/>\r
+                       <Tool Name="VCManifestTool"/>\r
+                       <Tool Name="VCXDCMakeTool"/>\r
+                       <Tool Name="VCBscMakeTool"/>\r
+                       <Tool Name="VCFxCopTool"/>\r
+                       <Tool Name="VCAppVerifierTool"/>\r
+                       <Tool Name="VCWebDeploymentTool"/>\r
+                       <Tool Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration Name="Debug|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0">\r
+                       <Tool Name="VCPreBuildEventTool"/>\r
+                       <Tool Name="VCCustomBuildTool"/>\r
+                       <Tool Name="MASM"/>\r
+                       <Tool Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool Name="VCMIDLTool" TargetEnvironment="3"/>\r
+                       <Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /DDO_ITT_ANNOTATE /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." MinimalRebuild="false" ExceptionHandling="0" BasicRuntimeChecks="0" RuntimeLibrary="3" TreatWChar_tAsBuiltInType="true" UsePrecompiledHeader="0" WarningLevel="4" SuppressStartupBanner="false" Detect64BitPortabilityProblems="false" DebugInformationFormat="3" ShowIncludes="false"/>\r
+                       <Tool Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool Name="VCResourceCompilerTool"/>\r
+                       <Tool Name="VCPreLinkEventTool"/>\r
+                       <Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  /DEF:$(IntDir)\tbbmalloc.def" OutputFile="$(OutDir)\tbbmalloc_proxy_debug.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17"/>\r
+                       <Tool Name="VCALinkTool"/>\r
+                       <Tool Name="VCManifestTool"/>\r
+                       <Tool Name="VCXDCMakeTool"/>\r
+                       <Tool Name="VCBscMakeTool"/>\r
+                       <Tool Name="VCFxCopTool"/>\r
+                       <Tool Name="VCAppVerifierTool"/>\r
+                       <Tool Name="VCWebDeploymentTool"/>\r
+                       <Tool Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration Name="Release|Win32" OutputDirectory="$(SolutionDir)ia32\$(ConfigurationName)" IntermediateDirectory="ia32\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">\r
+                       <Tool Name="VCPreBuildEventTool"/>\r
+                       <Tool Name="VCCustomBuildTool"/>\r
+                       <Tool Name="MASM"/>\r
+                       <Tool Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool Name="VCMIDLTool"/>\r
+                       <Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /Oy /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" SuppressStartupBanner="false" Detect64BitPortabilityProblems="false" DebugInformationFormat="3"/>\r
+                       <Tool Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool Name="VCResourceCompilerTool"/>\r
+                       <Tool Name="VCPreLinkEventTool"/>\r
+                       <Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO  " OutputFile="$(OutDir)\tbbmalloc_proxy.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="1"/>\r
+                       <Tool Name="VCALinkTool"/>\r
+                       <Tool Name="VCManifestTool"/>\r
+                       <Tool Name="VCXDCMakeTool"/>\r
+                       <Tool Name="VCBscMakeTool"/>\r
+                       <Tool Name="VCFxCopTool"/>\r
+                       <Tool Name="VCAppVerifierTool"/>\r
+                       <Tool Name="VCWebDeploymentTool"/>\r
+                       <Tool Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration Name="Release|x64" OutputDirectory="$(SolutionDir)intel64\$(ConfigurationName)" IntermediateDirectory="intel64\$(ConfigurationName)" ConfigurationType="2" CharacterSet="0" WholeProgramOptimization="1">\r
+                       <Tool Name="VCPreBuildEventTool"/>\r
+                       <Tool Name="VCCustomBuildTool"/>\r
+                       <Tool Name="MASM"/>\r
+                       <Tool Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool Name="VCMIDLTool" TargetEnvironment="3"/>\r
+                       <Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /W4 /Wp64 /I../../src /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" SuppressStartupBanner="false" Detect64BitPortabilityProblems="false" DebugInformationFormat="3"/>\r
+                       <Tool Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool Name="VCResourceCompilerTool"/>\r
+                       <Tool Name="VCPreLinkEventTool"/>\r
+                       <Tool Name="VCLinkerTool" AdditionalOptions="/nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:$(IntDir)\tbbmalloc.def" OutputFile="$(OutDir)\tbbmalloc_proxy.dll" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" TargetMachine="17"/>\r
+                       <Tool Name="VCALinkTool"/>\r
+                       <Tool Name="VCManifestTool"/>\r
+                       <Tool Name="VCXDCMakeTool"/>\r
+                       <Tool Name="VCBscMakeTool"/>\r
+                       <Tool Name="VCFxCopTool"/>\r
+                       <Tool Name="VCAppVerifierTool"/>\r
+                       <Tool Name="VCWebDeploymentTool"/>\r
+                       <Tool Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter Name="Source Files" Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">\r
+                       <File RelativePath="..\..\src\tbbmalloc\proxy.cpp"/><File RelativePath="..\..\src\tbbmalloc\tbb_function_replacement.cpp"/></Filter>\r
+               <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl;inc;xsd" UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">\r
+                       <File RelativePath="..\..\src\tbbmalloc\tbb_function_replacement.h">\r
+                       </File>\r
+                       <File RelativePath="..\..\include\tbb\tbbmalloc_proxy.h">\r
+                       </File>\r
+               </Filter>\r
+               <Filter Name="Resource Files" Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">\r
+                       <File RelativePath="..\..\src\tbbmalloc\tbbmalloc.rc">\r
+                               <FileConfiguration Name="Debug|Win32">\r
+                                       <Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Debug|x64">\r
+                                       <Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|Win32">\r
+                                       <Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration Name="Release|x64">\r
+                                       <Tool Name="VCResourceCompilerTool" AdditionalOptions="/I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/version_string.tmp b/deal.II/contrib/tbb/tbb22_20090809oss/build/vsproject/version_string.tmp
new file mode 100644 (file)
index 0000000..2098d67
--- /dev/null
@@ -0,0 +1 @@
+#define __TBB_VERSION_STRINGS "Empty"
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/windows.cl.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/windows.cl.inc
new file mode 100644 (file)
index 0000000..c9661ce
--- /dev/null
@@ -0,0 +1,122 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+#------------------------------------------------------------------------------
+# Define compiler-specific variables.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting compiler flags.
+#------------------------------------------------------------------------------
+CPLUS = cl /nologo
+LINK_FLAGS = /link /nologo
+LIB_LINK_FLAGS=/link /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO
+MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)
+EH_FLAGS = /EHsc /GR
+              
+ifeq ($(cfg), release)
+        CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t
+        ASM_FLAGS =
+ifeq (ia32,$(arch))
+        CPLUS_FLAGS += /Oy
+endif
+endif
+ifeq ($(cfg), debug)
+        CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /DDO_ITT_ANNOTATE
+        ASM_FLAGS = /DUSE_FRAME_POINTER
+endif
+
+
+COMPILE_ONLY = /c
+PREPROC_ONLY = /TC /EP
+INCLUDE_KEY = /I
+DEFINE_KEY = /D
+OUTPUT_KEY = /Fe
+OUTPUTOBJ_KEY = /Fo
+WARNING_AS_ERROR_KEY = /WX
+
+ifeq ($(runtime),vc7.1)
+        WARNING_KEY = /W3
+else
+        WARNING_KEY = /W4
+endif
+
+DYLIB_KEY = /DLL
+EXPORT_KEY = /DEF:
+
+ifeq ($(runtime),vc8)
+        OPENMP_FLAG = /openmp
+        WARNING_KEY += /Wp64
+        CPLUS_FLAGS += /D_USE_RTM_VERSION
+endif
+ifeq ($(runtime),vc9)
+        OPENMP_FLAG = /openmp
+endif
+
+ifeq (intel64,$(arch))
+        CPLUS_FLAGS += /GS-
+endif
+
+
+
+CPLUS_FLAGS += /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE \
+        /D_WIN32_WINNT=$(_WIN32_WINNT)
+C_FLAGS = $(CPLUS_FLAGS)
+#------------------------------------------------------------------------------
+# End of setting compiler flags.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+ASSEMBLY_SOURCE=$(arch)-masm
+ifeq (intel64,$(arch))
+    ASM=ml64
+    ASM_FLAGS += /DEM64T=1 /c /Zi
+    TBB_ASM.OBJ = atomic_support.obj
+else
+    ASM=ml
+    ASM_FLAGS += /c /coff /Zi
+    TBB_ASM.OBJ = atomic_support.obj lock_byte.obj
+endif
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+M_CPLUS_FLAGS = $(subst $(EH_FLAGS),/EHs-,$(CPLUS_FLAGS))
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# End of define compiler-specific variables.
+#------------------------------------------------------------------------------
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/windows.gcc.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/windows.gcc.inc
new file mode 100644 (file)
index 0000000..b52d2a7
--- /dev/null
@@ -0,0 +1,122 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+#------------------------------------------------------------------------------
+# Overriding settings from windows.inc
+#------------------------------------------------------------------------------
+
+SLASH= $(strip \)
+OBJ = o
+LIBEXT = dll # MinGW allows linking with DLLs directly
+
+TBB.RES =
+MALLOC.RES =
+TBB.MANIFEST =
+MALLOC.MANIFEST =
+
+# TODO: do better when/if mingw64 support is added
+TBB.DEF = $(tbb_root)/src/tbb/lin32-tbb-export.def
+MALLOC.DEF = $(MALLOC_ROOT)/win-gcc-tbbmalloc-export.def
+
+LINK_TBB.LIB = $(TBB.LIB)
+
+#------------------------------------------------------------------------------
+# End of overridden settings
+#------------------------------------------------------------------------------
+# Compiler-specific variables
+#------------------------------------------------------------------------------
+
+CPLUS = g++ 
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY =
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -Wall  -Wno-uninitialized
+WARNING_SUPPRESS = -Wno-parentheses
+DYLIB_KEY = -shared
+LIBDL = 
+EXPORT_KEY = -Wl,--version-script,
+LIBS = -lpsapi
+
+#------------------------------------------------------------------------------
+# End of compiler-specific variables
+#------------------------------------------------------------------------------
+# Command lines
+#------------------------------------------------------------------------------
+
+LINK_FLAGS = -Wl,--enable-auto-import
+LIB_LINK_FLAGS = $(DYLIB_KEY)
+
+ifeq ($(cfg), release)
+        CPLUS_FLAGS = -O2
+endif
+ifeq ($(cfg), debug)
+        CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG
+endif
+CPLUS_FLAGS += -DUSE_WINTHREAD
+
+# MinGW specific
+CPLUS_FLAGS += -D__MSVCRT_VERSION__=0x0700 -msse -mthreads
+
+CONLY = gcc
+C_FLAGS = $(CPLUS_FLAGS)
+
+ifeq (intel64,$(arch))
+    CPLUS_FLAGS += -m64
+    LIB_LINK_FLAGS += -m64
+endif 
+
+ifeq (ia32,$(arch))
+    CPLUS_FLAGS += -m32
+    LIB_LINK_FLAGS += -m32
+endif 
+
+#------------------------------------------------------------------------------
+# End of command lines
+#------------------------------------------------------------------------------
+# Setting assembler data
+#------------------------------------------------------------------------------
+
+ASM=
+ASM_FLAGS=
+TBB_ASM.OBJ=
+ASSEMBLY_SOURCE=$(arch)-gas
+
+#------------------------------------------------------------------------------
+# End of setting assembler data
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data
+#------------------------------------------------------------------------------
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/windows.icl.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/windows.icl.inc
new file mode 100644 (file)
index 0000000..7ca2992
--- /dev/null
@@ -0,0 +1,144 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+#------------------------------------------------------------------------------
+# Define compiler-specific variables.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting default configuration to release.
+#------------------------------------------------------------------------------
+cfg ?= release
+#------------------------------------------------------------------------------
+# End of setting default configuration to release.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting compiler flags.
+#------------------------------------------------------------------------------
+CPLUS = icl /nologo $(VCCOMPAT_FLAG)
+LINK_FLAGS = /link /nologo
+LIB_LINK_FLAGS= /link /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO
+MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)
+EH_FLAGS = /EHsc /GR
+
+ifeq ($(cfg), release)
+    CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t
+    ASM_FLAGS =
+ifeq (ia32,$(arch))
+    CPLUS_FLAGS += /Oy
+endif
+endif
+ifeq ($(cfg), debug)
+    CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /DDO_ITT_ANNOTATE
+    LINK_FLAGS += libmmds.lib /NODEFAULTLIB:libmmdd.lib
+    ASM_FLAGS = /DUSE_FRAME_POINTER
+endif
+
+
+COMPILE_ONLY = /c /QMMD
+PREPROC_ONLY = /EP /Tc
+INCLUDE_KEY = /I
+DEFINE_KEY = /D
+OUTPUT_KEY = /Fe
+OUTPUTOBJ_KEY = /Fo
+WARNING_AS_ERROR_KEY = /WX
+WARNING_KEY = /W3
+DYLIB_KEY = /DLL
+EXPORT_KEY = /DEF:
+
+ifeq (intel64,$(arch))
+    CPLUS_FLAGS += /GS-
+endif
+
+ifneq (,$(codecov))
+    CPLUS_FLAGS += /Qprof-genx
+else
+    CPLUS_FLAGS += /DDO_ITT_NOTIFY
+endif
+
+OPENMP_FLAG = /Qopenmp
+CPLUS_FLAGS += /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE \
+               /D_WIN32_WINNT=$(_WIN32_WINNT)
+
+ifeq ($(runtime),vc8)
+        CPLUS_FLAGS += /D_USE_RTM_VERSION
+endif
+
+C_FLAGS = $(CPLUS_FLAGS)
+
+ifneq (0,$(lambdas))
+       CPLUS_FLAGS += /Qstd=c++0x /D_TBB_CPP0X
+endif
+
+VCVERSION:=$(runtime)
+VCCOMPAT_FLAG := $(if $(findstring vc7.1, $(VCVERSION)),/Qvc7.1)
+ifeq ($(VCCOMPAT_FLAG),)
+        VCCOMPAT_FLAG := $(if $(findstring vc8, $(VCVERSION)),/Qvc8)
+endif
+ifeq ($(VCCOMPAT_FLAG),)
+        VCCOMPAT_FLAG := $(if $(findstring vc9, $(VCVERSION)),/Qvc9)
+endif
+ifeq ($(VCCOMPAT_FLAG),)
+        $(error VC version not detected correctly: $(VCVERSION) )
+endif
+export VCCOMPAT_FLAG
+#------------------------------------------------------------------------------
+# End of setting compiler flags.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+ASSEMBLY_SOURCE=$(arch)-masm
+ifeq (intel64,$(arch))
+    ASM=ml64
+    ASM_FLAGS += /DEM64T=1 /c /Zi
+    TBB_ASM.OBJ = atomic_support.obj
+else
+    ASM=ml
+    ASM_FLAGS += /c /coff /Zi
+    TBB_ASM.OBJ = atomic_support.obj lock_byte.obj
+endif
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+M_CPLUS_FLAGS = $(subst $(EH_FLAGS),/EHs-,$(CPLUS_FLAGS))
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# End of define compiler-specific variables.
+#------------------------------------------------------------------------------
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/windows.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/windows.inc
new file mode 100644 (file)
index 0000000..400864f
--- /dev/null
@@ -0,0 +1,100 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+ifdef tbb_build_dir
+  test_dir:=$(tbb_build_dir)
+else
+  test_dir:=.
+endif
+
+# TODO give an error if archs doesn't match
+ifndef arch
+  export arch:=$(shell cmd /C "cscript /nologo /E:jscript $(tbb_root)/build/detect.js /arch $(compiler)")
+endif
+
+ifndef runtime
+  export runtime:=$(shell cmd /C "cscript /nologo /E:jscript $(tbb_root)/build/detect.js /runtime $(compiler)")
+endif
+
+native_compiler := cl
+export compiler ?= cl
+debugger ?= devenv /debugexe
+
+CMD=cmd /C
+CWD=$(shell cmd /C echo %CD%)
+RM=cmd /C del /Q /F
+RD=cmd /C rmdir
+MD=cmd /c mkdir
+SLASH=\\
+NUL = nul
+
+OBJ = obj
+DLL = dll
+LIBEXT = lib
+
+def_prefix = $(if $(findstring ia32,$(arch)),win32,win64)
+
+# Target Windows version. Do not increase beyond 0x0500 without prior discussion!
+# Used as the value for macro definition opiton in windows.cl.inc etc.
+_WIN32_WINNT=0x0400
+
+TBB.DEF = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.def
+TBB.DLL = tbb$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = tbb$(DEBUG_SUFFIX).$(LIBEXT)
+TBB.RES = tbb_resource.res
+# On Windows, we use #pragma comment to set the proper TBB lib to link with
+# But for cross-configuration testing, need to link explicitly
+LINK_TBB.LIB = $(if $(crosstest),$(TBB.LIB))
+TBB.MANIFEST = 
+ifneq ($(filter vc8 vc9,$(runtime)),)
+    TBB.MANIFEST = tbbmanifest.exe.manifest
+endif
+
+MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def
+MALLOC.DLL = tbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.LIB = tbbmalloc$(DEBUG_SUFFIX).$(LIBEXT)
+MALLOC.RES = tbbmalloc.res
+MALLOC.MANIFEST =
+ifneq ($(filter vc8 vc9,$(runtime)),)
+MALLOC.MANIFEST = tbbmanifest.exe.manifest
+endif
+LINK_MALLOC.LIB = $(MALLOC.LIB)
+
+MALLOCPROXY.DLL = tbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)
+MALLOCPROXY.LIB = tbbmalloc_proxy$(DEBUG_SUFFIX).$(LIBEXT)
+
+RML.DEF = $(RML_SERVER_ROOT)/$(def_prefix)-rml-export.def
+RML.DLL = irml$(DEBUG_SUFFIX).$(DLL)
+RML.LIB = irml$(DEBUG_SUFFIX).$(LIBEXT)
+RML.RES = irml.res
+ifneq ($(runtime),vc7.1)
+RML.MANIFEST = tbbmanifest.exe.manifest
+endif
+
+MAKE_VERSIONS = cmd /C cscript /nologo /E:jscript $(subst \,/,$(tbb_root))/build/version_info_windows.js $(compiler) $(arch) $(subst \,/,"$(CPLUS) $(CPLUS_FLAGS) $(INCLUDES)") > version_string.tmp
+MAKE_TBBVARS  = cmd /C "$(subst /,\,$(tbb_root))\build\generate_tbbvars.bat"
+
+TEST_LAUNCHER =  $(subst /,\,$(tbb_root))\build\test_launcher.bat
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/winlrb.cl.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/winlrb.cl.inc
new file mode 100644 (file)
index 0000000..618dba5
--- /dev/null
@@ -0,0 +1,66 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+include $(tbb_root)/build/windows.cl.inc
+
+ifeq ($(cfg), debug)
+    CFG_LETTER = d
+else
+    CFG_LETTER = r
+endif
+
+_CPLUS_FLAGS_HOST := $(CPLUS_FLAGS) /I$(LRB_INC_DIR) $(LINK_FLAGS) /LIBPATH:$(LRB_LIB_DIR) xn_host$(LRB_HOST_ARCH)$(CFG_LETTER).lib
+
+TEST_EXT = dll
+CPLUS_FLAGS += /I$(LRB_INC_DIR) /D__LRB__
+LIB_LINK_FLAGS += /LIBPATH:$(LRB_LIB_DIR) xn_lrb$(LRB_HOST_ARCH)$(CFG_LETTER).lib
+LINK_FLAGS = $(LIB_LINK_FLAGS)
+OPENMP_FLAG =
+
+ifdef TEST_RESOURCE
+LINK_FLAGS += $(TEST_RESOURCE)
+
+TEST_LAUNCHER_NAME = harness_lrb_host
+AUX_TEST_DEPENDENCIES = $(TEST_LAUNCHER_NAME).exe
+
+$(TEST_LAUNCHER_NAME).exe: $(TEST_LAUNCHER_NAME).cpp
+       cl /Fe$@ $< $(_CPLUS_FLAGS_HOST)
+
+NO_LEGACY_TESTS = 1
+NO_C_TESTS = 1
+TEST_LAUNCHER=
+endif # TEST_RESOURCE
+
+#test_model_plugin.%:
+#      @echo test_model_plugin is not supported for LRB architecture so far
+
+ifeq ($(BUILDING_PHASE),0)  # examples
+    export RM = del /Q /F
+    export LIBS = -shared -lthr -z muldefs -L$(work_dir)_debug -L$(work_dir)_release
+    export UI = con
+    export x64 = 64
+    export CXXFLAGS = -xR -I..\..\..\include
+endif # examples
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/winlrb.icc.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/winlrb.icc.inc
new file mode 100644 (file)
index 0000000..427d06c
--- /dev/null
@@ -0,0 +1,49 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+
+include $(tbb_root)/build/winlrb.cl.inc
+
+TEST_EXT = so
+.PRECIOUS: %.$(TEST_EXT)
+
+include $(tbb_root)/build/freebsd.gcc.inc
+
+WARNING_KEY = -w1
+CPLUS = icpc
+CONLY = icc
+#LIBS = -u _read -lcprts -lthr -lc
+#LIBS = -lthr
+LIBS = -u _read -lcprts -lthr -limf -lc
+LINK_FLAGS = -L$(LRB_LIB_DIR) $(DYLIB_KEY) -lxn$(XN_VER)_lrb64$(CFG_LETTER)
+CPLUS_FLAGS += -xR $(PIC_KEY) -I$(LRB_INC_DIR) -DXENSIM
+C_FLAGS = $(CPLUS_FLAGS)
+LIB_LINK_FLAGS = $(LINK_FLAGS)
+
+ifeq ($(cfg), release)
+    # workaround for LRB compiler issues
+    CPLUS_FLAGS := $(subst -O2,-O0, $(CPLUS_FLAGS))
+endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/build/winlrb.inc b/deal.II/contrib/tbb/tbb22_20090809oss/build/winlrb.inc
new file mode 100644 (file)
index 0000000..f72c66f
--- /dev/null
@@ -0,0 +1,88 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+ifndef XN_VER
+export LRBSDK = $(LARRABEE_CORE_LATEST)
+export LRB_LIB_DIR = "$(LRBSDK)lib"
+export LRB_INC_DIR = "$(LRBSDK)include"
+
+# Function $(wildcard pattern) does not work with paths containing spaces!
+_lrb_lib = $(shell cmd /C "dir /B "$(LRBSDK)lib\libxn*_lrb64d.so")
+export XN_VER = $(patsubst libxn%_lrb64d.so,%,$(_lrb_lib))
+
+ifeq (1,$(NETSIM_LRB_32_OVERRIDE))
+    export LRB_HOST_ARCH = 32
+else
+    export LRB_HOST_ARCH = 64
+endif
+
+export run_cmd = harness_lrb_host.exe
+
+export UI = con
+
+endif #XN_VER
+
+include $(tbb_root)/build/windows.inc
+
+ifneq (1,$(netsim))
+# Target environment is native LRB or LrbFSim
+
+export compiler = icc
+export arch := lrb
+
+target_machine = $(subst -,_,$(shell icpc -dumpmachine))
+runtime = $(subst _lrb_,_,$(target_machine))
+# -dumpmachine option does not work in R9 Core SDK 5
+ifeq ($(runtime),)
+    runtime = x86_64_freebsd
+endif
+export runtime:=$(runtime)_xn$(XN_VER)
+
+OBJ = o
+DLL = so
+LIBEXT = so
+
+TBB.DEF =
+TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+LINK_TBB.LIB = $(TBB.DLL)
+TBB.RES =
+
+MALLOC.DEF :=
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.LIB = $(MALLOC.DLL)
+MALLOC.RES = 
+
+MAKE_VERSIONS = cmd /C cscript /nologo /E:jscript $(subst \,/,$(tbb_root))/build/version_info_winlrb.js $(compiler) $(arch) $(subst \,/,"$(CPLUS) $(CPLUS_FLAGS) $(INCLUDES)") > version_string.tmp
+MAKE_TBBVARS  = cmd /C "$(subst /,\,$(tbb_root))\build\generate_tbbvars.bat"
+
+ifneq (1,$(XENSIM_ENABLED))
+    export run_cmd = rem
+endif
+
+TBB_NOSTRICT = 1
+
+endif # lrbfsim
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/Release_Notes.txt b/deal.II/contrib/tbb/tbb22_20090809oss/doc/Release_Notes.txt
new file mode 100644 (file)
index 0000000..8fc0549
--- /dev/null
@@ -0,0 +1,151 @@
+------------------------------------------------------------------------
+Intel(R) Threading Building Blocks - Release Notes
+                 Version 2.2
+------------------------------------------------------------------------
+
+
+System Requirements
+-------------------
+
+Intel(R) Threading Building Blocks (Intel(R) TBB) is available
+commercially (see http://www.intel.com/software/products/threading) as a
+binary distribution, and in open source, in both source and binary
+forms (see http://threadingbuildingblocks.org).
+
+When built from source, Intel(R) TBB is intended to be highly portable
+and so supports a wide variety of operating systems and platforms (see
+http://threadingbuildingblocks.org for more details).
+
+Binary distributions, including commercial distributions, are validated
+and officially supported for the hardware, software, operating systems
+and compilers listed here.
+
+Hardware - Recommended
+
+    Microsoft* Windows* Systems
+       Intel(R) Core(TM) 2 Duo processor or Intel(R) Xeon(R) processor
+           or higher
+    Linux* Systems
+       Intel(R) Core(TM) 2 Duo processor or Intel(R) Xeon(R) processor
+           or Intel(R) Itanium(R) processor or higher
+    Mac OS* X Systems
+       Intel(R) Core(TM) 2 Duo processor or higher
+
+Hardware - Supported
+
+    Intel(R) Pentium(R) 4 processor family and higher
+    Intel(R) Itanium(R) processor family (Linux* systems only)
+    Non Intel(R) processors compatible with the above processors
+
+Software - Minimum Requirements
+
+    Supported operating system (see below)
+    Supported compiler (see below)
+    Xcode* tool suite 2.4.1 or higher (Mac OS* X systems only)
+    Microsoft* Internet Explorer* 6.0, or other compatible web browser
+    Adobe(R) Reader(R)* 6.0 or higher
+
+Software - Recommended
+
+    Intel(R) Parallel Studio
+    Intel(R) C++ Compiler 10.0 or higher
+    Intel(R) Thread Checker 3.1 or higher
+    Intel(R) Thread Profiler 3.1 or higher
+
+Software - Supported Operating Systems
+
+    Microsoft* Windows* Systems
+       Microsoft* Windows* XP Professional
+       Microsoft* Windows* Server 2003
+       Microsoft* Windows* Vista
+       Microsoft* Windows* Server 2008
+    Linux* Systems
+       Red Hat* Enterprise Linux* 3, 4, 5
+           (when using Red Hat* Enterprise Linux* 4 with Intel(R)
+           Itanium(R) processors, operating system Update 2 or higher
+           is recommended)
+       Red Hat* Fedora* 10, 11
+           (not with Intel(R) Itanium(R) processors)
+       Asianux* 3.0
+       Debian* GNU/Linux* 4.0, 5.0
+       Ubuntu* 8.04, 8.10, 9.04
+       SuSE* Linux* Enterprise Server (SLES) 9, 10, 11
+       SGI* Propack* 5.0 (not with IA-32 architecture processors)
+       Turbolinux* 11
+    Mac OS* X Systems
+       Mac OS* X 10.5.6 or higher
+
+Software - Supported Compilers
+
+    Microsoft* Visual C++* 7.1 (Microsoft* Visual Studio* .NET 2003,
+       Windows* systems only, deprecated)
+    Microsoft* Visual C++ 8.0 (Microsoft* Visual Studio* 2005,
+       Windows* systems only)
+    Microsoft* Visual C++ 9.0 (Microsoft* Visual Studio* 2008,
+       Windows* systems only)
+    Intel(R) C++ Compiler 10.0 or higher
+    For each supported Linux* operating system, the standard gcc
+       version provided with that operating system is supported,
+       including gcc 3.2 through 4.4
+    For each supported Mac OS* X operating system, the standard gcc
+       version provided with that operating system is supported,
+       including: 4.0.1 (Xcode* tool suite 3.1.2 or higher)
+
+
+Known Issues
+------------
+
+Please note the following with respect to this particular release of
+Intel(R) Threading Building Blocks.
+
+Library Issues
+
+    - The atomic<long long> and atomic<unsigned long long> templates are
+       not supported when using the Microsoft* Visual C++* 7.1
+       (Microsoft* Visual Studio* .NET 2003) compiler.
+
+    - Unhandled exceptions in the user code executed in the context of
+       TBB algorithms or containers may lead to segmentation faults when
+       Intel(R) C++ Compiler 10.x is used with glibc 2.3.2, 2.3.3, or 2.3.4.
+
+    - To allow more accurate results to be obtained with Intel(R) Thread
+       Checker or Intel(R) Thread Profiler, download the latest update
+       releases of these products before using them with Intel(R)
+       Threading Building Blocks.
+
+    - If you are using Intel(R) Threading Building Blocks and OpenMP*
+       constructs mixed together in rapid succession in the same
+       program, and you are using Intel(R) compilers for your OpenMP*
+       code, set KMP_BLOCKTIME to a small value (e.g., 20 milliseconds)
+       to improve performance.  This setting can also be made within
+       your OpenMP* code via the kmp_set_blocktime() library call.  See
+       the Intel(R) compiler OpenMP* documentation for more details on
+       KMP_BLOCKTIME and kmp_set_blocktime().
+
+    - In general, non-debug ("release") builds of applications or
+       examples should link against the non-debug versions of the
+       Intel(R) Threading Building Blocks libraries, and debug builds
+       should link against the debug versions of these libraries.  On
+       Windows* systems, compile with /MD and use Intel(R) Threading
+       Building Blocks release libraries, or compile with /MDd and use
+       debug libraries; not doing so may cause run-time failures.  See
+       the Tutorial in the product "doc" sub-directory for more details
+       on debug vs. release libraries.
+    
+    - In some circumstances an exception thrown during concurrent_vector
+       growth operation may deadlock other threads that also attempt to
+       grow the vector. To prevent the issue, avoid going out of memory 
+       and throwing exceptions in constructors of stored objects.
+
+    - Installer doesn't accept non-commercial serial numbers on Red Hat* 
+       Fedora* 11. To install the product on the system use license 
+       file provided after registration of the serial number.  
+
+------------------------------------------------------------------------
+Copyright (C) 2005-2009 Intel Corporation.  All Rights Reserved.
+
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00001.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00001.html
new file mode 100644 (file)
index 0000000..8ca6cad
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::aligned_space&lt; T, N &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00116.html">tbb::aligned_space&lt; T, N &gt;</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()</td><td><a class="el" href="a00116.html">tbb::aligned_space&lt; T, N &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00116.html#024be075c23c0394c9a2518d993bcd9e">end</a>()</td><td><a class="el" href="a00116.html">tbb::aligned_space&lt; T, N &gt;</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00002.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00002.html
new file mode 100644 (file)
index 0000000..84c8e75
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::atomic&lt; T &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00117.html">tbb::atomic&lt; T &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(T rhs) (defined in <a class="el" href="a00117.html">tbb::atomic&lt; T &gt;</a>)</td><td><a class="el" href="a00117.html">tbb::atomic&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const atomic&lt; T &gt; &amp;rhs) (defined in <a class="el" href="a00117.html">tbb::atomic&lt; T &gt;</a>)</td><td><a class="el" href="a00117.html">tbb::atomic&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00003.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00003.html
new file mode 100644 (file)
index 0000000..fa7c0d3
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::atomic&lt; void * &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00118.html">tbb::atomic&lt; void * &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(void *rhs) (defined in <a class="el" href="a00118.html">tbb::atomic&lt; void * &gt;</a>)</td><td><a class="el" href="a00118.html">tbb::atomic&lt; void * &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const atomic&lt; void * &gt; &amp;rhs) (defined in <a class="el" href="a00118.html">tbb::atomic&lt; void * &gt;</a>)</td><td><a class="el" href="a00118.html">tbb::atomic&lt; void * &gt;</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00004.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00004.html
new file mode 100644 (file)
index 0000000..90ea45c
--- /dev/null
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::blocked_range&lt; Value &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin</a>() const </td><td><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00122.html#94607755c5110d199202234d58d022ac">blocked_range</a>()</td><td><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00122.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00122.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a>(blocked_range &amp;r, split)</td><td><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>blocked_range2d</b> (defined in <a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a>)</td><td><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b> (defined in <a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a>)</td><td><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> typedef</td><td><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() const </td><td><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>() const </td><td><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>() const </td><td><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() const </td><td><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>() const </td><td><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> typedef</td><td><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00005.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00005.html
new file mode 100644 (file)
index 0000000..735b644
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::blocked_range2d&lt; RowValue, ColValue &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td><a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td><a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>blocked_range2d</b>(blocked_range2d &amp;r, split) (defined in <a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td><a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>col_range_type</b> typedef (defined in <a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>)</td><td><a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00123.html#392a46759af2c884957115771affa7f4">cols</a>() const </td><td><a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00123.html#d144cb2d88cef553420311aca8667a44">empty</a>() const </td><td><a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00123.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a>() const </td><td><a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00123.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a> typedef</td><td><a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00123.html#f496e7348a82652fba581203477cc07c">rows</a>() const </td><td><a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00006.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00006.html
new file mode 100644 (file)
index 0000000..c58b3e5
--- /dev/null
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize, RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(blocked_range3d &amp;r, split) (defined in <a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>col_range_type</b> typedef (defined in <a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00124.html#3336ba9480fd6c43e158f9beb024c050">cols</a>() const </td><td><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00124.html#356860e1c977d91711e8216bd55c0b25">empty</a>() const </td><td><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00124.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a>() const </td><td><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00124.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a> typedef</td><td><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00124.html#cf971430aa12361d3ed245344b7c6764">pages</a>() const </td><td><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>row_range_type</b> typedef (defined in <a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>)</td><td><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00124.html#1584623e59ff32a8aa82006827508be4">rows</a>() const </td><td><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00007.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00007.html
new file mode 100644 (file)
index 0000000..50d7ea8
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::cache_aligned_allocator&lt; T &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>address</b>(reference x) const  (defined in <a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>address</b>(const_reference x) const  (defined in <a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00125.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a>(size_type n, const void *hint=0)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>cache_aligned_allocator</b>() (defined in <a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>cache_aligned_allocator</b>(const cache_aligned_allocator &amp;) (defined in <a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>cache_aligned_allocator</b>(const cache_aligned_allocator&lt; U &gt; &amp;) (defined in <a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00125.html#958ee8745c86c275bfc9533af565e017">construct</a>(pointer p, const value_type &amp;value)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00125.html#cd298895a4f1654b5149ec84b591ecb5">destroy</a>(pointer p)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00125.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a>() const </td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00009.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00009.html
new file mode 100644 (file)
index 0000000..e2a1965
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::cache_aligned_allocator&lt; void &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00126.html">tbb::cache_aligned_allocator&lt; void &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00126.html">tbb::cache_aligned_allocator&lt; void &gt;</a>)</td><td><a class="el" href="a00126.html">tbb::cache_aligned_allocator&lt; void &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00126.html">tbb::cache_aligned_allocator&lt; void &gt;</a>)</td><td><a class="el" href="a00126.html">tbb::cache_aligned_allocator&lt; void &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00126.html">tbb::cache_aligned_allocator&lt; void &gt;</a>)</td><td><a class="el" href="a00126.html">tbb::cache_aligned_allocator&lt; void &gt;</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00011.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00011.html
new file mode 100644 (file)
index 0000000..434e35e
--- /dev/null
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::combinable&lt; T &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>clear</b>() (defined in <a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a>)</td><td><a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combinable</b>() (defined in <a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a>)</td><td><a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combinable</b>(finit _finit) (defined in <a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a>)</td><td><a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combinable</b>(const combinable &amp;other) (defined in <a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a>)</td><td><a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combine</b>(FCombine fcombine) (defined in <a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a>)</td><td><a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combine_each</b>(FCombine fcombine) (defined in <a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a>)</td><td><a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>local</b>() (defined in <a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a>)</td><td><a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>local</b>(bool &amp;exists) (defined in <a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a>)</td><td><a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const combinable &amp;other) (defined in <a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a>)</td><td><a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00128.html#2c87e79ae98588a5780f708773388843">~combinable</a>()</td><td><a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00012.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00012.html
new file mode 100644 (file)
index 0000000..27992c6
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::tbb_hash_compare&lt; T &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00174.html">tbb::tbb_hash_compare&lt; T &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>equal</b>(const T &amp;a, const T &amp;b) (defined in <a class="el" href="a00174.html">tbb::tbb_hash_compare&lt; T &gt;</a>)</td><td><a class="el" href="a00174.html">tbb::tbb_hash_compare&lt; T &gt;</a></td><td><code> [inline, static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>hash</b>(const T &amp;t) (defined in <a class="el" href="a00174.html">tbb::tbb_hash_compare&lt; T &gt;</a>)</td><td><a class="el" href="a00174.html">tbb::tbb_hash_compare&lt; T &gt;</a></td><td><code> [inline, static]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00013.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00013.html
new file mode 100644 (file)
index 0000000..0c36d5a
--- /dev/null
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>allocator_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>begin</b>() (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>begin</b>() const  (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#36bcd50fd5383f3682032323b2d74333">clear</a>()</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#342582ba05d9fb893ed80875d2b7a42f">concurrent_hash_map</a>(const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#bc50f7bca65d0c27cbf5c31d2fa63eac">concurrent_hash_map</a>(const concurrent_hash_map &amp;table, const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#b5132202dff9ee3d619bef6b1d84edea">concurrent_hash_map</a>(I first, I last, const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_accessor</b> (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_range_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#a3e97a1f3cb66e81a2336b013ef1ae7d">count</a>(const Key &amp;key) const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>delete_node</b>(node_base *n) (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#3e5d085375320cd3f34faeedc5bba8f6">empty</a>() const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>end</b>() (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>end</b>() const  (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>equal_range</b>(const Key &amp;key) (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>equal_range</b>(const Key &amp;key) const  (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#58df7a1e4373c55eb4c2fa9dc69516b1">erase</a>(const Key &amp;key)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#fc64086f9f518cef8c368c9429d0064e">erase</a>(const_accessor &amp;item_accessor)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#b65abfa291da566617dd58dfb349630a">erase</a>(accessor &amp;item_accessor)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#671965989ffb5f6084c776cb0bb6cdab">exclude</a>(const_accessor &amp;item_accessor, bool readonly)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#9fa1ca60af4ef761a100617b27718585">find</a>(const_accessor &amp;result, const Key &amp;key) const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#4f7cc0aab2d8216c0a6e681f32dd48c8">find</a>(accessor &amp;result, const Key &amp;key)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#2f1ca7e8319c464349a9de304b6dbf4a">find</a>(const Key &amp;key) const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#79d1e5c3b975dbd38b43138266fe4c0e">get_allocator</a>() const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#67d8c254b1666d89267c8a4a33c864f3">insert</a>(const_accessor &amp;result, const Key &amp;key)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#8ea81ff7fea044f859273b354c91c185">insert</a>(accessor &amp;result, const Key &amp;key)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#68a46a26bd4308c1780d021ca7e8fc15">insert</a>(const_accessor &amp;result, const value_type &amp;value)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#7bd4dcf6ea74a32299fd57d8d7fc7ed8">insert</a>(accessor &amp;result, const value_type &amp;value)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#3034a308bc839695a5714a107380c4b9">insert</a>(const value_type &amp;value)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#7b42dba04d71e1367f0d542087906178">insert</a>(I first, I last)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_iterator</b> (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_range</b> (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#7973cd92f57dcb092ab757f8d9e089f9">internal_copy</a>(const concurrent_hash_map &amp;source)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_copy</b>(I first, I last) (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#308ec5ad19fdd1be4d345f8013070150">internal_equal_range</a>(const Key &amp;key, I end) const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>key_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#0f0ba43d9cb783f12dd01bf5677da097">lookup</a>(bool op_insert, const Key &amp;key, const T *t, const_accessor *result, bool write)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>mapped_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#6ed260e217fb310050928d7bd03f1b5e">max_size</a>() const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_allocator</b> (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_hash_compare</b> (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>node_allocator_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#adadeb9d1acb8c3b34517435666cf297">operator=</a>(const concurrent_hash_map &amp;table)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>range</b>(size_type grainsize=1) (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>range</b>(size_type grainsize=1) const  (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>range_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rehash_bucket</b>(bucket *b_new, const hashcode_t h) (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>search_bucket</b>(const key_type &amp;key, bucket *b) const  (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">size</a>() const </td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#dd73f70aa6602021ea2c56bac9715353">swap</a>(concurrent_hash_map &amp;table)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>)</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00130.html#5e96649f71f68f3b6bf3b1eee6b441a7">~concurrent_hash_map</a>()</td><td><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00015.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00015.html
new file mode 100644 (file)
index 0000000..a868022
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00132.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00132.html#7b75959ce5a971b05cfefcbc1d09a022">acquire</a>(concurrent_hash_map *base, const hashcode_t h, bool writer=false)</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>bucket_accessor</b>(concurrent_hash_map *base, const hashcode_t h, bool writer=false) (defined in <a class="el" href="a00132.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a>)</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00132.html#adf8e405df5787351fe816c42042b9ec">is_writer</a>()</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00132.html#7e98ad1b46ed35fb4a92d65c16c6982d">operator()</a>()</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>upgrade_to_writer</b>() (defined in <a class="el" href="a00132.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a>)</td><td><a class="el" href="a00132.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00016.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00016.html
new file mode 100644 (file)
index 0000000..304bd06
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>accessor</b> (defined in <a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a>)</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</b> (defined in <a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a>)</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00133.html#6eedb35a3ca397dd289ed5ca6fb4d95d">const_accessor</a>()</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00133.html#e55c7c3f0acd7fd823a07957e71a7462">empty</a>() const </td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00133.html#d95b7a39a08b7ab256dfff2ca37cdb75">operator *</a>() const </td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00133.html#6fc0491f6420ffe38c48786e7b9ab042">operator-&gt;</a>() const </td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>()</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00133.html#b5de4197079009b1cfd8bdeb594c6428">value_type</a> typedef</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00133.html#e002771760f510e06c03e0a198286172">~const_accessor</a>()</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00017.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00017.html
new file mode 100644 (file)
index 0000000..8aeadb0
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor Member List</h1>This is the complete list of members for <a class="el" href="a00131.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00133.html#6eedb35a3ca397dd289ed5ca6fb4d95d">const_accessor</a>()</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00133.html#e55c7c3f0acd7fd823a07957e71a7462">empty</a>() const </td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00131.html#03a091f7355a3c0c03f839893695f372">operator *</a>() const </td><td><a class="el" href="a00131.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00131.html#302f02e5deec0a67b872e9cfb08d9e60">operator-&gt;</a>() const </td><td><a class="el" href="a00131.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>()</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00131.html#34035ddb9e2a27f2f0a1f6a2a16730cf">value_type</a> typedef</td><td><a class="el" href="a00131.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00133.html#e002771760f510e06c03e0a198286172">~const_accessor</a>()</td><td><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00018.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00018.html
new file mode 100644 (file)
index 0000000..73dfbb2
--- /dev/null
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::strict_ppl::concurrent_queue&lt; T, A &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#c32e8e84c0524155133b4aae32d2a827">clear</a>()</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a>(InputIterator begin, InputIterator end, const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a>(const concurrent_queue &amp;src, const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a> typedef</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>() const </td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a>() const </td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::concurrent_queue_iterator</b> (defined in <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>(const T &amp;source)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a> typedef</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>(T &amp;result)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() (defined in <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() (defined in <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() const  (defined in <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#eaa35a5274606779802e9a669a706260">unsafe_size</a>() const </td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#682c3978d5cb0620000994f11c44a476">value_type</a> typedef</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00134.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>()</td><td><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00019.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00019.html
new file mode 100644 (file)
index 0000000..753d85d
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::concurrent_bounded_queue&lt; T, A &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &amp;src, const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::concurrent_queue_iterator</b> (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &amp;destination)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &amp;source)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">set_capacity</a>(size_type capacity)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &amp;destination)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &amp;source)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() const  (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00021.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00021.html
new file mode 100644 (file)
index 0000000..a6a2de7
--- /dev/null
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::deprecated::concurrent_queue&lt; T, A &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>begin</b>() (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>begin</b>() const  (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &amp;src, const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(const A &amp;a=A())</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a>(const concurrent_queue &amp;src, const A &amp;a=A())</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#383187b910f8c3ca27a39c1638566f15">concurrent_queue</a>(InputIterator begin, InputIterator end, const A &amp;a=A())</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>end</b>() (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>end</b>() const  (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::concurrent_queue_iterator</b> (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &amp;destination)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>(T &amp;destination)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &amp;source)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00135.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>(const T &amp;source)</td><td><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">set_capacity</a>(size_type capacity)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &amp;destination)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &amp;source)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_begin</b>() const  (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>unsafe_end</b>() const  (defined in <a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>)</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00022.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00022.html
new file mode 100644 (file)
index 0000000..8f2a1d1
--- /dev/null
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::concurrent_vector&lt; T, A &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>allocator_type</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#423e5aa15e0e3309ad86d026fd85f6f6">assign</a>(size_type n, const_reference t)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#93a06b3112cb804f42f40efb5e7387b4">assign</a>(I first, I last)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#0c073ca43e787c7cbf7b0e26d2221748">at</a>(size_type index)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#23e14a38af748edff96a7adc3a0f1c58">at</a>(size_type index) const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#41ce48d6015a1a2812d41cf620ec3476">back</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#bd518e204107d07fd08d0ec5bdfd383d">back</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#78a06182276ff758788d4c0623ae0d71">begin</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#3ed6b9ae7217af5103d974045b6f5cd5">capacity</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#f88fcf1c920693c39bd9709db33c199f">cbegin</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#0c15a5d0f1cf75d687dabba07da1d46b">cend</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#1693d1da41b1a8235871be9c6633be35">compact</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#2c8ca9cabfcd30ad5943324c853664b5">concurrent_vector</a>(const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a>(const concurrent_vector &amp;vector, const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a>(const concurrent_vector&lt; T, M &gt; &amp;vector, const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#2a2e261dfe1cab3f73f7b1a94137cfca">concurrent_vector</a>(size_type n)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#3883a8a908b44e249a57f454de3f55d8">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#4450de83c5862ea4bcd9443fd7e67419">concurrent_vector</a>(I first, I last, const allocator_type &amp;a=allocator_type())</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_range_type</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_reverse_iterator</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_reverse_iterator</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#db78a1d28c9c966050e8a2926d834a33">crbegin</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#fff9cece89438587997ebedf93c5e962">crend</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">end</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">end</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#15181759c0bfa2ddce5d10c7550e0002">front</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#502615a858eb9fa0390ee59169065e90">front</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#2fdba8e90de6a4d2300222236d46758e">get_allocator</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#30484e3959892fd5392fa93c873c31f0">grow_by</a>(size_type delta)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#c8177b1865270ea68aa1ab9148e5e35e">grow_by</a>(size_type delta)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#38274ab3f772ecba600c7daca7690102">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#473a59a4c9308b93411b898b3110d26c">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#a7e3b67c8ccab16d0aecc80899ae799d">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::vector_iterator</b> (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_vector_base</b>() const  (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#691f0f3cda3e489c37a657016e375eaf">operator=</a>(const concurrent_vector &amp;vector)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a>(const concurrent_vector&lt; T, M &gt; &amp;vector)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>(size_type index)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#c6fade5c732cc95274d1d8277ea619d1">operator[]</a>(size_type index) const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(const_reference item) iterator push_back(const _reference item)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#a4c6ffff3bf08b92939aa2fc516edfba">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#3d09ccfb581b879ae64203741035e193">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>range_type</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#5e220926d09236d98f04fe0721e5f9a1">rbegin</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#9f9c103e18d5f212703805354074ad44">rbegin</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#290119a4eb43cd6a9e98fa17016ba3c2">rend</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#d438b9b32ea3a8ffb703015b6dce055b">rend</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#5a0ce05026994b010018f72cfdeb72c1">reserve</a>(size_type n)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#8dfb0cb0eef96d440b4dcf801807a718">resize</a>(size_type n)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#98ce6b2c6d2622f0c030b46dfac3880c">resize</a>(size_type n, const_reference t)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reverse_iterator</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reverse_iterator</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() const </td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a>(concurrent_vector &amp;vector)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>)</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00136.html#da2444b28bb840d38f60d0030333a5fc">~concurrent_vector</a>()</td><td><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00025.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00025.html
new file mode 100644 (file)
index 0000000..415bdca
--- /dev/null
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00138.html#60047d25605a1ef993c49234e9ac5c2d">allocator_type</a> typedef</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>()</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#ba6674c6102a6faf8f96d131497654b3">begin</a>() const </td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>()</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combine</b>(combine_func_t f_combine) (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>combine_each</b>(combine_func_t f_combine) (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_range_type</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#ad23345a722622199deaa4dfd243d9f8">empty</a>() const </td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#89811890e6a77f1e0cfc6c24ed35d09b">end</a>() const </td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>enumerable_thread_specific</b> (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>()</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#e5698930b84c098bb6d87175b8b50306">enumerable_thread_specific</a>(Finit _finit)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#0466c43272d8458185e980fc2dc4abe2">enumerable_thread_specific</a>(const T &amp;_exemplar)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>enumerable_thread_specific</b>(const enumerable_thread_specific&lt; U, Alloc, Cachetype &gt; &amp;other) (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>enumerable_thread_specific</b>(const enumerable_thread_specific &amp;other) (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>()</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#9505351eace34ed7130257adcae91706">local</a>(bool &amp;exists)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const enumerable_thread_specific &amp;other) (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const enumerable_thread_specific&lt; U, Alloc, Cachetype &gt; &amp;other) (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#a32dd1d88e42dc1faccceca244b12b6c">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>range_type</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">size</a>() const </td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>)</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00138.html#41176526161d6fef1bdd19c2db7ded4d">~enumerable_thread_specific</a>()</td><td><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00029.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00029.html
new file mode 100644 (file)
index 0000000..5c35987
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::mutex Member List</h1>This is the complete list of members for <a class="el" href="a00142.html">tbb::mutex</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00142.html">tbb::mutex</a>)</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00142.html">tbb::mutex</a>)</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00142.html">tbb::mutex</a>)</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">lock</a>()</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00142.html#05313cb77d4f85213103d4dab74ed454">mutex</a>()</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00142.html">tbb::mutex</a>)</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00142.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>()</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>()</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~mutex</b>() (defined in <a class="el" href="a00142.html">tbb::mutex</a>)</td><td><a class="el" href="a00142.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00030.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00030.html
new file mode 100644 (file)
index 0000000..4dde8fc
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00143.html">tbb::mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00143.html#862e022841cdc522e4296a5533b22efd">acquire</a>(mutex &amp;mutex)</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>mutex</b> (defined in <a class="el" href="a00143.html">tbb::mutex::scoped_lock</a>)</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>()</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>()</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a>(mutex &amp;mutex)</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>(mutex &amp;mutex)</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00143.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a>()</td><td><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00031.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00031.html
new file mode 100644 (file)
index 0000000..ecb2c61
--- /dev/null
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::null_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00144.html">tbb::null_mutex</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00144.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00144.html">tbb::null_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00144.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00144.html">tbb::null_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00144.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00144.html">tbb::null_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>null_mutex</b>() (defined in <a class="el" href="a00144.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00144.html">tbb::null_mutex</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00032.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00032.html
new file mode 100644 (file)
index 0000000..1f4a592
--- /dev/null
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::null_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>acquire</b>(null_mutex &amp;) (defined in <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>release</b>() (defined in <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b>() (defined in <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b>(null_mutex &amp;) (defined in <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>try_acquire</b>(null_mutex &amp;) (defined in <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~scoped_lock</b>() (defined in <a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00033.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00033.html
new file mode 100644 (file)
index 0000000..3ace8db
--- /dev/null
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::null_rw_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00146.html">tbb::null_rw_mutex</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00146.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00146.html">tbb::null_rw_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00146.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00146.html">tbb::null_rw_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00146.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00146.html">tbb::null_rw_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>null_rw_mutex</b>() (defined in <a class="el" href="a00146.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00146.html">tbb::null_rw_mutex</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00034.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00034.html
new file mode 100644 (file)
index 0000000..8de6965
--- /dev/null
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::null_rw_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>acquire</b>(null_rw_mutex &amp;, bool=true) (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>downgrade_to_reader</b>() (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>release</b>() (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b>() (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b>(null_rw_mutex &amp;, bool=true) (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>try_acquire</b>(null_rw_mutex &amp;, bool=true) (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>upgrade_to_writer</b>() (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~scoped_lock</b>() (defined in <a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00035.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00035.html
new file mode 100644 (file)
index 0000000..a187139
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::parallel_do_feeder&lt; Item &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00148.html">tbb::parallel_do_feeder&lt; Item &gt;</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00148.html#40baaf0f6856f4491dd0adf896c93516">add</a>(const Item &amp;item)</td><td><a class="el" href="a00148.html">tbb::parallel_do_feeder&lt; Item &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::parallel_do_feeder_impl</b> (defined in <a class="el" href="a00148.html">tbb::parallel_do_feeder&lt; Item &gt;</a>)</td><td><a class="el" href="a00148.html">tbb::parallel_do_feeder&lt; Item &gt;</a></td><td><code> [friend]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00036.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00036.html
new file mode 100644 (file)
index 0000000..1c5bfd2
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::pre_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00151.html">tbb::pre_scan_tag</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>is_final_scan</b>() (defined in <a class="el" href="a00151.html">tbb::pre_scan_tag</a>)</td><td><a class="el" href="a00151.html">tbb::pre_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00037.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00037.html
new file mode 100644 (file)
index 0000000..cdc7802
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::final_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00140.html">tbb::final_scan_tag</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>is_final_scan</b>() (defined in <a class="el" href="a00140.html">tbb::final_scan_tag</a>)</td><td><a class="el" href="a00140.html">tbb::final_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00038.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00038.html
new file mode 100644 (file)
index 0000000..3d7e71c
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::parallel_while&lt; Body &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00149.html">tbb::parallel_while&lt; Body &gt;</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00149.html#e131c560057a58229992b61eb8dba4c6">add</a>(const value_type &amp;item)</td><td><a class="el" href="a00149.html">tbb::parallel_while&lt; Body &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00149.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>()</td><td><a class="el" href="a00149.html">tbb::parallel_while&lt; Body &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00149.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a>(Stream &amp;stream, const Body &amp;body)</td><td><a class="el" href="a00149.html">tbb::parallel_while&lt; Body &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> typedef</td><td><a class="el" href="a00149.html">tbb::parallel_while&lt; Body &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00149.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a>()</td><td><a class="el" href="a00149.html">tbb::parallel_while&lt; Body &gt;</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00039.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00039.html
new file mode 100644 (file)
index 0000000..c3f3c8c
--- /dev/null
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::simple_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00160.html">tbb::simple_partitioner</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00160.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00160.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00160.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00160.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_scan</b> (defined in <a class="el" href="a00160.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00160.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>simple_partitioner</b>() (defined in <a class="el" href="a00160.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00160.html">tbb::simple_partitioner</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00041.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00041.html
new file mode 100644 (file)
index 0000000..f1a08f6
--- /dev/null
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::auto_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00120.html">tbb::auto_partitioner</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>auto_partitioner</b>() (defined in <a class="el" href="a00120.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00120.html">tbb::auto_partitioner</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00120.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00120.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00120.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00120.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_scan</b> (defined in <a class="el" href="a00120.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00120.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00043.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00043.html
new file mode 100644 (file)
index 0000000..8f7d482
--- /dev/null
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::affinity_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00115.html">tbb::affinity_partitioner</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>affinity_partitioner</b>() (defined in <a class="el" href="a00115.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00115.html">tbb::affinity_partitioner</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::affinity_partition_type</b> (defined in <a class="el" href="a00115.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00115.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00115.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00115.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00115.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00115.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce_with_affinity</b> (defined in <a class="el" href="a00115.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00115.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::start_scan</b> (defined in <a class="el" href="a00115.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00115.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00044.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00044.html
new file mode 100644 (file)
index 0000000..ab66727
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::filter Member List</h1>This is the complete list of members for <a class="el" href="a00139.html">tbb::filter</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>filter</b>(bool is_serial_) (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>filter</b>(mode filter_mode) (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_root_task</b> (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::stage_task</b> (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> enum name</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pipeline</b> (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b> (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00045.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00045.html
new file mode 100644 (file)
index 0000000..80f2eab
--- /dev/null
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::thread_bound_filter Member List</h1>This is the complete list of members for <a class="el" href="a00175.html">tbb::thread_bound_filter</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>end_of_stream</b> enum value (defined in <a class="el" href="a00175.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>filter</b>(bool is_serial_) (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>filter</b>(mode filter_mode) (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_root_task</b> (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::stage_task</b> (defined in <a class="el" href="a00139.html">tbb::filter</a>)</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>item_not_available</b> enum value (defined in <a class="el" href="a00175.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> enum name</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00175.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>()</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>result_type</b> enum name (defined in <a class="el" href="a00175.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> enum value</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>success</b> enum value (defined in <a class="el" href="a00175.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b>(mode filter_mode) (defined in <a class="el" href="a00175.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00175.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>()</td><td><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00139.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00139.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00046.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00046.html
new file mode 100644 (file)
index 0000000..94d4973
--- /dev/null
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::pipeline Member List</h1>This is the complete list of members for <a class="el" href="a00150.html">tbb::pipeline</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00150.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>(filter &amp;filter_)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00150.html#2c84aef5b834b555ee220b176e25931e">clear</a>()</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>filter</b> (defined in <a class="el" href="a00150.html">tbb::pipeline</a>)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_cleaner</b> (defined in <a class="el" href="a00150.html">tbb::pipeline</a>)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_root_task</b> (defined in <a class="el" href="a00150.html">tbb::pipeline</a>)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::stage_task</b> (defined in <a class="el" href="a00150.html">tbb::pipeline</a>)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00150.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>()</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00150.html#f627616049b3fe36801f37ee40403ef8">run</a>(size_t max_number_of_live_tokens)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00150.html#93d7fec8cd607b803dd2d79fb46bd260">run</a>(size_t max_number_of_live_tokens, tbb::task_group_context &amp;context)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b> (defined in <a class="el" href="a00150.html">tbb::pipeline</a>)</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00150.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>()</td><td><a class="el" href="a00150.html">tbb::pipeline</a></td><td><code> [virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00047.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00047.html
new file mode 100644 (file)
index 0000000..a5ff5e6
--- /dev/null
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::queuing_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00152.html">tbb::queuing_mutex</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>internal_construct</b>() (defined in <a class="el" href="a00152.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00152.html">tbb::queuing_mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00152.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00152.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00152.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00152.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00152.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00152.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00152.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a>()</td><td><a class="el" href="a00152.html">tbb::queuing_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00152.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00152.html">tbb::queuing_mutex</a></td><td><code> [friend]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00048.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00048.html
new file mode 100644 (file)
index 0000000..562e2d9
--- /dev/null
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::queuing_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00153.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(queuing_mutex &amp;m)</td><td><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00153.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>()</td><td><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00153.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>()</td><td><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00153.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a>(queuing_mutex &amp;m)</td><td><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00153.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>(queuing_mutex &amp;m)</td><td><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00153.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>()</td><td><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00049.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00049.html
new file mode 100644 (file)
index 0000000..6cde10f
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::queuing_rw_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00154.html">tbb::queuing_rw_mutex</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>internal_construct</b>() (defined in <a class="el" href="a00154.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00154.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00154.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00154.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00154.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a>()</td><td><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00154.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00154.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a>()</td><td><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00050.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00050.html
new file mode 100644 (file)
index 0000000..1e47035
--- /dev/null
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::queuing_rw_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00155.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(queuing_rw_mutex &amp;m, bool write=true)</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00155.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a>()</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00155.html#67ae221109ddc69510ab593874e435d4">release</a>()</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00155.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>()</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00155.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a>(queuing_rw_mutex &amp;m, bool write=true)</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00155.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>(queuing_rw_mutex &amp;m, bool write=true)</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00155.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a>()</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00155.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>()</td><td><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00051.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00051.html
new file mode 100644 (file)
index 0000000..3a9e223
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::recursive_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00156.html">tbb::recursive_mutex</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00156.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00156.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00156.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>()</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00156.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a>()</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00156.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00156.html#86e719b0afee25704af11ab97694d240">try_lock</a>()</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>()</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~recursive_mutex</b>() (defined in <a class="el" href="a00156.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00052.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00052.html
new file mode 100644 (file)
index 0000000..0f870a1
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::recursive_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>(recursive_mutex &amp;mutex)</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>recursive_mutex</b> (defined in <a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a>)</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>()</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00157.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>()</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00157.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a>(recursive_mutex &amp;mutex)</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00157.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>(recursive_mutex &amp;mutex)</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00157.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a>()</td><td><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00053.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00053.html
new file mode 100644 (file)
index 0000000..a4d7e5a
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::scalable_allocator&lt; T &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>address</b>(reference x) const  (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>address</b>(const_reference x) const  (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>construct</b>(pointer p, const value_type &amp;val) (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>destroy</b>(pointer p) (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00158.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const </td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scalable_allocator</b>() (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scalable_allocator</b>(const scalable_allocator &amp;) (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scalable_allocator</b>(const scalable_allocator&lt; U &gt; &amp;) (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00055.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00055.html
new file mode 100644 (file)
index 0000000..b11b676
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::scalable_allocator&lt; void &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00159.html">tbb::scalable_allocator&lt; void &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00159.html">tbb::scalable_allocator&lt; void &gt;</a>)</td><td><a class="el" href="a00159.html">tbb::scalable_allocator&lt; void &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00159.html">tbb::scalable_allocator&lt; void &gt;</a>)</td><td><a class="el" href="a00159.html">tbb::scalable_allocator&lt; void &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00159.html">tbb::scalable_allocator&lt; void &gt;</a>)</td><td><a class="el" href="a00159.html">tbb::scalable_allocator&lt; void &gt;</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00057.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00057.html
new file mode 100644 (file)
index 0000000..48d25f2
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::spin_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00161.html">tbb::spin_mutex</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>internal_construct</b>() (defined in <a class="el" href="a00161.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00161.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00161.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00161.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00161.html#4f748989e19b6045e3a2d2ee73626a28">lock</a>()</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00161.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00161.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</a>()</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00161.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</a>()</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00161.html#0e843ee6265f57f27d228ba91e7308ef">unlock</a>()</td><td><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00058.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00058.html
new file mode 100644 (file)
index 0000000..d2b22d1
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::spin_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00162.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>(spin_mutex &amp;m)</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00162.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a>()</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00162.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>()</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00162.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a>(spin_mutex &amp;m)</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>spin_mutex</b> (defined in <a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a>)</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00162.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>(spin_mutex &amp;m)</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00162.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a>()</td><td><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00059.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00059.html
new file mode 100644 (file)
index 0000000..09de042
--- /dev/null
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::spin_rw_mutex_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#4007d6e1523dbc3c2bb7f889ab789a8a">lock</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#13f799708ac4ca437a16be202e263e18">lock_read</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#088bb256be794cc47d3b83791632fdfc">try_lock</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#b8667415869013f840d976aa406d385a">try_lock_read</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#f9f52ead2098eb5fb12da59d5ae53b55">unlock</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00163.html#9a815fb2759e55072ed413f1b6970cf3">~spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00060.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00060.html
new file mode 100644 (file)
index 0000000..ac7d368
--- /dev/null
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::spin_rw_mutex_v3::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00164.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a>(spin_rw_mutex &amp;m, bool write=true)</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00164.html#c2c2c38a08cb9080e87099fac3e5bc94">downgrade_to_reader</a>()</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00164.html#61b14d00a78185c9b2d206ebfc379124">release</a>()</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00164.html#d6ea60dee5563f702379bf5e51aa8806">scoped_lock</a>()</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00164.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a>(spin_rw_mutex &amp;m, bool write=true)</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00164.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a>(spin_rw_mutex &amp;m, bool write=true)</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00164.html#3f0b1e3f2efab63336400348bd070226">upgrade_to_writer</a>()</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00164.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">~scoped_lock</a>()</td><td><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00061.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00061.html
new file mode 100644 (file)
index 0000000..10e9482
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::task_group_context Member List</h1>This is the complete list of members for <a class="el" href="a00167.html">tbb::task_group_context</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>bound</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00167.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a>()</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>concurrent_wait</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>default_traits</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>exact_exception</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00167.html#49a55352084fd44b8863d182e839e6dc">init</a>()</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00167.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a>() const </td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>isolated</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>kind_type</b> enum name (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>no_cancellation</b> enum value (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00167.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a>()</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00167.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a>()</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>task</b> (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a>(kind_type relation_with_parent=bound, uintptr_t traits=default_traits)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>traits_type</b> enum name (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~task_group_context</b>() (defined in <a class="el" href="a00167.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00167.html">tbb::task_group_context</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00063.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00063.html
new file mode 100644 (file)
index 0000000..1fe35f8
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::task Member List</h1>This is the complete list of members for <a class="el" href="a00166.html">tbb::task</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>add_to_depth</b>(int) (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#b0f98c633647fc73b978fe4cd2277ac4">add_to_depth</a>(int delta)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">allocate_additional_child_of</a>(task &amp;t)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &amp;ctx)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>depth</b>() const  (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#5be823a972b3c3b9901c5963eeb050fd">depth</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#d8815c39bb61bd7e2d2691c476ed03b9">depth_type</a> typedef</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a>(task &amp;victim)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute</a>()=0</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::task_group_base</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &amp;new_parent)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>set_depth</b>(intptr_t) (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#fc4d4e61a56823aa1efdbb5d59e42973">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#f7737143d458f1ed1c0d7da3971d9e6b">spawn</a>(task &amp;child)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#db841c647eb6d754440c2f4e4a73c80b">spawn</a>(task_list &amp;list)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &amp;child)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &amp;list)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &amp;root)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &amp;root_list)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>task_list</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00064.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00064.html
new file mode 100644 (file)
index 0000000..3c77488
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::empty_task Member List</h1>This is the complete list of members for <a class="el" href="a00137.html">tbb::empty_task</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>add_to_depth</b>(int) (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#b0f98c633647fc73b978fe4cd2277ac4">add_to_depth</a>(int delta)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">allocate_additional_child_of</a>(task &amp;t)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &amp;ctx)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>depth</b>() const  (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#5be823a972b3c3b9901c5963eeb050fd">depth</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#d8815c39bb61bd7e2d2691c476ed03b9">depth_type</a> typedef</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a>(task &amp;victim)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::task_group_base</b> (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &amp;new_parent)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>set_depth</b>(intptr_t) (defined in <a class="el" href="a00166.html">tbb::task</a>)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#fc4d4e61a56823aa1efdbb5d59e42973">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#f7737143d458f1ed1c0d7da3971d9e6b">spawn</a>(task &amp;child)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#db841c647eb6d754440c2f4e4a73c80b">spawn</a>(task_list &amp;list)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &amp;child)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &amp;list)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &amp;root)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &amp;root_list)</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00166.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00166.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00065.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00065.html
new file mode 100644 (file)
index 0000000..32eb2f6
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::task_list Member List</h1>This is the complete list of members for <a class="el" href="a00168.html">tbb::task_list</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00168.html#fce446ee13e025969945328f3ff59b95">clear</a>()</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00168.html#f3ac31e092814b90929f81bb30441959">empty</a>() const </td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00168.html#5fe85df5ed524418389d34051750347d">pop_front</a>()</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00168.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a>(task &amp;task)</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>task</b> (defined in <a class="el" href="a00168.html">tbb::task_list</a>)</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00168.html#416341c2047eaef50417b41eaf7e9de6">task_list</a>()</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00168.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</a>()</td><td><a class="el" href="a00168.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00073.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00073.html
new file mode 100644 (file)
index 0000000..fc3eaa4
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::task_scheduler_init Member List</h1>This is the complete list of members for <a class="el" href="a00169.html">tbb::task_scheduler_init</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a></td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00169.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a>()</td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00169.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a></td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00169.html#d476053cc712e572554823492a5229ce">initialize</a>(int number_of_threads=automatic)</td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00169.html#d5ed214a8bb53b0466ed91ff4734b9a3">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00169.html#12752282977029f23416642bc03e8b74">is_active</a>() const </td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00169.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>(int number_of_threads=automatic, stack_size_type thread_stack_size=0)</td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00169.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>()</td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00169.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>()</td><td><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00075.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00075.html
new file mode 100644 (file)
index 0000000..c0c7f82
--- /dev/null
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::tbb_allocator&lt; T &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>address</b>(reference x) const  (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>address</b>(const_reference x) const  (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00170.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00170.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a>()</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td><code> [inline, static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00170.html#ab228ab9e324ed041c2226e1d717df5f">construct</a>(pointer p, const value_type &amp;value)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00170.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00170.html#ef133522bf55f05a605bee0763208281">destroy</a>(pointer p)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> enum name</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00170.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a>() const </td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scalable</b> enum value (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>standard</b> enum value (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>() (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>(const tbb_allocator &amp;) (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>(const tbb_allocator&lt; U &gt; &amp;) (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>)</td><td><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00077.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00077.html
new file mode 100644 (file)
index 0000000..b4a77e9
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::tbb_allocator&lt; void &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00171.html">tbb::tbb_allocator&lt; void &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00171.html">tbb::tbb_allocator&lt; void &gt;</a>)</td><td><a class="el" href="a00171.html">tbb::tbb_allocator&lt; void &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00171.html">tbb::tbb_allocator&lt; void &gt;</a>)</td><td><a class="el" href="a00171.html">tbb::tbb_allocator&lt; void &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00171.html">tbb::tbb_allocator&lt; void &gt;</a>)</td><td><a class="el" href="a00171.html">tbb::tbb_allocator&lt; void &gt;</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00079.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00079.html
new file mode 100644 (file)
index 0000000..c8d9b4e
--- /dev/null
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::zero_allocator&lt; T, Allocator &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>allocate</b>(const size_type n, const void *hint=0) (defined in <a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>base_allocator_type</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>zero_allocator</b>() (defined in <a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>zero_allocator</b>(const zero_allocator &amp;a) (defined in <a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>zero_allocator</b>(const zero_allocator&lt; U &gt; &amp;a) (defined in <a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>)</td><td><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00081.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00081.html
new file mode 100644 (file)
index 0000000..ce0467d
--- /dev/null
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::zero_allocator&lt; void, Allocator &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00180.html">tbb::zero_allocator&lt; void, Allocator &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>base_allocator_type</b> typedef (defined in <a class="el" href="a00180.html">tbb::zero_allocator&lt; void, Allocator &gt;</a>)</td><td><a class="el" href="a00180.html">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00180.html">tbb::zero_allocator&lt; void, Allocator &gt;</a>)</td><td><a class="el" href="a00180.html">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00180.html">tbb::zero_allocator&lt; void, Allocator &gt;</a>)</td><td><a class="el" href="a00180.html">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00180.html">tbb::zero_allocator&lt; void, Allocator &gt;</a>)</td><td><a class="el" href="a00180.html">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00083.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00083.html
new file mode 100644 (file)
index 0000000..1ef49ab
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::bad_last_alloc Member List</h1>This is the complete list of members for <a class="el" href="a00121.html">tbb::bad_last_alloc</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>what</b>() const  (defined in <a class="el" href="a00121.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00121.html">tbb::bad_last_alloc</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~bad_last_alloc</b>() (defined in <a class="el" href="a00121.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00121.html">tbb::bad_last_alloc</a></td><td><code> [inline, virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00084.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00084.html
new file mode 100644 (file)
index 0000000..8a31196
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::tbb_exception Member List</h1>This is the complete list of members for <a class="el" href="a00172.html">tbb::tbb_exception</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a>()=0</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">move</a>()=0</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00172.html#d00f6497e552fee978a02bfcbebf46e2">name</a>() const =0</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a>()=0</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00172.html#e8157689ecb66bc6c72d3618bf3cc371">what</a>() const =0</td><td><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00085.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00085.html
new file mode 100644 (file)
index 0000000..a437d3a
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::captured_exception Member List</h1>This is the complete list of members for <a class="el" href="a00127.html">tbb::captured_exception</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>captured_exception</b>(const captured_exception &amp;src) (defined in <a class="el" href="a00127.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>captured_exception</b>(const char *name, const char *info) (defined in <a class="el" href="a00127.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#667812a82f1525e968c52593dea0ef4c">destroy</a>()</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#df6bbb78a362fe862a341e81e2999810">move</a>()</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const </td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const captured_exception &amp;src) (defined in <a class="el" href="a00127.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a>()</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00127.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const </td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~captured_exception</b>() (defined in <a class="el" href="a00127.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00127.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00086.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00086.html
new file mode 100644 (file)
index 0000000..2e7458f
--- /dev/null
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::movable_exception&lt; ExceptionData &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>data</b>() (defined in <a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>data</b>() const  (defined in <a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">destroy</a>()</td><td><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>movable_exception</b>(const ExceptionData &amp;data) (defined in <a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>movable_exception</b>(const movable_exception &amp;src) (defined in <a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a>()</td><td><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a></td><td><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a>() const </td><td><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const movable_exception &amp;src) (defined in <a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#17cffba35811c92b7e65d63506b69602">throw_self</a>()</td><td><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a>() const </td><td><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~movable_exception</b>() (defined in <a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a>)</td><td><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00087.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00087.html
new file mode 100644 (file)
index 0000000..e3ef42f
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::internal::tbb_exception_ptr Member List</h1>This is the complete list of members for <a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>allocate</b>() (defined in <a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>allocate</b>(const tbb_exception &amp;) (defined in <a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>allocate</b>(const captured_exception &amp;) (defined in <a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00173.html#921875bbacd2c8a5f324c7da7a415262">destroy</a>()</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00173.html#292832fd5c523e3d8081a22247840a1d">throw_self</a>()</td><td><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00088.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00088.html
new file mode 100644 (file)
index 0000000..3505a18
--- /dev/null
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::internal::atomic_backoff Member List</h1>This is the complete list of members for <a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>atomic_backoff</b>() (defined in <a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>bounded_pause</b>() (defined in <a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>()</td><td><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reset</b>() (defined in <a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00095.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00095.html
new file mode 100644 (file)
index 0000000..be5fb2c
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::internal::work_around_alignment_bug&lt; Size, T &gt; Member List</h1>This is the complete list of members for <a class="el" href="a00178.html">tbb::internal::work_around_alignment_bug&lt; Size, T &gt;</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>alignment</b> (defined in <a class="el" href="a00178.html">tbb::internal::work_around_alignment_bug&lt; Size, T &gt;</a>)</td><td><a class="el" href="a00178.html">tbb::internal::work_around_alignment_bug&lt; Size, T &gt;</a></td><td><code> [static]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00098.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00098.html
new file mode 100644 (file)
index 0000000..33cbf86
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::tick_count Member List</h1>This is the complete list of members for <a class="el" href="a00176.html">tbb::tick_count</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00176.html#fb7f78ca61cf28398645ace66e284473">now</a>()</td><td><a class="el" href="a00176.html">tbb::tick_count</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00176.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &amp;t1, const tick_count &amp;t0)</td><td><a class="el" href="a00176.html">tbb::tick_count</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a>()</td><td><a class="el" href="a00176.html">tbb::tick_count</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00099.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00099.html
new file mode 100644 (file)
index 0000000..c0830c3
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb::tick_count::interval_t Member List</h1>This is the complete list of members for <a class="el" href="a00177.html">tbb::tick_count::interval_t</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>()</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#1a21a428e00cced2e6a49e0f5f2258bf">interval_t</a>(double sec)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#5871ead1ca230efbe52a5008470e6428">operator+</a>(const interval_t &amp;i, const interval_t &amp;j)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#cd9814947902e26463a69a111530f81b">operator+=</a>(const interval_t &amp;i)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &amp;t1, const tick_count &amp;t0)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#fa509691e1d689830931e36edd274f76">operator-</a>(const interval_t &amp;i, const interval_t &amp;j)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>(const interval_t &amp;i)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a>() const </td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>tbb::tick_count</b> (defined in <a class="el" href="a00177.html">tbb::tick_count::interval_t</a>)</td><td><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00115.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00115.html
new file mode 100644 (file)
index 0000000..02d980b
--- /dev/null
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::affinity_partitioner Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00115.html">affinity_partitioner</a></div>
+<h1>tbb::affinity_partitioner Class Reference</h1><!-- doxytag: class="tbb::affinity_partitioner" -->An affinity partitioner.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00342.html">partitioner.h</a>&gt;</code>
+<p>
+<a href="a00043.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::start_reduce</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="181db51277e9b15dd0ec4a0617ab1f92"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_reduce_with_affinity" ref="181db51277e9b15dd0ec4a0617ab1f92" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::start_reduce_with_affinity</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="76d97ae6ad98db0acfc8ed8cb7c76705"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::start_scan" ref="76d97ae6ad98db0acfc8ed8cb7c76705" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e9575467e391b90e0703fadf573dbad7"></a><!-- doxytag: member="tbb::affinity_partitioner::internal::affinity_partition_type" ref="e9575467e391b90e0703fadf573dbad7" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::affinity_partition_type</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+An affinity partitioner. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00342.html">partitioner.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00116.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00116.html
new file mode 100644 (file)
index 0000000..abd9c43
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::aligned_space&lt; T, N &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00116.html">aligned_space</a></div>
+<h1>tbb::aligned_space&lt; T, N &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::aligned_space" -->Block of space aligned sufficiently to construct an array T with N elements.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00257.html">aligned_space.h</a>&gt;</code>
+<p>
+<a href="a00001.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0d702fc6b9e9d061ace3501b3c861cdf"></a><!-- doxytag: member="tbb::aligned_space::begin" ref="0d702fc6b9e9d061ace3501b3c861cdf" args="()" -->
+T *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pointer to beginning of array. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="024be075c23c0394c9a2518d993bcd9e"></a><!-- doxytag: member="tbb::aligned_space::end" ref="024be075c23c0394c9a2518d993bcd9e" args="()" -->
+T *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00116.html#024be075c23c0394c9a2518d993bcd9e">end</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pointer to one past last element in array. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename T, size_t N&gt;<br>
+ class tbb::aligned_space&lt; T, N &gt;</h3>
+
+Block of space aligned sufficiently to construct an array T with N elements. 
+<p>
+The elements are not constructed or destroyed by this class. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00257.html">aligned_space.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00117.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00117.html
new file mode 100644 (file)
index 0000000..92402eb
--- /dev/null
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::atomic&lt; T &gt; Struct Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00117.html">atomic</a></div>
+<h1>tbb::atomic&lt; T &gt; Struct Template Reference<br>
+<small>
+[<a class="el" href="a00236.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::atomic" -->Primary template for atomic.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00258.html">atomic.h</a>&gt;</code>
+<p>
+<a href="a00002.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1e29e03a31436bad5eb1aa5a9d46a2da"></a><!-- doxytag: member="tbb::atomic::operator=" ref="1e29e03a31436bad5eb1aa5a9d46a2da" args="(T rhs)" -->
+T&nbsp;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (T rhs)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="90791297d59b1659cfaf0d93c7cc59ae"></a><!-- doxytag: member="tbb::atomic::operator=" ref="90791297d59b1659cfaf0d93c7cc59ae" args="(const atomic&lt; T &gt; &amp;rhs)" -->
+<a class="el" href="a00117.html">atomic</a>&lt; T &gt; &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00117.html">atomic</a>&lt; T &gt; &amp;rhs)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename T&gt;<br>
+ struct tbb::atomic&lt; T &gt;</h3>
+
+Primary template for atomic. 
+<p>
+See the Reference for details. 
+<p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00258.html">atomic.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00118.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00118.html
new file mode 100644 (file)
index 0000000..a9046fc
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::atomic&lt; void * &gt; Struct Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00118.html">atomic&lt; void * &gt;</a></div>
+<h1>tbb::atomic&lt; void * &gt; Struct Template Reference</h1><!-- doxytag: class="tbb::atomic&lt; void * &gt;" -->Specialization for <a class="el" href="a00118.html">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt;.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00258.html">atomic.h</a>&gt;</code>
+<p>
+<a href="a00003.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ba6e74163e255b88c497c40db64c5dad"></a><!-- doxytag: member="tbb::atomic&lt; void * &gt;::operator=" ref="ba6e74163e255b88c497c40db64c5dad" args="(void *rhs)" -->
+void *&nbsp;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (void *rhs)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="37979e62d1f88eb45bd3ad7df5a140f8"></a><!-- doxytag: member="tbb::atomic&lt; void * &gt;::operator=" ref="37979e62d1f88eb45bd3ad7df5a140f8" args="(const atomic&lt; void * &gt; &amp;rhs)" -->
+<a class="el" href="a00117.html">atomic</a>&lt; void * &gt; &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00117.html">atomic</a>&lt; void * &gt; &amp;rhs)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;&gt;<br>
+ struct tbb::atomic&lt; void * &gt;</h3>
+
+Specialization for <a class="el" href="a00118.html">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt;. 
+<p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00258.html">atomic.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00119.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00119.html
new file mode 100644 (file)
index 0000000..019a152
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::internal::atomic_backoff Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<b>internal</b>::<a class="el" href="a00119.html">atomic_backoff</a></div>
+<h1>tbb::internal::atomic_backoff Class Reference</h1><!-- doxytag: class="tbb::internal::atomic_backoff" -->Class that implements exponential backoff.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00382.html">tbb_machine.h</a>&gt;</code>
+<p>
+<a href="a00088.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a174ea93e3bd3d5cce82389c2f28d037"></a><!-- doxytag: member="tbb::internal::atomic_backoff::pause" ref="a174ea93e3bd3d5cce82389c2f28d037" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pause for a while. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c6179b19e2e8dedd73a36d523af2fe12"></a><!-- doxytag: member="tbb::internal::atomic_backoff::bounded_pause" ref="c6179b19e2e8dedd73a36d523af2fe12" args="()" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>bounded_pause</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="45edb535489eb0e76ecc59a19fd952de"></a><!-- doxytag: member="tbb::internal::atomic_backoff::reset" ref="45edb535489eb0e76ecc59a19fd952de" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>reset</b> ()</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Class that implements exponential backoff. 
+<p>
+See implementation of spin_wait_while_eq for an example. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00382.html">tbb_machine.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00120.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00120.html
new file mode 100644 (file)
index 0000000..b545d6d
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::auto_partitioner Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00120.html">auto_partitioner</a></div>
+<h1>tbb::auto_partitioner Class Reference<br>
+<small>
+[<a class="el" href="a00233.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::auto_partitioner" -->An auto partitioner.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00342.html">partitioner.h</a>&gt;</code>
+<p>
+<a href="a00041.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::start_reduce</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="76d97ae6ad98db0acfc8ed8cb7c76705"></a><!-- doxytag: member="tbb::auto_partitioner::internal::start_scan" ref="76d97ae6ad98db0acfc8ed8cb7c76705" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><b>partition_type</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+An auto partitioner. 
+<p>
+The range is initial divided into several large chunks. Chunks are further subdivided into VICTIM_CHUNKS pieces if they are stolen and divisible. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00342.html">partitioner.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00121.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00121.html
new file mode 100644 (file)
index 0000000..f103606
--- /dev/null
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::bad_last_alloc Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00121.html">bad_last_alloc</a></div>
+<h1>tbb::bad_last_alloc Class Reference</h1><!-- doxytag: class="tbb::bad_last_alloc" -->Exception for concurrent containers.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00381.html">tbb_exception.h</a>&gt;</code>
+<p>
+<a href="a00083.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6f7d876e9190498a13795a5b0ca3e313"></a><!-- doxytag: member="tbb::bad_last_alloc::what" ref="6f7d876e9190498a13795a5b0ca3e313" args="() const " -->
+virtual const char *&nbsp;</td><td class="memItemRight" valign="bottom"><b>what</b> () const   throw ()</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Exception for concurrent containers. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00381.html">tbb_exception.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00122.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00122.html
new file mode 100644 (file)
index 0000000..2d6160e
--- /dev/null
@@ -0,0 +1,224 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::blocked_range&lt; Value &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00122.html">blocked_range</a></div>
+<h1>tbb::blocked_range&lt; Value &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00233.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::blocked_range" -->A range over which to iterate.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00266.html">blocked_range.h</a>&gt;</code>
+<p>
+<a href="a00004.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef Value&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Type of a value.  <a href="#1a8d05842c2b3dfc177bc4d347e4cef7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f5707bffea38eee5c9680f37358afb8e"></a><!-- doxytag: member="tbb::blocked_range::size_type" ref="f5707bffea38eee5c9680f37358afb8e" args="" -->
+typedef std::size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Type for size of a range. <br></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#94607755c5110d199202234d58d022ac">blocked_range</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct range with default-constructed values for begin and end.  <a href="#94607755c5110d199202234d58d022ac"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="14795a36ead1414b4371dbe1a4656359"></a><!-- doxytag: member="tbb::blocked_range::blocked_range" ref="14795a36ead1414b4371dbe1a4656359" args="(Value begin_, Value end_, size_type grainsize_=1)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a> (Value begin_, Value end_, <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> grainsize_=1)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct range over half-open interval [begin,end), with the given grainsize. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="18d2258400756ac1446dac7676b18df3"></a><!-- doxytag: member="tbb::blocked_range::begin" ref="18d2258400756ac1446dac7676b18df3" args="() const " -->
+<a class="el" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Beginning of range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8b929d93ddc13f148b11bceef3a3bdf8"></a><!-- doxytag: member="tbb::blocked_range::end" ref="8b929d93ddc13f148b11bceef3a3bdf8" args="() const " -->
+<a class="el" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">One past last value in range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Size of the range.  <a href="#9eaa0b6beff1420f688570bbf6b8c462"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fcd2e5b8b6c11fd3f20fc0aa9f11bbc2"></a><!-- doxytag: member="tbb::blocked_range::grainsize" ref="fcd2e5b8b6c11fd3f20fc0aa9f11bbc2" args="() const " -->
+<a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The grain size for this range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8f4f02f530eb3f2e7ea26e06f76aef9d"></a><!-- doxytag: member="tbb::blocked_range::empty" ref="8f4f02f530eb3f2e7ea26e06f76aef9d" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if range is empty. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if range is divisible.  <a href="#41a58b703d574b6e1ca155df3576f578"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a> (<a class="el" href="a00122.html">blocked_range</a> &amp;r, <a class="el" href="a00165.html">split</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Split range.  <a href="#4c0efd2be3f96a0ab3ba5085e8b3fcc7"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="395a514a55017e36d571809f1223389b"></a><!-- doxytag: member="tbb::blocked_range::blocked_range2d" ref="395a514a55017e36d571809f1223389b" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="13d172a4da9be197033e64516fff1f4b"></a><!-- doxytag: member="tbb::blocked_range::blocked_range3d" ref="13d172a4da9be197033e64516fff1f4b" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename Value&gt;<br>
+ class tbb::blocked_range&lt; Value &gt;</h3>
+
+A range over which to iterate. 
+<p>
+<hr><h2>Member Typedef Documentation</h2>
+<a class="anchor" name="1a8d05842c2b3dfc177bc4d347e4cef7"></a><!-- doxytag: member="tbb::blocked_range::const_iterator" ref="1a8d05842c2b3dfc177bc4d347e4cef7" args="" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Value&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef Value <a class="el" href="a00122.html">tbb::blocked_range</a>&lt; Value &gt;::<a class="el" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Type of a value. 
+<p>
+Called a const_iterator for sake of algorithms that need to treat a <a class="el" href="a00122.html">blocked_range</a> as an STL container. 
+</div>
+</div><p>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="94607755c5110d199202234d58d022ac"></a><!-- doxytag: member="tbb::blocked_range::blocked_range" ref="94607755c5110d199202234d58d022ac" args="()" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Value&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00122.html">tbb::blocked_range</a>&lt; Value &gt;::<a class="el" href="a00122.html">blocked_range</a>           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Construct range with default-constructed values for begin and end. 
+<p>
+Requires that Value have a default constructor. 
+</div>
+</div><p>
+<a class="anchor" name="4c0efd2be3f96a0ab3ba5085e8b3fcc7"></a><!-- doxytag: member="tbb::blocked_range::blocked_range" ref="4c0efd2be3f96a0ab3ba5085e8b3fcc7" args="(blocked_range &amp;r, split)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Value&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00122.html">tbb::blocked_range</a>&lt; Value &gt;::<a class="el" href="a00122.html">blocked_range</a>           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00122.html">blocked_range</a>&lt; Value &gt; &amp;&nbsp;</td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00165.html">split</a>&nbsp;</td>
+          <td class="paramname"></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Split range. 
+<p>
+The new Range *this has the second half, the old range r has the first half. Unspecified if <a class="el" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a>&lt;<a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin()</a> or !is_divisible(). 
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="41a58b703d574b6e1ca155df3576f578"></a><!-- doxytag: member="tbb::blocked_range::is_divisible" ref="41a58b703d574b6e1ca155df3576f578" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Value&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00122.html">tbb::blocked_range</a>&lt; Value &gt;::is_divisible           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"> const<code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+True if range is divisible. 
+<p>
+Unspecified if <a class="el" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a>&lt;<a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin()</a>. 
+</div>
+</div><p>
+<a class="anchor" name="9eaa0b6beff1420f688570bbf6b8c462"></a><!-- doxytag: member="tbb::blocked_range::size" ref="9eaa0b6beff1420f688570bbf6b8c462" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Value&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="el" href="a00122.html">tbb::blocked_range</a>&lt; Value &gt;::size           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"> const<code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Size of the range. 
+<p>
+Unspecified if <a class="el" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a>&lt;<a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin()</a>. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00266.html">blocked_range.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00123.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00123.html
new file mode 100644 (file)
index 0000000..8b958ab
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::blocked_range2d&lt; RowValue, ColValue &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00123.html">blocked_range2d</a></div>
+<h1>tbb::blocked_range2d&lt; RowValue, ColValue &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00233.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::blocked_range2d" -->A 2-dimensional range that models the Range concept.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00267.html">blocked_range2d.h</a>&gt;</code>
+<p>
+<a href="a00005.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a807a22fe658ec38b8edfd69521d0383"></a><!-- doxytag: member="tbb::blocked_range2d::row_range_type" ref="a807a22fe658ec38b8edfd69521d0383" args="" -->
+typedef <a class="el" href="a00122.html">blocked_range</a>&lt; RowValue &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Type for size of an iteation range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="750d5c6ac9915443df477a30031c07fd"></a><!-- doxytag: member="tbb::blocked_range2d::col_range_type" ref="750d5c6ac9915443df477a30031c07fd" args="" -->
+typedef <a class="el" href="a00122.html">blocked_range</a>&lt; ColValue &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4180bc35d4f8ed9f20045dba4f2a1bdc"></a><!-- doxytag: member="tbb::blocked_range2d::blocked_range2d" ref="4180bc35d4f8ed9f20045dba4f2a1bdc" args="(RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, typename <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">col_range_type::size_type</a> col_grainsize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="485434db1609b2074d86cb604f3c674e"></a><!-- doxytag: member="tbb::blocked_range2d::blocked_range2d" ref="485434db1609b2074d86cb604f3c674e" args="(RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d144cb2d88cef553420311aca8667a44"></a><!-- doxytag: member="tbb::blocked_range2d::empty" ref="d144cb2d88cef553420311aca8667a44" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html#d144cb2d88cef553420311aca8667a44">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if range is empty. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ad36a9b38e4fef26d376f99552ce2d92"></a><!-- doxytag: member="tbb::blocked_range2d::is_divisible" ref="ad36a9b38e4fef26d376f99552ce2d92" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if range is divisible into two pieces. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4f80e6db02bfa4e90e2a219de9f17461"></a><!-- doxytag: member="tbb::blocked_range2d::blocked_range2d" ref="4f80e6db02bfa4e90e2a219de9f17461" args="(blocked_range2d &amp;r, split)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (<a class="el" href="a00123.html">blocked_range2d</a> &amp;r, <a class="el" href="a00165.html">split</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f496e7348a82652fba581203477cc07c"></a><!-- doxytag: member="tbb::blocked_range2d::rows" ref="f496e7348a82652fba581203477cc07c" args="() const " -->
+const <a class="el" href="a00122.html">row_range_type</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html#f496e7348a82652fba581203477cc07c">rows</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The rows of the iteration space. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="392a46759af2c884957115771affa7f4"></a><!-- doxytag: member="tbb::blocked_range2d::cols" ref="392a46759af2c884957115771affa7f4" args="() const " -->
+const <a class="el" href="a00122.html">col_range_type</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html#392a46759af2c884957115771affa7f4">cols</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The columns of the iteration space. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename RowValue, typename ColValue = RowValue&gt;<br>
+ class tbb::blocked_range2d&lt; RowValue, ColValue &gt;</h3>
+
+A 2-dimensional range that models the Range concept. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00267.html">blocked_range2d.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00124.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00124.html
new file mode 100644 (file)
index 0000000..a687046
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00124.html">blocked_range3d</a></div>
+<h1>tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00233.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::blocked_range3d" -->A 3-dimensional range that models the Range concept.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00268.html">blocked_range3d.h</a>&gt;</code>
+<p>
+<a href="a00006.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8ebf17a552ba47825e9b3887855b719"></a><!-- doxytag: member="tbb::blocked_range3d::page_range_type" ref="b8ebf17a552ba47825e9b3887855b719" args="" -->
+typedef <a class="el" href="a00122.html">blocked_range</a>&lt; PageValue &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Type for size of an iteation range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4edc39b1a76c84c8f43ea8bff3e88007"></a><!-- doxytag: member="tbb::blocked_range3d::row_range_type" ref="4edc39b1a76c84c8f43ea8bff3e88007" args="" -->
+typedef <a class="el" href="a00122.html">blocked_range</a>&lt; RowValue &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>row_range_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="02229b59d4dc5437bf5fbe72acca7f66"></a><!-- doxytag: member="tbb::blocked_range3d::col_range_type" ref="02229b59d4dc5437bf5fbe72acca7f66" args="" -->
+typedef <a class="el" href="a00122.html">blocked_range</a>&lt; ColValue &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a762f420ed83a887967cb7dfe337582c"></a><!-- doxytag: member="tbb::blocked_range3d::blocked_range3d" ref="a762f420ed83a887967cb7dfe337582c" args="(PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0b4dcf5b059634b95c1671086bf6d4ff"></a><!-- doxytag: member="tbb::blocked_range3d::blocked_range3d" ref="0b4dcf5b059634b95c1671086bf6d4ff" args="(PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize, RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, typename <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">col_range_type::size_type</a> col_grainsize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="356860e1c977d91711e8216bd55c0b25"></a><!-- doxytag: member="tbb::blocked_range3d::empty" ref="356860e1c977d91711e8216bd55c0b25" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#356860e1c977d91711e8216bd55c0b25">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if range is empty. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="39d69191721c488e737ae5d9c5336b9c"></a><!-- doxytag: member="tbb::blocked_range3d::is_divisible" ref="39d69191721c488e737ae5d9c5336b9c" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if range is divisible into two pieces. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0d6f0085c9fb364ddcbc2197da6c251"></a><!-- doxytag: member="tbb::blocked_range3d::blocked_range3d" ref="a0d6f0085c9fb364ddcbc2197da6c251" args="(blocked_range3d &amp;r, split)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (<a class="el" href="a00124.html">blocked_range3d</a> &amp;r, <a class="el" href="a00165.html">split</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cf971430aa12361d3ed245344b7c6764"></a><!-- doxytag: member="tbb::blocked_range3d::pages" ref="cf971430aa12361d3ed245344b7c6764" args="() const " -->
+const <a class="el" href="a00122.html">page_range_type</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#cf971430aa12361d3ed245344b7c6764">pages</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The pages of the iteration space. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1584623e59ff32a8aa82006827508be4"></a><!-- doxytag: member="tbb::blocked_range3d::rows" ref="1584623e59ff32a8aa82006827508be4" args="() const " -->
+const <a class="el" href="a00122.html">row_range_type</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#1584623e59ff32a8aa82006827508be4">rows</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The rows of the iteration space. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3336ba9480fd6c43e158f9beb024c050"></a><!-- doxytag: member="tbb::blocked_range3d::cols" ref="3336ba9480fd6c43e158f9beb024c050" args="() const " -->
+const <a class="el" href="a00122.html">col_range_type</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html#3336ba9480fd6c43e158f9beb024c050">cols</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The columns of the iteration space. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename PageValue, typename RowValue = PageValue, typename ColValue = RowValue&gt;<br>
+ class tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</h3>
+
+A 3-dimensional range that models the Range concept. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00268.html">blocked_range3d.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00125.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00125.html
new file mode 100644 (file)
index 0000000..a1677f2
--- /dev/null
@@ -0,0 +1,114 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::cache_aligned_allocator&lt; T &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00125.html">cache_aligned_allocator</a></div>
+<h1>tbb::cache_aligned_allocator&lt; T &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::cache_aligned_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00269.html">cache_aligned_allocator.h</a>&gt;</code>
+<p>
+<a href="a00007.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8f7128452e3c43b5bf1801b61d971d17"></a><!-- doxytag: member="tbb::cache_aligned_allocator::value_type" ref="8f7128452e3c43b5bf1801b61d971d17" args="" -->
+typedef internal::allocator_type&lt;<br>
+ T &gt;::value_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b23ef1d76c34fe1c2ebbb2f3df5b5676"></a><!-- doxytag: member="tbb::cache_aligned_allocator::pointer" ref="b23ef1d76c34fe1c2ebbb2f3df5b5676" args="" -->
+typedef value_type *&nbsp;</td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d15affd67eafcabbd12bd1cd07372994"></a><!-- doxytag: member="tbb::cache_aligned_allocator::const_pointer" ref="d15affd67eafcabbd12bd1cd07372994" args="" -->
+typedef const value_type *&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8c4e0d5867a07b1cea21d4fca2998c8"></a><!-- doxytag: member="tbb::cache_aligned_allocator::reference" ref="e8c4e0d5867a07b1cea21d4fca2998c8" args="" -->
+typedef value_type &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d3d77a39f0852c42f80c6505843f450c"></a><!-- doxytag: member="tbb::cache_aligned_allocator::const_reference" ref="d3d77a39f0852c42f80c6505843f450c" args="" -->
+typedef const value_type &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="90ca6a2979ebee466be771f4c2f9337e"></a><!-- doxytag: member="tbb::cache_aligned_allocator::size_type" ref="90ca6a2979ebee466be771f4c2f9337e" args="" -->
+typedef size_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b73eba293d042333f343d025c26751a4"></a><!-- doxytag: member="tbb::cache_aligned_allocator::difference_type" ref="b73eba293d042333f343d025c26751a4" args="" -->
+typedef ptrdiff_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="74ccd00a29171ddd61a4ea88cfa49c32"></a><!-- doxytag: member="tbb::cache_aligned_allocator::cache_aligned_allocator" ref="74ccd00a29171ddd61a4ea88cfa49c32" args="(const cache_aligned_allocator &amp;)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>cache_aligned_allocator</b> (const <a class="el" href="a00125.html">cache_aligned_allocator</a> &amp;)  throw ()</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="de57e731c36a51bf39b458c9b8adee58"></a><!-- doxytag: member="tbb::cache_aligned_allocator::cache_aligned_allocator" ref="de57e731c36a51bf39b458c9b8adee58" args="(const cache_aligned_allocator&lt; U &gt; &amp;)" -->
+template&lt;typename U&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>cache_aligned_allocator</b> (const <a class="el" href="a00125.html">cache_aligned_allocator</a>&lt; U &gt; &amp;)  throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="023e0cc7cf6ebde69e1f2c12182eb12b"></a><!-- doxytag: member="tbb::cache_aligned_allocator::address" ref="023e0cc7cf6ebde69e1f2c12182eb12b" args="(reference x) const " -->
+pointer&nbsp;</td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="db4f7613b1de12d1e79285c15636cf3b"></a><!-- doxytag: member="tbb::cache_aligned_allocator::address" ref="db4f7613b1de12d1e79285c15636cf3b" args="(const_reference x) const " -->
+const_pointer&nbsp;</td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4cdeea67af6c1fcd8f1d5e9c4cab61e8"></a><!-- doxytag: member="tbb::cache_aligned_allocator::allocate" ref="4cdeea67af6c1fcd8f1d5e9c4cab61e8" args="(size_type n, const void *hint=0)" -->
+pointer&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a> (size_type n, const void *hint=0)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Allocate space for n objects, starting on a cache/sector line. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3d4eadf188f7d85d3805ae534e0b8e1c"></a><!-- doxytag: member="tbb::cache_aligned_allocator::deallocate" ref="3d4eadf188f7d85d3805ae534e0b8e1c" args="(pointer p, size_type)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a> (pointer p, size_type)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Free block of memory that starts on a cache line. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fb23b687b4c0429dab4c7f8017266cf0"></a><!-- doxytag: member="tbb::cache_aligned_allocator::max_size" ref="fb23b687b4c0429dab4c7f8017266cf0" args="() const " -->
+size_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a> () const   throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Largest value for which method allocate might succeed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="958ee8745c86c275bfc9533af565e017"></a><!-- doxytag: member="tbb::cache_aligned_allocator::construct" ref="958ee8745c86c275bfc9533af565e017" args="(pointer p, const value_type &amp;value)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#958ee8745c86c275bfc9533af565e017">construct</a> (pointer p, const value_type &amp;value)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy-construct value at location pointed to by p. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cd298895a4f1654b5149ec84b591ecb5"></a><!-- doxytag: member="tbb::cache_aligned_allocator::destroy" ref="cd298895a4f1654b5149ec84b591ecb5" args="(pointer p)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html#cd298895a4f1654b5149ec84b591ecb5">destroy</a> (pointer p)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy value at location pointed to by p. <br></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename T&gt;<br>
+ class tbb::cache_aligned_allocator&lt; T &gt;</h3>
+
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
+<p>
+The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00269.html">cache_aligned_allocator.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00126.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00126.html
new file mode 100644 (file)
index 0000000..80a1393
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::cache_aligned_allocator&lt; void &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00126.html">cache_aligned_allocator&lt; void &gt;</a></div>
+<h1>tbb::cache_aligned_allocator&lt; void &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::cache_aligned_allocator&lt; void &gt;" -->Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00269.html">cache_aligned_allocator.h</a>&gt;</code>
+<p>
+<a href="a00009.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ce89776145998f0685a767b4f195272d"></a><!-- doxytag: member="tbb::cache_aligned_allocator&lt; void &gt;::pointer" ref="ce89776145998f0685a767b4f195272d" args="" -->
+typedef void *&nbsp;</td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4431fbbe1a8cfeb19c48ad0072078f45"></a><!-- doxytag: member="tbb::cache_aligned_allocator&lt; void &gt;::const_pointer" ref="4431fbbe1a8cfeb19c48ad0072078f45" args="" -->
+typedef const void *&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2ab296f4ecdd75f8e193ff92004a697d"></a><!-- doxytag: member="tbb::cache_aligned_allocator&lt; void &gt;::value_type" ref="2ab296f4ecdd75f8e193ff92004a697d" args="" -->
+typedef void&nbsp;</td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;&gt;<br>
+ class tbb::cache_aligned_allocator&lt; void &gt;</h3>
+
+Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00269.html">cache_aligned_allocator.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00127.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00127.html
new file mode 100644 (file)
index 0000000..4815b8a
--- /dev/null
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::captured_exception Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00127.html">captured_exception</a></div>
+<h1>tbb::captured_exception Class Reference</h1><!-- doxytag: class="tbb::captured_exception" --><!-- doxytag: inherits="tbb::tbb_exception" -->This class is used by TBB to propagate information about unhandled exceptions into the root thread.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00381.html">tbb_exception.h</a>&gt;</code>
+<p>
+Inherits <a class="el" href="a00172.html">tbb::tbb_exception</a>.
+<p>
+Inheritance diagram for tbb::captured_exception:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00085.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b50d9716bcdd281df574ec758a3952f9"></a><!-- doxytag: member="tbb::captured_exception::captured_exception" ref="b50d9716bcdd281df574ec758a3952f9" args="(const captured_exception &amp;src)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>captured_exception</b> (const <a class="el" href="a00127.html">captured_exception</a> &amp;src)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2ac89d457be837a19a3d505050f3a4e8"></a><!-- doxytag: member="tbb::captured_exception::captured_exception" ref="2ac89d457be837a19a3d505050f3a4e8" args="(const char *name, const char *info)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>captured_exception</b> (const char *name, const char *info)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e95b8eb99ec9dea22934ac528a08654c"></a><!-- doxytag: member="tbb::captured_exception::operator=" ref="e95b8eb99ec9dea22934ac528a08654c" args="(const captured_exception &amp;src)" -->
+<a class="el" href="a00127.html">captured_exception</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00127.html">captured_exception</a> &amp;src)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00127.html">captured_exception</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#df6bbb78a362fe862a341e81e2999810">move</a> ()  throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#df6bbb78a362fe862a341e81e2999810"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#667812a82f1525e968c52593dea0ef4c">destroy</a> ()  throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00127.html#df6bbb78a362fe862a341e81e2999810">move()</a> method.  <a href="#667812a82f1525e968c52593dea0ef4c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Throws this exception object.  <a href="#2dd1be66ab32fa27e0ddef5707fa67ef"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5af82fd677449c5ca727fa1d7e16f9f5"></a><!-- doxytag: member="tbb::captured_exception::name" ref="5af82fd677449c5ca727fa1d7e16f9f5" args="() const " -->
+const char *__TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a> () const   throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6b5988ef74a1fe2a58998d110b3633e0"></a><!-- doxytag: member="tbb::captured_exception::what" ref="6b5988ef74a1fe2a58998d110b3633e0" args="() const " -->
+const char *__TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html#6b5988ef74a1fe2a58998d110b3633e0">what</a> () const   throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00127.html#6b5988ef74a1fe2a58998d110b3633e0">what()</a> method. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+This class is used by TBB to propagate information about unhandled exceptions into the root thread. 
+<p>
+Exception of this type is thrown by TBB in the root thread (thread that started a parallel algorithm ) if an unhandled exception was intercepted during the algorithm execution in one of the workers. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00172.html">tbb::tbb_exception</a> </dd></dl>
+
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="667812a82f1525e968c52593dea0ef4c"></a><!-- doxytag: member="tbb::captured_exception::destroy" ref="667812a82f1525e968c52593dea0ef4c" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::captured_exception::destroy           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">  throw ()<code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Destroys objects created by the <a class="el" href="a00127.html#df6bbb78a362fe862a341e81e2999810">move()</a> method. 
+<p>
+Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. 
+<p>
+Implements <a class="el" href="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>.
+</div>
+</div><p>
+<a class="anchor" name="df6bbb78a362fe862a341e81e2999810"></a><!-- doxytag: member="tbb::captured_exception::move" ref="df6bbb78a362fe862a341e81e2999810" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00127.html">captured_exception</a>* tbb::captured_exception::move           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">  throw ()<code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Creates and returns pointer to the deep copy of this exception object. 
+<p>
+Move semantics is allowed. 
+<p>
+Implements <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a>.
+</div>
+</div><p>
+<a class="anchor" name="2dd1be66ab32fa27e0ddef5707fa67ef"></a><!-- doxytag: member="tbb::captured_exception::throw_self" ref="2dd1be66ab32fa27e0ddef5707fa67ef" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::captured_exception::throw_self           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Throws this exception object. 
+<p>
+Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown. 
+<p>
+Implements <a class="el" href="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a>.
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00381.html">tbb_exception.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00128.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00128.html
new file mode 100644 (file)
index 0000000..54edb83
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::combinable&lt; T &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00128.html">combinable</a></div>
+<h1>tbb::combinable&lt; T &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00234.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::combinable" -->Thread-local storage with optional reduction.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00271.html">combinable.h</a>&gt;</code>
+<p>
+<a href="a00011.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="d03619e90e62555aa5634fcc8adadcc9"></a><!-- doxytag: member="tbb::combinable::combinable" ref="d03619e90e62555aa5634fcc8adadcc9" args="(finit _finit)" -->
+template&lt;typename finit&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>combinable</b> (finit _finit)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c87e79ae98588a5780f708773388843"></a><!-- doxytag: member="tbb::combinable::~combinable" ref="2c87e79ae98588a5780f708773388843" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html#2c87e79ae98588a5780f708773388843">~combinable</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">destructor <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="57012803b7bc7416452cb930121ff210"></a><!-- doxytag: member="tbb::combinable::combinable" ref="57012803b7bc7416452cb930121ff210" args="(const combinable &amp;other)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>combinable</b> (const <a class="el" href="a00128.html">combinable</a> &amp;other)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c9650d59f65b1042afa232ede57dfca9"></a><!-- doxytag: member="tbb::combinable::operator=" ref="c9650d59f65b1042afa232ede57dfca9" args="(const combinable &amp;other)" -->
+<a class="el" href="a00128.html">combinable</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00128.html">combinable</a> &amp;other)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f09233cccb9b5e8a58874e43a703cac2"></a><!-- doxytag: member="tbb::combinable::clear" ref="f09233cccb9b5e8a58874e43a703cac2" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>clear</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2d7550204bcb88fa8810b5a39e9cad24"></a><!-- doxytag: member="tbb::combinable::local" ref="2d7550204bcb88fa8810b5a39e9cad24" args="()" -->
+T &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>local</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="93a42052881ecccdd8ddff16a1b1cca1"></a><!-- doxytag: member="tbb::combinable::local" ref="93a42052881ecccdd8ddff16a1b1cca1" args="(bool &amp;exists)" -->
+T &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>local</b> (bool &amp;exists)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="fb0ebff0036225d81917591355c0e5b6"></a><!-- doxytag: member="tbb::combinable::combine" ref="fb0ebff0036225d81917591355c0e5b6" args="(FCombine fcombine)" -->
+template&lt;typename FCombine&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>combine</b> (FCombine fcombine)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="2b76467e3c6657878e681b916aa40f86"></a><!-- doxytag: member="tbb::combinable::combine_each" ref="2b76467e3c6657878e681b916aa40f86" args="(FCombine fcombine)" -->
+template&lt;typename FCombine&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>combine_each</b> (FCombine fcombine)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename T&gt;<br>
+ class tbb::combinable&lt; T &gt;</h3>
+
+Thread-local storage with optional reduction. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00271.html">combinable.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00129.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00129.html
new file mode 100644 (file)
index 0000000..ea5f201
--- /dev/null
@@ -0,0 +1,303 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::concurrent_bounded_queue&lt; T, A &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00129.html">concurrent_bounded_queue</a></div>
+<h1>tbb::concurrent_bounded_queue&lt; T, A &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00234.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::concurrent_bounded_queue" -->A high-performance thread-safe blocking concurrent bounded queue.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00281.html">concurrent_queue.h</a>&gt;</code>
+<p>
+Inherited by <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a>.
+<p>
+Inheritance diagram for tbb::concurrent_bounded_queue&lt; T, A &gt;:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00019.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="98245517a931e5893f6601e66c51fc75"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::value_type" ref="98245517a931e5893f6601e66c51fc75" args="" -->
+typedef T&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#98245517a931e5893f6601e66c51fc75">value_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Element type in the queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2e2726fccf6d975dc1071608cc0bbf90"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::allocator_type" ref="2e2726fccf6d975dc1071608cc0bbf90" args="" -->
+typedef A&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Allocator type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dcd44ca6a88c0dc7a847a47a10811f0c"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::reference" ref="dcd44ca6a88c0dc7a847a47a10811f0c" args="" -->
+typedef T &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reference type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="796713d0b9ba93a4721cbe13e4474068"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::const_reference" ref="796713d0b9ba93a4721cbe13e4474068" args="" -->
+typedef const T &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Const reference type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef std::ptrdiff_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Integral type for representing size of the queue.  <a href="#a80e4c11dbb324e4b92a24a77bbcde68"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b45c91297e69515d83d5eef85ae1f49"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::difference_type" ref="4b45c91297e69515d83d5eef85ae1f49" args="" -->
+typedef std::ptrdiff_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Difference type for iterator. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="aeea2ad38b7e7fc2866f063dfed24c52"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::iterator" ref="aeea2ad38b7e7fc2866f063dfed24c52" args="" -->
+typedef internal::concurrent_queue_iterator&lt;<br>
+ <a class="el" href="a00129.html">concurrent_bounded_queue</a>,<br>
+ T &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0edd1a90e6ffa503bac1c4027116dbff"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::const_iterator" ref="0edd1a90e6ffa503bac1c4027116dbff" args="" -->
+typedef internal::concurrent_queue_iterator&lt;<br>
+ <a class="el" href="a00129.html">concurrent_bounded_queue</a>,<br>
+ const T &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e3525226732963ff0f13e89d8e6dab5b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::concurrent_bounded_queue" ref="e3525226732963ff0f13e89d8e6dab5b" args="(const allocator_type &amp;a=allocator_type())" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a> (const <a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &amp;a=<a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct empty queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7b7fb414d2eaa8a7f5d68fc4cd63ac50"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::concurrent_bounded_queue" ref="7b7fb414d2eaa8a7f5d68fc4cd63ac50" args="(const concurrent_bounded_queue &amp;src, const allocator_type &amp;a=allocator_type())" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a> (const <a class="el" href="a00129.html">concurrent_bounded_queue</a> &amp;src, const <a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &amp;a=<a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a5e04dcd7db9fd9b583b4e7df832246a"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::concurrent_bounded_queue" ref="a5e04dcd7db9fd9b583b4e7df832246a" args="(InputIterator begin, InputIterator end, const allocator_type &amp;a=allocator_type())" -->
+template&lt;typename InputIterator&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00129.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &amp;a=<a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">[begin,end) constructor <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="acaf5b510dc0dfc7780b8c956cf773cf"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::~concurrent_bounded_queue" ref="acaf5b510dc0dfc7780b8c956cf773cf" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ceb08c743b11ba88c878e73fff8af20b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::push" ref="ceb08c743b11ba88c878e73fff8af20b" args="(const T &amp;source)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">push</a> (const T &amp;source)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enqueue an item at tail of queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a> (T &amp;destination)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Dequeue item from head of queue.  <a href="#41f4c6bd7a82ab070e840bbf81b0b123"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">try_push</a> (const T &amp;source)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enqueue an item at tail of queue if queue is not already full.  <a href="#2bd6232531279fb3ccbd296bea23066b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a> (T &amp;destination)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#0ca487019bbb00a196442aff78a1e4f7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">size</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return number of pushes minus number of pops.  <a href="#7dc14d1a579a4cccda9f857585e1768d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f64924f2ee9225c368a270fc3c394db9"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::empty" ref="f64924f2ee9225c368a270fc3c394db9" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Equivalent to <a class="el" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">size()</a>&lt;=0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2888b3e4e837d7e03f2c731963a402b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::capacity" ref="b2888b3e4e837d7e03f2c731963a402b" args="() const " -->
+<a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Maximum number of allowed elements. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">set_capacity</a> (<a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> capacity)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the capacity.  <a href="#089f33dfd504e30a95f40ed2a5799367"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="415eb87e53b1c6a266de06ecbc490d16"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::get_allocator" ref="415eb87e53b1c6a266de06ecbc490d16" args="() const " -->
+<a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">return allocator object <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="90b31e2954c6e4596c7900435a5f4bc1"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::clear" ref="90b31e2954c6e4596c7900435a5f4bc1" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">clear the queue. not thread-safe. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5a2637188e104503ac2c0dff633014e8"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::unsafe_begin" ref="5a2637188e104503ac2c0dff633014e8" args="()" -->
+iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c7267334ef11087c76c810abb9d5cbc2"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::unsafe_end" ref="c7267334ef11087c76c810abb9d5cbc2" args="()" -->
+iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8be757841d0bbf7744508aaf6a141d08"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::unsafe_begin" ref="8be757841d0bbf7744508aaf6a141d08" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3aac91d288bf227d9d06717b44ef28f7"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::unsafe_end" ref="3aac91d288bf227d9d06717b44ef28f7" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> () const </td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05bffad9626d51abbd4bb82ae2a1cceb"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::internal::concurrent_queue_iterator" ref="05bffad9626d51abbd4bb82ae2a1cceb" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><b>destroyer</b></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Class used to ensure exception-safety of method "pop". <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt;<br>
+ class tbb::concurrent_bounded_queue&lt; T, A &gt;</h3>
+
+A high-performance thread-safe blocking concurrent bounded queue. 
+<p>
+This is the pre-PPL TBB concurrent queue which supports boundedness and blocking semantics. Note that method names agree with the PPL-style concurrent queue. Multiple threads may each push and pop concurrently. Assignment construction is not allowed. 
+<p>
+<hr><h2>Member Typedef Documentation</h2>
+<a class="anchor" name="a80e4c11dbb324e4b92a24a77bbcde68"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::size_type" ref="a80e4c11dbb324e4b92a24a77bbcde68" args="" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef std::ptrdiff_t <a class="el" href="a00129.html">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::<a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Integral type for representing size of the queue. 
+<p>
+Notice that the size_type is a signed integral type. This is because the size can be negative if there are pending pops without corresponding pushes. 
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="41f4c6bd7a82ab070e840bbf81b0b123"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::pop" ref="41f4c6bd7a82ab070e840bbf81b0b123" args="(T &amp;destination)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00129.html">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::pop           </td>
+          <td>(</td>
+          <td class="paramtype">T &amp;&nbsp;</td>
+          <td class="paramname"> <em>destination</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Dequeue item from head of queue. 
+<p>
+Block until an item becomes available, and then dequeue it. 
+</div>
+</div><p>
+<a class="anchor" name="089f33dfd504e30a95f40ed2a5799367"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::set_capacity" ref="089f33dfd504e30a95f40ed2a5799367" args="(size_type capacity)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00129.html">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::set_capacity           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>&nbsp;</td>
+          <td class="paramname"> <em>capacity</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set the capacity. 
+<p>
+Setting the capacity to 0 causes subsequent try_push operations to always fail, and subsequent push operations to block forever. 
+</div>
+</div><p>
+<a class="anchor" name="7dc14d1a579a4cccda9f857585e1768d"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::size" ref="7dc14d1a579a4cccda9f857585e1768d" args="() const " -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="el" href="a00129.html">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::size           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"> const<code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return number of pushes minus number of pops. 
+<p>
+Note that the result can be negative if there are pops waiting for the corresponding pushes. The result can also exceed <a class="el" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">capacity()</a> if there are push operations in flight. 
+</div>
+</div><p>
+<a class="anchor" name="0ca487019bbb00a196442aff78a1e4f7"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::try_pop" ref="0ca487019bbb00a196442aff78a1e4f7" args="(T &amp;destination)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00129.html">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::try_pop           </td>
+          <td>(</td>
+          <td class="paramtype">T &amp;&nbsp;</td>
+          <td class="paramname"> <em>destination</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Attempt to dequeue an item from head of queue. 
+<p>
+Does not wait for item to become available. Returns true if successful; false otherwise. 
+</div>
+</div><p>
+<a class="anchor" name="2bd6232531279fb3ccbd296bea23066b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::try_push" ref="2bd6232531279fb3ccbd296bea23066b" args="(const T &amp;source)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00129.html">tbb::concurrent_bounded_queue</a>&lt; T, A &gt;::try_push           </td>
+          <td>(</td>
+          <td class="paramtype">const T &amp;&nbsp;</td>
+          <td class="paramname"> <em>source</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Enqueue an item at tail of queue if queue is not already full. 
+<p>
+Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00281.html">concurrent_queue.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00130.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00130.html
new file mode 100644 (file)
index 0000000..58a4793
--- /dev/null
@@ -0,0 +1,588 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00130.html">concurrent_hash_map</a></div>
+<h1>tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00234.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::concurrent_hash_map" -->Unordered map from Key to T.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00272.html">concurrent_hash_map.h</a>&gt;</code>
+<p>
+<a href="a00013.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a59325d5213bdbb32e66525364d9ca6e"></a><!-- doxytag: member="tbb::concurrent_hash_map::key_type" ref="a59325d5213bdbb32e66525364d9ca6e" args="" -->
+typedef Key&nbsp;</td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d30555ca958fcf4401d8c46e32b35832"></a><!-- doxytag: member="tbb::concurrent_hash_map::mapped_type" ref="d30555ca958fcf4401d8c46e32b35832" args="" -->
+typedef T&nbsp;</td><td class="memItemRight" valign="bottom"><b>mapped_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ba7dfe412706706fc77eeb9ca106dd77"></a><!-- doxytag: member="tbb::concurrent_hash_map::value_type" ref="ba7dfe412706706fc77eeb9ca106dd77" args="" -->
+typedef std::pair&lt; const Key,<br>
+ T &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ca1134a52ba7d888f7b928adbded48e"></a><!-- doxytag: member="tbb::concurrent_hash_map::size_type" ref="3ca1134a52ba7d888f7b928adbded48e" args="" -->
+typedef internal::hash_map_base::size_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="156eff4cfda20255ab61594772322632"></a><!-- doxytag: member="tbb::concurrent_hash_map::difference_type" ref="156eff4cfda20255ab61594772322632" args="" -->
+typedef ptrdiff_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9efc6155cc67220afe493d5ba86da474"></a><!-- doxytag: member="tbb::concurrent_hash_map::pointer" ref="9efc6155cc67220afe493d5ba86da474" args="" -->
+typedef value_type *&nbsp;</td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1de4baea4800c9422497160c2dc6ee88"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_pointer" ref="1de4baea4800c9422497160c2dc6ee88" args="" -->
+typedef const value_type *&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7f4e03ecea778f011ab7c3c0b61d2521"></a><!-- doxytag: member="tbb::concurrent_hash_map::reference" ref="7f4e03ecea778f011ab7c3c0b61d2521" args="" -->
+typedef value_type &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9fa6589f474a5b2f770ee12ab9965b35"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_reference" ref="9fa6589f474a5b2f770ee12ab9965b35" args="" -->
+typedef const value_type &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0a1323016e3475bf8a5ed8952f84b53"></a><!-- doxytag: member="tbb::concurrent_hash_map::iterator" ref="e0a1323016e3475bf8a5ed8952f84b53" args="" -->
+typedef internal::hash_map_iterator&lt;<br>
+ <a class="el" href="a00130.html">concurrent_hash_map</a>, value_type &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2380701b85fb373abfe1c20d4044cc47"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_iterator" ref="2380701b85fb373abfe1c20d4044cc47" args="" -->
+typedef internal::hash_map_iterator&lt;<br>
+ <a class="el" href="a00130.html">concurrent_hash_map</a>, const <br>
+value_type &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0f251ff63b9ee8ef88bac1452de92618"></a><!-- doxytag: member="tbb::concurrent_hash_map::range_type" ref="0f251ff63b9ee8ef88bac1452de92618" args="" -->
+typedef internal::hash_map_range&lt;<br>
+ iterator &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e91c41ef86638719f1e4fb44cc936ed2"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_range_type" ref="e91c41ef86638719f1e4fb44cc936ed2" args="" -->
+typedef internal::hash_map_range&lt;<br>
+ const_iterator &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dd223032ecd376e846b6724e168bdc56"></a><!-- doxytag: member="tbb::concurrent_hash_map::allocator_type" ref="dd223032ecd376e846b6724e168bdc56" args="" -->
+typedef Allocator&nbsp;</td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="342582ba05d9fb893ed80875d2b7a42f"></a><!-- doxytag: member="tbb::concurrent_hash_map::concurrent_hash_map" ref="342582ba05d9fb893ed80875d2b7a42f" args="(const allocator_type &amp;a=allocator_type())" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#342582ba05d9fb893ed80875d2b7a42f">concurrent_hash_map</a> (const allocator_type &amp;a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct empty table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bc50f7bca65d0c27cbf5c31d2fa63eac"></a><!-- doxytag: member="tbb::concurrent_hash_map::concurrent_hash_map" ref="bc50f7bca65d0c27cbf5c31d2fa63eac" args="(const concurrent_hash_map &amp;table, const allocator_type &amp;a=allocator_type())" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#bc50f7bca65d0c27cbf5c31d2fa63eac">concurrent_hash_map</a> (const <a class="el" href="a00130.html">concurrent_hash_map</a> &amp;table, const allocator_type &amp;a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="b5132202dff9ee3d619bef6b1d84edea"></a><!-- doxytag: member="tbb::concurrent_hash_map::concurrent_hash_map" ref="b5132202dff9ee3d619bef6b1d84edea" args="(I first, I last, const allocator_type &amp;a=allocator_type())" -->
+template&lt;typename I&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00130.html#b5132202dff9ee3d619bef6b1d84edea">concurrent_hash_map</a> (I first, I last, const allocator_type &amp;a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construction with copying iteration range and given allocator instance. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="adadeb9d1acb8c3b34517435666cf297"></a><!-- doxytag: member="tbb::concurrent_hash_map::operator=" ref="adadeb9d1acb8c3b34517435666cf297" args="(const concurrent_hash_map &amp;table)" -->
+<a class="el" href="a00130.html">concurrent_hash_map</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#adadeb9d1acb8c3b34517435666cf297">operator=</a> (const <a class="el" href="a00130.html">concurrent_hash_map</a> &amp;table)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Assignment. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="36bcd50fd5383f3682032323b2d74333"></a><!-- doxytag: member="tbb::concurrent_hash_map::clear" ref="36bcd50fd5383f3682032323b2d74333" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#36bcd50fd5383f3682032323b2d74333">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5e96649f71f68f3b6bf3b1eee6b441a7"></a><!-- doxytag: member="tbb::concurrent_hash_map::~concurrent_hash_map" ref="5e96649f71f68f3b6bf3b1eee6b441a7" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#5e96649f71f68f3b6bf3b1eee6b441a7">~concurrent_hash_map</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear table and destroy it. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0f51b807e124c2bee274c5f86a2a817"></a><!-- doxytag: member="tbb::concurrent_hash_map::range" ref="e0f51b807e124c2bee274c5f86a2a817" args="(size_type grainsize=1)" -->
+range_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>range</b> (size_type grainsize=1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="78989fb98b211ab5f8437798d490e004"></a><!-- doxytag: member="tbb::concurrent_hash_map::range" ref="78989fb98b211ab5f8437798d490e004" args="(size_type grainsize=1) const " -->
+const_range_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>range</b> (size_type grainsize=1) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dfb7ab010b46fc194673256479c2ea48"></a><!-- doxytag: member="tbb::concurrent_hash_map::begin" ref="dfb7ab010b46fc194673256479c2ea48" args="()" -->
+iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7e2dd7c8b3d37a93ba551e4de33bb73d"></a><!-- doxytag: member="tbb::concurrent_hash_map::end" ref="7e2dd7c8b3d37a93ba551e4de33bb73d" args="()" -->
+iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="be53487f364b5744187af9f7627c3190"></a><!-- doxytag: member="tbb::concurrent_hash_map::begin" ref="be53487f364b5744187af9f7627c3190" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6b947898d1a60b680d8c4f915442e1a8"></a><!-- doxytag: member="tbb::concurrent_hash_map::end" ref="6b947898d1a60b680d8c4f915442e1a8" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3b6f066f9b1e51eaefa67c37928a6d5f"></a><!-- doxytag: member="tbb::concurrent_hash_map::equal_range" ref="3b6f066f9b1e51eaefa67c37928a6d5f" args="(const Key &amp;key)" -->
+std::pair&lt; iterator, iterator &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>equal_range</b> (const Key &amp;key)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9d1d5f33f2babb6780794c9ed6193174"></a><!-- doxytag: member="tbb::concurrent_hash_map::equal_range" ref="9d1d5f33f2babb6780794c9ed6193174" args="(const Key &amp;key) const " -->
+std::pair&lt; const_iterator,<br>
+ const_iterator &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>equal_range</b> (const Key &amp;key) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="25b0e3881038877604c5efc1c14c4afd"></a><!-- doxytag: member="tbb::concurrent_hash_map::size" ref="25b0e3881038877604c5efc1c14c4afd" args="() const " -->
+size_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">size</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Number of items in table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3e5d085375320cd3f34faeedc5bba8f6"></a><!-- doxytag: member="tbb::concurrent_hash_map::empty" ref="3e5d085375320cd3f34faeedc5bba8f6" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#3e5d085375320cd3f34faeedc5bba8f6">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if <a class="el" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">size()</a>==0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6ed260e217fb310050928d7bd03f1b5e"></a><!-- doxytag: member="tbb::concurrent_hash_map::max_size" ref="6ed260e217fb310050928d7bd03f1b5e" args="() const " -->
+size_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#6ed260e217fb310050928d7bd03f1b5e">max_size</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Upper bound on size. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="79d1e5c3b975dbd38b43138266fe4c0e"></a><!-- doxytag: member="tbb::concurrent_hash_map::get_allocator" ref="79d1e5c3b975dbd38b43138266fe4c0e" args="() const " -->
+allocator_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#79d1e5c3b975dbd38b43138266fe4c0e">get_allocator</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">return allocator object <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dd73f70aa6602021ea2c56bac9715353"></a><!-- doxytag: member="tbb::concurrent_hash_map::swap" ref="dd73f70aa6602021ea2c56bac9715353" args="(concurrent_hash_map &amp;table)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#dd73f70aa6602021ea2c56bac9715353">swap</a> (<a class="el" href="a00130.html">concurrent_hash_map</a> &amp;table)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">swap two instances. Iterators are invalidated <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3e97a1f3cb66e81a2336b013ef1ae7d"></a><!-- doxytag: member="tbb::concurrent_hash_map::count" ref="a3e97a1f3cb66e81a2336b013ef1ae7d" args="(const Key &amp;key) const " -->
+size_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#a3e97a1f3cb66e81a2336b013ef1ae7d">count</a> (const Key &amp;key) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return count of items (0 or 1). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#9fa1ca60af4ef761a100617b27718585">find</a> (<a class="el" href="a00133.html">const_accessor</a> &amp;result, const Key &amp;key) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Find item and acquire a read lock on the item.  <a href="#9fa1ca60af4ef761a100617b27718585"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#4f7cc0aab2d8216c0a6e681f32dd48c8">find</a> (<a class="el" href="a00131.html">accessor</a> &amp;result, const Key &amp;key)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Find item and acquire a write lock on the item.  <a href="#4f7cc0aab2d8216c0a6e681f32dd48c8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#67d8c254b1666d89267c8a4a33c864f3">insert</a> (<a class="el" href="a00133.html">const_accessor</a> &amp;result, const Key &amp;key)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Insert item (if not already present) and acquire a read lock on the item.  <a href="#67d8c254b1666d89267c8a4a33c864f3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#8ea81ff7fea044f859273b354c91c185">insert</a> (<a class="el" href="a00131.html">accessor</a> &amp;result, const Key &amp;key)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Insert item (if not already present) and acquire a write lock on the item.  <a href="#8ea81ff7fea044f859273b354c91c185"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#68a46a26bd4308c1780d021ca7e8fc15">insert</a> (<a class="el" href="a00133.html">const_accessor</a> &amp;result, const value_type &amp;value)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a read lock on the item.  <a href="#68a46a26bd4308c1780d021ca7e8fc15"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#7bd4dcf6ea74a32299fd57d8d7fc7ed8">insert</a> (<a class="el" href="a00131.html">accessor</a> &amp;result, const value_type &amp;value)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a write lock on the item.  <a href="#7bd4dcf6ea74a32299fd57d8d7fc7ed8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#3034a308bc839695a5714a107380c4b9">insert</a> (const value_type &amp;value)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Insert item by copying if there is no such key present already.  <a href="#3034a308bc839695a5714a107380c4b9"></a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="7b42dba04d71e1367f0d542087906178"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="7b42dba04d71e1367f0d542087906178" args="(I first, I last)" -->
+template&lt;typename I&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00130.html#7b42dba04d71e1367f0d542087906178">insert</a> (I first, I last)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Insert range [first, last). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#58df7a1e4373c55eb4c2fa9dc69516b1">erase</a> (const Key &amp;key)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Erase item.  <a href="#58df7a1e4373c55eb4c2fa9dc69516b1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#fc64086f9f518cef8c368c9429d0064e">erase</a> (<a class="el" href="a00133.html">const_accessor</a> &amp;item_accessor)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Erase item by <a class="el" href="a00133.html">const_accessor</a>.  <a href="#fc64086f9f518cef8c368c9429d0064e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#b65abfa291da566617dd58dfb349630a">erase</a> (<a class="el" href="a00131.html">accessor</a> &amp;item_accessor)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Erase item by accessor.  <a href="#b65abfa291da566617dd58dfb349630a"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4a66e22918752bb0d7c22333bec7e0d6"></a><!-- doxytag: member="tbb::concurrent_hash_map::node_allocator_type" ref="4a66e22918752bb0d7c22333bec7e0d6" args="" -->
+typedef Allocator::template <br>
+rebind&lt; node &gt;::other&nbsp;</td><td class="memItemRight" valign="bottom"><b>node_allocator_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="572fec6cb2b0d70b8a3a12c5be4df6d4"></a><!-- doxytag: member="tbb::concurrent_hash_map::delete_node" ref="572fec6cb2b0d70b8a3a12c5be4df6d4" args="(node_base *n)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>delete_node</b> (node_base *n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="058f1d5e2075d11c9b2ac00f1f0ae60e"></a><!-- doxytag: member="tbb::concurrent_hash_map::search_bucket" ref="058f1d5e2075d11c9b2ac00f1f0ae60e" args="(const key_type &amp;key, bucket *b) const " -->
+node *&nbsp;</td><td class="memItemRight" valign="bottom"><b>search_bucket</b> (const key_type &amp;key, bucket *b) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f2fe44bde2158a2f2a315c6457ebd030"></a><!-- doxytag: member="tbb::concurrent_hash_map::rehash_bucket" ref="f2fe44bde2158a2f2a315c6457ebd030" args="(bucket *b_new, const hashcode_t h)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>rehash_bucket</b> (bucket *b_new, const hashcode_t h)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0f0ba43d9cb783f12dd01bf5677da097"></a><!-- doxytag: member="tbb::concurrent_hash_map::lookup" ref="0f0ba43d9cb783f12dd01bf5677da097" args="(bool op_insert, const Key &amp;key, const T *t, const_accessor *result, bool write)" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#0f0ba43d9cb783f12dd01bf5677da097">lookup</a> (bool op_insert, const Key &amp;key, const T *t, <a class="el" href="a00133.html">const_accessor</a> *result, bool write)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Insert or find item and optionally acquire a lock on the item. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="671965989ffb5f6084c776cb0bb6cdab"></a><!-- doxytag: member="tbb::concurrent_hash_map::exclude" ref="671965989ffb5f6084c776cb0bb6cdab" args="(const_accessor &amp;item_accessor, bool readonly)" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#671965989ffb5f6084c776cb0bb6cdab">exclude</a> (<a class="el" href="a00133.html">const_accessor</a> &amp;item_accessor, bool readonly)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">delete item by accessor <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="308ec5ad19fdd1be4d345f8013070150"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal_equal_range" ref="308ec5ad19fdd1be4d345f8013070150" args="(const Key &amp;key, I end) const " -->
+template&lt;typename I&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">std::pair&lt; I, I &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00130.html#308ec5ad19fdd1be4d345f8013070150">internal_equal_range</a> (const Key &amp;key, I end) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns an iterator for an item defined by the key, or for the next item after it (if upper==true). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7973cd92f57dcb092ab757f8d9e089f9"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal_copy" ref="7973cd92f57dcb092ab757f8d9e089f9" args="(const concurrent_hash_map &amp;source)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#7973cd92f57dcb092ab757f8d9e089f9">internal_copy</a> (const <a class="el" href="a00130.html">concurrent_hash_map</a> &amp;source)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy "source" to *this, where *this must start out empty. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="35372431aedfcc88b890d895933cebc2"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal_copy" ref="35372431aedfcc88b890d895933cebc2" args="(I first, I last)" -->
+template&lt;typename I&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>internal_copy</b> (I first, I last)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2f1ca7e8319c464349a9de304b6dbf4a"></a><!-- doxytag: member="tbb::concurrent_hash_map::find" ref="2f1ca7e8319c464349a9de304b6dbf4a" args="(const Key &amp;key) const " -->
+const_pointer&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html#2f1ca7e8319c464349a9de304b6dbf4a">find</a> (const Key &amp;key) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">fast find when no concurrent erasure is used <br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="964dbe9bfcb2ac0157f8b77f252f951b"></a><!-- doxytag: member="tbb::concurrent_hash_map::my_allocator" ref="964dbe9bfcb2ac0157f8b77f252f951b" args="" -->
+node_allocator_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>my_allocator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1d13c1f34b3826f9235b82ea90818169"></a><!-- doxytag: member="tbb::concurrent_hash_map::my_hash_compare" ref="1d13c1f34b3826f9235b82ea90818169" args="" -->
+HashCompare&nbsp;</td><td class="memItemRight" valign="bottom"><b>my_hash_compare</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e24acd2f6849db3377a3942807639758"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal::hash_map_iterator" ref="e24acd2f6849db3377a3942807639758" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::hash_map_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c94f21746c8902f7e0b5115a8d4da1d2"></a><!-- doxytag: member="tbb::concurrent_hash_map::internal::hash_map_range" ref="c94f21746c8902f7e0b5115a8d4da1d2" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::hash_map_range</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c0028dfa75a6baa14007355ab1ef7fc"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor" ref="2c0028dfa75a6baa14007355ab1ef7fc" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_accessor</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html">accessor</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Allows write access to elements and combines data access, locking, and garbage collection.  <a href="a00131.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html">bucket_accessor</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">bucket accessor is to find, rehash, acquire a lock, and access a bucket  <a href="a00132.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html">const_accessor</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Combines data access, locking, and garbage collection.  <a href="a00133.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><b>node</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename Key, typename T, typename HashCompare, typename Allocator&gt;<br>
+ class tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</h3>
+
+Unordered map from Key to T. 
+<p>
+<a class="el" href="a00130.html">concurrent_hash_map</a> is associative container with concurrent access.<p>
+<dl compact><dt><b>Compatibility</b></dt><dd>The class meets all Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1).</dd></dl>
+<dl compact><dt><b>Exception Safety</b></dt><dd><ul>
+<li>Hash function is not permitted to throw an exception. User-defined types Key and T are forbidden from throwing an exception in destructors.</li><li>If exception happens during <a class="el" href="a00130.html#67d8c254b1666d89267c8a4a33c864f3">insert()</a> operations, it has no effect (unless exception raised by HashCompare::hash() function during grow_segment).</li><li>If exception happens during <a class="el" href="a00130.html#adadeb9d1acb8c3b34517435666cf297">operator=()</a> operation, the container can have a part of source items, and methods <a class="el" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">size()</a> and <a class="el" href="a00130.html#3e5d085375320cd3f34faeedc5bba8f6">empty()</a> can return wrong results.</li></ul>
+</dd></dl>
+<dl compact><dt><b>Changes since TBB 2.1</b></dt><dd><ul>
+<li>Replaced internal algorithm and data structure. Patent is pending.</li></ul>
+</dd></dl>
+<dl compact><dt><b>Changes since TBB 2.0</b></dt><dd><ul>
+<li>Fixed exception-safety</li><li>Added template argument for allocator</li><li>Added allocator argument in constructors</li><li>Added constructor from a range of iterators</li><li>Added several new overloaded <a class="el" href="a00130.html#67d8c254b1666d89267c8a4a33c864f3">insert()</a> methods</li><li>Added <a class="el" href="a00130.html#79d1e5c3b975dbd38b43138266fe4c0e">get_allocator()</a></li><li>Added <a class="el" href="a00130.html#dd73f70aa6602021ea2c56bac9715353">swap()</a></li><li>Added <a class="el" href="a00130.html#a3e97a1f3cb66e81a2336b013ef1ae7d">count()</a></li><li>Added overloaded <a class="el" href="a00130.html#b65abfa291da566617dd58dfb349630a">erase(accessor &amp;)</a> and <a class="el" href="a00130.html#fc64086f9f518cef8c368c9429d0064e">erase(const_accessor&amp;)</a></li><li>Added equal_range() [const]</li><li>Added [const_]pointer, [const_]reference, and allocator_type types</li><li>Added global functions: operator==(), operator!=(), and <a class="el" href="a00130.html#dd73f70aa6602021ea2c56bac9715353">swap()</a> </li></ul>
+</dd></dl>
+
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="b65abfa291da566617dd58dfb349630a"></a><!-- doxytag: member="tbb::concurrent_hash_map::erase" ref="b65abfa291da566617dd58dfb349630a" args="(accessor &amp;item_accessor)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Key, typename T, typename HashCompare, typename Allocator&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>&lt; Key, T, HashCompare, Allocator &gt;::erase           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00131.html">accessor</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>item_accessor</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Erase item by accessor. 
+<p>
+Return true if item was erased by particularly this call. 
+</div>
+</div><p>
+<a class="anchor" name="fc64086f9f518cef8c368c9429d0064e"></a><!-- doxytag: member="tbb::concurrent_hash_map::erase" ref="fc64086f9f518cef8c368c9429d0064e" args="(const_accessor &amp;item_accessor)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Key, typename T, typename HashCompare, typename Allocator&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>&lt; Key, T, HashCompare, Allocator &gt;::erase           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00133.html">const_accessor</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>item_accessor</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Erase item by <a class="el" href="a00133.html">const_accessor</a>. 
+<p>
+Return true if item was erased by particularly this call. 
+</div>
+</div><p>
+<a class="anchor" name="58df7a1e4373c55eb4c2fa9dc69516b1"></a><!-- doxytag: member="tbb::concurrent_hash_map::erase" ref="58df7a1e4373c55eb4c2fa9dc69516b1" args="(const Key &amp;key)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Key, typename T, typename HashCompare, typename A&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt;::erase           </td>
+          <td>(</td>
+          <td class="paramtype">const Key &amp;&nbsp;</td>
+          <td class="paramname"> <em>key</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Erase item. 
+<p>
+Return true if item was erased by particularly this call. 
+</div>
+</div><p>
+<a class="anchor" name="4f7cc0aab2d8216c0a6e681f32dd48c8"></a><!-- doxytag: member="tbb::concurrent_hash_map::find" ref="4f7cc0aab2d8216c0a6e681f32dd48c8" args="(accessor &amp;result, const Key &amp;key)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Key, typename T, typename HashCompare, typename Allocator&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>&lt; Key, T, HashCompare, Allocator &gt;::find           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00131.html">accessor</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Key &amp;&nbsp;</td>
+          <td class="paramname"> <em>key</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Find item and acquire a write lock on the item. 
+<p>
+Return true if item is found, false otherwise. 
+</div>
+</div><p>
+<a class="anchor" name="9fa1ca60af4ef761a100617b27718585"></a><!-- doxytag: member="tbb::concurrent_hash_map::find" ref="9fa1ca60af4ef761a100617b27718585" args="(const_accessor &amp;result, const Key &amp;key) const " -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Key, typename T, typename HashCompare, typename Allocator&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>&lt; Key, T, HashCompare, Allocator &gt;::find           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00133.html">const_accessor</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Key &amp;&nbsp;</td>
+          <td class="paramname"> <em>key</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"> const<code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Find item and acquire a read lock on the item. 
+<p>
+Return true if item is found, false otherwise. 
+</div>
+</div><p>
+<a class="anchor" name="3034a308bc839695a5714a107380c4b9"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="3034a308bc839695a5714a107380c4b9" args="(const value_type &amp;value)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Key, typename T, typename HashCompare, typename Allocator&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>&lt; Key, T, HashCompare, Allocator &gt;::insert           </td>
+          <td>(</td>
+          <td class="paramtype">const value_type &amp;&nbsp;</td>
+          <td class="paramname"> <em>value</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Insert item by copying if there is no such key present already. 
+<p>
+Returns true if item is inserted. 
+</div>
+</div><p>
+<a class="anchor" name="7bd4dcf6ea74a32299fd57d8d7fc7ed8"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="7bd4dcf6ea74a32299fd57d8d7fc7ed8" args="(accessor &amp;result, const value_type &amp;value)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Key, typename T, typename HashCompare, typename Allocator&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>&lt; Key, T, HashCompare, Allocator &gt;::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00131.html">accessor</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const value_type &amp;&nbsp;</td>
+          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Insert item by copying if there is no such key present already and acquire a write lock on the item. 
+<p>
+Returns true if item is new. 
+</div>
+</div><p>
+<a class="anchor" name="68a46a26bd4308c1780d021ca7e8fc15"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="68a46a26bd4308c1780d021ca7e8fc15" args="(const_accessor &amp;result, const value_type &amp;value)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Key, typename T, typename HashCompare, typename Allocator&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>&lt; Key, T, HashCompare, Allocator &gt;::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00133.html">const_accessor</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const value_type &amp;&nbsp;</td>
+          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Insert item by copying if there is no such key present already and acquire a read lock on the item. 
+<p>
+Returns true if item is new. 
+</div>
+</div><p>
+<a class="anchor" name="8ea81ff7fea044f859273b354c91c185"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="8ea81ff7fea044f859273b354c91c185" args="(accessor &amp;result, const Key &amp;key)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Key, typename T, typename HashCompare, typename Allocator&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>&lt; Key, T, HashCompare, Allocator &gt;::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00131.html">accessor</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Key &amp;&nbsp;</td>
+          <td class="paramname"> <em>key</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Insert item (if not already present) and acquire a write lock on the item. 
+<p>
+Returns true if item is new. 
+</div>
+</div><p>
+<a class="anchor" name="67d8c254b1666d89267c8a4a33c864f3"></a><!-- doxytag: member="tbb::concurrent_hash_map::insert" ref="67d8c254b1666d89267c8a4a33c864f3" args="(const_accessor &amp;result, const Key &amp;key)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Key, typename T, typename HashCompare, typename Allocator&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00130.html">tbb::concurrent_hash_map</a>&lt; Key, T, HashCompare, Allocator &gt;::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00133.html">const_accessor</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>result</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Key &amp;&nbsp;</td>
+          <td class="paramname"> <em>key</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Insert item (if not already present) and acquire a read lock on the item. 
+<p>
+Returns true if item is new. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00272.html">concurrent_hash_map.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00131.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00131.html
new file mode 100644 (file)
index 0000000..bb77cd5
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00130.html">concurrent_hash_map</a>::<a class="el" href="a00131.html">accessor</a></div>
+<h1>tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor Class Reference</h1><!-- doxytag: class="tbb::concurrent_hash_map::accessor" --><!-- doxytag: inherits="tbb::concurrent_hash_map::const_accessor" -->Allows write access to elements and combines data access, locking, and garbage collection.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00272.html">concurrent_hash_map.h</a>&gt;</code>
+<p>
+Inherits <a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a>.
+<p>
+Inheritance diagram for tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00017.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="34035ddb9e2a27f2f0a1f6a2a16730cf"></a><!-- doxytag: member="tbb::concurrent_hash_map::accessor::value_type" ref="34035ddb9e2a27f2f0a1f6a2a16730cf" args="" -->
+typedef concurrent_hash_map::value_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#34035ddb9e2a27f2f0a1f6a2a16730cf">value_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Type of value. <br></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="03a091f7355a3c0c03f839893695f372"></a><!-- doxytag: member="tbb::concurrent_hash_map::accessor::operator *" ref="03a091f7355a3c0c03f839893695f372" args="() const " -->
+reference&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#03a091f7355a3c0c03f839893695f372">operator *</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return reference to associated value in hash table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="302f02e5deec0a67b872e9cfb08d9e60"></a><!-- doxytag: member="tbb::concurrent_hash_map::accessor::operator-&gt;" ref="302f02e5deec0a67b872e9cfb08d9e60" args="() const " -->
+pointer&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html#302f02e5deec0a67b872e9cfb08d9e60">operator-&gt;</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return pointer to associated value in hash table. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename Key, typename T, typename HashCompare, typename Allocator&gt;<br>
+ class tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</h3>
+
+Allows write access to elements and combines data access, locking, and garbage collection. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00272.html">concurrent_hash_map.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00132.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00132.html
new file mode 100644 (file)
index 0000000..9096298
--- /dev/null
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00130.html">concurrent_hash_map</a>::<a class="el" href="a00132.html">bucket_accessor</a></div>
+<h1>tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor Class Reference</h1><!-- doxytag: class="tbb::concurrent_hash_map::bucket_accessor" -->bucket accessor is to find, rehash, acquire a lock, and access a bucket  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00272.html">concurrent_hash_map.h</a>&gt;</code>
+<p>
+<a href="a00015.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="53584e6b0cf6cda95f31fcbfabb311fe"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::bucket_accessor" ref="53584e6b0cf6cda95f31fcbfabb311fe" args="(concurrent_hash_map *base, const hashcode_t h, bool writer=false)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>bucket_accessor</b> (<a class="el" href="a00130.html">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7b75959ce5a971b05cfefcbc1d09a022"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::acquire" ref="7b75959ce5a971b05cfefcbc1d09a022" args="(concurrent_hash_map *base, const hashcode_t h, bool writer=false)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#7b75959ce5a971b05cfefcbc1d09a022">acquire</a> (<a class="el" href="a00130.html">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">find a bucket by maksed hashcode, optionally rehash, and acquire the lock <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="adf8e405df5787351fe816c42042b9ec"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::is_writer" ref="adf8e405df5787351fe816c42042b9ec" args="()" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#adf8e405df5787351fe816c42042b9ec">is_writer</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">check whether bucket is locked for write <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7e98ad1b46ed35fb4a92d65c16c6982d"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::operator()" ref="7e98ad1b46ed35fb4a92d65c16c6982d" args="()" -->
+bucket *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html#7e98ad1b46ed35fb4a92d65c16c6982d">operator()</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get bucket pointer <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="32b2b1c83ca85859bc5276022821152d"></a><!-- doxytag: member="tbb::concurrent_hash_map::bucket_accessor::upgrade_to_writer" ref="32b2b1c83ca85859bc5276022821152d" args="()" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>upgrade_to_writer</b> ()</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename Key, typename T, typename HashCompare, typename Allocator&gt;<br>
+ class tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</h3>
+
+bucket accessor is to find, rehash, acquire a lock, and access a bucket 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00272.html">concurrent_hash_map.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00133.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00133.html
new file mode 100644 (file)
index 0000000..92375ea
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00130.html">concurrent_hash_map</a>::<a class="el" href="a00133.html">const_accessor</a></div>
+<h1>tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor Class Reference</h1><!-- doxytag: class="tbb::concurrent_hash_map::const_accessor" -->Combines data access, locking, and garbage collection.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00272.html">concurrent_hash_map.h</a>&gt;</code>
+<p>
+Inherited by <a class="el" href="a00131.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</a>.
+<p>
+Inheritance diagram for tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00016.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b5de4197079009b1cfd8bdeb594c6428"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::value_type" ref="b5de4197079009b1cfd8bdeb594c6428" args="" -->
+typedef const concurrent_hash_map::value_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#b5de4197079009b1cfd8bdeb594c6428">value_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Type of value. <br></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e55c7c3f0acd7fd823a07957e71a7462"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::empty" ref="e55c7c3f0acd7fd823a07957e71a7462" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#e55c7c3f0acd7fd823a07957e71a7462">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if result is empty. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="09575d1a2dfeb8cd896c27cdd3770517"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::release" ref="09575d1a2dfeb8cd896c27cdd3770517" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set to null. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d95b7a39a08b7ab256dfff2ca37cdb75"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::operator *" ref="d95b7a39a08b7ab256dfff2ca37cdb75" args="() const " -->
+const_reference&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#d95b7a39a08b7ab256dfff2ca37cdb75">operator *</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return reference to associated value in hash table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6fc0491f6420ffe38c48786e7b9ab042"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::operator-&gt;" ref="6fc0491f6420ffe38c48786e7b9ab042" args="() const " -->
+const_pointer&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#6fc0491f6420ffe38c48786e7b9ab042">operator-&gt;</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return pointer to associated value in hash table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6eedb35a3ca397dd289ed5ca6fb4d95d"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::const_accessor" ref="6eedb35a3ca397dd289ed5ca6fb4d95d" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#6eedb35a3ca397dd289ed5ca6fb4d95d">const_accessor</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create empty result. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e002771760f510e06c03e0a198286172"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::~const_accessor" ref="e002771760f510e06c03e0a198286172" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html#e002771760f510e06c03e0a198286172">~const_accessor</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy result after releasing the underlying reference. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d062d8ecb243a6ec62fa30bca52a1bcf"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;" ref="d062d8ecb243a6ec62fa30bca52a1bcf" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ddd77aff56c12366acc02d0f1588a706"></a><!-- doxytag: member="tbb::concurrent_hash_map::const_accessor::accessor" ref="ddd77aff56c12366acc02d0f1588a706" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>accessor</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename Key, typename T, typename HashCompare, typename Allocator&gt;<br>
+ class tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</h3>
+
+Combines data access, locking, and garbage collection. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00272.html">concurrent_hash_map.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00134.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00134.html
new file mode 100644 (file)
index 0000000..a5017c8
--- /dev/null
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::strict_ppl::concurrent_queue&lt; T, A &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00232.html">strict_ppl</a>::<a class="el" href="a00134.html">concurrent_queue</a></div>
+<h1>tbb::strict_ppl::concurrent_queue&lt; T, A &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00234.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::strict_ppl::concurrent_queue" -->A high-performance thread-safe non-blocking concurrent queue.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00281.html">concurrent_queue.h</a>&gt;</code>
+<p>
+<a href="a00018.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="682c3978d5cb0620000994f11c44a476"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::value_type" ref="682c3978d5cb0620000994f11c44a476" args="" -->
+typedef T&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#682c3978d5cb0620000994f11c44a476">value_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Element type in the queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8d725c50a9834bb7af5b67c0aff92b8"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::reference" ref="a8d725c50a9834bb7af5b67c0aff92b8" args="" -->
+typedef T &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reference type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4d48e7ff93f81636bca2c74f7da34750"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::const_reference" ref="4d48e7ff93f81636bca2c74f7da34750" args="" -->
+typedef const T &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Const reference type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8fc30e93f8342a1960357f71e4fe8a2b"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::size_type" ref="8fc30e93f8342a1960357f71e4fe8a2b" args="" -->
+typedef size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Integral type for representing size of the queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="068576d16c7e4e05d52f9db7a45b5b65"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::difference_type" ref="068576d16c7e4e05d52f9db7a45b5b65" args="" -->
+typedef ptrdiff_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Difference type for iterator. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5a3956341728eaa558d8827063718cac"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::allocator_type" ref="5a3956341728eaa558d8827063718cac" args="" -->
+typedef A&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Allocator type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9736ac047d6da3363895c7e5b121d0c4"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::iterator" ref="9736ac047d6da3363895c7e5b121d0c4" args="" -->
+typedef internal::concurrent_queue_iterator&lt;<br>
+ <a class="el" href="a00134.html">concurrent_queue</a>, T &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9cd76d19af8c78be1bafc6ca0123ac0d"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::const_iterator" ref="9cd76d19af8c78be1bafc6ca0123ac0d" args="" -->
+typedef internal::concurrent_queue_iterator&lt;<br>
+ <a class="el" href="a00134.html">concurrent_queue</a>, const T &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7c48a05a94a1f4f98fdfadfbef98ecf6"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::concurrent_queue" ref="7c48a05a94a1f4f98fdfadfbef98ecf6" args="(const allocator_type &amp;a=allocator_type())" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a> (const <a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &amp;a=<a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct empty queue. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="25209656c84f2f9b030e2f9162713341"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::concurrent_queue" ref="25209656c84f2f9b030e2f9162713341" args="(InputIterator begin, InputIterator end, const allocator_type &amp;a=allocator_type())" -->
+template&lt;typename InputIterator&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00134.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &amp;a=<a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">[begin,end) constructor <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8a6b98ea11a867db8ac868f0113ca429"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::concurrent_queue" ref="8a6b98ea11a867db8ac868f0113ca429" args="(const concurrent_queue &amp;src, const allocator_type &amp;a=allocator_type())" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a> (const <a class="el" href="a00134.html">concurrent_queue</a> &amp;src, const <a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &amp;a=<a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="830b33753d6b149c366344e29b2edd8c"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::~concurrent_queue" ref="830b33753d6b149c366344e29b2edd8c" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="73c47563ffcc4c2f6452f25a04ebe2e2"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::push" ref="73c47563ffcc4c2f6452f25a04ebe2e2" args="(const T &amp;source)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a> (const T &amp;source)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enqueue an item at tail of queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a> (T &amp;result)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#ae31ca0db34ef96ef1e74aa0d28c95f8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="eaa35a5274606779802e9a669a706260"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_size" ref="eaa35a5274606779802e9a669a706260" args="() const " -->
+<a class="el" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#eaa35a5274606779802e9a669a706260">unsafe_size</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the number of items in the queue; thread unsafe. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f3f6fce0cfa2d581d6f3b47e0613ad64"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::empty" ref="f3f6fce0cfa2d581d6f3b47e0613ad64" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Equivalent to size()==0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c32e8e84c0524155133b4aae32d2a827"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::clear" ref="c32e8e84c0524155133b4aae32d2a827" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#c32e8e84c0524155133b4aae32d2a827">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear the queue. not thread-safe. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f034f70caef445fe8abc9113ec926a8d"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::get_allocator" ref="f034f70caef445fe8abc9113ec926a8d" args="() const " -->
+<a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return allocator object. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6297f48808dd7c14e6c2fe81559ca190"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_begin" ref="6297f48808dd7c14e6c2fe81559ca190" args="()" -->
+iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1569f70e70521fe71944a5b0138c6ef5"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_end" ref="1569f70e70521fe71944a5b0138c6ef5" args="()" -->
+iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e3e6746f7b6ecfbc16f781665ac51112"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_begin" ref="e3e6746f7b6ecfbc16f781665ac51112" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>unsafe_begin</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="83bf90849c08f44d25dd7a3b207a8956"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::unsafe_end" ref="83bf90849c08f44d25dd7a3b207a8956" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>unsafe_end</b> () const </td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05bffad9626d51abbd4bb82ae2a1cceb"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::internal::concurrent_queue_iterator" ref="05bffad9626d51abbd4bb82ae2a1cceb" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename T, typename A = cache_aligned_allocator&lt;T&gt;&gt;<br>
+ class tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</h3>
+
+A high-performance thread-safe non-blocking concurrent queue. 
+<p>
+Multiple threads may each push and pop concurrently. Assignment construction is not allowed. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="ae31ca0db34ef96ef1e74aa0d28c95f8"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::try_pop" ref="ae31ca0db34ef96ef1e74aa0d28c95f8" args="(T &amp;result)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, typename A = cache_aligned_allocator&lt;T&gt;&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue</a>&lt; T, A &gt;::try_pop           </td>
+          <td>(</td>
+          <td class="paramtype">T &amp;&nbsp;</td>
+          <td class="paramname"> <em>result</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Attempt to dequeue an item from head of queue. 
+<p>
+Does not wait for item to become available. Returns true if successful; false otherwise. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00281.html">concurrent_queue.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00135.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00135.html
new file mode 100644 (file)
index 0000000..9f05c13
--- /dev/null
@@ -0,0 +1,151 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::deprecated::concurrent_queue&lt; T, A &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<b>deprecated</b>::<a class="el" href="a00135.html">concurrent_queue</a></div>
+<h1>tbb::deprecated::concurrent_queue&lt; T, A &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00234.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::deprecated::concurrent_queue" --><!-- doxytag: inherits="tbb::concurrent_bounded_queue" -->A high-performance thread-safe blocking concurrent bounded queue.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00281.html">concurrent_queue.h</a>&gt;</code>
+<p>
+Inherits <a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;&lt; T, A &gt;</a>.
+<p>
+Inheritance diagram for tbb::deprecated::concurrent_queue&lt; T, A &gt;:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00021.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8861a9cdf232a20b5f2569754a281871"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::iterator" ref="8861a9cdf232a20b5f2569754a281871" args="" -->
+typedef <a class="el" href="a00129.html">concurrent_bounded_queue</a>&lt;<br>
+ T, A &gt;::iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7117842ce3ed7c5147d3c886922e64d0"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::const_iterator" ref="7117842ce3ed7c5147d3c886922e64d0" args="" -->
+typedef <a class="el" href="a00129.html">concurrent_bounded_queue</a>&lt;<br>
+ T, A &gt;::const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="aaf19bd7337b72f3131ece60f7315ef7"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::concurrent_queue" ref="aaf19bd7337b72f3131ece60f7315ef7" args="(const A &amp;a=A())" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a> (const A &amp;a=A())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct empty queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fc092b9082f233482f3513fc3bb670f7"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::concurrent_queue" ref="fc092b9082f233482f3513fc3bb670f7" args="(const concurrent_queue &amp;src, const A &amp;a=A())" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a> (const <a class="el" href="a00135.html">concurrent_queue</a> &amp;src, const A &amp;a=A())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="383187b910f8c3ca27a39c1638566f15"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::concurrent_queue" ref="383187b910f8c3ca27a39c1638566f15" args="(InputIterator begin, InputIterator end, const A &amp;a=A())" -->
+template&lt;typename InputIterator&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00135.html#383187b910f8c3ca27a39c1638566f15">concurrent_queue</a> (InputIterator begin, InputIterator end, const A &amp;a=A())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">[begin,end) constructor <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a> (const T &amp;source)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enqueue an item at tail of queue if queue is not already full.  <a href="#7c45561bafe71107d09b2bc1b8f4e681"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a> (T &amp;destination)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Attempt to dequeue an item from head of queue.  <a href="#48da3536245318af6cb5fd58bac78039"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ed7202cd273ae36463e6ac57e9472670"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::begin" ref="ed7202cd273ae36463e6ac57e9472670" args="()" -->
+iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="35fbb0d7e135545eb1daec2b4ae894cd"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::end" ref="35fbb0d7e135545eb1daec2b4ae894cd" args="()" -->
+iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="62f31fe653e1158e64ddb0e163d0335c"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::begin" ref="62f31fe653e1158e64ddb0e163d0335c" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3d42ddc4a6fe42350750a930302863d1"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::end" ref="3d42ddc4a6fe42350750a930302863d1" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05bffad9626d51abbd4bb82ae2a1cceb"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::internal::concurrent_queue_iterator" ref="05bffad9626d51abbd4bb82ae2a1cceb" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt;<br>
+ class tbb::deprecated::concurrent_queue&lt; T, A &gt;</h3>
+
+A high-performance thread-safe blocking concurrent bounded queue. 
+<p>
+This is the pre-PPL TBB concurrent queue which support boundedness and blocking semantics. Note that method names agree with the PPL-style concurrent queue. Multiple threads may each push and pop concurrently. Assignment construction is not allowed. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="48da3536245318af6cb5fd58bac78039"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::pop_if_present" ref="48da3536245318af6cb5fd58bac78039" args="(T &amp;destination)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue</a>&lt; T, A &gt;::pop_if_present           </td>
+          <td>(</td>
+          <td class="paramtype">T &amp;&nbsp;</td>
+          <td class="paramname"> <em>destination</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Attempt to dequeue an item from head of queue. 
+<p>
+Does not wait for item to become available. Returns true if successful; false otherwise. <dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000001">Deprecated:</a></b></dt><dd>Use <a class="el" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">try_pop()</a> </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="7c45561bafe71107d09b2bc1b8f4e681"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::push_if_not_full" ref="7c45561bafe71107d09b2bc1b8f4e681" args="(const T &amp;source)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A = cache_aligned_allocator&lt;T&gt;&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00135.html">tbb::deprecated::concurrent_queue</a>&lt; T, A &gt;::push_if_not_full           </td>
+          <td>(</td>
+          <td class="paramtype">const T &amp;&nbsp;</td>
+          <td class="paramname"> <em>source</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Enqueue an item at tail of queue if queue is not already full. 
+<p>
+Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00281.html">concurrent_queue.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00136.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00136.html
new file mode 100644 (file)
index 0000000..5758770
--- /dev/null
@@ -0,0 +1,596 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::concurrent_vector&lt; T, A &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00136.html">concurrent_vector</a></div>
+<h1>tbb::concurrent_vector&lt; T, A &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00234.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::concurrent_vector" -->Concurrent vector container.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00282.html">concurrent_vector.h</a>&gt;</code>
+<p>
+<a href="a00022.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bc85684238d4bb5e422cb8ea0bdc438f"></a><!-- doxytag: member="tbb::concurrent_vector::size_type" ref="bc85684238d4bb5e422cb8ea0bdc438f" args="" -->
+typedef internal::concurrent_vector_base_v3::size_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ac7083635ab59834e9afc15e6c168df5"></a><!-- doxytag: member="tbb::concurrent_vector::allocator_type" ref="ac7083635ab59834e9afc15e6c168df5" args="" -->
+typedef internal::allocator_base&lt;<br>
+ T, A &gt;::allocator_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4543d7d45b2e461d3f8ef416974ec1f1"></a><!-- doxytag: member="tbb::concurrent_vector::value_type" ref="4543d7d45b2e461d3f8ef416974ec1f1" args="" -->
+typedef T&nbsp;</td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e655e67dd14ed6d0cbfe7981d5fa350e"></a><!-- doxytag: member="tbb::concurrent_vector::difference_type" ref="e655e67dd14ed6d0cbfe7981d5fa350e" args="" -->
+typedef ptrdiff_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8c29033785d76e240ea96ae40610275d"></a><!-- doxytag: member="tbb::concurrent_vector::reference" ref="8c29033785d76e240ea96ae40610275d" args="" -->
+typedef T &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b0b2a6241ab3fa9ab4f4074893fecd47"></a><!-- doxytag: member="tbb::concurrent_vector::const_reference" ref="b0b2a6241ab3fa9ab4f4074893fecd47" args="" -->
+typedef const T &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="74319c908a32d5dcdc6a080f9c2b8803"></a><!-- doxytag: member="tbb::concurrent_vector::pointer" ref="74319c908a32d5dcdc6a080f9c2b8803" args="" -->
+typedef T *&nbsp;</td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dd80729019220cdb80872ea6b905ffb1"></a><!-- doxytag: member="tbb::concurrent_vector::const_pointer" ref="dd80729019220cdb80872ea6b905ffb1" args="" -->
+typedef const T *&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a049674e7f386de3ea09ff2ed6d6bbbe"></a><!-- doxytag: member="tbb::concurrent_vector::iterator" ref="a049674e7f386de3ea09ff2ed6d6bbbe" args="" -->
+typedef internal::vector_iterator&lt;<br>
+ <a class="el" href="a00136.html">concurrent_vector</a>, T &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b51a1baa7da67e283806c0d4f2fe9c69"></a><!-- doxytag: member="tbb::concurrent_vector::const_iterator" ref="b51a1baa7da67e283806c0d4f2fe9c69" args="" -->
+typedef internal::vector_iterator&lt;<br>
+ <a class="el" href="a00136.html">concurrent_vector</a>, const <br>
+T &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c7e4d252bef7af22286041c39c62abe"></a><!-- doxytag: member="tbb::concurrent_vector::reverse_iterator" ref="2c7e4d252bef7af22286041c39c62abe" args="" -->
+typedef std::reverse_iterator&lt;<br>
+ iterator &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>reverse_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c59c3f9412b666a31a9052b789fb58bc"></a><!-- doxytag: member="tbb::concurrent_vector::const_reverse_iterator" ref="c59c3f9412b666a31a9052b789fb58bc" args="" -->
+typedef std::reverse_iterator&lt;<br>
+ const_iterator &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_reverse_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0c3901b092e9e8185bdc3cae5913e625"></a><!-- doxytag: member="tbb::concurrent_vector::reverse_iterator" ref="0c3901b092e9e8185bdc3cae5913e625" args="" -->
+typedef std::reverse_iterator&lt;<br>
+ iterator, T, T &amp;, T * &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>reverse_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="426145d7bd5913bc08e701c14b221046"></a><!-- doxytag: member="tbb::concurrent_vector::const_reverse_iterator" ref="426145d7bd5913bc08e701c14b221046" args="" -->
+typedef std::reverse_iterator&lt;<br>
+ const_iterator, T, const <br>
+T &amp;, const T * &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_reverse_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="61fd90288dba6f8808d6dafe9a249ec5"></a><!-- doxytag: member="tbb::concurrent_vector::range_type" ref="61fd90288dba6f8808d6dafe9a249ec5" args="" -->
+typedef generic_range_type&lt;<br>
+ iterator &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d6ddf0312a820a98efd9a5f394cb9dbd"></a><!-- doxytag: member="tbb::concurrent_vector::const_range_type" ref="d6ddf0312a820a98efd9a5f394cb9dbd" args="" -->
+typedef generic_range_type&lt;<br>
+ const_iterator &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c8ca9cabfcd30ad5943324c853664b5"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="2c8ca9cabfcd30ad5943324c853664b5" args="(const allocator_type &amp;a=allocator_type())" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#2c8ca9cabfcd30ad5943324c853664b5">concurrent_vector</a> (const allocator_type &amp;a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct empty vector. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dd8a200b99a8088435a37934b58fe335"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="dd8a200b99a8088435a37934b58fe335" args="(const concurrent_vector &amp;vector, const allocator_type &amp;a=allocator_type())" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a> (const <a class="el" href="a00136.html">concurrent_vector</a> &amp;vector, const allocator_type &amp;a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copying constructor. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="64432f13f7b29bfe4acfb5568f34f3a8"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="64432f13f7b29bfe4acfb5568f34f3a8" args="(const concurrent_vector&lt; T, M &gt; &amp;vector, const allocator_type &amp;a=allocator_type())" -->
+template&lt;class M&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00136.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a> (const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, M &gt; &amp;vector, const allocator_type &amp;a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copying constructor for vector with different allocator type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2a2e261dfe1cab3f73f7b1a94137cfca"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="2a2e261dfe1cab3f73f7b1a94137cfca" args="(size_type n)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#2a2e261dfe1cab3f73f7b1a94137cfca">concurrent_vector</a> (size_type n)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construction with initial size specified by argument n. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3883a8a908b44e249a57f454de3f55d8"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="3883a8a908b44e249a57f454de3f55d8" args="(size_type n, const_reference t, const allocator_type &amp;a=allocator_type())" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#3883a8a908b44e249a57f454de3f55d8">concurrent_vector</a> (size_type n, const_reference t, const allocator_type &amp;a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construction with initial size specified by argument n, initialization by copying of t, and given allocator instance. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4450de83c5862ea4bcd9443fd7e67419"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="4450de83c5862ea4bcd9443fd7e67419" args="(I first, I last, const allocator_type &amp;a=allocator_type())" -->
+template&lt;class I&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00136.html#4450de83c5862ea4bcd9443fd7e67419">concurrent_vector</a> (I first, I last, const allocator_type &amp;a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construction with copying iteration range and given allocator instance. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="691f0f3cda3e489c37a657016e375eaf"></a><!-- doxytag: member="tbb::concurrent_vector::operator=" ref="691f0f3cda3e489c37a657016e375eaf" args="(const concurrent_vector &amp;vector)" -->
+<a class="el" href="a00136.html">concurrent_vector</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#691f0f3cda3e489c37a657016e375eaf">operator=</a> (const <a class="el" href="a00136.html">concurrent_vector</a> &amp;vector)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Assignment. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="19f4ab88a01b0fd056af3bba463e7bd6"></a><!-- doxytag: member="tbb::concurrent_vector::operator=" ref="19f4ab88a01b0fd056af3bba463e7bd6" args="(const concurrent_vector&lt; T, M &gt; &amp;vector)" -->
+template&lt;class M&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00136.html">concurrent_vector</a> &amp;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00136.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a> (const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, M &gt; &amp;vector)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Assignment for vector with different allocator type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#30484e3959892fd5392fa93c873c31f0">grow_by</a> (size_type delta)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Grow by "delta" elements.  <a href="#30484e3959892fd5392fa93c873c31f0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#c8177b1865270ea68aa1ab9148e5e35e">grow_by</a> (size_type delta)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#38274ab3f772ecba600c7daca7690102">grow_by</a> (size_type delta, const_reference t)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Grow by "delta" elements using copying constuctor.  <a href="#38274ab3f772ecba600c7daca7690102"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#473a59a4c9308b93411b898b3110d26c">grow_by</a> (size_type delta, const_reference t)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least</a> (size_type n)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Append minimal sequence of elements such that <a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size()</a>&gt;=n.  <a href="#47fe588214dd5fa06ab6e8ab78d83874"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#a7e3b67c8ccab16d0aecc80899ae799d">grow_to_at_least</a> (size_type n)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a> (const_reference item) iterator push_back(const _reference item)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Push item.  <a href="#e94e038f915c0268fdf2d3d7f87d81b8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">reference&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a> (size_type index)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get reference to element at given index.  <a href="#4c52f2950bb1832886bd4458eb09d7eb"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c6fade5c732cc95274d1d8277ea619d1"></a><!-- doxytag: member="tbb::concurrent_vector::operator[]" ref="c6fade5c732cc95274d1d8277ea619d1" args="(size_type index) const " -->
+const_reference&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#c6fade5c732cc95274d1d8277ea619d1">operator[]</a> (size_type index) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get const reference to element at given index. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0c073ca43e787c7cbf7b0e26d2221748"></a><!-- doxytag: member="tbb::concurrent_vector::at" ref="0c073ca43e787c7cbf7b0e26d2221748" args="(size_type index)" -->
+reference&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#0c073ca43e787c7cbf7b0e26d2221748">at</a> (size_type index)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get reference to element at given index. Throws exceptions on errors. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="23e14a38af748edff96a7adc3a0f1c58"></a><!-- doxytag: member="tbb::concurrent_vector::at" ref="23e14a38af748edff96a7adc3a0f1c58" args="(size_type index) const " -->
+const_reference&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#23e14a38af748edff96a7adc3a0f1c58">at</a> (size_type index) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get const reference to element at given index. Throws exceptions on errors. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4c6ffff3bf08b92939aa2fc516edfba"></a><!-- doxytag: member="tbb::concurrent_vector::range" ref="a4c6ffff3bf08b92939aa2fc516edfba" args="(size_t grainsize=1)" -->
+range_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#a4c6ffff3bf08b92939aa2fc516edfba">range</a> (size_t grainsize=1)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get range for iterating with parallel algorithms. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3d09ccfb581b879ae64203741035e193"></a><!-- doxytag: member="tbb::concurrent_vector::range" ref="3d09ccfb581b879ae64203741035e193" args="(size_t grainsize=1) const " -->
+const_range_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#3d09ccfb581b879ae64203741035e193">range</a> (size_t grainsize=1) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get const range for iterating with parallel algorithms. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="715fe313c4a9c22731cc404dd80c9ec9"></a><!-- doxytag: member="tbb::concurrent_vector::size" ref="715fe313c4a9c22731cc404dd80c9ec9" args="() const " -->
+size_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return size of vector. It may include elements under construction. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c6426cb93cf20d3af40f3c90f1f0481a"></a><!-- doxytag: member="tbb::concurrent_vector::empty" ref="c6426cb93cf20d3af40f3c90f1f0481a" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return true if vector is not empty or has elements under construction at least. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ed6b9ae7217af5103d974045b6f5cd5"></a><!-- doxytag: member="tbb::concurrent_vector::capacity" ref="3ed6b9ae7217af5103d974045b6f5cd5" args="() const " -->
+size_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#3ed6b9ae7217af5103d974045b6f5cd5">capacity</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Maximum size to which array can grow without allocating more memory. Concurrent allocations are not included in the value. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#5a0ce05026994b010018f72cfdeb72c1">reserve</a> (size_type n)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Allocate enough space to grow to size n without having to allocate more memory later.  <a href="#5a0ce05026994b010018f72cfdeb72c1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8dfb0cb0eef96d440b4dcf801807a718"></a><!-- doxytag: member="tbb::concurrent_vector::resize" ref="8dfb0cb0eef96d440b4dcf801807a718" args="(size_type n)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#8dfb0cb0eef96d440b4dcf801807a718">resize</a> (size_type n)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Resize the vector. Not thread-safe. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="98ce6b2c6d2622f0c030b46dfac3880c"></a><!-- doxytag: member="tbb::concurrent_vector::resize" ref="98ce6b2c6d2622f0c030b46dfac3880c" args="(size_type n, const_reference t)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#98ce6b2c6d2622f0c030b46dfac3880c">resize</a> (size_type n, const_reference t)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Resize the vector, copy t for new elements. Not thread-safe. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1693d1da41b1a8235871be9c6633be35"></a><!-- doxytag: member="tbb::concurrent_vector::compact" ref="1693d1da41b1a8235871be9c6633be35" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#1693d1da41b1a8235871be9c6633be35">compact</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An alias for <a class="el" href="a00136.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit()</a>. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="03c6f4cf66532bf4cc907ee738a9a186"></a><!-- doxytag: member="tbb::concurrent_vector::shrink_to_fit" ref="03c6f4cf66532bf4cc907ee738a9a186" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Optimize memory usage and fragmentation. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c248a017f0576df3e7cd99627836fd6"></a><!-- doxytag: member="tbb::concurrent_vector::max_size" ref="2c248a017f0576df3e7cd99627836fd6" args="() const " -->
+size_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#2c248a017f0576df3e7cd99627836fd6">max_size</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Upper bound on argument to reserve. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="730b23a251ecb6d37f692fb22f38e029"></a><!-- doxytag: member="tbb::concurrent_vector::begin" ref="730b23a251ecb6d37f692fb22f38e029" args="()" -->
+iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">start iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c0b51160e5a764982ec97a455f94f2c6"></a><!-- doxytag: member="tbb::concurrent_vector::end" ref="c0b51160e5a764982ec97a455f94f2c6" args="()" -->
+iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">end</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">end iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="78a06182276ff758788d4c0623ae0d71"></a><!-- doxytag: member="tbb::concurrent_vector::begin" ref="78a06182276ff758788d4c0623ae0d71" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#78a06182276ff758788d4c0623ae0d71">begin</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">start const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1e6aa764ce5a1cbd24526f68bc0a2f6b"></a><!-- doxytag: member="tbb::concurrent_vector::end" ref="1e6aa764ce5a1cbd24526f68bc0a2f6b" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">end</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">end const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f88fcf1c920693c39bd9709db33c199f"></a><!-- doxytag: member="tbb::concurrent_vector::cbegin" ref="f88fcf1c920693c39bd9709db33c199f" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#f88fcf1c920693c39bd9709db33c199f">cbegin</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">start const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0c15a5d0f1cf75d687dabba07da1d46b"></a><!-- doxytag: member="tbb::concurrent_vector::cend" ref="0c15a5d0f1cf75d687dabba07da1d46b" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#0c15a5d0f1cf75d687dabba07da1d46b">cend</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">end const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5e220926d09236d98f04fe0721e5f9a1"></a><!-- doxytag: member="tbb::concurrent_vector::rbegin" ref="5e220926d09236d98f04fe0721e5f9a1" args="()" -->
+reverse_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#5e220926d09236d98f04fe0721e5f9a1">rbegin</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">reverse start iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="290119a4eb43cd6a9e98fa17016ba3c2"></a><!-- doxytag: member="tbb::concurrent_vector::rend" ref="290119a4eb43cd6a9e98fa17016ba3c2" args="()" -->
+reverse_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#290119a4eb43cd6a9e98fa17016ba3c2">rend</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">reverse end iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9f9c103e18d5f212703805354074ad44"></a><!-- doxytag: member="tbb::concurrent_vector::rbegin" ref="9f9c103e18d5f212703805354074ad44" args="() const " -->
+const_reverse_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#9f9c103e18d5f212703805354074ad44">rbegin</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">reverse start const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d438b9b32ea3a8ffb703015b6dce055b"></a><!-- doxytag: member="tbb::concurrent_vector::rend" ref="d438b9b32ea3a8ffb703015b6dce055b" args="() const " -->
+const_reverse_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#d438b9b32ea3a8ffb703015b6dce055b">rend</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">reverse end const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="db78a1d28c9c966050e8a2926d834a33"></a><!-- doxytag: member="tbb::concurrent_vector::crbegin" ref="db78a1d28c9c966050e8a2926d834a33" args="() const " -->
+const_reverse_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#db78a1d28c9c966050e8a2926d834a33">crbegin</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">reverse start const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fff9cece89438587997ebedf93c5e962"></a><!-- doxytag: member="tbb::concurrent_vector::crend" ref="fff9cece89438587997ebedf93c5e962" args="() const " -->
+const_reverse_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#fff9cece89438587997ebedf93c5e962">crend</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">reverse end const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="15181759c0bfa2ddce5d10c7550e0002"></a><!-- doxytag: member="tbb::concurrent_vector::front" ref="15181759c0bfa2ddce5d10c7550e0002" args="()" -->
+reference&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#15181759c0bfa2ddce5d10c7550e0002">front</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">the first item <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="502615a858eb9fa0390ee59169065e90"></a><!-- doxytag: member="tbb::concurrent_vector::front" ref="502615a858eb9fa0390ee59169065e90" args="() const " -->
+const_reference&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#502615a858eb9fa0390ee59169065e90">front</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">the first item const <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="41ce48d6015a1a2812d41cf620ec3476"></a><!-- doxytag: member="tbb::concurrent_vector::back" ref="41ce48d6015a1a2812d41cf620ec3476" args="()" -->
+reference&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#41ce48d6015a1a2812d41cf620ec3476">back</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">the last item <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bd518e204107d07fd08d0ec5bdfd383d"></a><!-- doxytag: member="tbb::concurrent_vector::back" ref="bd518e204107d07fd08d0ec5bdfd383d" args="() const " -->
+const_reference&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#bd518e204107d07fd08d0ec5bdfd383d">back</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">the last item const <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2fdba8e90de6a4d2300222236d46758e"></a><!-- doxytag: member="tbb::concurrent_vector::get_allocator" ref="2fdba8e90de6a4d2300222236d46758e" args="() const " -->
+allocator_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#2fdba8e90de6a4d2300222236d46758e">get_allocator</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">return allocator object <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="423e5aa15e0e3309ad86d026fd85f6f6"></a><!-- doxytag: member="tbb::concurrent_vector::assign" ref="423e5aa15e0e3309ad86d026fd85f6f6" args="(size_type n, const_reference t)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#423e5aa15e0e3309ad86d026fd85f6f6">assign</a> (size_type n, const_reference t)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">assign n items by copying t item <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="93a06b3112cb804f42f40efb5e7387b4"></a><!-- doxytag: member="tbb::concurrent_vector::assign" ref="93a06b3112cb804f42f40efb5e7387b4" args="(I first, I last)" -->
+template&lt;class I&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00136.html#93a06b3112cb804f42f40efb5e7387b4">assign</a> (I first, I last)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">assign range [first, last) <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="96c9c4bd968ed3edb8dd276854d2dae0"></a><!-- doxytag: member="tbb::concurrent_vector::swap" ref="96c9c4bd968ed3edb8dd276854d2dae0" args="(concurrent_vector &amp;vector)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a> (<a class="el" href="a00136.html">concurrent_vector</a> &amp;vector)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">swap two instances <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#26f937a359a66b6aae904c3cd9a3c444">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear container while keeping memory allocated.  <a href="#26f937a359a66b6aae904c3cd9a3c444"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="da2444b28bb840d38f60d0030333a5fc"></a><!-- doxytag: member="tbb::concurrent_vector::~concurrent_vector" ref="da2444b28bb840d38f60d0030333a5fc" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html#da2444b28bb840d38f60d0030333a5fc">~concurrent_vector</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear and destroy vector. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bb5ae659871478f1f5c68039e1273e12"></a><!-- doxytag: member="tbb::concurrent_vector::internal_vector_base" ref="bb5ae659871478f1f5c68039e1273e12" args="() const " -->
+const internal::concurrent_vector_base_v3 &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal_vector_base</b> () const </td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="30086a58bff79a91103723be20916b96"></a><!-- doxytag: member="tbb::concurrent_vector::internal::vector_iterator" ref="30086a58bff79a91103723be20916b96" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::vector_iterator</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><b>generic_range_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><b>internal_loop_guide</b></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Exception-aware helper class for filling a segment by exception-danger operators of user class. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename T, class A&gt;<br>
+ class tbb::concurrent_vector&lt; T, A &gt;</h3>
+
+Concurrent vector container. 
+<p>
+<a class="el" href="a00136.html">concurrent_vector</a> is a container having the following main properties:<ul>
+<li>It provides random indexed access to its elements. The index of the first element is 0.</li><li>It ensures safe concurrent growing its size (different threads can safely append new elements).</li><li>Adding new elements does not invalidate existing iterators and does not change indices of existing items.</li></ul>
+<p>
+<dl compact><dt><b>Compatibility</b></dt><dd>The class meets all Container Requirements and Reversible Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1). But it doesn't meet Sequence Requirements due to absence of insert() and erase() methods.</dd></dl>
+<dl compact><dt><b>Exception Safety</b></dt><dd>Methods working with memory allocation and/or new elements construction can throw an exception if allocator fails to allocate memory or element's default constructor throws one. Concurrent vector's element of type T must conform to the following requirements:<ul>
+<li>Throwing an exception is forbidden for destructor of T.</li><li>Default constructor of T must not throw an exception OR its non-virtual destructor must safely work when its object memory is zero-initialized.</li></ul>
+Otherwise, the program's behavior is undefined. </dd></dl>
+<dl compact><dt><b></b></dt><dd>If an exception happens inside growth or assignment operation, an instance of the vector becomes invalid unless it is stated otherwise in the method documentation. Invalid state means:<ul>
+<li>There are no guaranties that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.</li><li>An invalid vector instance cannot be repaired; it is unable to grow anymore.</li><li>Size and capacity reported by the vector are incorrect, and calculated as if the failed operation were successful.</li><li>Attempt to access not allocated elements using operator[] or iterators results in access violation or segmentation fault exception, and in case of using <a class="el" href="a00136.html#0c073ca43e787c7cbf7b0e26d2221748">at()</a> method a C++ exception is thrown.</li></ul>
+If a concurrent grow operation successfully completes, all the elements it has added to the vector will remain valid and accessible even if one of subsequent grow operations fails.</dd></dl>
+<dl compact><dt><b>Fragmentation</b></dt><dd>Unlike an STL vector, a <a class="el" href="a00136.html">concurrent_vector</a> does not move existing elements if it needs to allocate more memory. The container is divided into a series of contiguous arrays of elements. The first reservation, growth, or assignment operation determines the size of the first array. Using small number of elements as initial size incurs fragmentation that may increase element access time. Internal layout can be optimized by method <a class="el" href="a00136.html#1693d1da41b1a8235871be9c6633be35">compact()</a> that merges several smaller arrays into one solid.</dd></dl>
+<dl compact><dt><b>Changes since TBB 2.1</b></dt><dd><ul>
+<li>Fixed guarantees of <a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">concurrent_vector::size()</a> and <a class="el" href="a00136.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least()</a> methods to assure elements are allocated.</li><li>Methods <a class="el" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">end()</a>/rbegin()/back() are partly thread-safe since they use <a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size()</a> to get the end of vector</li><li>Added <a class="el" href="a00136.html#8dfb0cb0eef96d440b4dcf801807a718">resize()</a> methods (not thread-safe)</li><li>Added cbegin/cend/crbegin/crend methods</li><li>Changed return type of methods grow* and push_back to iterator</li></ul>
+</dd></dl>
+<dl compact><dt><b>Changes since TBB 2.0</b></dt><dd><ul>
+<li>Implemented exception-safety guaranties</li><li>Added template argument for allocator</li><li>Added allocator argument in constructors</li><li>Faster index calculation</li><li>First growth call specifies a number of segments to be merged in the first allocation.</li><li>Fixed memory blow up for swarm of vector's instances of small size</li><li>Added <a class="el" href="a00136.html#38274ab3f772ecba600c7daca7690102">grow_by(size_type n, const_reference t)</a> growth using copying constructor to init new items.</li><li>Added STL-like constructors.</li><li>Added operators ==, &lt; and derivatives</li><li>Added <a class="el" href="a00136.html#0c073ca43e787c7cbf7b0e26d2221748">at()</a> method, approved for using after an exception was thrown inside the vector</li><li>Added <a class="el" href="a00136.html#2fdba8e90de6a4d2300222236d46758e">get_allocator()</a> method.</li><li>Added <a class="el" href="a00136.html#423e5aa15e0e3309ad86d026fd85f6f6">assign()</a> methods</li><li>Added <a class="el" href="a00136.html#1693d1da41b1a8235871be9c6633be35">compact()</a> method to defragment first segments</li><li>Added <a class="el" href="a00136.html#96c9c4bd968ed3edb8dd276854d2dae0">swap()</a> method</li><li><a class="el" href="a00136.html#a4c6ffff3bf08b92939aa2fc516edfba">range()</a> defaults on grainsize = 1 supporting auto grainsize algorithms. </li></ul>
+</dd></dl>
+
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="26f937a359a66b6aae904c3cd9a3c444"></a><!-- doxytag: member="tbb::concurrent_vector::clear" ref="26f937a359a66b6aae904c3cd9a3c444" args="()" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00136.html">tbb::concurrent_vector</a>&lt; T, A &gt;::clear           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Clear container while keeping memory allocated. 
+<p>
+To free up the memory, use in conjunction with method <a class="el" href="a00136.html#1693d1da41b1a8235871be9c6633be35">compact()</a>. Not thread safe 
+</div>
+</div><p>
+<a class="anchor" name="473a59a4c9308b93411b898b3110d26c"></a><!-- doxytag: member="tbb::concurrent_vector::grow_by" ref="473a59a4c9308b93411b898b3110d26c" args="(size_type delta, const_reference t)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00136.html">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_by           </td>
+          <td>(</td>
+          <td class="paramtype">size_type&nbsp;</td>
+          <td class="paramname"> <em>delta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const_reference&nbsp;</td>
+          <td class="paramname"> <em>t</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Returns iterator pointing to the first new element. 
+</div>
+</div><p>
+<a class="anchor" name="38274ab3f772ecba600c7daca7690102"></a><!-- doxytag: member="tbb::concurrent_vector::grow_by" ref="38274ab3f772ecba600c7daca7690102" args="(size_type delta, const_reference t)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">size_type <a class="el" href="a00136.html">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_by           </td>
+          <td>(</td>
+          <td class="paramtype">size_type&nbsp;</td>
+          <td class="paramname"> <em>delta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const_reference&nbsp;</td>
+          <td class="paramname"> <em>t</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Grow by "delta" elements using copying constuctor. 
+<p>
+Returns old size. 
+</div>
+</div><p>
+<a class="anchor" name="c8177b1865270ea68aa1ab9148e5e35e"></a><!-- doxytag: member="tbb::concurrent_vector::grow_by" ref="c8177b1865270ea68aa1ab9148e5e35e" args="(size_type delta)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00136.html">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_by           </td>
+          <td>(</td>
+          <td class="paramtype">size_type&nbsp;</td>
+          <td class="paramname"> <em>delta</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Returns iterator pointing to the first new element. 
+</div>
+</div><p>
+<a class="anchor" name="30484e3959892fd5392fa93c873c31f0"></a><!-- doxytag: member="tbb::concurrent_vector::grow_by" ref="30484e3959892fd5392fa93c873c31f0" args="(size_type delta)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">size_type <a class="el" href="a00136.html">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_by           </td>
+          <td>(</td>
+          <td class="paramtype">size_type&nbsp;</td>
+          <td class="paramname"> <em>delta</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Grow by "delta" elements. 
+<p>
+Returns old size. 
+</div>
+</div><p>
+<a class="anchor" name="a7e3b67c8ccab16d0aecc80899ae799d"></a><!-- doxytag: member="tbb::concurrent_vector::grow_to_at_least" ref="a7e3b67c8ccab16d0aecc80899ae799d" args="(size_type n)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">iterator <a class="el" href="a00136.html">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_to_at_least           </td>
+          <td>(</td>
+          <td class="paramtype">size_type&nbsp;</td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The new elements are default constructed. Blocks until all elements in range [0..n) are allocated. May return while other elements are being constructed by other threads. Returns iterator that points to beginning of appended sequence. If no elements were appended, returns iterator pointing to nth element. 
+</div>
+</div><p>
+<a class="anchor" name="47fe588214dd5fa06ab6e8ab78d83874"></a><!-- doxytag: member="tbb::concurrent_vector::grow_to_at_least" ref="47fe588214dd5fa06ab6e8ab78d83874" args="(size_type n)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00136.html">tbb::concurrent_vector</a>&lt; T, A &gt;::grow_to_at_least           </td>
+          <td>(</td>
+          <td class="paramtype">size_type&nbsp;</td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Append minimal sequence of elements such that <a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size()</a>&gt;=n. 
+<p>
+The new elements are default constructed. Blocks until all elements in range [0..n) are allocated. May return while other elements are being constructed by other threads. 
+</div>
+</div><p>
+<a class="anchor" name="4c52f2950bb1832886bd4458eb09d7eb"></a><!-- doxytag: member="tbb::concurrent_vector::operator[]" ref="4c52f2950bb1832886bd4458eb09d7eb" args="(size_type index)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">reference <a class="el" href="a00136.html">tbb::concurrent_vector</a>&lt; T, A &gt;::operator[]           </td>
+          <td>(</td>
+          <td class="paramtype">size_type&nbsp;</td>
+          <td class="paramname"> <em>index</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get reference to element at given index. 
+<p>
+This method is thread-safe for concurrent reads, and also while growing the vector, as long as the calling thread has checked that index&lt;<a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size()</a>. 
+</div>
+</div><p>
+<a class="anchor" name="e94e038f915c0268fdf2d3d7f87d81b8"></a><!-- doxytag: member="tbb::concurrent_vector::push_back" ref="e94e038f915c0268fdf2d3d7f87d81b8" args="(const_reference item) iterator push_back(const _reference item)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">size_type <a class="el" href="a00136.html">tbb::concurrent_vector</a>&lt; T, A &gt;::push_back           </td>
+          <td>(</td>
+          <td class="paramtype">const_reference&nbsp;</td>
+          <td class="paramname"> <em>item</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"> const<code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Push item. 
+<p>
+Returns iterator pointing to the new element. 
+</div>
+</div><p>
+<a class="anchor" name="5a0ce05026994b010018f72cfdeb72c1"></a><!-- doxytag: member="tbb::concurrent_vector::reserve" ref="5a0ce05026994b010018f72cfdeb72c1" args="(size_type n)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T, class A&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00136.html">tbb::concurrent_vector</a>&lt; T, A &gt;::reserve           </td>
+          <td>(</td>
+          <td class="paramtype">size_type&nbsp;</td>
+          <td class="paramname"> <em>n</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Allocate enough space to grow to size n without having to allocate more memory later. 
+<p>
+Like most of the methods provided for STL compatibility, this method is *not* thread safe. The capacity afterwards may be bigger than the requested reservation. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00282.html">concurrent_vector.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00137.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00137.html
new file mode 100644 (file)
index 0000000..85a1150
--- /dev/null
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::empty_task Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00137.html">empty_task</a></div>
+<h1>tbb::empty_task Class Reference<br>
+<small>
+[<a class="el" href="a00238.html">Task Scheduling</a>]</small>
+</h1><!-- doxytag: class="tbb::empty_task" --><!-- doxytag: inherits="tbb::task" -->task that does nothing. Useful for synchronization.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00354.html">task.h</a>&gt;</code>
+<p>
+Inherits <a class="el" href="a00166.html">tbb::task</a>.
+<p>
+Inheritance diagram for tbb::empty_task:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00064.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+task that does nothing. Useful for synchronization. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00354.html">task.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00138.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00138.html
new file mode 100644 (file)
index 0000000..f6d60b7
--- /dev/null
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00138.html">enumerable_thread_specific</a></div>
+<h1>tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt; Class Template Reference</h1><!-- doxytag: class="tbb::enumerable_thread_specific" -->The thread local class template.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00291.html">enumerable_thread_specific.h</a>&gt;</code>
+<p>
+<a href="a00025.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="60047d25605a1ef993c49234e9ac5c2d"></a><!-- doxytag: member="tbb::enumerable_thread_specific::allocator_type" ref="60047d25605a1ef993c49234e9ac5c2d" args="" -->
+typedef Allocator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#60047d25605a1ef993c49234e9ac5c2d">allocator_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Basic types. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="14b5967a627853440608619a07c9281a"></a><!-- doxytag: member="tbb::enumerable_thread_specific::value_type" ref="14b5967a627853440608619a07c9281a" args="" -->
+typedef T&nbsp;</td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="06ff8c90338e3f76201e56ac2e8bd566"></a><!-- doxytag: member="tbb::enumerable_thread_specific::reference" ref="06ff8c90338e3f76201e56ac2e8bd566" args="" -->
+typedef T &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cc538a9b0919cba06e9807984a840710"></a><!-- doxytag: member="tbb::enumerable_thread_specific::const_reference" ref="cc538a9b0919cba06e9807984a840710" args="" -->
+typedef const T &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="de58e04a639ecadf5e021b27c430cd32"></a><!-- doxytag: member="tbb::enumerable_thread_specific::pointer" ref="de58e04a639ecadf5e021b27c430cd32" args="" -->
+typedef T *&nbsp;</td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ee05b7e9b137913fc2f946d7edb6325"></a><!-- doxytag: member="tbb::enumerable_thread_specific::const_pointer" ref="3ee05b7e9b137913fc2f946d7edb6325" args="" -->
+typedef const T *&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f7104b09f6dc1f8035ea978f56f9a090"></a><!-- doxytag: member="tbb::enumerable_thread_specific::size_type" ref="f7104b09f6dc1f8035ea978f56f9a090" args="" -->
+typedef internal_collection_type::size_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="631ed3389c35ba4b90b7d1be0e291d86"></a><!-- doxytag: member="tbb::enumerable_thread_specific::difference_type" ref="631ed3389c35ba4b90b7d1be0e291d86" args="" -->
+typedef internal_collection_type::difference_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="006bd5182f81d6d01cbb558c0b500a29"></a><!-- doxytag: member="tbb::enumerable_thread_specific::iterator" ref="006bd5182f81d6d01cbb558c0b500a29" args="" -->
+typedef internal::enumerable_thread_specific_iterator&lt;<br>
+ <a class="el" href="a00136.html">internal_collection_type</a>,<br>
+ value_type &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a59d5bae106a5e631fe164be9a261b72"></a><!-- doxytag: member="tbb::enumerable_thread_specific::const_iterator" ref="a59d5bae106a5e631fe164be9a261b72" args="" -->
+typedef internal::enumerable_thread_specific_iterator&lt;<br>
+ <a class="el" href="a00136.html">internal_collection_type</a>,<br>
+ const value_type &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8d695d7c22817587116f27089cd190d8"></a><!-- doxytag: member="tbb::enumerable_thread_specific::range_type" ref="8d695d7c22817587116f27089cd190d8" args="" -->
+typedef generic_range_type&lt;<br>
+ iterator &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="73dc6b3dd06c14942c641a5ae924e355"></a><!-- doxytag: member="tbb::enumerable_thread_specific::const_range_type" ref="73dc6b3dd06c14942c641a5ae924e355" args="" -->
+typedef generic_range_type&lt;<br>
+ const_iterator &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="632e351d5269ac609b08dba19282f3a3"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="632e351d5269ac609b08dba19282f3a3" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor, which leads to default construction of local copies. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="e5698930b84c098bb6d87175b8b50306"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="e5698930b84c098bb6d87175b8b50306" args="(Finit _finit)" -->
+template&lt;typename Finit&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00138.html#e5698930b84c098bb6d87175b8b50306">enumerable_thread_specific</a> (Finit _finit)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">construction with initializer method <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0466c43272d8458185e980fc2dc4abe2"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="0466c43272d8458185e980fc2dc4abe2" args="(const T &amp;_exemplar)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#0466c43272d8458185e980fc2dc4abe2">enumerable_thread_specific</a> (const T &amp;_exemplar)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constuction with exemplar, which leads to copy construction of local copies. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="41176526161d6fef1bdd19c2db7ded4d"></a><!-- doxytag: member="tbb::enumerable_thread_specific::~enumerable_thread_specific" ref="41176526161d6fef1bdd19c2db7ded4d" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#41176526161d6fef1bdd19c2db7ded4d">~enumerable_thread_specific</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ceb691814a0001241c43595d309cf615"></a><!-- doxytag: member="tbb::enumerable_thread_specific::local" ref="ceb691814a0001241c43595d309cf615" args="()" -->
+reference&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">returns reference to local, discarding exists <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9505351eace34ed7130257adcae91706"></a><!-- doxytag: member="tbb::enumerable_thread_specific::local" ref="9505351eace34ed7130257adcae91706" args="(bool &amp;exists)" -->
+reference&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#9505351eace34ed7130257adcae91706">local</a> (bool &amp;exists)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns reference to calling thread's local copy, creating one if necessary. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="302a4d6f55f852d5b7a6679e0e00316e"></a><!-- doxytag: member="tbb::enumerable_thread_specific::size" ref="302a4d6f55f852d5b7a6679e0e00316e" args="() const " -->
+size_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">size</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of local copies. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ad23345a722622199deaa4dfd243d9f8"></a><!-- doxytag: member="tbb::enumerable_thread_specific::empty" ref="ad23345a722622199deaa4dfd243d9f8" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#ad23345a722622199deaa4dfd243d9f8">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">true if there have been no local copies created <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="225f945c810397c6a54d5b8317dc5843"></a><!-- doxytag: member="tbb::enumerable_thread_specific::begin" ref="225f945c810397c6a54d5b8317dc5843" args="()" -->
+iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">begin iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="44c0b67ebb56b2ae1fa260d9e2bd1e99"></a><!-- doxytag: member="tbb::enumerable_thread_specific::end" ref="44c0b67ebb56b2ae1fa260d9e2bd1e99" args="()" -->
+iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">end iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ba6674c6102a6faf8f96d131497654b3"></a><!-- doxytag: member="tbb::enumerable_thread_specific::begin" ref="ba6674c6102a6faf8f96d131497654b3" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#ba6674c6102a6faf8f96d131497654b3">begin</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">begin const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="89811890e6a77f1e0cfc6c24ed35d09b"></a><!-- doxytag: member="tbb::enumerable_thread_specific::end" ref="89811890e6a77f1e0cfc6c24ed35d09b" args="() const " -->
+const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#89811890e6a77f1e0cfc6c24ed35d09b">end</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">end const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="56f6124f5870e26433a5bb2b71e4b7e9"></a><!-- doxytag: member="tbb::enumerable_thread_specific::range" ref="56f6124f5870e26433a5bb2b71e4b7e9" args="(size_t grainsize=1)" -->
+range_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a> (size_t grainsize=1)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get range for parallel algorithms. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a32dd1d88e42dc1faccceca244b12b6c"></a><!-- doxytag: member="tbb::enumerable_thread_specific::range" ref="a32dd1d88e42dc1faccceca244b12b6c" args="(size_t grainsize=1) const " -->
+const_range_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#a32dd1d88e42dc1faccceca244b12b6c">range</a> (size_t grainsize=1) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get const range for parallel algorithms. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c890601a45273ef759e64ac2fe75cb6a"></a><!-- doxytag: member="tbb::enumerable_thread_specific::clear" ref="c890601a45273ef759e64ac2fe75cb6a" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroys local copies. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f109a2bbe9ce390f78363a2d17a88ed5"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="f109a2bbe9ce390f78363a2d17a88ed5" args="(const enumerable_thread_specific&lt; U, Alloc, Cachetype &gt; &amp;other)" -->
+template&lt;typename U, typename Alloc, ets_key_usage_type Cachetype&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00138.html">enumerable_thread_specific</a>&lt; U, Alloc, Cachetype &gt; &amp;other)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c3be03082943460305b8022693c04b4a"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="c3be03082943460305b8022693c04b4a" args="(const enumerable_thread_specific &amp;other)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00138.html">enumerable_thread_specific</a> &amp;other)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8226b10dbb71cfe467eb85ac37b91ff0"></a><!-- doxytag: member="tbb::enumerable_thread_specific::operator=" ref="8226b10dbb71cfe467eb85ac37b91ff0" args="(const enumerable_thread_specific &amp;other)" -->
+<a class="el" href="a00138.html">enumerable_thread_specific</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00138.html">enumerable_thread_specific</a> &amp;other)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="b124465416967c23b12841170a7f0263"></a><!-- doxytag: member="tbb::enumerable_thread_specific::operator=" ref="b124465416967c23b12841170a7f0263" args="(const enumerable_thread_specific&lt; U, Alloc, Cachetype &gt; &amp;other)" -->
+template&lt;typename U, typename Alloc, ets_key_usage_type Cachetype&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00138.html">enumerable_thread_specific</a> &amp;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00138.html">enumerable_thread_specific</a>&lt; U, Alloc, Cachetype &gt; &amp;other)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="dd6b27d9c98297220b08732d9087a5a8"></a><!-- doxytag: member="tbb::enumerable_thread_specific::combine" ref="dd6b27d9c98297220b08732d9087a5a8" args="(combine_func_t f_combine)" -->
+template&lt;typename combine_func_t&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>combine</b> (combine_func_t f_combine)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4abce9638ef2693d813d820af59bb6e2"></a><!-- doxytag: member="tbb::enumerable_thread_specific::combine_each" ref="4abce9638ef2693d813d820af59bb6e2" args="(combine_func_t f_combine)" -->
+template&lt;typename combine_func_t&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>combine_each</b> (combine_func_t f_combine)</td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="45364b2f249ceb935cff05c29fcfcf5c"></a><!-- doxytag: member="tbb::enumerable_thread_specific::enumerable_thread_specific" ref="45364b2f249ceb935cff05c29fcfcf5c" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><b>generic_range_type</b></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A generic range, used to create range objects from the iterators. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><b>padded_element</b></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The padded elements; padded to avoid false sharing. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename T, typename Allocator = cache_aligned_allocator&lt;T&gt;, ets_key_usage_type ETS_key_type = ets_no_key&gt;<br>
+ class tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</h3>
+
+The thread local class template. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00291.html">enumerable_thread_specific.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00139.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00139.html
new file mode 100644 (file)
index 0000000..e3ddfee
--- /dev/null
@@ -0,0 +1,207 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::filter Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00139.html">filter</a></div>
+<h1>tbb::filter Class Reference<br>
+<small>
+[<a class="el" href="a00233.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::filter" -->A stage in a pipeline.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00347.html">pipeline.h</a>&gt;</code>
+<p>
+Inherited by <a class="el" href="a00175.html">tbb::thread_bound_filter</a>.
+<p>
+Inheritance diagram for tbb::filter:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00044.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> = current_version | filter_is_out_of_order</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">processes multiple items in parallel and in no particular order  <a href="#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> = current_version | filter_is_serial</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">processes items one at a time; all such filters process items in the same order  <a href="#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> = current_version | filter_is_serial | filter_is_out_of_order</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">processes items one at a time and in no particular order  <a href="#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> = serial_in_order</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> { <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> =  current_version | filter_is_out_of_order, 
+<a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> =  current_version | filter_is_serial, 
+<a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> =  current_version | filter_is_serial | filter_is_out_of_order, 
+<a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> =  serial_in_order
+ }</td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fcfec27656a69ff2072802ac001e936f"></a><!-- doxytag: member="tbb::filter::is_serial" ref="fcfec27656a69ff2072802ac001e936f" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#fcfec27656a69ff2072802ac001e936f">is_serial</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if filter is serial. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cd53206c4795ef2df5df26b795caf692"></a><!-- doxytag: member="tbb::filter::is_ordered" ref="cd53206c4795ef2df5df26b795caf692" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if filter must receive stream in order. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="15c29cae5d237e6d63dbfe5c94af89d5"></a><!-- doxytag: member="tbb::filter::is_bound" ref="15c29cae5d237e6d63dbfe5c94af89d5" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if filter is thread-bound. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a> (void *item)=0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Operate on an item from the input stream, and return item for output stream.  <a href="#fa1b3dc1f4f47563ccab7f4d92f5b543"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#66d159f362293e3964ba3da8bc1d2604">~filter</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy filter.  <a href="#66d159f362293e3964ba3da8bc1d2604"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html#56275eb889c77c4807967133e21401bd">finalize</a> (void *)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroys item if pipeline was cancelled.  <a href="#56275eb889c77c4807967133e21401bd"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f1111979b4afbde1a6c1873577a005ae"></a><!-- doxytag: member="tbb::filter::filter" ref="f1111979b4afbde1a6c1873577a005ae" args="(bool is_serial_)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>filter</b> (bool is_serial_)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3f49df3c34a3e5a8884001c30230a94"></a><!-- doxytag: member="tbb::filter::filter" ref="a3f49df3c34a3e5a8884001c30230a94" args="(mode filter_mode)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>filter</b> (<a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode)</td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8228ce0751009045e8158d2e642715a6"></a><!-- doxytag: member="tbb::filter::internal::stage_task" ref="8228ce0751009045e8158d2e642715a6" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::stage_task</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05d67150ca324698ba852553e223d3eb"></a><!-- doxytag: member="tbb::filter::internal::pipeline_root_task" ref="05d67150ca324698ba852553e223d3eb" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::pipeline_root_task</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b211ee58bada099e24280d478017cbff"></a><!-- doxytag: member="tbb::filter::pipeline" ref="b211ee58bada099e24280d478017cbff" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>pipeline</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e43b69a482df8e053cb199af69eb5139"></a><!-- doxytag: member="tbb::filter::thread_bound_filter" ref="e43b69a482df8e053cb199af69eb5139" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A stage in a pipeline. 
+<p>
+<hr><h2>Member Enumeration Documentation</h2>
+<a class="anchor" name="d3b6ed2c517144199d0c39c62ddfd8cf"></a><!-- doxytag: member="tbb::filter::mode" ref="d3b6ed2c517144199d0c39c62ddfd8cf" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">tbb::filter::mode</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe"></a><!-- doxytag: member="parallel" ref="d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe" args="" -->parallel</em>&nbsp;</td><td>
+processes multiple items in parallel and in no particular order </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93"></a><!-- doxytag: member="serial_in_order" ref="d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93" args="" -->serial_in_order</em>&nbsp;</td><td>
+processes items one at a time; all such filters process items in the same order </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9"></a><!-- doxytag: member="serial_out_of_order" ref="d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9" args="" -->serial_out_of_order</em>&nbsp;</td><td>
+processes items one at a time and in no particular order </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237"></a><!-- doxytag: member="serial" ref="d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237" args="" -->serial</em>&nbsp;</td><td>
+<dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000002">Deprecated:</a></b></dt><dd>use serial_in_order instead </dd></dl>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="66d159f362293e3964ba3da8bc1d2604"></a><!-- doxytag: member="tbb::filter::~filter" ref="66d159f362293e3964ba3da8bc1d2604" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual __TBB_EXPORTED_METHOD tbb::filter::~filter           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Destroy filter. 
+<p>
+If the filter was added to a pipeline, the pipeline must be destroyed first. 
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="56275eb889c77c4807967133e21401bd"></a><!-- doxytag: member="tbb::filter::finalize" ref="56275eb889c77c4807967133e21401bd" args="(void *)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void tbb::filter::finalize           </td>
+          <td>(</td>
+          <td class="paramtype">void *&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Destroys item if pipeline was cancelled. 
+<p>
+Required to prevent memory leaks. Note it can be called concurrently even for serial filters. 
+</div>
+</div><p>
+<a class="anchor" name="fa1b3dc1f4f47563ccab7f4d92f5b543"></a><!-- doxytag: member="tbb::filter::operator()" ref="fa1b3dc1f4f47563ccab7f4d92f5b543" args="(void *item)=0" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void* tbb::filter::operator()           </td>
+          <td>(</td>
+          <td class="paramtype">void *&nbsp;</td>
+          <td class="paramname"> <em>item</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [pure virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Operate on an item from the input stream, and return item for output stream. 
+<p>
+Returns NULL if filter is a sink. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00347.html">pipeline.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00140.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00140.html
new file mode 100644 (file)
index 0000000..3bdcb44
--- /dev/null
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::final_scan_tag Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00140.html">final_scan_tag</a></div>
+<h1>tbb::final_scan_tag Struct Reference<br>
+<small>
+[<a class="el" href="a00233.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::final_scan_tag" -->Used to indicate that the final scan is being performed.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00328.html">parallel_scan.h</a>&gt;</code>
+<p>
+<a href="a00037.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="06888e4a548788fcb2c15542d428d8c9"></a><!-- doxytag: member="tbb::final_scan_tag::is_final_scan" ref="06888e4a548788fcb2c15542d428d8c9" args="()" -->
+static bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Used to indicate that the final scan is being performed. 
+<p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00328.html">parallel_scan.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00141.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00141.html
new file mode 100644 (file)
index 0000000..680d8d6
--- /dev/null
@@ -0,0 +1,168 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::movable_exception&lt; ExceptionData &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00141.html">movable_exception</a></div>
+<h1>tbb::movable_exception&lt; ExceptionData &gt; Class Template Reference</h1><!-- doxytag: class="tbb::movable_exception" --><!-- doxytag: inherits="tbb::tbb_exception" -->Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00381.html">tbb_exception.h</a>&gt;</code>
+<p>
+Inherits <a class="el" href="a00172.html">tbb::tbb_exception</a>.
+<p>
+Inheritance diagram for tbb::movable_exception&lt; ExceptionData &gt;:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00086.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bd3a1f2580e18cad8453a429a52d04b2"></a><!-- doxytag: member="tbb::movable_exception::movable_exception" ref="bd3a1f2580e18cad8453a429a52d04b2" args="(const ExceptionData &amp;data)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>movable_exception</b> (const ExceptionData &amp;data)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="48f97fbf1e5d66c5977891f4375ee4d9"></a><!-- doxytag: member="tbb::movable_exception::movable_exception" ref="48f97fbf1e5d66c5977891f4375ee4d9" args="(const movable_exception &amp;src)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>movable_exception</b> (const <a class="el" href="a00141.html">movable_exception</a> &amp;src)  throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dfafefe27f2afaa7c7894ca9c71cc568"></a><!-- doxytag: member="tbb::movable_exception::operator=" ref="dfafefe27f2afaa7c7894ca9c71cc568" args="(const movable_exception &amp;src)" -->
+const <a class="el" href="a00141.html">movable_exception</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00141.html">movable_exception</a> &amp;src)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="47114cbc20c8e13cac3108749a3e085d"></a><!-- doxytag: member="tbb::movable_exception::data" ref="47114cbc20c8e13cac3108749a3e085d" args="()" -->
+ExceptionData &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>data</b> ()  throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7d93c000d862d2558efd9a34817adbce"></a><!-- doxytag: member="tbb::movable_exception::data" ref="7d93c000d862d2558efd9a34817adbce" args="() const " -->
+const ExceptionData &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>data</b> () const   throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bc5f5c4739b17ac5211ac58226c2f5a5"></a><!-- doxytag: member="tbb::movable_exception::name" ref="bc5f5c4739b17ac5211ac58226c2f5a5" args="() const " -->
+const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a> () const   throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b33a89bccf0c63106f1270c7bfaaf54f"></a><!-- doxytag: member="tbb::movable_exception::what" ref="b33a89bccf0c63106f1270c7bfaaf54f" args="() const " -->
+const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a> () const   throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">what()</a> method. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00141.html">movable_exception</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a> ()  throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#1aea0ad179d6f0481fe7f3495f66adf9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">destroy</a> ()  throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">move()</a> method.  <a href="#7a46873119d9f85a7b0009c13e41a258"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#17cffba35811c92b7e65d63506b69602">throw_self</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Throws this exception object.  <a href="#17cffba35811c92b7e65d63506b69602"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8c0ae2089ae784b28907cf748b89416"></a><!-- doxytag: member="tbb::movable_exception::my_exception_data" ref="a8c0ae2089ae784b28907cf748b89416" args="" -->
+ExceptionData&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">User data. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename ExceptionData&gt;<br>
+ class tbb::movable_exception&lt; ExceptionData &gt;</h3>
+
+Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. 
+<p>
+Code using TBB can instantiate this template with an arbitrary ExceptionData type and throw this exception object. Such exceptions are intercepted by the TBB scheduler and delivered to the root thread (). <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00172.html">tbb::tbb_exception</a> </dd></dl>
+
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="7a46873119d9f85a7b0009c13e41a258"></a><!-- doxytag: member="tbb::movable_exception::destroy" ref="7a46873119d9f85a7b0009c13e41a258" args="()" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename ExceptionData&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00141.html">tbb::movable_exception</a>&lt; ExceptionData &gt;::destroy           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">  throw ()<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Destroys objects created by the <a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">move()</a> method. 
+<p>
+Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. 
+<p>
+Implements <a class="el" href="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>.
+</div>
+</div><p>
+<a class="anchor" name="1aea0ad179d6f0481fe7f3495f66adf9"></a><!-- doxytag: member="tbb::movable_exception::move" ref="1aea0ad179d6f0481fe7f3495f66adf9" args="()" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename ExceptionData&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00141.html">movable_exception</a>* <a class="el" href="a00141.html">tbb::movable_exception</a>&lt; ExceptionData &gt;::move           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">  throw ()<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Creates and returns pointer to the deep copy of this exception object. 
+<p>
+Move semantics is allowed. 
+<p>
+Implements <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a>.
+</div>
+</div><p>
+<a class="anchor" name="17cffba35811c92b7e65d63506b69602"></a><!-- doxytag: member="tbb::movable_exception::throw_self" ref="17cffba35811c92b7e65d63506b69602" args="()" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename ExceptionData&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00141.html">tbb::movable_exception</a>&lt; ExceptionData &gt;::throw_self           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Throws this exception object. 
+<p>
+Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown. 
+<p>
+Implements <a class="el" href="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a>.
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00381.html">tbb_exception.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00142.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00142.html
new file mode 100644 (file)
index 0000000..63b92c8
--- /dev/null
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::mutex Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00142.html">mutex</a></div>
+<h1>tbb::mutex Class Reference<br>
+<small>
+[<a class="el" href="a00236.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::mutex" -->Wrapper around the platform's native reader-writer lock.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00299.html">mutex.h</a>&gt;</code>
+<p>
+<a href="a00029.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05313cb77d4f85213103d4dab74ed454"></a><!-- doxytag: member="tbb::mutex::mutex" ref="05313cb77d4f85213103d4dab74ed454" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#05313cb77d4f85213103d4dab74ed454">mutex</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4470e61c24c129a0299ca6c17240adbb"></a><!-- doxytag: member="tbb::mutex::lock" ref="4470e61c24c129a0299ca6c17240adbb" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#4331652c79dea1c1131bd59ab161b234">try_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#4331652c79dea1c1131bd59ab161b234"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5fc9ef443ae75d966695546be399cc6b"></a><!-- doxytag: member="tbb::mutex::unlock" ref="5fc9ef443ae75d966695546be399cc6b" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">unlock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock. <br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="17b78176054e2bac1ff35b9535d1ea0c"></a><!-- doxytag: member="tbb::mutex::is_rw_mutex" ref="17b78176054e2bac1ff35b9535d1ea0c" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d4558e5a7c5b8d8e158ec7a1079669bd"></a><!-- doxytag: member="tbb::mutex::is_recursive_mutex" ref="d4558e5a7c5b8d8e158ec7a1079669bd" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f023a29c61451d02359095cbff0f3d45"></a><!-- doxytag: member="tbb::mutex::is_fair_mutex" ref="f023a29c61451d02359095cbff0f3d45" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The scoped locking pattern.  <a href="a00143.html#_details">More...</a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Wrapper around the platform's native reader-writer lock. 
+<p>
+For testing purposes only. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="4331652c79dea1c1131bd59ab161b234"></a><!-- doxytag: member="tbb::mutex::try_lock" ref="4331652c79dea1c1131bd59ab161b234" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::mutex::try_lock           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Try acquiring lock (non-blocking). 
+<p>
+Return true if lock acquired; false otherwise. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00299.html">mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00143.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00143.html
new file mode 100644 (file)
index 0000000..746e704
--- /dev/null
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::mutex::scoped_lock Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00142.html">mutex</a>::<a class="el" href="a00143.html">scoped_lock</a></div>
+<h1>tbb::mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::mutex::scoped_lock" -->The scoped locking pattern.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00299.html">mutex.h</a>&gt;</code>
+<p>
+<a href="a00030.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1d403ae51b484df5d86d85ae38f11e6e"></a><!-- doxytag: member="tbb::mutex::scoped_lock::scoped_lock" ref="1d403ae51b484df5d86d85ae38f11e6e" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct lock that has not acquired a mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a> (<a class="el" href="a00142.html">mutex</a> &amp;<a class="el" href="a00142.html">mutex</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock on given mutex.  <a href="#605a6b9af0f8cdabdf81825e0de99600"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0ebbbecaf4311e9df7362cb76ceaa368"></a><!-- doxytag: member="tbb::mutex::scoped_lock::~scoped_lock" ref="0ebbbecaf4311e9df7362cb76ceaa368" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="862e022841cdc522e4296a5533b22efd"></a><!-- doxytag: member="tbb::mutex::scoped_lock::acquire" ref="862e022841cdc522e4296a5533b22efd" args="(mutex &amp;mutex)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#862e022841cdc522e4296a5533b22efd">acquire</a> (<a class="el" href="a00142.html">mutex</a> &amp;<a class="el" href="a00142.html">mutex</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="591e0c49b82bcedffcbe0923f1b915ec"></a><!-- doxytag: member="tbb::mutex::scoped_lock::try_acquire" ref="591e0c49b82bcedffcbe0923f1b915ec" args="(mutex &amp;mutex)" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a> (<a class="el" href="a00142.html">mutex</a> &amp;<a class="el" href="a00142.html">mutex</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0d51d18cd99df3b2e93bf07378d0992c"></a><!-- doxytag: member="tbb::mutex::scoped_lock::release" ref="0d51d18cd99df3b2e93bf07378d0992c" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html#0d51d18cd99df3b2e93bf07378d0992c">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="93062a14ad2e50e2b7b485b913170779"></a><!-- doxytag: member="tbb::mutex::scoped_lock::mutex" ref="93062a14ad2e50e2b7b485b913170779" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>mutex</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The scoped locking pattern. 
+<p>
+It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
+<p>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="605a6b9af0f8cdabdf81825e0de99600"></a><!-- doxytag: member="tbb::mutex::scoped_lock::scoped_lock" ref="605a6b9af0f8cdabdf81825e0de99600" args="(mutex &amp;mutex)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::mutex::scoped_lock::scoped_lock           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00142.html">mutex</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>mutex</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Acquire lock on given mutex. 
+<p>
+Upon entry, *this should not be in the "have acquired a mutex" state. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00299.html">mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00144.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00144.html
new file mode 100644 (file)
index 0000000..a36927e
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::null_mutex Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00144.html">null_mutex</a></div>
+<h1>tbb::null_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00236.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::null_mutex" -->A mutex which does nothing.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00301.html">null_mutex.h</a>&gt;</code>
+<p>
+<a href="a00031.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a960bed8b19a4d111ca047de206f5f77"></a><!-- doxytag: member="tbb::null_mutex::is_rw_mutex" ref="a960bed8b19a4d111ca047de206f5f77" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0fefed74b341d43ccf0e2fc30d31b75"></a><!-- doxytag: member="tbb::null_mutex::is_recursive_mutex" ref="a0fefed74b341d43ccf0e2fc30d31b75" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="707cf399055d68177b1d64c2e112603a"></a><!-- doxytag: member="tbb::null_mutex::is_fair_mutex" ref="707cf399055d68177b1d64c2e112603a" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00145.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00145.html#_details">More...</a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A mutex which does nothing. 
+<p>
+A <a class="el" href="a00144.html">null_mutex</a> does no operation and simulates success. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00301.html">null_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00145.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00145.html
new file mode 100644 (file)
index 0000000..bbad797
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::null_mutex::scoped_lock Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00144.html">null_mutex</a>::<a class="el" href="a00145.html">scoped_lock</a></div>
+<h1>tbb::null_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::null_mutex::scoped_lock" -->Represents acquisition of a mutex.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00301.html">null_mutex.h</a>&gt;</code>
+<p>
+<a href="a00032.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="765e64065919fdd9665e78b5ec4d3c6f"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::scoped_lock" ref="765e64065919fdd9665e78b5ec4d3c6f" args="(null_mutex &amp;)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>scoped_lock</b> (<a class="el" href="a00144.html">null_mutex</a> &amp;)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6889f00ca3946906e89e856988bb890"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::acquire" ref="f6889f00ca3946906e89e856988bb890" args="(null_mutex &amp;)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>acquire</b> (<a class="el" href="a00144.html">null_mutex</a> &amp;)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="90eb562a9de52b33362a6fe237b3df42"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::try_acquire" ref="90eb562a9de52b33362a6fe237b3df42" args="(null_mutex &amp;)" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>try_acquire</b> (<a class="el" href="a00144.html">null_mutex</a> &amp;)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b29fdf07b4c295850a6e433001c2c6a7"></a><!-- doxytag: member="tbb::null_mutex::scoped_lock::release" ref="b29fdf07b4c295850a6e433001c2c6a7" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Represents acquisition of a mutex. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00301.html">null_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00146.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00146.html
new file mode 100644 (file)
index 0000000..a7dcc98
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::null_rw_mutex Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00146.html">null_rw_mutex</a></div>
+<h1>tbb::null_rw_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00236.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::null_rw_mutex" -->A rw mutex which does nothing.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00302.html">null_rw_mutex.h</a>&gt;</code>
+<p>
+<a href="a00033.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2f3235cbf63812f72e5755a4c820f523"></a><!-- doxytag: member="tbb::null_rw_mutex::is_rw_mutex" ref="2f3235cbf63812f72e5755a4c820f523" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e33ac3b047901e69e7997a16e221a330"></a><!-- doxytag: member="tbb::null_rw_mutex::is_recursive_mutex" ref="e33ac3b047901e69e7997a16e221a330" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e5248faf1412f9283185a0b5d72d7456"></a><!-- doxytag: member="tbb::null_rw_mutex::is_fair_mutex" ref="e5248faf1412f9283185a0b5d72d7456" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00147.html#_details">More...</a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A rw mutex which does nothing. 
+<p>
+A <a class="el" href="a00146.html">null_rw_mutex</a> is a rw mutex that does nothing and simulates successful operation. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00302.html">null_rw_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00147.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00147.html
new file mode 100644 (file)
index 0000000..1004993
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::null_rw_mutex::scoped_lock Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00146.html">null_rw_mutex</a>::<a class="el" href="a00147.html">scoped_lock</a></div>
+<h1>tbb::null_rw_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::null_rw_mutex::scoped_lock" -->Represents acquisition of a mutex.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00302.html">null_rw_mutex.h</a>&gt;</code>
+<p>
+<a href="a00034.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e11281a13a7b6243c6c9ab243c5ad5a8"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::scoped_lock" ref="e11281a13a7b6243c6c9ab243c5ad5a8" args="(null_rw_mutex &amp;, bool=true)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>scoped_lock</b> (<a class="el" href="a00146.html">null_rw_mutex</a> &amp;, bool=true)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="72c4c302fdfc20187a650348e432b0a7"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::acquire" ref="72c4c302fdfc20187a650348e432b0a7" args="(null_rw_mutex &amp;, bool=true)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>acquire</b> (<a class="el" href="a00146.html">null_rw_mutex</a> &amp;, bool=true)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fa1e2a5592ee2672470ea44d98f1c498"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::upgrade_to_writer" ref="fa1e2a5592ee2672470ea44d98f1c498" args="()" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>upgrade_to_writer</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="efcb7948649e1652d59aaff9c8ea40f1"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::downgrade_to_reader" ref="efcb7948649e1652d59aaff9c8ea40f1" args="()" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>downgrade_to_reader</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="56686c4dfe4a32a1d9bd8e7e729130e6"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::try_acquire" ref="56686c4dfe4a32a1d9bd8e7e729130e6" args="(null_rw_mutex &amp;, bool=true)" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>try_acquire</b> (<a class="el" href="a00146.html">null_rw_mutex</a> &amp;, bool=true)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6146c803a4ad2f14263fdc019a72b5a9"></a><!-- doxytag: member="tbb::null_rw_mutex::scoped_lock::release" ref="6146c803a4ad2f14263fdc019a72b5a9" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Represents acquisition of a mutex. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00302.html">null_rw_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00148.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00148.html
new file mode 100644 (file)
index 0000000..6999802
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::parallel_do_feeder&lt; Item &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00148.html">parallel_do_feeder</a></div>
+<h1>tbb::parallel_do_feeder&lt; Item &gt; Class Template Reference</h1><!-- doxytag: class="tbb::parallel_do_feeder" -->Class the user supplied algorithm body uses to add new tasks.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00303.html">parallel_do.h</a>&gt;</code>
+<p>
+<a href="a00035.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="40baaf0f6856f4491dd0adf896c93516"></a><!-- doxytag: member="tbb::parallel_do_feeder::add" ref="40baaf0f6856f4491dd0adf896c93516" args="(const Item &amp;item)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#40baaf0f6856f4491dd0adf896c93516">add</a> (const Item &amp;item)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a work item to a running parallel_do. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b381179b22f5f5e8511470c73d64b37f"></a><!-- doxytag: member="tbb::parallel_do_feeder::internal::parallel_do_feeder_impl" ref="b381179b22f5f5e8511470c73d64b37f" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::parallel_do_feeder_impl</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename Item&gt;<br>
+ class tbb::parallel_do_feeder&lt; Item &gt;</h3>
+
+Class the user supplied algorithm body uses to add new tasks. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>Item</em>&nbsp;</td><td>Work item type </td></tr>
+  </table>
+</dl>
+
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00303.html">parallel_do.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00149.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00149.html
new file mode 100644 (file)
index 0000000..d5cd8c3
--- /dev/null
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::parallel_while&lt; Body &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00149.html">parallel_while</a></div>
+<h1>tbb::parallel_while&lt; Body &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00233.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::parallel_while" -->Parallel iteration over a stream, with optional addition of more work.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00338.html">parallel_while.h</a>&gt;</code>
+<p>
+<a href="a00038.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fa297e53d3af2a101e712bc200233e9c"></a><!-- doxytag: member="tbb::parallel_while::value_type" ref="fa297e53d3af2a101e712bc200233e9c" args="" -->
+typedef Body::argument_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">value_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Type of items. <br></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="36e26ba3880c7bcf804a97ba0cbe133f"></a><!-- doxytag: member="tbb::parallel_while::parallel_while" ref="36e26ba3880c7bcf804a97ba0cbe133f" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct empty non-running parallel while. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6fcfc973cc56b79c6d0fbb8a31be7e84"></a><!-- doxytag: member="tbb::parallel_while::~parallel_while" ref="6fcfc973cc56b79c6d0fbb8a31be7e84" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destructor cleans up data members before returning. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template&lt;typename Stream&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a> (Stream &amp;stream, const Body &amp;body)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Apply body.apply to each item in the stream.  <a href="#b32a0a6e5e09ebb7fad3e6652c19afe5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#e131c560057a58229992b61eb8dba4c6">add</a> (const <a class="el" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> &amp;item)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a work item while running.  <a href="#e131c560057a58229992b61eb8dba4c6"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename Body&gt;<br>
+ class tbb::parallel_while&lt; Body &gt;</h3>
+
+Parallel iteration over a stream, with optional addition of more work. 
+<p>
+The Body b has the requirement: <br>
+ "b(v)" <br>
+ "b.argument_type" <br>
+ where v is an argument_type 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="e131c560057a58229992b61eb8dba4c6"></a><!-- doxytag: member="tbb::parallel_while::add" ref="e131c560057a58229992b61eb8dba4c6" args="(const value_type &amp;item)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Body&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00149.html">tbb::parallel_while</a>&lt; Body &gt;::add           </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>item</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add a work item while running. 
+<p>
+Should be executed only by body.apply or a thread spawned therefrom. 
+</div>
+</div><p>
+<a class="anchor" name="b32a0a6e5e09ebb7fad3e6652c19afe5"></a><!-- doxytag: member="tbb::parallel_while::run" ref="b32a0a6e5e09ebb7fad3e6652c19afe5" args="(Stream &amp;stream, const Body &amp;body)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Body&gt; </div>
+<div class="memtemplate">
+template&lt;typename Stream&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00149.html">tbb::parallel_while</a>&lt; Body &gt;::run           </td>
+          <td>(</td>
+          <td class="paramtype">Stream &amp;&nbsp;</td>
+          <td class="paramname"> <em>stream</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Body &amp;&nbsp;</td>
+          <td class="paramname"> <em>body</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Apply body.apply to each item in the stream. 
+<p>
+A Stream s has the requirements <br>
+ "S::value_type" <br>
+ "s.pop_if_present(value) is convertible to bool 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00338.html">parallel_while.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00150.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00150.html
new file mode 100644 (file)
index 0000000..3f3fa93
--- /dev/null
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::pipeline Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00150.html">pipeline</a></div>
+<h1>tbb::pipeline Class Reference<br>
+<small>
+[<a class="el" href="a00233.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::pipeline" -->A processing pipeling that applies filters to items.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00347.html">pipeline.h</a>&gt;</code>
+<p>
+<a href="a00046.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="596dc3beba27099c4c8581cb419e1a59"></a><!-- doxytag: member="tbb::pipeline::pipeline" ref="596dc3beba27099c4c8581cb419e1a59" args="()" -->
+__TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct empty pipeline. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="38fb5c9c8395dd6f89a4ae2011a83e0d"></a><!-- doxytag: member="tbb::pipeline::add_filter" ref="38fb5c9c8395dd6f89a4ae2011a83e0d" args="(filter &amp;filter_)" -->
+void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a> (<a class="el" href="a00139.html">filter</a> &amp;filter_)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add filter to end of pipeline. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f627616049b3fe36801f37ee40403ef8"></a><!-- doxytag: member="tbb::pipeline::run" ref="f627616049b3fe36801f37ee40403ef8" args="(size_t max_number_of_live_tokens)" -->
+void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#f627616049b3fe36801f37ee40403ef8">run</a> (size_t max_number_of_live_tokens)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Run the pipeline to completion. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="93d7fec8cd607b803dd2d79fb46bd260"></a><!-- doxytag: member="tbb::pipeline::run" ref="93d7fec8cd607b803dd2d79fb46bd260" args="(size_t max_number_of_live_tokens, tbb::task_group_context &amp;context)" -->
+void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#93d7fec8cd607b803dd2d79fb46bd260">run</a> (size_t max_number_of_live_tokens, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Run the pipeline to completion with user-supplied context. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c84aef5b834b555ee220b176e25931e"></a><!-- doxytag: member="tbb::pipeline::clear" ref="2c84aef5b834b555ee220b176e25931e" args="()" -->
+void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#2c84aef5b834b555ee220b176e25931e">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove all filters from the pipeline. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8228ce0751009045e8158d2e642715a6"></a><!-- doxytag: member="tbb::pipeline::internal::stage_task" ref="8228ce0751009045e8158d2e642715a6" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::stage_task</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05d67150ca324698ba852553e223d3eb"></a><!-- doxytag: member="tbb::pipeline::internal::pipeline_root_task" ref="05d67150ca324698ba852553e223d3eb" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::pipeline_root_task</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4c991e50853b0cac7da039550344d3ef"></a><!-- doxytag: member="tbb::pipeline::filter" ref="4c991e50853b0cac7da039550344d3ef" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>filter</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e43b69a482df8e053cb199af69eb5139"></a><!-- doxytag: member="tbb::pipeline::thread_bound_filter" ref="e43b69a482df8e053cb199af69eb5139" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9d033d41ff53a0ae6ef824aceee7ecbc"></a><!-- doxytag: member="tbb::pipeline::internal::pipeline_cleaner" ref="9d033d41ff53a0ae6ef824aceee7ecbc" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::pipeline_cleaner</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A processing pipeling that applies filters to items. 
+<p>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="49513c6c24f9d5bbbb27edca5efe01c9"></a><!-- doxytag: member="tbb::pipeline::~pipeline" ref="49513c6c24f9d5bbbb27edca5efe01c9" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual __TBB_EXPORTED_METHOD tbb::pipeline::~pipeline           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Though the current implementation declares the destructor virtual, do not rely on this detail. The virtualness is deprecated and may disappear in future versions of TBB. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00347.html">pipeline.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00151.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00151.html
new file mode 100644 (file)
index 0000000..fc001b2
--- /dev/null
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::pre_scan_tag Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00151.html">pre_scan_tag</a></div>
+<h1>tbb::pre_scan_tag Struct Reference<br>
+<small>
+[<a class="el" href="a00233.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::pre_scan_tag" -->Used to indicate that the initial scan is being performed.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00328.html">parallel_scan.h</a>&gt;</code>
+<p>
+<a href="a00036.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d45d2cf548e51140ad6faafbea8ca6b5"></a><!-- doxytag: member="tbb::pre_scan_tag::is_final_scan" ref="d45d2cf548e51140ad6faafbea8ca6b5" args="()" -->
+static bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Used to indicate that the initial scan is being performed. 
+<p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00328.html">parallel_scan.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00152.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00152.html
new file mode 100644 (file)
index 0000000..a51c5a2
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::queuing_mutex Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00152.html">queuing_mutex</a></div>
+<h1>tbb::queuing_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00236.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::queuing_mutex" -->Queuing lock with local-only spinning.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00348.html">queuing_mutex.h</a>&gt;</code>
+<p>
+<a href="a00047.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b389ad9c4db7293e4bdb5b8cda69ec04"></a><!-- doxytag: member="tbb::queuing_mutex::queuing_mutex" ref="b389ad9c4db7293e4bdb5b8cda69ec04" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="96c1fe92760dcd1c5a7ed52c6599a72f"></a><!-- doxytag: member="tbb::queuing_mutex::internal_construct" ref="96c1fe92760dcd1c5a7ed52c6599a72f" args="()" -->
+void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
+
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="420932f70ff3b85f7280ff11a133938d"></a><!-- doxytag: member="tbb::queuing_mutex::is_rw_mutex" ref="420932f70ff3b85f7280ff11a133938d" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dc0c749f3a4e6ea75418677cb8f9205f"></a><!-- doxytag: member="tbb::queuing_mutex::is_recursive_mutex" ref="dc0c749f3a4e6ea75418677cb8f9205f" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="55d5339e4ca04b759f90c0c1ef966539"></a><!-- doxytag: member="tbb::queuing_mutex::is_fair_mutex" ref="55d5339e4ca04b759f90c0c1ef966539" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The scoped locking pattern.  <a href="a00153.html#_details">More...</a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Queuing lock with local-only spinning. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00348.html">queuing_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00153.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00153.html
new file mode 100644 (file)
index 0000000..6b2f95c
--- /dev/null
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::queuing_mutex::scoped_lock Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00152.html">queuing_mutex</a>::<a class="el" href="a00153.html">scoped_lock</a></div>
+<h1>tbb::queuing_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::queuing_mutex::scoped_lock" -->The scoped locking pattern.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00348.html">queuing_mutex.h</a>&gt;</code>
+<p>
+<a href="a00048.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#db0fa3967491014572e24d6607bdc971"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a> (<a class="el" href="a00152.html">queuing_mutex</a> &amp;m)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock on given mutex.  <a href="#9b51ef972f5618ac17caadb58841ab6d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ac2c576a93570957d694192a5f491443"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::~scoped_lock" ref="ac2c576a93570957d694192a5f491443" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="533e4fc8355ee321206a0609c42d909d"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::acquire" ref="533e4fc8355ee321206a0609c42d909d" args="(queuing_mutex &amp;m)" -->
+void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#533e4fc8355ee321206a0609c42d909d">acquire</a> (<a class="el" href="a00152.html">queuing_mutex</a> &amp;m)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e5a014fb817599386a87170cf2cf51a9"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::try_acquire" ref="e5a014fb817599386a87170cf2cf51a9" args="(queuing_mutex &amp;m)" -->
+bool __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a> (<a class="el" href="a00152.html">queuing_mutex</a> &amp;m)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock on given mutex if free (i.e. non-blocking). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3bf2b8c87ff22115be9b2eac179f2d30"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::release" ref="3bf2b8c87ff22115be9b2eac179f2d30" args="()" -->
+void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The scoped locking pattern. 
+<p>
+It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
+<p>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="db0fa3967491014572e24d6607bdc971"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::scoped_lock" ref="db0fa3967491014572e24d6607bdc971" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::queuing_mutex::scoped_lock::scoped_lock           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Construct lock that has not acquired a mutex. 
+<p>
+Equivalent to zero-initialization of *this. 
+</div>
+</div><p>
+<a class="anchor" name="9b51ef972f5618ac17caadb58841ab6d"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::scoped_lock" ref="9b51ef972f5618ac17caadb58841ab6d" args="(queuing_mutex &amp;m)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::queuing_mutex::scoped_lock::scoped_lock           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00152.html">queuing_mutex</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>m</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Acquire lock on given mutex. 
+<p>
+Upon entry, *this should not be in the "have acquired a mutex" state. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00348.html">queuing_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00154.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00154.html
new file mode 100644 (file)
index 0000000..86e4cb0
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::queuing_rw_mutex Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00154.html">queuing_rw_mutex</a></div>
+<h1>tbb::queuing_rw_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00236.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::queuing_rw_mutex" -->Reader-writer lock with local-only spinning.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00349.html">queuing_rw_mutex.h</a>&gt;</code>
+<p>
+<a href="a00049.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="85c90877c3447690ac4e2ac4ff8dea5e"></a><!-- doxytag: member="tbb::queuing_rw_mutex::queuing_rw_mutex" ref="85c90877c3447690ac4e2ac4ff8dea5e" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1ba73e3d95cfdf8323880bc623af9099"></a><!-- doxytag: member="tbb::queuing_rw_mutex::~queuing_rw_mutex" ref="1ba73e3d95cfdf8323880bc623af9099" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="eb88522d145ad7bcf5bebfa7d2a6122b"></a><!-- doxytag: member="tbb::queuing_rw_mutex::internal_construct" ref="eb88522d145ad7bcf5bebfa7d2a6122b" args="()" -->
+void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
+
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0dc1e28d3033e8f9556f5b13b7b57d0f"></a><!-- doxytag: member="tbb::queuing_rw_mutex::is_rw_mutex" ref="0dc1e28d3033e8f9556f5b13b7b57d0f" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e6ad08ef251f9ea898bd5f67963869c5"></a><!-- doxytag: member="tbb::queuing_rw_mutex::is_recursive_mutex" ref="e6ad08ef251f9ea898bd5f67963869c5" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="147b34120505e419f6ea8d631ec4375d"></a><!-- doxytag: member="tbb::queuing_rw_mutex::is_fair_mutex" ref="147b34120505e419f6ea8d631ec4375d" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The scoped locking pattern.  <a href="a00155.html#_details">More...</a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Reader-writer lock with local-only spinning. 
+<p>
+Adapted from Krieger, Stumm, et al. pseudocode at <a href="http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93">http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93</a> 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00349.html">queuing_rw_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00155.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00155.html
new file mode 100644 (file)
index 0000000..0bb3fb3
--- /dev/null
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::queuing_rw_mutex::scoped_lock Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00154.html">queuing_rw_mutex</a>::<a class="el" href="a00155.html">scoped_lock</a></div>
+<h1>tbb::queuing_rw_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::queuing_rw_mutex::scoped_lock" -->The scoped locking pattern.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00349.html">queuing_rw_mutex.h</a>&gt;</code>
+<p>
+<a href="a00050.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#c62e365be7bcbba091c9ea7454a4d22c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a> (<a class="el" href="a00154.html">queuing_rw_mutex</a> &amp;m, bool write=true)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock on given mutex.  <a href="#fbb8798792d3aebb136c46fc63d2529e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="32c7d67a660d23ebbaab1a1d2826d31a"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::~scoped_lock" ref="32c7d67a660d23ebbaab1a1d2826d31a" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8dd5ab8686e76de21587544dbb681e0"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::acquire" ref="a8dd5ab8686e76de21587544dbb681e0" args="(queuing_rw_mutex &amp;m, bool write=true)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a> (<a class="el" href="a00154.html">queuing_rw_mutex</a> &amp;m, bool write=true)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2e4ff6c9ec2fee6682f95290d1f42baa"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::try_acquire" ref="2e4ff6c9ec2fee6682f95290d1f42baa" args="(queuing_rw_mutex &amp;m, bool write=true)" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a> (<a class="el" href="a00154.html">queuing_rw_mutex</a> &amp;m, bool write=true)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="67ae221109ddc69510ab593874e435d4"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::release" ref="67ae221109ddc69510ab593874e435d4" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#67ae221109ddc69510ab593874e435d4">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Upgrade reader to become a writer.  <a href="#11ba1da4a722c9e6f73339a52c487e82"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0d2f93edf7b15ec4bcee138823220c52"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::downgrade_to_reader" ref="0d2f93edf7b15ec4bcee138823220c52" args="()" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Downgrade writer to become a reader. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The scoped locking pattern. 
+<p>
+It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
+<p>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="c62e365be7bcbba091c9ea7454a4d22c"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::scoped_lock" ref="c62e365be7bcbba091c9ea7454a4d22c" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::queuing_rw_mutex::scoped_lock::scoped_lock           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Construct lock that has not acquired a mutex. 
+<p>
+Equivalent to zero-initialization of *this. 
+</div>
+</div><p>
+<a class="anchor" name="fbb8798792d3aebb136c46fc63d2529e"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::scoped_lock" ref="fbb8798792d3aebb136c46fc63d2529e" args="(queuing_rw_mutex &amp;m, bool write=true)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::queuing_rw_mutex::scoped_lock::scoped_lock           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00154.html">queuing_rw_mutex</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>write</em> = <code>true</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Acquire lock on given mutex. 
+<p>
+Upon entry, *this should not be in the "have acquired a mutex" state. 
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="11ba1da4a722c9e6f73339a52c487e82"></a><!-- doxytag: member="tbb::queuing_rw_mutex::scoped_lock::upgrade_to_writer" ref="11ba1da4a722c9e6f73339a52c487e82" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::queuing_rw_mutex::scoped_lock::upgrade_to_writer           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Upgrade reader to become a writer. 
+<p>
+Returns true if the upgrade happened without re-acquiring the lock and false if opposite 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00349.html">queuing_rw_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00156.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00156.html
new file mode 100644 (file)
index 0000000..a427a14
--- /dev/null
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::recursive_mutex Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00156.html">recursive_mutex</a></div>
+<h1>tbb::recursive_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00236.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::recursive_mutex" -->Mutex that allows recursive mutex acquisition.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00350.html">recursive_mutex.h</a>&gt;</code>
+<p>
+<a href="a00051.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d2fceb7f95c24a8cd1457d4527e4b8c6"></a><!-- doxytag: member="tbb::recursive_mutex::recursive_mutex" ref="d2fceb7f95c24a8cd1457d4527e4b8c6" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct unacquired <a class="el" href="a00156.html">recursive_mutex</a>. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4c342c69d47f4bb0b393535dee4015d6"></a><!-- doxytag: member="tbb::recursive_mutex::lock" ref="4c342c69d47f4bb0b393535dee4015d6" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#86e719b0afee25704af11ab97694d240">try_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#86e719b0afee25704af11ab97694d240"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f0a96e26b7f074588dc31e32524856ae"></a><!-- doxytag: member="tbb::recursive_mutex::unlock" ref="f0a96e26b7f074588dc31e32524856ae" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">unlock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock. <br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="718cc53f6b33d8c396ccca0e4ebc5606"></a><!-- doxytag: member="tbb::recursive_mutex::is_rw_mutex" ref="718cc53f6b33d8c396ccca0e4ebc5606" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6149d7541063d8b35afd98df6f0f89d"></a><!-- doxytag: member="tbb::recursive_mutex::is_recursive_mutex" ref="f6149d7541063d8b35afd98df6f0f89d" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f01aacad6b9b9d51573c0803323182fe"></a><!-- doxytag: member="tbb::recursive_mutex::is_fair_mutex" ref="f01aacad6b9b9d51573c0803323182fe" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The scoped locking pattern.  <a href="a00157.html#_details">More...</a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Mutex that allows recursive mutex acquisition. 
+<p>
+Mutex that allows recursive mutex acquisition. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="86e719b0afee25704af11ab97694d240"></a><!-- doxytag: member="tbb::recursive_mutex::try_lock" ref="86e719b0afee25704af11ab97694d240" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::recursive_mutex::try_lock           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Try acquiring lock (non-blocking). 
+<p>
+Return true if lock acquired; false otherwise. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00350.html">recursive_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00157.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00157.html
new file mode 100644 (file)
index 0000000..7a2754c
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::recursive_mutex::scoped_lock Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00156.html">recursive_mutex</a>::<a class="el" href="a00157.html">scoped_lock</a></div>
+<h1>tbb::recursive_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::recursive_mutex::scoped_lock" -->The scoped locking pattern.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00350.html">recursive_mutex.h</a>&gt;</code>
+<p>
+<a href="a00052.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d82d4d36fbf9727a493d26ae50855fe7"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::scoped_lock" ref="d82d4d36fbf9727a493d26ae50855fe7" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct lock that has not acquired a <a class="el" href="a00156.html">recursive_mutex</a>. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dec17713c4c1321ac8fec66816d0c602"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::scoped_lock" ref="dec17713c4c1321ac8fec66816d0c602" args="(recursive_mutex &amp;mutex)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a> (<a class="el" href="a00156.html">recursive_mutex</a> &amp;<a class="el" href="a00142.html">mutex</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c1197ffb8f3cd9d4fed71d7e06265b7c"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::~scoped_lock" ref="c1197ffb8f3cd9d4fed71d7e06265b7c" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7fb04da37cccf8c99b1f9102d9074f9a"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::acquire" ref="7fb04da37cccf8c99b1f9102d9074f9a" args="(recursive_mutex &amp;mutex)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a> (<a class="el" href="a00156.html">recursive_mutex</a> &amp;<a class="el" href="a00142.html">mutex</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="36bfc3e93e3ef6340abef4901444d340"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::try_acquire" ref="36bfc3e93e3ef6340abef4901444d340" args="(recursive_mutex &amp;mutex)" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a> (<a class="el" href="a00156.html">recursive_mutex</a> &amp;<a class="el" href="a00142.html">mutex</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Try acquire lock on given <a class="el" href="a00156.html">recursive_mutex</a>. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ac480ea0e9d5ea0345a67d57008b6263"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::release" ref="ac480ea0e9d5ea0345a67d57008b6263" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="459818b78a3e9985dc5a9d5638b6593e"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::recursive_mutex" ref="459818b78a3e9985dc5a9d5638b6593e" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>recursive_mutex</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The scoped locking pattern. 
+<p>
+It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00350.html">recursive_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00158.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00158.html
new file mode 100644 (file)
index 0000000..6789e29
--- /dev/null
@@ -0,0 +1,112 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::scalable_allocator&lt; T &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00158.html">scalable_allocator</a></div>
+<h1>tbb::scalable_allocator&lt; T &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::scalable_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00351.html">scalable_allocator.h</a>&gt;</code>
+<p>
+<a href="a00053.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5a1cf13c339ee177a103a7e19bf2710a"></a><!-- doxytag: member="tbb::scalable_allocator::value_type" ref="5a1cf13c339ee177a103a7e19bf2710a" args="" -->
+typedef internal::allocator_type&lt;<br>
+ T &gt;::value_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5121ec62bc79faba6a4b674d59e7260"></a><!-- doxytag: member="tbb::scalable_allocator::pointer" ref="a5121ec62bc79faba6a4b674d59e7260" args="" -->
+typedef value_type *&nbsp;</td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="846a6fcec3bc7fa3839a12266a729a02"></a><!-- doxytag: member="tbb::scalable_allocator::const_pointer" ref="846a6fcec3bc7fa3839a12266a729a02" args="" -->
+typedef const value_type *&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="254d7749de9277bb7711470c04d963ea"></a><!-- doxytag: member="tbb::scalable_allocator::reference" ref="254d7749de9277bb7711470c04d963ea" args="" -->
+typedef value_type &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="acad193a7f6e16253f772ba3e9b2c98f"></a><!-- doxytag: member="tbb::scalable_allocator::const_reference" ref="acad193a7f6e16253f772ba3e9b2c98f" args="" -->
+typedef const value_type &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4a5cb7482f222a14b513bbdd4ad8507d"></a><!-- doxytag: member="tbb::scalable_allocator::size_type" ref="4a5cb7482f222a14b513bbdd4ad8507d" args="" -->
+typedef size_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cb96c23f650cf91a73e2810b54c481bb"></a><!-- doxytag: member="tbb::scalable_allocator::difference_type" ref="cb96c23f650cf91a73e2810b54c481bb" args="" -->
+typedef ptrdiff_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="eee1873729ed05c7f92544c3ff0c08bc"></a><!-- doxytag: member="tbb::scalable_allocator::scalable_allocator" ref="eee1873729ed05c7f92544c3ff0c08bc" args="(const scalable_allocator &amp;)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>scalable_allocator</b> (const <a class="el" href="a00158.html">scalable_allocator</a> &amp;)  throw ()</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="d56dc9f231c59f912297ac3c3b3b93b6"></a><!-- doxytag: member="tbb::scalable_allocator::scalable_allocator" ref="d56dc9f231c59f912297ac3c3b3b93b6" args="(const scalable_allocator&lt; U &gt; &amp;)" -->
+template&lt;typename U&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>scalable_allocator</b> (const <a class="el" href="a00158.html">scalable_allocator</a>&lt; U &gt; &amp;)  throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="78fa13a188b542ea724d45a9dbf5a071"></a><!-- doxytag: member="tbb::scalable_allocator::address" ref="78fa13a188b542ea724d45a9dbf5a071" args="(reference x) const " -->
+pointer&nbsp;</td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="14be4ad8eb478c87e240e605221ab455"></a><!-- doxytag: member="tbb::scalable_allocator::address" ref="14be4ad8eb478c87e240e605221ab455" args="(const_reference x) const " -->
+const_pointer&nbsp;</td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="726b1586d05d44665a36e1c7b2699bfd"></a><!-- doxytag: member="tbb::scalable_allocator::allocate" ref="726b1586d05d44665a36e1c7b2699bfd" args="(size_type n, const void *=0)" -->
+pointer&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a> (size_type n, const void *=0)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Allocate space for n objects. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f806a238c18cbcfb531e1e0a0d2ec59d"></a><!-- doxytag: member="tbb::scalable_allocator::deallocate" ref="f806a238c18cbcfb531e1e0a0d2ec59d" args="(pointer p, size_type)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a> (pointer p, size_type)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Free previously allocated block of memory. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="880e766f1d913988c21973dbdd874fd5"></a><!-- doxytag: member="tbb::scalable_allocator::max_size" ref="880e766f1d913988c21973dbdd874fd5" args="() const " -->
+size_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#880e766f1d913988c21973dbdd874fd5">max_size</a> () const   throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Largest value for which method allocate might succeed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5a9891a26790b98e9b9a68dad875faa8"></a><!-- doxytag: member="tbb::scalable_allocator::construct" ref="5a9891a26790b98e9b9a68dad875faa8" args="(pointer p, const value_type &amp;val)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const value_type &amp;val)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="743f878b04a492bf7ae0e82a64dc20c8"></a><!-- doxytag: member="tbb::scalable_allocator::destroy" ref="743f878b04a492bf7ae0e82a64dc20c8" args="(pointer p)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>destroy</b> (pointer p)</td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename T&gt;<br>
+ class tbb::scalable_allocator&lt; T &gt;</h3>
+
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
+<p>
+The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00351.html">scalable_allocator.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00159.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00159.html
new file mode 100644 (file)
index 0000000..5486048
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::scalable_allocator&lt; void &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00159.html">scalable_allocator&lt; void &gt;</a></div>
+<h1>tbb::scalable_allocator&lt; void &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::scalable_allocator&lt; void &gt;" -->Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00351.html">scalable_allocator.h</a>&gt;</code>
+<p>
+<a href="a00055.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2046816029c2c7856f7684aed2af9cff"></a><!-- doxytag: member="tbb::scalable_allocator&lt; void &gt;::pointer" ref="2046816029c2c7856f7684aed2af9cff" args="" -->
+typedef void *&nbsp;</td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="591c568d23f8aadf6ea8d1dc939c4e75"></a><!-- doxytag: member="tbb::scalable_allocator&lt; void &gt;::const_pointer" ref="591c568d23f8aadf6ea8d1dc939c4e75" args="" -->
+typedef const void *&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="64dbab666af0740c30b77edac9f157ce"></a><!-- doxytag: member="tbb::scalable_allocator&lt; void &gt;::value_type" ref="64dbab666af0740c30b77edac9f157ce" args="" -->
+typedef void&nbsp;</td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;&gt;<br>
+ class tbb::scalable_allocator&lt; void &gt;</h3>
+
+Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00351.html">scalable_allocator.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00160.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00160.html
new file mode 100644 (file)
index 0000000..740685d
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::simple_partitioner Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00160.html">simple_partitioner</a></div>
+<h1>tbb::simple_partitioner Class Reference<br>
+<small>
+[<a class="el" href="a00233.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::simple_partitioner" -->A simple partitioner.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00342.html">partitioner.h</a>&gt;</code>
+<p>
+<a href="a00039.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::simple_partitioner::internal::start_for" ref="a47f7e0208a2bf68f35b51b27d2ddf2a" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8f710e431b62c2a48914bd99d0fe034"></a><!-- doxytag: member="tbb::simple_partitioner::internal::start_reduce" ref="e8f710e431b62c2a48914bd99d0fe034" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::start_reduce</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="76d97ae6ad98db0acfc8ed8cb7c76705"></a><!-- doxytag: member="tbb::simple_partitioner::internal::start_scan" ref="76d97ae6ad98db0acfc8ed8cb7c76705" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><b>partition_type</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A simple partitioner. 
+<p>
+Divides the range until the range is not divisible. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00342.html">partitioner.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00161.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00161.html
new file mode 100644 (file)
index 0000000..34cf476
--- /dev/null
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::spin_mutex Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00161.html">spin_mutex</a></div>
+<h1>tbb::spin_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00236.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::spin_mutex" -->A lock that occupies a single byte.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00352.html">spin_mutex.h</a>&gt;</code>
+<p>
+<a href="a00057.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct unacquired lock.  <a href="#3d8fb44644fd8d41ada1fbeba7409be3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b3fa21632815f8fab2fd6c67ec0d48c"></a><!-- doxytag: member="tbb::spin_mutex::internal_construct" ref="4b3fa21632815f8fab2fd6c67ec0d48c" args="()" -->
+void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4f748989e19b6045e3a2d2ee73626a28"></a><!-- doxytag: member="tbb::spin_mutex::lock" ref="4f748989e19b6045e3a2d2ee73626a28" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#4f748989e19b6045e3a2d2ee73626a28">lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#8f9a58fb56a2b4c5efe1a7f7c1ae2074"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0e843ee6265f57f27d228ba91e7308ef"></a><!-- doxytag: member="tbb::spin_mutex::unlock" ref="0e843ee6265f57f27d228ba91e7308ef" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html#0e843ee6265f57f27d228ba91e7308ef">unlock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock. <br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5a7c93ca9e7ab656037a43984f24c051"></a><!-- doxytag: member="tbb::spin_mutex::is_rw_mutex" ref="5a7c93ca9e7ab656037a43984f24c051" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a967c455d0d80c9bbe030905201391b6"></a><!-- doxytag: member="tbb::spin_mutex::is_recursive_mutex" ref="a967c455d0d80c9bbe030905201391b6" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ec12e4036073fb684b6d2d33493ed0aa"></a><!-- doxytag: member="tbb::spin_mutex::is_fair_mutex" ref="ec12e4036073fb684b6d2d33493ed0aa" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock" ref="a36f15b770a1bb0b56e33d7fa75ebd1a" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00162.html#_details">More...</a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A lock that occupies a single byte. 
+<p>
+A <a class="el" href="a00161.html">spin_mutex</a> is a spin mutex that fits in a single byte. It should be used only for locking short critical sections (typically &lt;20 instructions) when fairness is not an issue. If zero-initialized, the mutex is considered unheld. 
+<p>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="3d8fb44644fd8d41ada1fbeba7409be3"></a><!-- doxytag: member="tbb::spin_mutex::spin_mutex" ref="3d8fb44644fd8d41ada1fbeba7409be3" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::spin_mutex::spin_mutex           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Construct unacquired lock. 
+<p>
+Equivalent to zero-initialization of *this. 
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="8f9a58fb56a2b4c5efe1a7f7c1ae2074"></a><!-- doxytag: member="tbb::spin_mutex::try_lock" ref="8f9a58fb56a2b4c5efe1a7f7c1ae2074" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_mutex::try_lock           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Try acquiring lock (non-blocking). 
+<p>
+Return true if lock acquired; false otherwise. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00352.html">spin_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00162.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00162.html
new file mode 100644 (file)
index 0000000..baa3982
--- /dev/null
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::spin_mutex::scoped_lock Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00161.html">spin_mutex</a>::<a class="el" href="a00162.html">scoped_lock</a></div>
+<h1>tbb::spin_mutex::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::spin_mutex::scoped_lock" -->Represents acquisition of a mutex.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00352.html">spin_mutex.h</a>&gt;</code>
+<p>
+<a href="a00058.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="29ae680ae7f5e685c2e15535b9c855b3"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::scoped_lock" ref="29ae680ae7f5e685c2e15535b9c855b3" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct without acquiring a mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5ce6807050a9e8f87bcb4a65dccb12ef"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::scoped_lock" ref="5ce6807050a9e8f87bcb4a65dccb12ef" args="(spin_mutex &amp;m)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a> (<a class="el" href="a00161.html">spin_mutex</a> &amp;m)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct and acquire lock on a mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ee3c338732b1f64b0b32a757807a30d"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::acquire" ref="3ee3c338732b1f64b0b32a757807a30d" args="(spin_mutex &amp;m)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a> (<a class="el" href="a00161.html">spin_mutex</a> &amp;m)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a> (<a class="el" href="a00161.html">spin_mutex</a> &amp;m)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Try acquiring lock (non-blocking).  <a href="#9297ec188534b45dc0ca48f2f39a0501"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="eeb615e68e963e6bf8d9c11402d0ce8e"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::release" ref="eeb615e68e963e6bf8d9c11402d0ce8e" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ac6fa425d1f06c56d8b70abc51aac844"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::~scoped_lock" ref="ac6fa425d1f06c56d8b70abc51aac844" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy lock. If holding a lock, releases the lock first. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6ee2a2cdaf6a2128849e7d7723d9174f"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::spin_mutex" ref="6ee2a2cdaf6a2128849e7d7723d9174f" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>spin_mutex</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Represents acquisition of a mutex. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="9297ec188534b45dc0ca48f2f39a0501"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::try_acquire" ref="9297ec188534b45dc0ca48f2f39a0501" args="(spin_mutex &amp;m)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_mutex::scoped_lock::try_acquire           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00161.html">spin_mutex</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>m</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Try acquiring lock (non-blocking). 
+<p>
+Return true if lock acquired; false otherwise. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00352.html">spin_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00163.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00163.html
new file mode 100644 (file)
index 0000000..69e8010
--- /dev/null
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::spin_rw_mutex_v3 Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00163.html">spin_rw_mutex_v3</a></div>
+<h1>tbb::spin_rw_mutex_v3 Class Reference<br>
+<small>
+[<a class="el" href="a00236.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::spin_rw_mutex_v3" -->Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00353.html">spin_rw_mutex.h</a>&gt;</code>
+<p>
+<a href="a00059.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="61332b2756de89f3f5f69310cbb6e70c"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::spin_rw_mutex_v3" ref="61332b2756de89f3f5f69310cbb6e70c" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9a815fb2759e55072ed413f1b6970cf3"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::~spin_rw_mutex_v3" ref="9a815fb2759e55072ed413f1b6970cf3" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#9a815fb2759e55072ed413f1b6970cf3">~spin_rw_mutex_v3</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destructor asserts if the mutex is acquired, i.e. state is zero. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4007d6e1523dbc3c2bb7f889ab789a8a"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::lock" ref="4007d6e1523dbc3c2bb7f889ab789a8a" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#4007d6e1523dbc3c2bb7f889ab789a8a">lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire writer lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#088bb256be794cc47d3b83791632fdfc">try_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Try acquiring writer lock (non-blocking).  <a href="#088bb256be794cc47d3b83791632fdfc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f9f52ead2098eb5fb12da59d5ae53b55"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::unlock" ref="f9f52ead2098eb5fb12da59d5ae53b55" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#f9f52ead2098eb5fb12da59d5ae53b55">unlock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="13f799708ac4ca437a16be202e263e18"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::lock_read" ref="13f799708ac4ca437a16be202e263e18" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#13f799708ac4ca437a16be202e263e18">lock_read</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire reader lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#b8667415869013f840d976aa406d385a">try_lock_read</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Try acquiring reader lock (non-blocking).  <a href="#b8667415869013f840d976aa406d385a"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4c1e60f22c01604ca93c41b8334cc15e"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::is_rw_mutex" ref="4c1e60f22c01604ca93c41b8334cc15e" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="681a816fe76d6ca7752303f9dcc3c4b2"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::is_recursive_mutex" ref="681a816fe76d6ca7752303f9dcc3c4b2" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4dd66d90df6247da6050e88b2aa3b820"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::is_fair_mutex" ref="4dd66d90df6247da6050e88b2aa3b820" args="" -->
+static const bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The scoped locking pattern.  <a href="a00164.html#_details">More...</a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Fast, unfair, spinning reader-writer lock with backoff and writer-preference. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="088bb256be794cc47d3b83791632fdfc"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::try_lock" ref="088bb256be794cc47d3b83791632fdfc" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_rw_mutex_v3::try_lock           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Try acquiring writer lock (non-blocking). 
+<p>
+Return true if lock acquired; false otherwise. 
+</div>
+</div><p>
+<a class="anchor" name="b8667415869013f840d976aa406d385a"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::try_lock_read" ref="b8667415869013f840d976aa406d385a" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_rw_mutex_v3::try_lock_read           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Try acquiring reader lock (non-blocking). 
+<p>
+Return true if reader lock acquired; false otherwise. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00353.html">spin_rw_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00164.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00164.html
new file mode 100644 (file)
index 0000000..7047970
--- /dev/null
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::spin_rw_mutex_v3::scoped_lock Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00163.html">spin_rw_mutex_v3</a>::<a class="el" href="a00164.html">scoped_lock</a></div>
+<h1>tbb::spin_rw_mutex_v3::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::spin_rw_mutex_v3::scoped_lock" -->The scoped locking pattern.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00353.html">spin_rw_mutex.h</a>&gt;</code>
+<p>
+<a href="a00060.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#d6ea60dee5563f702379bf5e51aa8806">scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct lock that has not acquired a mutex.  <a href="#d6ea60dee5563f702379bf5e51aa8806"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a> (<a class="el" href="a00163.html">spin_rw_mutex</a> &amp;m, bool write=true)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock on given mutex.  <a href="#42a92d4f8fdde425b111cfa8a9228071"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d7eaaa3f2e2c5dc11e7005811b1bdd04"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::~scoped_lock" ref="d7eaaa3f2e2c5dc11e7005811b1bdd04" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">~scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b0b646ec5be02a127d159bbb7ca65353"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::acquire" ref="b0b646ec5be02a127d159bbb7ca65353" args="(spin_rw_mutex &amp;m, bool write=true)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a> (<a class="el" href="a00163.html">spin_rw_mutex</a> &amp;m, bool write=true)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#3f0b1e3f2efab63336400348bd070226">upgrade_to_writer</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Upgrade reader to become a writer.  <a href="#3f0b1e3f2efab63336400348bd070226"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="61b14d00a78185c9b2d206ebfc379124"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::release" ref="61b14d00a78185c9b2d206ebfc379124" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#61b14d00a78185c9b2d206ebfc379124">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c2c2c38a08cb9080e87099fac3e5bc94"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::downgrade_to_reader" ref="c2c2c38a08cb9080e87099fac3e5bc94" args="()" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#c2c2c38a08cb9080e87099fac3e5bc94">downgrade_to_reader</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Downgrade writer to become a reader. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9879626968d9b9a04cd2ec0fb2e84ae1"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::try_acquire" ref="9879626968d9b9a04cd2ec0fb2e84ae1" args="(spin_rw_mutex &amp;m, bool write=true)" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a> (<a class="el" href="a00163.html">spin_rw_mutex</a> &amp;m, bool write=true)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The scoped locking pattern. 
+<p>
+It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
+<p>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="d6ea60dee5563f702379bf5e51aa8806"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock" ref="d6ea60dee5563f702379bf5e51aa8806" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Construct lock that has not acquired a mutex. 
+<p>
+Equivalent to zero-initialization of *this. 
+</div>
+</div><p>
+<a class="anchor" name="42a92d4f8fdde425b111cfa8a9228071"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock" ref="42a92d4f8fdde425b111cfa8a9228071" args="(spin_rw_mutex &amp;m, bool write=true)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00163.html">spin_rw_mutex</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&nbsp;</td>
+          <td class="paramname"> <em>write</em> = <code>true</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Acquire lock on given mutex. 
+<p>
+Upon entry, *this should not be in the "have acquired a mutex" state. 
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="3f0b1e3f2efab63336400348bd070226"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer" ref="3f0b1e3f2efab63336400348bd070226" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Upgrade reader to become a writer. 
+<p>
+Returns true if the upgrade happened without re-acquiring the lock and false if opposite 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00353.html">spin_rw_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00165.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00165.html
new file mode 100644 (file)
index 0000000..75b3c13
--- /dev/null
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::split Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00165.html">split</a></div>
+<h1>tbb::split Class Reference<br>
+<small>
+[<a class="el" href="a00233.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::split" -->Dummy type that distinguishes splitting constructor from copy constructor.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00386.html">tbb_stddef.h</a>&gt;</code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Dummy type that distinguishes splitting constructor from copy constructor. 
+<p>
+See description of parallel_for and parallel_reduce for example usages. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00386.html">tbb_stddef.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00166.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00166.html
new file mode 100644 (file)
index 0000000..dde8f21
--- /dev/null
@@ -0,0 +1,699 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::task Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00166.html">task</a></div>
+<h1>tbb::task Class Reference<br>
+<small>
+[<a class="el" href="a00238.html">Task Scheduling</a>]</small>
+</h1><!-- doxytag: class="tbb::task" -->Base class for user-defined tasks.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00354.html">task.h</a>&gt;</code>
+<p>
+Inherited by <a class="el" href="a00137.html">tbb::empty_task</a>, tbb::internal::function_task&lt; F &gt;, and tbb::internal::task_handle_task&lt; F &gt;.
+<p>
+Inheritance diagram for tbb::task:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00063.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef internal::intptr&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#d8815c39bb61bd7e2d2691c476ed03b9">depth_type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A scheduling depth.  <a href="#d8815c39bb61bd7e2d2691c476ed03b9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef internal::affinity_id&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An id as used for specifying affinity.  <a href="#d61bb32389d3857bf7511d69beaafb76"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task is running, and will be destroyed after method <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> completes.  <a href="#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task to be rescheduled.  <a href="#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task is in ready pool, or is going to be put there, or was just taken off.  <a href="#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task object is freshly allocated or recycled.  <a href="#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task object is on free list, or is going to be put there, or was just taken off.  <a href="#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task to be recycled as continuation  <a href="#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a> { <br>
+&nbsp;&nbsp;<a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a>, 
+<a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a>, 
+<a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a>, 
+<a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a>, 
+<br>
+&nbsp;&nbsp;<a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a>, 
+<a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a>
+<br>
+ }</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enumeration of task states that the scheduler considers.  <a href="a00166.html#4a3c415562d17905390ea5b49d12293e">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="98245ee0473f84cb19dbbf8c81134908"></a><!-- doxytag: member="tbb::task::~task" ref="98245ee0473f84cb19dbbf8c81134908" args="()" -->
+virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">~task</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="22c298cd40937a431a06777423f002f6"></a><!-- doxytag: member="tbb::task::execute" ref="22c298cd40937a431a06777423f002f6" args="()=0" -->
+virtual <a class="el" href="a00166.html">task</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute</a> ()=0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Should be overridden by derived classes. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">internal::allocate_continuation_proxy &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#1434c79a5138993269d034008bff7329">allocate_continuation</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns proxy for overloaded new that allocates a continuation task of *this.  <a href="#1434c79a5138993269d034008bff7329"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1ff794f7053cd9148d5f280fbf07377f"></a><!-- doxytag: member="tbb::task::allocate_child" ref="1ff794f7053cd9148d5f280fbf07377f" args="()" -->
+internal::allocate_child_proxy &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns proxy for overloaded new that allocates a child task of *this. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">internal::allocate_additional_child_of_proxy&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">allocate_additional_child_of</a> (<a class="el" href="a00166.html">task</a> &amp;t)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Like allocate_child, except that task's parent becomes "t", not this.  <a href="#43bfe64c0e9333c0ca895cc0c375512b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a> (<a class="el" href="a00166.html">task</a> &amp;victim)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy a task.  <a href="#a57def00c8e9d932dbea0b3ee23991b9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Change this to be a continuation of its former self.  <a href="#a67a79e18f62b43a623a00cfbd76db4c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Recommended to use, safe variant of recycle_as_continuation.  <a href="#3b290d14109704e2b69dc1ac980a7a76"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="db399855177438bbc9cc61d508dae8d2"></a><!-- doxytag: member="tbb::task::recycle_as_child_of" ref="db399855177438bbc9cc61d508dae8d2" args="(task &amp;new_parent)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a> (<a class="el" href="a00166.html">task</a> &amp;new_parent)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Change this to be a child of new_parent. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Schedule this for reexecution after current <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> returns.  <a href="#4f1be9bbcdb487830dbe298b68d85144"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7653ceef53a188d05b5c779e1104b698"></a><!-- doxytag: member="tbb::task::depth" ref="7653ceef53a188d05b5c779e1104b698" args="() const " -->
+intptr_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>depth</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e864e9c80e3d79f00d77fb99f4757621"></a><!-- doxytag: member="tbb::task::set_depth" ref="e864e9c80e3d79f00d77fb99f4757621" args="(intptr_t)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>set_depth</b> (intptr_t)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c83fcc26f6513f0e06de70cbab9dee46"></a><!-- doxytag: member="tbb::task::add_to_depth" ref="c83fcc26f6513f0e06de70cbab9dee46" args="(int)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>add_to_depth</b> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5be823a972b3c3b9901c5963eeb050fd"></a><!-- doxytag: member="tbb::task::depth" ref="5be823a972b3c3b9901c5963eeb050fd" args="() const " -->
+<a class="el" href="a00166.html#d8815c39bb61bd7e2d2691c476ed03b9">depth_type</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#5be823a972b3c3b9901c5963eeb050fd">depth</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Scheduling depth. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#fc4d4e61a56823aa1efdbb5d59e42973">set_depth</a> (<a class="el" href="a00166.html#d8815c39bb61bd7e2d2691c476ed03b9">depth_type</a> new_depth)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set scheduling depth to given value.  <a href="#fc4d4e61a56823aa1efdbb5d59e42973"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#b0f98c633647fc73b978fe4cd2277ac4">add_to_depth</a> (int delta)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Change scheduling depth by given amount.  <a href="#b0f98c633647fc73b978fe4cd2277ac4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="06a4206a57e8e12a439b14d6d41cfd92"></a><!-- doxytag: member="tbb::task::set_ref_count" ref="06a4206a57e8e12a439b14d6d41cfd92" args="(int count)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a> (int count)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set reference count. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Atomically increment reference count.  <a href="#f5fb43c7ad0de5a4b95703cebc39e345"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Atomically decrement reference count.  <a href="#ef4680f5c148020c5e7e43ddef44cd5d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#f7737143d458f1ed1c0d7da3971d9e6b">spawn</a> (<a class="el" href="a00166.html">task</a> &amp;child)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Schedule task for execution when a worker becomes available.  <a href="#f7737143d458f1ed1c0d7da3971d9e6b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#db841c647eb6d754440c2f4e4a73c80b">spawn</a> (<a class="el" href="a00168.html">task_list</a> &amp;list)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Spawn multiple tasks and clear list.  <a href="#db841c647eb6d754440c2f4e4a73c80b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ce28ca9baa771cfc37ecd72e69c4f3c"></a><!-- doxytag: member="tbb::task::spawn_and_wait_for_all" ref="3ce28ca9baa771cfc37ecd72e69c4f3c" args="(task &amp;child)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a> (<a class="el" href="a00166.html">task</a> &amp;child)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Similar to spawn followed by wait_for_all, but more efficient. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="894ab68378e502776d8220eea7ce9fa1"></a><!-- doxytag: member="tbb::task::spawn_and_wait_for_all" ref="894ab68378e502776d8220eea7ce9fa1" args="(task_list &amp;list)" -->
+void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a> (<a class="el" href="a00168.html">task_list</a> &amp;list)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Similar to spawn followed by wait_for_all, but more efficient. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wait for reference count to become one, and set reference count to zero.  <a href="#53d2615ad9c38859b4c8080936600283"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="314e98ee4347ccec83efcb9ee22e8596"></a><!-- doxytag: member="tbb::task::parent" ref="314e98ee4347ccec83efcb9ee22e8596" args="() const " -->
+<a class="el" href="a00166.html">task</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#314e98ee4347ccec83efcb9ee22e8596">parent</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task on whose behalf this task is working, or NULL if this is a root. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d8c36a93f3972590fbb65ff1cef3173b"></a><!-- doxytag: member="tbb::task::context" ref="d8c36a93f3972590fbb65ff1cef3173b" args="()" -->
+<a class="el" href="a00167.html">task_group_context</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#d8c36a93f3972590fbb65ff1cef3173b">context</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Shared context that is used to communicate asynchronous state changes. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f9169402702f56bf519448aaf34450aa"></a><!-- doxytag: member="tbb::task::is_stolen_task" ref="f9169402702f56bf519448aaf34450aa" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if task is owned by different thread than thread that owns its parent. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0af7b2d7e6e8b4333b2accfce3dfb374"></a><!-- doxytag: member="tbb::task::state" ref="0af7b2d7e6e8b4333b2accfce3dfb374" args="() const " -->
+<a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Current execution state. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ad774f55eaec008ae02b236423209ced"></a><!-- doxytag: member="tbb::task::ref_count" ref="ad774f55eaec008ae02b236423209ced" args="() const " -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#ad774f55eaec008ae02b236423209ced">ref_count</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The internal reference count. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c26718b3b247cd13deb1a741902e7105"></a><!-- doxytag: member="tbb::task::is_owned_by_current_thread" ref="c26718b3b247cd13deb1a741902e7105" args="() const " -->
+bool __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if this task is owned by the calling thread; false otherwise. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dca19d7a45487a7d67a0db517e2b57c9"></a><!-- doxytag: member="tbb::task::set_affinity" ref="dca19d7a45487a7d67a0db517e2b57c9" args="(affinity_id id)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a> (<a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set affinity for this task. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3a920a56b0bcf2801518fb45b2c9d2be"></a><!-- doxytag: member="tbb::task::affinity" ref="3a920a56b0bcf2801518fb45b2c9d2be" args="() const " -->
+<a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Current affinity of this task. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a> (<a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Invoked by scheduler to notify task that it ran on unexpected thread.  <a href="#713c338c8eeaebdc5a6b10a69c039b06"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initiates cancellation of all tasks in this cancellation group and its subordinate groups.  <a href="#0f3fb4aac549ab642022450a4bd13326"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="025f18118c057c4c8db87ff2ce8df975"></a><!-- doxytag: member="tbb::task::is_cancelled" ref="025f18118c057c4c8db87ff2ce8df975" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns true if the context received cancellation request. <br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="23acb0da0afd690da797f9f882027d34"></a><!-- doxytag: member="tbb::task::allocate_root" ref="23acb0da0afd690da797f9f882027d34" args="()" -->
+static internal::allocate_root_proxy&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#23acb0da0afd690da797f9f882027d34">allocate_root</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns proxy for overloaded new that allocates a root task. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8ccc518caf31075a3e073996d2d240a4"></a><!-- doxytag: member="tbb::task::allocate_root" ref="8ccc518caf31075a3e073996d2d240a4" args="(task_group_context &amp;ctx)" -->
+static internal::allocate_root_with_context_proxy&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a> (<a class="el" href="a00167.html">task_group_context</a> &amp;ctx)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns proxy for overloaded new that allocates a root task associated with user supplied context. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a> (<a class="el" href="a00166.html">task</a> &amp;root)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Spawn task allocated by allocate_root, wait for it to complete, and deallocate it.  <a href="#ce8ce689c26a4ddf343829bc3c73290a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a> (<a class="el" href="a00168.html">task_list</a> &amp;root_list)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Spawn root tasks on list and wait for all of them to finish.  <a href="#c33c7edbaec67aa8a56f48986a9dc69f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bd43e8d6249738efafd12d6a4c72c5e3"></a><!-- doxytag: member="tbb::task::self" ref="bd43e8d6249738efafd12d6a4c72c5e3" args="()" -->
+static <a class="el" href="a00166.html">task</a> &amp;__TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The innermost task being executed or destroyed by the current thread at the moment. <br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2bce8ec6e44706e70128f5cf91b76e67"></a><!-- doxytag: member="tbb::task::task" ref="2bce8ec6e44706e70128f5cf91b76e67" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">task</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5eabadbca46f93ce6fb08290e85a0a65"></a><!-- doxytag: member="tbb::task::task_list" ref="5eabadbca46f93ce6fb08290e85a0a65" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>task_list</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e296810002652d771f692e20ca87e898"></a><!-- doxytag: member="tbb::task::internal::scheduler" ref="e296810002652d771f692e20ca87e898" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::scheduler</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="387b945c106854e1ed525f0668092930"></a><!-- doxytag: member="tbb::task::internal::allocate_root_proxy" ref="387b945c106854e1ed525f0668092930" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::allocate_root_proxy</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ecedb9436fb30df30cb3a52c64bb97e5"></a><!-- doxytag: member="tbb::task::internal::allocate_root_with_context_proxy" ref="ecedb9436fb30df30cb3a52c64bb97e5" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::allocate_root_with_context_proxy</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9987b3b1174772e5e853bd94b9f15350"></a><!-- doxytag: member="tbb::task::internal::allocate_continuation_proxy" ref="9987b3b1174772e5e853bd94b9f15350" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::allocate_continuation_proxy</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1f9e255654086b52fe107e4d8bbc8b7d"></a><!-- doxytag: member="tbb::task::internal::allocate_child_proxy" ref="1f9e255654086b52fe107e4d8bbc8b7d" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::allocate_child_proxy</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0e99ce0045ea3c55d239f38ea026b8a7"></a><!-- doxytag: member="tbb::task::internal::allocate_additional_child_of_proxy" ref="0e99ce0045ea3c55d239f38ea026b8a7" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::allocate_additional_child_of_proxy</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bc65e26bdbb61f5e5a3d7ac92948bbd1"></a><!-- doxytag: member="tbb::task::internal::task_group_base" ref="bc65e26bdbb61f5e5a3d7ac92948bbd1" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::task_group_base</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Base class for user-defined tasks. 
+<p>
+<hr><h2>Member Typedef Documentation</h2>
+<a class="anchor" name="d61bb32389d3857bf7511d69beaafb76"></a><!-- doxytag: member="tbb::task::affinity_id" ref="d61bb32389d3857bf7511d69beaafb76" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef internal::affinity_id <a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">tbb::task::affinity_id</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+An id as used for specifying affinity. 
+<p>
+Guaranteed to be integral type. Value of 0 means no affinity. 
+</div>
+</div><p>
+<a class="anchor" name="d8815c39bb61bd7e2d2691c476ed03b9"></a><!-- doxytag: member="tbb::task::depth_type" ref="d8815c39bb61bd7e2d2691c476ed03b9" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef internal::intptr <a class="el" href="a00166.html#d8815c39bb61bd7e2d2691c476ed03b9">tbb::task::depth_type</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+A scheduling depth. 
+<p>
+Guaranteed to be a signed integral type. 
+</div>
+</div><p>
+<hr><h2>Member Enumeration Documentation</h2>
+<a class="anchor" name="4a3c415562d17905390ea5b49d12293e"></a><!-- doxytag: member="tbb::task::state_type" ref="4a3c415562d17905390ea5b49d12293e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">tbb::task::state_type</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Enumeration of task states that the scheduler considers. 
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9"></a><!-- doxytag: member="executing" ref="4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9" args="" -->executing</em>&nbsp;</td><td>
+task is running, and will be destroyed after method <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> completes. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513"></a><!-- doxytag: member="reexecute" ref="4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513" args="" -->reexecute</em>&nbsp;</td><td>
+task to be rescheduled. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a"></a><!-- doxytag: member="ready" ref="4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a" args="" -->ready</em>&nbsp;</td><td>
+task is in ready pool, or is going to be put there, or was just taken off. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c"></a><!-- doxytag: member="allocated" ref="4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c" args="" -->allocated</em>&nbsp;</td><td>
+task object is freshly allocated or recycled. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735"></a><!-- doxytag: member="freed" ref="4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735" args="" -->freed</em>&nbsp;</td><td>
+task object is on free list, or is going to be put there, or was just taken off. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d"></a><!-- doxytag: member="recycle" ref="4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d" args="" -->recycle</em>&nbsp;</td><td>
+task to be recycled as continuation </td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="b0f98c633647fc73b978fe4cd2277ac4"></a><!-- doxytag: member="tbb::task::add_to_depth" ref="b0f98c633647fc73b978fe4cd2277ac4" args="(int delta)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::add_to_depth           </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>delta</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Change scheduling depth by given amount. 
+<p>
+The resulting depth must be non-negative. 
+</div>
+</div><p>
+<a class="anchor" name="43bfe64c0e9333c0ca895cc0c375512b"></a><!-- doxytag: member="tbb::task::allocate_additional_child_of" ref="43bfe64c0e9333c0ca895cc0c375512b" args="(task &amp;t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">internal::allocate_additional_child_of_proxy tbb::task::allocate_additional_child_of           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00166.html">task</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>t</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Like allocate_child, except that task's parent becomes "t", not this. 
+<p>
+Typically used in conjunction with schedule_to_reexecute to implement while loops. Atomically increments the reference count of t.parent() 
+</div>
+</div><p>
+<a class="anchor" name="1434c79a5138993269d034008bff7329"></a><!-- doxytag: member="tbb::task::allocate_continuation" ref="1434c79a5138993269d034008bff7329" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">internal::allocate_continuation_proxy&amp; tbb::task::allocate_continuation           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Returns proxy for overloaded new that allocates a continuation task of *this. 
+<p>
+The continuation's parent becomes the parent of *this. 
+</div>
+</div><p>
+<a class="anchor" name="0f3fb4aac549ab642022450a4bd13326"></a><!-- doxytag: member="tbb::task::cancel_group_execution" ref="0f3fb4aac549ab642022450a4bd13326" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::task::cancel_group_execution           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Initiates cancellation of all tasks in this cancellation group and its subordinate groups. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>false if cancellation has already been requested, true otherwise. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ef4680f5c148020c5e7e43ddef44cd5d"></a><!-- doxytag: member="tbb::task::decrement_ref_count" ref="ef4680f5c148020c5e7e43ddef44cd5d" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int tbb::task::decrement_ref_count           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Atomically decrement reference count. 
+<p>
+Has release semanics. 
+</div>
+</div><p>
+<a class="anchor" name="a57def00c8e9d932dbea0b3ee23991b9"></a><!-- doxytag: member="tbb::task::destroy" ref="a57def00c8e9d932dbea0b3ee23991b9" args="(task &amp;victim)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task::destroy           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00166.html">task</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>victim</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Destroy a task. 
+<p>
+Usually, calling this method is unnecessary, because a task is implicitly deleted after its <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> method runs. However, sometimes a task needs to be explicitly deallocated, such as when a root task is used as the parent in spawn_and_wait_for_all. 
+</div>
+</div><p>
+<a class="anchor" name="f5fb43c7ad0de5a4b95703cebc39e345"></a><!-- doxytag: member="tbb::task::increment_ref_count" ref="f5fb43c7ad0de5a4b95703cebc39e345" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::increment_ref_count           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Atomically increment reference count. 
+<p>
+Has acquire semantics 
+</div>
+</div><p>
+<a class="anchor" name="713c338c8eeaebdc5a6b10a69c039b06"></a><!-- doxytag: member="tbb::task::note_affinity" ref="713c338c8eeaebdc5a6b10a69c039b06" args="(affinity_id id)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void __TBB_EXPORTED_METHOD tbb::task::note_affinity           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a>&nbsp;</td>
+          <td class="paramname"> <em>id</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Invoked by scheduler to notify task that it ran on unexpected thread. 
+<p>
+Invoked before method <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> runs, if task is stolen, or task has affinity but will be executed on another thread.<p>
+The default action does nothing. 
+</div>
+</div><p>
+<a class="anchor" name="a67a79e18f62b43a623a00cfbd76db4c"></a><!-- doxytag: member="tbb::task::recycle_as_continuation" ref="a67a79e18f62b43a623a00cfbd76db4c" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::recycle_as_continuation           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Change this to be a continuation of its former self. 
+<p>
+The caller must guarantee that the task's refcount does not become zero until after the method <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. Typically, this is done by having method <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> return a pointer to a child of the task. If the guarantee cannot be made, use method recycle_as_safe_continuation instead.<p>
+Because of the hazard, this method may be deprecated in the future. 
+</div>
+</div><p>
+<a class="anchor" name="3b290d14109704e2b69dc1ac980a7a76"></a><!-- doxytag: member="tbb::task::recycle_as_safe_continuation" ref="3b290d14109704e2b69dc1ac980a7a76" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::recycle_as_safe_continuation           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Recommended to use, safe variant of recycle_as_continuation. 
+<p>
+For safety, it requires additional increment of ref_count. 
+</div>
+</div><p>
+<a class="anchor" name="4f1be9bbcdb487830dbe298b68d85144"></a><!-- doxytag: member="tbb::task::recycle_to_reexecute" ref="4f1be9bbcdb487830dbe298b68d85144" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::recycle_to_reexecute           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Schedule this for reexecution after current <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. 
+<p>
+Requires that this.execute() be running. 
+</div>
+</div><p>
+<a class="anchor" name="fc4d4e61a56823aa1efdbb5d59e42973"></a><!-- doxytag: member="tbb::task::set_depth" ref="fc4d4e61a56823aa1efdbb5d59e42973" args="(depth_type new_depth)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::set_depth           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00166.html#d8815c39bb61bd7e2d2691c476ed03b9">depth_type</a>&nbsp;</td>
+          <td class="paramname"> <em>new_depth</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set scheduling depth to given value. 
+<p>
+The depth must be non-negative 
+</div>
+</div><p>
+<a class="anchor" name="db841c647eb6d754440c2f4e4a73c80b"></a><!-- doxytag: member="tbb::task::spawn" ref="db841c647eb6d754440c2f4e4a73c80b" args="(task_list &amp;list)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::spawn           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00168.html">task_list</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>list</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Spawn multiple tasks and clear list. 
+<p>
+All of the tasks must be at the same depth. 
+</div>
+</div><p>
+<a class="anchor" name="f7737143d458f1ed1c0d7da3971d9e6b"></a><!-- doxytag: member="tbb::task::spawn" ref="f7737143d458f1ed1c0d7da3971d9e6b" args="(task &amp;child)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::spawn           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00166.html">task</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>child</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Schedule task for execution when a worker becomes available. 
+<p>
+After all children spawned so far finish their method <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">task::execute</a>, their parent's method <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">task::execute</a> may start running. Therefore, it is important to ensure that at least one child has not completed until the parent is ready to run. 
+</div>
+</div><p>
+<a class="anchor" name="c33c7edbaec67aa8a56f48986a9dc69f"></a><!-- doxytag: member="tbb::task::spawn_root_and_wait" ref="c33c7edbaec67aa8a56f48986a9dc69f" args="(task_list &amp;root_list)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::spawn_root_and_wait           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00168.html">task_list</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>root_list</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline, static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Spawn root tasks on list and wait for all of them to finish. 
+<p>
+If there are more tasks than worker threads, the tasks are spawned in order of front to back. 
+</div>
+</div><p>
+<a class="anchor" name="ce8ce689c26a4ddf343829bc3c73290a"></a><!-- doxytag: member="tbb::task::spawn_root_and_wait" ref="ce8ce689c26a4ddf343829bc3c73290a" args="(task &amp;root)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void tbb::task::spawn_root_and_wait           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00166.html">task</a> &amp;&nbsp;</td>
+          <td class="paramname"> <em>root</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline, static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Spawn task allocated by allocate_root, wait for it to complete, and deallocate it. 
+<p>
+The thread that calls spawn_root_and_wait must be the same thread that allocated the task. 
+</div>
+</div><p>
+<a class="anchor" name="53d2615ad9c38859b4c8080936600283"></a><!-- doxytag: member="tbb::task::wait_for_all" ref="53d2615ad9c38859b4c8080936600283" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::task::wait_for_all           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Wait for reference count to become one, and set reference count to zero. 
+<p>
+Works on tasks while waiting. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00354.html">task.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00167.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00167.html
new file mode 100644 (file)
index 0000000..c2b33fc
--- /dev/null
@@ -0,0 +1,235 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::task_group_context Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00167.html">task_group_context</a></div>
+<h1>tbb::task_group_context Class Reference<br>
+<small>
+[<a class="el" href="a00238.html">Task Scheduling</a>]</small>
+</h1><!-- doxytag: class="tbb::task_group_context" -->Used to form groups of tasks.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00354.html">task.h</a>&gt;</code>
+<p>
+<a href="a00061.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5af85179a348162d4ddd66b6fc0d60fb4fda16c4f77defd3d0f6aad87fceed4"></a><!-- doxytag: member="tbb::task_group_context::isolated" ref="d5af85179a348162d4ddd66b6fc0d60fb4fda16c4f77defd3d0f6aad87fceed4" args="" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>isolated</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5af85179a348162d4ddd66b6fc0d60fc7f37e067ba1fca8a5c809d20522662b"></a><!-- doxytag: member="tbb::task_group_context::bound" ref="d5af85179a348162d4ddd66b6fc0d60fc7f37e067ba1fca8a5c809d20522662b" args="" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>bound</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8dce4661b346756cb4f584529ecd0ebf774f9c21343eba6303927b5ae0be44c"></a><!-- doxytag: member="tbb::task_group_context::exact_exception" ref="b8dce4661b346756cb4f584529ecd0ebf774f9c21343eba6303927b5ae0be44c" args="" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>exact_exception</b> = 0x0001ul &lt;&lt; traits_offset</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8dce4661b346756cb4f584529ecd0ebad65d11fe6fab6ecbb356464170f6a38"></a><!-- doxytag: member="tbb::task_group_context::no_cancellation" ref="b8dce4661b346756cb4f584529ecd0ebad65d11fe6fab6ecbb356464170f6a38" args="" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>no_cancellation</b> = 0x0002ul &lt;&lt; traits_offset</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8dce4661b346756cb4f584529ecd0eb4002d8f90c8c9f7c3f80ad349aee7cce"></a><!-- doxytag: member="tbb::task_group_context::concurrent_wait" ref="b8dce4661b346756cb4f584529ecd0eb4002d8f90c8c9f7c3f80ad349aee7cce" args="" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>concurrent_wait</b> = 0x0004ul &lt;&lt; traits_offset</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><b>default_traits</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><b>kind_type</b> { <b>isolated</b>, 
+<b>bound</b>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><b>traits_type</b> { <b>exact_exception</b> =  0x0001ul &lt;&lt; traits_offset, 
+<b>no_cancellation</b> =  0x0002ul &lt;&lt; traits_offset, 
+<b>concurrent_wait</b> =  0x0004ul &lt;&lt; traits_offset, 
+<b>default_traits</b>
+ }</td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a> (kind_type relation_with_parent=bound, uintptr_t traits=default_traits)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default &amp; binding constructor.  <a href="#19fee08fb8ac98adccfe69c1aa63c491"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Forcefully reinitializes the context after the task tree it was associated with is completed.  <a href="#6d30d16bf1cd22f86c6afaf29c2b430c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initiates cancellation of all tasks in this cancellation group and its subordinate groups.  <a href="#8bcdfdf4e6bfb76125b6de15c00b571d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4db72f16210b0a991b2c134d6763a4cc"></a><!-- doxytag: member="tbb::task_group_context::is_group_execution_cancelled" ref="4db72f16210b0a991b2c134d6763a4cc" args="() const " -->
+bool __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns true if the context received cancellation request. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Records the pending exception, and cancels the task group.  <a href="#d97c8a03615594b71b4ef06ff75cf561"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#49a55352084fd44b8863d182e839e6dc">init</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Out-of-line part of the constructor.  <a href="#49a55352084fd44b8863d182e839e6dc"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e656073628561c8fd68f6134d527e2de"></a><!-- doxytag: member="tbb::task_group_context::task" ref="e656073628561c8fd68f6134d527e2de" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>task</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ecedb9436fb30df30cb3a52c64bb97e5"></a><!-- doxytag: member="tbb::task_group_context::internal::allocate_root_with_context_proxy" ref="ecedb9436fb30df30cb3a52c64bb97e5" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::allocate_root_with_context_proxy</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Used to form groups of tasks. 
+<p>
+The context services explicit cancellation requests from user code, and unhandled exceptions intercepted during tasks execution. Intercepting an exception results in generating internal cancellation requests (which is processed in exactly the same way as external ones).<p>
+The context is associated with one or more root tasks and defines the cancellation group that includes all the descendants of the corresponding root task(s). Association is established when a context object is passed as an argument to the <a class="el" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root()</a> method. See <a class="el" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context::task_group_context</a> for more details.<p>
+The context can be bound to another one, and other contexts can be bound to it, forming a tree-like structure: parent -&gt; this -&gt; children. Arrows here designate cancellation propagation direction. If a task in a cancellation group is canceled all the other tasks in this group and groups bound to it (as children) get canceled too.<p>
+IMPLEMENTATION NOTE: When adding new members to <a class="el" href="a00167.html">task_group_context</a> or changing types of existing ones, update the size of both padding buffers (_leading_padding and _trailing_padding) appropriately. See also VERSIONING NOTE at the constructor definition below. 
+<p>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="19fee08fb8ac98adccfe69c1aa63c491"></a><!-- doxytag: member="tbb::task_group_context::task_group_context" ref="19fee08fb8ac98adccfe69c1aa63c491" args="(kind_type relation_with_parent=bound, uintptr_t traits=default_traits)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::task_group_context::task_group_context           </td>
+          <td>(</td>
+          <td class="paramtype">kind_type&nbsp;</td>
+          <td class="paramname"> <em>relation_with_parent</em> = <code>bound</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uintptr_t&nbsp;</td>
+          <td class="paramname"> <em>traits</em> = <code>default_traits</code></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Default &amp; binding constructor. 
+<p>
+By default a bound context is created. That is this context will be bound (as child) to the context of the task calling task::allocate_root(this_context) method. Cancellation requests passed to the parent context are propagated to all the contexts bound to it.<p>
+If task_group_context::isolated is used as the argument, then the tasks associated with this context will never be affected by events in any other context.<p>
+Creating isolated contexts involve much less overhead, but they have limited utility. Normally when an exception occurs in an algorithm that has nested ones running, it is desirably to have all the nested algorithms canceled as well. Such a behavior requires nested algorithms to use bound contexts.<p>
+There is one good place where using isolated algorithms is beneficial. It is a master thread. That is if a particular algorithm is invoked directly from the master thread (not from a TBB task), supplying it with explicitly created isolated context will result in a faster algorithm startup.<p>
+VERSIONING NOTE: Implementation(s) of <a class="el" href="a00167.html">task_group_context</a> constructor(s) cannot be made entirely out-of-line because the run-time version must be set by the user code. This will become critically important for binary compatibility, if we ever have to change the size of the context object.<p>
+Boosting the runtime version will also be necessary whenever new fields are introduced in the currently unused padding areas or the meaning of the existing fields is changed or extended. 
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="8bcdfdf4e6bfb76125b6de15c00b571d"></a><!-- doxytag: member="tbb::task_group_context::cancel_group_execution" ref="8bcdfdf4e6bfb76125b6de15c00b571d" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::task_group_context::cancel_group_execution           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Initiates cancellation of all tasks in this cancellation group and its subordinate groups. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>false if cancellation has already been requested, true otherwise.</dd></dl>
+Note that canceling never fails. When false is returned, it just means that another thread (or this one) has already sent cancellation request to this context or to one of its ancestors (if this context is bound). It is guaranteed that when this method is concurrently called on the same not yet cancelled context, true will be returned by one and only one invocation. 
+</div>
+</div><p>
+<a class="anchor" name="49a55352084fd44b8863d182e839e6dc"></a><!-- doxytag: member="tbb::task_group_context::init" ref="49a55352084fd44b8863d182e839e6dc" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::init           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [protected]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Out-of-line part of the constructor. 
+<p>
+Singled out to ensure backward binary compatibility of the future versions. 
+</div>
+</div><p>
+<a class="anchor" name="d97c8a03615594b71b4ef06ff75cf561"></a><!-- doxytag: member="tbb::task_group_context::register_pending_exception" ref="d97c8a03615594b71b4ef06ff75cf561" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::register_pending_exception           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Records the pending exception, and cancels the task group. 
+<p>
+May be called only from inside a catch-block. If the context is already canceled, does nothing. The method brings the task group associated with this context exactly into the state it would be in, if one of its tasks threw the currently pending exception during its execution. In other words, it emulates the actions of the scheduler's dispatch loop exception handler. 
+</div>
+</div><p>
+<a class="anchor" name="6d30d16bf1cd22f86c6afaf29c2b430c"></a><!-- doxytag: member="tbb::task_group_context::reset" ref="6d30d16bf1cd22f86c6afaf29c2b430c" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_group_context::reset           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Forcefully reinitializes the context after the task tree it was associated with is completed. 
+<p>
+Because the method assumes that all the tasks that used to be associated with this context have already finished, calling it while the context is still in use somewhere in the task hierarchy leads to undefined behavior.<p>
+IMPORTANT: This method is not thread safe!<p>
+The method does not change the context's parent if it is set. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00354.html">task.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00168.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00168.html
new file mode 100644 (file)
index 0000000..ed734cf
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::task_list Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00168.html">task_list</a></div>
+<h1>tbb::task_list Class Reference<br>
+<small>
+[<a class="el" href="a00238.html">Task Scheduling</a>]</small>
+</h1><!-- doxytag: class="tbb::task_list" -->A list of children.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00354.html">task.h</a>&gt;</code>
+<p>
+<a href="a00065.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="416341c2047eaef50417b41eaf7e9de6"></a><!-- doxytag: member="tbb::task_list::task_list" ref="416341c2047eaef50417b41eaf7e9de6" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html#416341c2047eaef50417b41eaf7e9de6">task_list</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct empty list. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6d438f1499a02db1e59c24ab6043e5ba"></a><!-- doxytag: member="tbb::task_list::~task_list" ref="6d438f1499a02db1e59c24ab6043e5ba" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroys the list, but does not destroy the task objects. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f3ac31e092814b90929f81bb30441959"></a><!-- doxytag: member="tbb::task_list::empty" ref="f3ac31e092814b90929f81bb30441959" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html#f3ac31e092814b90929f81bb30441959">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if list if empty; false otherwise. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4cd34756bc4763dafb8c84838a0124ff"></a><!-- doxytag: member="tbb::task_list::push_back" ref="4cd34756bc4763dafb8c84838a0124ff" args="(task &amp;task)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a> (<a class="el" href="a00166.html">task</a> &amp;<a class="el" href="a00166.html">task</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Push task onto back of list. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5fe85df5ed524418389d34051750347d"></a><!-- doxytag: member="tbb::task_list::pop_front" ref="5fe85df5ed524418389d34051750347d" args="()" -->
+<a class="el" href="a00166.html">task</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html#5fe85df5ed524418389d34051750347d">pop_front</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pop the front task from the list. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fce446ee13e025969945328f3ff59b95"></a><!-- doxytag: member="tbb::task_list::clear" ref="fce446ee13e025969945328f3ff59b95" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html#fce446ee13e025969945328f3ff59b95">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear the list. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e656073628561c8fd68f6134d527e2de"></a><!-- doxytag: member="tbb::task_list::task" ref="e656073628561c8fd68f6134d527e2de" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><b>task</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A list of children. 
+<p>
+Used for method task::spawn_children 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00354.html">task.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00169.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00169.html
new file mode 100644 (file)
index 0000000..628efdf
--- /dev/null
@@ -0,0 +1,164 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::task_scheduler_init Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00169.html">task_scheduler_init</a></div>
+<h1>tbb::task_scheduler_init Class Reference<br>
+<small>
+[<a class="el" href="a00238.html">Task Scheduling</a>]</small>
+</h1><!-- doxytag: class="tbb::task_scheduler_init" -->Class representing reference to tbb scheduler.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00371.html">task_scheduler_init.h</a>&gt;</code>
+<p>
+<a href="a00073.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#d476053cc712e572554823492a5229ce">initialize</a> (int number_of_threads=<a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Ensure that scheduler exists for this thread.  <a href="#d476053cc712e572554823492a5229ce"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#d5ed214a8bb53b0466ed91ff4734b9a3">initialize</a> (int number_of_threads, stack_size_type thread_stack_size)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The overloaded method with stack size parameter.  <a href="#d5ed214a8bb53b0466ed91ff4734b9a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f73257e04cb7fb9bd5be2b635d9016f1"></a><!-- doxytag: member="tbb::task_scheduler_init::terminate" ref="f73257e04cb7fb9bd5be2b635d9016f1" args="()" -->
+void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Inverse of method initialize. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="421600bf9bf9338bcf937063f2ff0e90"></a><!-- doxytag: member="tbb::task_scheduler_init::task_scheduler_init" ref="421600bf9bf9338bcf937063f2ff0e90" args="(int number_of_threads=automatic, stack_size_type thread_stack_size=0)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a> (int number_of_threads=<a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>, stack_size_type thread_stack_size=0)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Shorthand for default constructor followed by call to intialize(number_of_threads). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4da6c86292d80c703a66c1f6f5299488"></a><!-- doxytag: member="tbb::task_scheduler_init::~task_scheduler_init" ref="4da6c86292d80c703a66c1f6f5299488" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy scheduler for this thread if thread has no other live task_scheduler_inits. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="12752282977029f23416642bc03e8b74"></a><!-- doxytag: member="tbb::task_scheduler_init::is_active" ref="12752282977029f23416642bc03e8b74" args="() const " -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#12752282977029f23416642bc03e8b74">is_active</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns true if scheduler is active (initialized); false otherwise. <br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int __TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of threads tbb scheduler would create if initialized by default.  <a href="#ba00714c33a41a3c2216f48613971cab"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8f5988e2b0fbb2d533fcbb7f2583743f"></a><!-- doxytag: member="tbb::task_scheduler_init::automatic" ref="8f5988e2b0fbb2d533fcbb7f2583743f" args="" -->
+static const int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> = -1</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Typedef for number of threads that is automatic. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e6c860f1e559026ff3ef4599c0d6c514"></a><!-- doxytag: member="tbb::task_scheduler_init::deferred" ref="e6c860f1e559026ff3ef4599c0d6c514" args="" -->
+static const int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a> = -2</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Argument to <a class="el" href="a00169.html#d476053cc712e572554823492a5229ce">initialize()</a> or constructor that causes initialization to be deferred. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Class representing reference to tbb scheduler. 
+<p>
+A thread must construct a <a class="el" href="a00169.html">task_scheduler_init</a>, and keep it alive, during the time that it uses the services of class task. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="ba00714c33a41a3c2216f48613971cab"></a><!-- doxytag: member="tbb::task_scheduler_init::default_num_threads" ref="ba00714c33a41a3c2216f48613971cab" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int __TBB_EXPORTED_FUNC tbb::task_scheduler_init::default_num_threads           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Returns the number of threads tbb scheduler would create if initialized by default. 
+<p>
+Result returned by this method does not depend on whether the scheduler has already been initialized.<p>
+Because tbb 2.0 does not support blocking tasks yet, you may use this method to boost the number of threads in the tbb's internal pool, if your tasks are doing I/O operations. The optimal number of additional threads depends on how much time your tasks spend in the blocked state. 
+</div>
+</div><p>
+<a class="anchor" name="d5ed214a8bb53b0466ed91ff4734b9a3"></a><!-- doxytag: member="tbb::task_scheduler_init::initialize" ref="d5ed214a8bb53b0466ed91ff4734b9a3" args="(int number_of_threads, stack_size_type thread_stack_size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize           </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>number_of_threads</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">stack_size_type&nbsp;</td>
+          <td class="paramname"> <em>thread_stack_size</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The overloaded method with stack size parameter. 
+<p>
+Overloading is necessary to preserve ABI compatibility 
+</div>
+</div><p>
+<a class="anchor" name="d476053cc712e572554823492a5229ce"></a><!-- doxytag: member="tbb::task_scheduler_init::initialize" ref="d476053cc712e572554823492a5229ce" args="(int number_of_threads=automatic)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize           </td>
+          <td>(</td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>number_of_threads</em> = <code><a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a></code>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Ensure that scheduler exists for this thread. 
+<p>
+A value of -1 lets tbb decide on the number of threads, which is typically the number of hardware threads. For production code, the default value of -1 should be used, particularly if the client code is mixed with third party clients that might also use tbb.<p>
+The number_of_threads is ignored if any other task_scheduler_inits currently exist. A thread may construct multiple task_scheduler_inits. Doing so does no harm because the underlying scheduler is reference counted. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00371.html">task_scheduler_init.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00170.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00170.html
new file mode 100644 (file)
index 0000000..b4f5b8a
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::tbb_allocator&lt; T &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00170.html">tbb_allocator</a></div>
+<h1>tbb::tbb_allocator&lt; T &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::tbb_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00375.html">tbb_allocator.h</a>&gt;</code>
+<p>
+<a href="a00075.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3cdd9619bc0a802763e7823068f83a4c"></a><!-- doxytag: member="tbb::tbb_allocator::value_type" ref="3cdd9619bc0a802763e7823068f83a4c" args="" -->
+typedef internal::allocator_type&lt;<br>
+ T &gt;::value_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f979d0e74d7c6e5aeb0d26408776a9e1"></a><!-- doxytag: member="tbb::tbb_allocator::pointer" ref="f979d0e74d7c6e5aeb0d26408776a9e1" args="" -->
+typedef value_type *&nbsp;</td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1622504886ef265016a5821d61bf7adc"></a><!-- doxytag: member="tbb::tbb_allocator::const_pointer" ref="1622504886ef265016a5821d61bf7adc" args="" -->
+typedef const value_type *&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8e58d23c5c98fd65d4432c1e324f4c0"></a><!-- doxytag: member="tbb::tbb_allocator::reference" ref="b8e58d23c5c98fd65d4432c1e324f4c0" args="" -->
+typedef value_type &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="532f36f99650b1c26a2b8899383c5411"></a><!-- doxytag: member="tbb::tbb_allocator::const_reference" ref="532f36f99650b1c26a2b8899383c5411" args="" -->
+typedef const value_type &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="639df0fb169cfcb94ba1b12429b736f4"></a><!-- doxytag: member="tbb::tbb_allocator::size_type" ref="639df0fb169cfcb94ba1b12429b736f4" args="" -->
+typedef size_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="54828b5d0b937d608f76650a5df0e39f"></a><!-- doxytag: member="tbb::tbb_allocator::difference_type" ref="54828b5d0b937d608f76650a5df0e39f" args="" -->
+typedef ptrdiff_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="09a7f81fb2c3055aaecf058b11538544d524c717485b74aa552fb45b45562cb5"></a><!-- doxytag: member="tbb::tbb_allocator::scalable" ref="09a7f81fb2c3055aaecf058b11538544d524c717485b74aa552fb45b45562cb5" args="" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>scalable</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="09a7f81fb2c3055aaecf058b11538544e108c3168e3be5de1d98e74723136fbf"></a><!-- doxytag: member="tbb::tbb_allocator::standard" ref="09a7f81fb2c3055aaecf058b11538544e108c3168e3be5de1d98e74723136fbf" args="" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>standard</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> { <b>scalable</b>, 
+<b>standard</b>
+ }</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Specifies current allocator. <br></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d85cd071047b52eeb207d458d54098cc"></a><!-- doxytag: member="tbb::tbb_allocator::tbb_allocator" ref="d85cd071047b52eeb207d458d54098cc" args="(const tbb_allocator &amp;)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00170.html">tbb_allocator</a> &amp;)  throw ()</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="5c3cb04a50d15d38f4c66ca3e5d2f6af"></a><!-- doxytag: member="tbb::tbb_allocator::tbb_allocator" ref="5c3cb04a50d15d38f4c66ca3e5d2f6af" args="(const tbb_allocator&lt; U &gt; &amp;)" -->
+template&lt;typename U&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00170.html">tbb_allocator</a>&lt; U &gt; &amp;)  throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="08d3822344271d0a1c2e64e8c9c16b58"></a><!-- doxytag: member="tbb::tbb_allocator::address" ref="08d3822344271d0a1c2e64e8c9c16b58" args="(reference x) const " -->
+pointer&nbsp;</td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2b388f25858f783d995d61506de24656"></a><!-- doxytag: member="tbb::tbb_allocator::address" ref="2b388f25858f783d995d61506de24656" args="(const_reference x) const " -->
+const_pointer&nbsp;</td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6cb487b1bdce0b581f265a77dca6d53"></a><!-- doxytag: member="tbb::tbb_allocator::allocate" ref="f6cb487b1bdce0b581f265a77dca6d53" args="(size_type n, const void *=0)" -->
+pointer&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a> (size_type n, const void *=0)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Allocate space for n objects. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fdd011fdf2f9ad07006dc7c0a7ec1da2"></a><!-- doxytag: member="tbb::tbb_allocator::deallocate" ref="fdd011fdf2f9ad07006dc7c0a7ec1da2" args="(pointer p, size_type)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a> (pointer p, size_type)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Free previously allocated block of memory. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f059ca2c96243024f0d562ee3a87a3a5"></a><!-- doxytag: member="tbb::tbb_allocator::max_size" ref="f059ca2c96243024f0d562ee3a87a3a5" args="() const " -->
+size_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a> () const   throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Largest value for which method allocate might succeed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ab228ab9e324ed041c2226e1d717df5f"></a><!-- doxytag: member="tbb::tbb_allocator::construct" ref="ab228ab9e324ed041c2226e1d717df5f" args="(pointer p, const value_type &amp;value)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#ab228ab9e324ed041c2226e1d717df5f">construct</a> (pointer p, const value_type &amp;value)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy-construct value at location pointed to by p. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ef133522bf55f05a605bee0763208281"></a><!-- doxytag: member="tbb::tbb_allocator::destroy" ref="ef133522bf55f05a605bee0763208281" args="(pointer p)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#ef133522bf55f05a605bee0763208281">destroy</a> (pointer p)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy value at location pointed to by p. <br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="78701e7454ef8e1a25b5acd364367080"></a><!-- doxytag: member="tbb::tbb_allocator::allocator_type" ref="78701e7454ef8e1a25b5acd364367080" args="()" -->
+static <a class="el" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns current allocator. <br></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename T&gt;<br>
+ class tbb::tbb_allocator&lt; T &gt;</h3>
+
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
+<p>
+The class selects the best memory allocation mechanism available from scalable_malloc and standard malloc. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00375.html">tbb_allocator.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00171.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00171.html
new file mode 100644 (file)
index 0000000..e8203a3
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::tbb_allocator&lt; void &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00171.html">tbb_allocator&lt; void &gt;</a></div>
+<h1>tbb::tbb_allocator&lt; void &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::tbb_allocator&lt; void &gt;" -->Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00375.html">tbb_allocator.h</a>&gt;</code>
+<p>
+<a href="a00077.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05f5ff584890407c8d672e4b4378744d"></a><!-- doxytag: member="tbb::tbb_allocator&lt; void &gt;::pointer" ref="05f5ff584890407c8d672e4b4378744d" args="" -->
+typedef void *&nbsp;</td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="33e64ba71f06ef24a5093415185e66cb"></a><!-- doxytag: member="tbb::tbb_allocator&lt; void &gt;::const_pointer" ref="33e64ba71f06ef24a5093415185e66cb" args="" -->
+typedef const void *&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="81595a776b9d206a92caa526cad9c637"></a><!-- doxytag: member="tbb::tbb_allocator&lt; void &gt;::value_type" ref="81595a776b9d206a92caa526cad9c637" args="" -->
+typedef void&nbsp;</td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;&gt;<br>
+ class tbb::tbb_allocator&lt; void &gt;</h3>
+
+Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00375.html">tbb_allocator.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00172.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00172.html
new file mode 100644 (file)
index 0000000..e5aaf3d
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::tbb_exception Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00172.html">tbb_exception</a></div>
+<h1>tbb::tbb_exception Class Reference</h1><!-- doxytag: class="tbb::tbb_exception" -->Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00381.html">tbb_exception.h</a>&gt;</code>
+<p>
+Inherited by <a class="el" href="a00127.html">tbb::captured_exception</a>, and <a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a>.
+<p>
+Inheritance diagram for tbb::tbb_exception:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00084.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual <a class="el" href="a00172.html">tbb_exception</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">move</a> ()=0  throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#3e3482bf264d4ca4dde046cd9c02c766"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a> ()=0  throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">move()</a> method.  <a href="#66c94938eca8bf88b76f3eccaaf215d8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a> ()=0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Throws this exception object.  <a href="#8588e07fa49692f4d734e4f2e4f048f4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d00f6497e552fee978a02bfcbebf46e2"></a><!-- doxytag: member="tbb::tbb_exception::name" ref="d00f6497e552fee978a02bfcbebf46e2" args="() const =0" -->
+virtual const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#d00f6497e552fee978a02bfcbebf46e2">name</a> () const =0  throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8157689ecb66bc6c72d3618bf3cc371"></a><!-- doxytag: member="tbb::tbb_exception::what" ref="e8157689ecb66bc6c72d3618bf3cc371" args="() const =0" -->
+virtual const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#e8157689ecb66bc6c72d3618bf3cc371">what</a> () const =0  throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00172.html#e8157689ecb66bc6c72d3618bf3cc371">what()</a> method. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Interface to be implemented by all exceptions TBB recognizes and propagates across the threads. 
+<p>
+If an unhandled exception of the type derived from <a class="el" href="a00172.html">tbb::tbb_exception</a> is intercepted by the TBB scheduler in one of the worker threads, it is delivered to and re-thrown in the root thread. The root thread is the thread that has started the outermost algorithm or root task sharing the same <a class="el" href="a00167.html">task_group_context</a> with the guilty algorithm/task (the one that threw the exception first).<p>
+Note: when documentation mentions workers with respect to exception handling, masters are implied as well, because they are completely equivalent in this context. Consequently a root thread can be master or worker thread.<p>
+NOTE: In case of nested algorithms or complex task hierarchies when the nested levels share (explicitly or by means of implicit inheritance) the task group context of the outermost level, the exception may be (re-)thrown multiple times (ultimately - in each worker on each nesting level) before reaching the root thread at the outermost level. IMPORTANT: if you intercept an exception derived from this class on a nested level, you must re-throw it in the catch block by means of the "throw;" operator.<p>
+TBB provides two implementations of this interface: <a class="el" href="a00127.html">tbb::captured_exception</a> and template class <a class="el" href="a00141.html">tbb::movable_exception</a>. See their declarations for more info. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="66c94938eca8bf88b76f3eccaaf215d8"></a><!-- doxytag: member="tbb::tbb_exception::destroy" ref="66c94938eca8bf88b76f3eccaaf215d8" args="()=0" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void tbb::tbb_exception::destroy           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">  throw ()<code> [pure virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Destroys objects created by the <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">move()</a> method. 
+<p>
+Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. 
+<p>
+Implemented in <a class="el" href="a00127.html#667812a82f1525e968c52593dea0ef4c">tbb::captured_exception</a>, and <a class="el" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception&lt; ExceptionData &gt;</a>.
+</div>
+</div><p>
+<a class="anchor" name="3e3482bf264d4ca4dde046cd9c02c766"></a><!-- doxytag: member="tbb::tbb_exception::move" ref="3e3482bf264d4ca4dde046cd9c02c766" args="()=0" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="a00172.html">tbb_exception</a>* tbb::tbb_exception::move           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">  throw ()<code> [pure virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Creates and returns pointer to the deep copy of this exception object. 
+<p>
+Move semantics is allowed. 
+<p>
+Implemented in <a class="el" href="a00127.html#df6bbb78a362fe862a341e81e2999810">tbb::captured_exception</a>, and <a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception&lt; ExceptionData &gt;</a>.
+</div>
+</div><p>
+<a class="anchor" name="8588e07fa49692f4d734e4f2e4f048f4"></a><!-- doxytag: member="tbb::tbb_exception::throw_self" ref="8588e07fa49692f4d734e4f2e4f048f4" args="()=0" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void tbb::tbb_exception::throw_self           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"><code> [pure virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Throws this exception object. 
+<p>
+Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown. 
+<p>
+Implemented in <a class="el" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, and <a class="el" href="a00141.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception&lt; ExceptionData &gt;</a>.
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00381.html">tbb_exception.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00173.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00173.html
new file mode 100644 (file)
index 0000000..e685159
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::internal::tbb_exception_ptr Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<b>internal</b>::<a class="el" href="a00173.html">tbb_exception_ptr</a></div>
+<h1>tbb::internal::tbb_exception_ptr Class Reference</h1><!-- doxytag: class="tbb::internal::tbb_exception_ptr" -->Exception container that preserves the exact copy of the original exception.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00381.html">tbb_exception.h</a>&gt;</code>
+<p>
+<a href="a00087.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html#921875bbacd2c8a5f324c7da7a415262">destroy</a> ()  throw ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroys this objects.  <a href="#921875bbacd2c8a5f324c7da7a415262"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="292832fd5c523e3d8081a22247840a1d"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::throw_self" ref="292832fd5c523e3d8081a22247840a1d" args="()" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html#292832fd5c523e3d8081a22247840a1d">throw_self</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Throws the contained exception . <br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="65083750bebe799d3fe8143c794523bb"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::allocate" ref="65083750bebe799d3fe8143c794523bb" args="()" -->
+static <a class="el" href="a00173.html">tbb_exception_ptr</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>allocate</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="90930262be794c7284ccae8f2fa0ae80"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::allocate" ref="90930262be794c7284ccae8f2fa0ae80" args="(const tbb_exception &amp;)" -->
+static <a class="el" href="a00173.html">tbb_exception_ptr</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>allocate</b> (const <a class="el" href="a00172.html">tbb_exception</a> &amp;)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8855dd659f1d5c6cf3c3d11787e278f6"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::allocate" ref="8855dd659f1d5c6cf3c3d11787e278f6" args="(const captured_exception &amp;)" -->
+static <a class="el" href="a00173.html">tbb_exception_ptr</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>allocate</b> (const <a class="el" href="a00127.html">captured_exception</a> &amp;)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Exception container that preserves the exact copy of the original exception. 
+<p>
+This class can be used only when the appropriate runtime support (mandated by C++0x) is present 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="921875bbacd2c8a5f324c7da7a415262"></a><!-- doxytag: member="tbb::internal::tbb_exception_ptr::destroy" ref="921875bbacd2c8a5f324c7da7a415262" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::internal::tbb_exception_ptr::destroy           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">  throw ()</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Destroys this objects. 
+<p>
+Note that objects of this type can be created only by the allocate() method. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00381.html">tbb_exception.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00174.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00174.html
new file mode 100644 (file)
index 0000000..bd3c473
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::tbb_hash_compare&lt; T &gt; Struct Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00174.html">tbb_hash_compare</a></div>
+<h1>tbb::tbb_hash_compare&lt; T &gt; Struct Template Reference</h1><!-- doxytag: class="tbb::tbb_hash_compare" -->hash_compare - default argument  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00272.html">concurrent_hash_map.h</a>&gt;</code>
+<p>
+<a href="a00012.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4a1e6b9c8719d73dee49e64becf5aa37"></a><!-- doxytag: member="tbb::tbb_hash_compare::hash" ref="4a1e6b9c8719d73dee49e64becf5aa37" args="(const T &amp;t)" -->
+static size_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>hash</b> (const T &amp;t)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="553e13ec26df66be906c01cc4c39ed88"></a><!-- doxytag: member="tbb::tbb_hash_compare::equal" ref="553e13ec26df66be906c01cc4c39ed88" args="(const T &amp;a, const T &amp;b)" -->
+static bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>equal</b> (const T &amp;a, const T &amp;b)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename T&gt;<br>
+ struct tbb::tbb_hash_compare&lt; T &gt;</h3>
+
+hash_compare - default argument 
+<p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00272.html">concurrent_hash_map.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00175.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00175.html
new file mode 100644 (file)
index 0000000..650724d
--- /dev/null
@@ -0,0 +1,120 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::thread_bound_filter Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00175.html">thread_bound_filter</a></div>
+<h1>tbb::thread_bound_filter Class Reference<br>
+<small>
+[<a class="el" href="a00233.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::thread_bound_filter" --><!-- doxytag: inherits="tbb::filter" -->A stage in a pipeline served by a user thread.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00347.html">pipeline.h</a>&gt;</code>
+<p>
+Inherits <a class="el" href="a00139.html">tbb::filter</a>.
+<p>
+Inheritance diagram for tbb::thread_bound_filter:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00045.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="902c4645e624e8f589b89841df5331de0c135a0274225f59d2b2a682d1103f23"></a><!-- doxytag: member="tbb::thread_bound_filter::success" ref="902c4645e624e8f589b89841df5331de0c135a0274225f59d2b2a682d1103f23" args="" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>success</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="902c4645e624e8f589b89841df5331de5243cf0030982cfa4ac1a8e97acb39f4"></a><!-- doxytag: member="tbb::thread_bound_filter::item_not_available" ref="902c4645e624e8f589b89841df5331de5243cf0030982cfa4ac1a8e97acb39f4" args="" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>item_not_available</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="902c4645e624e8f589b89841df5331ded4085a8b251604b51c0f19602eeef09f"></a><!-- doxytag: member="tbb::thread_bound_filter::end_of_stream" ref="902c4645e624e8f589b89841df5331ded4085a8b251604b51c0f19602eeef09f" args="" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>end_of_stream</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><b>result_type</b> { <b>success</b>, 
+<b>item_not_available</b>, 
+<b>end_of_stream</b>
+ }</td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">result_type __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">If a data item is available, invoke operator() on that item.  <a href="#c4f90f2c771bce748beb9be734fa286c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">result_type __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wait until a data item becomes available, and invoke operator() on that item.  <a href="#5e726bdc7fbd924c0b07bd558b1d4d5d"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="413fad2ade743d9af5dcabc56aedf4fe"></a><!-- doxytag: member="tbb::thread_bound_filter::thread_bound_filter" ref="413fad2ade743d9af5dcabc56aedf4fe" args="(mode filter_mode)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b> (<a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A stage in a pipeline served by a user thread. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="5e726bdc7fbd924c0b07bd558b1d4d5d"></a><!-- doxytag: member="tbb::thread_bound_filter::process_item" ref="5e726bdc7fbd924c0b07bd558b1d4d5d" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::process_item           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Wait until a data item becomes available, and invoke operator() on that item. 
+<p>
+This interface is blocking. Returns 'success' if an item was processed. Returns 'end_of_stream' if there are no more items to process. Never returns 'item_not_available', as it blocks until another return condition applies. 
+</div>
+</div><p>
+<a class="anchor" name="c4f90f2c771bce748beb9be734fa286c"></a><!-- doxytag: member="tbb::thread_bound_filter::try_process_item" ref="c4f90f2c771bce748beb9be734fa286c" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::try_process_item           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+If a data item is available, invoke operator() on that item. 
+<p>
+This interface is non-blocking. Returns 'success' if an item was processed. Returns 'item_not_available' if no item can be processed now but more may arrive in the future, or if token limit is reached. Returns 'end_of_stream' if there are no more items to process. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00347.html">pipeline.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00176.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00176.html
new file mode 100644 (file)
index 0000000..92e11dc
--- /dev/null
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::tick_count Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00176.html">tick_count</a></div>
+<h1>tbb::tick_count Class Reference<br>
+<small>
+[<a class="el" href="a00237.html">Timing</a>]</small>
+</h1><!-- doxytag: class="tbb::tick_count" -->Absolute timestamp.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00401.html">tick_count.h</a>&gt;</code>
+<p>
+<a href="a00098.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="34593326ae4191e02a13c7cbdab9de4c"></a><!-- doxytag: member="tbb::tick_count::tick_count" ref="34593326ae4191e02a13c7cbdab9de4c" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct an absolute timestamp initialized to zero. <br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fb7f78ca61cf28398645ace66e284473"></a><!-- doxytag: member="tbb::tick_count::now" ref="fb7f78ca61cf28398645ace66e284473" args="()" -->
+static <a class="el" href="a00176.html">tick_count</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#fb7f78ca61cf28398645ace66e284473">now</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return current time. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="09dde78a4100800c11bb883d6204b586"></a><!-- doxytag: member="tbb::tick_count::operator-" ref="09dde78a4100800c11bb883d6204b586" args="(const tick_count &amp;t1, const tick_count &amp;t0)" -->
+<a class="el" href="a00177.html">interval_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00176.html">tick_count</a> &amp;t1, const <a class="el" href="a00176.html">tick_count</a> &amp;t0)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Subtract two timestamps to get the time interval between. <br></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html">interval_t</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Relative time interval.  <a href="a00177.html#_details">More...</a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Absolute timestamp. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00401.html">tick_count.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00177.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00177.html
new file mode 100644 (file)
index 0000000..697ab47
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::tick_count::interval_t Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00176.html">tick_count</a>::<a class="el" href="a00177.html">interval_t</a></div>
+<h1>tbb::tick_count::interval_t Class Reference</h1><!-- doxytag: class="tbb::tick_count::interval_t" -->Relative time interval.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00401.html">tick_count.h</a>&gt;</code>
+<p>
+<a href="a00099.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="75a9a0949f8a8a84d6758835f1b48dad"></a><!-- doxytag: member="tbb::tick_count::interval_t::interval_t" ref="75a9a0949f8a8a84d6758835f1b48dad" args="()" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct a time interval representing zero time duration. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1a21a428e00cced2e6a49e0f5f2258bf"></a><!-- doxytag: member="tbb::tick_count::interval_t::interval_t" ref="1a21a428e00cced2e6a49e0f5f2258bf" args="(double sec)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#1a21a428e00cced2e6a49e0f5f2258bf">interval_t</a> (double sec)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct a time interval representing sec seconds time duration. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5d8429c0bc59cf6131b2abc7929fa59"></a><!-- doxytag: member="tbb::tick_count::interval_t::seconds" ref="d5d8429c0bc59cf6131b2abc7929fa59" args="() const " -->
+double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the length of a time interval in seconds. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cd9814947902e26463a69a111530f81b"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator+=" ref="cd9814947902e26463a69a111530f81b" args="(const interval_t &amp;i)" -->
+<a class="el" href="a00177.html">interval_t</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#cd9814947902e26463a69a111530f81b">operator+=</a> (const <a class="el" href="a00177.html">interval_t</a> &amp;i)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Accumulation operator. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="35ff7eaf7c2031b4a991402ac9ecb940"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator-=" ref="35ff7eaf7c2031b4a991402ac9ecb940" args="(const interval_t &amp;i)" -->
+<a class="el" href="a00177.html">interval_t</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a> (const <a class="el" href="a00177.html">interval_t</a> &amp;i)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Subtraction operator. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cc3a7ad7000317951ce61f706163efe8"></a><!-- doxytag: member="tbb::tick_count::interval_t::tbb::tick_count" ref="cc3a7ad7000317951ce61f706163efe8" args="" -->
+class&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#cc3a7ad7000317951ce61f706163efe8">tbb::tick_count</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="09dde78a4100800c11bb883d6204b586"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator-" ref="09dde78a4100800c11bb883d6204b586" args="(const tick_count &amp;t1, const tick_count &amp;t0)" -->
+<a class="el" href="a00177.html">interval_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00176.html">tick_count</a> &amp;t1, const <a class="el" href="a00176.html">tick_count</a> &amp;t0)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Extract the intervals from the tick_counts and subtract them. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5871ead1ca230efbe52a5008470e6428"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator+" ref="5871ead1ca230efbe52a5008470e6428" args="(const interval_t &amp;i, const interval_t &amp;j)" -->
+<a class="el" href="a00177.html">interval_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#5871ead1ca230efbe52a5008470e6428">operator+</a> (const <a class="el" href="a00177.html">interval_t</a> &amp;i, const <a class="el" href="a00177.html">interval_t</a> &amp;j)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add two intervals. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fa509691e1d689830931e36edd274f76"></a><!-- doxytag: member="tbb::tick_count::interval_t::operator-" ref="fa509691e1d689830931e36edd274f76" args="(const interval_t &amp;i, const interval_t &amp;j)" -->
+<a class="el" href="a00177.html">interval_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#fa509691e1d689830931e36edd274f76">operator-</a> (const <a class="el" href="a00177.html">interval_t</a> &amp;i, const <a class="el" href="a00177.html">interval_t</a> &amp;j)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Subtract two intervals. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Relative time interval. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00401.html">tick_count.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00178.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00178.html
new file mode 100644 (file)
index 0000000..59b2c0b
--- /dev/null
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::internal::work_around_alignment_bug&lt; Size, T &gt; Struct Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<b>internal</b>::<a class="el" href="a00178.html">work_around_alignment_bug</a></div>
+<h1>tbb::internal::work_around_alignment_bug&lt; Size, T &gt; Struct Template Reference</h1><!-- doxytag: class="tbb::internal::work_around_alignment_bug" -->Work around for bug in GNU 3.2 and MSVC compilers.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00382.html">tbb_machine.h</a>&gt;</code>
+<p>
+<a href="a00095.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="137d1b1dd94016bc52e423dc33c4fd1d"></a><!-- doxytag: member="tbb::internal::work_around_alignment_bug::alignment" ref="137d1b1dd94016bc52e423dc33c4fd1d" args="" -->
+static const size_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>alignment</b> = __alignof(T)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;size_t Size, typename T&gt;<br>
+ struct tbb::internal::work_around_alignment_bug&lt; Size, T &gt;</h3>
+
+Work around for bug in GNU 3.2 and MSVC compilers. 
+<p>
+Bug is that compiler sometimes returns 0 for __alignof(T) when T has not yet been instantiated. The work-around forces instantiation by forcing computation of sizeof(T) before __alignof(T). 
+<p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00382.html">tbb_machine.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00179.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00179.html
new file mode 100644 (file)
index 0000000..7a11d92
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::zero_allocator&lt; T, Allocator &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00179.html">zero_allocator</a></div>
+<h1>tbb::zero_allocator&lt; T, Allocator &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::zero_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00375.html">tbb_allocator.h</a>&gt;</code>
+<p>
+<a href="a00079.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="77c87446a645cc3dbeba6fc82cc7eec0"></a><!-- doxytag: member="tbb::zero_allocator::base_allocator_type" ref="77c87446a645cc3dbeba6fc82cc7eec0" args="" -->
+typedef Allocator&lt; T &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>base_allocator_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2eb3bf02103f455e0614e0a392388428"></a><!-- doxytag: member="tbb::zero_allocator::value_type" ref="2eb3bf02103f455e0614e0a392388428" args="" -->
+typedef base_allocator_type::value_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="54d0a81317a90278dc492d44cc7dcdfc"></a><!-- doxytag: member="tbb::zero_allocator::pointer" ref="54d0a81317a90278dc492d44cc7dcdfc" args="" -->
+typedef base_allocator_type::pointer&nbsp;</td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="50536b451124814064b0e8ff7b6cea21"></a><!-- doxytag: member="tbb::zero_allocator::const_pointer" ref="50536b451124814064b0e8ff7b6cea21" args="" -->
+typedef base_allocator_type::const_pointer&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2ef488ecc55bf4a619f68b021d5b93e2"></a><!-- doxytag: member="tbb::zero_allocator::reference" ref="2ef488ecc55bf4a619f68b021d5b93e2" args="" -->
+typedef base_allocator_type::reference&nbsp;</td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="31f0de5db53e4c219e8548078572e1ff"></a><!-- doxytag: member="tbb::zero_allocator::const_reference" ref="31f0de5db53e4c219e8548078572e1ff" args="" -->
+typedef base_allocator_type::const_reference&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="55acbfec8d7fd904c9b2040816522084"></a><!-- doxytag: member="tbb::zero_allocator::size_type" ref="55acbfec8d7fd904c9b2040816522084" args="" -->
+typedef base_allocator_type::size_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c54d45a74bd3b48ff8db174c266ddede"></a><!-- doxytag: member="tbb::zero_allocator::difference_type" ref="c54d45a74bd3b48ff8db174c266ddede" args="" -->
+typedef base_allocator_type::difference_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8c48c0436e3239be8f07c53c7f6658e4"></a><!-- doxytag: member="tbb::zero_allocator::zero_allocator" ref="8c48c0436e3239be8f07c53c7f6658e4" args="(const zero_allocator &amp;a)" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>zero_allocator</b> (const <a class="el" href="a00179.html">zero_allocator</a> &amp;a)  throw ()</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="67685c1cfcd3b5f81ac8f3c8dd1375b9"></a><!-- doxytag: member="tbb::zero_allocator::zero_allocator" ref="67685c1cfcd3b5f81ac8f3c8dd1375b9" args="(const zero_allocator&lt; U &gt; &amp;a)" -->
+template&lt;typename U&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>zero_allocator</b> (const <a class="el" href="a00179.html">zero_allocator</a>&lt; U &gt; &amp;a)  throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b6e7eb50d9faeca418d56a9758357377"></a><!-- doxytag: member="tbb::zero_allocator::allocate" ref="b6e7eb50d9faeca418d56a9758357377" args="(const size_type n, const void *hint=0)" -->
+pointer&nbsp;</td><td class="memItemRight" valign="bottom"><b>allocate</b> (const size_type n, const void *hint=0)</td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;typename T, template&lt; typename X &gt; class Allocator = tbb_allocator&gt;<br>
+ class tbb::zero_allocator&lt; T, Allocator &gt;</h3>
+
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
+<p>
+The class is an adapter over an actual allocator that fills the allocation using memset function with template argument C as the value. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00375.html">tbb_allocator.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00180.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00180.html
new file mode 100644 (file)
index 0000000..6120f53
--- /dev/null
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::zero_allocator&lt; void, Allocator &gt; Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00180.html">zero_allocator&lt; void, Allocator &gt;</a></div>
+<h1>tbb::zero_allocator&lt; void, Allocator &gt; Class Template Reference<br>
+<small>
+[<a class="el" href="a00235.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::zero_allocator&lt; void, Allocator &gt;" -->Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="a00375.html">tbb_allocator.h</a>&gt;</code>
+<p>
+<a href="a00081.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ce4f3bf06e8aaf8020fa443297eff5f7"></a><!-- doxytag: member="tbb::zero_allocator&lt; void, Allocator &gt;::base_allocator_type" ref="ce4f3bf06e8aaf8020fa443297eff5f7" args="" -->
+typedef Allocator&lt; void &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><b>base_allocator_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5cd644eeecd6d729c848c8e99ffd4592"></a><!-- doxytag: member="tbb::zero_allocator&lt; void, Allocator &gt;::value_type" ref="5cd644eeecd6d729c848c8e99ffd4592" args="" -->
+typedef base_allocator_type::value_type&nbsp;</td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8f68aa346a17c94f8c5c7945a2c50858"></a><!-- doxytag: member="tbb::zero_allocator&lt; void, Allocator &gt;::pointer" ref="8f68aa346a17c94f8c5c7945a2c50858" args="" -->
+typedef base_allocator_type::pointer&nbsp;</td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ae95a5761371ee7b61f2c339385684e9"></a><!-- doxytag: member="tbb::zero_allocator&lt; void, Allocator &gt;::const_pointer" ref="ae95a5761371ee7b61f2c339385684e9" args="" -->
+typedef base_allocator_type::const_pointer&nbsp;</td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><b>rebind</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;template&lt; typename T &gt; class Allocator&gt;<br>
+ class tbb::zero_allocator&lt; void, Allocator &gt;</h3>
+
+Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00375.html">tbb_allocator.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00210.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00210.html
new file mode 100644 (file)
index 0000000..f5bdbc5
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>scalable_allocator.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>scalable_allocator.h File Reference</h1>
+<p>
+<a href="a00351.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html">tbb</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00158.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><b>tbb::scalable_allocator&lt; T &gt;::rebind&lt; U &gt;</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html">tbb::scalable_allocator&lt; void &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00159.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><b>tbb::scalable_allocator&lt; void &gt;::rebind&lt; U &gt;</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a> (size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a> (void *ptr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_realloc</a> (void *ptr, size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int __TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (void **memptr, size_t alignment, size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_aligned_malloc</a> (size_t size, size_t alignment)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_aligned_realloc</a> (void *ptr, size_t size, size_t alignment)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (void *ptr)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="906ebb461ecb0446989739fd0399e4b8"></a><!-- doxytag: member="scalable_allocator.h::operator==" ref="906ebb461ecb0446989739fd0399e4b8" args="(const scalable_allocator&lt; T &gt; &amp;, const scalable_allocator&lt; U &gt; &amp;)" -->
+template&lt;typename T, typename U&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::operator==</b> (const scalable_allocator&lt; T &gt; &amp;, const scalable_allocator&lt; U &gt; &amp;)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a92757aca0a69082eb8dc223eb257433"></a><!-- doxytag: member="scalable_allocator.h::operator!=" ref="a92757aca0a69082eb8dc223eb257433" args="(const scalable_allocator&lt; T &gt; &amp;, const scalable_allocator&lt; U &gt; &amp;)" -->
+template&lt;typename T, typename U&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::operator!=</b> (const scalable_allocator&lt; T &gt; &amp;, const scalable_allocator&lt; U &gt; &amp;)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00229.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00229.html
new file mode 100644 (file)
index 0000000..74d58f3
--- /dev/null
@@ -0,0 +1,705 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb Namespace Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="namespaces.html"><span>Namespace List</span></a></li>
+    <li><a href="namespacemembers.html"><span>Namespace&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb Namespace Reference</h1>The namespace tbb contains all components of the library.  
+<a href="#_details">More...</a>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00116.html">aligned_space</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Block of space aligned sufficiently to construct an array T with N elements.  <a href="a00116.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00117.html">atomic</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Primary template for atomic.  <a href="a00117.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00118.html">atomic&lt; void * &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Specialization for <a class="el" href="a00118.html">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt;.  <a href="a00118.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html">blocked_range</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A range over which to iterate.  <a href="a00122.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html">blocked_range2d</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A 2-dimensional range that models the Range concept.  <a href="a00123.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html">blocked_range3d</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A 3-dimensional range that models the Range concept.  <a href="a00124.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html">cache_aligned_allocator</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00125.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html">cache_aligned_allocator&lt; void &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00126.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html">combinable</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00128.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html">tbb_hash_compare</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">hash_compare - default argument  <a href="a00174.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html">concurrent_hash_map</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unordered map from Key to T.  <a href="a00130.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html">concurrent_bounded_queue</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00129.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html">concurrent_vector</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Concurrent vector container.  <a href="a00136.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html">enumerable_thread_specific</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The thread local class template.  <a href="a00138.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><b>flattened2d</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html">mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wrapper around the platform's native reader-writer lock.  <a href="a00142.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html">null_mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A mutex which does nothing.  <a href="a00144.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html">null_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00146.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html">parallel_do_feeder</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Class the user supplied algorithm body uses to add new tasks.  <a href="a00148.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html">pre_scan_tag</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Used to indicate that the initial scan is being performed.  <a href="a00151.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html">final_scan_tag</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Used to indicate that the final scan is being performed.  <a href="a00140.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html">parallel_while</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over a stream, with optional addition of more work.  <a href="a00149.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html">simple_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A simple partitioner.  <a href="a00160.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00120.html">auto_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An auto partitioner.  <a href="a00120.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00115.html">affinity_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An affinity partitioner.  <a href="a00115.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html">filter</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A stage in a pipeline.  <a href="a00139.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html">thread_bound_filter</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A stage in a pipeline served by a user thread.  <a href="a00175.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html">pipeline</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A processing pipeling that applies filters to items.  <a href="a00150.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html">queuing_mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Queuing lock with local-only spinning.  <a href="a00152.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html">queuing_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reader-writer lock with local-only spinning.  <a href="a00154.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html">recursive_mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Mutex that allows recursive mutex acquisition.  <a href="a00156.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html">scalable_allocator</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00158.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html">scalable_allocator&lt; void &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00159.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html">spin_mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00161.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html">spin_rw_mutex_v3</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  <a href="a00163.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html">task_group_context</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Used to form groups of tasks.  <a href="a00167.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html">task</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Base class for user-defined tasks.  <a href="a00166.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00137.html">empty_task</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task that does nothing. Useful for synchronization.  <a href="a00137.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html">task_list</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A list of children.  <a href="a00168.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><b>task_handle</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><b>task_group</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><b>missing_wait</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><b>structured_task_group</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html">task_scheduler_init</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Class representing reference to tbb scheduler.  <a href="a00169.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html">tbb_allocator</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00170.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html">tbb_allocator&lt; void &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00171.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00179.html">zero_allocator</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00179.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html">zero_allocator&lt; void, Allocator &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00180.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html">bad_last_alloc</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Exception for concurrent containers.  <a href="a00121.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html">tbb_exception</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.  <a href="a00172.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html">captured_exception</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This class is used by TBB to propagate information about unhandled exceptions into the root thread.  <a href="a00127.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00141.html">movable_exception</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.  <a href="a00141.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html">split</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor.  <a href="a00165.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html">tick_count</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Absolute timestamp.  <a href="a00176.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html">strict_ppl</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">For internal use only. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>parallel_do</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="parallel_do_body_req.html">parallel_do Body</a>. <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3383e2703977012b6f384d673410f1f7"></a><!-- doxytag: member="tbb::parallel_do" ref="g3383e2703977012b6f384d673410f1f7" args="(Iterator first, Iterator last, const Body &amp;body)" -->
+template&lt;typename Iterator, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g3383e2703977012b6f384d673410f1f7">parallel_do</a> (Iterator first, Iterator last, const Body &amp;body)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over a range, with optional addition of more work. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g2617dc9b88b3285a7212599d49f74228"></a><!-- doxytag: member="tbb::parallel_do" ref="g2617dc9b88b3285a7212599d49f74228" args="(Iterator first, Iterator last, const Body &amp;body, task_group_context &amp;context)" -->
+template&lt;typename Iterator, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g2617dc9b88b3285a7212599d49f74228">parallel_do</a> (Iterator first, Iterator last, const Body &amp;body, <a class="el" href="a00167.html">task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over a range, with optional addition of more work and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_for</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_for_body_req.html">parallel_for Body</a>. <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g68cc046ef72c42ce205fccbc435a0d81"></a><!-- doxytag: member="tbb::parallel_for" ref="g68cc046ef72c42ce205fccbc435a0d81" args="(const Range &amp;range, const Body &amp;body)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a> (const Range &amp;range, const Body &amp;body)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g13cac5dd55c7533bccea43a51c33d0e5"></a><!-- doxytag: member="tbb::parallel_for" ref="g13cac5dd55c7533bccea43a51c33d0e5" args="(const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g13cac5dd55c7533bccea43a51c33d0e5">parallel_for</a> (const Range &amp;range, const Body &amp;body, const <a class="el" href="a00160.html">simple_partitioner</a> &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with simple partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga7ac75d532389b55b9247f3fdb0b00d1"></a><!-- doxytag: member="tbb::parallel_for" ref="ga7ac75d532389b55b9247f3fdb0b00d1" args="(const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ga7ac75d532389b55b9247f3fdb0b00d1">parallel_for</a> (const Range &amp;range, const Body &amp;body, const <a class="el" href="a00120.html">auto_partitioner</a> &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00120.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g9cd1b210ceb1c040f30e390b4a21bde8"></a><!-- doxytag: member="tbb::parallel_for" ref="g9cd1b210ceb1c040f30e390b4a21bde8" args="(const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g9cd1b210ceb1c040f30e390b4a21bde8">parallel_for</a> (const Range &amp;range, const Body &amp;body, <a class="el" href="a00115.html">affinity_partitioner</a> &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00115.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g2d317a5e0078cd193125439fed60dfdc"></a><!-- doxytag: member="tbb::parallel_for" ref="g2d317a5e0078cd193125439fed60dfdc" args="(const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g2d317a5e0078cd193125439fed60dfdc">parallel_for</a> (const Range &amp;range, const Body &amp;body, const <a class="el" href="a00160.html">simple_partitioner</a> &amp;partitioner, <a class="el" href="a00167.html">task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g1c0700e3f85e83a788ff3ede88ebb7e9"></a><!-- doxytag: member="tbb::parallel_for" ref="g1c0700e3f85e83a788ff3ede88ebb7e9" args="(const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g1c0700e3f85e83a788ff3ede88ebb7e9">parallel_for</a> (const Range &amp;range, const Body &amp;body, const <a class="el" href="a00120.html">auto_partitioner</a> &amp;partitioner, <a class="el" href="a00167.html">task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g04b4696b67370c01353ff5974c8f1196"></a><!-- doxytag: member="tbb::parallel_for" ref="g04b4696b67370c01353ff5974c8f1196" args="(const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g04b4696b67370c01353ff5974c8f1196">parallel_for</a> (const Range &amp;range, const Body &amp;body, <a class="el" href="a00115.html">affinity_partitioner</a> &amp;partitioner, <a class="el" href="a00167.html">task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00115.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_for_each</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gbcb40499f038fd82deca88366b404790"></a><!-- doxytag: member="tbb::parallel_for_each" ref="gbcb40499f038fd82deca88366b404790" args="(InputIterator first, InputIterator last, Function f, task_group_context &amp;context)" -->
+template&lt;typename InputIterator, typename Function&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Function&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gbcb40499f038fd82deca88366b404790">parallel_for_each</a> (InputIterator first, InputIterator last, Function f, <a class="el" href="a00167.html">task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calls function f for all items from [first, last) interval using user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g85a58ff0853f129adb6f9e4355326ccc"></a><!-- doxytag: member="tbb::parallel_for_each" ref="g85a58ff0853f129adb6f9e4355326ccc" args="(InputIterator first, InputIterator last, Function f)" -->
+template&lt;typename InputIterator, typename Function&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Function&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g85a58ff0853f129adb6f9e4355326ccc">parallel_for_each</a> (InputIterator first, InputIterator last, Function f)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Uses default context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_invoke</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gbaadafdb93d290acec86e07fc8909c29"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gbaadafdb93d290acec86e07fc8909c29" args="(F0 f0, F1 f1, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a> (F0 f0, F1 f1, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Executes a list of tasks in parallel and waits for all tasks to complete. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3cbf43007d0caeb4a2470265f50b25df"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g3cbf43007d0caeb4a2470265f50b25df" args="(F0 f0, F1 f1, F2 f2, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g063924a497ba64c49351e80e39bd2c17"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g063924a497ba64c49351e80e39bd2c17" args="(F0 f0, F1 f1, F2 f2, F3 f3, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g2ca8b49b9b36515247e45ffd9c0c11cf"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g2ca8b49b9b36515247e45ffd9c0c11cf" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g559685c3c13e103c6d570efef419c2b9"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g559685c3c13e103c6d570efef419c2b9" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd979d007cc4026c34691a4b38edd36af"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gd979d007cc4026c34691a4b38edd36af" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd01a5d8f4902387d9081352e1edd1632"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gd01a5d8f4902387d9081352e1edd1632" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g0a66bfc0ac0691dfa71d230f5c8c3e96"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g0a66bfc0ac0691dfa71d230f5c8c3e96" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g7182f6b5c88469cfc2b7c2ebbbd4a28c"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g7182f6b5c88469cfc2b7c2ebbbd4a28c" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8, typename F9&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb999ec5f8b7f0b68b9752f11ad39ab08"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gb999ec5f8b7f0b68b9752f11ad39ab08" args="(F0 f0, F1 f1)" -->
+template&lt;typename F0, typename F1&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb3783b5fbb1fdb4d2a6b3b4c6be8d4dd"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gb3783b5fbb1fdb4d2a6b3b4c6be8d4dd" args="(F0 f0, F1 f1, F2 f2)" -->
+template&lt;typename F0, typename F1, typename F2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g89c0569d95abd182f80acc38d0dbe2d4"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g89c0569d95abd182f80acc38d0dbe2d4" args="(F0 f0, F1 f1, F2 f2, F3 f3)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3ef71e9441745fe708e66a0b817bebc7"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g3ef71e9441745fe708e66a0b817bebc7" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g78fa19efd1a7cf7ffd1c23251c80b31d"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g78fa19efd1a7cf7ffd1c23251c80b31d" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gab2e69dbef9b3f0e658cf4b8e574f552"></a><!-- doxytag: member="tbb::parallel_invoke" ref="gab2e69dbef9b3f0e658cf4b8e574f552" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g262f0347e5690bb692b6dc26e26b9ebe"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g262f0347e5690bb692b6dc26e26b9ebe" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g06a090fbd0eaaccf20e2409a2a222733"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g06a090fbd0eaaccf20e2409a2a222733" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3330e3c33053875705e19e29eda37627"></a><!-- doxytag: member="tbb::parallel_invoke" ref="g3330e3c33053875705e19e29eda37627" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8, typename F9&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9)</td></tr>
+
+<tr><td colspan="2"><br><h2>parallel_reduce</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_reduce_body_req.html">parallel_reduce Body</a>. <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g1b3d59c5eb62683c5754db6970392fa3"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g1b3d59c5eb62683c5754db6970392fa3" args="(const Range &amp;range, Body &amp;body)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a> (const Range &amp;range, Body &amp;body)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gec1b7c03f9da909bef5db12e3d41bed3"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gec1b7c03f9da909bef5db12e3d41bed3" args="(const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gec1b7c03f9da909bef5db12e3d41bed3">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const <a class="el" href="a00160.html">simple_partitioner</a> &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00160.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g18a19157e6245992fc00ca0adeb7dd37"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g18a19157e6245992fc00ca0adeb7dd37" args="(const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g18a19157e6245992fc00ca0adeb7dd37">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const <a class="el" href="a00120.html">auto_partitioner</a> &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00120.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc61e73fcc36c92d79a217fc355ff4a6b"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gc61e73fcc36c92d79a217fc355ff4a6b" args="(const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gc61e73fcc36c92d79a217fc355ff4a6b">parallel_reduce</a> (const Range &amp;range, Body &amp;body, <a class="el" href="a00115.html">affinity_partitioner</a> &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00115.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g45cb00c42a18e334bbde8b7535afe460"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g45cb00c42a18e334bbde8b7535afe460" args="(const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g45cb00c42a18e334bbde8b7535afe460">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const <a class="el" href="a00160.html">simple_partitioner</a> &amp;partitioner, <a class="el" href="a00167.html">task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g1c1ea1d7c61b3c225e92c70d669a53a5"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g1c1ea1d7c61b3c225e92c70d669a53a5" args="(const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g1c1ea1d7c61b3c225e92c70d669a53a5">parallel_reduce</a> (const Range &amp;range, Body &amp;body, const <a class="el" href="a00120.html">auto_partitioner</a> &amp;partitioner, <a class="el" href="a00167.html">task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd9ac3a3811060314695f33b703c6e11b"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gd9ac3a3811060314695f33b703c6e11b" args="(const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gd9ac3a3811060314695f33b703c6e11b">parallel_reduce</a> (const Range &amp;range, Body &amp;body, <a class="el" href="a00115.html">affinity_partitioner</a> &amp;partitioner, <a class="el" href="a00167.html">task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00115.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc9412e09fb01fcad8c018ea9cffb28ef"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gc9412e09fb01fcad8c018ea9cffb28ef" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gc9412e09fb01fcad8c018ea9cffb28ef">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gaddffeec0e892ac3d6fc7fc2053e1eca"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gaddffeec0e892ac3d6fc7fc2053e1eca" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gaddffeec0e892ac3d6fc7fc2053e1eca">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const <a class="el" href="a00160.html">simple_partitioner</a> &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00160.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb175401f0729e40dd2c5860a17c14385"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gb175401f0729e40dd2c5860a17c14385" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gb175401f0729e40dd2c5860a17c14385">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const <a class="el" href="a00120.html">auto_partitioner</a> &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00120.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb7f1f1828ae2b330ce05b8513a495154"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gb7f1f1828ae2b330ce05b8513a495154" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gb7f1f1828ae2b330ce05b8513a495154">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, <a class="el" href="a00115.html">affinity_partitioner</a> &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00115.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gfbc0cc2026d87f11a96bcd62788f5bb5"></a><!-- doxytag: member="tbb::parallel_reduce" ref="gfbc0cc2026d87f11a96bcd62788f5bb5" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gfbc0cc2026d87f11a96bcd62788f5bb5">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const <a class="el" href="a00160.html">simple_partitioner</a> &amp;partitioner, <a class="el" href="a00167.html">task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g630c90a399937d9d4ae70ff883186dfd"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g630c90a399937d9d4ae70ff883186dfd" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g630c90a399937d9d4ae70ff883186dfd">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const <a class="el" href="a00120.html">auto_partitioner</a> &amp;partitioner, <a class="el" href="a00167.html">task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g496bd7eadb3b97495ccb5655ef90319e"></a><!-- doxytag: member="tbb::parallel_reduce" ref="g496bd7eadb3b97495ccb5655ef90319e" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g496bd7eadb3b97495ccb5655ef90319e">parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, <a class="el" href="a00115.html">affinity_partitioner</a> &amp;partitioner, <a class="el" href="a00167.html">task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00115.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_scan</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_scan_body_req.html">parallel_scan Body</a>. <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ged143f31dd3d96ded02ab3db915b91c7"></a><!-- doxytag: member="tbb::parallel_scan" ref="ged143f31dd3d96ded02ab3db915b91c7" args="(const Range &amp;range, Body &amp;body)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a> (const Range &amp;range, Body &amp;body)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel prefix with default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc9fac8870b2e6365fb337014404529df"></a><!-- doxytag: member="tbb::parallel_scan" ref="gc9fac8870b2e6365fb337014404529df" args="(const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gc9fac8870b2e6365fb337014404529df">parallel_scan</a> (const Range &amp;range, Body &amp;body, const <a class="el" href="a00160.html">simple_partitioner</a> &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel prefix with <a class="el" href="a00160.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g62fde400a37bbca1a2fddc8e3d22f556"></a><!-- doxytag: member="tbb::parallel_scan" ref="g62fde400a37bbca1a2fddc8e3d22f556" args="(const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g62fde400a37bbca1a2fddc8e3d22f556">parallel_scan</a> (const Range &amp;range, Body &amp;body, const <a class="el" href="a00120.html">auto_partitioner</a> &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel prefix with <a class="el" href="a00120.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb7451aa58925fb7bb579b367c4ba3500"></a><!-- doxytag: member="tbb::parallel_scan" ref="gb7451aa58925fb7bb579b367c4ba3500" args="(const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, tbb::task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gb7451aa58925fb7bb579b367c4ba3500">parallel_scan</a> (const Range &amp;range, Body &amp;body, const <a class="el" href="a00160.html">simple_partitioner</a> &amp;partitioner, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel prefix with <a class="el" href="a00160.html">simple_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g40a7c46037dbafa74fce7a91cc60d9d7"></a><!-- doxytag: member="tbb::parallel_scan" ref="g40a7c46037dbafa74fce7a91cc60d9d7" args="(const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner, tbb::task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g40a7c46037dbafa74fce7a91cc60d9d7">parallel_scan</a> (const Range &amp;range, Body &amp;body, const <a class="el" href="a00120.html">auto_partitioner</a> &amp;partitioner, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel prefix with <a class="el" href="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g83716e2b2926c1fc225802aa309fd2bf"></a><!-- doxytag: member="tbb::parallel_scan" ref="g83716e2b2926c1fc225802aa309fd2bf" args="(const Range &amp;range, Body &amp;body, tbb::task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g83716e2b2926c1fc225802aa309fd2bf">parallel_scan</a> (const Range &amp;range, Body &amp;body, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel prefix with default partitioner and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_sort</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="parallel_sort_iter_req.html">iterators for parallel_sort</a>. <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template&lt;typename RandomAccessIterator, typename Compare&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &amp;comp)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sorts the data in [begin,end) using the given comparator.  <a href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa"></a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g16c3eb77d0e530834c51ce3857f01012"></a><!-- doxytag: member="tbb::parallel_sort" ref="g16c3eb77d0e530834c51ce3857f01012" args="(RandomAccessIterator begin, RandomAccessIterator end)" -->
+template&lt;typename RandomAccessIterator&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g16c3eb77d0e530834c51ce3857f01012">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sorts the data in [begin,end) with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc7576f82fdedc8a701a6c17ad9415926"></a><!-- doxytag: member="tbb::parallel_sort" ref="gc7576f82fdedc8a701a6c17ad9415926" args="(T *begin, T *end)" -->
+template&lt;typename T&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gc7576f82fdedc8a701a6c17ad9415926">parallel_sort</a> (T *begin, T *end)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less&lt;T&gt;</code>. <br></td></tr>
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7fdc2b067a243747d4c3dfe6f3d28476"></a><!-- doxytag: member="tbb::spin_rw_mutex" ref="7fdc2b067a243747d4c3dfe6f3d28476" args="" -->
+typedef <a class="el" href="a00163.html">spin_rw_mutex_v3</a>&nbsp;</td><td class="memItemRight" valign="bottom"><b>spin_rw_mutex</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3d457eb737199125df5ab0cf2f44094"></a><!-- doxytag: member="tbb::stack_size_type" ref="a3d457eb737199125df5ab0cf2f44094" args="" -->
+typedef std::size_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>stack_size_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ceb89493291d4b03ce5f062fbaac0653"></a><!-- doxytag: member="tbb::task_scheduler_observer" ref="ceb89493291d4b03ce5f062fbaac0653" args="" -->
+typedef internal::task_scheduler_observer_v3&nbsp;</td><td class="memItemRight" valign="bottom"><b>task_scheduler_observer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ed375248ff6019a70ca0f9da528e5d0b"></a><!-- doxytag: member="tbb::assertion_handler_type" ref="ed375248ff6019a70ca0f9da528e5d0b" args="(const char *filename, int line, const char *expression, const char *comment)" -->
+typedef void(*)&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> (const char *filename, int line, const char *expression, const char *comment)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Type for an assertion handler. <br></td></tr>
+<tr><td colspan="2"><br><h2>Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> { <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>, 
+<a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>, 
+<a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>
+ }</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Specifies memory fencing.  <a href="a00229.html#a8686246bb5d3664bd07563749970fef">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> { <b>ets_key_per_instance</b>, 
+<b>ets_no_key</b>
+ }</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">enum for selecting between single key and key-per-instance versions <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><b>task_group_status</b> { <b>not_complete</b>, 
+<b>complete</b>, 
+<b>canceled</b>
+ }</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2e067bc86f20023cf3034f2ac310927b"></a><!-- doxytag: member="tbb::__TBB_DECL_ATOMIC" ref="2e067bc86f20023cf3034f2ac310927b" args="(__TBB_LONG_LONG) __TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG) __TBB_DECL_ATOMIC(long) __TBB_DECL_ATOMIC(unsigned long) __TBB_DECL_ATOMIC_ALT(unsigned" -->
+&nbsp;</td><td class="memItemRight" valign="bottom"><b>__TBB_DECL_ATOMIC</b> (__TBB_LONG_LONG) __TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG) __TBB_DECL_ATOMIC(long) __TBB_DECL_ATOMIC(unsigned long) __TBB_DECL_ATOMIC_ALT(unsigned</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ad165cf61abbe349d413df2589679add"></a><!-- doxytag: member="tbb::__TBB_DECL_ATOMIC_ALT" ref="ad165cf61abbe349d413df2589679add" args="(int, ptrdiff_t) __TBB_DECL_ATOMIC(unsigned) __TBB_DECL_ATOMIC(int) __TBB_DECL_ATOMIC(unsigned short) __TBB_DECL_ATOMIC(short) __TBB_DECL_ATOMIC(char) __TBB_DECL_ATOMIC(signed char) __TBB_DECL_ATOMIC(unsigned char) __TBB_DECL_ATOMIC(wchar_t) template&lt; typename T &gt; struct atomic&lt; T * &gt;" -->
+size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#ad165cf61abbe349d413df2589679add">__TBB_DECL_ATOMIC_ALT</a> (int, ptrdiff_t) __TBB_DECL_ATOMIC(unsigned) __TBB_DECL_ATOMIC(int) __TBB_DECL_ATOMIC(unsigned short) __TBB_DECL_ATOMIC(short) __TBB_DECL_ATOMIC(char) __TBB_DECL_ATOMIC(signed char) __TBB_DECL_ATOMIC(unsigned char) __TBB_DECL_ATOMIC(wchar_t) template&lt; typename T &gt; struct <a class="el" href="a00117.html">atomic</a>&lt; T * &gt;</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Specialization for atomic&lt;T*&gt; with arithmetic and operator-&gt;. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="7af9509624a62ea848afe775f892ed12"></a><!-- doxytag: member="tbb::operator==" ref="7af9509624a62ea848afe775f892ed12" args="(const cache_aligned_allocator&lt; T &gt; &amp;, const cache_aligned_allocator&lt; U &gt; &amp;)" -->
+template&lt;typename T, typename U&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00125.html">cache_aligned_allocator</a>&lt; T &gt; &amp;, const <a class="el" href="a00125.html">cache_aligned_allocator</a>&lt; U &gt; &amp;)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="426abbf5243087148f5e3767e68c286b"></a><!-- doxytag: member="tbb::operator!=" ref="426abbf5243087148f5e3767e68c286b" args="(const cache_aligned_allocator&lt; T &gt; &amp;, const cache_aligned_allocator&lt; U &gt; &amp;)" -->
+template&lt;typename T, typename U&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00125.html">cache_aligned_allocator</a>&lt; T &gt; &amp;, const <a class="el" href="a00125.html">cache_aligned_allocator</a>&lt; U &gt; &amp;)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="2babc190640003767a3049a4d3c5ee35"></a><!-- doxytag: member="tbb::tbb_hasher" ref="2babc190640003767a3049a4d3c5ee35" args="(const T &amp;t)" -->
+template&lt;typename T&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">static size_t&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a> (const T &amp;t)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Hasher functions. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="3835d3fac75c3963cbfc312c67ddbba3"></a><!-- doxytag: member="tbb::tbb_hasher" ref="3835d3fac75c3963cbfc312c67ddbba3" args="(P *ptr)" -->
+template&lt;typename P&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">static size_t&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb_hasher</b> (P *ptr)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="057a50bf70efdeabd5756f8698015b0f"></a><!-- doxytag: member="tbb::tbb_hasher" ref="057a50bf70efdeabd5756f8698015b0f" args="(const std::basic_string&lt; E, S, A &gt; &amp;s)" -->
+template&lt;typename E, typename S, typename A&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">static size_t&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb_hasher</b> (const std::basic_string&lt; E, S, A &gt; &amp;s)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="77bb4a96964d4d9cb058a9791bac9b0d"></a><!-- doxytag: member="tbb::tbb_hasher" ref="77bb4a96964d4d9cb058a9791bac9b0d" args="(const std::pair&lt; F, S &gt; &amp;p)" -->
+template&lt;typename F, typename S&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">static size_t&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb_hasher</b> (const std::pair&lt; F, S &gt; &amp;p)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f3609fc523a99c101572fdc68f918d66"></a><!-- doxytag: member="tbb::operator==" ref="f3609fc523a99c101572fdc68f918d66" args="(const concurrent_hash_map&lt; Key, T, HashCompare, A1 &gt; &amp;a, const concurrent_hash_map&lt; Key, T, HashCompare, A2 &gt; &amp;b)" -->
+template&lt;typename Key, typename T, typename HashCompare, typename A1, typename A2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00130.html">concurrent_hash_map</a>&lt; Key, T, HashCompare, A1 &gt; &amp;a, const <a class="el" href="a00130.html">concurrent_hash_map</a>&lt; Key, T, HashCompare, A2 &gt; &amp;b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="2da30ff86b9a39722f45bc35e1c6934d"></a><!-- doxytag: member="tbb::operator!=" ref="2da30ff86b9a39722f45bc35e1c6934d" args="(const concurrent_hash_map&lt; Key, T, HashCompare, A1 &gt; &amp;a, const concurrent_hash_map&lt; Key, T, HashCompare, A2 &gt; &amp;b)" -->
+template&lt;typename Key, typename T, typename HashCompare, typename A1, typename A2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00130.html">concurrent_hash_map</a>&lt; Key, T, HashCompare, A1 &gt; &amp;a, const <a class="el" href="a00130.html">concurrent_hash_map</a>&lt; Key, T, HashCompare, A2 &gt; &amp;b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="817c20df80fe1a933a8557eb76113e24"></a><!-- doxytag: member="tbb::swap" ref="817c20df80fe1a933a8557eb76113e24" args="(concurrent_hash_map&lt; Key, T, HashCompare, A &gt; &amp;a, concurrent_hash_map&lt; Key, T, HashCompare, A &gt; &amp;b)" -->
+template&lt;typename Key, typename T, typename HashCompare, typename A&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00130.html">concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt; &amp;a, <a class="el" href="a00130.html">concurrent_hash_map</a>&lt; Key, T, HashCompare, A &gt; &amp;b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="11419db87ac98110907dda08a24f0949"></a><!-- doxytag: member="tbb::operator==" ref="11419db87ac98110907dda08a24f0949" args="(const concurrent_vector&lt; T, A1 &gt; &amp;a, const concurrent_vector&lt; T, A2 &gt; &amp;b)" -->
+template&lt;typename T, class A1, class A2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="aa9e09f2e9154ffd6658fad8355fb491"></a><!-- doxytag: member="tbb::operator!=" ref="aa9e09f2e9154ffd6658fad8355fb491" args="(const concurrent_vector&lt; T, A1 &gt; &amp;a, const concurrent_vector&lt; T, A2 &gt; &amp;b)" -->
+template&lt;typename T, class A1, class A2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="33267dd805415351956d45b4b5347190"></a><!-- doxytag: member="tbb::operator&lt;" ref="33267dd805415351956d45b4b5347190" args="(const concurrent_vector&lt; T, A1 &gt; &amp;a, const concurrent_vector&lt; T, A2 &gt; &amp;b)" -->
+template&lt;typename T, class A1, class A2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator&lt;</b> (const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="14e2968ab20cb714bef1f0352fc152f0"></a><!-- doxytag: member="tbb::operator&gt;" ref="14e2968ab20cb714bef1f0352fc152f0" args="(const concurrent_vector&lt; T, A1 &gt; &amp;a, const concurrent_vector&lt; T, A2 &gt; &amp;b)" -->
+template&lt;typename T, class A1, class A2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator&gt;</b> (const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="0042a36a670a397fb52e713edbaecd0e"></a><!-- doxytag: member="tbb::operator&lt;=" ref="0042a36a670a397fb52e713edbaecd0e" args="(const concurrent_vector&lt; T, A1 &gt; &amp;a, const concurrent_vector&lt; T, A2 &gt; &amp;b)" -->
+template&lt;typename T, class A1, class A2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator&lt;=</b> (const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f70eb1d931473b69ba4bcf93af8baa33"></a><!-- doxytag: member="tbb::operator&gt;=" ref="f70eb1d931473b69ba4bcf93af8baa33" args="(const concurrent_vector&lt; T, A1 &gt; &amp;a, const concurrent_vector&lt; T, A2 &gt; &amp;b)" -->
+template&lt;typename T, class A1, class A2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator&gt;=</b> (const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A1 &gt; &amp;a, const <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A2 &gt; &amp;b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4a3897ea8d8a48e885d764bd7d370d50"></a><!-- doxytag: member="tbb::swap" ref="4a3897ea8d8a48e885d764bd7d370d50" args="(concurrent_vector&lt; T, A &gt; &amp;a, concurrent_vector&lt; T, A &gt; &amp;b)" -->
+template&lt;typename T, class A&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A &gt; &amp;a, <a class="el" href="a00136.html">concurrent_vector</a>&lt; T, A &gt; &amp;b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="cac990ecc7b1d2088bf5d047801d63a5"></a><!-- doxytag: member="tbb::flatten2d" ref="cac990ecc7b1d2088bf5d047801d63a5" args="(const Container &amp;c, const typename Container::const_iterator b, const typename Container::const_iterator e)" -->
+template&lt;typename Container&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">flattened2d&lt; Container &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>flatten2d</b> (const Container &amp;c, const typename Container::const_iterator b, const typename Container::const_iterator e)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="b327db9f1ccb9bdfcdbacbf07fac6d10"></a><!-- doxytag: member="tbb::flatten2d" ref="b327db9f1ccb9bdfcdbacbf07fac6d10" args="(const Container &amp;c)" -->
+template&lt;typename Container&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">flattened2d&lt; Container &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>flatten2d</b> (const Container &amp;c)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="906ebb461ecb0446989739fd0399e4b8"></a><!-- doxytag: member="tbb::operator==" ref="906ebb461ecb0446989739fd0399e4b8" args="(const scalable_allocator&lt; T &gt; &amp;, const scalable_allocator&lt; U &gt; &amp;)" -->
+template&lt;typename T, typename U&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00158.html">scalable_allocator</a>&lt; T &gt; &amp;, const <a class="el" href="a00158.html">scalable_allocator</a>&lt; U &gt; &amp;)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a92757aca0a69082eb8dc223eb257433"></a><!-- doxytag: member="tbb::operator!=" ref="a92757aca0a69082eb8dc223eb257433" args="(const scalable_allocator&lt; T &gt; &amp;, const scalable_allocator&lt; U &gt; &amp;)" -->
+template&lt;typename T, typename U&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00158.html">scalable_allocator</a>&lt; T &gt; &amp;, const <a class="el" href="a00158.html">scalable_allocator</a>&lt; U &gt; &amp;)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7e2f5baabe173fbf48e94fb9058f1b41"></a><!-- doxytag: member="tbb::is_current_task_group_canceling" ref="7e2f5baabe173fbf48e94fb9058f1b41" args="()" -->
+bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>is_current_task_group_canceling</b> ()</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="c8a46d6c0fe474eb399d0d09c27a4685"></a><!-- doxytag: member="tbb::operator==" ref="c8a46d6c0fe474eb399d0d09c27a4685" args="(const tbb_allocator&lt; T &gt; &amp;, const tbb_allocator&lt; U &gt; &amp;)" -->
+template&lt;typename T, typename U&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00170.html">tbb_allocator</a>&lt; T &gt; &amp;, const <a class="el" href="a00170.html">tbb_allocator</a>&lt; U &gt; &amp;)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="3d9665c21c894f06f1614947103dc9d6"></a><!-- doxytag: member="tbb::operator!=" ref="3d9665c21c894f06f1614947103dc9d6" args="(const tbb_allocator&lt; T &gt; &amp;, const tbb_allocator&lt; U &gt; &amp;)" -->
+template&lt;typename T, typename U&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00170.html">tbb_allocator</a>&lt; T &gt; &amp;, const <a class="el" href="a00170.html">tbb_allocator</a>&lt; U &gt; &amp;)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="b64fb7e52f0049b5a103cbb6fb5814f0"></a><!-- doxytag: member="tbb::operator==" ref="b64fb7e52f0049b5a103cbb6fb5814f0" args="(const zero_allocator&lt; T1, B1 &gt; &amp;a, const zero_allocator&lt; T2, B2 &gt; &amp;b)" -->
+template&lt;typename T1, template&lt; typename X1 &gt; class B1, typename T2, template&lt; typename X2 &gt; class B2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00179.html">zero_allocator</a>&lt; T1, B1 &gt; &amp;a, const <a class="el" href="a00179.html">zero_allocator</a>&lt; T2, B2 &gt; &amp;b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ae43b5151d0220fe3ade0b447cd64f0d"></a><!-- doxytag: member="tbb::operator!=" ref="ae43b5151d0220fe3ade0b447cd64f0d" args="(const zero_allocator&lt; T1, B1 &gt; &amp;a, const zero_allocator&lt; T2, B2 &gt; &amp;b)" -->
+template&lt;typename T1, template&lt; typename X1 &gt; class B1, typename T2, template&lt; typename X2 &gt; class B2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00179.html">zero_allocator</a>&lt; T1, B1 &gt; &amp;a, const <a class="el" href="a00179.html">zero_allocator</a>&lt; T2, B2 &gt; &amp;b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="823fa1c15dd829d1d9167157450ddcd9"></a><!-- doxytag: member="tbb::set_assertion_handler" ref="823fa1c15dd829d1d9167157450ddcd9" args="(assertion_handler_type new_handler)" -->
+<a class="el" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> __TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#823fa1c15dd829d1d9167157450ddcd9">set_assertion_handler</a> (<a class="el" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> new_handler)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set assertion handler and return previous value of it. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#3d1252787be39b4aef311f1cadaff9e8">assertion_failure</a> (const char *filename, int line, const char *expression, const char *comment)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Process an assertion failure.  <a href="#3d1252787be39b4aef311f1cadaff9e8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int __TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a6858b22e90041c9c4669674ff39b056">TBB_runtime_interface_version</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The function returns the interface version of the TBB shared library being used.  <a href="#a6858b22e90041c9c4669674ff39b056"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6a42aa5dbcf06ba86c71efb73d8311c3"></a><!-- doxytag: member="tbb::operator-" ref="6a42aa5dbcf06ba86c71efb73d8311c3" args="(const tick_count &amp;t1, const tick_count &amp;t0)" -->
+<a class="el" href="a00177.html">tick_count::interval_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00176.html">tick_count</a> &amp;t1, const <a class="el" href="a00176.html">tick_count</a> &amp;t0)</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6902d551186a654ffbf88582d4a0bdfa"></a><!-- doxytag: member="tbb::hash_multiplier" ref="6902d551186a654ffbf88582d4a0bdfa" args="" -->
+static const size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#6902d551186a654ffbf88582d4a0bdfa">hash_multiplier</a> = sizeof(size_t)==4? 2654435769U : 11400714819323198485ULL</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Hash multiplier. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The namespace tbb contains all components of the library. <hr><h2>Enumeration Type Documentation</h2>
+<a class="anchor" name="a8686246bb5d3664bd07563749970fef"></a><!-- doxytag: member="tbb::memory_semantics" ref="a8686246bb5d3664bd07563749970fef" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fef">tbb::memory_semantics</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Specifies memory fencing. 
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c"></a><!-- doxytag: member="__TBB_full_fence" ref="a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c" args="" -->__TBB_full_fence</em>&nbsp;</td><td>
+For internal use only. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7"></a><!-- doxytag: member="acquire" ref="a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7" args="" -->acquire</em>&nbsp;</td><td>
+Acquire fence. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70"></a><!-- doxytag: member="release" ref="a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70" args="" -->release</em>&nbsp;</td><td>
+Release fence. </td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="3d1252787be39b4aef311f1cadaff9e8"></a><!-- doxytag: member="tbb::assertion_failure" ref="3d1252787be39b4aef311f1cadaff9e8" args="(const char *filename, int line, const char *expression, const char *comment)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_FUNC tbb::assertion_failure           </td>
+          <td>(</td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>filename</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&nbsp;</td>
+          <td class="paramname"> <em>line</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>expression</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&nbsp;</td>
+          <td class="paramname"> <em>comment</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Process an assertion failure. 
+<p>
+Normally called from __TBB_ASSERT macro. If assertion handler is null, print message for assertion failure and abort. Otherwise call the assertion handler. 
+</div>
+</div><p>
+<a class="anchor" name="a6858b22e90041c9c4669674ff39b056"></a><!-- doxytag: member="tbb::TBB_runtime_interface_version" ref="a6858b22e90041c9c4669674ff39b056" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int __TBB_EXPORTED_FUNC tbb::TBB_runtime_interface_version           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The function returns the interface version of the TBB shared library being used. 
+<p>
+The version it returns is determined at runtime, not at compile/link time. So it can be different than the value of TBB_INTERFACE_VERSION obtained at compile time. 
+</div>
+</div><p>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00232.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00232.html
new file mode 100644 (file)
index 0000000..1f8d33f
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::strict_ppl Namespace Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="namespaces.html"><span>Namespace List</span></a></li>
+    <li><a href="namespacemembers.html"><span>Namespace&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="a00229.html">tbb</a>::<a class="el" href="a00232.html">strict_ppl</a></div>
+<h1>tbb::strict_ppl Namespace Reference</h1>For internal use only.  
+<a href="#_details">More...</a>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html">concurrent_queue</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A high-performance thread-safe non-blocking concurrent queue.  <a href="a00134.html#_details">More...</a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="c2173259899af1fe7751a32139ec3ebf"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="c2173259899af1fe7751a32139ec3ebf" args="(Index first, Index last, Index step, Function f)" -->
+template&lt;typename Index, typename Function&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Function&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00232.html#c2173259899af1fe7751a32139ec3ebf">parallel_for</a> (Index first, Index last, Index step, Function f)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over a range of integers with a step provided. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="997d844720a5a67b990c7d4ee1de022b"></a><!-- doxytag: member="tbb::strict_ppl::parallel_for" ref="997d844720a5a67b990c7d4ee1de022b" args="(Index first, Index last, Index step, Function f, tbb::task_group_context &amp;context)" -->
+template&lt;typename Index, typename Function&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Function&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>parallel_for</b> (Index first, Index last, Index step, Function f, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+For internal use only. <hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00233.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00233.html
new file mode 100644 (file)
index 0000000..ee9c111
--- /dev/null
@@ -0,0 +1,359 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Algorithms</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<h1>Algorithms</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A range over which to iterate.  <a href="a00122.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A 2-dimensional range that models the Range concept.  <a href="a00123.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A 3-dimensional range that models the Range concept.  <a href="a00124.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html">tbb::pre_scan_tag</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Used to indicate that the initial scan is being performed.  <a href="a00151.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html">tbb::final_scan_tag</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Used to indicate that the final scan is being performed.  <a href="a00140.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html">tbb::parallel_while&lt; Body &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over a stream, with optional addition of more work.  <a href="a00149.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html">tbb::simple_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A simple partitioner.  <a href="a00160.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00120.html">tbb::auto_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An auto partitioner.  <a href="a00120.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html">tbb::filter</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A stage in a pipeline.  <a href="a00139.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A stage in a pipeline served by a user thread.  <a href="a00175.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html">tbb::pipeline</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A processing pipeling that applies filters to items.  <a href="a00150.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html">tbb::split</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor.  <a href="a00165.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_do</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="parallel_do_body_req.html">parallel_do Body</a>. <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3383e2703977012b6f384d673410f1f7"></a><!-- doxytag: member="algorithms::parallel_do" ref="g3383e2703977012b6f384d673410f1f7" args="(Iterator first, Iterator last, const Body &amp;body)" -->
+template&lt;typename Iterator, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (Iterator first, Iterator last, const Body &amp;body)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over a range, with optional addition of more work. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g2617dc9b88b3285a7212599d49f74228"></a><!-- doxytag: member="algorithms::parallel_do" ref="g2617dc9b88b3285a7212599d49f74228" args="(Iterator first, Iterator last, const Body &amp;body, task_group_context &amp;context)" -->
+template&lt;typename Iterator, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g2617dc9b88b3285a7212599d49f74228">tbb::parallel_do</a> (Iterator first, Iterator last, const Body &amp;body, task_group_context &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over a range, with optional addition of more work and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_for</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_for_body_req.html">parallel_for Body</a>. <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g68cc046ef72c42ce205fccbc435a0d81"></a><!-- doxytag: member="algorithms::parallel_for" ref="g68cc046ef72c42ce205fccbc435a0d81" args="(const Range &amp;range, const Body &amp;body)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g13cac5dd55c7533bccea43a51c33d0e5"></a><!-- doxytag: member="algorithms::parallel_for" ref="g13cac5dd55c7533bccea43a51c33d0e5" args="(const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g13cac5dd55c7533bccea43a51c33d0e5">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with simple partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga7ac75d532389b55b9247f3fdb0b00d1"></a><!-- doxytag: member="algorithms::parallel_for" ref="ga7ac75d532389b55b9247f3fdb0b00d1" args="(const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ga7ac75d532389b55b9247f3fdb0b00d1">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00120.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g9cd1b210ceb1c040f30e390b4a21bde8"></a><!-- doxytag: member="algorithms::parallel_for" ref="g9cd1b210ceb1c040f30e390b4a21bde8" args="(const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g9cd1b210ceb1c040f30e390b4a21bde8">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00115.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g2d317a5e0078cd193125439fed60dfdc"></a><!-- doxytag: member="algorithms::parallel_for" ref="g2d317a5e0078cd193125439fed60dfdc" args="(const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g2d317a5e0078cd193125439fed60dfdc">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const simple_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g1c0700e3f85e83a788ff3ede88ebb7e9"></a><!-- doxytag: member="algorithms::parallel_for" ref="g1c0700e3f85e83a788ff3ede88ebb7e9" args="(const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g1c0700e3f85e83a788ff3ede88ebb7e9">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, const auto_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g04b4696b67370c01353ff5974c8f1196"></a><!-- doxytag: member="algorithms::parallel_for" ref="g04b4696b67370c01353ff5974c8f1196" args="(const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g04b4696b67370c01353ff5974c8f1196">tbb::parallel_for</a> (const Range &amp;range, const Body &amp;body, affinity_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00115.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_for_each</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gbcb40499f038fd82deca88366b404790"></a><!-- doxytag: member="algorithms::parallel_for_each" ref="gbcb40499f038fd82deca88366b404790" args="(InputIterator first, InputIterator last, Function f, task_group_context &amp;context)" -->
+template&lt;typename InputIterator, typename Function&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Function&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gbcb40499f038fd82deca88366b404790">tbb::parallel_for_each</a> (InputIterator first, InputIterator last, Function f, task_group_context &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calls function f for all items from [first, last) interval using user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g85a58ff0853f129adb6f9e4355326ccc"></a><!-- doxytag: member="algorithms::parallel_for_each" ref="g85a58ff0853f129adb6f9e4355326ccc" args="(InputIterator first, InputIterator last, Function f)" -->
+template&lt;typename InputIterator, typename Function&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Function&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g85a58ff0853f129adb6f9e4355326ccc">tbb::parallel_for_each</a> (InputIterator first, InputIterator last, Function f)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Uses default context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_invoke</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gbaadafdb93d290acec86e07fc8909c29"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gbaadafdb93d290acec86e07fc8909c29" args="(F0 f0, F1 f1, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">tbb::parallel_invoke</a> (F0 f0, F1 f1, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Executes a list of tasks in parallel and waits for all tasks to complete. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3cbf43007d0caeb4a2470265f50b25df"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g3cbf43007d0caeb4a2470265f50b25df" args="(F0 f0, F1 f1, F2 f2, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g063924a497ba64c49351e80e39bd2c17"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g063924a497ba64c49351e80e39bd2c17" args="(F0 f0, F1 f1, F2 f2, F3 f3, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g2ca8b49b9b36515247e45ffd9c0c11cf"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g2ca8b49b9b36515247e45ffd9c0c11cf" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g559685c3c13e103c6d570efef419c2b9"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g559685c3c13e103c6d570efef419c2b9" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd979d007cc4026c34691a4b38edd36af"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gd979d007cc4026c34691a4b38edd36af" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd01a5d8f4902387d9081352e1edd1632"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gd01a5d8f4902387d9081352e1edd1632" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g0a66bfc0ac0691dfa71d230f5c8c3e96"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g0a66bfc0ac0691dfa71d230f5c8c3e96" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g7182f6b5c88469cfc2b7c2ebbbd4a28c"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g7182f6b5c88469cfc2b7c2ebbbd4a28c" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9, tbb::task_group_context &amp;context)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8, typename F9&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb999ec5f8b7f0b68b9752f11ad39ab08"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gb999ec5f8b7f0b68b9752f11ad39ab08" args="(F0 f0, F1 f1)" -->
+template&lt;typename F0, typename F1&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb3783b5fbb1fdb4d2a6b3b4c6be8d4dd"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gb3783b5fbb1fdb4d2a6b3b4c6be8d4dd" args="(F0 f0, F1 f1, F2 f2)" -->
+template&lt;typename F0, typename F1, typename F2&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g89c0569d95abd182f80acc38d0dbe2d4"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g89c0569d95abd182f80acc38d0dbe2d4" args="(F0 f0, F1 f1, F2 f2, F3 f3)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3ef71e9441745fe708e66a0b817bebc7"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g3ef71e9441745fe708e66a0b817bebc7" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g78fa19efd1a7cf7ffd1c23251c80b31d"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g78fa19efd1a7cf7ffd1c23251c80b31d" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gab2e69dbef9b3f0e658cf4b8e574f552"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="gab2e69dbef9b3f0e658cf4b8e574f552" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g262f0347e5690bb692b6dc26e26b9ebe"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g262f0347e5690bb692b6dc26e26b9ebe" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g06a090fbd0eaaccf20e2409a2a222733"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g06a090fbd0eaaccf20e2409a2a222733" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3330e3c33053875705e19e29eda37627"></a><!-- doxytag: member="algorithms::parallel_invoke" ref="g3330e3c33053875705e19e29eda37627" args="(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9)" -->
+template&lt;typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6, typename F7, typename F8, typename F9&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>tbb::parallel_invoke</b> (F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9)</td></tr>
+
+<tr><td colspan="2"><br><h2>parallel_reduce</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_reduce_body_req.html">parallel_reduce Body</a>. <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g1b3d59c5eb62683c5754db6970392fa3"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="g1b3d59c5eb62683c5754db6970392fa3" args="(const Range &amp;range, Body &amp;body)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gec1b7c03f9da909bef5db12e3d41bed3"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gec1b7c03f9da909bef5db12e3d41bed3" args="(const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gec1b7c03f9da909bef5db12e3d41bed3">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00160.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g18a19157e6245992fc00ca0adeb7dd37"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="g18a19157e6245992fc00ca0adeb7dd37" args="(const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g18a19157e6245992fc00ca0adeb7dd37">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00120.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc61e73fcc36c92d79a217fc355ff4a6b"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gc61e73fcc36c92d79a217fc355ff4a6b" args="(const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gc61e73fcc36c92d79a217fc355ff4a6b">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00115.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g45cb00c42a18e334bbde8b7535afe460"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="g45cb00c42a18e334bbde8b7535afe460" args="(const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g45cb00c42a18e334bbde8b7535afe460">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g1c1ea1d7c61b3c225e92c70d669a53a5"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="g1c1ea1d7c61b3c225e92c70d669a53a5" args="(const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g1c1ea1d7c61b3c225e92c70d669a53a5">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gd9ac3a3811060314695f33b703c6e11b"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gd9ac3a3811060314695f33b703c6e11b" args="(const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gd9ac3a3811060314695f33b703c6e11b">tbb::parallel_reduce</a> (const Range &amp;range, Body &amp;body, affinity_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00115.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc9412e09fb01fcad8c018ea9cffb28ef"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gc9412e09fb01fcad8c018ea9cffb28ef" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gc9412e09fb01fcad8c018ea9cffb28ef">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gaddffeec0e892ac3d6fc7fc2053e1eca"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gaddffeec0e892ac3d6fc7fc2053e1eca" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gaddffeec0e892ac3d6fc7fc2053e1eca">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00160.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb175401f0729e40dd2c5860a17c14385"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gb175401f0729e40dd2c5860a17c14385" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gb175401f0729e40dd2c5860a17c14385">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00120.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb7f1f1828ae2b330ce05b8513a495154"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gb7f1f1828ae2b330ce05b8513a495154" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gb7f1f1828ae2b330ce05b8513a495154">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00115.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gfbc0cc2026d87f11a96bcd62788f5bb5"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="gfbc0cc2026d87f11a96bcd62788f5bb5" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gfbc0cc2026d87f11a96bcd62788f5bb5">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const simple_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g630c90a399937d9d4ae70ff883186dfd"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="g630c90a399937d9d4ae70ff883186dfd" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g630c90a399937d9d4ae70ff883186dfd">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, const auto_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g496bd7eadb3b97495ccb5655ef90319e"></a><!-- doxytag: member="algorithms::parallel_reduce" ref="g496bd7eadb3b97495ccb5655ef90319e" args="(const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner, task_group_context &amp;context)" -->
+template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g496bd7eadb3b97495ccb5655ef90319e">tbb::parallel_reduce</a> (const Range &amp;range, const Value &amp;identity, const RealBody &amp;real_body, const Reduction &amp;reduction, affinity_partitioner &amp;partitioner, task_group_context &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00115.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_scan</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_scan_body_req.html">parallel_scan Body</a>. <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ged143f31dd3d96ded02ab3db915b91c7"></a><!-- doxytag: member="algorithms::parallel_scan" ref="ged143f31dd3d96ded02ab3db915b91c7" args="(const Range &amp;range, Body &amp;body)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">tbb::parallel_scan</a> (const Range &amp;range, Body &amp;body)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel prefix with default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc9fac8870b2e6365fb337014404529df"></a><!-- doxytag: member="algorithms::parallel_scan" ref="gc9fac8870b2e6365fb337014404529df" args="(const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gc9fac8870b2e6365fb337014404529df">tbb::parallel_scan</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel prefix with <a class="el" href="a00160.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g62fde400a37bbca1a2fddc8e3d22f556"></a><!-- doxytag: member="algorithms::parallel_scan" ref="g62fde400a37bbca1a2fddc8e3d22f556" args="(const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb::parallel_scan</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel prefix with <a class="el" href="a00120.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb7451aa58925fb7bb579b367c4ba3500"></a><!-- doxytag: member="algorithms::parallel_scan" ref="gb7451aa58925fb7bb579b367c4ba3500" args="(const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, tbb::task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gb7451aa58925fb7bb579b367c4ba3500">tbb::parallel_scan</a> (const Range &amp;range, Body &amp;body, const simple_partitioner &amp;partitioner, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel prefix with <a class="el" href="a00160.html">simple_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g40a7c46037dbafa74fce7a91cc60d9d7"></a><!-- doxytag: member="algorithms::parallel_scan" ref="g40a7c46037dbafa74fce7a91cc60d9d7" args="(const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner, tbb::task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g40a7c46037dbafa74fce7a91cc60d9d7">tbb::parallel_scan</a> (const Range &amp;range, Body &amp;body, const auto_partitioner &amp;partitioner, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel prefix with <a class="el" href="a00120.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g83716e2b2926c1fc225802aa309fd2bf"></a><!-- doxytag: member="algorithms::parallel_scan" ref="g83716e2b2926c1fc225802aa309fd2bf" args="(const Range &amp;range, Body &amp;body, tbb::task_group_context &amp;context)" -->
+template&lt;typename Range, typename Body&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g83716e2b2926c1fc225802aa309fd2bf">tbb::parallel_scan</a> (const Range &amp;range, Body &amp;body, <a class="el" href="a00167.html">tbb::task_group_context</a> &amp;context)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parallel prefix with default partitioner and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_sort</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="parallel_sort_iter_req.html">iterators for parallel_sort</a>. <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template&lt;typename RandomAccessIterator, typename Compare&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &amp;comp)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sorts the data in [begin,end) using the given comparator.  <a href="#g49edcf9447cd91a9527a3f8e8512b7aa"></a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g16c3eb77d0e530834c51ce3857f01012"></a><!-- doxytag: member="algorithms::parallel_sort" ref="g16c3eb77d0e530834c51ce3857f01012" args="(RandomAccessIterator begin, RandomAccessIterator end)" -->
+template&lt;typename RandomAccessIterator&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#g16c3eb77d0e530834c51ce3857f01012">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sorts the data in [begin,end) with a default comparator <code>std::less&lt;RandomAccessIterator&gt;</code>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gc7576f82fdedc8a701a6c17ad9415926"></a><!-- doxytag: member="algorithms::parallel_sort" ref="gc7576f82fdedc8a701a6c17ad9415926" args="(T *begin, T *end)" -->
+template&lt;typename T&gt; </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gc7576f82fdedc8a701a6c17ad9415926">tbb::parallel_sort</a> (T *begin, T *end)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less&lt;T&gt;</code>. <br></td></tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g49edcf9447cd91a9527a3f8e8512b7aa"></a><!-- doxytag: member="tbb::parallel_sort" ref="g49edcf9447cd91a9527a3f8e8512b7aa" args="(RandomAccessIterator begin, RandomAccessIterator end, const Compare &amp;comp)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename RandomAccessIterator, typename Compare&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_sort           </td>
+          <td>(</td>
+          <td class="paramtype">RandomAccessIterator&nbsp;</td>
+          <td class="paramname"> <em>begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">RandomAccessIterator&nbsp;</td>
+          <td class="paramname"> <em>end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Compare &amp;&nbsp;</td>
+          <td class="paramname"> <em>comp</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Sorts the data in [begin,end) using the given comparator. 
+<p>
+The compare function object is used for all comparisons between elements during sorting. The compare object must define a bool operator() function. 
+</div>
+</div><p>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00234.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00234.html
new file mode 100644 (file)
index 0000000..4147d05
--- /dev/null
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Containers</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<h1>Containers</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00128.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unordered map from Key to T.  <a href="a00130.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A high-performance thread-safe non-blocking concurrent queue.  <a href="a00134.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00129.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A high-performance thread-safe blocking concurrent bounded queue.  <a href="a00135.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Concurrent vector container.  <a href="a00136.html#_details">More...</a><br></td></tr>
+</table>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00235.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00235.html
new file mode 100644 (file)
index 0000000..e267936
--- /dev/null
@@ -0,0 +1,291 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Memory Allocation</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<h1>Memory Allocation</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00116.html">tbb::aligned_space&lt; T, N &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Block of space aligned sufficiently to construct an array T with N elements.  <a href="a00116.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00125.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html">tbb::cache_aligned_allocator&lt; void &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00126.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00158.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html">tbb::scalable_allocator&lt; void &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00159.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00170.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html">tbb::tbb_allocator&lt; void &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00171.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00179.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html">tbb::zero_allocator&lt; void, Allocator &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00180.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a> (size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a> (void *ptr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_realloc</a> (void *ptr, size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int __TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (void **memptr, size_t alignment, size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_aligned_malloc</a> (size_t size, size_t alignment)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_aligned_realloc</a> (void *ptr, size_t size, size_t alignment)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (void *ptr)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g65a20e812012f15ec7442d5b45d0cba5"></a><!-- doxytag: member="scalable_allocator.h::scalable_aligned_free" ref="g65a20e812012f15ec7442d5b45d0cba5" args="(void *ptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_FUNC scalable_aligned_free           </td>
+          <td>(</td>
+          <td class="paramtype">void *&nbsp;</td>
+          <td class="paramname"> <em>ptr</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The "_aligned_free" analogue. 
+</div>
+</div><p>
+<a class="anchor" name="gc1c7aaa1fe85c17ba5a3a96f7e8d89e7"></a><!-- doxytag: member="scalable_allocator.h::scalable_aligned_malloc" ref="gc1c7aaa1fe85c17ba5a3a96f7e8d89e7" args="(size_t size, size_t alignment)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_aligned_malloc           </td>
+          <td>(</td>
+          <td class="paramtype">size_t&nbsp;</td>
+          <td class="paramname"> <em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&nbsp;</td>
+          <td class="paramname"> <em>alignment</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The "_aligned_malloc" analogue. 
+</div>
+</div><p>
+<a class="anchor" name="gbaea91376be80dfabd7c93eaffd9abaa"></a><!-- doxytag: member="scalable_allocator.h::scalable_aligned_realloc" ref="gbaea91376be80dfabd7c93eaffd9abaa" args="(void *ptr, size_t size, size_t alignment)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_aligned_realloc           </td>
+          <td>(</td>
+          <td class="paramtype">void *&nbsp;</td>
+          <td class="paramname"> <em>ptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&nbsp;</td>
+          <td class="paramname"> <em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&nbsp;</td>
+          <td class="paramname"> <em>alignment</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The "_aligned_realloc" analogue. 
+</div>
+</div><p>
+<a class="anchor" name="g3f5a2fde0bcaa3eda35be32c8658f444"></a><!-- doxytag: member="scalable_allocator.h::scalable_calloc" ref="g3f5a2fde0bcaa3eda35be32c8658f444" args="(size_t nobj, size_t size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_calloc           </td>
+          <td>(</td>
+          <td class="paramtype">size_t&nbsp;</td>
+          <td class="paramname"> <em>nobj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&nbsp;</td>
+          <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The "calloc" analogue complementing scalable_malloc. 
+</div>
+</div><p>
+<a class="anchor" name="gca3579c21244dba9f0c351e5984d4565"></a><!-- doxytag: member="scalable_allocator.h::scalable_free" ref="gca3579c21244dba9f0c351e5984d4565" args="(void *ptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_FUNC scalable_free           </td>
+          <td>(</td>
+          <td class="paramtype">void *&nbsp;</td>
+          <td class="paramname"> <em>ptr</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The "free" analogue to discard a previously allocated piece of memory. 
+</div>
+</div><p>
+<a class="anchor" name="gc25b8e6c76db0b346a8249796a7a2475"></a><!-- doxytag: member="scalable_allocator.h::scalable_malloc" ref="gc25b8e6c76db0b346a8249796a7a2475" args="(size_t size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_malloc           </td>
+          <td>(</td>
+          <td class="paramtype">size_t&nbsp;</td>
+          <td class="paramname"> <em>size</em>          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The "malloc" analogue to allocate block of memory of size bytes. 
+</div>
+</div><p>
+<a class="anchor" name="g05dcec987480bb2c82ecdead6a085899"></a><!-- doxytag: member="scalable_allocator.h::scalable_posix_memalign" ref="g05dcec987480bb2c82ecdead6a085899" args="(void **memptr, size_t alignment, size_t size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int __TBB_EXPORTED_FUNC scalable_posix_memalign           </td>
+          <td>(</td>
+          <td class="paramtype">void **&nbsp;</td>
+          <td class="paramname"> <em>memptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&nbsp;</td>
+          <td class="paramname"> <em>alignment</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&nbsp;</td>
+          <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The "posix_memalign" analogue. 
+</div>
+</div><p>
+<a class="anchor" name="g951bbbbd2d041acb59ba5fa910b52543"></a><!-- doxytag: member="scalable_allocator.h::scalable_realloc" ref="g951bbbbd2d041acb59ba5fa910b52543" args="(void *ptr, size_t size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_realloc           </td>
+          <td>(</td>
+          <td class="paramtype">void *&nbsp;</td>
+          <td class="paramname"> <em>ptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&nbsp;</td>
+          <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The "realloc" analogue complementing scalable_malloc. 
+</div>
+</div><p>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00236.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00236.html
new file mode 100644 (file)
index 0000000..288916d
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Synchronization</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<h1>Synchronization</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00117.html">tbb::atomic&lt; T &gt;</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Primary template for atomic.  <a href="a00117.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00142.html">tbb::mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wrapper around the platform's native reader-writer lock.  <a href="a00142.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00144.html">tbb::null_mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A mutex which does nothing.  <a href="a00144.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html">tbb::null_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00146.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html">tbb::queuing_mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Queuing lock with local-only spinning.  <a href="a00152.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reader-writer lock with local-only spinning.  <a href="a00154.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html">tbb::recursive_mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Mutex that allows recursive mutex acquisition.  <a href="a00156.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html">tbb::spin_mutex</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00161.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fast, unfair, spinning reader-writer lock with backoff and writer-preference.  <a href="a00163.html#_details">More...</a><br></td></tr>
+</table>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00237.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00237.html
new file mode 100644 (file)
index 0000000..9f15f5e
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Timing</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<h1>Timing</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html">tbb::tick_count</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Absolute timestamp.  <a href="a00176.html#_details">More...</a><br></td></tr>
+</table>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00238.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00238.html
new file mode 100644 (file)
index 0000000..cb17f55
--- /dev/null
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Task Scheduling</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<h1>Task Scheduling</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html">tbb::task_group_context</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Used to form groups of tasks.  <a href="a00167.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html">tbb::task</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Base class for user-defined tasks.  <a href="a00166.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00137.html">tbb::empty_task</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task that does nothing. Useful for synchronization.  <a href="a00137.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html">tbb::task_list</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A list of children.  <a href="a00168.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Class representing reference to tbb scheduler.  <a href="a00169.html#_details">More...</a><br></td></tr>
+</table>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00239.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00239.html
new file mode 100644 (file)
index 0000000..f46461b
--- /dev/null
@@ -0,0 +1,903 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>_concurrent_queue_internal.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>_concurrent_queue_internal.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_queue_internal_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_queue_internal_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_machine.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "spin_mutex.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include &lt;iterator&gt;</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;new&gt;</span>
+<a name="l00032"></a>00032 
+<a name="l00033"></a><a class="code" href="a00229.html">00033</a> <span class="keyword">namespace </span>tbb {
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span>
+<a name="l00037"></a>00037 <span class="comment">// forward declaration</span>
+<a name="l00038"></a><a class="code" href="a00232.html">00038</a> <span class="keyword">namespace </span>strict_ppl {
+<a name="l00039"></a>00039 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> A&gt; <span class="keyword">class </span><a class="code" href="a00134.html">concurrent_queue</a>;
+<a name="l00040"></a>00040 }
+<a name="l00041"></a>00041 
+<a name="l00042"></a>00042 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> A&gt; <span class="keyword">class </span><a class="code" href="a00129.html">concurrent_bounded_queue</a>;
+<a name="l00043"></a>00043 
+<a name="l00044"></a>00044 <span class="keyword">namespace </span>deprecated {
+<a name="l00045"></a>00045 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> A&gt; <span class="keyword">class </span><a class="code" href="a00134.html">concurrent_queue</a>;
+<a name="l00046"></a>00046 }
+<a name="l00047"></a>00047 <span class="preprocessor">#endif</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span>
+<a name="l00050"></a>00050 <span class="keyword">namespace </span>strict_ppl {
+<a name="l00051"></a>00051 
+<a name="l00053"></a>00053 <span class="keyword">namespace </span>internal {
+<a name="l00054"></a>00054 
+<a name="l00055"></a>00055 <span class="keyword">using namespace </span>tbb::internal;
+<a name="l00056"></a>00056 
+<a name="l00057"></a>00057 <span class="keyword">typedef</span> size_t ticket;
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">void</span>* invalid_page;
+<a name="l00060"></a>00060 
+<a name="l00061"></a>00061 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">class </span>micro_queue ;
+<a name="l00062"></a>00062 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">class </span>micro_queue_pop_finalizer ;
+<a name="l00063"></a>00063 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">class </span>concurrent_queue_base_v3;
+<a name="l00064"></a>00064 
+<a name="l00066"></a>00066 
+<a name="l00069"></a>00069 <span class="keyword">struct </span>concurrent_queue_rep_base : no_copy {
+<a name="l00070"></a>00070     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue;
+<a name="l00071"></a>00071     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_base_v3;
+<a name="l00072"></a>00072 
+<a name="l00073"></a>00073 <span class="keyword">protected</span>:
+<a name="l00075"></a>00075     <span class="keyword">static</span> <span class="keyword">const</span> size_t phi = 3;
+<a name="l00076"></a>00076 
+<a name="l00077"></a>00077 <span class="keyword">public</span>:
+<a name="l00078"></a>00078     <span class="comment">// must be power of 2</span>
+<a name="l00079"></a>00079     <span class="keyword">static</span> <span class="keyword">const</span> size_t n_queue = 8;
+<a name="l00080"></a>00080 
+<a name="l00082"></a>00082     <span class="keyword">struct </span>page {
+<a name="l00083"></a>00083         page* next;
+<a name="l00084"></a>00084         uintptr_t mask; 
+<a name="l00085"></a>00085     };
+<a name="l00086"></a>00086 
+<a name="l00087"></a>00087     atomic&lt;ticket&gt; head_counter;
+<a name="l00088"></a>00088     <span class="keywordtype">char</span> pad1[NFS_MaxLineSize-<span class="keyword">sizeof</span>(atomic&lt;ticket&gt;)];
+<a name="l00089"></a>00089     atomic&lt;ticket&gt; tail_counter;
+<a name="l00090"></a>00090     <span class="keywordtype">char</span> pad2[NFS_MaxLineSize-<span class="keyword">sizeof</span>(atomic&lt;ticket&gt;)];
+<a name="l00091"></a>00091 
+<a name="l00093"></a>00093     size_t items_per_page;
+<a name="l00094"></a>00094 
+<a name="l00096"></a>00096     size_t item_size;
+<a name="l00097"></a>00097 
+<a name="l00099"></a>00099     atomic&lt;size_t&gt; n_invalid_entries;
+<a name="l00100"></a>00100 
+<a name="l00101"></a>00101     <span class="keywordtype">char</span> pad3[NFS_MaxLineSize-<span class="keyword">sizeof</span>(size_t)-<span class="keyword">sizeof</span>(size_t)-<span class="keyword">sizeof</span>(atomic&lt;size_t&gt;)];
+<a name="l00102"></a>00102 } ;
+<a name="l00103"></a>00103 
+<a name="l00105"></a>00105 
+<a name="l00108"></a>00108 <span class="keyword">class </span>concurrent_queue_page_allocator
+<a name="l00109"></a>00109 {
+<a name="l00110"></a>00110     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue ;
+<a name="l00111"></a>00111     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer ;
+<a name="l00112"></a>00112 <span class="keyword">protected</span>:
+<a name="l00113"></a>00113     <span class="keyword">virtual</span> ~concurrent_queue_page_allocator() {}
+<a name="l00114"></a>00114 <span class="keyword">private</span>:
+<a name="l00115"></a>00115     <span class="keyword">virtual</span> concurrent_queue_rep_base::page* allocate_page() = 0;
+<a name="l00116"></a>00116     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( concurrent_queue_rep_base::page* p ) = 0;
+<a name="l00117"></a>00117 } ;
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119 <span class="preprocessor">#if _MSC_VER &amp;&amp; !defined(__INTEL_COMPILER)</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="comment">// unary minus operator applied to unsigned type, result still unsigned</span>
+<a name="l00121"></a>00121 <span class="preprocessor">#pragma warning( push )</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor">#pragma warning( disable: 4146 )</span>
+<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span>
+<a name="l00126"></a>00126 
+<a name="l00128"></a>00128 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00129"></a>00129 <span class="keyword">class </span>micro_queue : no_copy {
+<a name="l00130"></a>00130     <span class="keyword">typedef</span> concurrent_queue_rep_base::page page;
+<a name="l00131"></a>00131 
+<a name="l00133"></a>00133     <span class="keyword">class </span>destroyer: no_copy {
+<a name="l00134"></a>00134         T&amp; my_value;
+<a name="l00135"></a>00135     <span class="keyword">public</span>:
+<a name="l00136"></a>00136         destroyer( T&amp; value ) : my_value(value) {}
+<a name="l00137"></a>00137         ~destroyer() {my_value.~T();}          
+<a name="l00138"></a>00138     };
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140     T&amp; get_ref( page&amp; page, size_t index ) {
+<a name="l00141"></a>00141         <span class="keywordflow">return</span> static_cast&lt;T*&gt;(static_cast&lt;void*&gt;(&amp;page+1))[index];
+<a name="l00142"></a>00142     }
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144     <span class="keywordtype">void</span> copy_item( page&amp; dst, size_t index, <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) {
+<a name="l00145"></a>00145         <span class="keyword">new</span>( &amp;get_ref(dst,index) ) T(*static_cast&lt;const T*&gt;(src)); 
+<a name="l00146"></a>00146     }
+<a name="l00147"></a>00147 
+<a name="l00148"></a>00148     <span class="keywordtype">void</span> copy_item( page&amp; dst, size_t dindex, <span class="keyword">const</span> page&amp; src, size_t sindex ) {
+<a name="l00149"></a>00149         <span class="keyword">new</span>( &amp;get_ref(dst,dindex) ) T( static_cast&lt;const T*&gt;(static_cast&lt;const void*&gt;(&amp;src+1))[sindex] );
+<a name="l00150"></a>00150     }
+<a name="l00151"></a>00151 
+<a name="l00152"></a>00152     <span class="keywordtype">void</span> assign_and_destroy_item( <span class="keywordtype">void</span>* dst, page&amp; src, size_t index ) {
+<a name="l00153"></a>00153         T&amp; from = get_ref(src,index);
+<a name="l00154"></a>00154         destroyer d(from);
+<a name="l00155"></a>00155         *static_cast&lt;T*&gt;(dst) = from;
+<a name="l00156"></a>00156     }
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158     <span class="keywordtype">void</span> spin_wait_until_my_turn( atomic&lt;ticket&gt;&amp; counter, ticket k, concurrent_queue_rep_base&amp; rb ) <span class="keyword">const </span>;
+<a name="l00159"></a>00159 
+<a name="l00160"></a>00160 <span class="keyword">public</span>:
+<a name="l00161"></a>00161     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer&lt;T&gt;;
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163     atomic&lt;page*&gt; head_page;
+<a name="l00164"></a>00164     atomic&lt;ticket&gt; head_counter;
+<a name="l00165"></a>00165 
+<a name="l00166"></a>00166     atomic&lt;page*&gt; tail_page;
+<a name="l00167"></a>00167     atomic&lt;ticket&gt; tail_counter;
+<a name="l00168"></a>00168 
+<a name="l00169"></a>00169     spin_mutex page_mutex;
+<a name="l00170"></a>00170     
+<a name="l00171"></a>00171     <span class="keywordtype">void</span> push( <span class="keyword">const</span> <span class="keywordtype">void</span>* item, ticket k, concurrent_queue_base_v3&lt;T&gt;&amp; base ) ;
+<a name="l00172"></a>00172 
+<a name="l00173"></a>00173     <span class="keywordtype">bool</span> pop( <span class="keywordtype">void</span>* dst, ticket k, concurrent_queue_base_v3&lt;T&gt;&amp; base ) ;
+<a name="l00174"></a>00174 
+<a name="l00175"></a>00175     micro_queue&amp; assign( <span class="keyword">const</span> micro_queue&amp; src, concurrent_queue_base_v3&lt;T&gt;&amp; base ) ;
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177     page* make_copy( concurrent_queue_base_v3&lt;T&gt;&amp; base, <span class="keyword">const</span> page* src_page, size_t begin_in_page, size_t end_in_page, ticket&amp; g_index ) ;
+<a name="l00178"></a>00178 
+<a name="l00179"></a>00179     <span class="keywordtype">void</span> make_invalid( ticket k ) ;
+<a name="l00180"></a>00180 };
+<a name="l00181"></a>00181 
+<a name="l00182"></a>00182 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00183"></a>00183 <span class="keywordtype">void</span> micro_queue&lt;T&gt;::spin_wait_until_my_turn( atomic&lt;ticket&gt;&amp; counter, ticket k, concurrent_queue_rep_base&amp; rb )<span class="keyword"> const </span>{
+<a name="l00184"></a>00184     atomic_backoff backoff;
+<a name="l00185"></a>00185     <span class="keywordflow">do</span> {
+<a name="l00186"></a>00186         backoff.pause();
+<a name="l00187"></a>00187         <span class="keywordflow">if</span>( counter&amp;0x1 ) {
+<a name="l00188"></a>00188             ++rb.n_invalid_entries;
+<a name="l00189"></a>00189             throw_bad_last_alloc_exception_v4();
+<a name="l00190"></a>00190         }
+<a name="l00191"></a>00191     } <span class="keywordflow">while</span>( counter!=k ) ;
+<a name="l00192"></a>00192 }
+<a name="l00193"></a>00193 
+<a name="l00194"></a>00194 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00195"></a>00195 <span class="keywordtype">void</span> micro_queue&lt;T&gt;::push( <span class="keyword">const</span> <span class="keywordtype">void</span>* item, ticket k, concurrent_queue_base_v3&lt;T&gt;&amp; base ) {
+<a name="l00196"></a>00196     k &amp;= -concurrent_queue_rep_base::n_queue;
+<a name="l00197"></a>00197     page* p = NULL;
+<a name="l00198"></a>00198     size_t index = k/concurrent_queue_rep_base::n_queue &amp; (base.my_rep-&gt;items_per_page-1);
+<a name="l00199"></a>00199     <span class="keywordflow">if</span>( !index ) {
+<a name="l00200"></a>00200         <span class="keywordflow">try</span> {
+<a name="l00201"></a>00201             concurrent_queue_page_allocator&amp; pa = base;
+<a name="l00202"></a>00202             p = pa.allocate_page();
+<a name="l00203"></a>00203         } <span class="keywordflow">catch</span> (...) {
+<a name="l00204"></a>00204             ++base.my_rep-&gt;n_invalid_entries;
+<a name="l00205"></a>00205             make_invalid( k );
+<a name="l00206"></a>00206         }
+<a name="l00207"></a>00207         p-&gt;mask = 0;
+<a name="l00208"></a>00208         p-&gt;next = NULL;
+<a name="l00209"></a>00209     }
+<a name="l00210"></a>00210     
+<a name="l00211"></a>00211     <span class="keywordflow">if</span>( tail_counter!=k ) spin_wait_until_my_turn( tail_counter, k, *base.my_rep );
+<a name="l00212"></a>00212         
+<a name="l00213"></a>00213     <span class="keywordflow">if</span>( p ) {
+<a name="l00214"></a>00214         spin_mutex::scoped_lock lock( page_mutex );
+<a name="l00215"></a>00215         <span class="keywordflow">if</span>( page* q = tail_page )
+<a name="l00216"></a>00216             q-&gt;next = p;
+<a name="l00217"></a>00217         <span class="keywordflow">else</span>
+<a name="l00218"></a>00218             head_page = p; 
+<a name="l00219"></a>00219         tail_page = p;
+<a name="l00220"></a>00220     } <span class="keywordflow">else</span> {
+<a name="l00221"></a>00221         p = tail_page;
+<a name="l00222"></a>00222     }
+<a name="l00223"></a>00223    
+<a name="l00224"></a>00224     <span class="keywordflow">try</span> {
+<a name="l00225"></a>00225         copy_item( *p, index, item );
+<a name="l00226"></a>00226         <span class="comment">// If no exception was thrown, mark item as present.</span>
+<a name="l00227"></a>00227         p-&gt;mask |= uintptr_t(1)&lt;&lt;index;
+<a name="l00228"></a>00228         tail_counter += concurrent_queue_rep_base::n_queue; 
+<a name="l00229"></a>00229     } <span class="keywordflow">catch</span> (...) {
+<a name="l00230"></a>00230         ++base.my_rep-&gt;n_invalid_entries;
+<a name="l00231"></a>00231         tail_counter += concurrent_queue_rep_base::n_queue; 
+<a name="l00232"></a>00232         <span class="keywordflow">throw</span>;
+<a name="l00233"></a>00233     }
+<a name="l00234"></a>00234 }
+<a name="l00235"></a>00235 
+<a name="l00236"></a>00236 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00237"></a>00237 <span class="keywordtype">bool</span> micro_queue&lt;T&gt;::pop( <span class="keywordtype">void</span>* dst, ticket k, concurrent_queue_base_v3&lt;T&gt;&amp; base ) {
+<a name="l00238"></a>00238     k &amp;= -concurrent_queue_rep_base::n_queue;
+<a name="l00239"></a>00239     <span class="keywordflow">if</span>( head_counter!=k ) spin_wait_until_eq( head_counter, k );
+<a name="l00240"></a>00240     <span class="keywordflow">if</span>( tail_counter==k ) spin_wait_while_eq( tail_counter, k );
+<a name="l00241"></a>00241     page&amp; p = *head_page;
+<a name="l00242"></a>00242     __TBB_ASSERT( &amp;p, NULL );
+<a name="l00243"></a>00243     size_t index = k/concurrent_queue_rep_base::n_queue &amp; (base.my_rep-&gt;items_per_page-1);
+<a name="l00244"></a>00244     <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; 
+<a name="l00245"></a>00245     {
+<a name="l00246"></a>00246         micro_queue_pop_finalizer&lt;T&gt; finalizer( *<span class="keyword">this</span>, base, k+concurrent_queue_rep_base::n_queue, index==base.my_rep-&gt;items_per_page-1 ? &amp;p : NULL ); 
+<a name="l00247"></a>00247         <span class="keywordflow">if</span>( p.mask &amp; uintptr_t(1)&lt;&lt;index ) {
+<a name="l00248"></a>00248             success = <span class="keyword">true</span>;
+<a name="l00249"></a>00249             assign_and_destroy_item( dst, p, index );
+<a name="l00250"></a>00250         } <span class="keywordflow">else</span> {
+<a name="l00251"></a>00251             --base.my_rep-&gt;n_invalid_entries;
+<a name="l00252"></a>00252         }
+<a name="l00253"></a>00253     }
+<a name="l00254"></a>00254     <span class="keywordflow">return</span> success;
+<a name="l00255"></a>00255 }
+<a name="l00256"></a>00256 
+<a name="l00257"></a>00257 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00258"></a>00258 micro_queue&lt;T&gt;&amp; micro_queue&lt;T&gt;::assign( <span class="keyword">const</span> micro_queue&lt;T&gt;&amp; src, concurrent_queue_base_v3&lt;T&gt;&amp; base ) {
+<a name="l00259"></a>00259     head_counter = src.head_counter;
+<a name="l00260"></a>00260     tail_counter = src.tail_counter;
+<a name="l00261"></a>00261     page_mutex   = src.page_mutex;
+<a name="l00262"></a>00262 
+<a name="l00263"></a>00263     <span class="keyword">const</span> page* srcp = src.head_page;
+<a name="l00264"></a>00264     <span class="keywordflow">if</span>( srcp ) {
+<a name="l00265"></a>00265         ticket g_index = head_counter;
+<a name="l00266"></a>00266         <span class="keywordflow">try</span> {
+<a name="l00267"></a>00267             size_t n_items  = (tail_counter-head_counter)/concurrent_queue_rep_base::n_queue;
+<a name="l00268"></a>00268             size_t index = head_counter/concurrent_queue_rep_base::n_queue &amp; (base.my_rep-&gt;items_per_page-1);
+<a name="l00269"></a>00269             size_t end_in_first_page = (index+n_items&lt;base.my_rep-&gt;items_per_page)?(index+n_items):base.my_rep-&gt;items_per_page;
+<a name="l00270"></a>00270 
+<a name="l00271"></a>00271             head_page = make_copy( base, srcp, index, end_in_first_page, g_index );
+<a name="l00272"></a>00272             page* cur_page = head_page;
+<a name="l00273"></a>00273 
+<a name="l00274"></a>00274             <span class="keywordflow">if</span>( srcp != src.tail_page ) {
+<a name="l00275"></a>00275                 <span class="keywordflow">for</span>( srcp = srcp-&gt;next; srcp!=src.tail_page; srcp=srcp-&gt;next ) {
+<a name="l00276"></a>00276                     cur_page-&gt;next = make_copy( base, srcp, 0, base.my_rep-&gt;items_per_page, g_index );
+<a name="l00277"></a>00277                     cur_page = cur_page-&gt;next;
+<a name="l00278"></a>00278                 }
+<a name="l00279"></a>00279 
+<a name="l00280"></a>00280                 __TBB_ASSERT( srcp==src.tail_page, NULL );
+<a name="l00281"></a>00281                 size_t last_index = tail_counter/concurrent_queue_rep_base::n_queue &amp; (base.my_rep-&gt;items_per_page-1);
+<a name="l00282"></a>00282                 <span class="keywordflow">if</span>( last_index==0 ) last_index = base.my_rep-&gt;items_per_page;
+<a name="l00283"></a>00283 
+<a name="l00284"></a>00284                 cur_page-&gt;next = make_copy( base, srcp, 0, last_index, g_index );
+<a name="l00285"></a>00285                 cur_page = cur_page-&gt;next;
+<a name="l00286"></a>00286             }
+<a name="l00287"></a>00287             tail_page = cur_page;
+<a name="l00288"></a>00288         } <span class="keywordflow">catch</span> (...) {
+<a name="l00289"></a>00289             make_invalid( g_index );
+<a name="l00290"></a>00290         }
+<a name="l00291"></a>00291     } <span class="keywordflow">else</span> {
+<a name="l00292"></a>00292         head_page = tail_page = NULL;
+<a name="l00293"></a>00293     }
+<a name="l00294"></a>00294     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00295"></a>00295 }
+<a name="l00296"></a>00296 
+<a name="l00297"></a>00297 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00298"></a>00298 <span class="keywordtype">void</span> micro_queue&lt;T&gt;::make_invalid( ticket k ) {
+<a name="l00299"></a>00299     <span class="keyword">static</span> page dummy = {static_cast&lt;page*&gt;((<span class="keywordtype">void</span>*)1), 0};
+<a name="l00300"></a>00300     <span class="comment">// mark it so that no more pushes are allowed.</span>
+<a name="l00301"></a>00301     invalid_page = &amp;dummy;
+<a name="l00302"></a>00302     {
+<a name="l00303"></a>00303         spin_mutex::scoped_lock lock( page_mutex );
+<a name="l00304"></a>00304         tail_counter = k+concurrent_queue_rep_base::n_queue+1;
+<a name="l00305"></a>00305         <span class="keywordflow">if</span>( page* q = tail_page )
+<a name="l00306"></a>00306             q-&gt;next = static_cast&lt;page*&gt;(invalid_page);
+<a name="l00307"></a>00307         <span class="keywordflow">else</span>
+<a name="l00308"></a>00308             head_page = static_cast&lt;page*&gt;(invalid_page); 
+<a name="l00309"></a>00309         tail_page = static_cast&lt;page*&gt;(invalid_page);
+<a name="l00310"></a>00310     }
+<a name="l00311"></a>00311     <span class="keywordflow">throw</span>;
+<a name="l00312"></a>00312 }
+<a name="l00313"></a>00313 
+<a name="l00314"></a>00314 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00315"></a>00315 concurrent_queue_rep_base::page* micro_queue&lt;T&gt;::make_copy( concurrent_queue_base_v3&lt;T&gt;&amp; base, <span class="keyword">const</span> concurrent_queue_rep_base::page* src_page, size_t begin_in_page, size_t end_in_page, ticket&amp; g_index ) {
+<a name="l00316"></a>00316     concurrent_queue_page_allocator&amp; pa = base;
+<a name="l00317"></a>00317     page* new_page = pa.allocate_page();
+<a name="l00318"></a>00318     new_page-&gt;next = NULL;
+<a name="l00319"></a>00319     new_page-&gt;mask = src_page-&gt;mask;
+<a name="l00320"></a>00320     <span class="keywordflow">for</span>( ; begin_in_page!=end_in_page; ++begin_in_page, ++g_index )
+<a name="l00321"></a>00321         <span class="keywordflow">if</span>( new_page-&gt;mask &amp; uintptr_t(1)&lt;&lt;begin_in_page )
+<a name="l00322"></a>00322             copy_item( *new_page, begin_in_page, *src_page, begin_in_page );
+<a name="l00323"></a>00323     <span class="keywordflow">return</span> new_page;
+<a name="l00324"></a>00324 }
+<a name="l00325"></a>00325 
+<a name="l00326"></a>00326 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00327"></a>00327 <span class="keyword">class </span>micro_queue_pop_finalizer: no_copy {
+<a name="l00328"></a>00328     <span class="keyword">typedef</span> concurrent_queue_rep_base::page page;
+<a name="l00329"></a>00329     ticket my_ticket;
+<a name="l00330"></a>00330     micro_queue&lt;T&gt;&amp; my_queue;
+<a name="l00331"></a>00331     page* my_page; 
+<a name="l00332"></a>00332     concurrent_queue_page_allocator&amp; allocator;
+<a name="l00333"></a>00333 <span class="keyword">public</span>:
+<a name="l00334"></a>00334     micro_queue_pop_finalizer( micro_queue&lt;T&gt;&amp; queue, concurrent_queue_base_v3&lt;T&gt;&amp; b, ticket k, page* p ) :
+<a name="l00335"></a>00335         my_ticket(k), my_queue(queue), my_page(p), allocator(b)
+<a name="l00336"></a>00336     {}
+<a name="l00337"></a>00337     ~micro_queue_pop_finalizer() ;
+<a name="l00338"></a>00338 };
+<a name="l00339"></a>00339 
+<a name="l00340"></a>00340 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00341"></a>00341 micro_queue_pop_finalizer&lt;T&gt;::~micro_queue_pop_finalizer() {
+<a name="l00342"></a>00342     page* p = my_page;
+<a name="l00343"></a>00343     <span class="keywordflow">if</span>( p ) {
+<a name="l00344"></a>00344         spin_mutex::scoped_lock lock( my_queue.page_mutex );
+<a name="l00345"></a>00345         page* q = p-&gt;next;
+<a name="l00346"></a>00346         my_queue.head_page = q;
+<a name="l00347"></a>00347         <span class="keywordflow">if</span>( !q ) {
+<a name="l00348"></a>00348             my_queue.tail_page = NULL;
+<a name="l00349"></a>00349         }
+<a name="l00350"></a>00350     }
+<a name="l00351"></a>00351     my_queue.head_counter = my_ticket;
+<a name="l00352"></a>00352     <span class="keywordflow">if</span>( p ) {
+<a name="l00353"></a>00353         allocator.deallocate_page( p );
+<a name="l00354"></a>00354     }
+<a name="l00355"></a>00355 }
+<a name="l00356"></a>00356 
+<a name="l00357"></a>00357 <span class="preprocessor">#if _MSC_VER &amp;&amp; !defined(__INTEL_COMPILER)</span>
+<a name="l00358"></a>00358 <span class="preprocessor"></span><span class="preprocessor">#pragma warning( pop )</span>
+<a name="l00359"></a>00359 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4146 is back</span>
+<a name="l00360"></a>00360 <span class="preprocessor"></span>
+<a name="l00361"></a>00361 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">class </span>concurrent_queue_iterator_rep ;
+<a name="l00362"></a>00362 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
+<a name="l00363"></a>00363 
+<a name="l00365"></a>00365 
+<a name="l00368"></a>00368 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00369"></a>00369 <span class="keyword">struct </span>concurrent_queue_rep : <span class="keyword">public</span> concurrent_queue_rep_base {
+<a name="l00370"></a>00370     micro_queue&lt;T&gt; array[n_queue];
+<a name="l00371"></a>00371 
+<a name="l00373"></a>00373     <span class="keyword">static</span> size_t index( ticket k ) {
+<a name="l00374"></a>00374         <span class="keywordflow">return</span> k*phi%n_queue;
+<a name="l00375"></a>00375     }
+<a name="l00376"></a>00376 
+<a name="l00377"></a>00377     micro_queue&lt;T&gt;&amp; choose( ticket k ) {
+<a name="l00378"></a>00378         <span class="comment">// The formula here approximates LRU in a cache-oblivious way.</span>
+<a name="l00379"></a>00379         <span class="keywordflow">return</span> array[index(k)];
+<a name="l00380"></a>00380     }
+<a name="l00381"></a>00381 };
+<a name="l00382"></a>00382 
+<a name="l00384"></a>00384 
+<a name="l00388"></a>00388 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00389"></a>00389 <span class="keyword">class </span>concurrent_queue_base_v3: <span class="keyword">public</span> concurrent_queue_page_allocator {
+<a name="l00391"></a>00391     concurrent_queue_rep&lt;T&gt;* my_rep;
+<a name="l00392"></a>00392 
+<a name="l00393"></a>00393     <span class="keyword">friend</span> <span class="keyword">struct </span>concurrent_queue_rep&lt;T&gt;;
+<a name="l00394"></a>00394     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue&lt;T&gt;;
+<a name="l00395"></a>00395     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_rep&lt;T&gt;;
+<a name="l00396"></a>00396     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_base_v3&lt;T&gt;;
+<a name="l00397"></a>00397 
+<a name="l00398"></a>00398 <span class="keyword">protected</span>:
+<a name="l00399"></a>00399     <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_queue_rep&lt;T&gt;::page page;
+<a name="l00400"></a>00400 
+<a name="l00401"></a>00401 <span class="keyword">private</span>:
+<a name="l00402"></a>00402     <span class="comment">/* override */</span> <span class="keyword">virtual</span> page *allocate_page() {
+<a name="l00403"></a>00403         concurrent_queue_rep&lt;T&gt;&amp; r = *my_rep;
+<a name="l00404"></a>00404         size_t n = <span class="keyword">sizeof</span>(page) + r.items_per_page*r.item_size;
+<a name="l00405"></a>00405         <span class="keywordflow">return</span> reinterpret_cast&lt;page*&gt;(allocate_block ( n ));
+<a name="l00406"></a>00406     }
+<a name="l00407"></a>00407 
+<a name="l00408"></a>00408     <span class="comment">/* override */</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( concurrent_queue_rep_base::page *p ) {
+<a name="l00409"></a>00409         concurrent_queue_rep&lt;T&gt;&amp; r = *my_rep;
+<a name="l00410"></a>00410         size_t n = <span class="keyword">sizeof</span>(page) + r.items_per_page*r.item_size;
+<a name="l00411"></a>00411         deallocate_block( reinterpret_cast&lt;void*&gt;(p), n );
+<a name="l00412"></a>00412     }
+<a name="l00413"></a>00413 
+<a name="l00415"></a>00415     <span class="keyword">virtual</span> <span class="keywordtype">void</span> *allocate_block( size_t n ) = 0;
+<a name="l00416"></a>00416 
+<a name="l00418"></a>00418     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_block( <span class="keywordtype">void</span> *p, size_t n ) = 0;
+<a name="l00419"></a>00419 
+<a name="l00420"></a>00420 <span class="keyword">protected</span>:
+<a name="l00421"></a>00421     concurrent_queue_base_v3( size_t item_size ) ;
+<a name="l00422"></a>00422 
+<a name="l00423"></a>00423     <span class="comment">/* override */</span> <span class="keyword">virtual</span> ~concurrent_queue_base_v3() {
+<a name="l00424"></a>00424         size_t nq = my_rep-&gt;n_queue;
+<a name="l00425"></a>00425         <span class="keywordflow">for</span>( size_t i=0; i&lt;nq; i++ )
+<a name="l00426"></a>00426             __TBB_ASSERT( my_rep-&gt;array[i].tail_page==NULL, <span class="stringliteral">"pages were not freed properly"</span> );
+<a name="l00427"></a>00427         cache_aligned_allocator&lt;concurrent_queue_rep&lt;T&gt; &gt;().deallocate(my_rep,1);
+<a name="l00428"></a>00428     }
+<a name="l00429"></a>00429 
+<a name="l00431"></a>00431     <span class="keywordtype">void</span> internal_push( <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) {
+<a name="l00432"></a>00432         concurrent_queue_rep&lt;T&gt;&amp; r = *my_rep;
+<a name="l00433"></a>00433         ticket k = r.tail_counter++;
+<a name="l00434"></a>00434         r.choose(k).push( src, k, *<span class="keyword">this</span> );
+<a name="l00435"></a>00435     }
+<a name="l00436"></a>00436 
+<a name="l00438"></a>00438 
+<a name="l00439"></a>00439     <span class="keywordtype">bool</span> internal_try_pop( <span class="keywordtype">void</span>* dst ) ;
+<a name="l00440"></a>00440 
+<a name="l00442"></a>00442     size_t internal_size() <span class="keyword">const </span>;
+<a name="l00443"></a>00443 
+<a name="l00445"></a>00445     <span class="keywordtype">bool</span> internal_empty() <span class="keyword">const </span>;
+<a name="l00446"></a>00446 
+<a name="l00448"></a>00448     <span class="comment">/* note that the name may be misleading, but it remains so due to a historical accident. */</span>
+<a name="l00449"></a>00449     <span class="keywordtype">void</span> internal_finish_clear() ;
+<a name="l00450"></a>00450 
+<a name="l00452"></a>00452     <span class="keywordtype">void</span> internal_throw_exception()<span class="keyword"> const </span>{
+<a name="l00453"></a>00453         <span class="keywordflow">throw</span> std::bad_alloc();
+<a name="l00454"></a>00454     }
+<a name="l00455"></a>00455 
+<a name="l00457"></a>00457     <span class="keywordtype">void</span> assign( <span class="keyword">const</span> concurrent_queue_base_v3&amp; src ) ;
+<a name="l00458"></a>00458 };
+<a name="l00459"></a>00459 
+<a name="l00460"></a>00460 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00461"></a>00461 concurrent_queue_base_v3&lt;T&gt;::concurrent_queue_base_v3( size_t item_size ) {
+<a name="l00462"></a>00462     my_rep = cache_aligned_allocator&lt;concurrent_queue_rep&lt;T&gt; &gt;().allocate(1);
+<a name="l00463"></a>00463     __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
+<a name="l00464"></a>00464     __TBB_ASSERT( (size_t)&amp;my_rep-&gt;head_counter % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
+<a name="l00465"></a>00465     __TBB_ASSERT( (size_t)&amp;my_rep-&gt;tail_counter % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
+<a name="l00466"></a>00466     __TBB_ASSERT( (size_t)&amp;my_rep-&gt;array % NFS_GetLineSize()==0, <span class="stringliteral">"alignment error"</span> );
+<a name="l00467"></a>00467     memset(my_rep,0,<span class="keyword">sizeof</span>(concurrent_queue_rep&lt;T&gt;));
+<a name="l00468"></a>00468     my_rep-&gt;item_size = item_size;
+<a name="l00469"></a>00469     my_rep-&gt;items_per_page = item_size&lt;=8 ? 32 :
+<a name="l00470"></a>00470                              item_size&lt;=16 ? 16 : 
+<a name="l00471"></a>00471                              item_size&lt;=32 ? 8 :
+<a name="l00472"></a>00472                              item_size&lt;=64 ? 4 :
+<a name="l00473"></a>00473                              item_size&lt;=128 ? 2 :
+<a name="l00474"></a>00474                              1;
+<a name="l00475"></a>00475 }
+<a name="l00476"></a>00476 
+<a name="l00477"></a>00477 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00478"></a>00478 <span class="keywordtype">bool</span> concurrent_queue_base_v3&lt;T&gt;::internal_try_pop( <span class="keywordtype">void</span>* dst ) {
+<a name="l00479"></a>00479     concurrent_queue_rep&lt;T&gt;&amp; r = *my_rep;
+<a name="l00480"></a>00480     ticket k;
+<a name="l00481"></a>00481     <span class="keywordflow">do</span> {
+<a name="l00482"></a>00482         k = r.head_counter;
+<a name="l00483"></a>00483         <span class="keywordflow">for</span>(;;) {
+<a name="l00484"></a>00484             <span class="keywordflow">if</span>( r.tail_counter&lt;=k ) {
+<a name="l00485"></a>00485                 <span class="comment">// Queue is empty </span>
+<a name="l00486"></a>00486                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00487"></a>00487             }
+<a name="l00488"></a>00488             <span class="comment">// Queue had item with ticket k when we looked.  Attempt to get that item.</span>
+<a name="l00489"></a>00489             ticket tk=k;
+<a name="l00490"></a>00490 <span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; defined(_Wp64)</span>
+<a name="l00491"></a>00491 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00492"></a>00492 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4267)</span>
+<a name="l00493"></a>00493 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00494"></a>00494 <span class="preprocessor"></span>            k = r.head_counter.compare_and_swap( tk+1, tk );
+<a name="l00495"></a>00495 <span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; defined(_Wp64)</span>
+<a name="l00496"></a>00496 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00497"></a>00497 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00498"></a>00498 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( k==tk )
+<a name="l00499"></a>00499                 <span class="keywordflow">break</span>;
+<a name="l00500"></a>00500             <span class="comment">// Another thread snatched the item, retry.</span>
+<a name="l00501"></a>00501         }
+<a name="l00502"></a>00502     } <span class="keywordflow">while</span>( !r.choose( k ).pop( dst, k, *<span class="keyword">this</span> ) );
+<a name="l00503"></a>00503     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00504"></a>00504 }
+<a name="l00505"></a>00505 
+<a name="l00506"></a>00506 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00507"></a>00507 size_t concurrent_queue_base_v3&lt;T&gt;::internal_size()<span class="keyword"> const </span>{
+<a name="l00508"></a>00508     concurrent_queue_rep&lt;T&gt;&amp; r = *my_rep;
+<a name="l00509"></a>00509     __TBB_ASSERT( <span class="keyword">sizeof</span>(ptrdiff_t)&lt;=<span class="keyword">sizeof</span>(size_t), NULL );
+<a name="l00510"></a>00510     ticket hc = r.head_counter;
+<a name="l00511"></a>00511     size_t nie = r.n_invalid_entries;
+<a name="l00512"></a>00512     ticket tc = r.tail_counter;
+<a name="l00513"></a>00513     __TBB_ASSERT( hc!=tc || !nie, NULL );
+<a name="l00514"></a>00514     ptrdiff_t sz = tc-hc-nie;
+<a name="l00515"></a>00515     <span class="keywordflow">return</span> sz&lt;0 ? 0 :  size_t(sz);
+<a name="l00516"></a>00516 }
+<a name="l00517"></a>00517 
+<a name="l00518"></a>00518 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00519"></a>00519 <span class="keywordtype">bool</span> concurrent_queue_base_v3&lt;T&gt;::internal_empty()<span class="keyword"> const </span>{
+<a name="l00520"></a>00520     concurrent_queue_rep&lt;T&gt;&amp; r = *my_rep;
+<a name="l00521"></a>00521     ticket tc = r.tail_counter;
+<a name="l00522"></a>00522     ticket hc = r.head_counter;
+<a name="l00523"></a>00523     <span class="comment">// if tc!=r.tail_counter, the queue was not empty at some point between the two reads.</span>
+<a name="l00524"></a>00524     <span class="keywordflow">return</span> tc==r.tail_counter &amp;&amp; tc==hc+r.n_invalid_entries ;
+<a name="l00525"></a>00525 }
+<a name="l00526"></a>00526 
+<a name="l00527"></a>00527 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00528"></a>00528 <span class="keywordtype">void</span> concurrent_queue_base_v3&lt;T&gt;::internal_finish_clear() {
+<a name="l00529"></a>00529     concurrent_queue_rep&lt;T&gt;&amp; r = *my_rep;
+<a name="l00530"></a>00530     size_t nq = r.n_queue;
+<a name="l00531"></a>00531     <span class="keywordflow">for</span>( size_t i=0; i&lt;nq; ++i ) {
+<a name="l00532"></a>00532         page* tp = r.array[i].tail_page;
+<a name="l00533"></a>00533         __TBB_ASSERT( r.array[i].head_page==tp, <span class="stringliteral">"at most one page should remain"</span> );
+<a name="l00534"></a>00534         <span class="keywordflow">if</span>( tp!=NULL) {
+<a name="l00535"></a>00535             <span class="keywordflow">if</span>( tp!=invalid_page ) deallocate_page( tp );
+<a name="l00536"></a>00536             r.array[i].tail_page = NULL;
+<a name="l00537"></a>00537         }
+<a name="l00538"></a>00538     }
+<a name="l00539"></a>00539 }
+<a name="l00540"></a>00540 
+<a name="l00541"></a>00541 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00542"></a>00542 <span class="keywordtype">void</span> concurrent_queue_base_v3&lt;T&gt;::assign( <span class="keyword">const</span> concurrent_queue_base_v3&amp; src ) {
+<a name="l00543"></a>00543     concurrent_queue_rep&lt;T&gt;&amp; r = *my_rep;
+<a name="l00544"></a>00544     r.items_per_page = src.my_rep-&gt;items_per_page;
+<a name="l00545"></a>00545 
+<a name="l00546"></a>00546     <span class="comment">// copy concurrent_queue_rep.</span>
+<a name="l00547"></a>00547     r.head_counter = src.my_rep-&gt;head_counter;
+<a name="l00548"></a>00548     r.tail_counter = src.my_rep-&gt;tail_counter;
+<a name="l00549"></a>00549     r.n_invalid_entries = src.my_rep-&gt;n_invalid_entries;
+<a name="l00550"></a>00550 
+<a name="l00551"></a>00551     <span class="comment">// copy micro_queues</span>
+<a name="l00552"></a>00552     <span class="keywordflow">for</span>( size_t i = 0; i&lt;r.n_queue; ++i )
+<a name="l00553"></a>00553         r.array[i].assign( src.my_rep-&gt;array[i], *<span class="keyword">this</span>);
+<a name="l00554"></a>00554 
+<a name="l00555"></a>00555     __TBB_ASSERT( r.head_counter==src.my_rep-&gt;head_counter &amp;&amp; r.tail_counter==src.my_rep-&gt;tail_counter, 
+<a name="l00556"></a>00556             <span class="stringliteral">"the source concurrent queue should not be concurrently modified."</span> );
+<a name="l00557"></a>00557 }
+<a name="l00558"></a>00558 
+<a name="l00559"></a>00559 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value&gt; <span class="keyword">class </span>concurrent_queue_iterator;
+<a name="l00560"></a>00560 
+<a name="l00561"></a>00561 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00562"></a>00562 <span class="keyword">class </span>concurrent_queue_iterator_rep: no_assign {
+<a name="l00563"></a>00563 <span class="keyword">public</span>:
+<a name="l00564"></a>00564     ticket head_counter;
+<a name="l00565"></a>00565     <span class="keyword">const</span> concurrent_queue_base_v3&lt;T&gt;&amp; my_queue;
+<a name="l00566"></a>00566     <span class="keyword">typename</span> concurrent_queue_base_v3&lt;T&gt;::page* array[concurrent_queue_rep&lt;T&gt;::n_queue];
+<a name="l00567"></a>00567     concurrent_queue_iterator_rep( <span class="keyword">const</span> concurrent_queue_base_v3&lt;T&gt;&amp; queue ) :
+<a name="l00568"></a>00568         head_counter(queue.my_rep-&gt;head_counter),
+<a name="l00569"></a>00569         my_queue(queue)
+<a name="l00570"></a>00570     {
+<a name="l00571"></a>00571         <span class="keywordflow">for</span>( size_t k=0; k&lt;concurrent_queue_rep&lt;T&gt;::n_queue; ++k )
+<a name="l00572"></a>00572             array[k] = queue.my_rep-&gt;array[k].head_page;
+<a name="l00573"></a>00573     }
+<a name="l00574"></a>00574 
+<a name="l00576"></a>00576     <span class="keywordtype">bool</span> get_item( <span class="keywordtype">void</span>*&amp; item, size_t k ) ;
+<a name="l00577"></a>00577 };
+<a name="l00578"></a>00578 
+<a name="l00579"></a>00579 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00580"></a>00580 <span class="keywordtype">bool</span> concurrent_queue_iterator_rep&lt;T&gt;::get_item( <span class="keywordtype">void</span>*&amp; item, size_t k ) {
+<a name="l00581"></a>00581     <span class="keywordflow">if</span>( k==my_queue.my_rep-&gt;tail_counter ) {
+<a name="l00582"></a>00582         item = NULL;
+<a name="l00583"></a>00583         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00584"></a>00584     } <span class="keywordflow">else</span> {
+<a name="l00585"></a>00585         <span class="keyword">typename</span> concurrent_queue_base_v3&lt;T&gt;::page* p = array[concurrent_queue_rep&lt;T&gt;::index(k)];
+<a name="l00586"></a>00586         __TBB_ASSERT(p,NULL);
+<a name="l00587"></a>00587         size_t i = k/concurrent_queue_rep&lt;T&gt;::n_queue &amp; (my_queue.my_rep-&gt;items_per_page-1);
+<a name="l00588"></a>00588         item = static_cast&lt;unsigned char*&gt;(static_cast&lt;void*&gt;(p+1)) + my_queue.my_rep-&gt;item_size*i;
+<a name="l00589"></a>00589         <span class="keywordflow">return</span> (p-&gt;mask &amp; uintptr_t(1)&lt;&lt;i)!=0;
+<a name="l00590"></a>00590     }
+<a name="l00591"></a>00591 }
+<a name="l00592"></a>00592 
+<a name="l00594"></a>00594 
+<a name="l00595"></a>00595 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Value&gt;
+<a name="l00596"></a>00596 <span class="keyword">class </span>concurrent_queue_iterator_base_v3 : no_assign {
+<a name="l00598"></a>00598 
+<a name="l00599"></a>00599     concurrent_queue_iterator_rep&lt;Value&gt;* my_rep;
+<a name="l00600"></a>00600 
+<a name="l00601"></a>00601     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00602"></a>00602     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> concurrent_queue_iterator&lt;C,U&gt;&amp; j );
+<a name="l00603"></a>00603 
+<a name="l00604"></a>00604     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00605"></a>00605     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> concurrent_queue_iterator&lt;C,U&gt;&amp; j );
+<a name="l00606"></a>00606 <span class="keyword">protected</span>:
+<a name="l00608"></a>00608     <span class="keyword">mutable</span> <span class="keywordtype">void</span>* my_item;
+<a name="l00609"></a>00609 
+<a name="l00610"></a>00610 <span class="keyword">public</span>:
+<a name="l00612"></a>00612     concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {
+<a name="l00613"></a>00613 <span class="preprocessor">#if __GNUC__==4&amp;&amp;__GNUC_MINOR__==3</span>
+<a name="l00614"></a>00614 <span class="preprocessor"></span>        <span class="comment">// to get around a possible gcc 4.3 bug</span>
+<a name="l00615"></a>00615         __asm__ __volatile__(<span class="stringliteral">""</span>: : :<span class="stringliteral">"memory"</span>);
+<a name="l00616"></a>00616 <span class="preprocessor">#endif</span>
+<a name="l00617"></a>00617 <span class="preprocessor"></span>    }
+<a name="l00618"></a>00618 
+<a name="l00620"></a>00620     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_iterator_base_v3&amp; i ) : my_rep(NULL), my_item(NULL) {
+<a name="l00621"></a>00621         assign(i);
+<a name="l00622"></a>00622     }
+<a name="l00623"></a>00623 
+<a name="l00625"></a>00625     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3&lt;Value&gt;&amp; queue ) ;
+<a name="l00626"></a>00626 
+<a name="l00627"></a>00627 <span class="keyword">protected</span>:
+<a name="l00629"></a>00629     <span class="keywordtype">void</span> assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3&lt;Value&gt;&amp; other ) ;
+<a name="l00630"></a>00630 
+<a name="l00632"></a>00632     <span class="keywordtype">void</span> advance() ;
+<a name="l00633"></a>00633 
+<a name="l00635"></a>00635     ~concurrent_queue_iterator_base_v3() {
+<a name="l00636"></a>00636         cache_aligned_allocator&lt;concurrent_queue_iterator_rep&lt;Value&gt; &gt;().deallocate(my_rep, 1);
+<a name="l00637"></a>00637         my_rep = NULL;
+<a name="l00638"></a>00638     }
+<a name="l00639"></a>00639 };
+<a name="l00640"></a>00640 
+<a name="l00641"></a>00641 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Value&gt;
+<a name="l00642"></a>00642 concurrent_queue_iterator_base_v3&lt;Value&gt;::concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3&lt;Value&gt;&amp; queue ) {
+<a name="l00643"></a>00643     my_rep = cache_aligned_allocator&lt;concurrent_queue_iterator_rep&lt;Value&gt; &gt;().allocate(1);
+<a name="l00644"></a>00644     <span class="keyword">new</span>( my_rep ) concurrent_queue_iterator_rep&lt;Value&gt;(queue);
+<a name="l00645"></a>00645     size_t k = my_rep-&gt;head_counter;
+<a name="l00646"></a>00646     <span class="keywordflow">if</span>( !my_rep-&gt;get_item(my_item, k) ) advance();
+<a name="l00647"></a>00647 }
+<a name="l00648"></a>00648 
+<a name="l00649"></a>00649 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Value&gt;
+<a name="l00650"></a>00650 <span class="keywordtype">void</span> concurrent_queue_iterator_base_v3&lt;Value&gt;::assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3&lt;Value&gt;&amp; other ) {
+<a name="l00651"></a>00651     <span class="keywordflow">if</span>( my_rep!=other.my_rep ) {
+<a name="l00652"></a>00652         <span class="keywordflow">if</span>( my_rep ) {
+<a name="l00653"></a>00653             cache_aligned_allocator&lt;concurrent_queue_iterator_rep&lt;Value&gt; &gt;().deallocate(my_rep, 1);
+<a name="l00654"></a>00654             my_rep = NULL;
+<a name="l00655"></a>00655         }
+<a name="l00656"></a>00656         <span class="keywordflow">if</span>( other.my_rep ) {
+<a name="l00657"></a>00657             my_rep = cache_aligned_allocator&lt;concurrent_queue_iterator_rep&lt;Value&gt; &gt;().allocate(1);
+<a name="l00658"></a>00658             <span class="keyword">new</span>( my_rep ) concurrent_queue_iterator_rep&lt;Value&gt;( *other.my_rep );
+<a name="l00659"></a>00659         }
+<a name="l00660"></a>00660     }
+<a name="l00661"></a>00661     my_item = other.my_item;
+<a name="l00662"></a>00662 }
+<a name="l00663"></a>00663 
+<a name="l00664"></a>00664 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Value&gt;
+<a name="l00665"></a>00665 <span class="keywordtype">void</span> concurrent_queue_iterator_base_v3&lt;Value&gt;::advance() {
+<a name="l00666"></a>00666     __TBB_ASSERT( my_item, <span class="stringliteral">"attempt to increment iterator past end of queue"</span> );  
+<a name="l00667"></a>00667     size_t k = my_rep-&gt;head_counter;
+<a name="l00668"></a>00668     <span class="keyword">const</span> concurrent_queue_base_v3&lt;Value&gt;&amp; queue = my_rep-&gt;my_queue;
+<a name="l00669"></a>00669 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00670"></a>00670 <span class="preprocessor"></span>    <span class="keywordtype">void</span>* tmp;
+<a name="l00671"></a>00671     my_rep-&gt;get_item(tmp,k);
+<a name="l00672"></a>00672     __TBB_ASSERT( my_item==tmp, NULL );
+<a name="l00673"></a>00673 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00674"></a>00674     size_t i = k/concurrent_queue_rep&lt;Value&gt;::n_queue &amp; (queue.my_rep-&gt;items_per_page-1);
+<a name="l00675"></a>00675     <span class="keywordflow">if</span>( i==queue.my_rep-&gt;items_per_page-1 ) {
+<a name="l00676"></a>00676         <span class="keyword">typename</span> concurrent_queue_base_v3&lt;Value&gt;::page*&amp; root = my_rep-&gt;array[concurrent_queue_rep&lt;Value&gt;::index(k)];
+<a name="l00677"></a>00677         root = root-&gt;next;
+<a name="l00678"></a>00678     }
+<a name="l00679"></a>00679     <span class="comment">// advance k</span>
+<a name="l00680"></a>00680     my_rep-&gt;head_counter = ++k;
+<a name="l00681"></a>00681     <span class="keywordflow">if</span>( !my_rep-&gt;get_item(my_item, k) ) advance();
+<a name="l00682"></a>00682 }
+<a name="l00683"></a>00683 
+<a name="l00684"></a>00684 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00685"></a>00685 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">const</span> concurrent_queue_iterator_base_v3&lt;const T&gt;&amp; add_constness( <span class="keyword">const</span> concurrent_queue_iterator_base_v3&lt;T&gt;&amp; q )
+<a name="l00686"></a>00686 {
+<a name="l00687"></a>00687     <span class="keywordflow">return</span> *reinterpret_cast&lt;const concurrent_queue_iterator_base_v3&lt;const T&gt; *&gt;(&amp;q) ;
+<a name="l00688"></a>00688 }
+<a name="l00689"></a>00689 
+<a name="l00691"></a>00691 
+<a name="l00693"></a>00693 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value&gt;
+<a name="l00694"></a>00694 <span class="keyword">class </span>concurrent_queue_iterator: <span class="keyword">public</span> concurrent_queue_iterator_base_v3&lt;Value&gt;,
+<a name="l00695"></a>00695         <span class="keyword">public</span> std::iterator&lt;std::forward_iterator_tag,Value&gt; {
+<a name="l00696"></a>00696 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
+<a name="l00697"></a>00697 <span class="preprocessor"></span>    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00698"></a>00698     <span class="keyword">friend</span> class ::tbb::strict_ppl::concurrent_queue;
+<a name="l00699"></a>00699 <span class="preprocessor">#else</span>
+<a name="l00700"></a>00700 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
+<a name="l00701"></a>00701 <span class="preprocessor">#endif </span>
+<a name="l00703"></a>00703 <span class="preprocessor">    concurrent_queue_iterator( const concurrent_queue_base_v3&lt;Value&gt;&amp; queue ) :</span>
+<a name="l00704"></a>00704 <span class="preprocessor"></span>        concurrent_queue_iterator_base_v3&lt;Value&gt;(queue)
+<a name="l00705"></a>00705     {
+<a name="l00706"></a>00706     }
+<a name="l00707"></a>00707 
+<a name="l00708"></a>00708 <span class="keyword">public</span>:
+<a name="l00709"></a>00709     concurrent_queue_iterator() {}
+<a name="l00710"></a>00710 
+<a name="l00712"></a>00712     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_iterator&lt;Container,Value&gt;&amp; other ) :
+<a name="l00713"></a>00713         concurrent_queue_iterator_base_v3&lt;Value&gt;(other)
+<a name="l00714"></a>00714     {
+<a name="l00715"></a>00715     }
+<a name="l00716"></a>00716 
+<a name="l00717"></a>00717     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00718"></a>00718     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_iterator&lt;Container,T&gt;&amp; other ) :
+<a name="l00719"></a>00719         concurrent_queue_iterator_base_v3&lt;Value&gt;(add_constness(other))
+<a name="l00720"></a>00720     {
+<a name="l00721"></a>00721     }
+<a name="l00722"></a>00722 
+<a name="l00724"></a>00724     concurrent_queue_iterator&amp; operator=( <span class="keyword">const</span> concurrent_queue_iterator&amp; other ) {
+<a name="l00725"></a>00725         assign(other);
+<a name="l00726"></a>00726         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00727"></a>00727     }
+<a name="l00728"></a>00728 
+<a name="l00730"></a>00730     Value&amp; operator*()<span class="keyword"> const </span>{
+<a name="l00731"></a>00731         <span class="keywordflow">return</span> *static_cast&lt;Value*&gt;(this-&gt;my_item);
+<a name="l00732"></a>00732     }
+<a name="l00733"></a>00733 
+<a name="l00734"></a>00734     Value* operator-&gt;()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &amp;operator*();}
+<a name="l00735"></a>00735 
+<a name="l00737"></a>00737     concurrent_queue_iterator&amp; operator++() {
+<a name="l00738"></a>00738         this-&gt;advance();
+<a name="l00739"></a>00739         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00740"></a>00740     }
+<a name="l00741"></a>00741 
+<a name="l00743"></a>00743     Value* operator++(<span class="keywordtype">int</span>) {
+<a name="l00744"></a>00744         Value* result = &amp;operator*();
+<a name="l00745"></a>00745         operator++();
+<a name="l00746"></a>00746         <span class="keywordflow">return</span> result;
+<a name="l00747"></a>00747     }
+<a name="l00748"></a>00748 }; <span class="comment">// concurrent_queue_iterator</span>
+<a name="l00749"></a>00749 
+<a name="l00750"></a>00750 
+<a name="l00751"></a>00751 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00752"></a>00752 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> concurrent_queue_iterator&lt;C,U&gt;&amp; j ) {
+<a name="l00753"></a>00753     <span class="keywordflow">return</span> i.my_item==j.my_item;
+<a name="l00754"></a>00754 }
+<a name="l00755"></a>00755 
+<a name="l00756"></a>00756 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00757"></a>00757 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> concurrent_queue_iterator&lt;C,U&gt;&amp; j ) {
+<a name="l00758"></a>00758     <span class="keywordflow">return</span> i.my_item!=j.my_item;
+<a name="l00759"></a>00759 }
+<a name="l00760"></a>00760 
+<a name="l00761"></a>00761 } <span class="comment">// namespace internal</span>
+<a name="l00762"></a>00762 
+<a name="l00764"></a>00764 
+<a name="l00765"></a>00765 } <span class="comment">// namespace strict_ppl</span>
+<a name="l00766"></a>00766 
+<a name="l00768"></a>00768 <span class="keyword">namespace </span>internal {
+<a name="l00769"></a>00769 
+<a name="l00770"></a>00770 <span class="keyword">class </span>concurrent_queue_rep;
+<a name="l00771"></a>00771 <span class="keyword">class </span>concurrent_queue_iterator_rep;
+<a name="l00772"></a>00772 <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
+<a name="l00773"></a>00773 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value&gt; <span class="keyword">class </span>concurrent_queue_iterator;
+<a name="l00774"></a>00774 
+<a name="l00776"></a>00776 
+<a name="l00778"></a>00778 <span class="keyword">class </span>concurrent_queue_base_v3: no_copy {
+<a name="l00780"></a>00780     concurrent_queue_rep* my_rep;
+<a name="l00781"></a>00781 
+<a name="l00782"></a>00782     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_rep;
+<a name="l00783"></a>00783     <span class="keyword">friend</span> <span class="keyword">struct </span>micro_queue;
+<a name="l00784"></a>00784     <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer;
+<a name="l00785"></a>00785     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_rep;
+<a name="l00786"></a>00786     <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
+<a name="l00787"></a>00787 <span class="keyword">protected</span>:
+<a name="l00789"></a>00789     <span class="keyword">struct </span>page {
+<a name="l00790"></a>00790         page* next;
+<a name="l00791"></a>00791         uintptr_t mask; 
+<a name="l00792"></a>00792     };
+<a name="l00793"></a>00793 
+<a name="l00795"></a>00795     ptrdiff_t my_capacity;
+<a name="l00796"></a>00796    
+<a name="l00798"></a>00798     size_t items_per_page;
+<a name="l00799"></a>00799 
+<a name="l00801"></a>00801     size_t item_size;
+<a name="l00802"></a>00802 
+<a name="l00803"></a>00803 <span class="keyword">private</span>:
+<a name="l00804"></a>00804     <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_item( page&amp; dst, size_t index, <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) = 0;
+<a name="l00805"></a>00805     <span class="keyword">virtual</span> <span class="keywordtype">void</span> assign_and_destroy_item( <span class="keywordtype">void</span>* dst, page&amp; src, size_t index ) = 0;
+<a name="l00806"></a>00806 <span class="keyword">protected</span>:
+<a name="l00807"></a>00807     __TBB_EXPORTED_METHOD concurrent_queue_base_v3( size_t item_size );
+<a name="l00808"></a>00808     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD ~concurrent_queue_base_v3();
+<a name="l00809"></a>00809 
+<a name="l00811"></a>00811     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_push( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+<a name="l00812"></a>00812 
+<a name="l00814"></a>00814     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_pop( <span class="keywordtype">void</span>* dst );
+<a name="l00815"></a>00815 
+<a name="l00817"></a>00817     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_push_if_not_full( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+<a name="l00818"></a>00818 
+<a name="l00820"></a>00820 
+<a name="l00821"></a>00821     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_pop_if_present( <span class="keywordtype">void</span>* dst );
+<a name="l00822"></a>00822 
+<a name="l00824"></a>00824     ptrdiff_t __TBB_EXPORTED_METHOD internal_size() <span class="keyword">const</span>;
+<a name="l00825"></a>00825 
+<a name="l00827"></a>00827     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_empty() <span class="keyword">const</span>;
+<a name="l00828"></a>00828 
+<a name="l00830"></a>00830     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );
+<a name="l00831"></a>00831 
+<a name="l00833"></a>00833     <span class="keyword">virtual</span> page *allocate_page() = 0;
+<a name="l00834"></a>00834 
+<a name="l00836"></a>00836     <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( page *p ) = 0;
+<a name="l00837"></a>00837 
+<a name="l00839"></a>00839     <span class="comment">/* note that the name may be misleading, but it remains so due to a historical accident. */</span>
+<a name="l00840"></a>00840     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_finish_clear() ;
+<a name="l00841"></a>00841 
+<a name="l00843"></a>00843     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception() <span class="keyword">const</span>;
+<a name="l00844"></a>00844 
+<a name="l00846"></a>00846     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD assign( <span class="keyword">const</span> concurrent_queue_base_v3&amp; src ) ;
+<a name="l00847"></a>00847 
+<a name="l00848"></a>00848 <span class="keyword">private</span>:
+<a name="l00849"></a>00849     <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_page_item( page&amp; dst, size_t dindex, <span class="keyword">const</span> page&amp; src, size_t sindex ) = 0;
+<a name="l00850"></a>00850 };
+<a name="l00851"></a>00851 
+<a name="l00853"></a>00853 
+<a name="l00854"></a>00854 <span class="keyword">class </span>concurrent_queue_iterator_base_v3 {
+<a name="l00856"></a>00856 
+<a name="l00857"></a>00857     concurrent_queue_iterator_rep* my_rep;
+<a name="l00858"></a>00858 
+<a name="l00859"></a>00859     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00860"></a>00860     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> concurrent_queue_iterator&lt;C,U&gt;&amp; j );
+<a name="l00861"></a>00861 
+<a name="l00862"></a>00862     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00863"></a>00863     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> concurrent_queue_iterator&lt;C,U&gt;&amp; j );
+<a name="l00864"></a>00864 <span class="keyword">protected</span>:
+<a name="l00866"></a>00866     <span class="keyword">mutable</span> <span class="keywordtype">void</span>* my_item;
+<a name="l00867"></a>00867 
+<a name="l00869"></a>00869     concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {}
+<a name="l00870"></a>00870 
+<a name="l00872"></a>00872     concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_iterator_base_v3&amp; i ) : my_rep(NULL), my_item(NULL) {
+<a name="l00873"></a>00873         assign(i);
+<a name="l00874"></a>00874     }
+<a name="l00875"></a>00875 
+<a name="l00877"></a>00877     __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( <span class="keyword">const</span> concurrent_queue_base_v3&amp; queue );
+<a name="l00878"></a>00878 
+<a name="l00880"></a>00880     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD assign( <span class="keyword">const</span> concurrent_queue_iterator_base_v3&amp; i );
+<a name="l00881"></a>00881 
+<a name="l00883"></a>00883     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD advance();
+<a name="l00884"></a>00884 
+<a name="l00886"></a>00886     __TBB_EXPORTED_METHOD ~concurrent_queue_iterator_base_v3();
+<a name="l00887"></a>00887 };
+<a name="l00888"></a>00888 
+<a name="l00889"></a>00889 <span class="keyword">typedef</span> concurrent_queue_iterator_base_v3 concurrent_queue_iterator_base;
+<a name="l00890"></a>00890 
+<a name="l00892"></a>00892 
+<a name="l00894"></a>00894 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value&gt;
+<a name="l00895"></a>00895 <span class="keyword">class </span>concurrent_queue_iterator: <span class="keyword">public</span> concurrent_queue_iterator_base,
+<a name="l00896"></a>00896         <span class="keyword">public</span> std::iterator&lt;std::forward_iterator_tag,Value&gt; {
+<a name="l00897"></a>00897 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
+<a name="l00898"></a>00898 <span class="preprocessor"></span>    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00899"></a>00899     <span class="keyword">friend</span> class ::tbb::concurrent_bounded_queue;
+<a name="l00900"></a>00900 
+<a name="l00901"></a>00901     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00902"></a>00902     <span class="keyword">friend</span> class ::tbb::deprecated::concurrent_queue;
+<a name="l00903"></a>00903 <span class="preprocessor">#else</span>
+<a name="l00904"></a>00904 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
+<a name="l00905"></a>00905 <span class="preprocessor">#endif </span>
+<a name="l00907"></a>00907 <span class="preprocessor">    concurrent_queue_iterator( const concurrent_queue_base_v3&amp; queue ) :</span>
+<a name="l00908"></a>00908 <span class="preprocessor"></span>        concurrent_queue_iterator_base_v3(queue)
+<a name="l00909"></a>00909     {
+<a name="l00910"></a>00910     }
+<a name="l00911"></a>00911 
+<a name="l00912"></a>00912 <span class="keyword">public</span>:
+<a name="l00913"></a>00913     concurrent_queue_iterator() {}
+<a name="l00914"></a>00914 
+<a name="l00917"></a>00917     concurrent_queue_iterator( <span class="keyword">const</span> concurrent_queue_iterator&lt;Container,typename Container::value_type&gt;&amp; other ) :
+<a name="l00918"></a>00918         concurrent_queue_iterator_base_v3(other)
+<a name="l00919"></a>00919     {}
+<a name="l00920"></a>00920 
+<a name="l00922"></a>00922     concurrent_queue_iterator&amp; operator=( <span class="keyword">const</span> concurrent_queue_iterator&amp; other ) {
+<a name="l00923"></a>00923         assign(other);
+<a name="l00924"></a>00924         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00925"></a>00925     }
+<a name="l00926"></a>00926 
+<a name="l00928"></a>00928     Value&amp; operator*()<span class="keyword"> const </span>{
+<a name="l00929"></a>00929         <span class="keywordflow">return</span> *static_cast&lt;Value*&gt;(my_item);
+<a name="l00930"></a>00930     }
+<a name="l00931"></a>00931 
+<a name="l00932"></a>00932     Value* operator-&gt;()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &amp;operator*();}
+<a name="l00933"></a>00933 
+<a name="l00935"></a>00935     concurrent_queue_iterator&amp; operator++() {
+<a name="l00936"></a>00936         advance();
+<a name="l00937"></a>00937         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00938"></a>00938     }
+<a name="l00939"></a>00939 
+<a name="l00941"></a>00941     Value* operator++(<span class="keywordtype">int</span>) {
+<a name="l00942"></a>00942         Value* result = &amp;operator*();
+<a name="l00943"></a>00943         operator++();
+<a name="l00944"></a>00944         <span class="keywordflow">return</span> result;
+<a name="l00945"></a>00945     }
+<a name="l00946"></a>00946 }; <span class="comment">// concurrent_queue_iterator</span>
+<a name="l00947"></a>00947 
+<a name="l00948"></a>00948 
+<a name="l00949"></a>00949 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00950"></a>00950 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> concurrent_queue_iterator&lt;C,U&gt;&amp; j ) {
+<a name="l00951"></a>00951     <span class="keywordflow">return</span> i.my_item==j.my_item;
+<a name="l00952"></a>00952 }
+<a name="l00953"></a>00953 
+<a name="l00954"></a>00954 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00955"></a>00955 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> concurrent_queue_iterator&lt;C,U&gt;&amp; j ) {
+<a name="l00956"></a>00956     <span class="keywordflow">return</span> i.my_item!=j.my_item;
+<a name="l00957"></a>00957 }
+<a name="l00958"></a>00958 
+<a name="l00959"></a>00959 } <span class="comment">// namespace internal;</span>
+<a name="l00960"></a>00960 
+<a name="l00962"></a>00962 
+<a name="l00963"></a>00963 } <span class="comment">// namespace tbb</span>
+<a name="l00964"></a>00964 
+<a name="l00965"></a>00965 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_queue_internal_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00255.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00255.html
new file mode 100644 (file)
index 0000000..e6bd6a3
--- /dev/null
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>_tbb_windef.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>_tbb_windef.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_windef_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#error Do not #include this file directly.  Use "#include tbb/tbb_stddef.h" instead.</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_windef_H */</span>
+<a name="l00024"></a>00024 
+<a name="l00025"></a>00025 <span class="comment">// Check that the target Windows version has all API calls requried for TBB.</span>
+<a name="l00026"></a>00026 <span class="comment">// Do not increase the version in condition beyond 0x0500 without prior discussion!</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#if defined(_WIN32_WINNT) &amp;&amp; _WIN32_WINNT&lt;0x0400</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#error TBB is unable to run on old Windows versions; _WIN32_WINNT must be 0x0400 or greater.</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span>
+<a name="l00031"></a>00031 <span class="preprocessor">#if !defined(_MT)</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#error TBB requires linkage with multithreaded C/C++ runtime library. \</span>
+<a name="l00033"></a>00033 <span class="preprocessor">       Choose multithreaded DLL runtime in project settings, or use /MD[d] compiler switch.</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#elif !defined(_DLL)</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#pragma message("Warning: Using TBB together with static C/C++ runtime library is not recommended. " \</span>
+<a name="l00036"></a>00036 <span class="preprocessor">                "Consider switching your project to multithreaded DLL runtime used by TBB.")</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>
+<a name="l00039"></a>00039 <span class="comment">// Workaround for the problem with MVSC headers failing to define namespace std</span>
+<a name="l00040"></a>00040 <span class="keyword">namespace </span>std {
+<a name="l00041"></a>00041   using ::size_t; using ::ptrdiff_t;
+<a name="l00042"></a>00042 }
+<a name="l00043"></a>00043 
+<a name="l00044"></a>00044 <span class="preprocessor">#define __TBB_STRING_AUX(x) #x</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_STRING(x) __TBB_STRING_AUX(x)</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>
+<a name="l00047"></a>00047 <span class="comment">// Default setting of TBB_USE_DEBUG</span>
+<a name="l00048"></a>00048 <span class="preprocessor">#ifdef TBB_USE_DEBUG</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#    if TBB_USE_DEBUG </span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#        if !defined(_DEBUG)</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#            pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MDd if compiling with TBB_USE_DEBUG!=0")</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#        endif</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#    else</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#        if defined(_DEBUG)</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#            pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MD if compiling with TBB_USE_DEBUG==0")</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#        endif</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#    endif</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#    ifdef _DEBUG</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#        define TBB_USE_DEBUG 1</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#    endif</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span>
+<a name="l00064"></a>00064 <span class="preprocessor">#if __TBB_BUILD &amp;&amp; !defined(__TBB_NO_IMPLICIT_LINKAGE)</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00067"></a>00067 <span class="preprocessor"></span>
+<a name="l00068"></a>00068 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">    #if !__TBB_NO_IMPLICIT_LINKAGE</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">        #ifdef _DEBUG</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbb_debug.lib")</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">        #else</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbb.lib")</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00257.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00257.html
new file mode 100644 (file)
index 0000000..4dfd438
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>aligned_space.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>aligned_space.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_aligned_space_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_aligned_space_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_machine.h"</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
+<a name="l00028"></a>00028 
+<a name="l00030"></a>00030 
+<a name="l00032"></a>00032 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T,size_t N&gt;
+<a name="l00033"></a><a class="code" href="a00116.html">00033</a> <span class="keyword">class </span><a class="code" href="a00116.html">aligned_space</a> {
+<a name="l00034"></a>00034 <span class="keyword">private</span>:
+<a name="l00035"></a>00035     <span class="keyword">typedef</span> __TBB_TypeWithAlignmentAtLeastAsStrict(T) element_type;
+<a name="l00036"></a>00036     element_type array[(<span class="keyword">sizeof</span>(T)*N+<span class="keyword">sizeof</span>(element_type)-1)/<span class="keyword">sizeof</span>(element_type)];
+<a name="l00037"></a>00037 <span class="keyword">public</span>:
+<a name="l00039"></a><a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">00039</a>     T* <a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>() {<span class="keywordflow">return</span> reinterpret_cast&lt;T*&gt;(<span class="keyword">this</span>);}
+<a name="l00040"></a>00040 
+<a name="l00042"></a><a class="code" href="a00116.html#024be075c23c0394c9a2518d993bcd9e">00042</a>     T* <a class="code" href="a00116.html#024be075c23c0394c9a2518d993bcd9e">end</a>() {<span class="keywordflow">return</span> <a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()+N;}
+<a name="l00043"></a>00043 };
+<a name="l00044"></a>00044 
+<a name="l00045"></a>00045 } <span class="comment">// namespace tbb </span>
+<a name="l00046"></a>00046 
+<a name="l00047"></a>00047 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_aligned_space_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00258.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00258.html
new file mode 100644 (file)
index 0000000..bbc0541
--- /dev/null
@@ -0,0 +1,401 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>atomic.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>atomic.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_atomic_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_atomic_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;cstddef&gt;</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="preprocessor">#if _MSC_VER </span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_LONG_LONG __int64</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_LONG_LONG long long</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER */</span>
+<a name="l00032"></a>00032 
+<a name="l00033"></a>00033 <span class="preprocessor">#include "tbb_machine.h"</span>
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; !defined(__INTEL_COMPILER)</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warnings </span>
+<a name="l00037"></a>00037 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4244 4267)</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span>
+<a name="l00041"></a>00041 <span class="keyword">namespace </span>tbb {
+<a name="l00042"></a>00042 
+<a name="l00044"></a><a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef">00044</a> <span class="keyword">enum</span> <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> {
+<a name="l00046"></a>00046     <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>,
+<a name="l00048"></a>00048     <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>,
+<a name="l00050"></a>00050     <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>
+<a name="l00051"></a>00051 };
+<a name="l00052"></a>00052 
+<a name="l00054"></a>00054 <span class="keyword">namespace </span>internal {
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__INTEL_COMPILER)||_MSC_VER &gt;= 1300</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#error Do not know syntax for forcing alignment.</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064 <span class="keyword">template</span>&lt;size_t S&gt;
+<a name="l00065"></a>00065 <span class="keyword">struct </span>atomic_rep;           <span class="comment">// Primary template declared, but never defined.</span>
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067 <span class="keyword">template</span>&lt;&gt;
+<a name="l00068"></a>00068 <span class="keyword">struct </span>atomic_rep&lt;1&gt; {       <span class="comment">// Specialization</span>
+<a name="l00069"></a>00069     <span class="keyword">typedef</span> int8_t word;
+<a name="l00070"></a>00070     int8_t value;
+<a name="l00071"></a>00071 };
+<a name="l00072"></a>00072 <span class="keyword">template</span>&lt;&gt;
+<a name="l00073"></a>00073 <span class="keyword">struct </span>atomic_rep&lt;2&gt; {       <span class="comment">// Specialization</span>
+<a name="l00074"></a>00074     <span class="keyword">typedef</span> int16_t word;
+<a name="l00075"></a>00075     __TBB_DECL_ATOMIC_FIELD(int16_t,value,2)
+<a name="l00076"></a>00076 };
+<a name="l00077"></a>00077 <span class="keyword">template</span>&lt;&gt;
+<a name="l00078"></a>00078 <span class="keyword">struct </span>atomic_rep&lt;4&gt; {       <span class="comment">// Specialization</span>
+<a name="l00079"></a>00079 <span class="preprocessor">#if _MSC_VER &amp;&amp; __TBB_WORDSIZE==4</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span>    <span class="comment">// Work-around that avoids spurious /Wp64 warnings</span>
+<a name="l00081"></a>00081     <span class="keyword">typedef</span> intptr_t word;
+<a name="l00082"></a>00082 <span class="preprocessor">#else</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span>    <span class="keyword">typedef</span> int32_t word;
+<a name="l00084"></a>00084 <span class="preprocessor">#endif</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span>    __TBB_DECL_ATOMIC_FIELD(int32_t,value,4)
+<a name="l00086"></a>00086 };
+<a name="l00087"></a>00087 <span class="keyword">template</span>&lt;&gt;
+<a name="l00088"></a>00088 <span class="keyword">struct </span>atomic_rep&lt;8&gt; {       <span class="comment">// Specialization</span>
+<a name="l00089"></a>00089     <span class="keyword">typedef</span> int64_t word;
+<a name="l00090"></a>00090     __TBB_DECL_ATOMIC_FIELD(int64_t,value,8)
+<a name="l00091"></a>00091 };
+<a name="l00092"></a>00092 
+<a name="l00093"></a>00093 <span class="keyword">template</span>&lt;size_t Size, memory_semantics M&gt;
+<a name="l00094"></a>00094 <span class="keyword">struct </span>atomic_traits;        <span class="comment">// Primary template declared, but not defined.</span>
+<a name="l00095"></a>00095 
+<a name="l00096"></a>00096 <span class="preprocessor">#define __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(S,M)                         \</span>
+<a name="l00097"></a>00097 <span class="preprocessor">    template&lt;&gt; struct atomic_traits&lt;S,M&gt; {                               \</span>
+<a name="l00098"></a>00098 <span class="preprocessor">        typedef atomic_rep&lt;S&gt;::word word;                               \</span>
+<a name="l00099"></a>00099 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\</span>
+<a name="l00100"></a>00100 <span class="preprocessor">            return __TBB_CompareAndSwap##S##M(location,new_value,comparand);    \</span>
+<a name="l00101"></a>00101 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00102"></a>00102 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) { \</span>
+<a name="l00103"></a>00103 <span class="preprocessor">            return __TBB_FetchAndAdd##S##M(location,addend);                    \</span>
+<a name="l00104"></a>00104 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00105"></a>00105 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {\</span>
+<a name="l00106"></a>00106 <span class="preprocessor">            return __TBB_FetchAndStore##S##M(location,value);                   \</span>
+<a name="l00107"></a>00107 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00108"></a>00108 <span class="preprocessor">    };</span>
+<a name="l00109"></a>00109 <span class="preprocessor"></span>
+<a name="l00110"></a>00110 <span class="preprocessor">#define __TBB_DECL_ATOMIC_PRIMITIVES(S)                                  \</span>
+<a name="l00111"></a>00111 <span class="preprocessor">    template&lt;memory_semantics M&gt;                                         \</span>
+<a name="l00112"></a>00112 <span class="preprocessor">    struct atomic_traits&lt;S,M&gt; {                                          \</span>
+<a name="l00113"></a>00113 <span class="preprocessor">        typedef atomic_rep&lt;S&gt;::word word;                               \</span>
+<a name="l00114"></a>00114 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\</span>
+<a name="l00115"></a>00115 <span class="preprocessor">            return __TBB_CompareAndSwap##S(location,new_value,comparand);       \</span>
+<a name="l00116"></a>00116 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00117"></a>00117 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) { \</span>
+<a name="l00118"></a>00118 <span class="preprocessor">            return __TBB_FetchAndAdd##S(location,addend);                       \</span>
+<a name="l00119"></a>00119 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00120"></a>00120 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {\</span>
+<a name="l00121"></a>00121 <span class="preprocessor">            return __TBB_FetchAndStore##S(location,value);                      \</span>
+<a name="l00122"></a>00122 <span class="preprocessor">        }                                                                       \</span>
+<a name="l00123"></a>00123 <span class="preprocessor">    };</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span>
+<a name="l00125"></a>00125 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
+<a name="l00127"></a>00127 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
+<a name="l00128"></a>00128 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
+<a name="l00129"></a>00129 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">__TBB_full_fence</a>)
+<a name="l00130"></a>00130 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00131"></a>00131 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00132"></a>00132 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00133"></a>00133 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00134"></a>00134 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00135"></a>00135 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00136"></a>00136 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00137"></a>00137 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00138"></a>00138 <span class="preprocessor">#else</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span>__TBB_DECL_ATOMIC_PRIMITIVES(1)
+<a name="l00140"></a>00140 __TBB_DECL_ATOMIC_PRIMITIVES(2)
+<a name="l00141"></a>00141 __TBB_DECL_ATOMIC_PRIMITIVES(4)
+<a name="l00142"></a>00142 __TBB_DECL_ATOMIC_PRIMITIVES(8)
+<a name="l00143"></a>00143 <span class="preprocessor">#endif</span>
+<a name="l00144"></a>00144 <span class="preprocessor"></span>
+<a name="l00146"></a>00146 
+<a name="l00148"></a>00148 <span class="preprocessor">#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))</span>
+<a name="l00149"></a>00149 <span class="preprocessor"></span>
+<a name="l00151"></a>00151 
+<a name="l00153"></a>00153 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00154"></a>00154 <span class="keyword">struct </span>atomic_impl {
+<a name="l00155"></a>00155 <span class="keyword">protected</span>:
+<a name="l00156"></a>00156     atomic_rep&lt;sizeof(T)&gt; rep;
+<a name="l00157"></a>00157 <span class="keyword">private</span>:
+<a name="l00159"></a>00159     <span class="keyword">union </span>converter {
+<a name="l00160"></a>00160         T value;
+<a name="l00161"></a>00161         <span class="keyword">typename</span> atomic_rep&lt;sizeof(T)&gt;::word bits;
+<a name="l00162"></a>00162     };
+<a name="l00163"></a>00163 <span class="keyword">public</span>:
+<a name="l00164"></a>00164     <span class="keyword">typedef</span> T value_type;
+<a name="l00165"></a>00165 
+<a name="l00166"></a>00166     <span class="keyword">template</span>&lt;memory_semantics M&gt;
+<a name="l00167"></a>00167     value_type fetch_and_store( value_type value ) {
+<a name="l00168"></a>00168         converter u, w;
+<a name="l00169"></a>00169         u.value = value;
+<a name="l00170"></a>00170         w.bits = internal::atomic_traits&lt;sizeof(value_type),M&gt;::fetch_and_store(&amp;rep.value,u.bits);
+<a name="l00171"></a>00171         <span class="keywordflow">return</span> w.value;
+<a name="l00172"></a>00172     }
+<a name="l00173"></a>00173 
+<a name="l00174"></a>00174     value_type fetch_and_store( value_type value ) {
+<a name="l00175"></a>00175         <span class="keywordflow">return</span> fetch_and_store&lt;__TBB_full_fence&gt;(value);
+<a name="l00176"></a>00176     }
+<a name="l00177"></a>00177 
+<a name="l00178"></a>00178     <span class="keyword">template</span>&lt;memory_semantics M&gt;
+<a name="l00179"></a>00179     value_type compare_and_swap( value_type value, value_type comparand ) {
+<a name="l00180"></a>00180         converter u, v, w;
+<a name="l00181"></a>00181         u.value = value;
+<a name="l00182"></a>00182         v.value = comparand;
+<a name="l00183"></a>00183         w.bits = internal::atomic_traits&lt;sizeof(value_type),M&gt;::compare_and_swap(&amp;rep.value,u.bits,v.bits);
+<a name="l00184"></a>00184         <span class="keywordflow">return</span> w.value;
+<a name="l00185"></a>00185     }
+<a name="l00186"></a>00186 
+<a name="l00187"></a>00187     value_type compare_and_swap( value_type value, value_type comparand ) {
+<a name="l00188"></a>00188         <span class="keywordflow">return</span> compare_and_swap&lt;__TBB_full_fence&gt;(value,comparand);
+<a name="l00189"></a>00189     }
+<a name="l00190"></a>00190 
+<a name="l00191"></a>00191     operator value_type()<span class="keyword"> const volatile </span>{                <span class="comment">// volatile qualifier here for backwards compatibility </span>
+<a name="l00192"></a>00192         converter w;
+<a name="l00193"></a>00193         w.bits = __TBB_load_with_acquire( rep.value );
+<a name="l00194"></a>00194         <span class="keywordflow">return</span> w.value;
+<a name="l00195"></a>00195     }
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197 <span class="keyword">protected</span>:
+<a name="l00198"></a>00198     value_type store_with_release( value_type rhs ) {
+<a name="l00199"></a>00199         converter u;
+<a name="l00200"></a>00200         u.value = rhs;
+<a name="l00201"></a>00201         __TBB_store_with_release(rep.value,u.bits);
+<a name="l00202"></a>00202         <span class="keywordflow">return</span> rhs;
+<a name="l00203"></a>00203     }
+<a name="l00204"></a>00204 };
+<a name="l00205"></a>00205 
+<a name="l00207"></a>00207 
+<a name="l00210"></a>00210 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I, <span class="keyword">typename</span> D, <span class="keyword">typename</span> StepType&gt;
+<a name="l00211"></a>00211 <span class="keyword">struct </span>atomic_impl_with_arithmetic: atomic_impl&lt;I&gt; {
+<a name="l00212"></a>00212 <span class="keyword">public</span>:
+<a name="l00213"></a>00213     <span class="keyword">typedef</span> I value_type;
+<a name="l00214"></a>00214 
+<a name="l00215"></a>00215     <span class="keyword">template</span>&lt;memory_semantics M&gt;
+<a name="l00216"></a>00216     value_type fetch_and_add( D addend ) {
+<a name="l00217"></a>00217         <span class="keywordflow">return</span> value_type(internal::atomic_traits&lt;<span class="keyword">sizeof</span>(value_type),M&gt;::fetch_and_add( &amp;this-&gt;rep.value, addend*<span class="keyword">sizeof</span>(StepType) ));
+<a name="l00218"></a>00218     }
+<a name="l00219"></a>00219 
+<a name="l00220"></a>00220     value_type fetch_and_add( D addend ) {
+<a name="l00221"></a>00221         <span class="keywordflow">return</span> fetch_and_add&lt;__TBB_full_fence&gt;(addend);
+<a name="l00222"></a>00222     }
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224     <span class="keyword">template</span>&lt;memory_semantics M&gt;
+<a name="l00225"></a>00225     value_type fetch_and_increment() {
+<a name="l00226"></a>00226         <span class="keywordflow">return</span> fetch_and_add&lt;M&gt;(1);
+<a name="l00227"></a>00227     }
+<a name="l00228"></a>00228 
+<a name="l00229"></a>00229     value_type fetch_and_increment() {
+<a name="l00230"></a>00230         <span class="keywordflow">return</span> fetch_and_add(1);
+<a name="l00231"></a>00231     }
+<a name="l00232"></a>00232 
+<a name="l00233"></a>00233     <span class="keyword">template</span>&lt;memory_semantics M&gt;
+<a name="l00234"></a>00234     value_type fetch_and_decrement() {
+<a name="l00235"></a>00235         <span class="keywordflow">return</span> fetch_and_add&lt;M&gt;(__TBB_MINUS_ONE(D));
+<a name="l00236"></a>00236     }
+<a name="l00237"></a>00237 
+<a name="l00238"></a>00238     value_type fetch_and_decrement() {
+<a name="l00239"></a>00239         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
+<a name="l00240"></a>00240     }
+<a name="l00241"></a>00241 
+<a name="l00242"></a>00242 <span class="keyword">public</span>:
+<a name="l00243"></a>00243     value_type operator+=( D addend ) {
+<a name="l00244"></a>00244         <span class="keywordflow">return</span> fetch_and_add(addend)+addend;
+<a name="l00245"></a>00245     }
+<a name="l00246"></a>00246 
+<a name="l00247"></a>00247     value_type operator-=( D addend ) {
+<a name="l00248"></a>00248         <span class="comment">// Additive inverse of addend computed using binary minus,</span>
+<a name="l00249"></a>00249         <span class="comment">// instead of unary minus, for sake of avoiding compiler warnings.</span>
+<a name="l00250"></a>00250         <span class="keywordflow">return</span> operator+=(D(0)-addend);    
+<a name="l00251"></a>00251     }
+<a name="l00252"></a>00252 
+<a name="l00253"></a>00253     value_type operator++() {
+<a name="l00254"></a>00254         <span class="keywordflow">return</span> fetch_and_add(1)+1;
+<a name="l00255"></a>00255     }
+<a name="l00256"></a>00256 
+<a name="l00257"></a>00257     value_type operator--() {
+<a name="l00258"></a>00258         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D))-1;
+<a name="l00259"></a>00259     }
+<a name="l00260"></a>00260 
+<a name="l00261"></a>00261     value_type operator++(<span class="keywordtype">int</span>) {
+<a name="l00262"></a>00262         <span class="keywordflow">return</span> fetch_and_add(1);
+<a name="l00263"></a>00263     }
+<a name="l00264"></a>00264 
+<a name="l00265"></a>00265     value_type operator--(<span class="keywordtype">int</span>) {
+<a name="l00266"></a>00266         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
+<a name="l00267"></a>00267     }
+<a name="l00268"></a>00268 };
+<a name="l00269"></a>00269 
+<a name="l00270"></a>00270 <span class="preprocessor">#if __TBB_WORDSIZE == 4</span>
+<a name="l00271"></a>00271 <span class="preprocessor"></span><span class="comment">// Plaforms with 32-bit hardware require special effort for 64-bit loads and stores.</span>
+<a name="l00272"></a>00272 <span class="preprocessor">#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER&gt;=1400</span>
+<a name="l00273"></a>00273 <span class="preprocessor"></span>
+<a name="l00274"></a>00274 <span class="keyword">template</span>&lt;&gt;
+<a name="l00275"></a>00275 <span class="keyword">inline</span> atomic_impl&lt;__TBB_LONG_LONG&gt;::operator atomic_impl&lt;__TBB_LONG_LONG&gt;::value_type()<span class="keyword"> const volatile </span>{
+<a name="l00276"></a>00276     <span class="keywordflow">return</span> __TBB_Load8(&amp;rep.value);
+<a name="l00277"></a>00277 }
+<a name="l00278"></a>00278 
+<a name="l00279"></a>00279 <span class="keyword">template</span>&lt;&gt;
+<a name="l00280"></a>00280 <span class="keyword">inline</span> atomic_impl&lt;unsigned __TBB_LONG_LONG&gt;::operator atomic_impl&lt;unsigned __TBB_LONG_LONG&gt;::value_type()<span class="keyword"> const volatile </span>{
+<a name="l00281"></a>00281     <span class="keywordflow">return</span> __TBB_Load8(&amp;rep.value);
+<a name="l00282"></a>00282 }
+<a name="l00283"></a>00283 
+<a name="l00284"></a>00284 <span class="keyword">template</span>&lt;&gt;
+<a name="l00285"></a>00285 <span class="keyword">inline</span> atomic_impl&lt;__TBB_LONG_LONG&gt;::value_type atomic_impl&lt;__TBB_LONG_LONG&gt;::store_with_release( value_type rhs ) {
+<a name="l00286"></a>00286     __TBB_Store8(&amp;rep.value,rhs);
+<a name="l00287"></a>00287     <span class="keywordflow">return</span> rhs;
+<a name="l00288"></a>00288 }
+<a name="l00289"></a>00289 
+<a name="l00290"></a>00290 <span class="keyword">template</span>&lt;&gt;
+<a name="l00291"></a>00291 <span class="keyword">inline</span> atomic_impl&lt;unsigned __TBB_LONG_LONG&gt;::value_type atomic_impl&lt;unsigned __TBB_LONG_LONG&gt;::store_with_release( value_type rhs ) {
+<a name="l00292"></a>00292     __TBB_Store8(&amp;rep.value,rhs);
+<a name="l00293"></a>00293     <span class="keywordflow">return</span> rhs;
+<a name="l00294"></a>00294 }
+<a name="l00295"></a>00295 
+<a name="l00296"></a>00296 <span class="preprocessor">#endif </span><span class="comment">/* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER&gt;=1400 */</span>
+<a name="l00297"></a>00297 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
+<a name="l00298"></a>00298 
+<a name="l00299"></a>00299 } <span class="comment">/* Internal */</span>
+<a name="l00301"></a>00301 
+<a name="l00303"></a>00303 
+<a name="l00305"></a>00305 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00306"></a><a class="code" href="a00117.html">00306</a> <span class="keyword">struct </span><a class="code" href="a00117.html">atomic</a>: internal::atomic_impl&lt;T&gt; {
+<a name="l00307"></a>00307     T operator=( T rhs ) {
+<a name="l00308"></a>00308         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
+<a name="l00309"></a>00309         <span class="keywordflow">return</span> this-&gt;store_with_release(rhs);
+<a name="l00310"></a>00310     }
+<a name="l00311"></a>00311     <a class="code" href="a00117.html">atomic&lt;T&gt;</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="a00117.html">atomic&lt;T&gt;</a>&amp; rhs ) {this-&gt;store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
+<a name="l00312"></a>00312 };
+<a name="l00313"></a>00313 
+<a name="l00314"></a>00314 <span class="preprocessor">#define __TBB_DECL_ATOMIC(T) \</span>
+<a name="l00315"></a>00315 <span class="preprocessor">    template&lt;&gt; struct atomic&lt;T&gt;: internal::atomic_impl_with_arithmetic&lt;T,T,char&gt; {  \</span>
+<a name="l00316"></a>00316 <span class="preprocessor">        T operator=( T rhs ) {return store_with_release(rhs);}  \</span>
+<a name="l00317"></a>00317 <span class="preprocessor">        atomic&lt;T&gt;&amp; operator=( const atomic&lt;T&gt;&amp; rhs ) {store_with_release(rhs); return *this;}  \</span>
+<a name="l00318"></a>00318 <span class="preprocessor">    };</span>
+<a name="l00319"></a>00319 <span class="preprocessor"></span>
+<a name="l00320"></a>00320 <span class="preprocessor">#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER&gt;=1400</span>
+<a name="l00321"></a>00321 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(__TBB_LONG_LONG)
+<a name="l00322"></a>00322 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> __TBB_LONG_LONG)
+<a name="l00323"></a>00323 <span class="preprocessor">#else</span>
+<a name="l00324"></a>00324 <span class="preprocessor"></span><span class="comment">// Some old versions of MVSC cannot correctly compile templates with "long long".</span>
+<a name="l00325"></a>00325 <span class="preprocessor">#endif </span><span class="comment">/* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER&gt;=1400 */</span>
+<a name="l00326"></a>00326 
+<a name="l00327"></a>00327 __TBB_DECL_ATOMIC(<span class="keywordtype">long</span>)
+<a name="l00328"></a>00328 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)
+<a name="l00329"></a>00329 
+<a name="l00330"></a>00330 <span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; __TBB_WORDSIZE==4</span>
+<a name="l00331"></a>00331 <span class="preprocessor"></span><span class="comment">/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option. </span>
+<a name="l00332"></a>00332 <span class="comment">   It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T) </span>
+<a name="l00333"></a>00333 <span class="comment">   with an operator=(U) that explicitly converts the U to a T.  Types T and U should be</span>
+<a name="l00334"></a>00334 <span class="comment">   type synonyms on the platform.  Type U should be the wider variant of T from the</span>
+<a name="l00335"></a>00335 <span class="comment">   perspective of /Wp64. */</span>
+<a name="l00336"></a>00336 <span class="preprocessor">#define __TBB_DECL_ATOMIC_ALT(T,U) \</span>
+<a name="l00337"></a>00337 <span class="preprocessor">    template&lt;&gt; struct atomic&lt;T&gt;: internal::atomic_impl_with_arithmetic&lt;T,T,char&gt; {  \</span>
+<a name="l00338"></a>00338 <span class="preprocessor">        T operator=( U rhs ) {return store_with_release(T(rhs));}  \</span>
+<a name="l00339"></a>00339 <span class="preprocessor">        atomic&lt;T&gt;&amp; operator=( const atomic&lt;T&gt;&amp; rhs ) {store_with_release(rhs); return *this;}  \</span>
+<a name="l00340"></a>00340 <span class="preprocessor">    };</span>
+<a name="l00341"></a>00341 <span class="preprocessor"></span><a class="code" href="a00229.html#ad165cf61abbe349d413df2589679add">__TBB_DECL_ATOMIC_ALT</a>(<span class="keywordtype">unsigned</span>,size_t)
+<a name="l00342"></a><a class="code" href="a00229.html#ad165cf61abbe349d413df2589679add">00342</a> __TBB_DECL_ATOMIC_ALT(<span class="keywordtype">int</span>,ptrdiff_t)
+<a name="l00343"></a>00343 <span class="preprocessor">#else</span>
+<a name="l00344"></a>00344 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span>)
+<a name="l00345"></a>00345 __TBB_DECL_ATOMIC(<span class="keywordtype">int</span>)
+<a name="l00346"></a>00346 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) &amp;&amp; __TBB_WORDSIZE==4 */</span>
+<a name="l00347"></a>00347 
+<a name="l00348"></a>00348 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)
+<a name="l00349"></a>00349 __TBB_DECL_ATOMIC(<span class="keywordtype">short</span>)
+<a name="l00350"></a>00350 __TBB_DECL_ATOMIC(<span class="keywordtype">char</span>)
+<a name="l00351"></a>00351 __TBB_DECL_ATOMIC(<span class="keywordtype">signed</span> <span class="keywordtype">char</span>)
+<a name="l00352"></a>00352 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)
+<a name="l00353"></a>00353 
+<a name="l00354"></a>00354 <span class="preprocessor">#if !defined(_MSC_VER)||defined(_NATIVE_WCHAR_T_DEFINED) </span>
+<a name="l00355"></a>00355 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">wchar_t</span>)
+<a name="l00356"></a>00356 <span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */</span>
+<a name="l00357"></a>00357 
+<a name="l00359"></a>00359 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span><a class="code" href="a00117.html">atomic</a>&lt;T*&gt;: internal::atomic_impl_with_arithmetic&lt;T*,ptrdiff_t,T&gt; {
+<a name="l00360"></a>00360     T* operator=( T* rhs ) {
+<a name="l00361"></a>00361         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
+<a name="l00362"></a>00362         <span class="keywordflow">return</span> this-&gt;store_with_release(rhs);
+<a name="l00363"></a>00363     }
+<a name="l00364"></a>00364     <a class="code" href="a00117.html">atomic&lt;T*&gt;</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="a00117.html">atomic&lt;T*&gt;</a>&amp; rhs ) {
+<a name="l00365"></a>00365         this-&gt;store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00366"></a>00366     }
+<a name="l00367"></a>00367     T* operator-&gt;()<span class="keyword"> const </span>{
+<a name="l00368"></a>00368         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
+<a name="l00369"></a>00369     }
+<a name="l00370"></a>00370 };
+<a name="l00371"></a>00371 
+<a name="l00373"></a><a class="code" href="a00118.html">00373</a> <span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span><a class="code" href="a00117.html">atomic</a>&lt;void*&gt;: internal::atomic_impl&lt;void*&gt; {
+<a name="l00374"></a>00374     <span class="keywordtype">void</span>* operator=( <span class="keywordtype">void</span>* rhs ) {
+<a name="l00375"></a>00375         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
+<a name="l00376"></a>00376         <span class="keywordflow">return</span> this-&gt;store_with_release(rhs);
+<a name="l00377"></a>00377     }
+<a name="l00378"></a>00378     <a class="code" href="a00117.html">atomic&lt;void*&gt;</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="a00117.html">atomic&lt;void*&gt;</a>&amp; rhs ) {
+<a name="l00379"></a>00379         this-&gt;store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00380"></a>00380     }
+<a name="l00381"></a>00381 };
+<a name="l00382"></a>00382 
+<a name="l00383"></a>00383 } <span class="comment">// namespace tbb</span>
+<a name="l00384"></a>00384 
+<a name="l00385"></a>00385 <span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; !defined(__INTEL_COMPILER)</span>
+<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">#endif // warnings 4244, 4267 are back</span>
+<a name="l00388"></a>00388 <span class="preprocessor"></span>
+<a name="l00389"></a>00389 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_atomic_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00266.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00266.html
new file mode 100644 (file)
index 0000000..761a180
--- /dev/null
@@ -0,0 +1,127 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>blocked_range.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>blocked_range.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_blocked_range_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_blocked_range_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
+<a name="l00027"></a>00027 
+<a name="l00037"></a>00037 
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Value&gt;
+<a name="l00040"></a><a class="code" href="a00122.html">00040</a> <span class="keyword">class </span><a class="code" href="a00122.html">blocked_range</a> {
+<a name="l00041"></a>00041 <span class="keyword">public</span>:
+<a name="l00043"></a>00043 
+<a name="l00045"></a><a class="code" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">00045</a>     <span class="keyword">typedef</span> Value <a class="code" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>;
+<a name="l00046"></a>00046 
+<a name="l00048"></a><a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">00048</a>     <span class="keyword">typedef</span> std::size_t <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>;
+<a name="l00049"></a>00049 
+<a name="l00051"></a>00051 
+<a name="l00052"></a><a class="code" href="a00122.html#94607755c5110d199202234d58d022ac">00052</a>     <a class="code" href="a00122.html#94607755c5110d199202234d58d022ac">blocked_range</a>() : my_begin(), my_end() {}
+<a name="l00053"></a>00053 
+<a name="l00055"></a><a class="code" href="a00122.html#14795a36ead1414b4371dbe1a4656359">00055</a>     <a class="code" href="a00122.html#94607755c5110d199202234d58d022ac">blocked_range</a>( Value begin_, Value end_, <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> grainsize_=1 ) : 
+<a name="l00056"></a>00056         my_end(end_), my_begin(begin_), my_grainsize(grainsize_) 
+<a name="l00057"></a>00057     {
+<a name="l00058"></a>00058         __TBB_ASSERT( my_grainsize&gt;0, <span class="stringliteral">"grainsize must be positive"</span> );
+<a name="l00059"></a>00059     }
+<a name="l00060"></a>00060 
+<a name="l00062"></a><a class="code" href="a00122.html#18d2258400756ac1446dac7676b18df3">00062</a>     <a class="code" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
+<a name="l00063"></a>00063 
+<a name="l00065"></a><a class="code" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">00065</a>     <a class="code" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
+<a name="l00066"></a>00066 
+<a name="l00068"></a>00068 
+<a name="l00069"></a><a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">00069</a>     <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()<span class="keyword"> const </span>{
+<a name="l00070"></a>00070         __TBB_ASSERT( !(<a class="code" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>()&lt;<a class="code" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin</a>()), <span class="stringliteral">"size() unspecified if end()&lt;begin()"</span> );
+<a name="l00071"></a>00071         <span class="keywordflow">return</span> <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>(my_end-my_begin);
+<a name="l00072"></a>00072     }
+<a name="l00073"></a>00073 
+<a name="l00075"></a><a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">00075</a>     <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
+<a name="l00076"></a>00076 
+<a name="l00077"></a>00077     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00078"></a>00078     <span class="comment">// Methods that implement Range concept</span>
+<a name="l00079"></a>00079     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00080"></a>00080 
+<a name="l00082"></a><a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">00082</a>     <span class="keywordtype">bool</span> <a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !(my_begin&lt;my_end);}
+<a name="l00083"></a>00083 
+<a name="l00085"></a>00085 
+<a name="l00086"></a><a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">00086</a>     <span class="keywordtype">bool</span> <a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize&lt;<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>();}
+<a name="l00087"></a>00087 
+<a name="l00089"></a>00089 
+<a name="l00091"></a><a class="code" href="a00122.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">00091</a>     <a class="code" href="a00122.html#94607755c5110d199202234d58d022ac">blocked_range</a>( <a class="code" href="a00122.html">blocked_range</a>&amp; r, <a class="code" href="a00165.html">split</a> ) : 
+<a name="l00092"></a>00092         my_end(r.my_end),
+<a name="l00093"></a>00093         my_begin(do_split(r)),
+<a name="l00094"></a>00094         my_grainsize(r.my_grainsize)
+<a name="l00095"></a>00095     {}
+<a name="l00096"></a>00096 
+<a name="l00097"></a>00097 <span class="keyword">private</span>:
+<a name="l00099"></a>00099     Value my_end;
+<a name="l00100"></a>00100     Value my_begin;
+<a name="l00101"></a>00101     <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> my_grainsize;
+<a name="l00102"></a>00102 
+<a name="l00104"></a>00104 
+<a name="l00105"></a>00105     <span class="keyword">static</span> Value do_split( <a class="code" href="a00122.html">blocked_range</a>&amp; r ) {
+<a name="l00106"></a>00106         __TBB_ASSERT( r.<a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>(), <span class="stringliteral">"cannot split blocked_range that is not divisible"</span> );
+<a name="l00107"></a>00107         Value middle = r.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> + (r.<a class="code" href="a00122.html#1ec95c8988b50064dd603998b16f3930">my_end</a>-r.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a>)/2u;
+<a name="l00108"></a>00108         r.<a class="code" href="a00122.html#1ec95c8988b50064dd603998b16f3930">my_end</a> = middle;
+<a name="l00109"></a>00109         <span class="keywordflow">return</span> middle;
+<a name="l00110"></a>00110     }
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RowValue, <span class="keyword">typename</span> ColValue&gt;
+<a name="l00113"></a>00113     <span class="keyword">friend</span> <span class="keyword">class </span>blocked_range2d;
+<a name="l00114"></a>00114 
+<a name="l00115"></a>00115     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RowValue, <span class="keyword">typename</span> ColValue, <span class="keyword">typename</span> PageValue&gt;
+<a name="l00116"></a>00116     <span class="keyword">friend</span> <span class="keyword">class </span>blocked_range3d;
+<a name="l00117"></a>00117 };
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119 } <span class="comment">// namespace tbb </span>
+<a name="l00120"></a>00120 
+<a name="l00121"></a>00121 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_blocked_range_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00267.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00267.html
new file mode 100644 (file)
index 0000000..95121be
--- /dev/null
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>blocked_range2d.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>blocked_range2d.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_blocked_range2d_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_blocked_range2d_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "blocked_range.h"</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
+<a name="l00028"></a>00028 
+<a name="l00030"></a>00030 
+<a name="l00031"></a>00031 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RowValue, <span class="keyword">typename</span> ColValue=RowValue&gt;
+<a name="l00032"></a><a class="code" href="a00123.html">00032</a> <span class="keyword">class </span><a class="code" href="a00123.html">blocked_range2d</a> {
+<a name="l00033"></a>00033 <span class="keyword">public</span>:
+<a name="l00035"></a><a class="code" href="a00123.html#a807a22fe658ec38b8edfd69521d0383">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00122.html">blocked_range&lt;RowValue&gt;</a> <a class="code" href="a00122.html">row_range_type</a>;
+<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00122.html">blocked_range&lt;ColValue&gt;</a> <a class="code" href="a00122.html">col_range_type</a>;
+<a name="l00037"></a>00037  
+<a name="l00038"></a>00038 <span class="keyword">private</span>:
+<a name="l00039"></a>00039     <a class="code" href="a00122.html">row_range_type</a> my_rows;
+<a name="l00040"></a>00040     <a class="code" href="a00122.html">col_range_type</a> my_cols;
+<a name="l00041"></a>00041 
+<a name="l00042"></a>00042 <span class="keyword">public</span>:
+<a name="l00043"></a>00043 
+<a name="l00044"></a>00044     <a class="code" href="a00123.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end, <span class="keyword">typename</span> <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize,
+<a name="l00045"></a>00045                      ColValue col_begin, ColValue col_end, <span class="keyword">typename</span> <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">col_range_type::size_type</a> col_grainsize ) : 
+<a name="l00046"></a>00046         my_rows(row_begin,row_end,row_grainsize),
+<a name="l00047"></a>00047         my_cols(col_begin,col_end,col_grainsize)
+<a name="l00048"></a>00048     {
+<a name="l00049"></a>00049     }
+<a name="l00050"></a>00050 
+<a name="l00051"></a>00051     <a class="code" href="a00123.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end,
+<a name="l00052"></a>00052                      ColValue col_begin, ColValue col_end ) : 
+<a name="l00053"></a>00053         my_rows(row_begin,row_end),
+<a name="l00054"></a>00054         my_cols(col_begin,col_end)
+<a name="l00055"></a>00055     {
+<a name="l00056"></a>00056     }
+<a name="l00057"></a>00057 
+<a name="l00059"></a><a class="code" href="a00123.html#d144cb2d88cef553420311aca8667a44">00059</a>     <span class="keywordtype">bool</span> <a class="code" href="a00123.html#d144cb2d88cef553420311aca8667a44">empty</a>()<span class="keyword"> const </span>{
+<a name="l00060"></a>00060         <span class="comment">// Yes, it is a logical OR here, not AND.</span>
+<a name="l00061"></a>00061         <span class="keywordflow">return</span> my_rows.<a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
+<a name="l00062"></a>00062     }
+<a name="l00063"></a>00063 
+<a name="l00065"></a><a class="code" href="a00123.html#ad36a9b38e4fef26d376f99552ce2d92">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00123.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a>()<span class="keyword"> const </span>{
+<a name="l00066"></a>00066         <span class="keywordflow">return</span> my_rows.<a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
+<a name="l00067"></a>00067     }
+<a name="l00068"></a>00068 
+<a name="l00069"></a>00069     <a class="code" href="a00123.html">blocked_range2d</a>( <a class="code" href="a00123.html">blocked_range2d</a>&amp; r, <a class="code" href="a00165.html">split</a> ) : 
+<a name="l00070"></a>00070         my_rows(r.my_rows),
+<a name="l00071"></a>00071         my_cols(r.my_cols)
+<a name="l00072"></a>00072     {
+<a name="l00073"></a>00073         <span class="keywordflow">if</span>( my_rows.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) &lt; my_cols.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00074"></a>00074             my_cols.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00123.html#9837bbaabc5836741fde79512ea1131d">my_cols</a>);
+<a name="l00075"></a>00075         } <span class="keywordflow">else</span> {
+<a name="l00076"></a>00076             my_rows.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00123.html#4be7c7b39da256afe9c67be735b6f788">my_rows</a>);
+<a name="l00077"></a>00077         }
+<a name="l00078"></a>00078     }
+<a name="l00079"></a>00079 
+<a name="l00081"></a><a class="code" href="a00123.html#f496e7348a82652fba581203477cc07c">00081</a>     <span class="keyword">const</span> <a class="code" href="a00122.html">row_range_type</a>&amp; <a class="code" href="a00123.html#f496e7348a82652fba581203477cc07c">rows</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_rows;}
+<a name="l00082"></a>00082 
+<a name="l00084"></a><a class="code" href="a00123.html#392a46759af2c884957115771affa7f4">00084</a>     <span class="keyword">const</span> <a class="code" href="a00122.html">col_range_type</a>&amp; <a class="code" href="a00123.html#392a46759af2c884957115771affa7f4">cols</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_cols;}
+<a name="l00085"></a>00085 };
+<a name="l00086"></a>00086 
+<a name="l00087"></a>00087 } <span class="comment">// namespace tbb </span>
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_blocked_range2d_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00268.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00268.html
new file mode 100644 (file)
index 0000000..53dd7e7
--- /dev/null
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>blocked_range3d.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>blocked_range3d.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_blocked_range3d_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_blocked_range3d_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "blocked_range.h"</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
+<a name="l00028"></a>00028 
+<a name="l00030"></a>00030 
+<a name="l00031"></a>00031 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> PageValue, <span class="keyword">typename</span> RowValue=PageValue, <span class="keyword">typename</span> ColValue=RowValue&gt;
+<a name="l00032"></a><a class="code" href="a00124.html">00032</a> <span class="keyword">class </span><a class="code" href="a00124.html">blocked_range3d</a> {
+<a name="l00033"></a>00033 <span class="keyword">public</span>:
+<a name="l00035"></a><a class="code" href="a00124.html#b8ebf17a552ba47825e9b3887855b719">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00122.html">blocked_range&lt;PageValue&gt;</a> <a class="code" href="a00122.html">page_range_type</a>;
+<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00122.html">blocked_range&lt;RowValue&gt;</a>  <a class="code" href="a00122.html">row_range_type</a>;
+<a name="l00037"></a>00037     <span class="keyword">typedef</span> <a class="code" href="a00122.html">blocked_range&lt;ColValue&gt;</a>  <a class="code" href="a00122.html">col_range_type</a>;
+<a name="l00038"></a>00038  
+<a name="l00039"></a>00039 <span class="keyword">private</span>:
+<a name="l00040"></a>00040     <a class="code" href="a00122.html">page_range_type</a> my_pages;
+<a name="l00041"></a>00041     <a class="code" href="a00122.html">row_range_type</a>  my_rows;
+<a name="l00042"></a>00042     <a class="code" href="a00122.html">col_range_type</a>  my_cols;
+<a name="l00043"></a>00043 
+<a name="l00044"></a>00044 <span class="keyword">public</span>:
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046     <a class="code" href="a00124.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end,
+<a name="l00047"></a>00047                      RowValue  row_begin,  RowValue row_end,
+<a name="l00048"></a>00048                      ColValue  col_begin,  ColValue col_end ) : 
+<a name="l00049"></a>00049         my_pages(page_begin,page_end),
+<a name="l00050"></a>00050         my_rows(row_begin,row_end),
+<a name="l00051"></a>00051         my_cols(col_begin,col_end)
+<a name="l00052"></a>00052     {
+<a name="l00053"></a>00053     }
+<a name="l00054"></a>00054 
+<a name="l00055"></a>00055     <a class="code" href="a00124.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end, <span class="keyword">typename</span> <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">page_range_type::size_type</a> page_grainsize, 
+<a name="l00056"></a>00056                      RowValue  row_begin,  RowValue row_end,   <span class="keyword">typename</span> <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize,
+<a name="l00057"></a>00057                      ColValue  col_begin,  ColValue col_end,   <span class="keyword">typename</span> <a class="code" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">col_range_type::size_type</a> col_grainsize ) :  
+<a name="l00058"></a>00058         my_pages(page_begin,page_end,page_grainsize),
+<a name="l00059"></a>00059         my_rows(row_begin,row_end,row_grainsize),
+<a name="l00060"></a>00060         my_cols(col_begin,col_end,col_grainsize)
+<a name="l00061"></a>00061     {
+<a name="l00062"></a>00062     }
+<a name="l00063"></a>00063 
+<a name="l00065"></a><a class="code" href="a00124.html#356860e1c977d91711e8216bd55c0b25">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00124.html#356860e1c977d91711e8216bd55c0b25">empty</a>()<span class="keyword"> const </span>{
+<a name="l00066"></a>00066         <span class="comment">// Yes, it is a logical OR here, not AND.</span>
+<a name="l00067"></a>00067         <span class="keywordflow">return</span> my_pages.<a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_rows.<a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
+<a name="l00068"></a>00068     }
+<a name="l00069"></a>00069 
+<a name="l00071"></a><a class="code" href="a00124.html#39d69191721c488e737ae5d9c5336b9c">00071</a>     <span class="keywordtype">bool</span> <a class="code" href="a00124.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a>()<span class="keyword"> const </span>{
+<a name="l00072"></a>00072         <span class="keywordflow">return</span>  my_pages.<a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_rows.<a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00122.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
+<a name="l00073"></a>00073     }
+<a name="l00074"></a>00074 
+<a name="l00075"></a>00075     <a class="code" href="a00124.html">blocked_range3d</a>( <a class="code" href="a00124.html">blocked_range3d</a>&amp; r, <a class="code" href="a00165.html">split</a> ) : 
+<a name="l00076"></a>00076         my_pages(r.my_pages),
+<a name="l00077"></a>00077         my_rows(r.my_rows),
+<a name="l00078"></a>00078         my_cols(r.my_cols)
+<a name="l00079"></a>00079     {
+<a name="l00080"></a>00080         <span class="keywordflow">if</span>( my_pages.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) &lt; my_rows.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00081"></a>00081             <span class="keywordflow">if</span> ( my_rows.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) &lt; my_cols.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00082"></a>00082                 my_cols.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00124.html#ef7143ddf8f5b1265b5a6d05be00cde5">my_cols</a>);
+<a name="l00083"></a>00083             } <span class="keywordflow">else</span> {
+<a name="l00084"></a>00084                 my_rows.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00124.html#76ead25c280ef630b88a1c8846471707">my_rows</a>);
+<a name="l00085"></a>00085             }
+<a name="l00086"></a>00086         } <span class="keywordflow">else</span> {
+<a name="l00087"></a>00087             <span class="keywordflow">if</span> ( my_pages.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) &lt; my_cols.<a class="code" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00088"></a>00088                 my_cols.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00124.html#ef7143ddf8f5b1265b5a6d05be00cde5">my_cols</a>);
+<a name="l00089"></a>00089             } <span class="keywordflow">else</span> {
+<a name="l00090"></a>00090                     my_pages.<a class="code" href="a00122.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = page_range_type::do_split(r.<a class="code" href="a00124.html#b18ae46a01d42745078d9e287ab87baa">my_pages</a>);
+<a name="l00091"></a>00091             }
+<a name="l00092"></a>00092         }
+<a name="l00093"></a>00093     }
+<a name="l00094"></a>00094 
+<a name="l00096"></a><a class="code" href="a00124.html#cf971430aa12361d3ed245344b7c6764">00096</a>     <span class="keyword">const</span> <a class="code" href="a00122.html">page_range_type</a>&amp; <a class="code" href="a00124.html#cf971430aa12361d3ed245344b7c6764">pages</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_pages;}
+<a name="l00097"></a>00097 
+<a name="l00099"></a><a class="code" href="a00124.html#1584623e59ff32a8aa82006827508be4">00099</a>     <span class="keyword">const</span> <a class="code" href="a00122.html">row_range_type</a>&amp; <a class="code" href="a00124.html#1584623e59ff32a8aa82006827508be4">rows</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_rows;}
+<a name="l00100"></a>00100 
+<a name="l00102"></a><a class="code" href="a00124.html#3336ba9480fd6c43e158f9beb024c050">00102</a>     <span class="keyword">const</span> <a class="code" href="a00122.html">col_range_type</a>&amp; <a class="code" href="a00124.html#3336ba9480fd6c43e158f9beb024c050">cols</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_cols;}
+<a name="l00103"></a>00103 
+<a name="l00104"></a>00104 };
+<a name="l00105"></a>00105 
+<a name="l00106"></a>00106 } <span class="comment">// namespace tbb </span>
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_blocked_range3d_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00269.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00269.html
new file mode 100644 (file)
index 0000000..ec1ffa1
--- /dev/null
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>cache_aligned_allocator.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>cache_aligned_allocator.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_cache_aligned_allocator_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_cache_aligned_allocator_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;new&gt;</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
+<a name="l00028"></a>00028 
+<a name="l00030"></a>00030 <span class="keyword">namespace </span>internal {
+<a name="l00032"></a>00032 
+<a name="l00035"></a>00035     <span class="keyword">const</span> size_t NFS_MaxLineSize = 128;
+<a name="l00036"></a>00036 
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039     size_t __TBB_EXPORTED_FUNC NFS_GetLineSize();
+<a name="l00040"></a>00040 
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC NFS_Allocate( size_t n_element, size_t element_size, <span class="keywordtype">void</span>* hint );
+<a name="l00044"></a>00044 
+<a name="l00046"></a>00046 
+<a name="l00048"></a>00048     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC NFS_Free( <span class="keywordtype">void</span>* );
+<a name="l00049"></a>00049 }
+<a name="l00051"></a>00051 
+<a name="l00052"></a>00052 <span class="preprocessor">#if _MSC_VER &amp;&amp; !defined(__INTEL_COMPILER)</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
+<a name="l00054"></a>00054 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>
+<a name="l00059"></a>00059 
+<a name="l00062"></a>00062 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00063"></a><a class="code" href="a00125.html">00063</a> <span class="keyword">class </span><a class="code" href="a00125.html">cache_aligned_allocator</a> {
+<a name="l00064"></a>00064 <span class="keyword">public</span>:
+<a name="l00065"></a>00065     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type&lt;T&gt;::value_type value_type;
+<a name="l00066"></a>00066     <span class="keyword">typedef</span> value_type* pointer;
+<a name="l00067"></a>00067     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
+<a name="l00068"></a>00068     <span class="keyword">typedef</span> value_type&amp; reference;
+<a name="l00069"></a>00069     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type&amp; const_reference;
+<a name="l00070"></a>00070     <span class="keyword">typedef</span> size_t size_type;
+<a name="l00071"></a>00071     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00072"></a>00072     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt; <span class="keyword">struct </span>rebind {
+<a name="l00073"></a>00073         <span class="keyword">typedef</span> <a class="code" href="a00125.html">cache_aligned_allocator&lt;U&gt;</a> other;
+<a name="l00074"></a>00074     };
+<a name="l00075"></a>00075 
+<a name="l00076"></a>00076     <a class="code" href="a00125.html">cache_aligned_allocator</a>() <span class="keywordflow">throw</span>() {}
+<a name="l00077"></a>00077     <a class="code" href="a00125.html">cache_aligned_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00125.html">cache_aligned_allocator</a>&amp; ) <span class="keywordflow">throw</span>() {}
+<a name="l00078"></a>00078     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt; <a class="code" href="a00125.html">cache_aligned_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00125.html">cache_aligned_allocator&lt;U&gt;</a>&amp;) <span class="keywordflow">throw</span>() {}
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &amp;x;}
+<a name="l00081"></a>00081     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &amp;x;}
+<a name="l00082"></a>00082     
+<a name="l00084"></a><a class="code" href="a00125.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">00084</a>     pointer <a class="code" href="a00125.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* hint=0 ) {
+<a name="l00085"></a>00085         <span class="comment">// The "hint" argument is always ignored in NFS_Allocate thus const_cast shouldn't hurt</span>
+<a name="l00086"></a>00086         <span class="keywordflow">return</span> pointer(internal::NFS_Allocate( n, <span class="keyword">sizeof</span>(value_type), const_cast&lt;void*&gt;(hint) ));
+<a name="l00087"></a>00087     }
+<a name="l00088"></a>00088 
+<a name="l00090"></a><a class="code" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">00090</a>     <span class="keywordtype">void</span> <a class="code" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( pointer p, size_type ) {
+<a name="l00091"></a>00091         internal::NFS_Free(p);
+<a name="l00092"></a>00092     }
+<a name="l00093"></a>00093 
+<a name="l00095"></a><a class="code" href="a00125.html#fb23b687b4c0429dab4c7f8017266cf0">00095</a>     size_type <a class="code" href="a00125.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a>() const throw() {
+<a name="l00096"></a>00096         <span class="keywordflow">return</span> (~size_t(0)-internal::NFS_MaxLineSize)/<span class="keyword">sizeof</span>(value_type);
+<a name="l00097"></a>00097     }
+<a name="l00098"></a>00098 
+<a name="l00100"></a><a class="code" href="a00125.html#958ee8745c86c275bfc9533af565e017">00100</a>     <span class="keywordtype">void</span> <a class="code" href="a00125.html#958ee8745c86c275bfc9533af565e017">construct</a>( pointer p, <span class="keyword">const</span> value_type&amp; value ) {<span class="keyword">new</span>(static_cast&lt;void*&gt;(p)) value_type(value);}
+<a name="l00101"></a>00101 
+<a name="l00103"></a><a class="code" href="a00125.html#cd298895a4f1654b5149ec84b591ecb5">00103</a>     <span class="keywordtype">void</span> <a class="code" href="a00125.html#cd298895a4f1654b5149ec84b591ecb5">destroy</a>( pointer p ) {p-&gt;~value_type();}
+<a name="l00104"></a>00104 };
+<a name="l00105"></a>00105 
+<a name="l00106"></a>00106 <span class="preprocessor">#if _MSC_VER &amp;&amp; !defined(__INTEL_COMPILER)</span>
+<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
+<a name="l00109"></a>00109 <span class="preprocessor"></span>
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112 <span class="keyword">template</span>&lt;&gt; 
+<a name="l00113"></a><a class="code" href="a00126.html">00113</a> <span class="keyword">class </span><a class="code" href="a00125.html">cache_aligned_allocator</a>&lt;void&gt; {
+<a name="l00114"></a>00114 <span class="keyword">public</span>:
+<a name="l00115"></a>00115     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
+<a name="l00116"></a>00116     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
+<a name="l00117"></a>00117     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
+<a name="l00118"></a>00118     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt; <span class="keyword">struct </span>rebind {
+<a name="l00119"></a>00119         <span class="keyword">typedef</span> <a class="code" href="a00125.html">cache_aligned_allocator&lt;U&gt;</a> other;
+<a name="l00120"></a>00120     };
+<a name="l00121"></a>00121 };
+<a name="l00122"></a>00122 
+<a name="l00123"></a>00123 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00124"></a>00124 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00125.html">cache_aligned_allocator&lt;T&gt;</a>&amp;, <span class="keyword">const</span> <a class="code" href="a00125.html">cache_aligned_allocator&lt;U&gt;</a>&amp; ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+<a name="l00125"></a>00125 
+<a name="l00126"></a>00126 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00127"></a>00127 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> cache_aligned_allocator&lt;T&gt;&amp;, <span class="keyword">const</span> cache_aligned_allocator&lt;U&gt;&amp; ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+<a name="l00128"></a>00128 
+<a name="l00129"></a>00129 } <span class="comment">// namespace tbb</span>
+<a name="l00130"></a>00130 
+<a name="l00131"></a>00131 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_cache_aligned_allocator_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00271.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00271.html
new file mode 100644 (file)
index 0000000..4889a96
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>combinable.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>combinable.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_combinable_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_combinable_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb/enumerable_thread_specific.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb/cache_aligned_allocator.h"</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
+<a name="l00031"></a>00031 
+<a name="l00032"></a>00032 
+<a name="l00033"></a>00033     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
+<a name="l00034"></a><a class="code" href="a00128.html">00034</a>         <span class="keyword">class </span><a class="code" href="a00128.html">combinable</a> {
+<a name="l00035"></a>00035     <span class="keyword">private</span>:
+<a name="l00036"></a>00036         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00125.html">tbb::cache_aligned_allocator&lt;T&gt;</a> <a class="code" href="a00125.html">my_alloc</a>;
+<a name="l00037"></a>00037 
+<a name="l00038"></a>00038         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00138.html">tbb::enumerable_thread_specific&lt;T, my_alloc, ets_no_key&gt;</a> <a class="code" href="a00138.html">my_ets_type</a>;
+<a name="l00039"></a>00039         <a class="code" href="a00138.html">my_ets_type</a> my_ets; 
+<a name="l00040"></a>00040  
+<a name="l00041"></a>00041     <span class="keyword">public</span>:
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043         <a class="code" href="a00128.html">combinable</a>() { }
+<a name="l00044"></a>00044 
+<a name="l00045"></a>00045         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> finit&gt;
+<a name="l00046"></a>00046         <a class="code" href="a00128.html">combinable</a>( finit _finit) : my_ets(_finit) { }
+<a name="l00047"></a>00047 
+<a name="l00049"></a><a class="code" href="a00128.html#2c87e79ae98588a5780f708773388843">00049</a>         <a class="code" href="a00128.html#2c87e79ae98588a5780f708773388843">~combinable</a>() { 
+<a name="l00050"></a>00050         }
+<a name="l00051"></a>00051 
+<a name="l00052"></a>00052         <a class="code" href="a00128.html">combinable</a>(<span class="keyword">const</span> <a class="code" href="a00128.html">combinable</a>&amp; other) : my_ets(other.my_ets) { }
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054         combinable &amp; operator=( <span class="keyword">const</span> combinable &amp; other) { my_ets = other.my_ets; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056         <span class="keywordtype">void</span> clear() { my_ets.<a class="code" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>(); }
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058         T&amp; local() { <span class="keywordflow">return</span> my_ets.<a class="code" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>(); }
+<a name="l00059"></a>00059 
+<a name="l00060"></a>00060         T&amp; local(<span class="keywordtype">bool</span> &amp; exists) { <span class="keywordflow">return</span> my_ets.<a class="code" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>(exists); }
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062         <span class="keyword">template</span>&lt; <span class="keyword">typename</span> FCombine&gt;
+<a name="l00063"></a>00063         T combine(FCombine fcombine) { <span class="keywordflow">return</span> my_ets.<a class="code" href="a00138.html#dd6b27d9c98297220b08732d9087a5a8">combine</a>(fcombine); }
+<a name="l00064"></a>00064 
+<a name="l00065"></a>00065         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> FCombine&gt;
+<a name="l00066"></a>00066         <span class="keywordtype">void</span> combine_each(FCombine fcombine) { my_ets.<a class="code" href="a00138.html#4abce9638ef2693d813d820af59bb6e2">combine_each</a>(fcombine); }
+<a name="l00067"></a>00067 
+<a name="l00068"></a>00068     };
+<a name="l00069"></a>00069 } <span class="comment">// namespace tbb</span>
+<a name="l00070"></a>00070 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_combinable_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00272.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00272.html
new file mode 100644 (file)
index 0000000..d088cdf
--- /dev/null
@@ -0,0 +1,1111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>concurrent_hash_map.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>concurrent_hash_map.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_hash_map_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_hash_map_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;stdexcept&gt;</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;iterator&gt;</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;utility&gt;</span>      <span class="comment">// Need std::pair</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;cstring&gt;</span>      <span class="comment">// Need std::memset</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;string&gt;</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "tbb_allocator.h"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#include &lt;typeinfo&gt;</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>
+<a name="l00039"></a>00039 <span class="keyword">namespace </span>tbb {
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>tbb_hash_compare;
+<a name="l00042"></a>00042 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare = tbb_hash_compare&lt;Key&gt;, <span class="keyword">typename</span> A = tbb_allocator&lt;std::pair&lt;Key, T&gt; &gt; &gt;
+<a name="l00043"></a>00043 <span class="keyword">class </span>concurrent_hash_map;
+<a name="l00044"></a>00044 
+<a name="l00046"></a>00046 <span class="keyword">namespace </span>internal {
+<a name="l00048"></a>00048     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+<a name="l00050"></a>00050     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3( <span class="keywordtype">void</span>* dst, <span class="keywordtype">void</span>* src );
+<a name="l00052"></a>00052     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC itt_load_pointer_v3( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+<a name="l00053"></a>00053 
+<a name="l00055"></a>00055     <span class="keyword">typedef</span> size_t hashcode_t;
+<a name="l00057"></a>00057     <span class="keyword">class </span>hash_map_base {
+<a name="l00058"></a>00058     <span class="keyword">public</span>:
+<a name="l00060"></a>00060         <span class="keyword">typedef</span> size_t size_type;
+<a name="l00062"></a>00062         <span class="keyword">typedef</span> size_t hashcode_t;
+<a name="l00064"></a>00064         <span class="keyword">typedef</span> size_t segment_index_t;
+<a name="l00066"></a>00066         <span class="keyword">struct </span>node_base : no_copy {
+<a name="l00068"></a>00068             <span class="keyword">typedef</span> spin_rw_mutex mutex_t;
+<a name="l00070"></a>00070             <span class="keyword">typedef</span> mutex_t::scoped_lock scoped_t;
+<a name="l00072"></a>00072             node_base *next;
+<a name="l00073"></a>00073             mutex_t mutex;
+<a name="l00074"></a>00074         };
+<a name="l00076"></a>00076 <span class="preprocessor">#       define __TBB_rehash_req reinterpret_cast&lt;node_base*&gt;(1)</span>
+<a name="l00078"></a>00078 <span class="preprocessor">#       define __TBB_empty_rehashed reinterpret_cast&lt;node_base*&gt;(0)</span>
+<a name="l00080"></a>00080 <span class="preprocessor">        struct bucket : no_copy {</span>
+<a name="l00082"></a>00082 <span class="preprocessor">            typedef spin_rw_mutex mutex_t;</span>
+<a name="l00084"></a>00084 <span class="preprocessor">            typedef mutex_t::scoped_lock scoped_t;</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span>            mutex_t mutex;
+<a name="l00086"></a>00086             node_base *node_list;
+<a name="l00087"></a>00087         };
+<a name="l00089"></a>00089         <span class="keyword">static</span> size_type <span class="keyword">const</span> embedded_block = 1;
+<a name="l00091"></a>00091         <span class="keyword">static</span> size_type <span class="keyword">const</span> embedded_buckets = 1&lt;&lt;embedded_block;
+<a name="l00093"></a>00093         <span class="keyword">static</span> size_type <span class="keyword">const</span> first_block = 8; <span class="comment">//including embedded_block. perfect with bucket size 16, so the allocations are power of 4096</span>
+<a name="l00095"></a>00095 <span class="comment"></span>        <span class="keyword">static</span> size_type <span class="keyword">const</span> pointers_per_table = <span class="keyword">sizeof</span>(segment_index_t) * 8; <span class="comment">// one segment per bit</span>
+<a name="l00097"></a>00097 <span class="comment"></span>        <span class="keyword">typedef</span> bucket *segment_ptr_t;
+<a name="l00099"></a>00099         <span class="keyword">typedef</span> segment_ptr_t segments_table_t[pointers_per_table];
+<a name="l00101"></a>00101         atomic&lt;hashcode_t&gt; my_mask;
+<a name="l00103"></a>00103         segments_table_t my_table;
+<a name="l00105"></a>00105         atomic&lt;size_type&gt; my_size; <span class="comment">// It must be in separate cache line from my_mask due to performance effects</span>
+<a name="l00107"></a>00107 <span class="comment"></span>        bucket my_embedded_segment[embedded_buckets];
+<a name="l00108"></a>00108 
+<a name="l00110"></a>00110         hash_map_base() {
+<a name="l00111"></a>00111             std::memset( <span class="keyword">this</span>, 0, pointers_per_table*<span class="keyword">sizeof</span>(segment_ptr_t) <span class="comment">// 32*4=128   or 64*8=512</span>
+<a name="l00112"></a>00112                 + <span class="keyword">sizeof</span>(my_size) + <span class="keyword">sizeof</span>(my_mask)  <span class="comment">// 4+4 or 8+8</span>
+<a name="l00113"></a>00113                 + embedded_buckets*<span class="keyword">sizeof</span>(bucket) ); <span class="comment">// n*8 or n*16</span>
+<a name="l00114"></a>00114             <span class="keywordflow">for</span>( size_type i = 0; i &lt; embedded_block; i++ ) <span class="comment">// fill the table</span>
+<a name="l00115"></a>00115                 my_table[i] = my_embedded_segment + segment_base(i);
+<a name="l00116"></a>00116             my_mask = embedded_buckets - 1;
+<a name="l00117"></a>00117             __TBB_ASSERT( embedded_block &lt;= first_block, <span class="stringliteral">"The first block number must include embedded blocks"</span>);
+<a name="l00118"></a>00118         }
+<a name="l00119"></a>00119 
+<a name="l00121"></a>00121         <span class="keyword">static</span> segment_index_t segment_index_of( size_type index ) {
+<a name="l00122"></a>00122             <span class="keywordflow">return</span> segment_index_t( __TBB_Log2( index|1 ) );
+<a name="l00123"></a>00123         }
+<a name="l00124"></a>00124 
+<a name="l00126"></a>00126         <span class="keyword">static</span> segment_index_t segment_base( segment_index_t k ) {
+<a name="l00127"></a>00127             <span class="keywordflow">return</span> (segment_index_t(1)&lt;&lt;k &amp; ~segment_index_t(1));
+<a name="l00128"></a>00128         }
+<a name="l00129"></a>00129 
+<a name="l00131"></a>00131         <span class="keyword">static</span> size_type segment_size( segment_index_t k ) {
+<a name="l00132"></a>00132             <span class="keywordflow">return</span> size_type(1)&lt;&lt;k; <span class="comment">// fake value for k==0</span>
+<a name="l00133"></a>00133         }
+<a name="l00134"></a>00134         
+<a name="l00136"></a>00136         <span class="keyword">static</span> <span class="keywordtype">bool</span> is_valid( <span class="keywordtype">void</span> *ptr ) {
+<a name="l00137"></a>00137             <span class="keywordflow">return</span> ptr &gt; reinterpret_cast&lt;void*&gt;(1);
+<a name="l00138"></a>00138         }
+<a name="l00139"></a>00139 
+<a name="l00141"></a>00141         <span class="keyword">static</span> <span class="keywordtype">void</span> init_buckets( segment_ptr_t ptr, size_type sz, <span class="keywordtype">bool</span> is_initial ) {
+<a name="l00142"></a>00142             <span class="keywordflow">if</span>( is_initial ) std::memset(ptr, 0, sz*<span class="keyword">sizeof</span>(bucket) );
+<a name="l00143"></a>00143             <span class="keywordflow">else</span> <span class="keywordflow">for</span>(size_type i = 0; i &lt; sz; i++, ptr++) {
+<a name="l00144"></a>00144                     *reinterpret_cast&lt;intptr_t*&gt;(&amp;ptr-&gt;mutex) = 0;
+<a name="l00145"></a>00145                     ptr-&gt;node_list = __TBB_rehash_req;
+<a name="l00146"></a>00146                 }
+<a name="l00147"></a>00147         }
+<a name="l00148"></a>00148         
+<a name="l00150"></a>00150         <span class="keyword">static</span> <span class="keywordtype">void</span> add_to_bucket( bucket *b, node_base *n ) {
+<a name="l00151"></a>00151             n-&gt;next = b-&gt;node_list;
+<a name="l00152"></a>00152             b-&gt;node_list = n; <span class="comment">// its under lock and flag is set</span>
+<a name="l00153"></a>00153         }
+<a name="l00154"></a>00154 
+<a name="l00156"></a>00156         <span class="keyword">struct </span>enable_segment_failsafe {
+<a name="l00157"></a>00157             segment_ptr_t *my_segment_ptr;
+<a name="l00158"></a>00158             enable_segment_failsafe(segments_table_t &amp;table, segment_index_t k) : my_segment_ptr(&amp;table[k]) {}
+<a name="l00159"></a>00159             ~enable_segment_failsafe() {
+<a name="l00160"></a>00160                 <span class="keywordflow">if</span>( my_segment_ptr ) *my_segment_ptr = 0; <span class="comment">// indicate no allocation in progress</span>
+<a name="l00161"></a>00161             }
+<a name="l00162"></a>00162         };
+<a name="l00163"></a>00163 
+<a name="l00165"></a>00165         <span class="keywordtype">void</span> enable_segment( segment_index_t k, <span class="keywordtype">bool</span> is_initial = <span class="keyword">false</span> ) {
+<a name="l00166"></a>00166             __TBB_ASSERT( k, <span class="stringliteral">"Zero segment must be embedded"</span> );
+<a name="l00167"></a>00167             enable_segment_failsafe watchdog( my_table, k );
+<a name="l00168"></a>00168             cache_aligned_allocator&lt;bucket&gt; alloc;
+<a name="l00169"></a>00169             size_type sz;
+<a name="l00170"></a>00170             __TBB_ASSERT( !is_valid(my_table[k]), <span class="stringliteral">"Wrong concurrent assignment"</span>);
+<a name="l00171"></a>00171             <span class="keywordflow">if</span>( k &gt;= first_block ) {
+<a name="l00172"></a>00172                 sz = segment_size( k );
+<a name="l00173"></a>00173                 segment_ptr_t ptr = alloc.allocate( sz );
+<a name="l00174"></a>00174                 init_buckets( ptr, sz, is_initial );
+<a name="l00175"></a>00175 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00176"></a>00176 <span class="preprocessor"></span>                <span class="comment">// TODO: actually, fence and notification are unneccessary here and below</span>
+<a name="l00177"></a>00177                 itt_store_pointer_with_release_v3( my_table + k, ptr );
+<a name="l00178"></a>00178 <span class="preprocessor">#else</span>
+<a name="l00179"></a>00179 <span class="preprocessor"></span>                my_table[k] = ptr;<span class="comment">// my_mask has release fence</span>
+<a name="l00180"></a>00180 <span class="preprocessor">#endif</span>
+<a name="l00181"></a>00181 <span class="preprocessor"></span>                sz &lt;&lt;= 1;<span class="comment">// double it to get entire capacity of the container</span>
+<a name="l00182"></a>00182             } <span class="keywordflow">else</span> { <span class="comment">// the first block</span>
+<a name="l00183"></a>00183                 __TBB_ASSERT( k == embedded_block, <span class="stringliteral">"Wrong segment index"</span> );
+<a name="l00184"></a>00184                 sz = segment_size( first_block );
+<a name="l00185"></a>00185                 segment_ptr_t ptr = alloc.allocate( sz - embedded_buckets );
+<a name="l00186"></a>00186                 init_buckets( ptr, sz - embedded_buckets, is_initial );
+<a name="l00187"></a>00187                 ptr -= segment_base(embedded_block);
+<a name="l00188"></a>00188                 <span class="keywordflow">for</span>(segment_index_t i = embedded_block; i &lt; first_block; i++) <span class="comment">// calc the offsets</span>
+<a name="l00189"></a>00189 #<span class="keywordflow">if</span> TBB_USE_THREADING_TOOLS
+<a name="l00190"></a>00190                     itt_store_pointer_with_release_v3( my_table + i, ptr + segment_base(i) );
+<a name="l00191"></a>00191 <span class="preprocessor">#else</span>
+<a name="l00192"></a>00192 <span class="preprocessor"></span>                    my_table[i] = ptr + segment_base(i);
+<a name="l00193"></a>00193 <span class="preprocessor">#endif</span>
+<a name="l00194"></a>00194 <span class="preprocessor"></span>            }
+<a name="l00195"></a>00195 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00196"></a>00196 <span class="preprocessor"></span>            itt_store_pointer_with_release_v3( &amp;my_mask, (<span class="keywordtype">void</span>*)(sz-1) );
+<a name="l00197"></a>00197 <span class="preprocessor">#else</span>
+<a name="l00198"></a>00198 <span class="preprocessor"></span>            my_mask = sz - 1;
+<a name="l00199"></a>00199 <span class="preprocessor">#endif</span>
+<a name="l00200"></a>00200 <span class="preprocessor"></span>            watchdog.my_segment_ptr = 0;
+<a name="l00201"></a>00201         }
+<a name="l00202"></a>00202 
+<a name="l00204"></a>00204         bucket *get_bucket( hashcode_t h ) <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="comment">// TODO: add throw() everywhere?</span>
+<a name="l00205"></a>00205             segment_index_t s = segment_index_of( h );
+<a name="l00206"></a>00206             h -= segment_base(s);
+<a name="l00207"></a>00207             segment_ptr_t seg = my_table[s];
+<a name="l00208"></a>00208             __TBB_ASSERT( is_valid(seg), <span class="stringliteral">"hashcode must be cut by valid mask for allocated segments"</span> );
+<a name="l00209"></a>00209             <span class="keywordflow">return</span> &amp;seg[h];
+<a name="l00210"></a>00210         }
+<a name="l00211"></a>00211 
+<a name="l00213"></a>00213         <span class="comment">// Splitting into two functions should help inlining</span>
+<a name="l00214"></a>00214         <span class="keyword">inline</span> <span class="keywordtype">bool</span> check_mask_race( <span class="keyword">const</span> hashcode_t h, hashcode_t &amp;m )<span class="keyword"> const </span>{
+<a name="l00215"></a>00215             hashcode_t m_now, m_old = m;
+<a name="l00216"></a>00216 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00217"></a>00217 <span class="preprocessor"></span>            m_now = (hashcode_t) itt_load_pointer_with_acquire_v3( &amp;my_mask );
+<a name="l00218"></a>00218 <span class="preprocessor">#else</span>
+<a name="l00219"></a>00219 <span class="preprocessor"></span>            m_now = my_mask;
+<a name="l00220"></a>00220 <span class="preprocessor">#endif</span>
+<a name="l00221"></a>00221 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( m_old != m_now )
+<a name="l00222"></a>00222                 <span class="keywordflow">return</span> check_rehashing_collision( h, m_old, m = m_now );
+<a name="l00223"></a>00223             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00224"></a>00224         }
+<a name="l00225"></a>00225 
+<a name="l00227"></a>00227         <span class="keywordtype">bool</span> check_rehashing_collision( <span class="keyword">const</span> hashcode_t h, hashcode_t m_old, hashcode_t m )<span class="keyword"> const </span>{
+<a name="l00228"></a>00228             __TBB_ASSERT(m_old != m, NULL); <span class="comment">// TODO?: m arg could be optimized out by passing h = h&amp;m</span>
+<a name="l00229"></a>00229             <span class="keywordflow">if</span>( (h &amp; m_old) != (h &amp; m) ) { <span class="comment">// mask changed for this hashcode, rare event</span>
+<a name="l00230"></a>00230                 <span class="comment">// condition above proves that 'h' has some other bits set beside 'm_old'</span>
+<a name="l00231"></a>00231                 <span class="comment">// find next applicable mask after m_old    //TODO: look at bsl instruction</span>
+<a name="l00232"></a>00232                 <span class="keywordflow">for</span>( ++m_old; !(h &amp; m_old); m_old &lt;&lt;= 1 ); <span class="comment">// at maximum few rounds depending on the first block size</span>
+<a name="l00233"></a>00233                 m_old = (m_old&lt;&lt;1) - 1; <span class="comment">// get full mask from a bit</span>
+<a name="l00234"></a>00234                 __TBB_ASSERT((m_old&amp;(m_old+1))==0 &amp;&amp; m_old &lt;= m, NULL);
+<a name="l00235"></a>00235                 <span class="comment">// check whether it is rehashing/ed</span>
+<a name="l00236"></a>00236 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00237"></a>00237 <span class="preprocessor"></span>                <span class="keywordflow">if</span>( itt_load_pointer_with_acquire_v3(&amp;( get_bucket(h &amp; m_old)-&gt;node_list )) != __TBB_rehash_req )
+<a name="l00238"></a>00238 <span class="preprocessor">#else</span>
+<a name="l00239"></a>00239 <span class="preprocessor"></span>                <span class="keywordflow">if</span>( __TBB_load_with_acquire(get_bucket( h &amp; m_old )-&gt;node_list) != __TBB_rehash_req )
+<a name="l00240"></a>00240 <span class="preprocessor">#endif</span>
+<a name="l00241"></a>00241 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00242"></a>00242             }
+<a name="l00243"></a>00243             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00244"></a>00244         }
+<a name="l00245"></a>00245 
+<a name="l00247"></a>00247         segment_index_t insert_new_node( bucket *b, node_base *n, hashcode_t mask ) {
+<a name="l00248"></a>00248             size_type sz = ++my_size; <span class="comment">// prefix form is to enforce allocation after the first item inserted</span>
+<a name="l00249"></a>00249             add_to_bucket( b, n );
+<a name="l00250"></a>00250             <span class="comment">// check load factor</span>
+<a name="l00251"></a>00251             <span class="keywordflow">if</span>( sz &gt;= mask ) { <span class="comment">// TODO: add custom load_factor </span>
+<a name="l00252"></a>00252                 segment_index_t new_seg = segment_index_of( mask+1 );
+<a name="l00253"></a>00253                 __TBB_ASSERT( is_valid(my_table[new_seg-1]), <span class="stringliteral">"new allocations must not publish new mask until segment has allocated"</span>);
+<a name="l00254"></a>00254 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00255"></a>00255 <span class="preprocessor"></span>                <span class="keywordflow">if</span>( !itt_load_pointer_v3(my_table+new_seg)
+<a name="l00256"></a>00256 #<span class="keywordflow">else</span>
+<a name="l00257"></a>00257                 <span class="keywordflow">if</span>( !my_table[new_seg]
+<a name="l00258"></a>00258 #endif
+<a name="l00259"></a>00259                                   &amp;&amp; __TBB_CompareAndSwapW(&amp;my_table[new_seg], 1, 0) == 0 )
+<a name="l00260"></a>00260                     <span class="keywordflow">return</span> new_seg; <span class="comment">// The value must be processed</span>
+<a name="l00261"></a>00261             }
+<a name="l00262"></a>00262             <span class="keywordflow">return</span> 0;
+<a name="l00263"></a>00263         }
+<a name="l00264"></a>00264 
+<a name="l00266"></a>00266         <span class="keywordtype">void</span> reserve(size_type buckets) {
+<a name="l00267"></a>00267             <span class="keywordflow">if</span>( !buckets-- ) <span class="keywordflow">return</span>;
+<a name="l00268"></a>00268             <span class="keywordtype">bool</span> is_initial = !my_size;
+<a name="l00269"></a>00269             <span class="keywordflow">for</span>( size_type m = my_mask; buckets &gt; m; m = my_mask )
+<a name="l00270"></a>00270                 enable_segment( segment_index_of( m+1 ), is_initial );
+<a name="l00271"></a>00271         }
+<a name="l00273"></a>00273         <span class="keywordtype">void</span> internal_swap(hash_map_base &amp;table) {
+<a name="l00274"></a>00274             std::swap(this-&gt;my_mask, table.my_mask);
+<a name="l00275"></a>00275             std::swap(this-&gt;my_size, table.my_size);
+<a name="l00276"></a>00276             <span class="keywordflow">for</span>(size_type i = 0; i &lt; embedded_buckets; i++)
+<a name="l00277"></a>00277                 std::swap(this-&gt;my_embedded_segment[i].node_list, table.my_embedded_segment[i].node_list);
+<a name="l00278"></a>00278             <span class="keywordflow">for</span>(size_type i = embedded_block; i &lt; pointers_per_table; i++)
+<a name="l00279"></a>00279                 std::swap(this-&gt;my_table[i], table.my_table[i]);
+<a name="l00280"></a>00280         }
+<a name="l00281"></a>00281     };
+<a name="l00282"></a>00282 
+<a name="l00283"></a>00283     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator&gt;
+<a name="l00284"></a>00284     <span class="keyword">class </span>hash_map_range;
+<a name="l00285"></a>00285 
+<a name="l00287"></a>00287 
+<a name="l00289"></a>00289     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value&gt;
+<a name="l00290"></a>00290     <span class="keyword">class </span>hash_map_iterator
+<a name="l00291"></a>00291         : <span class="keyword">public</span> std::iterator&lt;std::forward_iterator_tag,Value&gt;
+<a name="l00292"></a>00292     {
+<a name="l00293"></a>00293         <span class="keyword">typedef</span> Container map_type;
+<a name="l00294"></a>00294         <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::node node;
+<a name="l00295"></a>00295         <span class="keyword">typedef</span> hash_map_base::node_base node_base;
+<a name="l00296"></a>00296         <span class="keyword">typedef</span> hash_map_base::bucket bucket;
+<a name="l00297"></a>00297 
+<a name="l00298"></a>00298         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00299"></a>00299         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> hash_map_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> hash_map_iterator&lt;C,U&gt;&amp; j );
+<a name="l00300"></a>00300 
+<a name="l00301"></a>00301         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00302"></a>00302         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> hash_map_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> hash_map_iterator&lt;C,U&gt;&amp; j );
+<a name="l00303"></a>00303 
+<a name="l00304"></a>00304         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00305"></a>00305         <span class="keyword">friend</span> ptrdiff_t operator-( <span class="keyword">const</span> hash_map_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> hash_map_iterator&lt;C,U&gt;&amp; j );
+<a name="l00306"></a>00306     
+<a name="l00307"></a>00307         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> U&gt;
+<a name="l00308"></a>00308         <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_iterator;
+<a name="l00309"></a>00309 
+<a name="l00310"></a>00310         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I&gt;
+<a name="l00311"></a>00311         <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_range;
+<a name="l00312"></a>00312 
+<a name="l00313"></a>00313         <span class="keywordtype">void</span> advance_to_next_bucket() { <span class="comment">// TODO?: refactor to iterator_base class</span>
+<a name="l00314"></a>00314             size_t k = my_index+1;
+<a name="l00315"></a>00315             <span class="keywordflow">while</span>( my_bucket &amp;&amp; k &lt;= my_map-&gt;my_mask ) {
+<a name="l00316"></a>00316                 <span class="comment">// Following test uses 2's-complement wizardry</span>
+<a name="l00317"></a>00317                 <span class="keywordflow">if</span>( k&amp; (k-2) ) <span class="comment">// not the begining of a segment</span>
+<a name="l00318"></a>00318                     ++my_bucket;
+<a name="l00319"></a>00319                 <span class="keywordflow">else</span> my_bucket = my_map-&gt;get_bucket( k );
+<a name="l00320"></a>00320                 my_node = static_cast&lt;node*&gt;( my_bucket-&gt;node_list );
+<a name="l00321"></a>00321                 <span class="keywordflow">if</span>( hash_map_base::is_valid(my_node) ) {
+<a name="l00322"></a>00322                     my_index = k; <span class="keywordflow">return</span>;
+<a name="l00323"></a>00323                 }
+<a name="l00324"></a>00324                 ++k;
+<a name="l00325"></a>00325             }
+<a name="l00326"></a>00326             my_bucket = 0; my_node = 0; my_index = k; <span class="comment">// the end</span>
+<a name="l00327"></a>00327         }
+<a name="l00328"></a>00328 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
+<a name="l00329"></a>00329 <span class="preprocessor"></span>        <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A&gt;
+<a name="l00330"></a>00330         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00130.html">tbb::concurrent_hash_map</a>;
+<a name="l00331"></a>00331 <span class="preprocessor">#else</span>
+<a name="l00332"></a>00332 <span class="preprocessor"></span>    <span class="keyword">public</span>: <span class="comment">// workaround</span>
+<a name="l00333"></a>00333 <span class="preprocessor">#endif</span>
+<a name="l00335"></a>00335 <span class="preprocessor">        const Container *my_map;</span>
+<a name="l00336"></a>00336 <span class="preprocessor"></span>
+<a name="l00338"></a>00338         size_t my_index;
+<a name="l00339"></a>00339 
+<a name="l00341"></a>00341         <span class="keyword">const</span> bucket *my_bucket;
+<a name="l00342"></a>00342 
+<a name="l00344"></a>00344         node *my_node;
+<a name="l00345"></a>00345 
+<a name="l00346"></a>00346         hash_map_iterator( <span class="keyword">const</span> Container &amp;map, size_t index, <span class="keyword">const</span> bucket *b, node_base *n );
+<a name="l00347"></a>00347 
+<a name="l00348"></a>00348     <span class="keyword">public</span>:
+<a name="l00350"></a>00350         hash_map_iterator() {}
+<a name="l00351"></a>00351         hash_map_iterator( <span class="keyword">const</span> hash_map_iterator&lt;Container,typename Container::value_type&gt; &amp;other ) :
+<a name="l00352"></a>00352             my_map(other.my_map),
+<a name="l00353"></a>00353             my_index(other.my_index),
+<a name="l00354"></a>00354             my_bucket(other.my_bucket),
+<a name="l00355"></a>00355             my_node(other.my_node)
+<a name="l00356"></a>00356         {}
+<a name="l00357"></a>00357         Value&amp; operator*()<span class="keyword"> const </span>{
+<a name="l00358"></a>00358             __TBB_ASSERT( hash_map_base::is_valid(my_node), <span class="stringliteral">"iterator uninitialized or at end of container?"</span> );
+<a name="l00359"></a>00359             <span class="keywordflow">return</span> my_node-&gt;item;
+<a name="l00360"></a>00360         }
+<a name="l00361"></a>00361         Value* operator-&gt;()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &amp;operator*();}
+<a name="l00362"></a>00362         hash_map_iterator&amp; operator++();
+<a name="l00363"></a>00363         
+<a name="l00365"></a>00365         Value* operator++(<span class="keywordtype">int</span>) {
+<a name="l00366"></a>00366             Value* result = &amp;operator*();
+<a name="l00367"></a>00367             operator++();
+<a name="l00368"></a>00368             <span class="keywordflow">return</span> result;
+<a name="l00369"></a>00369         }
+<a name="l00370"></a>00370     };
+<a name="l00371"></a>00371 
+<a name="l00372"></a>00372     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value&gt;
+<a name="l00373"></a>00373     hash_map_iterator&lt;Container,Value&gt;::hash_map_iterator( <span class="keyword">const</span> Container &amp;map, size_t index, <span class="keyword">const</span> bucket *b, node_base *n ) :
+<a name="l00374"></a>00374         my_map(&amp;map),
+<a name="l00375"></a>00375         my_index(index),
+<a name="l00376"></a>00376         my_bucket(b),
+<a name="l00377"></a>00377         my_node( static_cast&lt;node*&gt;(n) )
+<a name="l00378"></a>00378     {
+<a name="l00379"></a>00379         <span class="keywordflow">if</span>( b &amp;&amp; !hash_map_base::is_valid(n) )
+<a name="l00380"></a>00380             advance_to_next_bucket();
+<a name="l00381"></a>00381     }
+<a name="l00382"></a>00382 
+<a name="l00383"></a>00383     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value&gt;
+<a name="l00384"></a>00384     hash_map_iterator&lt;Container,Value&gt;&amp; hash_map_iterator&lt;Container,Value&gt;::operator++() {
+<a name="l00385"></a>00385         my_node = static_cast&lt;node*&gt;( my_node-&gt;next );
+<a name="l00386"></a>00386         <span class="keywordflow">if</span>( !my_node ) advance_to_next_bucket();
+<a name="l00387"></a>00387         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00388"></a>00388     }
+<a name="l00389"></a>00389 
+<a name="l00390"></a>00390     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00391"></a>00391     <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> hash_map_iterator&lt;Container,T&gt;&amp; i, <span class="keyword">const</span> hash_map_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00392"></a>00392         <span class="keywordflow">return</span> i.my_node == j.my_node &amp;&amp; i.my_map == j.my_map;
+<a name="l00393"></a>00393     }
+<a name="l00394"></a>00394 
+<a name="l00395"></a>00395     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00396"></a>00396     <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> hash_map_iterator&lt;Container,T&gt;&amp; i, <span class="keyword">const</span> hash_map_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00397"></a>00397         <span class="keywordflow">return</span> i.my_node != j.my_node || i.my_map != j.my_map;
+<a name="l00398"></a>00398     }
+<a name="l00399"></a>00399 
+<a name="l00401"></a>00401 
+<a name="l00402"></a>00402     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator&gt;
+<a name="l00403"></a>00403     <span class="keyword">class </span>hash_map_range {
+<a name="l00404"></a>00404         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::map_type map_type;
+<a name="l00405"></a>00405         Iterator my_begin;
+<a name="l00406"></a>00406         Iterator my_end;
+<a name="l00407"></a>00407         <span class="keyword">mutable</span> Iterator my_midpoint;
+<a name="l00408"></a>00408         size_t my_grainsize;
+<a name="l00410"></a>00410         <span class="keywordtype">void</span> set_midpoint() <span class="keyword">const</span>;
+<a name="l00411"></a>00411         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt; <span class="keyword">friend</span> <span class="keyword">class </span>hash_map_range;
+<a name="l00412"></a>00412     <span class="keyword">public</span>:
+<a name="l00414"></a>00414         <span class="keyword">typedef</span> std::size_t size_type;
+<a name="l00415"></a>00415         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::value_type value_type;
+<a name="l00416"></a>00416         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::reference reference;
+<a name="l00417"></a>00417         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::difference_type difference_type;
+<a name="l00418"></a>00418         <span class="keyword">typedef</span> Iterator iterator;
+<a name="l00419"></a>00419 
+<a name="l00421"></a>00421         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin==my_end;}
+<a name="l00422"></a>00422 
+<a name="l00424"></a>00424         <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
+<a name="l00425"></a>00425             <span class="keywordflow">return</span> my_midpoint!=my_end;
+<a name="l00426"></a>00426         }
+<a name="l00428"></a>00428         hash_map_range( hash_map_range&amp; r, split ) : 
+<a name="l00429"></a>00429             my_end(r.my_end),
+<a name="l00430"></a>00430             my_grainsize(r.my_grainsize)
+<a name="l00431"></a>00431         {
+<a name="l00432"></a>00432             r.my_end = my_begin = r.my_midpoint;
+<a name="l00433"></a>00433             __TBB_ASSERT( !empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
+<a name="l00434"></a>00434             __TBB_ASSERT( !r.empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
+<a name="l00435"></a>00435             set_midpoint();
+<a name="l00436"></a>00436             r.set_midpoint();
+<a name="l00437"></a>00437         }
+<a name="l00439"></a>00439         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt;
+<a name="l00440"></a>00440         hash_map_range( hash_map_range&lt;U&gt;&amp; r) : 
+<a name="l00441"></a>00441             my_begin(r.my_begin),
+<a name="l00442"></a>00442             my_end(r.my_end),
+<a name="l00443"></a>00443             my_midpoint(r.my_midpoint),
+<a name="l00444"></a>00444             my_grainsize(r.my_grainsize)
+<a name="l00445"></a>00445         {}
+<a name="l00446"></a>00446 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00448"></a>00448 <span class="preprocessor">        hash_map_range( const Iterator&amp; begin_, const Iterator&amp; end_, size_type grainsize = 1 ) : </span>
+<a name="l00449"></a>00449 <span class="preprocessor"></span>            my_begin(begin_), 
+<a name="l00450"></a>00450             my_end(end_),
+<a name="l00451"></a>00451             my_grainsize(grainsize)
+<a name="l00452"></a>00452         {
+<a name="l00453"></a>00453             <span class="keywordflow">if</span>(!my_end.my_index &amp;&amp; !my_end.my_bucket) <span class="comment">// end</span>
+<a name="l00454"></a>00454                 my_end.my_index = my_end.my_map-&gt;my_mask + 1;
+<a name="l00455"></a>00455             set_midpoint();
+<a name="l00456"></a>00456             __TBB_ASSERT( grainsize&gt;0, <span class="stringliteral">"grainsize must be positive"</span> );
+<a name="l00457"></a>00457         }
+<a name="l00458"></a>00458 <span class="preprocessor">#endif</span>
+<a name="l00460"></a>00460 <span class="preprocessor">        hash_map_range( const map_type &amp;map, size_type grainsize = 1 ) : </span>
+<a name="l00461"></a>00461 <span class="preprocessor"></span>            my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment-&gt;node_list ) ),
+<a name="l00462"></a>00462             my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),
+<a name="l00463"></a>00463             my_grainsize( grainsize )
+<a name="l00464"></a>00464         {
+<a name="l00465"></a>00465             __TBB_ASSERT( grainsize&gt;0, <span class="stringliteral">"grainsize must be positive"</span> );
+<a name="l00466"></a>00466             set_midpoint();
+<a name="l00467"></a>00467         }
+<a name="l00468"></a>00468         <span class="keyword">const</span> Iterator&amp; begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
+<a name="l00469"></a>00469         <span class="keyword">const</span> Iterator&amp; end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
+<a name="l00471"></a>00471         size_type grainsize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
+<a name="l00472"></a>00472     };
+<a name="l00473"></a>00473 
+<a name="l00474"></a>00474     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator&gt;
+<a name="l00475"></a>00475     <span class="keywordtype">void</span> hash_map_range&lt;Iterator&gt;::set_midpoint()<span class="keyword"> const </span>{
+<a name="l00476"></a>00476         <span class="comment">// Split by groups of nodes</span>
+<a name="l00477"></a>00477         size_t m = my_end.my_index-my_begin.my_index;
+<a name="l00478"></a>00478         <span class="keywordflow">if</span>( m &gt; my_grainsize ) {
+<a name="l00479"></a>00479             m = my_begin.my_index + m/2u;
+<a name="l00480"></a>00480             hash_map_base::bucket *b = my_begin.my_map-&gt;get_bucket(m);
+<a name="l00481"></a>00481             my_midpoint = Iterator(*my_begin.my_map,m,b,b-&gt;node_list);
+<a name="l00482"></a>00482         } <span class="keywordflow">else</span> {
+<a name="l00483"></a>00483             my_midpoint = my_end;
+<a name="l00484"></a>00484         }
+<a name="l00485"></a>00485         __TBB_ASSERT( my_begin.my_index &lt;= my_midpoint.my_index,
+<a name="l00486"></a>00486             <span class="stringliteral">"my_begin is after my_midpoint"</span> );
+<a name="l00487"></a>00487         __TBB_ASSERT( my_midpoint.my_index &lt;= my_end.my_index,
+<a name="l00488"></a>00488             <span class="stringliteral">"my_midpoint is after my_end"</span> );
+<a name="l00489"></a>00489         __TBB_ASSERT( my_begin != my_midpoint || my_begin == my_end,
+<a name="l00490"></a>00490             <span class="stringliteral">"[my_begin, my_midpoint) range should not be empty"</span> );
+<a name="l00491"></a>00491     }
+<a name="l00492"></a>00492 } <span class="comment">// namespace internal</span>
+<a name="l00494"></a>00494 <span class="comment"></span>
+<a name="l00496"></a><a class="code" href="a00229.html#6902d551186a654ffbf88582d4a0bdfa">00496</a> <span class="keyword">static</span> <span class="keyword">const</span> size_t <a class="code" href="a00229.html#6902d551186a654ffbf88582d4a0bdfa">hash_multiplier</a> = <span class="keyword">sizeof</span>(size_t)==4? 2654435769U : 11400714819323198485ULL;
+<a name="l00498"></a>00498 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00499"></a><a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">00499</a> <span class="keyword">inline</span> <span class="keyword">static</span> size_t <a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a>( <span class="keyword">const</span> T&amp; t ) {
+<a name="l00500"></a>00500     <span class="keywordflow">return</span> static_cast&lt;size_t&gt;( t ) * hash_multiplier;
+<a name="l00501"></a>00501 }
+<a name="l00502"></a>00502 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> P&gt;
+<a name="l00503"></a>00503 <span class="keyword">inline</span> <span class="keyword">static</span> size_t tbb_hasher( P* ptr ) {
+<a name="l00504"></a>00504     size_t <span class="keyword">const</span> h = reinterpret_cast&lt;size_t&gt;( ptr );
+<a name="l00505"></a>00505     <span class="keywordflow">return</span> (h &gt;&gt; 3) ^ h;
+<a name="l00506"></a>00506 }
+<a name="l00507"></a>00507 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> E, <span class="keyword">typename</span> S, <span class="keyword">typename</span> A&gt;
+<a name="l00508"></a>00508 <span class="keyword">inline</span> <span class="keyword">static</span> size_t <a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a>( <span class="keyword">const</span> std::basic_string&lt;E,S,A&gt;&amp; s ) {
+<a name="l00509"></a>00509     size_t h = 0;
+<a name="l00510"></a>00510     <span class="keywordflow">for</span>( <span class="keyword">const</span> E* c = s.c_str(); *c; c++ )
+<a name="l00511"></a>00511         h = static_cast&lt;size_t&gt;(*c) ^ (h * hash_multiplier);
+<a name="l00512"></a>00512     <span class="keywordflow">return</span> h;
+<a name="l00513"></a>00513 }
+<a name="l00514"></a>00514 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F, <span class="keyword">typename</span> S&gt;
+<a name="l00515"></a>00515 <span class="keyword">inline</span> <span class="keyword">static</span> size_t <a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a>( <span class="keyword">const</span> std::pair&lt;F,S&gt;&amp; p ) {
+<a name="l00516"></a>00516     <span class="keywordflow">return</span> <a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a>(p.first) ^ <a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a>(p.second);
+<a name="l00517"></a>00517 }
+<a name="l00518"></a>00518 
+<a name="l00520"></a>00520 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00521"></a><a class="code" href="a00174.html">00521</a> <span class="keyword">struct </span><a class="code" href="a00174.html">tbb_hash_compare</a> {
+<a name="l00522"></a>00522     <span class="keyword">static</span> size_t hash( <span class="keyword">const</span> T&amp; t ) { <span class="keywordflow">return</span> <a class="code" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb_hasher</a>(t); }
+<a name="l00523"></a>00523     <span class="keyword">static</span> <span class="keywordtype">bool</span> equal( <span class="keyword">const</span> T&amp; a, <span class="keyword">const</span> T&amp; b ) { <span class="keywordflow">return</span> a == b; }
+<a name="l00524"></a>00524 };
+<a name="l00525"></a>00525 
+<a name="l00527"></a>00527 
+<a name="l00555"></a>00555 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> Allocator&gt;
+<a name="l00556"></a><a class="code" href="a00130.html">00556</a> <span class="keyword">class </span><a class="code" href="a00130.html">concurrent_hash_map</a> : <span class="keyword">protected</span> internal::hash_map_base {
+<a name="l00557"></a>00557     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value&gt;
+<a name="l00558"></a>00558     <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_iterator;
+<a name="l00559"></a>00559 
+<a name="l00560"></a>00560     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I&gt;
+<a name="l00561"></a>00561     <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_range;
+<a name="l00562"></a>00562 
+<a name="l00563"></a>00563 <span class="keyword">public</span>:
+<a name="l00564"></a>00564     <span class="keyword">typedef</span> Key key_type;
+<a name="l00565"></a>00565     <span class="keyword">typedef</span> T mapped_type;
+<a name="l00566"></a>00566     <span class="keyword">typedef</span> std::pair&lt;const Key,T&gt; value_type;
+<a name="l00567"></a>00567     <span class="keyword">typedef</span> internal::hash_map_base::size_type size_type;
+<a name="l00568"></a>00568     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00569"></a>00569     <span class="keyword">typedef</span> value_type *pointer;
+<a name="l00570"></a>00570     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
+<a name="l00571"></a>00571     <span class="keyword">typedef</span> value_type &amp;reference;
+<a name="l00572"></a>00572     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type &amp;const_reference;
+<a name="l00573"></a>00573     <span class="keyword">typedef</span> internal::hash_map_iterator&lt;concurrent_hash_map,value_type&gt; iterator;
+<a name="l00574"></a>00574     <span class="keyword">typedef</span> internal::hash_map_iterator&lt;concurrent_hash_map,const value_type&gt; const_iterator;
+<a name="l00575"></a>00575     <span class="keyword">typedef</span> internal::hash_map_range&lt;iterator&gt; range_type;
+<a name="l00576"></a>00576     <span class="keyword">typedef</span> internal::hash_map_range&lt;const_iterator&gt; const_range_type;
+<a name="l00577"></a>00577     <span class="keyword">typedef</span> Allocator allocator_type;
+<a name="l00578"></a>00578 
+<a name="l00579"></a>00579 <span class="keyword">protected</span>:
+<a name="l00580"></a>00580     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00133.html">const_accessor</a>;
+<a name="l00581"></a>00581     <span class="keyword">struct </span>node;
+<a name="l00582"></a>00582     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind&lt;node&gt;::other node_allocator_type;
+<a name="l00583"></a>00583     node_allocator_type my_allocator;
+<a name="l00584"></a>00584     HashCompare my_hash_compare;
+<a name="l00585"></a>00585 
+<a name="l00586"></a>00586     <span class="keyword">struct </span>node : <span class="keyword">public</span> node_base {
+<a name="l00587"></a>00587         value_type item;
+<a name="l00588"></a>00588         node( <span class="keyword">const</span> Key &amp;key ) : item(key, T()) {}
+<a name="l00589"></a>00589         node( <span class="keyword">const</span> Key &amp;key, <span class="keyword">const</span> T &amp;t ) : item(key, t) {}
+<a name="l00590"></a>00590         <span class="comment">// exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17</span>
+<a name="l00591"></a>00591         <span class="keywordtype">void</span> *operator new( size_t <span class="comment">/*size*/</span>, node_allocator_type &amp;a ) {
+<a name="l00592"></a>00592             <span class="keywordtype">void</span> *ptr = a.allocate(1);
+<a name="l00593"></a>00593             <span class="keywordflow">if</span>(!ptr) <span class="keywordflow">throw</span> std::bad_alloc();
+<a name="l00594"></a>00594             <span class="keywordflow">return</span> ptr;
+<a name="l00595"></a>00595         }
+<a name="l00596"></a>00596         <span class="comment">// match placement-new form above to be called if exception thrown in constructor</span>
+<a name="l00597"></a>00597         <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span> *ptr, node_allocator_type &amp;a ) {<span class="keywordflow">return</span> a.deallocate(static_cast&lt;node*&gt;(ptr),1); }
+<a name="l00598"></a>00598     };
+<a name="l00599"></a>00599 
+<a name="l00600"></a>00600     <span class="keywordtype">void</span> delete_node( node_base *n ) {
+<a name="l00601"></a>00601         my_allocator.destroy( static_cast&lt;node*&gt;(n) );
+<a name="l00602"></a>00602         my_allocator.deallocate( static_cast&lt;node*&gt;(n), 1);
+<a name="l00603"></a>00603     }
+<a name="l00604"></a>00604 
+<a name="l00605"></a>00605     node *search_bucket( <span class="keyword">const</span> key_type &amp;key, bucket *b )<span class="keyword"> const </span>{
+<a name="l00606"></a>00606         node *n = static_cast&lt;node*&gt;( b-&gt;node_list );
+<a name="l00607"></a>00607         <span class="keywordflow">while</span>( is_valid(n) &amp;&amp; !my_hash_compare.equal(key, n-&gt;item.first) )
+<a name="l00608"></a>00608             n = static_cast&lt;node*&gt;( n-&gt;next );
+<a name="l00609"></a>00609         __TBB_ASSERT(n != __TBB_rehash_req, <span class="stringliteral">"Search can be executed only for rehashed bucket"</span>);
+<a name="l00610"></a>00610         <span class="keywordflow">return</span> n;
+<a name="l00611"></a>00611     }
+<a name="l00612"></a>00612 
+<a name="l00614"></a><a class="code" href="a00132.html">00614</a>     <span class="keyword">class </span><a class="code" href="a00132.html">bucket_accessor</a> : <span class="keyword">public</span> bucket::scoped_t {
+<a name="l00615"></a>00615         <span class="keywordtype">bool</span> my_is_writer; <span class="comment">// TODO: use it from base type</span>
+<a name="l00616"></a>00616         bucket *my_b;
+<a name="l00617"></a>00617     <span class="keyword">public</span>:
+<a name="l00618"></a>00618         <a class="code" href="a00132.html">bucket_accessor</a>( <a class="code" href="a00130.html">concurrent_hash_map</a> *base, <span class="keyword">const</span> hashcode_t h, <span class="keywordtype">bool</span> writer = <span class="keyword">false</span> ) { <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( base, h, writer ); }
+<a name="l00620"></a><a class="code" href="a00132.html#7b75959ce5a971b05cfefcbc1d09a022">00620</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00130.html">concurrent_hash_map</a> *base, <span class="keyword">const</span> hashcode_t h, <span class="keywordtype">bool</span> writer = <span class="keyword">false</span> ) {
+<a name="l00621"></a>00621             my_b = base-&gt;get_bucket( h );
+<a name="l00622"></a>00622 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00623"></a>00623 <span class="preprocessor"></span>            <span class="comment">// TODO: actually, notification is unneccessary here, just hiding double-check</span>
+<a name="l00624"></a>00624             <span class="keywordflow">if</span>( itt_load_pointer_with_acquire_v3(&amp;my_b-&gt;node_list) == __TBB_rehash_req
+<a name="l00625"></a>00625 #<span class="keywordflow">else</span>
+<a name="l00626"></a>00626             <span class="keywordflow">if</span>( __TBB_load_with_acquire(my_b-&gt;node_list) == __TBB_rehash_req
+<a name="l00627"></a>00627 #endif
+<a name="l00628"></a>00628                 &amp;&amp; try_acquire( my_b-&gt;mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> ) )
+<a name="l00629"></a>00629             {
+<a name="l00630"></a>00630                 <span class="keywordflow">if</span>( my_b-&gt;node_list == __TBB_rehash_req ) base-&gt;<a class="code" href="a00130.html#f2fe44bde2158a2f2a315c6457ebd030">rehash_bucket</a>( my_b, h ); <span class="comment">//recursive rehashing</span>
+<a name="l00631"></a>00631                 my_is_writer = <span class="keyword">true</span>;
+<a name="l00632"></a>00632             }
+<a name="l00633"></a>00633             <span class="keywordflow">else</span> bucket::scoped_t::acquire( my_b-&gt;mutex, <span class="comment">/*write=*/</span>my_is_writer = writer );
+<a name="l00634"></a>00634             __TBB_ASSERT( my_b-&gt;node_list != __TBB_rehash_req, NULL);
+<a name="l00635"></a>00635         }
+<a name="l00637"></a><a class="code" href="a00132.html#adf8e405df5787351fe816c42042b9ec">00637</a>         <span class="keywordtype">bool</span> is_writer() { <span class="keywordflow">return</span> my_is_writer; }
+<a name="l00639"></a><a class="code" href="a00132.html#7e98ad1b46ed35fb4a92d65c16c6982d">00639</a>         bucket *operator() () { <span class="keywordflow">return</span> my_b; }
+<a name="l00640"></a>00640         <span class="comment">// TODO: optimize out</span>
+<a name="l00641"></a>00641         <span class="keywordtype">bool</span> upgrade_to_writer() { my_is_writer = <span class="keyword">true</span>; <span class="keywordflow">return</span> bucket::scoped_t::upgrade_to_writer(); }
+<a name="l00642"></a>00642     };
+<a name="l00643"></a>00643 
+<a name="l00644"></a>00644     <span class="comment">// TODO refactor to hash_base</span>
+<a name="l00645"></a>00645     <span class="keywordtype">void</span> rehash_bucket( bucket *b_new, <span class="keyword">const</span> hashcode_t h ) {
+<a name="l00646"></a>00646         __TBB_ASSERT( *(intptr_t*)(&amp;b_new-&gt;mutex), <span class="stringliteral">"b_new must be locked (for write)"</span>);
+<a name="l00647"></a>00647         __TBB_ASSERT( h &gt; 1, <span class="stringliteral">"The lowermost buckets can't be rehashed"</span> );
+<a name="l00648"></a>00648         __TBB_store_with_release(b_new-&gt;node_list, __TBB_empty_rehashed); <span class="comment">// mark rehashed</span>
+<a name="l00649"></a>00649         hashcode_t mask = ( 1u&lt;&lt;__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
+<a name="l00650"></a>00650 
+<a name="l00651"></a>00651         bucket_accessor b_old( <span class="keyword">this</span>, h &amp; mask );
+<a name="l00652"></a>00652 
+<a name="l00653"></a>00653         mask = (mask&lt;&lt;1) | 1; <span class="comment">// get full mask for new bucket</span>
+<a name="l00654"></a>00654         __TBB_ASSERT( (mask&amp;(mask+1))==0 &amp;&amp; (h &amp; mask) == h, NULL );
+<a name="l00655"></a>00655     restart:
+<a name="l00656"></a>00656         <span class="keywordflow">for</span>( node_base **p = &amp;b_old()-&gt;node_list, *n = __TBB_load_with_acquire(*p); is_valid(n); n = *p ) {
+<a name="l00657"></a>00657             hashcode_t c = my_hash_compare.hash( static_cast&lt;node*&gt;(n)-&gt;item.first );
+<a name="l00658"></a>00658             <span class="keywordflow">if</span>( (c &amp; mask) == h ) {
+<a name="l00659"></a>00659                 <span class="keywordflow">if</span>( !b_old.is_writer() )
+<a name="l00660"></a>00660                     <span class="keywordflow">if</span>( !b_old.upgrade_to_writer() ) {
+<a name="l00661"></a>00661                         <span class="keywordflow">goto</span> restart; <span class="comment">// node ptr can be invalid due to concurrent erase</span>
+<a name="l00662"></a>00662                     }
+<a name="l00663"></a>00663                 *p = n-&gt;next; <span class="comment">// exclude from b_old</span>
+<a name="l00664"></a>00664                 add_to_bucket( b_new, n );
+<a name="l00665"></a>00665             } <span class="keywordflow">else</span> p = &amp;n-&gt;next; <span class="comment">// iterate to next item</span>
+<a name="l00666"></a>00666         }
+<a name="l00667"></a>00667     }
+<a name="l00668"></a>00668 
+<a name="l00669"></a>00669 <span class="keyword">public</span>:
+<a name="l00670"></a>00670     
+<a name="l00671"></a>00671     <span class="keyword">class </span>accessor;
+<a name="l00673"></a><a class="code" href="a00133.html">00673</a>     <span class="keyword">class </span><a class="code" href="a00133.html">const_accessor</a> {
+<a name="l00674"></a>00674         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00130.html">concurrent_hash_map</a>&lt;Key,T,HashCompare,Allocator&gt;;
+<a name="l00675"></a>00675         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00131.html">accessor</a>;
+<a name="l00676"></a>00676         <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00131.html">accessor</a> &amp; ) <span class="keyword">const</span>; <span class="comment">// Deny access</span>
+<a name="l00677"></a>00677         <a class="code" href="a00133.html">const_accessor</a>( <span class="keyword">const</span> <a class="code" href="a00131.html">accessor</a> &amp; );       <span class="comment">// Deny access</span>
+<a name="l00678"></a>00678     <span class="keyword">public</span>:
+<a name="l00680"></a><a class="code" href="a00133.html#b5de4197079009b1cfd8bdeb594c6428">00680</a>         <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keyword">typename</span> concurrent_hash_map::value_type value_type;
+<a name="l00681"></a>00681 
+<a name="l00683"></a><a class="code" href="a00133.html#e55c7c3f0acd7fd823a07957e71a7462">00683</a>         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_node;}
+<a name="l00684"></a>00684 
+<a name="l00686"></a><a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">00686</a>         <span class="keywordtype">void</span> <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
+<a name="l00687"></a>00687             <span class="keywordflow">if</span>( my_node ) {
+<a name="l00688"></a>00688                 my_lock.release();
+<a name="l00689"></a>00689                 my_node = 0;
+<a name="l00690"></a>00690             }
+<a name="l00691"></a>00691         }
+<a name="l00692"></a>00692 
+<a name="l00694"></a><a class="code" href="a00133.html#d95b7a39a08b7ab256dfff2ca37cdb75">00694</a>         const_reference operator*()<span class="keyword"> const </span>{
+<a name="l00695"></a>00695             __TBB_ASSERT( my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
+<a name="l00696"></a>00696             <span class="keywordflow">return</span> my_node-&gt;item;
+<a name="l00697"></a>00697         }
+<a name="l00698"></a>00698 
+<a name="l00700"></a><a class="code" href="a00133.html#6fc0491f6420ffe38c48786e7b9ab042">00700</a>         const_pointer operator-&gt;()<span class="keyword"> const </span>{
+<a name="l00701"></a>00701             <span class="keywordflow">return</span> &amp;operator*();
+<a name="l00702"></a>00702         }
+<a name="l00703"></a>00703 
+<a name="l00705"></a><a class="code" href="a00133.html#6eedb35a3ca397dd289ed5ca6fb4d95d">00705</a>         <a class="code" href="a00133.html">const_accessor</a>() : my_node(NULL) {}
+<a name="l00706"></a>00706 
+<a name="l00708"></a><a class="code" href="a00133.html#e002771760f510e06c03e0a198286172">00708</a>         ~<a class="code" href="a00133.html">const_accessor</a>() {
+<a name="l00709"></a>00709             my_node = NULL; <span class="comment">// my_lock.release() is called in scoped_lock destructor</span>
+<a name="l00710"></a>00710         }
+<a name="l00711"></a>00711     <span class="keyword">private</span>:
+<a name="l00712"></a>00712         node *my_node;
+<a name="l00713"></a>00713         <span class="keyword">typename</span> node::scoped_t my_lock;
+<a name="l00714"></a>00714         hashcode_t my_hash;
+<a name="l00715"></a>00715     };
+<a name="l00716"></a>00716 
+<a name="l00718"></a><a class="code" href="a00131.html">00718</a>     <span class="keyword">class </span><a class="code" href="a00131.html">accessor</a>: <span class="keyword">public</span> <a class="code" href="a00133.html">const_accessor</a> {
+<a name="l00719"></a>00719     <span class="keyword">public</span>:
+<a name="l00721"></a><a class="code" href="a00131.html#34035ddb9e2a27f2f0a1f6a2a16730cf">00721</a>         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_hash_map::value_type value_type;
+<a name="l00722"></a>00722 
+<a name="l00724"></a><a class="code" href="a00131.html#03a091f7355a3c0c03f839893695f372">00724</a>         reference operator*()<span class="keyword"> const </span>{
+<a name="l00725"></a>00725             __TBB_ASSERT( this-&gt;my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
+<a name="l00726"></a>00726             <span class="keywordflow">return</span> this-&gt;my_node-&gt;item;
+<a name="l00727"></a>00727         }
+<a name="l00728"></a>00728 
+<a name="l00730"></a><a class="code" href="a00131.html#302f02e5deec0a67b872e9cfb08d9e60">00730</a>         pointer operator-&gt;()<span class="keyword"> const </span>{
+<a name="l00731"></a>00731             <span class="keywordflow">return</span> &amp;operator*();
+<a name="l00732"></a>00732         }
+<a name="l00733"></a>00733     };
+<a name="l00734"></a>00734 
+<a name="l00736"></a><a class="code" href="a00130.html#342582ba05d9fb893ed80875d2b7a42f">00736</a>     <a class="code" href="a00130.html">concurrent_hash_map</a>(<span class="keyword">const</span> allocator_type &amp;a = allocator_type())
+<a name="l00737"></a>00737         : my_allocator(a)
+<a name="l00738"></a>00738     {}
+<a name="l00739"></a>00739 
+<a name="l00741"></a><a class="code" href="a00130.html#bc50f7bca65d0c27cbf5c31d2fa63eac">00741</a>     <a class="code" href="a00130.html">concurrent_hash_map</a>( <span class="keyword">const</span> <a class="code" href="a00130.html">concurrent_hash_map</a>&amp; table, <span class="keyword">const</span> allocator_type &amp;a = allocator_type())
+<a name="l00742"></a>00742         : my_allocator(a)
+<a name="l00743"></a>00743     {
+<a name="l00744"></a>00744         internal_copy(table);
+<a name="l00745"></a>00745     }
+<a name="l00746"></a>00746 
+<a name="l00748"></a>00748     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I&gt;
+<a name="l00749"></a><a class="code" href="a00130.html#b5132202dff9ee3d619bef6b1d84edea">00749</a>     <a class="code" href="a00130.html">concurrent_hash_map</a>(I first, I last, <span class="keyword">const</span> allocator_type &amp;a = allocator_type())
+<a name="l00750"></a>00750         : my_allocator(a)
+<a name="l00751"></a>00751     {
+<a name="l00752"></a>00752         reserve( std::distance(first, last) ); <span class="comment">// TODO: load_factor?</span>
+<a name="l00753"></a>00753         internal_copy(first, last);
+<a name="l00754"></a>00754     }
+<a name="l00755"></a>00755 
+<a name="l00757"></a><a class="code" href="a00130.html#adadeb9d1acb8c3b34517435666cf297">00757</a>     <a class="code" href="a00130.html">concurrent_hash_map</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="a00130.html">concurrent_hash_map</a>&amp; table ) {
+<a name="l00758"></a>00758         <span class="keywordflow">if</span>( <span class="keyword">this</span>!=&amp;table ) {
+<a name="l00759"></a>00759             clear();
+<a name="l00760"></a>00760             internal_copy(table);
+<a name="l00761"></a>00761         } 
+<a name="l00762"></a>00762         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00763"></a>00763     }
+<a name="l00764"></a>00764 
+<a name="l00765"></a>00765 
+<a name="l00767"></a>00767     <span class="keywordtype">void</span> clear();
+<a name="l00768"></a>00768 
+<a name="l00770"></a><a class="code" href="a00130.html#5e96649f71f68f3b6bf3b1eee6b441a7">00770</a>     ~<a class="code" href="a00130.html">concurrent_hash_map</a>() { clear(); }
+<a name="l00771"></a>00771 
+<a name="l00772"></a>00772     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00773"></a>00773     <span class="comment">// Parallel algorithm support</span>
+<a name="l00774"></a>00774     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00775"></a>00775     range_type range( size_type grainsize=1 ) {
+<a name="l00776"></a>00776         <span class="keywordflow">return</span> range_type( *<span class="keyword">this</span>, grainsize );
+<a name="l00777"></a>00777     }
+<a name="l00778"></a>00778     const_range_type range( size_type grainsize=1 )<span class="keyword"> const </span>{
+<a name="l00779"></a>00779         <span class="keywordflow">return</span> const_range_type( *<span class="keyword">this</span>, grainsize );
+<a name="l00780"></a>00780     }
+<a name="l00781"></a>00781 
+<a name="l00782"></a>00782     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00783"></a>00783     <span class="comment">// STL support - not thread-safe methods</span>
+<a name="l00784"></a>00784     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00785"></a>00785     iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0,my_embedded_segment,my_embedded_segment-&gt;node_list);}
+<a name="l00786"></a>00786     iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0,0,0);}
+<a name="l00787"></a>00787     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0,my_embedded_segment,my_embedded_segment-&gt;node_list);}
+<a name="l00788"></a>00788     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0,0,0);}
+<a name="l00789"></a>00789     std::pair&lt;iterator, iterator&gt; equal_range( <span class="keyword">const</span> Key&amp; key ) { <span class="keywordflow">return</span> internal_equal_range(key, end()); }
+<a name="l00790"></a>00790     std::pair&lt;const_iterator, const_iterator&gt; equal_range( <span class="keyword">const</span> Key&amp; key )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> internal_equal_range(key, end()); }
+<a name="l00791"></a>00791     
+<a name="l00793"></a><a class="code" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">00793</a>     size_type size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size; }
+<a name="l00794"></a>00794 
+<a name="l00796"></a><a class="code" href="a00130.html#3e5d085375320cd3f34faeedc5bba8f6">00796</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size == 0; }
+<a name="l00797"></a>00797 
+<a name="l00799"></a><a class="code" href="a00130.html#6ed260e217fb310050928d7bd03f1b5e">00799</a>     size_type max_size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (~size_type(0))/<span class="keyword">sizeof</span>(node);}
+<a name="l00800"></a>00800 
+<a name="l00802"></a><a class="code" href="a00130.html#79d1e5c3b975dbd38b43138266fe4c0e">00802</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this-&gt;my_allocator; }
+<a name="l00803"></a>00803 
+<a name="l00805"></a>00805     <span class="keywordtype">void</span> swap(<a class="code" href="a00130.html">concurrent_hash_map</a> &amp;table);
+<a name="l00806"></a>00806 
+<a name="l00807"></a>00807     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00808"></a>00808     <span class="comment">// concurrent map operations</span>
+<a name="l00809"></a>00809     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00810"></a>00810 
+<a name="l00812"></a><a class="code" href="a00130.html#a3e97a1f3cb66e81a2336b013ef1ae7d">00812</a>     size_type count( <span class="keyword">const</span> Key &amp;key )<span class="keyword"> const </span>{
+<a name="l00813"></a>00813         <span class="keywordflow">return</span> const_cast&lt;concurrent_hash_map*&gt;(<span class="keyword">this</span>)-&gt;lookup(<span class="comment">/*insert*/</span><span class="keyword">false</span>, key, NULL, NULL, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+<a name="l00814"></a>00814     }
+<a name="l00815"></a>00815 
+<a name="l00817"></a>00817 
+<a name="l00818"></a><a class="code" href="a00130.html#9fa1ca60af4ef761a100617b27718585">00818</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00133.html">const_accessor</a> &amp;result, <span class="keyword">const</span> Key &amp;key )<span class="keyword"> const </span>{
+<a name="l00819"></a>00819         result.<a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
+<a name="l00820"></a>00820         <span class="keywordflow">return</span> const_cast&lt;concurrent_hash_map*&gt;(<span class="keyword">this</span>)-&gt;lookup(<span class="comment">/*insert*/</span><span class="keyword">false</span>, key, NULL, &amp;result, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+<a name="l00821"></a>00821     }
+<a name="l00822"></a>00822 
+<a name="l00824"></a>00824 
+<a name="l00825"></a><a class="code" href="a00130.html#4f7cc0aab2d8216c0a6e681f32dd48c8">00825</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00131.html">accessor</a> &amp;result, <span class="keyword">const</span> Key &amp;key ) {
+<a name="l00826"></a>00826         result.<a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
+<a name="l00827"></a>00827         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">false</span>, key, NULL, &amp;result, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
+<a name="l00828"></a>00828     }
+<a name="l00829"></a>00829         
+<a name="l00831"></a>00831 
+<a name="l00832"></a><a class="code" href="a00130.html#67d8c254b1666d89267c8a4a33c864f3">00832</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00133.html">const_accessor</a> &amp;result, <span class="keyword">const</span> Key &amp;key ) {
+<a name="l00833"></a>00833         result.<a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
+<a name="l00834"></a>00834         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, key, NULL, &amp;result, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+<a name="l00835"></a>00835     }
+<a name="l00836"></a>00836 
+<a name="l00838"></a>00838 
+<a name="l00839"></a><a class="code" href="a00130.html#8ea81ff7fea044f859273b354c91c185">00839</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00131.html">accessor</a> &amp;result, <span class="keyword">const</span> Key &amp;key ) {
+<a name="l00840"></a>00840         result.<a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
+<a name="l00841"></a>00841         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, key, NULL, &amp;result, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
+<a name="l00842"></a>00842     }
+<a name="l00843"></a>00843 
+<a name="l00845"></a>00845 
+<a name="l00846"></a><a class="code" href="a00130.html#68a46a26bd4308c1780d021ca7e8fc15">00846</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00133.html">const_accessor</a> &amp;result, <span class="keyword">const</span> value_type &amp;value ) {
+<a name="l00847"></a>00847         result.<a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
+<a name="l00848"></a>00848         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, value.first, &amp;value.second, &amp;result, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+<a name="l00849"></a>00849     }
+<a name="l00850"></a>00850 
+<a name="l00852"></a>00852 
+<a name="l00853"></a><a class="code" href="a00130.html#7bd4dcf6ea74a32299fd57d8d7fc7ed8">00853</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00131.html">accessor</a> &amp;result, <span class="keyword">const</span> value_type &amp;value ) {
+<a name="l00854"></a>00854         result.<a class="code" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">release</a>();
+<a name="l00855"></a>00855         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, value.first, &amp;value.second, &amp;result, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
+<a name="l00856"></a>00856     }
+<a name="l00857"></a>00857 
+<a name="l00859"></a>00859 
+<a name="l00860"></a><a class="code" href="a00130.html#3034a308bc839695a5714a107380c4b9">00860</a>     <span class="keywordtype">bool</span> insert( <span class="keyword">const</span> value_type &amp;value ) {
+<a name="l00861"></a>00861         <span class="keywordflow">return</span> lookup(<span class="comment">/*insert*/</span><span class="keyword">true</span>, value.first, &amp;value.second, NULL, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+<a name="l00862"></a>00862     }
+<a name="l00863"></a>00863 
+<a name="l00865"></a>00865     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I&gt;
+<a name="l00866"></a><a class="code" href="a00130.html#7b42dba04d71e1367f0d542087906178">00866</a>     <span class="keywordtype">void</span> insert(I first, I last) {
+<a name="l00867"></a>00867         <span class="keywordflow">for</span>(; first != last; ++first)
+<a name="l00868"></a>00868             insert( *first );
+<a name="l00869"></a>00869     }
+<a name="l00870"></a>00870 
+<a name="l00872"></a>00872 
+<a name="l00873"></a>00873     <span class="keywordtype">bool</span> erase( <span class="keyword">const</span> Key&amp; key );
+<a name="l00874"></a>00874 
+<a name="l00876"></a>00876 
+<a name="l00877"></a><a class="code" href="a00130.html#fc64086f9f518cef8c368c9429d0064e">00877</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00133.html">const_accessor</a>&amp; item_accessor ) {
+<a name="l00878"></a>00878         <span class="keywordflow">return</span> exclude( item_accessor, <span class="comment">/*readonly=*/</span> <span class="keyword">true</span> );
+<a name="l00879"></a>00879     }
+<a name="l00880"></a>00880 
+<a name="l00882"></a>00882 
+<a name="l00883"></a><a class="code" href="a00130.html#b65abfa291da566617dd58dfb349630a">00883</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00131.html">accessor</a>&amp; item_accessor ) {
+<a name="l00884"></a>00884         <span class="keywordflow">return</span> exclude( item_accessor, <span class="comment">/*readonly=*/</span> <span class="keyword">false</span> );
+<a name="l00885"></a>00885     }
+<a name="l00886"></a>00886 
+<a name="l00887"></a>00887 <span class="keyword">protected</span>:
+<a name="l00889"></a>00889     <span class="keywordtype">bool</span> lookup( <span class="keywordtype">bool</span> op_insert, <span class="keyword">const</span> Key &amp;key, <span class="keyword">const</span> T *t, const_accessor *result, <span class="keywordtype">bool</span> write );
+<a name="l00890"></a>00890 
+<a name="l00892"></a>00892     <span class="keywordtype">bool</span> exclude( const_accessor &amp;item_accessor, <span class="keywordtype">bool</span> readonly );
+<a name="l00893"></a>00893 
+<a name="l00895"></a>00895     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I&gt;
+<a name="l00896"></a>00896     std::pair&lt;I, I&gt; internal_equal_range( <span class="keyword">const</span> Key&amp; key, I end ) <span class="keyword">const</span>;
+<a name="l00897"></a>00897 
+<a name="l00899"></a>00899     <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> <a class="code" href="a00130.html">concurrent_hash_map</a>&amp; source );
+<a name="l00900"></a>00900 
+<a name="l00901"></a>00901     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I&gt;
+<a name="l00902"></a>00902     <span class="keywordtype">void</span> internal_copy(I first, I last);
+<a name="l00903"></a>00903 
+<a name="l00905"></a><a class="code" href="a00130.html#2f1ca7e8319c464349a9de304b6dbf4a">00905</a>     const_pointer find( <span class="keyword">const</span> Key&amp; key )<span class="keyword"> const </span>{
+<a name="l00906"></a>00906         hashcode_t h = my_hash_compare.hash( key );
+<a name="l00907"></a>00907         hashcode_t m = my_mask;
+<a name="l00908"></a>00908     restart:
+<a name="l00909"></a>00909         __TBB_ASSERT((m&amp;(m+1))==0, NULL);
+<a name="l00910"></a>00910         bucket *b = get_bucket( h &amp; m );
+<a name="l00911"></a>00911         <span class="keywordflow">if</span>( b-&gt;node_list == __TBB_rehash_req ) {
+<a name="l00912"></a>00912             bucket::scoped_t lock;
+<a name="l00913"></a>00913             <span class="keywordflow">if</span>( lock.try_acquire( b-&gt;mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> ) &amp;&amp; b-&gt;node_list == __TBB_rehash_req )
+<a name="l00914"></a>00914                 const_cast&lt;concurrent_hash_map*&gt;(<span class="keyword">this</span>)-&gt;rehash_bucket( b, h &amp; m ); <span class="comment">//recursive rehashing</span>
+<a name="l00915"></a>00915             <span class="keywordflow">else</span> internal::spin_wait_while_eq( b-&gt;node_list, __TBB_rehash_req ); <span class="comment">//TODO: rework for fast find?</span>
+<a name="l00916"></a>00916         }
+<a name="l00917"></a>00917         node *n = search_bucket( key, b );
+<a name="l00918"></a>00918         <span class="keywordflow">if</span>( check_mask_race( h, m ) )
+<a name="l00919"></a>00919             <span class="keywordflow">goto</span> restart;
+<a name="l00920"></a>00920         <span class="keywordflow">if</span>( n )
+<a name="l00921"></a>00921             <span class="keywordflow">return</span> &amp;n-&gt;item;
+<a name="l00922"></a>00922         <span class="keywordflow">return</span> 0;
+<a name="l00923"></a>00923     }
+<a name="l00924"></a>00924 };
+<a name="l00925"></a>00925 
+<a name="l00926"></a>00926 <span class="preprocessor">#if _MSC_VER &amp;&amp; !defined(__INTEL_COMPILER)</span>
+<a name="l00927"></a>00927 <span class="preprocessor"></span>    <span class="comment">// Suppress "conditional expression is constant" warning.</span>
+<a name="l00928"></a>00928 <span class="preprocessor">    #pragma warning( push )</span>
+<a name="l00929"></a>00929 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( disable: 4127 )</span>
+<a name="l00930"></a>00930 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00931"></a>00931 <span class="preprocessor"></span>
+<a name="l00932"></a>00932 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A&gt;
+<a name="l00933"></a><a class="code" href="a00130.html#0f0ba43d9cb783f12dd01bf5677da097">00933</a> <span class="keywordtype">bool</span> <a class="code" href="a00130.html">concurrent_hash_map&lt;Key,T,HashCompare,A&gt;::lookup</a>( <span class="keywordtype">bool</span> op_insert, <span class="keyword">const</span> Key &amp;key, <span class="keyword">const</span> T *t, <a class="code" href="a00133.html">const_accessor</a> *result, <span class="keywordtype">bool</span> write ) {
+<a name="l00934"></a>00934     __TBB_ASSERT( !result || !result-&gt;<a class="code" href="a00133.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a>, NULL );
+<a name="l00935"></a>00935     segment_index_t grow_segment;
+<a name="l00936"></a>00936     <span class="keywordtype">bool</span> return_value;
+<a name="l00937"></a>00937     node *n, *tmp_n = 0;
+<a name="l00938"></a>00938     hashcode_t <span class="keyword">const</span> h = my_hash_compare.hash( key );
+<a name="l00939"></a>00939 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00940"></a>00940 <span class="preprocessor"></span>    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &amp;my_mask );
+<a name="l00941"></a>00941 <span class="preprocessor">#else</span>
+<a name="l00942"></a>00942 <span class="preprocessor"></span>    hashcode_t m = my_mask;
+<a name="l00943"></a>00943 <span class="preprocessor">#endif</span>
+<a name="l00944"></a>00944 <span class="preprocessor"></span>    restart:
+<a name="l00945"></a>00945     {<span class="comment">//lock scope</span>
+<a name="l00946"></a>00946         __TBB_ASSERT((m&amp;(m+1))==0, NULL);
+<a name="l00947"></a>00947         return_value = <span class="keyword">false</span>;
+<a name="l00948"></a>00948         <span class="comment">// get bucket</span>
+<a name="l00949"></a>00949         <a class="code" href="a00132.html">bucket_accessor</a> b( <span class="keyword">this</span>, h &amp; m );
+<a name="l00950"></a>00950 
+<a name="l00951"></a>00951         <span class="comment">// find a node</span>
+<a name="l00952"></a>00952         n = search_bucket( key, b() );
+<a name="l00953"></a>00953         <span class="keywordflow">if</span>( op_insert ) {
+<a name="l00954"></a>00954             <span class="comment">// [opt] insert a key</span>
+<a name="l00955"></a>00955             <span class="keywordflow">if</span>( !is_valid(n) ) {
+<a name="l00956"></a>00956                 <span class="keywordflow">if</span>( !tmp_n ) {
+<a name="l00957"></a>00957                     <span class="keywordflow">if</span>(t) tmp_n = <span class="keyword">new</span>( my_allocator ) node(key, *t);
+<a name="l00958"></a>00958                     <span class="keywordflow">else</span>  tmp_n = <span class="keyword">new</span>( my_allocator ) node(key);
+<a name="l00959"></a>00959                 }
+<a name="l00960"></a>00960                 <span class="keywordflow">if</span>( !b.<a class="code" href="a00132.html#adf8e405df5787351fe816c42042b9ec">is_writer</a>() &amp;&amp; !b.<a class="code" href="a00132.html#32b2b1c83ca85859bc5276022821152d">upgrade_to_writer</a>() ) { <span class="comment">// TODO: improved insertion</span>
+<a name="l00961"></a>00961                     <span class="comment">// Rerun search_list, in case another thread inserted the item during the upgrade.</span>
+<a name="l00962"></a>00962                     n = search_bucket( key, b() );
+<a name="l00963"></a>00963                     <span class="keywordflow">if</span>( is_valid(n) ) { <span class="comment">// unfortunately, it did</span>
+<a name="l00964"></a>00964                         b.downgrade_to_reader();
+<a name="l00965"></a>00965                         <span class="keywordflow">goto</span> exists;
+<a name="l00966"></a>00966                     }
+<a name="l00967"></a>00967                 }
+<a name="l00968"></a>00968                 <span class="keywordflow">if</span>( check_mask_race(h, m) )
+<a name="l00969"></a>00969                     <span class="keywordflow">goto</span> restart; <span class="comment">// b.release() is done in ~b().</span>
+<a name="l00970"></a>00970                 <span class="comment">// insert and set flag to grow the container</span>
+<a name="l00971"></a>00971                 grow_segment = insert_new_node( b(), n = tmp_n, m );
+<a name="l00972"></a>00972                 tmp_n = 0;
+<a name="l00973"></a>00973                 return_value = <span class="keyword">true</span>;
+<a name="l00974"></a>00974             } <span class="keywordflow">else</span> {
+<a name="l00975"></a>00975     exists:     grow_segment = 0;
+<a name="l00976"></a>00976             }
+<a name="l00977"></a>00977         } <span class="keywordflow">else</span> { <span class="comment">// find or count</span>
+<a name="l00978"></a>00978             <span class="keywordflow">if</span>( !n ) {
+<a name="l00979"></a>00979                 <span class="keywordflow">if</span>( check_mask_race( h, m ) )
+<a name="l00980"></a>00980                     <span class="keywordflow">goto</span> restart; <span class="comment">// b.release() is done in ~b(). TODO: replace by continue</span>
+<a name="l00981"></a>00981                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00982"></a>00982             }
+<a name="l00983"></a>00983             return_value = <span class="keyword">true</span>;
+<a name="l00984"></a>00984             grow_segment = 0;
+<a name="l00985"></a>00985         }
+<a name="l00986"></a>00986         <span class="keywordflow">if</span>( !result ) <span class="keywordflow">goto</span> check_growth;
+<a name="l00987"></a>00987         <span class="comment">// TODO: the following seems as generic/regular operation</span>
+<a name="l00988"></a>00988         <span class="comment">// acquire the item</span>
+<a name="l00989"></a>00989         <span class="keywordflow">if</span>( !result-&gt;<a class="code" href="a00133.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.try_acquire( n-&gt;mutex, write ) ) {
+<a name="l00990"></a>00990             <span class="comment">// we are unlucky, prepare for longer wait</span>
+<a name="l00991"></a>00991             <a class="code" href="a00119.html">internal::atomic_backoff</a> trials;
+<a name="l00992"></a>00992             <span class="keywordflow">do</span> {
+<a name="l00993"></a>00993                 <span class="keywordflow">if</span>( !trials.bounded_pause() ) {
+<a name="l00994"></a>00994                     <span class="comment">// the wait takes really long, restart the operation</span>
+<a name="l00995"></a>00995                     b.release();
+<a name="l00996"></a>00996                     __TBB_Yield();
+<a name="l00997"></a>00997                     m = my_mask;
+<a name="l00998"></a>00998                     <span class="keywordflow">goto</span> restart;
+<a name="l00999"></a>00999                 }
+<a name="l01000"></a>01000             } <span class="keywordflow">while</span>( !result-&gt;<a class="code" href="a00133.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.try_acquire( n-&gt;mutex, write ) );
+<a name="l01001"></a>01001         }
+<a name="l01002"></a>01002     }<span class="comment">//lock scope</span>
+<a name="l01003"></a>01003     result-&gt;<a class="code" href="a00133.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a> = n;
+<a name="l01004"></a>01004     result-&gt;<a class="code" href="a00133.html#4ba27b783fcaaab0bab90e60b8c8a614">my_hash</a> = h;
+<a name="l01005"></a>01005 check_growth:
+<a name="l01006"></a>01006     <span class="comment">// [opt] grow the container</span>
+<a name="l01007"></a>01007     <span class="keywordflow">if</span>( grow_segment )
+<a name="l01008"></a>01008         enable_segment( grow_segment );
+<a name="l01009"></a>01009     <span class="keywordflow">if</span>( tmp_n ) <span class="comment">// if op_insert only</span>
+<a name="l01010"></a>01010         delete_node( tmp_n );
+<a name="l01011"></a>01011     <span class="keywordflow">return</span> return_value;
+<a name="l01012"></a>01012 }
+<a name="l01013"></a>01013 
+<a name="l01014"></a>01014 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A&gt;
+<a name="l01015"></a>01015 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I&gt;
+<a name="l01016"></a><a class="code" href="a00130.html#308ec5ad19fdd1be4d345f8013070150">01016</a> std::pair&lt;I, I&gt; <a class="code" href="a00130.html">concurrent_hash_map&lt;Key,T,HashCompare,A&gt;::internal_equal_range</a>( <span class="keyword">const</span> Key&amp; key, I end )<span class="keyword"> const </span>{
+<a name="l01017"></a>01017     hashcode_t h = my_hash_compare.hash( key );
+<a name="l01018"></a>01018     hashcode_t m = my_mask;
+<a name="l01019"></a>01019     __TBB_ASSERT((m&amp;(m+1))==0, NULL);
+<a name="l01020"></a>01020     h &amp;= m;
+<a name="l01021"></a>01021     bucket *b = get_bucket( h );
+<a name="l01022"></a>01022     <span class="keywordflow">while</span>( b-&gt;node_list == __TBB_rehash_req ) {
+<a name="l01023"></a>01023         m = ( 1u&lt;&lt;__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
+<a name="l01024"></a>01024         b = get_bucket( h &amp;= m );
+<a name="l01025"></a>01025     }
+<a name="l01026"></a>01026     node *n = search_bucket( key, b );
+<a name="l01027"></a>01027     <span class="keywordflow">if</span>( !n )
+<a name="l01028"></a>01028         <span class="keywordflow">return</span> std::make_pair(end, end);
+<a name="l01029"></a>01029     iterator lower(*<span class="keyword">this</span>, h, b, n), upper(lower);
+<a name="l01030"></a>01030     <span class="keywordflow">return</span> std::make_pair(lower, ++upper);
+<a name="l01031"></a>01031 }
+<a name="l01032"></a>01032 
+<a name="l01033"></a>01033 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A&gt;
+<a name="l01034"></a><a class="code" href="a00130.html#671965989ffb5f6084c776cb0bb6cdab">01034</a> <span class="keywordtype">bool</span> <a class="code" href="a00130.html">concurrent_hash_map&lt;Key,T,HashCompare,A&gt;::exclude</a>( <a class="code" href="a00133.html">const_accessor</a> &amp;item_accessor, <span class="keywordtype">bool</span> readonly ) {
+<a name="l01035"></a>01035     __TBB_ASSERT( item_accessor.<a class="code" href="a00133.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a>, NULL );
+<a name="l01036"></a>01036     node_base *<span class="keyword">const</span> n = item_accessor.<a class="code" href="a00133.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a>;
+<a name="l01037"></a>01037     item_accessor.<a class="code" href="a00133.html#91d596be4465efc2ac2ffd0450b47ca2">my_node</a> = NULL; <span class="comment">// we ought release accessor anyway</span>
+<a name="l01038"></a>01038     hashcode_t <span class="keyword">const</span> h = item_accessor.<a class="code" href="a00133.html#4ba27b783fcaaab0bab90e60b8c8a614">my_hash</a>;
+<a name="l01039"></a>01039     hashcode_t m = my_mask;
+<a name="l01040"></a>01040     <span class="keywordflow">do</span> {
+<a name="l01041"></a>01041         <span class="comment">// get bucket</span>
+<a name="l01042"></a>01042         <a class="code" href="a00132.html">bucket_accessor</a> b( <span class="keyword">this</span>, h &amp; m, <span class="comment">/*writer=*/</span><span class="keyword">true</span> );
+<a name="l01043"></a>01043         node_base **p = &amp;b()-&gt;node_list;
+<a name="l01044"></a>01044         <span class="keywordflow">while</span>( *p &amp;&amp; *p != n )
+<a name="l01045"></a>01045             p = &amp;(*p)-&gt;next;
+<a name="l01046"></a>01046         <span class="keywordflow">if</span>( !*p ) { <span class="comment">// someone else was the first</span>
+<a name="l01047"></a>01047             <span class="keywordflow">if</span>( check_mask_race( h, m ) )
+<a name="l01048"></a>01048                 <span class="keywordflow">continue</span>;
+<a name="l01049"></a>01049             item_accessor.<a class="code" href="a00133.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.release();
+<a name="l01050"></a>01050             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01051"></a>01051         }
+<a name="l01052"></a>01052         __TBB_ASSERT( *p == n, NULL );
+<a name="l01053"></a>01053         *p = n-&gt;next; <span class="comment">// remove from container</span>
+<a name="l01054"></a>01054         my_size--;
+<a name="l01055"></a>01055         <span class="keywordflow">break</span>;
+<a name="l01056"></a>01056     } <span class="keywordflow">while</span>(<span class="keyword">true</span>);
+<a name="l01057"></a>01057     <span class="keywordflow">if</span>( readonly ) <span class="comment">// need to get exclusive lock</span>
+<a name="l01058"></a>01058         item_accessor.<a class="code" href="a00133.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.upgrade_to_writer(); <span class="comment">// return value means nothing here</span>
+<a name="l01059"></a>01059     item_accessor.<a class="code" href="a00133.html#cd19753c8520dd7641f5fc132141fde2">my_lock</a>.release();
+<a name="l01060"></a>01060     delete_node( n ); <span class="comment">// Only one thread can delete it due to write lock on the chain_mutex</span>
+<a name="l01061"></a>01061     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01062"></a>01062 }
+<a name="l01063"></a>01063 
+<a name="l01064"></a>01064 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A&gt;
+<a name="l01065"></a><a class="code" href="a00130.html#58df7a1e4373c55eb4c2fa9dc69516b1">01065</a> <span class="keywordtype">bool</span> <a class="code" href="a00130.html">concurrent_hash_map&lt;Key,T,HashCompare,A&gt;::erase</a>( <span class="keyword">const</span> Key &amp;key ) {
+<a name="l01066"></a>01066     node_base *n;
+<a name="l01067"></a>01067     hashcode_t <span class="keyword">const</span> h = my_hash_compare.hash( key );
+<a name="l01068"></a>01068     hashcode_t m = my_mask;
+<a name="l01069"></a>01069     {<span class="comment">//lock scope</span>
+<a name="l01070"></a>01070     restart:
+<a name="l01071"></a>01071         <span class="comment">// get bucket</span>
+<a name="l01072"></a>01072         <a class="code" href="a00132.html">bucket_accessor</a> b( <span class="keyword">this</span>, h &amp; m );
+<a name="l01073"></a>01073     search:
+<a name="l01074"></a>01074         node_base **p = &amp;b()-&gt;node_list;
+<a name="l01075"></a>01075         n = *p;
+<a name="l01076"></a>01076         <span class="keywordflow">while</span>( is_valid(n) &amp;&amp; !my_hash_compare.equal(key, static_cast&lt;node*&gt;(n)-&gt;item.first ) ) {
+<a name="l01077"></a>01077             p = &amp;n-&gt;next;
+<a name="l01078"></a>01078             n = *p;
+<a name="l01079"></a>01079         }
+<a name="l01080"></a>01080         <span class="keywordflow">if</span>( !n ) { <span class="comment">// not found, but mask could be changed</span>
+<a name="l01081"></a>01081             <span class="keywordflow">if</span>( check_mask_race( h, m ) )
+<a name="l01082"></a>01082                 <span class="keywordflow">goto</span> restart;
+<a name="l01083"></a>01083             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01084"></a>01084         }
+<a name="l01085"></a>01085         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( !b.<a class="code" href="a00132.html#adf8e405df5787351fe816c42042b9ec">is_writer</a>() &amp;&amp; !b.<a class="code" href="a00132.html#32b2b1c83ca85859bc5276022821152d">upgrade_to_writer</a>() ) {
+<a name="l01086"></a>01086             <span class="keywordflow">if</span>( check_mask_race( h, m ) ) <span class="comment">// contended upgrade, check mask</span>
+<a name="l01087"></a>01087                 <span class="keywordflow">goto</span> restart;
+<a name="l01088"></a>01088             <span class="keywordflow">goto</span> search;
+<a name="l01089"></a>01089         }
+<a name="l01090"></a>01090         *p = n-&gt;next;
+<a name="l01091"></a>01091         my_size--;
+<a name="l01092"></a>01092     }
+<a name="l01093"></a>01093     {
+<a name="l01094"></a>01094         <span class="keyword">typename</span> node::scoped_t item_locker( n-&gt;mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
+<a name="l01095"></a>01095     }
+<a name="l01096"></a>01096     <span class="comment">// note: there should be no threads pretending to acquire this mutex again, do not try to upgrade const_accessor!</span>
+<a name="l01097"></a>01097     delete_node( n ); <span class="comment">// Only one thread can delete it due to write lock on the bucket</span>
+<a name="l01098"></a>01098     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01099"></a>01099 }
+<a name="l01100"></a>01100 
+<a name="l01101"></a>01101 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A&gt;
+<a name="l01102"></a>01102 <span class="keywordtype">void</span> <a class="code" href="a00130.html">concurrent_hash_map&lt;Key,T,HashCompare,A&gt;::swap</a>(<a class="code" href="a00130.html">concurrent_hash_map&lt;Key,T,HashCompare,A&gt;</a> &amp;table) {
+<a name="l01103"></a>01103     std::swap(this-&gt;my_allocator, table.<a class="code" href="a00130.html#964dbe9bfcb2ac0157f8b77f252f951b">my_allocator</a>);
+<a name="l01104"></a>01104     std::swap(this-&gt;my_hash_compare, table.<a class="code" href="a00130.html#1d13c1f34b3826f9235b82ea90818169">my_hash_compare</a>);
+<a name="l01105"></a>01105     internal_swap(table);
+<a name="l01106"></a>01106 }
+<a name="l01107"></a>01107 
+<a name="l01108"></a>01108 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A&gt;
+<a name="l01109"></a><a class="code" href="a00130.html#36bcd50fd5383f3682032323b2d74333">01109</a> <span class="keywordtype">void</span> <a class="code" href="a00130.html">concurrent_hash_map&lt;Key,T,HashCompare,A&gt;::clear</a>() {
+<a name="l01110"></a>01110     hashcode_t m = my_mask;
+<a name="l01111"></a>01111     __TBB_ASSERT((m&amp;(m+1))==0, NULL);
+<a name="l01112"></a>01112 <span class="preprocessor">#if TBB_USE_DEBUG || TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01113"></a>01113 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01114"></a>01114 <span class="preprocessor"></span>    <span class="keywordtype">int</span> <a class="code" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">size</a> = int(my_size), buckets = int(m)+1, empty_buckets = 0, overpopulated_buckets = 0; <span class="comment">// usage statistics</span>
+<a name="l01115"></a>01115     <span class="keyword">static</span> <span class="keywordtype">bool</span> reported = <span class="keyword">false</span>;
+<a name="l01116"></a>01116 <span class="preprocessor">#endif</span>
+<a name="l01117"></a>01117 <span class="preprocessor"></span>    <span class="comment">// check consistency</span>
+<a name="l01118"></a>01118     <span class="keywordflow">for</span>( segment_index_t b = 0; b &lt;= m; b++ ) {
+<a name="l01119"></a>01119         node_base *n = get_bucket(b)-&gt;node_list;
+<a name="l01120"></a>01120 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01121"></a>01121 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( n == __TBB_empty_rehashed ) empty_buckets++;
+<a name="l01122"></a>01122         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n == __TBB_rehash_req ) buckets--;
+<a name="l01123"></a>01123         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n-&gt;next ) overpopulated_buckets++;
+<a name="l01124"></a>01124 #endif
+<a name="l01125"></a>01125         <span class="keywordflow">for</span>(; is_valid(n); n = n-&gt;next ) {
+<a name="l01126"></a>01126             hashcode_t h = my_hash_compare.hash( static_cast&lt;node*&gt;(n)-&gt;item.first );
+<a name="l01127"></a>01127             h &amp;= m;
+<a name="l01128"></a>01128             __TBB_ASSERT( h == b || get_bucket(h)-&gt;node_list == __TBB_rehash_req, <span class="stringliteral">"Rehashing is not finished until serial stage due to concurrent or terminated operation"</span> );
+<a name="l01129"></a>01129         }
+<a name="l01130"></a>01130     }
+<a name="l01131"></a>01131 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01132"></a>01132 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( buckets &gt; size) empty_buckets -= buckets - size;
+<a name="l01133"></a>01133     <span class="keywordflow">else</span> overpopulated_buckets -= size - buckets; <span class="comment">// TODO: load_factor?</span>
+<a name="l01134"></a>01134     <span class="keywordflow">if</span>( !reported &amp;&amp; buckets &gt;= 512 &amp;&amp; ( 2*empty_buckets &gt;= size || 2*overpopulated_buckets &gt; size ) ) {
+<a name="l01135"></a>01135         internal::runtime_warning(
+<a name="l01136"></a>01136             <span class="stringliteral">"Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\nSize: %d  Empties: %d  Overlaps: %d"</span>,
+<a name="l01137"></a>01137             <span class="keyword">typeid</span>(*this).name(), size, empty_buckets, overpopulated_buckets );
+<a name="l01138"></a>01138         reported = <span class="keyword">true</span>;
+<a name="l01139"></a>01139     }
+<a name="l01140"></a>01140 <span class="preprocessor">#endif</span>
+<a name="l01141"></a>01141 <span class="preprocessor"></span><span class="preprocessor">#endif//TBB_USE_DEBUG || TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01142"></a>01142 <span class="preprocessor"></span>    my_size = 0;
+<a name="l01143"></a>01143     segment_index_t s = segment_index_of( m );
+<a name="l01144"></a>01144     __TBB_ASSERT( s+1 == pointers_per_table || !my_table[s+1], <span class="stringliteral">"wrong mask or concurrent grow"</span> );
+<a name="l01145"></a>01145     <a class="code" href="a00125.html">cache_aligned_allocator&lt;bucket&gt;</a> alloc;
+<a name="l01146"></a>01146     <span class="keywordflow">do</span> {
+<a name="l01147"></a>01147         __TBB_ASSERT( is_valid( my_table[s] ), <span class="stringliteral">"wrong mask or concurrent grow"</span> );
+<a name="l01148"></a>01148         segment_ptr_t buckets = my_table[s];
+<a name="l01149"></a>01149         size_type sz = segment_size( s ? s : 1 );
+<a name="l01150"></a>01150         <span class="keywordflow">for</span>( segment_index_t i = 0; i &lt; sz; i++ )
+<a name="l01151"></a>01151             <span class="keywordflow">for</span>( node_base *n = buckets[i].node_list; is_valid(n); n = buckets[i].node_list ) {
+<a name="l01152"></a>01152                 buckets[i].node_list = n-&gt;next;
+<a name="l01153"></a>01153                 delete_node( n );
+<a name="l01154"></a>01154             }
+<a name="l01155"></a>01155         <span class="keywordflow">if</span>( s &gt;= first_block) <span class="comment">// the first segment or the next</span>
+<a name="l01156"></a>01156             alloc.<a class="code" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets, sz );
+<a name="l01157"></a>01157         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( s == embedded_block &amp;&amp; embedded_block != first_block )
+<a name="l01158"></a>01158             alloc.<a class="code" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets, segment_size(first_block)-embedded_buckets );
+<a name="l01159"></a>01159         <span class="keywordflow">if</span>( s &gt;= embedded_block ) my_table[s] = 0;
+<a name="l01160"></a>01160     } <span class="keywordflow">while</span>(s-- &gt; 0);
+<a name="l01161"></a>01161     my_mask = embedded_buckets - 1;
+<a name="l01162"></a>01162 }
+<a name="l01163"></a>01163 
+<a name="l01164"></a>01164 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A&gt;
+<a name="l01165"></a><a class="code" href="a00130.html#7973cd92f57dcb092ab757f8d9e089f9">01165</a> <span class="keywordtype">void</span> <a class="code" href="a00130.html">concurrent_hash_map&lt;Key,T,HashCompare,A&gt;::internal_copy</a>( <span class="keyword">const</span> <a class="code" href="a00130.html">concurrent_hash_map</a>&amp; source ) {
+<a name="l01166"></a>01166     reserve( source.my_size ); <span class="comment">// TODO: load_factor?</span>
+<a name="l01167"></a>01167     <span class="keywordflow">if</span>( my_mask == source.my_mask ) { <span class="comment">// optimized version</span>
+<a name="l01168"></a>01168         <span class="keywordflow">for</span>( const_iterator it = source.<a class="code" href="a00130.html#dfb7ab010b46fc194673256479c2ea48">begin</a>(), end = source.<a class="code" href="a00130.html#7e2dd7c8b3d37a93ba551e4de33bb73d">end</a>(); it != end; ++it ) {
+<a name="l01169"></a>01169             bucket *b = get_bucket( it.my_index );
+<a name="l01170"></a>01170             __TBB_ASSERT( b-&gt;node_list != __TBB_rehash_req, <span class="stringliteral">"Invalid bucket in destination table"</span>);
+<a name="l01171"></a>01171             node *n = <span class="keyword">new</span>( my_allocator ) node(it-&gt;first, it-&gt;second);
+<a name="l01172"></a>01172             add_to_bucket( b, n );
+<a name="l01173"></a>01173             ++my_size; <span class="comment">// TODO: replace by non-atomic op</span>
+<a name="l01174"></a>01174         }
+<a name="l01175"></a>01175     } <span class="keywordflow">else</span> <a class="code" href="a00130.html#7973cd92f57dcb092ab757f8d9e089f9">internal_copy</a>( source.<a class="code" href="a00130.html#dfb7ab010b46fc194673256479c2ea48">begin</a>(), source.<a class="code" href="a00130.html#7e2dd7c8b3d37a93ba551e4de33bb73d">end</a>() );
+<a name="l01176"></a>01176 }
+<a name="l01177"></a>01177 
+<a name="l01178"></a>01178 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A&gt;
+<a name="l01179"></a>01179 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I&gt;
+<a name="l01180"></a>01180 <span class="keywordtype">void</span> <a class="code" href="a00130.html">concurrent_hash_map&lt;Key,T,HashCompare,A&gt;::internal_copy</a>(I first, I last) {
+<a name="l01181"></a>01181     hashcode_t m = my_mask;
+<a name="l01182"></a>01182     <span class="keywordflow">for</span>(; first != last; ++first) {
+<a name="l01183"></a>01183         hashcode_t h = my_hash_compare.hash( first-&gt;first );
+<a name="l01184"></a>01184         bucket *b = get_bucket( h &amp; m );
+<a name="l01185"></a>01185         __TBB_ASSERT( b-&gt;node_list != __TBB_rehash_req, <span class="stringliteral">"Invalid bucket in destination table"</span>);
+<a name="l01186"></a>01186         node *n = <span class="keyword">new</span>( my_allocator ) node(first-&gt;first, first-&gt;second);
+<a name="l01187"></a>01187         add_to_bucket( b, n );
+<a name="l01188"></a>01188         ++my_size; <span class="comment">// TODO: replace by non-atomic op</span>
+<a name="l01189"></a>01189     }
+<a name="l01190"></a>01190 }
+<a name="l01191"></a>01191 
+<a name="l01192"></a>01192 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2&gt;
+<a name="l01193"></a>01193 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> concurrent_hash_map&lt;Key, T, HashCompare, A1&gt; &amp;a, <span class="keyword">const</span> concurrent_hash_map&lt;Key, T, HashCompare, A2&gt; &amp;b) {
+<a name="l01194"></a>01194     <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01195"></a>01195     <span class="keyword">typename</span> concurrent_hash_map&lt;Key, T, HashCompare, A1&gt;::const_iterator i(a.begin()), i_end(a.end());
+<a name="l01196"></a>01196     <span class="keyword">typename</span> concurrent_hash_map&lt;Key, T, HashCompare, A2&gt;::const_iterator j, j_end(b.end());
+<a name="l01197"></a>01197     <span class="keywordflow">for</span>(; i != i_end; ++i) {
+<a name="l01198"></a>01198         j = b.equal_range(i-&gt;first).first;
+<a name="l01199"></a>01199         <span class="keywordflow">if</span>( j == j_end || !(i-&gt;second == j-&gt;second) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01200"></a>01200     }
+<a name="l01201"></a>01201     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01202"></a>01202 }
+<a name="l01203"></a>01203 
+<a name="l01204"></a>01204 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2&gt;
+<a name="l01205"></a>01205 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> concurrent_hash_map&lt;Key, T, HashCompare, A1&gt; &amp;a, <span class="keyword">const</span> concurrent_hash_map&lt;Key, T, HashCompare, A2&gt; &amp;b)
+<a name="l01206"></a>01206 {    <span class="keywordflow">return</span> !(a == b); }
+<a name="l01207"></a>01207 
+<a name="l01208"></a>01208 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A&gt;
+<a name="l01209"></a>01209 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(concurrent_hash_map&lt;Key, T, HashCompare, A&gt; &amp;a, concurrent_hash_map&lt;Key, T, HashCompare, A&gt; &amp;b)
+<a name="l01210"></a>01210 {    a.swap( b ); }
+<a name="l01211"></a>01211 
+<a name="l01212"></a>01212 <span class="preprocessor">#if _MSC_VER &amp;&amp; !defined(__INTEL_COMPILER)</span>
+<a name="l01213"></a>01213 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( pop )</span>
+<a name="l01214"></a>01214 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4127 is back</span>
+<a name="l01215"></a>01215 <span class="preprocessor"></span>
+<a name="l01216"></a>01216 } <span class="comment">// namespace tbb</span>
+<a name="l01217"></a>01217 
+<a name="l01218"></a>01218 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_hash_map_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00281.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00281.html
new file mode 100644 (file)
index 0000000..2d08848
--- /dev/null
@@ -0,0 +1,361 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>concurrent_queue.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>concurrent_queue.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_queue_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_queue_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "_concurrent_queue_internal.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>strict_ppl {
+<a name="l00029"></a>00029 
+<a name="l00031"></a>00031 
+<a name="l00034"></a>00034 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> A = cache_aligned_allocator&lt;T&gt; &gt; 
+<a name="l00035"></a><a class="code" href="a00134.html">00035</a> <span class="keyword">class </span><a class="code" href="a00134.html">concurrent_queue</a>: <span class="keyword">public</span> internal::concurrent_queue_base_v3&lt;T&gt; {
+<a name="l00036"></a>00036     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::concurrent_queue_iterator;
+<a name="l00037"></a>00037 
+<a name="l00039"></a>00039     <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template rebind&lt;char&gt;::other page_allocator_type;
+<a name="l00040"></a>00040     page_allocator_type my_allocator;
+<a name="l00041"></a>00041 
+<a name="l00043"></a>00043     <span class="comment">/*overide*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *allocate_block( size_t n ) {
+<a name="l00044"></a>00044         <span class="keywordtype">void</span> *b = reinterpret_cast&lt;void*&gt;(my_allocator.allocate( n ));
+<a name="l00045"></a>00045         <span class="keywordflow">if</span>( !b ) this-&gt;internal_throw_exception(); 
+<a name="l00046"></a>00046         <span class="keywordflow">return</span> b;
+<a name="l00047"></a>00047     }
+<a name="l00048"></a>00048 
+<a name="l00050"></a>00050     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_block( <span class="keywordtype">void</span> *b, size_t n ) {
+<a name="l00051"></a>00051         my_allocator.deallocate( reinterpret_cast&lt;char*&gt;(b), n );
+<a name="l00052"></a>00052     }
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054 <span class="keyword">public</span>:
+<a name="l00056"></a><a class="code" href="a00134.html#682c3978d5cb0620000994f11c44a476">00056</a>     <span class="keyword">typedef</span> T <a class="code" href="a00134.html#682c3978d5cb0620000994f11c44a476">value_type</a>;
+<a name="l00057"></a>00057 
+<a name="l00059"></a><a class="code" href="a00134.html#a8d725c50a9834bb7af5b67c0aff92b8">00059</a>     <span class="keyword">typedef</span> T&amp; <a class="code" href="a00134.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a>;
+<a name="l00060"></a>00060 
+<a name="l00062"></a><a class="code" href="a00134.html#4d48e7ff93f81636bca2c74f7da34750">00062</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T&amp; <a class="code" href="a00134.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a>;
+<a name="l00063"></a>00063 
+<a name="l00065"></a><a class="code" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">00065</a>     <span class="keyword">typedef</span> size_t <a class="code" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a>;
+<a name="l00066"></a>00066 
+<a name="l00068"></a><a class="code" href="a00134.html#068576d16c7e4e05d52f9db7a45b5b65">00068</a>     <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="a00134.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a>;
+<a name="l00069"></a>00069 
+<a name="l00071"></a><a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">00071</a>     <span class="keyword">typedef</span> A <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>;
+<a name="l00072"></a>00072 
+<a name="l00074"></a><a class="code" href="a00134.html#7c48a05a94a1f4f98fdfadfbef98ecf6">00074</a>     <span class="keyword">explicit</span> <a class="code" href="a00134.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(<span class="keyword">const</span> <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>&amp; a = <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>()) : 
+<a name="l00075"></a>00075         internal::concurrent_queue_base_v3&lt;T&gt;( sizeof(T) ), my_allocator( a )
+<a name="l00076"></a>00076     {
+<a name="l00077"></a>00077     }
+<a name="l00078"></a>00078 
+<a name="l00080"></a>00080     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> InputIterator&gt;
+<a name="l00081"></a><a class="code" href="a00134.html#25209656c84f2f9b030e2f9162713341">00081</a>     <a class="code" href="a00134.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>&amp; a = <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>()) :
+<a name="l00082"></a>00082         internal::concurrent_queue_base_v3&lt;T&gt;( sizeof(T) ), my_allocator( a )
+<a name="l00083"></a>00083     {
+<a name="l00084"></a>00084         <span class="keywordflow">for</span>( ; begin != end; ++begin )
+<a name="l00085"></a>00085             internal_push(&amp;*begin);
+<a name="l00086"></a>00086     }
+<a name="l00087"></a>00087     
+<a name="l00089"></a><a class="code" href="a00134.html#8a6b98ea11a867db8ac868f0113ca429">00089</a>     <a class="code" href="a00134.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00134.html">concurrent_queue</a>&amp; src, <span class="keyword">const</span> <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>&amp; a = <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a>()) : 
+<a name="l00090"></a>00090         internal::concurrent_queue_base_v3&lt;T&gt;( sizeof(T) ), my_allocator( a )
+<a name="l00091"></a>00091     {
+<a name="l00092"></a>00092         assign( src );
+<a name="l00093"></a>00093     }
+<a name="l00094"></a>00094     
+<a name="l00096"></a>00096     <a class="code" href="a00134.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>();
+<a name="l00097"></a>00097 
+<a name="l00099"></a><a class="code" href="a00134.html#73c47563ffcc4c2f6452f25a04ebe2e2">00099</a>     <span class="keywordtype">void</span> <a class="code" href="a00134.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>( <span class="keyword">const</span> T&amp; source ) {
+<a name="l00100"></a>00100         internal_push( &amp;source );
+<a name="l00101"></a>00101     }
+<a name="l00102"></a>00102 
+<a name="l00104"></a>00104 
+<a name="l00106"></a><a class="code" href="a00134.html#ae31ca0db34ef96ef1e74aa0d28c95f8">00106</a>     <span class="keywordtype">bool</span> <a class="code" href="a00134.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>( T&amp; result ) {
+<a name="l00107"></a>00107         <span class="keywordflow">return</span> internal_try_pop( &amp;result );
+<a name="l00108"></a>00108     }
+<a name="l00109"></a>00109 
+<a name="l00111"></a><a class="code" href="a00134.html#eaa35a5274606779802e9a669a706260">00111</a>     <a class="code" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> <a class="code" href="a00134.html#eaa35a5274606779802e9a669a706260">unsafe_size</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this-&gt;internal_size();}
+<a name="l00112"></a>00112 
+<a name="l00114"></a><a class="code" href="a00134.html#f3f6fce0cfa2d581d6f3b47e0613ad64">00114</a>     <span class="keywordtype">bool</span> <a class="code" href="a00134.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this-&gt;internal_empty();}
+<a name="l00115"></a>00115 
+<a name="l00117"></a>00117     <span class="keywordtype">void</span> <a class="code" href="a00134.html#c32e8e84c0524155133b4aae32d2a827">clear</a>() ;
+<a name="l00118"></a>00118 
+<a name="l00120"></a><a class="code" href="a00134.html#f034f70caef445fe8abc9113ec926a8d">00120</a>     <a class="code" href="a00134.html#5a3956341728eaa558d8827063718cac">allocator_type</a> <a class="code" href="a00134.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this-&gt;my_allocator; }
+<a name="l00121"></a>00121 
+<a name="l00122"></a>00122     <span class="keyword">typedef</span> internal::concurrent_queue_iterator&lt;concurrent_queue,T&gt; iterator;
+<a name="l00123"></a>00123     <span class="keyword">typedef</span> internal::concurrent_queue_iterator&lt;concurrent_queue,const T&gt; const_iterator;
+<a name="l00124"></a>00124 
+<a name="l00125"></a>00125     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00126"></a>00126     <span class="comment">// The iterators are intended only for debugging.  They are slow and not thread safe.</span>
+<a name="l00127"></a>00127     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00128"></a>00128     iterator unsafe_begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>);}
+<a name="l00129"></a>00129     iterator unsafe_end() {<span class="keywordflow">return</span> iterator();}
+<a name="l00130"></a>00130     const_iterator unsafe_begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>);}
+<a name="l00131"></a>00131     const_iterator unsafe_end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator();}
+<a name="l00132"></a>00132 } ;
+<a name="l00133"></a>00133 
+<a name="l00134"></a>00134 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00135"></a><a class="code" href="a00134.html#830b33753d6b149c366344e29b2edd8c">00135</a> <a class="code" href="a00134.html">concurrent_queue&lt;T,A&gt;::~concurrent_queue</a>() {
+<a name="l00136"></a>00136     <a class="code" href="a00134.html#c32e8e84c0524155133b4aae32d2a827">clear</a>();
+<a name="l00137"></a>00137     this-&gt;internal_finish_clear();
+<a name="l00138"></a>00138 }
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00141"></a><a class="code" href="a00134.html#c32e8e84c0524155133b4aae32d2a827">00141</a> <span class="keywordtype">void</span> <a class="code" href="a00134.html">concurrent_queue&lt;T,A&gt;::clear</a>() {
+<a name="l00142"></a>00142     <span class="keywordflow">while</span>( !<a class="code" href="a00134.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>() ) {
+<a name="l00143"></a>00143         T value;
+<a name="l00144"></a>00144         internal_try_pop(&amp;value);
+<a name="l00145"></a>00145     }
+<a name="l00146"></a>00146 }
+<a name="l00147"></a>00147 
+<a name="l00148"></a>00148 } <span class="comment">// namespace strict_ppl</span>
+<a name="l00149"></a>00149     
+<a name="l00151"></a>00151 
+<a name="l00156"></a>00156 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator&lt;T&gt; &gt;
+<a name="l00157"></a><a class="code" href="a00129.html">00157</a> <span class="keyword">class </span><a class="code" href="a00129.html">concurrent_bounded_queue</a>: <span class="keyword">public</span> internal::concurrent_queue_base_v3 {
+<a name="l00158"></a>00158     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::concurrent_queue_iterator;
+<a name="l00159"></a>00159 
+<a name="l00161"></a>00161     <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template rebind&lt;char&gt;::other page_allocator_type;
+<a name="l00162"></a>00162     page_allocator_type my_allocator;
+<a name="l00163"></a>00163 
+<a name="l00165"></a>00165     <span class="keyword">class </span>destroyer: internal::no_copy {
+<a name="l00166"></a>00166         T&amp; my_value;
+<a name="l00167"></a>00167     <span class="keyword">public</span>:
+<a name="l00168"></a>00168         destroyer( T&amp; value ) : my_value(value) {}
+<a name="l00169"></a>00169         ~destroyer() {my_value.~T();}          
+<a name="l00170"></a>00170     };
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172     T&amp; get_ref( page&amp; page, size_t index ) {
+<a name="l00173"></a>00173         __TBB_ASSERT( index&lt;items_per_page, NULL );
+<a name="l00174"></a>00174         <span class="keywordflow">return</span> static_cast&lt;T*&gt;(static_cast&lt;void*&gt;(&amp;page+1))[index];
+<a name="l00175"></a>00175     }
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_item( page&amp; dst, size_t index, <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) {
+<a name="l00178"></a>00178         <span class="keyword">new</span>( &amp;get_ref(dst,index) ) T(*static_cast&lt;const T*&gt;(src)); 
+<a name="l00179"></a>00179     }
+<a name="l00180"></a>00180 
+<a name="l00181"></a>00181     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_page_item( page&amp; dst, size_t dindex, <span class="keyword">const</span> page&amp; src, size_t sindex ) {
+<a name="l00182"></a>00182         <span class="keyword">new</span>( &amp;get_ref(dst,dindex) ) T( static_cast&lt;const T*&gt;(static_cast&lt;const void*&gt;(&amp;src+1))[sindex] );
+<a name="l00183"></a>00183     }
+<a name="l00184"></a>00184 
+<a name="l00185"></a>00185     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> assign_and_destroy_item( <span class="keywordtype">void</span>* dst, page&amp; src, size_t index ) {
+<a name="l00186"></a>00186         T&amp; from = get_ref(src,index);
+<a name="l00187"></a>00187         destroyer d(from);
+<a name="l00188"></a>00188         *static_cast&lt;T*&gt;(dst) = from;
+<a name="l00189"></a>00189     }
+<a name="l00190"></a>00190 
+<a name="l00191"></a>00191     <span class="comment">/*overide*/</span> <span class="keyword">virtual</span> page *allocate_page() {
+<a name="l00192"></a>00192         size_t n = <span class="keyword">sizeof</span>(page) + items_per_page*item_size;
+<a name="l00193"></a>00193         page *p = reinterpret_cast&lt;page*&gt;(my_allocator.allocate( n ));
+<a name="l00194"></a>00194         <span class="keywordflow">if</span>( !p ) internal_throw_exception(); 
+<a name="l00195"></a>00195         <span class="keywordflow">return</span> p;
+<a name="l00196"></a>00196     }
+<a name="l00197"></a>00197 
+<a name="l00198"></a>00198     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( page *p ) {
+<a name="l00199"></a>00199         size_t n = <span class="keyword">sizeof</span>(page) + items_per_page*item_size;
+<a name="l00200"></a>00200         my_allocator.deallocate( reinterpret_cast&lt;char*&gt;(p), n );
+<a name="l00201"></a>00201     }
+<a name="l00202"></a>00202 
+<a name="l00203"></a>00203 <span class="keyword">public</span>:
+<a name="l00205"></a><a class="code" href="a00129.html#98245517a931e5893f6601e66c51fc75">00205</a>     <span class="keyword">typedef</span> T <a class="code" href="a00129.html#98245517a931e5893f6601e66c51fc75">value_type</a>;
+<a name="l00206"></a>00206 
+<a name="l00208"></a><a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">00208</a>     <span class="keyword">typedef</span> A <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>;
+<a name="l00209"></a>00209 
+<a name="l00211"></a><a class="code" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">00211</a>     <span class="keyword">typedef</span> T&amp; <a class="code" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a>;
+<a name="l00212"></a>00212 
+<a name="l00214"></a><a class="code" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">00214</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T&amp; <a class="code" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a>;
+<a name="l00215"></a>00215 
+<a name="l00217"></a>00217 
+<a name="l00219"></a><a class="code" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">00219</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>;
+<a name="l00220"></a>00220 
+<a name="l00222"></a><a class="code" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">00222</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a>;
+<a name="l00223"></a>00223 
+<a name="l00225"></a><a class="code" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">00225</a>     <span class="keyword">explicit</span> <a class="code" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(<span class="keyword">const</span> <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>&amp; a = <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>()) : 
+<a name="l00226"></a>00226         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+<a name="l00227"></a>00227     {
+<a name="l00228"></a>00228     }
+<a name="l00229"></a>00229 
+<a name="l00231"></a><a class="code" href="a00129.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">00231</a>     <a class="code" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( <span class="keyword">const</span> <a class="code" href="a00129.html">concurrent_bounded_queue</a>&amp; src, <span class="keyword">const</span> <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>&amp; a = <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>()) : 
+<a name="l00232"></a>00232         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+<a name="l00233"></a>00233     {
+<a name="l00234"></a>00234         assign( src );
+<a name="l00235"></a>00235     }
+<a name="l00236"></a>00236 
+<a name="l00238"></a>00238     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> InputIterator&gt;
+<a name="l00239"></a><a class="code" href="a00129.html#a5e04dcd7db9fd9b583b4e7df832246a">00239</a>     <a class="code" href="a00129.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>&amp; a = <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>()) :
+<a name="l00240"></a>00240         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+<a name="l00241"></a>00241     {
+<a name="l00242"></a>00242         <span class="keywordflow">for</span>( ; begin != end; ++begin )
+<a name="l00243"></a>00243             internal_push_if_not_full(&amp;*begin);
+<a name="l00244"></a>00244     }
+<a name="l00245"></a>00245 
+<a name="l00247"></a>00247     <a class="code" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>();
+<a name="l00248"></a>00248 
+<a name="l00250"></a><a class="code" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">00250</a>     <span class="keywordtype">void</span> <a class="code" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">push</a>( <span class="keyword">const</span> T&amp; source ) {
+<a name="l00251"></a>00251         internal_push( &amp;source );
+<a name="l00252"></a>00252     }
+<a name="l00253"></a>00253 
+<a name="l00255"></a>00255 
+<a name="l00256"></a><a class="code" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">00256</a>     <span class="keywordtype">void</span> <a class="code" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>( T&amp; destination ) {
+<a name="l00257"></a>00257         internal_pop( &amp;destination );
+<a name="l00258"></a>00258     }
+<a name="l00259"></a>00259 
+<a name="l00261"></a>00261 
+<a name="l00263"></a><a class="code" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">00263</a>     <span class="keywordtype">bool</span> <a class="code" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>( <span class="keyword">const</span> T&amp; source ) {
+<a name="l00264"></a>00264         <span class="keywordflow">return</span> internal_push_if_not_full( &amp;source );
+<a name="l00265"></a>00265     }
+<a name="l00266"></a>00266 
+<a name="l00268"></a>00268 
+<a name="l00270"></a><a class="code" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">00270</a>     <span class="keywordtype">bool</span> <a class="code" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>( T&amp; destination ) {
+<a name="l00271"></a>00271         <span class="keywordflow">return</span> internal_pop_if_present( &amp;destination );
+<a name="l00272"></a>00272     }
+<a name="l00273"></a>00273 
+<a name="l00275"></a>00275 
+<a name="l00278"></a><a class="code" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">00278</a>     <a class="code" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">size</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_size();}
+<a name="l00279"></a>00279 
+<a name="l00281"></a><a class="code" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">00281</a>     <span class="keywordtype">bool</span> <a class="code" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_empty();}
+<a name="l00282"></a>00282 
+<a name="l00284"></a><a class="code" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">00284</a>     <a class="code" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>()<span class="keyword"> const </span>{
+<a name="l00285"></a>00285         <span class="keywordflow">return</span> my_capacity;
+<a name="l00286"></a>00286     }
+<a name="l00287"></a>00287 
+<a name="l00289"></a>00289 
+<a name="l00291"></a><a class="code" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">00291</a>     <span class="keywordtype">void</span> <a class="code" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">set_capacity</a>( <a class="code" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a> ) {
+<a name="l00292"></a>00292         internal_set_capacity( capacity, <span class="keyword">sizeof</span>(T) );
+<a name="l00293"></a>00293     }
+<a name="l00294"></a>00294 
+<a name="l00296"></a><a class="code" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">00296</a>     <a class="code" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> <a class="code" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this-&gt;my_allocator; }
+<a name="l00297"></a>00297 
+<a name="l00299"></a>00299     <span class="keywordtype">void</span> <a class="code" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>() ;
+<a name="l00300"></a>00300 
+<a name="l00301"></a>00301     <span class="keyword">typedef</span> internal::concurrent_queue_iterator&lt;concurrent_bounded_queue,T&gt; iterator;
+<a name="l00302"></a>00302     <span class="keyword">typedef</span> internal::concurrent_queue_iterator&lt;concurrent_bounded_queue,const T&gt; const_iterator;
+<a name="l00303"></a>00303 
+<a name="l00304"></a>00304     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00305"></a>00305     <span class="comment">// The iterators are intended only for debugging.  They are slow and not thread safe.</span>
+<a name="l00306"></a>00306     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00307"></a>00307     iterator unsafe_begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>);}
+<a name="l00308"></a>00308     iterator unsafe_end() {<span class="keywordflow">return</span> iterator();}
+<a name="l00309"></a>00309     const_iterator unsafe_begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>);}
+<a name="l00310"></a>00310     const_iterator unsafe_end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator();}
+<a name="l00311"></a>00311 
+<a name="l00312"></a>00312 }; 
+<a name="l00313"></a>00313 
+<a name="l00314"></a>00314 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00315"></a><a class="code" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">00315</a> <a class="code" href="a00129.html">concurrent_bounded_queue&lt;T,A&gt;::~concurrent_bounded_queue</a>() {
+<a name="l00316"></a>00316     <a class="code" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>();
+<a name="l00317"></a>00317     internal_finish_clear();
+<a name="l00318"></a>00318 }
+<a name="l00319"></a>00319 
+<a name="l00320"></a>00320 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00321"></a><a class="code" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">00321</a> <span class="keywordtype">void</span> <a class="code" href="a00129.html">concurrent_bounded_queue&lt;T,A&gt;::clear</a>() {
+<a name="l00322"></a>00322     <span class="keywordflow">while</span>( !<a class="code" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() ) {
+<a name="l00323"></a>00323         T value;
+<a name="l00324"></a>00324         internal_pop_if_present(&amp;value);
+<a name="l00325"></a>00325     }
+<a name="l00326"></a>00326 }
+<a name="l00327"></a>00327 
+<a name="l00328"></a>00328 <span class="keyword">namespace </span>deprecated {
+<a name="l00329"></a>00329 
+<a name="l00331"></a>00331 
+<a name="l00336"></a>00336 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator&lt;T&gt; &gt; 
+<a name="l00337"></a><a class="code" href="a00135.html">00337</a> <span class="keyword">class </span><a class="code" href="a00135.html">concurrent_queue</a>: <span class="keyword">public</span> <a class="code" href="a00129.html">concurrent_bounded_queue</a>&lt;T,A&gt; {
+<a name="l00338"></a>00338 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
+<a name="l00339"></a>00339 <span class="preprocessor"></span>    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::concurrent_queue_iterator;
+<a name="l00340"></a>00340 <span class="preprocessor">#endif </span>
+<a name="l00341"></a>00341 <span class="preprocessor"></span>
+<a name="l00342"></a>00342 <span class="keyword">public</span>:
+<a name="l00344"></a><a class="code" href="a00135.html#aaf19bd7337b72f3131ece60f7315ef7">00344</a>     <span class="keyword">explicit</span> <a class="code" href="a00135.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(<span class="keyword">const</span> A&amp; a = A()) : 
+<a name="l00345"></a>00345         <a class="code" href="a00129.html">concurrent_bounded_queue</a>&lt;T,A&gt;( a )
+<a name="l00346"></a>00346     {
+<a name="l00347"></a>00347     }
+<a name="l00348"></a>00348 
+<a name="l00350"></a><a class="code" href="a00135.html#fc092b9082f233482f3513fc3bb670f7">00350</a>     <a class="code" href="a00135.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00135.html">concurrent_queue</a>&amp; src, <span class="keyword">const</span> A&amp; a = A()) : 
+<a name="l00351"></a>00351         <a class="code" href="a00129.html">concurrent_bounded_queue</a>&lt;T,A&gt;( src, a )
+<a name="l00352"></a>00352     {
+<a name="l00353"></a>00353     }
+<a name="l00354"></a>00354 
+<a name="l00356"></a>00356     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> InputIterator&gt;
+<a name="l00357"></a><a class="code" href="a00135.html#383187b910f8c3ca27a39c1638566f15">00357</a>     <a class="code" href="a00135.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> A&amp; a = A()) :
+<a name="l00358"></a>00358         <a class="code" href="a00129.html">concurrent_bounded_queue</a>&lt;T,A&gt;( begin, end, a )
+<a name="l00359"></a>00359     {
+<a name="l00360"></a>00360     }
+<a name="l00361"></a>00361 
+<a name="l00363"></a>00363 
+<a name="l00365"></a><a class="code" href="a00135.html#7c45561bafe71107d09b2bc1b8f4e681">00365</a>     <span class="keywordtype">bool</span> <a class="code" href="a00135.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>( <span class="keyword">const</span> T&amp; source ) {
+<a name="l00366"></a>00366         <span class="keywordflow">return</span> <a class="code" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>( source );
+<a name="l00367"></a>00367     }
+<a name="l00368"></a>00368 
+<a name="l00370"></a>00370 
+<a name="l00374"></a><a class="code" href="a00135.html#48da3536245318af6cb5fd58bac78039">00374</a>     <span class="keywordtype">bool</span> <a class="code" href="a00135.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>( T&amp; destination ) {
+<a name="l00375"></a>00375         <span class="keywordflow">return</span> <a class="code" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>( destination );
+<a name="l00376"></a>00376     }
+<a name="l00377"></a>00377 
+<a name="l00378"></a>00378     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00129.html">concurrent_bounded_queue&lt;T,A&gt;::iterator</a> iterator;
+<a name="l00379"></a>00379     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00129.html">concurrent_bounded_queue&lt;T,A&gt;::const_iterator</a> const_iterator;
+<a name="l00380"></a>00380     <span class="comment">//</span>
+<a name="l00381"></a>00381     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00382"></a>00382     <span class="comment">// The iterators are intended only for debugging.  They are slow and not thread safe.</span>
+<a name="l00383"></a>00383     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00384"></a>00384     iterator begin() {<span class="keywordflow">return</span> this-&gt;unsafe_begin();}
+<a name="l00385"></a>00385     iterator end() {<span class="keywordflow">return</span> this-&gt;unsafe_end();}
+<a name="l00386"></a>00386     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this-&gt;unsafe_begin();}
+<a name="l00387"></a>00387     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this-&gt;unsafe_end();}
+<a name="l00388"></a>00388 }; 
+<a name="l00389"></a>00389 
+<a name="l00390"></a>00390 }
+<a name="l00391"></a>00391     
+<a name="l00392"></a>00392 
+<a name="l00393"></a>00393 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00394"></a>00394 <span class="preprocessor"></span><span class="keyword">using</span> deprecated::concurrent_queue;
+<a name="l00395"></a>00395 <span class="preprocessor">#else</span>
+<a name="l00396"></a>00396 <span class="preprocessor"></span><span class="keyword">using</span> strict_ppl::concurrent_queue;    
+<a name="l00397"></a>00397 <span class="preprocessor">#endif</span>
+<a name="l00398"></a>00398 <span class="preprocessor"></span>
+<a name="l00399"></a>00399 } <span class="comment">// namespace tbb</span>
+<a name="l00400"></a>00400 
+<a name="l00401"></a>00401 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_queue_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00282.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00282.html
new file mode 100644 (file)
index 0000000..e0486c2
--- /dev/null
@@ -0,0 +1,914 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>concurrent_vector.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>concurrent_vector.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_vector_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_vector_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;algorithm&gt;</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;iterator&gt;</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;new&gt;</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;cstring&gt;</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "blocked_range.h"</span>
+<a name="l00032"></a>00032 
+<a name="l00033"></a>00033 <span class="preprocessor">#include "tbb_machine.h"</span>
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="preprocessor">#if _MSC_VER==1500 &amp;&amp; !__INTEL_COMPILER</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span>    <span class="comment">// VS2008/VC9 seems to have an issue; limits pull in math.h</span>
+<a name="l00037"></a>00037 <span class="preprocessor">    #pragma warning( push )</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( disable: 4985 )</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#include &lt;limits&gt;</span> <span class="comment">/* std::numeric_limits */</span>
+<a name="l00041"></a>00041 <span class="preprocessor">#if _MSC_VER==1500 &amp;&amp; !__INTEL_COMPILER</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( pop )</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span>
+<a name="l00045"></a>00045 <span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; !defined(__INTEL_COMPILER) &amp;&amp; defined(_Wp64)</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warnings in /Wp64 mode</span>
+<a name="l00047"></a>00047 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4267)</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span>
+<a name="l00051"></a>00051 <span class="keyword">namespace </span>tbb {
+<a name="l00052"></a>00052 
+<a name="l00053"></a>00053 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator&lt;T&gt; &gt;
+<a name="l00054"></a>00054 <span class="keyword">class </span>concurrent_vector;
+<a name="l00055"></a>00055 
+<a name="l00057"></a>00057 <span class="preprocessor">#define __TBB_BAD_ALLOC reinterpret_cast&lt;void*&gt;(size_t(63))</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span>
+<a name="l00060"></a>00060 <span class="keyword">namespace </span>internal {
+<a name="l00061"></a>00061 
+<a name="l00063"></a>00063     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC itt_load_pointer_v3( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+<a name="l00064"></a>00064 
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067     <span class="keyword">class </span>concurrent_vector_base_v3 {
+<a name="l00068"></a>00068     <span class="keyword">protected</span>:
+<a name="l00069"></a>00069 
+<a name="l00070"></a>00070         <span class="comment">// Basic types declarations</span>
+<a name="l00071"></a>00071         <span class="keyword">typedef</span> size_t segment_index_t;
+<a name="l00072"></a>00072         <span class="keyword">typedef</span> size_t size_type;
+<a name="l00073"></a>00073 
+<a name="l00074"></a>00074         <span class="comment">// Using enumerations due to Mac linking problems of static const variables</span>
+<a name="l00075"></a>00075         <span class="keyword">enum</span> {
+<a name="l00076"></a>00076             <span class="comment">// Size constants</span>
+<a name="l00077"></a>00077             default_initial_segments = 1, <span class="comment">// 2 initial items</span>
+<a name="l00079"></a>00079 <span class="comment"></span>            pointers_per_short_table = 3, <span class="comment">// to fit into 8 words of entire structure</span>
+<a name="l00080"></a>00080             pointers_per_long_table = <span class="keyword">sizeof</span>(segment_index_t) * 8 <span class="comment">// one segment per bit</span>
+<a name="l00081"></a>00081         };
+<a name="l00082"></a>00082 
+<a name="l00083"></a>00083         <span class="comment">// Segment pointer. Can be zero-initialized</span>
+<a name="l00084"></a>00084         <span class="keyword">struct </span>segment_t {
+<a name="l00085"></a>00085             <span class="keywordtype">void</span>* array;
+<a name="l00086"></a>00086 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00087"></a>00087 <span class="preprocessor"></span>            ~segment_t() {
+<a name="l00088"></a>00088                 __TBB_ASSERT( array &lt;= __TBB_BAD_ALLOC, <span class="stringliteral">"should have been freed by clear"</span> );
+<a name="l00089"></a>00089             }
+<a name="l00090"></a>00090 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00091"></a>00091         };
+<a name="l00092"></a>00092  
+<a name="l00093"></a>00093         <span class="comment">// Data fields</span>
+<a name="l00094"></a>00094 
+<a name="l00096"></a>00096         <span class="keywordtype">void</span>* (*vector_allocator_ptr)(concurrent_vector_base_v3 &amp;, size_t);
+<a name="l00097"></a>00097 
+<a name="l00099"></a>00099         atomic&lt;size_type&gt; my_first_block;
+<a name="l00100"></a>00100 
+<a name="l00102"></a>00102         atomic&lt;size_type&gt; my_early_size;
+<a name="l00103"></a>00103 
+<a name="l00105"></a>00105         atomic&lt;segment_t*&gt; my_segment;
+<a name="l00106"></a>00106 
+<a name="l00108"></a>00108         segment_t my_storage[pointers_per_short_table];
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110         <span class="comment">// Methods</span>
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112         concurrent_vector_base_v3() {
+<a name="l00113"></a>00113             my_early_size = 0;
+<a name="l00114"></a>00114             my_first_block = 0; <span class="comment">// here is not default_initial_segments</span>
+<a name="l00115"></a>00115             <span class="keywordflow">for</span>( segment_index_t i = 0; i &lt; pointers_per_short_table; i++)
+<a name="l00116"></a>00116                 my_storage[i].array = NULL;
+<a name="l00117"></a>00117             my_segment = my_storage;
+<a name="l00118"></a>00118         }
+<a name="l00119"></a>00119         __TBB_EXPORTED_METHOD ~concurrent_vector_base_v3();
+<a name="l00120"></a>00120 
+<a name="l00121"></a>00121         <span class="keyword">static</span> segment_index_t segment_index_of( size_type index ) {
+<a name="l00122"></a>00122             <span class="keywordflow">return</span> segment_index_t( __TBB_Log2( index|1 ) );
+<a name="l00123"></a>00123         }
+<a name="l00124"></a>00124 
+<a name="l00125"></a>00125         <span class="keyword">static</span> segment_index_t segment_base( segment_index_t k ) {
+<a name="l00126"></a>00126             <span class="keywordflow">return</span> (segment_index_t(1)&lt;&lt;k &amp; ~segment_index_t(1));
+<a name="l00127"></a>00127         }
+<a name="l00128"></a>00128 
+<a name="l00129"></a>00129         <span class="keyword">static</span> <span class="keyword">inline</span> segment_index_t segment_base_index_of( segment_index_t &amp;index ) {
+<a name="l00130"></a>00130             segment_index_t k = segment_index_of( index );
+<a name="l00131"></a>00131             index -= segment_base(k);
+<a name="l00132"></a>00132             <span class="keywordflow">return</span> k;
+<a name="l00133"></a>00133         }
+<a name="l00134"></a>00134 
+<a name="l00135"></a>00135         <span class="keyword">static</span> size_type segment_size( segment_index_t k ) {
+<a name="l00136"></a>00136             <span class="keywordflow">return</span> segment_index_t(1)&lt;&lt;k; <span class="comment">// fake value for k==0</span>
+<a name="l00137"></a>00137         }
+<a name="l00138"></a>00138 
+<a name="l00140"></a>00140         <span class="keyword">typedef</span> void (__TBB_EXPORTED_FUNC *internal_array_op1)(<span class="keywordtype">void</span>* begin, size_type n );
+<a name="l00141"></a>00141 
+<a name="l00143"></a>00143         <span class="keyword">typedef</span> void (__TBB_EXPORTED_FUNC *internal_array_op2)(<span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
+<a name="l00144"></a>00144 
+<a name="l00146"></a>00146         <span class="keyword">struct </span>internal_segments_table {
+<a name="l00147"></a>00147             segment_index_t first_block;
+<a name="l00148"></a>00148             <span class="keywordtype">void</span>* table[pointers_per_long_table];
+<a name="l00149"></a>00149         };
+<a name="l00150"></a>00150 
+<a name="l00151"></a>00151         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );
+<a name="l00152"></a>00152         size_type __TBB_EXPORTED_METHOD internal_capacity() <span class="keyword">const</span>;
+<a name="l00153"></a>00153         <span class="keywordtype">void</span> internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
+<a name="l00154"></a>00154         size_type __TBB_EXPORTED_METHOD internal_grow_by( size_type delta, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
+<a name="l00155"></a>00155         <span class="keywordtype">void</span>* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type&amp; index );
+<a name="l00156"></a>00156         segment_index_t __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy );
+<a name="l00157"></a>00157         <span class="keywordtype">void</span>* __TBB_EXPORTED_METHOD internal_compact( size_type element_size, <span class="keywordtype">void</span> *table, internal_array_op1 destroy, internal_array_op2 copy );
+<a name="l00158"></a>00158         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_copy( <span class="keyword">const</span> concurrent_vector_base_v3&amp; src, size_type element_size, internal_array_op2 copy );
+<a name="l00159"></a>00159         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_assign( <span class="keyword">const</span> concurrent_vector_base_v3&amp; src, size_type element_size,
+<a name="l00160"></a>00160                               internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );
+<a name="l00161"></a>00161         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception(size_type) <span class="keyword">const</span>;
+<a name="l00162"></a>00162         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3&amp; v);
+<a name="l00163"></a>00163 
+<a name="l00164"></a>00164         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_resize( size_type n, size_type element_size, size_type max_size, <span class="keyword">const</span> <span class="keywordtype">void</span> *src,
+<a name="l00165"></a>00165                                                     internal_array_op1 destroy, internal_array_op2 init );
+<a name="l00166"></a>00166         size_type __TBB_EXPORTED_METHOD internal_grow_to_at_least_with_result( size_type new_size, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
+<a name="l00167"></a>00167 
+<a name="l00169"></a>00169         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
+<a name="l00170"></a>00170 <span class="keyword">private</span>:
+<a name="l00172"></a>00172         <span class="keyword">class </span>helper;
+<a name="l00173"></a>00173         <span class="keyword">friend</span> <span class="keyword">class </span>helper;
+<a name="l00174"></a>00174     };
+<a name="l00175"></a>00175     
+<a name="l00176"></a>00176     <span class="keyword">typedef</span> concurrent_vector_base_v3 concurrent_vector_base;
+<a name="l00177"></a>00177 
+<a name="l00179"></a>00179 
+<a name="l00181"></a>00181     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value&gt;
+<a name="l00182"></a>00182     <span class="keyword">class </span>vector_iterator 
+<a name="l00183"></a>00183     {
+<a name="l00185"></a>00185         Container* my_vector;
+<a name="l00186"></a>00186 
+<a name="l00188"></a>00188         size_t my_index;
+<a name="l00189"></a>00189 
+<a name="l00191"></a>00191 
+<a name="l00192"></a>00192         <span class="keyword">mutable</span> Value* my_item;
+<a name="l00193"></a>00193 
+<a name="l00194"></a>00194         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T&gt;
+<a name="l00195"></a>00195         <span class="keyword">friend</span> vector_iterator&lt;C,T&gt; operator+( ptrdiff_t offset, <span class="keyword">const</span> vector_iterator&lt;C,T&gt;&amp; v );
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00198"></a>00198         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> vector_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> vector_iterator&lt;C,U&gt;&amp; j );
+<a name="l00199"></a>00199 
+<a name="l00200"></a>00200         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00201"></a>00201         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator&lt;( const vector_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> vector_iterator&lt;C,U&gt;&amp; j );
+<a name="l00202"></a>00202 
+<a name="l00203"></a>00203         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00204"></a>00204         <span class="keyword">friend</span> ptrdiff_t operator-( <span class="keyword">const</span> vector_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> vector_iterator&lt;C,U&gt;&amp; j );
+<a name="l00205"></a>00205     
+<a name="l00206"></a>00206         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> U&gt;
+<a name="l00207"></a>00207         <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
+<a name="l00208"></a>00208 
+<a name="l00209"></a>00209 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
+<a name="l00210"></a>00210 <span class="preprocessor"></span>        <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00211"></a>00211         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00136.html">tbb::concurrent_vector</a>;
+<a name="l00212"></a>00212 <span class="preprocessor">#else</span>
+<a name="l00213"></a>00213 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
+<a name="l00214"></a>00214 <span class="preprocessor">#endif </span>
+<a name="l00215"></a>00215 <span class="preprocessor"></span>
+<a name="l00216"></a>00216         vector_iterator( <span class="keyword">const</span> Container&amp; vector, size_t index, <span class="keywordtype">void</span> *ptr = 0 ) : 
+<a name="l00217"></a>00217             my_vector(const_cast&lt;Container*&gt;(&amp;vector)), 
+<a name="l00218"></a>00218             my_index(index), 
+<a name="l00219"></a>00219             my_item(static_cast&lt;Value*&gt;(ptr))
+<a name="l00220"></a>00220         {}
+<a name="l00221"></a>00221 
+<a name="l00222"></a>00222     <span class="keyword">public</span>:
+<a name="l00224"></a>00224         vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226         vector_iterator( <span class="keyword">const</span> vector_iterator&lt;Container,typename Container::value_type&gt;&amp; other ) :
+<a name="l00227"></a>00227             my_vector(other.my_vector),
+<a name="l00228"></a>00228             my_index(other.my_index),
+<a name="l00229"></a>00229             my_item(other.my_item)
+<a name="l00230"></a>00230         {}
+<a name="l00231"></a>00231 
+<a name="l00232"></a>00232         vector_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00233"></a>00233             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index+offset );
+<a name="l00234"></a>00234         }
+<a name="l00235"></a>00235         vector_iterator &amp;operator+=( ptrdiff_t offset ) {
+<a name="l00236"></a>00236             my_index+=offset;
+<a name="l00237"></a>00237             my_item = NULL;
+<a name="l00238"></a>00238             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00239"></a>00239         }
+<a name="l00240"></a>00240         vector_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00241"></a>00241             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index-offset );
+<a name="l00242"></a>00242         }
+<a name="l00243"></a>00243         vector_iterator &amp;operator-=( ptrdiff_t offset ) {
+<a name="l00244"></a>00244             my_index-=offset;
+<a name="l00245"></a>00245             my_item = NULL;
+<a name="l00246"></a>00246             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00247"></a>00247         }
+<a name="l00248"></a>00248         Value&amp; operator*()<span class="keyword"> const </span>{
+<a name="l00249"></a>00249             Value* item = my_item;
+<a name="l00250"></a>00250             <span class="keywordflow">if</span>( !item ) {
+<a name="l00251"></a>00251                 item = my_item = &amp;my_vector-&gt;internal_subscript(my_index);
+<a name="l00252"></a>00252             }
+<a name="l00253"></a>00253             __TBB_ASSERT( item==&amp;my_vector-&gt;internal_subscript(my_index), <span class="stringliteral">"corrupt cache"</span> );
+<a name="l00254"></a>00254             <span class="keywordflow">return</span> *item;
+<a name="l00255"></a>00255         }
+<a name="l00256"></a>00256         Value&amp; <a class="code" href="a00136.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>( ptrdiff_t k )<span class="keyword"> const </span>{
+<a name="l00257"></a>00257             <span class="keywordflow">return</span> my_vector-&gt;internal_subscript(my_index+k);
+<a name="l00258"></a>00258         }
+<a name="l00259"></a>00259         Value* operator-&gt;()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &amp;operator*();}
+<a name="l00260"></a>00260 
+<a name="l00262"></a>00262         vector_iterator&amp; operator++() {
+<a name="l00263"></a>00263             size_t k = ++my_index;
+<a name="l00264"></a>00264             <span class="keywordflow">if</span>( my_item ) {
+<a name="l00265"></a>00265                 <span class="comment">// Following test uses 2's-complement wizardry</span>
+<a name="l00266"></a>00266                 <span class="keywordflow">if</span>( (k&amp; (k-2))==0 ) {
+<a name="l00267"></a>00267                     <span class="comment">// k is a power of two that is at least k-2</span>
+<a name="l00268"></a>00268                     my_item= NULL;
+<a name="l00269"></a>00269                 } <span class="keywordflow">else</span> {
+<a name="l00270"></a>00270                     ++my_item;
+<a name="l00271"></a>00271                 }
+<a name="l00272"></a>00272             }
+<a name="l00273"></a>00273             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00274"></a>00274         }
+<a name="l00275"></a>00275 
+<a name="l00277"></a>00277         vector_iterator&amp; operator--() {
+<a name="l00278"></a>00278             __TBB_ASSERT( my_index&gt;0, <span class="stringliteral">"operator--() applied to iterator already at beginning of concurrent_vector"</span> ); 
+<a name="l00279"></a>00279             size_t k = my_index--;
+<a name="l00280"></a>00280             <span class="keywordflow">if</span>( my_item ) {
+<a name="l00281"></a>00281                 <span class="comment">// Following test uses 2's-complement wizardry</span>
+<a name="l00282"></a>00282                 <span class="keywordflow">if</span>( (k&amp; (k-2))==0 ) {
+<a name="l00283"></a>00283                     <span class="comment">// k is a power of two that is at least k-2  </span>
+<a name="l00284"></a>00284                     my_item= NULL;
+<a name="l00285"></a>00285                 } <span class="keywordflow">else</span> {
+<a name="l00286"></a>00286                     --my_item;
+<a name="l00287"></a>00287                 }
+<a name="l00288"></a>00288             }
+<a name="l00289"></a>00289             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00290"></a>00290         }
+<a name="l00291"></a>00291 
+<a name="l00293"></a>00293         vector_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00294"></a>00294             vector_iterator result = *<span class="keyword">this</span>;
+<a name="l00295"></a>00295             operator++();
+<a name="l00296"></a>00296             <span class="keywordflow">return</span> result;
+<a name="l00297"></a>00297         }
+<a name="l00298"></a>00298 
+<a name="l00300"></a>00300         vector_iterator operator--(<span class="keywordtype">int</span>) {
+<a name="l00301"></a>00301             vector_iterator result = *<span class="keyword">this</span>;
+<a name="l00302"></a>00302             operator--();
+<a name="l00303"></a>00303             <span class="keywordflow">return</span> result;
+<a name="l00304"></a>00304         }
+<a name="l00305"></a>00305 
+<a name="l00306"></a>00306         <span class="comment">// STL support</span>
+<a name="l00307"></a>00307 
+<a name="l00308"></a>00308         <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00309"></a>00309         <span class="keyword">typedef</span> Value value_type;
+<a name="l00310"></a>00310         <span class="keyword">typedef</span> Value* pointer;
+<a name="l00311"></a>00311         <span class="keyword">typedef</span> Value&amp; reference;
+<a name="l00312"></a>00312         <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
+<a name="l00313"></a>00313     };
+<a name="l00314"></a>00314 
+<a name="l00315"></a>00315     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T&gt;
+<a name="l00316"></a>00316     vector_iterator&lt;Container,T&gt; operator+( ptrdiff_t offset, <span class="keyword">const</span> vector_iterator&lt;Container,T&gt;&amp; v ) {
+<a name="l00317"></a>00317         <span class="keywordflow">return</span> vector_iterator&lt;Container,T&gt;( *v.my_vector, v.my_index+offset );
+<a name="l00318"></a>00318     }
+<a name="l00319"></a>00319 
+<a name="l00320"></a>00320     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00321"></a>00321     <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> vector_iterator&lt;Container,T&gt;&amp; i, <span class="keyword">const</span> vector_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00322"></a>00322         <span class="keywordflow">return</span> i.my_index==j.my_index &amp;&amp; i.my_vector == j.my_vector;
+<a name="l00323"></a>00323     }
+<a name="l00324"></a>00324 
+<a name="l00325"></a>00325     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00326"></a>00326     <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> vector_iterator&lt;Container,T&gt;&amp; i, <span class="keyword">const</span> vector_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00327"></a>00327         <span class="keywordflow">return</span> !(i==j);
+<a name="l00328"></a>00328     }
+<a name="l00329"></a>00329 
+<a name="l00330"></a>00330     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00331"></a>00331     <span class="keywordtype">bool</span> operator&lt;( const vector_iterator&lt;Container,T&gt;&amp; i, <span class="keyword">const</span> vector_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00332"></a>00332         <span class="keywordflow">return</span> i.my_index&lt;j.my_index;
+<a name="l00333"></a>00333     }
+<a name="l00334"></a>00334 
+<a name="l00335"></a>00335     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00336"></a>00336     <span class="keywordtype">bool</span> operator&gt;( <span class="keyword">const</span> vector_iterator&lt;Container,T&gt;&amp; i, <span class="keyword">const</span> vector_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00337"></a>00337         <span class="keywordflow">return</span> j&lt;i;
+<a name="l00338"></a>00338     }
+<a name="l00339"></a>00339 
+<a name="l00340"></a>00340     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00341"></a>00341     <span class="keywordtype">bool</span> operator&gt;=( <span class="keyword">const</span> vector_iterator&lt;Container,T&gt;&amp; i, <span class="keyword">const</span> vector_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00342"></a>00342         <span class="keywordflow">return</span> !(i&lt;j);
+<a name="l00343"></a>00343     }
+<a name="l00344"></a>00344 
+<a name="l00345"></a>00345     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00346"></a>00346     <span class="keywordtype">bool</span> operator&lt;=( const vector_iterator&lt;Container,T&gt;&amp; i, <span class="keyword">const</span> vector_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00347"></a>00347         <span class="keywordflow">return</span> !(j&lt;i);
+<a name="l00348"></a>00348     }
+<a name="l00349"></a>00349 
+<a name="l00350"></a>00350     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00351"></a>00351     ptrdiff_t operator-( <span class="keyword">const</span> vector_iterator&lt;Container,T&gt;&amp; i, <span class="keyword">const</span> vector_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00352"></a>00352         <span class="keywordflow">return</span> ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);
+<a name="l00353"></a>00353     }
+<a name="l00354"></a>00354 
+<a name="l00355"></a>00355     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00356"></a>00356     <span class="keyword">class </span>allocator_base {
+<a name="l00357"></a>00357     <span class="keyword">public</span>:
+<a name="l00358"></a>00358         <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template
+<a name="l00359"></a>00359             rebind&lt;T&gt;::other allocator_type;
+<a name="l00360"></a>00360         allocator_type my_allocator;
+<a name="l00361"></a>00361 
+<a name="l00362"></a>00362         allocator_base(<span class="keyword">const</span> allocator_type &amp;a = allocator_type() ) : my_allocator(a) {}
+<a name="l00363"></a>00363     };
+<a name="l00364"></a>00364 
+<a name="l00365"></a>00365 } <span class="comment">// namespace internal</span>
+<a name="l00367"></a>00367 <span class="comment"></span>
+<a name="l00369"></a>00369 
+<a name="l00430"></a>00430 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00431"></a><a class="code" href="a00136.html">00431</a> <span class="keyword">class </span><a class="code" href="a00136.html">concurrent_vector</a>: <span class="keyword">protected</span> internal::allocator_base&lt;T, A&gt;,
+<a name="l00432"></a>00432                          <span class="keyword">private</span> internal::concurrent_vector_base {
+<a name="l00433"></a>00433 <span class="keyword">private</span>:
+<a name="l00434"></a>00434     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I&gt;
+<a name="l00435"></a>00435     <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00122.html">blocked_range</a>&lt;I&gt; {
+<a name="l00436"></a>00436     <span class="keyword">public</span>:
+<a name="l00437"></a>00437         <span class="keyword">typedef</span> T value_type;
+<a name="l00438"></a>00438         <span class="keyword">typedef</span> T&amp; reference;
+<a name="l00439"></a>00439         <span class="keyword">typedef</span> <span class="keyword">const</span> T&amp; const_reference;
+<a name="l00440"></a>00440         <span class="keyword">typedef</span> I iterator;
+<a name="l00441"></a>00441         <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00442"></a>00442         generic_range_type( I begin_, I end_, size_t grainsize = 1) : <a class="code" href="a00122.html">blocked_range&lt;I&gt;</a>(begin_,end_,grainsize) {} 
+<a name="l00443"></a>00443         template&lt;typename U&gt;
+<a name="l00444"></a>00444         generic_range_type( <span class="keyword">const</span> generic_range_type&lt;U&gt;&amp; r) : <a class="code" href="a00122.html">blocked_range&lt;I&gt;</a>(r.begin(),r.end(),r.grainsize()) {} 
+<a name="l00445"></a>00445         generic_range_type( generic_range_type&amp; r, <a class="code" href="a00165.html">split</a> ) : <a class="code" href="a00122.html">blocked_range&lt;I&gt;</a>(r,<a class="code" href="a00165.html">split</a>()) {}
+<a name="l00446"></a>00446     };
+<a name="l00447"></a>00447 
+<a name="l00448"></a>00448     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> U&gt;
+<a name="l00449"></a>00449     <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
+<a name="l00450"></a>00450 <span class="keyword">public</span>:
+<a name="l00451"></a>00451     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00452"></a>00452     <span class="comment">// STL compatible types</span>
+<a name="l00453"></a>00453     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00454"></a>00454     <span class="keyword">typedef</span> internal::concurrent_vector_base_v3::size_type size_type;
+<a name="l00455"></a>00455     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_base&lt;T, A&gt;::allocator_type allocator_type;
+<a name="l00456"></a>00456 
+<a name="l00457"></a>00457     <span class="keyword">typedef</span> T value_type;
+<a name="l00458"></a>00458     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00459"></a>00459     <span class="keyword">typedef</span> T&amp; reference;
+<a name="l00460"></a>00460     <span class="keyword">typedef</span> <span class="keyword">const</span> T&amp; const_reference;
+<a name="l00461"></a>00461     <span class="keyword">typedef</span> T *pointer;
+<a name="l00462"></a>00462     <span class="keyword">typedef</span> <span class="keyword">const</span> T *const_pointer;
+<a name="l00463"></a>00463 
+<a name="l00464"></a>00464     <span class="keyword">typedef</span> internal::vector_iterator&lt;concurrent_vector,T&gt; iterator;
+<a name="l00465"></a>00465     <span class="keyword">typedef</span> internal::vector_iterator&lt;concurrent_vector,const T&gt; const_iterator;
+<a name="l00466"></a>00466 
+<a name="l00467"></a>00467 <span class="preprocessor">#if !defined(_MSC_VER) || _CPPLIB_VER&gt;=300 </span>
+<a name="l00468"></a>00468 <span class="preprocessor"></span>    <span class="comment">// Assume ISO standard definition of std::reverse_iterator</span>
+<a name="l00469"></a>00469     <span class="keyword">typedef</span> std::reverse_iterator&lt;iterator&gt; reverse_iterator;
+<a name="l00470"></a>00470     <span class="keyword">typedef</span> std::reverse_iterator&lt;const_iterator&gt; const_reverse_iterator;
+<a name="l00471"></a>00471 <span class="preprocessor">#else</span>
+<a name="l00472"></a>00472 <span class="preprocessor"></span>    <span class="comment">// Use non-standard std::reverse_iterator</span>
+<a name="l00473"></a>00473     <span class="keyword">typedef</span> std::reverse_iterator&lt;iterator,T,T&amp;,T*&gt; reverse_iterator;
+<a name="l00474"></a>00474     <span class="keyword">typedef</span> std::reverse_iterator&lt;const_iterator,T,const T&amp;,const T*&gt; const_reverse_iterator;
+<a name="l00475"></a>00475 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) &amp;&amp; (_MSC_VER&lt;1300) */</span>
+<a name="l00476"></a>00476 
+<a name="l00477"></a>00477     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00478"></a>00478     <span class="comment">// Parallel algorithm support</span>
+<a name="l00479"></a>00479     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00480"></a>00480     <span class="keyword">typedef</span> generic_range_type&lt;iterator&gt; range_type;
+<a name="l00481"></a>00481     <span class="keyword">typedef</span> generic_range_type&lt;const_iterator&gt; const_range_type;
+<a name="l00482"></a>00482 
+<a name="l00483"></a>00483     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00484"></a>00484     <span class="comment">// STL compatible constructors &amp; destructors</span>
+<a name="l00485"></a>00485     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00486"></a>00486 
+<a name="l00488"></a><a class="code" href="a00136.html#2c8ca9cabfcd30ad5943324c853664b5">00488</a>     <span class="keyword">explicit</span> <a class="code" href="a00136.html">concurrent_vector</a>(<span class="keyword">const</span> allocator_type &amp;a = allocator_type())
+<a name="l00489"></a>00489         : internal::allocator_base&lt;T, A&gt;(a)
+<a name="l00490"></a>00490     {
+<a name="l00491"></a>00491         vector_allocator_ptr = &amp;internal_allocator;
+<a name="l00492"></a>00492     }
+<a name="l00493"></a>00493 
+<a name="l00495"></a><a class="code" href="a00136.html#dd8a200b99a8088435a37934b58fe335">00495</a>     <a class="code" href="a00136.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00136.html">concurrent_vector</a>&amp; vector, <span class="keyword">const</span> allocator_type&amp; a = allocator_type() )
+<a name="l00496"></a>00496         : internal::allocator_base&lt;T, A&gt;(a)
+<a name="l00497"></a>00497     {
+<a name="l00498"></a>00498         vector_allocator_ptr = &amp;internal_allocator;
+<a name="l00499"></a>00499         <span class="keywordflow">try</span> {
+<a name="l00500"></a>00500             internal_copy(vector, <span class="keyword">sizeof</span>(T), &amp;copy_array);
+<a name="l00501"></a>00501         } <span class="keywordflow">catch</span>(...) {
+<a name="l00502"></a>00502             segment_t *table = my_segment;
+<a name="l00503"></a>00503             internal_free_segments( reinterpret_cast&lt;void**&gt;(table), internal_clear(&amp;destroy_array), my_first_block );
+<a name="l00504"></a>00504             <span class="keywordflow">throw</span>;
+<a name="l00505"></a>00505         }
+<a name="l00506"></a>00506     }
+<a name="l00507"></a>00507 
+<a name="l00509"></a>00509     <span class="keyword">template</span>&lt;<span class="keyword">class</span> M&gt;
+<a name="l00510"></a><a class="code" href="a00136.html#64432f13f7b29bfe4acfb5568f34f3a8">00510</a>     <a class="code" href="a00136.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00136.html">concurrent_vector&lt;T, M&gt;</a>&amp; vector, <span class="keyword">const</span> allocator_type&amp; a = allocator_type() )
+<a name="l00511"></a>00511         : internal::allocator_base&lt;T, A&gt;(a)
+<a name="l00512"></a>00512     {
+<a name="l00513"></a>00513         vector_allocator_ptr = &amp;internal_allocator;
+<a name="l00514"></a>00514         <span class="keywordflow">try</span> {
+<a name="l00515"></a>00515             internal_copy(vector.<a class="code" href="a00136.html#bb5ae659871478f1f5c68039e1273e12">internal_vector_base</a>(), <span class="keyword">sizeof</span>(T), &amp;copy_array);
+<a name="l00516"></a>00516         } <span class="keywordflow">catch</span>(...) {
+<a name="l00517"></a>00517             segment_t *table = my_segment;
+<a name="l00518"></a>00518             internal_free_segments( reinterpret_cast&lt;void**&gt;(table), internal_clear(&amp;destroy_array), my_first_block );
+<a name="l00519"></a>00519             <span class="keywordflow">throw</span>;
+<a name="l00520"></a>00520         }
+<a name="l00521"></a>00521     }
+<a name="l00522"></a>00522 
+<a name="l00524"></a><a class="code" href="a00136.html#2a2e261dfe1cab3f73f7b1a94137cfca">00524</a>     <span class="keyword">explicit</span> <a class="code" href="a00136.html">concurrent_vector</a>(size_type n)
+<a name="l00525"></a>00525     {
+<a name="l00526"></a>00526         vector_allocator_ptr = &amp;internal_allocator;
+<a name="l00527"></a>00527         <span class="keywordflow">try</span> {
+<a name="l00528"></a>00528             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), NULL, &amp;destroy_array, &amp;initialize_array );
+<a name="l00529"></a>00529         } <span class="keywordflow">catch</span>(...) {
+<a name="l00530"></a>00530             segment_t *table = my_segment;
+<a name="l00531"></a>00531             internal_free_segments( reinterpret_cast&lt;void**&gt;(table), internal_clear(&amp;destroy_array), my_first_block );
+<a name="l00532"></a>00532             <span class="keywordflow">throw</span>;
+<a name="l00533"></a>00533         }
+<a name="l00534"></a>00534     }
+<a name="l00535"></a>00535 
+<a name="l00537"></a><a class="code" href="a00136.html#3883a8a908b44e249a57f454de3f55d8">00537</a>     <a class="code" href="a00136.html">concurrent_vector</a>(size_type n, const_reference t, <span class="keyword">const</span> allocator_type&amp; a = allocator_type())
+<a name="l00538"></a>00538         : internal::allocator_base&lt;T, A&gt;(a)
+<a name="l00539"></a>00539     {
+<a name="l00540"></a>00540         vector_allocator_ptr = &amp;internal_allocator;
+<a name="l00541"></a>00541         <span class="keywordflow">try</span> {
+<a name="l00542"></a>00542             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast&lt;const void*&gt;(&amp;t), &amp;destroy_array, &amp;initialize_array_by );
+<a name="l00543"></a>00543         } <span class="keywordflow">catch</span>(...) {
+<a name="l00544"></a>00544             segment_t *table = my_segment;
+<a name="l00545"></a>00545             internal_free_segments( reinterpret_cast&lt;void**&gt;(table), internal_clear(&amp;destroy_array), my_first_block );
+<a name="l00546"></a>00546             <span class="keywordflow">throw</span>;
+<a name="l00547"></a>00547         }
+<a name="l00548"></a>00548     }
+<a name="l00549"></a>00549 
+<a name="l00551"></a>00551     <span class="keyword">template</span>&lt;<span class="keyword">class</span> I&gt;
+<a name="l00552"></a><a class="code" href="a00136.html#4450de83c5862ea4bcd9443fd7e67419">00552</a>     <a class="code" href="a00136.html">concurrent_vector</a>(I first, I last, <span class="keyword">const</span> allocator_type &amp;a = allocator_type())
+<a name="l00553"></a>00553         : internal::allocator_base&lt;T, A&gt;(a)
+<a name="l00554"></a>00554     {
+<a name="l00555"></a>00555         vector_allocator_ptr = &amp;internal_allocator;
+<a name="l00556"></a>00556         <span class="keywordflow">try</span> {
+<a name="l00557"></a>00557             internal_assign_range(first, last, <span class="keyword">static_cast</span>&lt;is_integer_tag&lt;std::numeric_limits&lt;I&gt;::is_integer&gt; *&gt;(0) );
+<a name="l00558"></a>00558         } <span class="keywordflow">catch</span>(...) {
+<a name="l00559"></a>00559             segment_t *table = my_segment;
+<a name="l00560"></a>00560             internal_free_segments( reinterpret_cast&lt;void**&gt;(table), internal_clear(&amp;destroy_array), my_first_block );
+<a name="l00561"></a>00561             <span class="keywordflow">throw</span>;
+<a name="l00562"></a>00562         }
+<a name="l00563"></a>00563     }
+<a name="l00564"></a>00564 
+<a name="l00566"></a><a class="code" href="a00136.html#691f0f3cda3e489c37a657016e375eaf">00566</a>     <a class="code" href="a00136.html">concurrent_vector</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="a00136.html">concurrent_vector</a>&amp; vector ) {
+<a name="l00567"></a>00567         <span class="keywordflow">if</span>( <span class="keyword">this</span> != &amp;vector )
+<a name="l00568"></a>00568             internal_assign(vector, <span class="keyword">sizeof</span>(T), &amp;destroy_array, &amp;assign_array, &amp;copy_array);
+<a name="l00569"></a>00569         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00570"></a>00570     }
+<a name="l00571"></a>00571 
+<a name="l00573"></a>00573     <span class="keyword">template</span>&lt;<span class="keyword">class</span> M&gt;
+<a name="l00574"></a><a class="code" href="a00136.html#19f4ab88a01b0fd056af3bba463e7bd6">00574</a>     <a class="code" href="a00136.html">concurrent_vector</a>&amp; operator=( <span class="keyword">const</span> <a class="code" href="a00136.html">concurrent_vector&lt;T, M&gt;</a>&amp; vector ) {
+<a name="l00575"></a>00575         <span class="keywordflow">if</span>( static_cast&lt;void*&gt;( <span class="keyword">this</span> ) != static_cast&lt;const void*&gt;( &amp;vector ) )
+<a name="l00576"></a>00576             internal_assign(vector.internal_vector_base(),
+<a name="l00577"></a>00577                 <span class="keyword">sizeof</span>(T), &amp;destroy_array, &amp;assign_array, &amp;copy_array);
+<a name="l00578"></a>00578         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00579"></a>00579     }
+<a name="l00580"></a>00580 
+<a name="l00581"></a>00581     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00582"></a>00582     <span class="comment">// Concurrent operations</span>
+<a name="l00583"></a>00583     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00585"></a>00585 <span class="comment"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00586"></a>00586 <span class="preprocessor"></span>
+<a name="l00587"></a><a class="code" href="a00136.html#30484e3959892fd5392fa93c873c31f0">00587</a>     size_type grow_by( size_type delta ) {
+<a name="l00588"></a>00588         <span class="keywordflow">return</span> delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &amp;initialize_array, NULL ) : my_early_size;
+<a name="l00589"></a>00589     }
+<a name="l00590"></a>00590 <span class="preprocessor">#else</span>
+<a name="l00591"></a>00591 <span class="preprocessor"></span>
+<a name="l00592"></a><a class="code" href="a00136.html#c8177b1865270ea68aa1ab9148e5e35e">00592</a>     iterator grow_by( size_type delta ) {
+<a name="l00593"></a>00593         <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &amp;initialize_array, NULL ) : my_early_size);
+<a name="l00594"></a>00594     }
+<a name="l00595"></a>00595 <span class="preprocessor">#endif</span>
+<a name="l00596"></a>00596 <span class="preprocessor"></span>
+<a name="l00598"></a>00598 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00599"></a>00599 <span class="preprocessor"></span>
+<a name="l00600"></a><a class="code" href="a00136.html#38274ab3f772ecba600c7daca7690102">00600</a>     size_type grow_by( size_type delta, const_reference t ) {
+<a name="l00601"></a>00601         <span class="keywordflow">return</span> delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &amp;initialize_array_by, static_cast&lt;const void*&gt;(&amp;t) ) : my_early_size;
+<a name="l00602"></a>00602     }
+<a name="l00603"></a>00603 <span class="preprocessor">#else</span>
+<a name="l00604"></a>00604 <span class="preprocessor"></span>
+<a name="l00605"></a><a class="code" href="a00136.html#473a59a4c9308b93411b898b3110d26c">00605</a>     iterator grow_by( size_type delta, const_reference t ) {
+<a name="l00606"></a>00606         <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &amp;initialize_array_by, static_cast&lt;const void*&gt;(&amp;t) ) : my_early_size);
+<a name="l00607"></a>00607     }
+<a name="l00608"></a>00608 <span class="preprocessor">#endif</span>
+<a name="l00609"></a>00609 <span class="preprocessor"></span>
+<a name="l00611"></a>00611 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00612"></a>00612 <span class="preprocessor"></span>
+<a name="l00614"></a><a class="code" href="a00136.html#47fe588214dd5fa06ab6e8ab78d83874">00614</a>     <span class="keywordtype">void</span> grow_to_at_least( size_type n ) {
+<a name="l00615"></a>00615         <span class="keywordflow">if</span>( n ) internal_grow_to_at_least_with_result( n, <span class="keyword">sizeof</span>(T), &amp;initialize_array, NULL );
+<a name="l00616"></a>00616     };
+<a name="l00617"></a>00617 <span class="preprocessor">#else</span>
+<a name="l00618"></a>00618 <span class="preprocessor"></span>
+<a name="l00622"></a><a class="code" href="a00136.html#a7e3b67c8ccab16d0aecc80899ae799d">00622</a>     iterator grow_to_at_least( size_type n ) {
+<a name="l00623"></a>00623         size_type m=0;
+<a name="l00624"></a>00624         <span class="keywordflow">if</span>( n ) {
+<a name="l00625"></a>00625             m = internal_grow_to_at_least_with_result( n, <span class="keyword">sizeof</span>(T), &amp;initialize_array, NULL );
+<a name="l00626"></a>00626             <span class="keywordflow">if</span>( m&gt;n ) m=n;
+<a name="l00627"></a>00627         }
+<a name="l00628"></a>00628         <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, m);
+<a name="l00629"></a>00629     };
+<a name="l00630"></a>00630 <span class="preprocessor">#endif</span>
+<a name="l00631"></a>00631 <span class="preprocessor"></span>
+<a name="l00633"></a>00633 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00634"></a><a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">00634</a> <span class="preprocessor"></span>    size_type push_back( const_reference item )
+<a name="l00635"></a>00635 <span class="preprocessor">#else</span>
+<a name="l00636"></a>00636 <span class="preprocessor"></span>
+<a name="l00637"></a>00637     iterator push_back( const_reference item )
+<a name="l00638"></a>00638 <span class="preprocessor">#endif</span>
+<a name="l00639"></a>00639 <span class="preprocessor"></span>    {
+<a name="l00640"></a>00640         size_type k;
+<a name="l00641"></a>00641         <span class="keywordtype">void</span> *ptr = internal_push_back(<span class="keyword">sizeof</span>(T),k);
+<a name="l00642"></a>00642         internal_loop_guide loop(1, ptr);
+<a name="l00643"></a>00643         loop.init(&amp;item);
+<a name="l00644"></a>00644 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00645"></a>00645 <span class="preprocessor"></span>        <span class="keywordflow">return</span> k;
+<a name="l00646"></a>00646 <span class="preprocessor">#else</span>
+<a name="l00647"></a>00647 <span class="preprocessor"></span>        <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, k, ptr);
+<a name="l00648"></a>00648 <span class="preprocessor">#endif</span>
+<a name="l00649"></a>00649 <span class="preprocessor"></span>    }
+<a name="l00650"></a>00650 
+<a name="l00652"></a>00652 
+<a name="l00654"></a><a class="code" href="a00136.html#4c52f2950bb1832886bd4458eb09d7eb">00654</a>     reference operator[]( size_type index ) {
+<a name="l00655"></a>00655         <span class="keywordflow">return</span> internal_subscript(index);
+<a name="l00656"></a>00656     }
+<a name="l00657"></a>00657 
+<a name="l00659"></a><a class="code" href="a00136.html#c6fade5c732cc95274d1d8277ea619d1">00659</a>     const_reference operator[]( size_type index )<span class="keyword"> const </span>{
+<a name="l00660"></a>00660         <span class="keywordflow">return</span> internal_subscript(index);
+<a name="l00661"></a>00661     }
+<a name="l00662"></a>00662 
+<a name="l00664"></a><a class="code" href="a00136.html#0c073ca43e787c7cbf7b0e26d2221748">00664</a>     reference at( size_type index ) {
+<a name="l00665"></a>00665         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
+<a name="l00666"></a>00666     }
+<a name="l00667"></a>00667 
+<a name="l00669"></a><a class="code" href="a00136.html#23e14a38af748edff96a7adc3a0f1c58">00669</a>     const_reference at( size_type index )<span class="keyword"> const </span>{
+<a name="l00670"></a>00670         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
+<a name="l00671"></a>00671     }
+<a name="l00672"></a>00672 
+<a name="l00674"></a><a class="code" href="a00136.html#a4c6ffff3bf08b92939aa2fc516edfba">00674</a>     range_type range( size_t grainsize = 1) {
+<a name="l00675"></a>00675         <span class="keywordflow">return</span> range_type( begin(), end(), grainsize );
+<a name="l00676"></a>00676     }
+<a name="l00677"></a>00677 
+<a name="l00679"></a><a class="code" href="a00136.html#3d09ccfb581b879ae64203741035e193">00679</a>     const_range_type range( size_t grainsize = 1 )<span class="keyword"> const </span>{
+<a name="l00680"></a>00680         <span class="keywordflow">return</span> const_range_type( begin(), end(), grainsize );
+<a name="l00681"></a>00681     }
+<a name="l00682"></a>00682     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00683"></a>00683     <span class="comment">// Capacity</span>
+<a name="l00684"></a>00684     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00686"></a><a class="code" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">00686</a> <span class="comment"></span>    size_type size()<span class="keyword"> const </span>{
+<a name="l00687"></a>00687         size_type sz = my_early_size, cp = internal_capacity();
+<a name="l00688"></a>00688         <span class="keywordflow">return</span> cp &lt; sz ? cp : sz;
+<a name="l00689"></a>00689     }
+<a name="l00690"></a>00690 
+<a name="l00692"></a><a class="code" href="a00136.html#c6426cb93cf20d3af40f3c90f1f0481a">00692</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_early_size;}
+<a name="l00693"></a>00693 
+<a name="l00695"></a><a class="code" href="a00136.html#3ed6b9ae7217af5103d974045b6f5cd5">00695</a>     size_type capacity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_capacity();}
+<a name="l00696"></a>00696 
+<a name="l00698"></a>00698 
+<a name="l00700"></a><a class="code" href="a00136.html#5a0ce05026994b010018f72cfdeb72c1">00700</a>     <span class="keywordtype">void</span> reserve( size_type n ) {
+<a name="l00701"></a>00701         <span class="keywordflow">if</span>( n )
+<a name="l00702"></a>00702             internal_reserve(n, <span class="keyword">sizeof</span>(T), max_size());
+<a name="l00703"></a>00703     }
+<a name="l00704"></a>00704 
+<a name="l00706"></a><a class="code" href="a00136.html#8dfb0cb0eef96d440b4dcf801807a718">00706</a>     <span class="keywordtype">void</span> resize( size_type n ) {
+<a name="l00707"></a>00707         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), NULL, &amp;destroy_array, &amp;initialize_array );
+<a name="l00708"></a>00708     }
+<a name="l00709"></a>00709     
+<a name="l00711"></a><a class="code" href="a00136.html#98ce6b2c6d2622f0c030b46dfac3880c">00711</a>     <span class="keywordtype">void</span> resize( size_type n, const_reference t ) {
+<a name="l00712"></a>00712         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast&lt;const void*&gt;(&amp;t), &amp;destroy_array, &amp;initialize_array_by );
+<a name="l00713"></a>00713     }
+<a name="l00714"></a>00714    
+<a name="l00715"></a>00715 <span class="preprocessor">#if TBB_DEPRECATED </span>
+<a name="l00717"></a><a class="code" href="a00136.html#1693d1da41b1a8235871be9c6633be35">00717</a> <span class="preprocessor">    void compact() {shrink_to_fit();}</span>
+<a name="l00718"></a>00718 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DEPRECATED */</span>
+<a name="l00719"></a>00719 
+<a name="l00721"></a>00721     <span class="keywordtype">void</span> shrink_to_fit();
+<a name="l00722"></a>00722 
+<a name="l00724"></a><a class="code" href="a00136.html#2c248a017f0576df3e7cd99627836fd6">00724</a>     size_type max_size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (~size_type(0))/<span class="keyword">sizeof</span>(T);}
+<a name="l00725"></a>00725 
+<a name="l00726"></a>00726     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00727"></a>00727     <span class="comment">// STL support</span>
+<a name="l00728"></a>00728     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00729"></a>00729 
+<a name="l00731"></a><a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">00731</a>     iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0);}
+<a name="l00733"></a><a class="code" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">00733</a>     iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,size());}
+<a name="l00735"></a><a class="code" href="a00136.html#78a06182276ff758788d4c0623ae0d71">00735</a>     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
+<a name="l00737"></a><a class="code" href="a00136.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">00737</a>     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,size());}
+<a name="l00739"></a><a class="code" href="a00136.html#f88fcf1c920693c39bd9709db33c199f">00739</a>     const_iterator cbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
+<a name="l00741"></a><a class="code" href="a00136.html#0c15a5d0f1cf75d687dabba07da1d46b">00741</a>     const_iterator cend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,size());}
+<a name="l00743"></a><a class="code" href="a00136.html#5e220926d09236d98f04fe0721e5f9a1">00743</a>     reverse_iterator rbegin() {<span class="keywordflow">return</span> reverse_iterator(end());}
+<a name="l00745"></a><a class="code" href="a00136.html#290119a4eb43cd6a9e98fa17016ba3c2">00745</a>     reverse_iterator rend() {<span class="keywordflow">return</span> reverse_iterator(begin());}
+<a name="l00747"></a><a class="code" href="a00136.html#9f9c103e18d5f212703805354074ad44">00747</a>     const_reverse_iterator rbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
+<a name="l00749"></a><a class="code" href="a00136.html#d438b9b32ea3a8ffb703015b6dce055b">00749</a>     const_reverse_iterator rend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
+<a name="l00751"></a><a class="code" href="a00136.html#db78a1d28c9c966050e8a2926d834a33">00751</a>     const_reverse_iterator crbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
+<a name="l00753"></a><a class="code" href="a00136.html#fff9cece89438587997ebedf93c5e962">00753</a>     const_reverse_iterator crend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
+<a name="l00755"></a><a class="code" href="a00136.html#15181759c0bfa2ddce5d10c7550e0002">00755</a>     reference front() {
+<a name="l00756"></a>00756         __TBB_ASSERT( size()&gt;0, NULL);
+<a name="l00757"></a>00757         <span class="keywordflow">return</span> static_cast&lt;T*&gt;(my_segment[0].array)[0];
+<a name="l00758"></a>00758     }
+<a name="l00760"></a><a class="code" href="a00136.html#502615a858eb9fa0390ee59169065e90">00760</a>     const_reference front()<span class="keyword"> const </span>{
+<a name="l00761"></a>00761         __TBB_ASSERT( size()&gt;0, NULL);
+<a name="l00762"></a>00762         <span class="keywordflow">return</span> static_cast&lt;const T*&gt;(my_segment[0].array)[0];
+<a name="l00763"></a>00763     }
+<a name="l00765"></a><a class="code" href="a00136.html#41ce48d6015a1a2812d41cf620ec3476">00765</a>     reference back() {
+<a name="l00766"></a>00766         __TBB_ASSERT( size()&gt;0, NULL);
+<a name="l00767"></a>00767         <span class="keywordflow">return</span> internal_subscript( size()-1 );
+<a name="l00768"></a>00768     }
+<a name="l00770"></a><a class="code" href="a00136.html#bd518e204107d07fd08d0ec5bdfd383d">00770</a>     const_reference back()<span class="keyword"> const </span>{
+<a name="l00771"></a>00771         __TBB_ASSERT( size()&gt;0, NULL);
+<a name="l00772"></a>00772         <span class="keywordflow">return</span> internal_subscript( size()-1 );
+<a name="l00773"></a>00773     }
+<a name="l00775"></a><a class="code" href="a00136.html#2fdba8e90de6a4d2300222236d46758e">00775</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this-&gt;my_allocator; }
+<a name="l00776"></a>00776 
+<a name="l00778"></a><a class="code" href="a00136.html#423e5aa15e0e3309ad86d026fd85f6f6">00778</a>     <span class="keywordtype">void</span> assign(size_type n, const_reference t) {
+<a name="l00779"></a>00779         clear();
+<a name="l00780"></a>00780         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast&lt;const void*&gt;(&amp;t), &amp;destroy_array, &amp;initialize_array_by );
+<a name="l00781"></a>00781     }
+<a name="l00782"></a>00782 
+<a name="l00784"></a>00784     <span class="keyword">template</span>&lt;<span class="keyword">class</span> I&gt;
+<a name="l00785"></a><a class="code" href="a00136.html#93a06b3112cb804f42f40efb5e7387b4">00785</a>     <span class="keywordtype">void</span> assign(I first, I last) {
+<a name="l00786"></a>00786         clear(); internal_assign_range( first, last, <span class="keyword">static_cast</span>&lt;is_integer_tag&lt;std::numeric_limits&lt;I&gt;::is_integer&gt; *&gt;(0) );
+<a name="l00787"></a>00787     }
+<a name="l00788"></a>00788 
+<a name="l00790"></a><a class="code" href="a00136.html#96c9c4bd968ed3edb8dd276854d2dae0">00790</a>     <span class="keywordtype">void</span> swap(<a class="code" href="a00136.html">concurrent_vector</a> &amp;vector) {
+<a name="l00791"></a>00791         <span class="keywordflow">if</span>( <span class="keyword">this</span> != &amp;vector ) {
+<a name="l00792"></a>00792             concurrent_vector_base_v3::internal_swap(static_cast&lt;concurrent_vector_base_v3&amp;&gt;(vector));
+<a name="l00793"></a>00793             std::swap(this-&gt;my_allocator, vector.my_allocator);
+<a name="l00794"></a>00794         }
+<a name="l00795"></a>00795     }
+<a name="l00796"></a>00796 
+<a name="l00798"></a>00798 
+<a name="l00799"></a><a class="code" href="a00136.html#26f937a359a66b6aae904c3cd9a3c444">00799</a>     <span class="keywordtype">void</span> clear() {
+<a name="l00800"></a>00800         internal_clear(&amp;destroy_array);
+<a name="l00801"></a>00801     }
+<a name="l00802"></a>00802 
+<a name="l00804"></a><a class="code" href="a00136.html#da2444b28bb840d38f60d0030333a5fc">00804</a>     ~<a class="code" href="a00136.html">concurrent_vector</a>() {
+<a name="l00805"></a>00805         segment_t *table = my_segment;
+<a name="l00806"></a>00806         internal_free_segments( reinterpret_cast&lt;void**&gt;(table), internal_clear(&amp;destroy_array), my_first_block );
+<a name="l00807"></a>00807         <span class="comment">// base class destructor call should be then</span>
+<a name="l00808"></a>00808     }
+<a name="l00809"></a>00809 
+<a name="l00810"></a>00810     <span class="keyword">const</span> internal::concurrent_vector_base_v3 &amp;internal_vector_base()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
+<a name="l00811"></a>00811 <span class="keyword">private</span>:
+<a name="l00813"></a>00813     <span class="keyword">static</span> <span class="keywordtype">void</span> *internal_allocator(internal::concurrent_vector_base_v3 &amp;vb, size_t k) {
+<a name="l00814"></a>00814         <span class="keywordflow">return</span> static_cast&lt;concurrent_vector&lt;T, A&gt;&amp;&gt;(vb).my_allocator.allocate(k);
+<a name="l00815"></a>00815     }
+<a name="l00817"></a>00817     <span class="keywordtype">void</span> internal_free_segments(<span class="keywordtype">void</span> *table[], segment_index_t k, segment_index_t first_block);
+<a name="l00818"></a>00818 
+<a name="l00820"></a>00820     T&amp; internal_subscript( size_type index ) <span class="keyword">const</span>;
+<a name="l00821"></a>00821 
+<a name="l00823"></a>00823     T&amp; internal_subscript_with_exceptions( size_type index ) <span class="keyword">const</span>;
+<a name="l00824"></a>00824 
+<a name="l00826"></a>00826     <span class="keywordtype">void</span> internal_assign_n(size_type n, const_pointer p) {
+<a name="l00827"></a>00827         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast&lt;const void*&gt;(p), &amp;destroy_array, p? &amp;initialize_array_by : &amp;initialize_array );
+<a name="l00828"></a>00828     }
+<a name="l00829"></a>00829 
+<a name="l00831"></a>00831     <span class="keyword">template</span>&lt;<span class="keywordtype">bool</span> B&gt; <span class="keyword">class </span>is_integer_tag;
+<a name="l00832"></a>00832 
+<a name="l00834"></a>00834     <span class="keyword">template</span>&lt;<span class="keyword">class</span> I&gt;
+<a name="l00835"></a>00835     <span class="keywordtype">void</span> internal_assign_range(I first, I last, is_integer_tag&lt;true&gt; *) {
+<a name="l00836"></a>00836         internal_assign_n(static_cast&lt;size_type&gt;(first), &amp;static_cast&lt;T&amp;&gt;(last));
+<a name="l00837"></a>00837     }
+<a name="l00839"></a>00839     <span class="keyword">template</span>&lt;<span class="keyword">class</span> I&gt;
+<a name="l00840"></a>00840     <span class="keywordtype">void</span> internal_assign_range(I first, I last, is_integer_tag&lt;false&gt; *) {
+<a name="l00841"></a>00841         internal_assign_iterators(first, last);
+<a name="l00842"></a>00842     }
+<a name="l00844"></a>00844     <span class="keyword">template</span>&lt;<span class="keyword">class</span> I&gt;
+<a name="l00845"></a>00845     <span class="keywordtype">void</span> internal_assign_iterators(I first, I last);
+<a name="l00846"></a>00846 
+<a name="l00848"></a>00848     <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC initialize_array( <span class="keywordtype">void</span>* begin, <span class="keyword">const</span> <span class="keywordtype">void</span>*, size_type n );
+<a name="l00849"></a>00849 
+<a name="l00851"></a>00851     <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC initialize_array_by( <span class="keywordtype">void</span>* begin, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
+<a name="l00852"></a>00852 
+<a name="l00854"></a>00854     <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC copy_array( <span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
+<a name="l00855"></a>00855 
+<a name="l00857"></a>00857     <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC assign_array( <span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
+<a name="l00858"></a>00858 
+<a name="l00860"></a>00860     <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC destroy_array( <span class="keywordtype">void</span>* begin, size_type n );
+<a name="l00861"></a>00861 
+<a name="l00863"></a>00863     <span class="keyword">class </span>internal_loop_guide : internal::no_copy {
+<a name="l00864"></a>00864     <span class="keyword">public</span>:
+<a name="l00865"></a>00865         <span class="keyword">const</span> pointer array;
+<a name="l00866"></a>00866         <span class="keyword">const</span> size_type n;
+<a name="l00867"></a>00867         size_type i;
+<a name="l00868"></a>00868         internal_loop_guide(size_type ntrials, <span class="keywordtype">void</span> *ptr)
+<a name="l00869"></a>00869             : array(static_cast&lt;pointer&gt;(ptr)), n(ntrials), i(0) {}
+<a name="l00870"></a>00870         <span class="keywordtype">void</span> init() {   <span class="keywordflow">for</span>(; i &lt; n; ++i) <span class="keyword">new</span>( &amp;array[i] ) T(); }
+<a name="l00871"></a>00871         <span class="keywordtype">void</span> init(<span class="keyword">const</span> <span class="keywordtype">void</span> *src) { <span class="keywordflow">for</span>(; i &lt; n; ++i) new( &amp;array[i] ) T(*static_cast&lt;const T*&gt;(src)); }
+<a name="l00872"></a>00872         <span class="keywordtype">void</span> copy(<span class="keyword">const</span> <span class="keywordtype">void</span> *src) { <span class="keywordflow">for</span>(; i &lt; n; ++i) new( &amp;array[i] ) T(static_cast&lt;const T*&gt;(src)[i]); }
+<a name="l00873"></a>00873         <span class="keywordtype">void</span> assign(<span class="keyword">const</span> <span class="keywordtype">void</span> *src) { <span class="keywordflow">for</span>(; i &lt; n; ++i) array[i] = static_cast&lt;const T*&gt;(src)[i]; }
+<a name="l00874"></a>00874         <span class="keyword">template</span>&lt;<span class="keyword">class</span> I&gt; <span class="keywordtype">void</span> iterate(I &amp;src) { <span class="keywordflow">for</span>(; i &lt; n; ++i, ++src) <span class="keyword">new</span>( &amp;array[i] ) T( *src ); }
+<a name="l00875"></a>00875         ~internal_loop_guide() {
+<a name="l00876"></a>00876             <span class="keywordflow">if</span>(i &lt; n) <span class="comment">// if exception raised, do zerroing on the rest of items</span>
+<a name="l00877"></a>00877                 std::memset(array+i, 0, (n-i)*<span class="keyword">sizeof</span>(value_type));
+<a name="l00878"></a>00878         }
+<a name="l00879"></a>00879     };
+<a name="l00880"></a>00880 };
+<a name="l00881"></a>00881 
+<a name="l00882"></a>00882 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00883"></a><a class="code" href="a00136.html#03c6f4cf66532bf4cc907ee738a9a186">00883</a> <span class="keywordtype">void</span> <a class="code" href="a00136.html">concurrent_vector&lt;T, A&gt;::shrink_to_fit</a>() {
+<a name="l00884"></a>00884     internal_segments_table old;
+<a name="l00885"></a>00885     <span class="keywordflow">try</span> {
+<a name="l00886"></a>00886         <span class="keywordflow">if</span>( internal_compact( <span class="keyword">sizeof</span>(T), &amp;old, &amp;destroy_array, &amp;copy_array ) )
+<a name="l00887"></a>00887             internal_free_segments( old.table, pointers_per_long_table, old.first_block ); <span class="comment">// free joined and unnecessary segments</span>
+<a name="l00888"></a>00888     } <span class="keywordflow">catch</span>(...) {
+<a name="l00889"></a>00889         <span class="keywordflow">if</span>( old.first_block ) <span class="comment">// free segment allocated for compacting. Only for support of exceptions in ctor of user T[ype]</span>
+<a name="l00890"></a>00890             internal_free_segments( old.table, 1, old.first_block );
+<a name="l00891"></a>00891         <span class="keywordflow">throw</span>;
+<a name="l00892"></a>00892     }
+<a name="l00893"></a>00893 }
+<a name="l00894"></a>00894 
+<a name="l00895"></a>00895 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00896"></a>00896 <span class="keywordtype">void</span> <a class="code" href="a00136.html">concurrent_vector&lt;T, A&gt;::internal_free_segments</a>(<span class="keywordtype">void</span> *table[], segment_index_t k, segment_index_t first_block) {
+<a name="l00897"></a>00897     <span class="comment">// Free the arrays</span>
+<a name="l00898"></a>00898     <span class="keywordflow">while</span>( k &gt; first_block ) {
+<a name="l00899"></a>00899         --k;
+<a name="l00900"></a>00900         T* array = static_cast&lt;T*&gt;(table[k]);
+<a name="l00901"></a>00901         table[k] = NULL;
+<a name="l00902"></a>00902         <span class="keywordflow">if</span>( array &gt; __TBB_BAD_ALLOC ) <span class="comment">// check for correct segment pointer</span>
+<a name="l00903"></a>00903             this-&gt;my_allocator.deallocate( array, segment_size(k) );
+<a name="l00904"></a>00904     }
+<a name="l00905"></a>00905     T* array = static_cast&lt;T*&gt;(table[0]);
+<a name="l00906"></a>00906     <span class="keywordflow">if</span>( array &gt; __TBB_BAD_ALLOC ) {
+<a name="l00907"></a>00907         __TBB_ASSERT( first_block &gt; 0, NULL );
+<a name="l00908"></a>00908         <span class="keywordflow">while</span>(k &gt; 0) table[--k] = NULL;
+<a name="l00909"></a>00909         this-&gt;my_allocator.deallocate( array, segment_size(first_block) );
+<a name="l00910"></a>00910     }
+<a name="l00911"></a>00911 }
+<a name="l00912"></a>00912 
+<a name="l00913"></a>00913 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00914"></a>00914 T&amp; concurrent_vector&lt;T, A&gt;::internal_subscript( size_type index )<span class="keyword"> const </span>{
+<a name="l00915"></a>00915     __TBB_ASSERT( index &lt; my_early_size, <span class="stringliteral">"index out of bounds"</span> );
+<a name="l00916"></a>00916     size_type j = index;
+<a name="l00917"></a>00917     segment_index_t k = segment_base_index_of( j );
+<a name="l00918"></a>00918     __TBB_ASSERT( my_segment != (segment_t*)my_storage || k &lt; pointers_per_short_table, <span class="stringliteral">"index is being allocated"</span> );
+<a name="l00919"></a>00919     <span class="comment">// no need in __TBB_load_with_acquire since thread works in own space or gets </span>
+<a name="l00920"></a>00920 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00921"></a>00921 <span class="preprocessor"></span>    T* array = static_cast&lt;T*&gt;( tbb::internal::itt_load_pointer_v3(&amp;my_segment[k].array));
+<a name="l00922"></a>00922 <span class="preprocessor">#else</span>
+<a name="l00923"></a>00923 <span class="preprocessor"></span>    T* array = static_cast&lt;T*&gt;(my_segment[k].array);
+<a name="l00924"></a>00924 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+<a name="l00925"></a>00925     __TBB_ASSERT( array != __TBB_BAD_ALLOC, <span class="stringliteral">"the instance is broken by bad allocation. Use at() instead"</span> );
+<a name="l00926"></a>00926     __TBB_ASSERT( array, <span class="stringliteral">"index is being allocated"</span> );
+<a name="l00927"></a>00927     <span class="keywordflow">return</span> array[j];
+<a name="l00928"></a>00928 }
+<a name="l00929"></a>00929 
+<a name="l00930"></a>00930 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00931"></a>00931 T&amp; concurrent_vector&lt;T, A&gt;::internal_subscript_with_exceptions( size_type index )<span class="keyword"> const </span>{
+<a name="l00932"></a>00932     <span class="keywordflow">if</span>( index &gt;= my_early_size )
+<a name="l00933"></a>00933         internal_throw_exception(0); <span class="comment">// throw std::out_of_range</span>
+<a name="l00934"></a>00934     size_type j = index;
+<a name="l00935"></a>00935     segment_index_t k = segment_base_index_of( j );
+<a name="l00936"></a>00936     <span class="keywordflow">if</span>( my_segment == (segment_t*)my_storage &amp;&amp; k &gt;= pointers_per_short_table )
+<a name="l00937"></a>00937         internal_throw_exception(1); <span class="comment">// throw std::range_error</span>
+<a name="l00938"></a>00938     <span class="keywordtype">void</span> *array = my_segment[k].array; <span class="comment">// no need in __TBB_load_with_acquire</span>
+<a name="l00939"></a>00939     <span class="keywordflow">if</span>( array &lt;= __TBB_BAD_ALLOC ) <span class="comment">// check for correct segment pointer</span>
+<a name="l00940"></a>00940         internal_throw_exception(2); <span class="comment">// throw std::range_error</span>
+<a name="l00941"></a>00941     <span class="keywordflow">return</span> static_cast&lt;T*&gt;(array)[j];
+<a name="l00942"></a>00942 }
+<a name="l00943"></a>00943 
+<a name="l00944"></a>00944 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt; <span class="keyword">template</span>&lt;<span class="keyword">class</span> I&gt;
+<a name="l00945"></a>00945 <span class="keywordtype">void</span> concurrent_vector&lt;T, A&gt;::internal_assign_iterators(I first, I last) {
+<a name="l00946"></a>00946     __TBB_ASSERT(my_early_size == 0, NULL);
+<a name="l00947"></a>00947     size_type n = std::distance(first, last);
+<a name="l00948"></a>00948     <span class="keywordflow">if</span>( !n ) <span class="keywordflow">return</span>;
+<a name="l00949"></a>00949     internal_reserve(n, <span class="keyword">sizeof</span>(T), <a class="code" href="a00136.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>());
+<a name="l00950"></a>00950     my_early_size = n;
+<a name="l00951"></a>00951     segment_index_t k = 0;
+<a name="l00952"></a>00952     size_type sz = segment_size( my_first_block );
+<a name="l00953"></a>00953     <span class="keywordflow">while</span>( sz &lt; n ) {
+<a name="l00954"></a>00954         internal_loop_guide loop(sz, my_segment[k].array);
+<a name="l00955"></a>00955         loop.iterate(first);
+<a name="l00956"></a>00956         n -= sz;
+<a name="l00957"></a>00957         <span class="keywordflow">if</span>( !k ) k = my_first_block;
+<a name="l00958"></a>00958         <span class="keywordflow">else</span> { ++k; sz &lt;&lt;= 1; }
+<a name="l00959"></a>00959     }
+<a name="l00960"></a>00960     internal_loop_guide loop(n, my_segment[k].array);
+<a name="l00961"></a>00961     loop.iterate(first);
+<a name="l00962"></a>00962 }
+<a name="l00963"></a>00963 
+<a name="l00964"></a>00964 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00965"></a>00965 <span class="keywordtype">void</span> concurrent_vector&lt;T, A&gt;::initialize_array( <span class="keywordtype">void</span>* begin, <span class="keyword">const</span> <span class="keywordtype">void</span> *, size_type n ) {
+<a name="l00966"></a>00966     internal_loop_guide loop(n, begin); loop.init();
+<a name="l00967"></a>00967 }
+<a name="l00968"></a>00968 
+<a name="l00969"></a>00969 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00970"></a>00970 <span class="keywordtype">void</span> concurrent_vector&lt;T, A&gt;::initialize_array_by( <span class="keywordtype">void</span>* begin, <span class="keyword">const</span> <span class="keywordtype">void</span> *src, size_type n ) {
+<a name="l00971"></a>00971     internal_loop_guide loop(n, begin); loop.init(src);
+<a name="l00972"></a>00972 }
+<a name="l00973"></a>00973 
+<a name="l00974"></a>00974 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00975"></a>00975 <span class="keywordtype">void</span> concurrent_vector&lt;T, A&gt;::copy_array( <span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n ) {
+<a name="l00976"></a>00976     internal_loop_guide loop(n, dst); loop.copy(src);
+<a name="l00977"></a>00977 }
+<a name="l00978"></a>00978 
+<a name="l00979"></a>00979 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00980"></a>00980 <span class="keywordtype">void</span> concurrent_vector&lt;T, A&gt;::assign_array( <span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n ) {
+<a name="l00981"></a>00981     internal_loop_guide loop(n, dst); loop.assign(src);
+<a name="l00982"></a>00982 }
+<a name="l00983"></a>00983 
+<a name="l00984"></a>00984 <span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; !defined(__INTEL_COMPILER) </span>
+<a name="l00985"></a>00985 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warning</span>
+<a name="l00986"></a>00986 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00987"></a>00987 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4189)</span>
+<a name="l00988"></a>00988 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00989"></a>00989 <span class="preprocessor"></span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l00990"></a>00990 <span class="keywordtype">void</span> concurrent_vector&lt;T, A&gt;::destroy_array( <span class="keywordtype">void</span>* begin, size_type n ) {
+<a name="l00991"></a>00991     T* array = static_cast&lt;T*&gt;(begin);
+<a name="l00992"></a>00992     <span class="keywordflow">for</span>( size_type j=n; j&gt;0; --j )
+<a name="l00993"></a>00993         array[j-1].~T(); <span class="comment">// destructors are supposed to not throw any exceptions</span>
+<a name="l00994"></a>00994 }
+<a name="l00995"></a>00995 <span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; !defined(__INTEL_COMPILER) </span>
+<a name="l00996"></a>00996 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00997"></a>00997 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4189 is back </span>
+<a name="l00998"></a>00998 <span class="preprocessor"></span>
+<a name="l00999"></a>00999 <span class="comment">// concurrent_vector's template functions</span>
+<a name="l01000"></a>01000 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2&gt;
+<a name="l01001"></a>01001 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> concurrent_vector&lt;T, A1&gt; &amp;a, <span class="keyword">const</span> concurrent_vector&lt;T, A2&gt; &amp;b) {
+<a name="l01002"></a>01002     <span class="comment">// Simply:    return a.size() == b.size() &amp;&amp; std::equal(a.begin(), a.end(), b.begin());</span>
+<a name="l01003"></a>01003     <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01004"></a>01004     <span class="keyword">typename</span> concurrent_vector&lt;T, A1&gt;::const_iterator i(a.begin());
+<a name="l01005"></a>01005     <span class="keyword">typename</span> concurrent_vector&lt;T, A2&gt;::const_iterator j(b.begin());
+<a name="l01006"></a>01006     <span class="keywordflow">for</span>(; i != a.end(); ++i, ++j)
+<a name="l01007"></a>01007         <span class="keywordflow">if</span>( !(*i == *j) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01008"></a>01008     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01009"></a>01009 }
+<a name="l01010"></a>01010 
+<a name="l01011"></a>01011 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2&gt;
+<a name="l01012"></a>01012 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> concurrent_vector&lt;T, A1&gt; &amp;a, <span class="keyword">const</span> concurrent_vector&lt;T, A2&gt; &amp;b)
+<a name="l01013"></a>01013 {    <span class="keywordflow">return</span> !(a == b); }
+<a name="l01014"></a>01014 
+<a name="l01015"></a>01015 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2&gt;
+<a name="l01016"></a>01016 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator&lt;(const concurrent_vector&lt;T, A1&gt; &amp;a, <span class="keyword">const</span> concurrent_vector&lt;T, A2&gt; &amp;b)
+<a name="l01017"></a>01017 {    <span class="keywordflow">return</span> (std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())); }
+<a name="l01018"></a>01018 
+<a name="l01019"></a>01019 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2&gt;
+<a name="l01020"></a>01020 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator&gt;(<span class="keyword">const</span> concurrent_vector&lt;T, A1&gt; &amp;a, <span class="keyword">const</span> concurrent_vector&lt;T, A2&gt; &amp;b)
+<a name="l01021"></a>01021 {    <span class="keywordflow">return</span> b &lt; a; }
+<a name="l01022"></a>01022 
+<a name="l01023"></a>01023 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2&gt;
+<a name="l01024"></a>01024 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator&lt;=(const concurrent_vector&lt;T, A1&gt; &amp;a, <span class="keyword">const</span> concurrent_vector&lt;T, A2&gt; &amp;b)
+<a name="l01025"></a>01025 {    <span class="keywordflow">return</span> !(b &lt; a); }
+<a name="l01026"></a>01026 
+<a name="l01027"></a>01027 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2&gt;
+<a name="l01028"></a>01028 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator&gt;=(<span class="keyword">const</span> concurrent_vector&lt;T, A1&gt; &amp;a, <span class="keyword">const</span> concurrent_vector&lt;T, A2&gt; &amp;b)
+<a name="l01029"></a>01029 {    <span class="keywordflow">return</span> !(a &lt; b); }
+<a name="l01030"></a>01030 
+<a name="l01031"></a>01031 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">class</span> A&gt;
+<a name="l01032"></a>01032 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(concurrent_vector&lt;T, A&gt; &amp;a, concurrent_vector&lt;T, A&gt; &amp;b)
+<a name="l01033"></a>01033 {    a.swap( b ); }
+<a name="l01034"></a>01034 
+<a name="l01035"></a>01035 } <span class="comment">// namespace tbb</span>
+<a name="l01036"></a>01036 
+<a name="l01037"></a>01037 <span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; !defined(__INTEL_COMPILER) &amp;&amp; defined(_Wp64)</span>
+<a name="l01038"></a>01038 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l01039"></a>01039 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4267 is back</span>
+<a name="l01040"></a>01040 <span class="preprocessor"></span>
+<a name="l01041"></a>01041 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_vector_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00291.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00291.html
new file mode 100644 (file)
index 0000000..edca49a
--- /dev/null
@@ -0,0 +1,870 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>enumerable_thread_specific.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>enumerable_thread_specific.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_enumerable_thread_specific_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_enumerable_thread_specific_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "concurrent_vector.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_thread.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "concurrent_hash_map.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#if __SUNPRO_CC</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include &lt;string.h&gt;</span>  <span class="comment">// for memcpy</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a>00032 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include &lt;windows.h&gt;</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#else</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#include &lt;pthread.h&gt;</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#endif</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a>00038 <span class="keyword">namespace </span>tbb {
+<a name="l00039"></a>00039 
+<a name="l00041"></a><a class="code" href="a00229.html#a8622ae61b7e7737dac26542e181178e">00041</a>     <span class="keyword">enum</span> <a class="code" href="a00229.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> { ets_key_per_instance, ets_no_key };
+<a name="l00042"></a>00042 
+<a name="l00044"></a>00044     <span class="keyword">namespace </span>internal {
+<a name="l00045"></a>00045         
+<a name="l00047"></a>00047         <span class="keyword">template</span>&lt; <span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value &gt;
+<a name="l00048"></a>00048         <span class="keyword">class </span>enumerable_thread_specific_iterator 
+<a name="l00049"></a>00049 #if defined(_WIN64) &amp;&amp; defined(_MSC_VER) 
+<a name="l00050"></a>00050             <span class="comment">// Ensure that Microsoft's internal template function _Val_type works correctly.</span>
+<a name="l00051"></a>00051             : public std::iterator&lt;std::random_access_iterator_tag,Value&gt;
+<a name="l00052"></a>00052 #endif <span class="comment">/* defined(_WIN64) &amp;&amp; defined(_MSC_VER) */</span>
+<a name="l00053"></a>00053         {
+<a name="l00055"></a>00055         
+<a name="l00056"></a>00056             Container *my_container;
+<a name="l00057"></a>00057             <span class="keyword">typename</span> Container::size_type my_index;
+<a name="l00058"></a>00058             <span class="keyword">mutable</span> Value *my_value;
+<a name="l00059"></a>00059         
+<a name="l00060"></a>00060             <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T&gt;
+<a name="l00061"></a>00061             <span class="keyword">friend</span> enumerable_thread_specific_iterator&lt;C,T&gt; operator+( ptrdiff_t offset, 
+<a name="l00062"></a>00062                                                                        <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;C,T&gt;&amp; v );
+<a name="l00063"></a>00063         
+<a name="l00064"></a>00064             <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00065"></a>00065             <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;C,T&gt;&amp; i, 
+<a name="l00066"></a>00066                                     <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;C,U&gt;&amp; j );
+<a name="l00067"></a>00067         
+<a name="l00068"></a>00068             <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00069"></a>00069             <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator&lt;( const enumerable_thread_specific_iterator&lt;C,T&gt;&amp; i, 
+<a name="l00070"></a>00070                                    <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;C,U&gt;&amp; j );
+<a name="l00071"></a>00071         
+<a name="l00072"></a>00072             <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00073"></a>00073             <span class="keyword">friend</span> ptrdiff_t operator-( <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;C,U&gt;&amp; j );
+<a name="l00074"></a>00074             
+<a name="l00075"></a>00075             <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> U&gt; 
+<a name="l00076"></a>00076             <span class="keyword">friend</span> <span class="keyword">class </span>enumerable_thread_specific_iterator;
+<a name="l00077"></a>00077         
+<a name="l00078"></a>00078             <span class="keyword">public</span>:
+<a name="l00079"></a>00079         
+<a name="l00080"></a>00080             enumerable_thread_specific_iterator( <span class="keyword">const</span> Container &amp;container, <span class="keyword">typename</span> Container::size_type index ) : 
+<a name="l00081"></a>00081                 my_container(&amp;const_cast&lt;Container &amp;&gt;(container)), my_index(index), my_value(NULL) {}
+<a name="l00082"></a>00082         
+<a name="l00084"></a>00084             enumerable_thread_specific_iterator() : my_container(NULL), my_index(0), my_value(NULL) {}
+<a name="l00085"></a>00085         
+<a name="l00086"></a>00086             <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt;
+<a name="l00087"></a>00087             enumerable_thread_specific_iterator( <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container, U&gt;&amp; other ) :
+<a name="l00088"></a>00088                     my_container( other.my_container ), my_index( other.my_index), my_value( const_cast&lt;Value *&gt;(other.my_value) ) {}
+<a name="l00089"></a>00089         
+<a name="l00090"></a>00090             enumerable_thread_specific_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00091"></a>00091                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator(*my_container, my_index + offset);
+<a name="l00092"></a>00092             }
+<a name="l00093"></a>00093         
+<a name="l00094"></a>00094             enumerable_thread_specific_iterator &amp;operator+=( ptrdiff_t offset ) {
+<a name="l00095"></a>00095                 my_index += offset;
+<a name="l00096"></a>00096                 my_value = NULL;
+<a name="l00097"></a>00097                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00098"></a>00098             }
+<a name="l00099"></a>00099         
+<a name="l00100"></a>00100             enumerable_thread_specific_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00101"></a>00101                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator( *my_container, my_index-offset );
+<a name="l00102"></a>00102             }
+<a name="l00103"></a>00103         
+<a name="l00104"></a>00104             enumerable_thread_specific_iterator &amp;operator-=( ptrdiff_t offset ) {
+<a name="l00105"></a>00105                 my_index -= offset;
+<a name="l00106"></a>00106                 my_value = NULL;
+<a name="l00107"></a>00107                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00108"></a>00108             }
+<a name="l00109"></a>00109         
+<a name="l00110"></a>00110             Value&amp; operator*()<span class="keyword"> const </span>{
+<a name="l00111"></a>00111                 Value* value = my_value;
+<a name="l00112"></a>00112                 <span class="keywordflow">if</span>( !value ) {
+<a name="l00113"></a>00113                     value = my_value = &amp;(*my_container)[my_index].value;
+<a name="l00114"></a>00114                 }
+<a name="l00115"></a>00115                 __TBB_ASSERT( value==&amp;(*my_container)[my_index].value, <span class="stringliteral">"corrupt cache"</span> );
+<a name="l00116"></a>00116                 <span class="keywordflow">return</span> *value;
+<a name="l00117"></a>00117             }
+<a name="l00118"></a>00118         
+<a name="l00119"></a>00119             Value&amp; operator[]( ptrdiff_t k )<span class="keyword"> const </span>{
+<a name="l00120"></a>00120                <span class="keywordflow">return</span> (*my_container)[my_index + k].value;
+<a name="l00121"></a>00121             }
+<a name="l00122"></a>00122         
+<a name="l00123"></a>00123             Value* operator-&gt;()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &amp;operator*();}
+<a name="l00124"></a>00124         
+<a name="l00125"></a>00125             enumerable_thread_specific_iterator&amp; operator++() {
+<a name="l00126"></a>00126                 ++my_index;
+<a name="l00127"></a>00127                 my_value = NULL;
+<a name="l00128"></a>00128                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00129"></a>00129             }
+<a name="l00130"></a>00130         
+<a name="l00131"></a>00131             enumerable_thread_specific_iterator&amp; operator--() {
+<a name="l00132"></a>00132                 --my_index;
+<a name="l00133"></a>00133                 my_value = NULL;
+<a name="l00134"></a>00134                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00135"></a>00135             }
+<a name="l00136"></a>00136         
+<a name="l00138"></a>00138             enumerable_thread_specific_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00139"></a>00139                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
+<a name="l00140"></a>00140                 ++my_index;
+<a name="l00141"></a>00141                 my_value = NULL;
+<a name="l00142"></a>00142                 <span class="keywordflow">return</span> result;
+<a name="l00143"></a>00143             }
+<a name="l00144"></a>00144         
+<a name="l00146"></a>00146             enumerable_thread_specific_iterator operator--(<span class="keywordtype">int</span>) {
+<a name="l00147"></a>00147                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
+<a name="l00148"></a>00148                 --my_index;
+<a name="l00149"></a>00149                 my_value = NULL;
+<a name="l00150"></a>00150                 <span class="keywordflow">return</span> result;
+<a name="l00151"></a>00151             }
+<a name="l00152"></a>00152         
+<a name="l00153"></a>00153             <span class="comment">// STL support</span>
+<a name="l00154"></a>00154             <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00155"></a>00155             <span class="keyword">typedef</span> Value value_type;
+<a name="l00156"></a>00156             <span class="keyword">typedef</span> Value* pointer;
+<a name="l00157"></a>00157             <span class="keyword">typedef</span> Value&amp; reference;
+<a name="l00158"></a>00158             <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
+<a name="l00159"></a>00159         };
+<a name="l00160"></a>00160         
+<a name="l00161"></a>00161         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T&gt;
+<a name="l00162"></a>00162         enumerable_thread_specific_iterator&lt;Container,T&gt; operator+( ptrdiff_t offset, 
+<a name="l00163"></a>00163                                                                     <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container,T&gt;&amp; v ) {
+<a name="l00164"></a>00164             <span class="keywordflow">return</span> enumerable_thread_specific_iterator&lt;Container,T&gt;( v.my_container, v.my_index + offset );
+<a name="l00165"></a>00165         }
+<a name="l00166"></a>00166         
+<a name="l00167"></a>00167         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00168"></a>00168         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container,T&gt;&amp; i, 
+<a name="l00169"></a>00169                          <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00170"></a>00170             <span class="keywordflow">return</span> i.my_index==j.my_index &amp;&amp; i.my_container == j.my_container;
+<a name="l00171"></a>00171         }
+<a name="l00172"></a>00172         
+<a name="l00173"></a>00173         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00174"></a>00174         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container,T&gt;&amp; i, 
+<a name="l00175"></a>00175                          <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00176"></a>00176             <span class="keywordflow">return</span> !(i==j);
+<a name="l00177"></a>00177         }
+<a name="l00178"></a>00178         
+<a name="l00179"></a>00179         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00180"></a>00180         <span class="keywordtype">bool</span> operator&lt;( const enumerable_thread_specific_iterator&lt;Container,T&gt;&amp; i, 
+<a name="l00181"></a>00181                         <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00182"></a>00182             <span class="keywordflow">return</span> i.my_index&lt;j.my_index;
+<a name="l00183"></a>00183         }
+<a name="l00184"></a>00184         
+<a name="l00185"></a>00185         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00186"></a>00186         <span class="keywordtype">bool</span> operator&gt;( <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container,T&gt;&amp; i, 
+<a name="l00187"></a>00187                         <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00188"></a>00188             <span class="keywordflow">return</span> j&lt;i;
+<a name="l00189"></a>00189         }
+<a name="l00190"></a>00190         
+<a name="l00191"></a>00191         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00192"></a>00192         <span class="keywordtype">bool</span> operator&gt;=( <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container,T&gt;&amp; i, 
+<a name="l00193"></a>00193                          <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00194"></a>00194             <span class="keywordflow">return</span> !(i&lt;j);
+<a name="l00195"></a>00195         }
+<a name="l00196"></a>00196         
+<a name="l00197"></a>00197         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00198"></a>00198         <span class="keywordtype">bool</span> operator&lt;=( const enumerable_thread_specific_iterator&lt;Container,T&gt;&amp; i, 
+<a name="l00199"></a>00199                          <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00200"></a>00200             <span class="keywordflow">return</span> !(j&lt;i);
+<a name="l00201"></a>00201         }
+<a name="l00202"></a>00202         
+<a name="l00203"></a>00203         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00204"></a>00204         ptrdiff_t operator-( <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container,T&gt;&amp; i, 
+<a name="l00205"></a>00205                              <span class="keyword">const</span> enumerable_thread_specific_iterator&lt;Container,U&gt;&amp; j ) {
+<a name="l00206"></a>00206             <span class="keywordflow">return</span> i.my_index-j.my_index;
+<a name="l00207"></a>00207         }
+<a name="l00208"></a>00208 
+<a name="l00209"></a>00209     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> SegmentedContainer, <span class="keyword">typename</span> Value &gt;
+<a name="l00210"></a>00210         <span class="keyword">class </span>segmented_iterator
+<a name="l00211"></a>00211 #if defined(_WIN64) &amp;&amp; defined(_MSC_VER)
+<a name="l00212"></a>00212         : public std::iterator&lt;std::input_iterator_tag, Value&gt;
+<a name="l00213"></a>00213 #endif
+<a name="l00214"></a>00214         {
+<a name="l00215"></a>00215             <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00216"></a>00216             <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> segmented_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> segmented_iterator&lt;C,U&gt;&amp; j);
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218             <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00219"></a>00219             <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> segmented_iterator&lt;C,T&gt;&amp; i, <span class="keyword">const</span> segmented_iterator&lt;C,U&gt;&amp; j);
+<a name="l00220"></a>00220             
+<a name="l00221"></a>00221             <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> U&gt; 
+<a name="l00222"></a>00222             <span class="keyword">friend</span> <span class="keyword">class </span>segmented_iterator;
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224             <span class="keyword">public</span>:
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226                 segmented_iterator() {my_segcont = NULL;}
+<a name="l00227"></a>00227 
+<a name="l00228"></a>00228                 segmented_iterator( <span class="keyword">const</span> SegmentedContainer&amp; _segmented_container ) : 
+<a name="l00229"></a>00229                     my_segcont(const_cast&lt;SegmentedContainer*&gt;(&amp;_segmented_container)),
+<a name="l00230"></a>00230                     outer_iter(my_segcont-&gt;end()) { }
+<a name="l00231"></a>00231 
+<a name="l00232"></a>00232                 ~segmented_iterator() {}
+<a name="l00233"></a>00233 
+<a name="l00234"></a>00234                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::iterator outer_iterator;
+<a name="l00235"></a>00235                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::value_type InnerContainer;
+<a name="l00236"></a>00236                 <span class="keyword">typedef</span> <span class="keyword">typename</span> InnerContainer::iterator inner_iterator;
+<a name="l00237"></a>00237 
+<a name="l00238"></a>00238                 <span class="comment">// STL support</span>
+<a name="l00239"></a>00239                 <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00240"></a>00240                 <span class="keyword">typedef</span> Value value_type;
+<a name="l00241"></a>00241                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::size_type size_type;
+<a name="l00242"></a>00242                 <span class="keyword">typedef</span> Value* pointer;
+<a name="l00243"></a>00243                 <span class="keyword">typedef</span> Value&amp; reference;
+<a name="l00244"></a>00244                 <span class="keyword">typedef</span> std::input_iterator_tag iterator_category;
+<a name="l00245"></a>00245 
+<a name="l00246"></a>00246                 <span class="comment">// Copy Constructor</span>
+<a name="l00247"></a>00247                 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt;
+<a name="l00248"></a>00248                 segmented_iterator(<span class="keyword">const</span> segmented_iterator&lt;SegmentedContainer, U&gt;&amp; other) :
+<a name="l00249"></a>00249                     my_segcont(other.my_segcont),
+<a name="l00250"></a>00250                     outer_iter(other.outer_iter),
+<a name="l00251"></a>00251                     <span class="comment">// can we assign a default-constructed iterator to inner if we're at the end?</span>
+<a name="l00252"></a>00252                     inner_iter(other.inner_iter)
+<a name="l00253"></a>00253                 {}
+<a name="l00254"></a>00254 
+<a name="l00255"></a>00255                 <span class="comment">// assignment</span>
+<a name="l00256"></a>00256                 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt;
+<a name="l00257"></a>00257                 segmented_iterator&amp; operator=( <span class="keyword">const</span> segmented_iterator&lt;SegmentedContainer, U&gt;&amp; other) {
+<a name="l00258"></a>00258                     <span class="keywordflow">if</span>(<span class="keyword">this</span> != &amp;other) {
+<a name="l00259"></a>00259                         my_segcont = other.my_segcont;
+<a name="l00260"></a>00260                         outer_iter = other.outer_iter;
+<a name="l00261"></a>00261                         <span class="keywordflow">if</span>(outer_iter != my_segcont-&gt;end()) inner_iter = other.inner_iter;
+<a name="l00262"></a>00262                     }
+<a name="l00263"></a>00263                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00264"></a>00264                 }
+<a name="l00265"></a>00265 
+<a name="l00266"></a>00266                 <span class="comment">// allow assignment of outer iterator to segmented iterator.  Once it is</span>
+<a name="l00267"></a>00267                 <span class="comment">// assigned, move forward until a non-empty inner container is found or</span>
+<a name="l00268"></a>00268                 <span class="comment">// the end of the outer container is reached.</span>
+<a name="l00269"></a>00269                 segmented_iterator&amp; operator=(<span class="keyword">const</span> outer_iterator&amp; new_outer_iter) {
+<a name="l00270"></a>00270                     __TBB_ASSERT(my_segcont != NULL, NULL);
+<a name="l00271"></a>00271                     <span class="comment">// check that this iterator points to something inside the segmented container</span>
+<a name="l00272"></a>00272                     <span class="keywordflow">for</span>(outer_iter = new_outer_iter ;outer_iter!=my_segcont-&gt;end(); ++outer_iter) {
+<a name="l00273"></a>00273                         <span class="keywordflow">if</span>( !outer_iter-&gt;empty() ) {
+<a name="l00274"></a>00274                             inner_iter = outer_iter-&gt;begin();
+<a name="l00275"></a>00275                             <span class="keywordflow">break</span>;
+<a name="l00276"></a>00276                         }
+<a name="l00277"></a>00277                     }
+<a name="l00278"></a>00278                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00279"></a>00279                 }
+<a name="l00280"></a>00280 
+<a name="l00281"></a>00281                 <span class="comment">// pre-increment</span>
+<a name="l00282"></a>00282                 segmented_iterator&amp; operator++() {
+<a name="l00283"></a>00283                     advance_me();
+<a name="l00284"></a>00284                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00285"></a>00285                 }
+<a name="l00286"></a>00286 
+<a name="l00287"></a>00287                 <span class="comment">// post-increment</span>
+<a name="l00288"></a>00288                 segmented_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00289"></a>00289                     segmented_iterator tmp = *<span class="keyword">this</span>;
+<a name="l00290"></a>00290                     operator++();
+<a name="l00291"></a>00291                     <span class="keywordflow">return</span> tmp;
+<a name="l00292"></a>00292                 }
+<a name="l00293"></a>00293 
+<a name="l00294"></a>00294                 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> outer_iterator&amp; other_outer)<span class="keyword"> const </span>{
+<a name="l00295"></a>00295                     __TBB_ASSERT(my_segcont != NULL, NULL);
+<a name="l00296"></a>00296                     <span class="keywordflow">return</span> (outer_iter == other_outer &amp;&amp;
+<a name="l00297"></a>00297                             (outer_iter == my_segcont-&gt;end() || inner_iter == outer_iter-&gt;begin()));
+<a name="l00298"></a>00298                 }
+<a name="l00299"></a>00299 
+<a name="l00300"></a>00300                 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> outer_iterator&amp; other_outer)<span class="keyword"> const </span>{
+<a name="l00301"></a>00301                     <span class="keywordflow">return</span> !operator==(other_outer);
+<a name="l00302"></a>00302 
+<a name="l00303"></a>00303                 }
+<a name="l00304"></a>00304 
+<a name="l00305"></a>00305                 <span class="comment">// (i)* RHS</span>
+<a name="l00306"></a>00306                 reference operator*()<span class="keyword"> const </span>{
+<a name="l00307"></a>00307                     __TBB_ASSERT(my_segcont != NULL, NULL);
+<a name="l00308"></a>00308                     __TBB_ASSERT(outer_iter != my_segcont-&gt;end(), <span class="stringliteral">"Dereferencing a pointer at end of container"</span>);
+<a name="l00309"></a>00309                     __TBB_ASSERT(inner_iter != outer_iter-&gt;end(), NULL); <span class="comment">// should never happen</span>
+<a name="l00310"></a>00310                     <span class="keywordflow">return</span> *inner_iter;
+<a name="l00311"></a>00311                 }
+<a name="l00312"></a>00312 
+<a name="l00313"></a>00313                 <span class="comment">// i-&gt;</span>
+<a name="l00314"></a>00314                 pointer operator-&gt;()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &amp;operator*();}
+<a name="l00315"></a>00315 
+<a name="l00316"></a>00316             <span class="keyword">private</span>:
+<a name="l00317"></a>00317                 SegmentedContainer*             my_segcont;
+<a name="l00318"></a>00318                 outer_iterator outer_iter;
+<a name="l00319"></a>00319                 inner_iterator inner_iter;
+<a name="l00320"></a>00320 
+<a name="l00321"></a>00321                 <span class="keywordtype">void</span> advance_me() {
+<a name="l00322"></a>00322                     __TBB_ASSERT(my_segcont != NULL, NULL);
+<a name="l00323"></a>00323                     __TBB_ASSERT(outer_iter != my_segcont-&gt;end(), NULL); <span class="comment">// not true if there are no inner containers</span>
+<a name="l00324"></a>00324                     __TBB_ASSERT(inner_iter != outer_iter-&gt;end(), NULL); <span class="comment">// not true if the inner containers are all empty.</span>
+<a name="l00325"></a>00325                     ++inner_iter;
+<a name="l00326"></a>00326                     <span class="keywordflow">while</span>(inner_iter == outer_iter-&gt;end() &amp;&amp; ++outer_iter != my_segcont-&gt;end()) {
+<a name="l00327"></a>00327                         inner_iter = outer_iter-&gt;begin();
+<a name="l00328"></a>00328                     }
+<a name="l00329"></a>00329                 }
+<a name="l00330"></a>00330         };    <span class="comment">// segmented_iterator</span>
+<a name="l00331"></a>00331 
+<a name="l00332"></a>00332         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> SegmentedContainer, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00333"></a>00333         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> segmented_iterator&lt;SegmentedContainer,T&gt;&amp; i, 
+<a name="l00334"></a>00334                          <span class="keyword">const</span> segmented_iterator&lt;SegmentedContainer,U&gt;&amp; j ) {
+<a name="l00335"></a>00335             <span class="keywordflow">if</span>(i.my_segcont != j.my_segcont) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00336"></a>00336             <span class="keywordflow">if</span>(i.my_segcont == NULL) <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00337"></a>00337             <span class="keywordflow">if</span>(i.outer_iter != j.outer_iter) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00338"></a>00338             <span class="keywordflow">if</span>(i.outer_iter == i.my_segcont-&gt;end()) <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00339"></a>00339             <span class="keywordflow">return</span> i.inner_iter == j.inner_iter;
+<a name="l00340"></a>00340         }
+<a name="l00341"></a>00341 
+<a name="l00342"></a>00342         <span class="comment">// !=</span>
+<a name="l00343"></a>00343         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> SegmentedContainer, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00344"></a>00344         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> segmented_iterator&lt;SegmentedContainer,T&gt;&amp; i, 
+<a name="l00345"></a>00345                          <span class="keyword">const</span> segmented_iterator&lt;SegmentedContainer,U&gt;&amp; j ) {
+<a name="l00346"></a>00346             <span class="keywordflow">return</span> !(i==j);
+<a name="l00347"></a>00347         }
+<a name="l00348"></a>00348 
+<a name="l00349"></a>00349         <span class="comment">// empty template for following specializations</span>
+<a name="l00350"></a>00350         <span class="keyword">template</span>&lt;ets_key_usage_type et&gt;
+<a name="l00351"></a>00351         <span class="keyword">struct </span>tls_manager {};
+<a name="l00352"></a>00352         
+<a name="l00354"></a>00354         <span class="keyword">template</span> &lt;&gt;
+<a name="l00355"></a>00355         <span class="keyword">struct </span>tls_manager&lt;ets_no_key&gt; {
+<a name="l00356"></a>00356             <span class="keyword">typedef</span> size_t tls_key_t;
+<a name="l00357"></a>00357             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> create_key( tls_key_t &amp;) { }
+<a name="l00358"></a>00358             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> destroy_key( tls_key_t &amp; ) { }
+<a name="l00359"></a>00359             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> set_tls( tls_key_t &amp;, <span class="keywordtype">void</span> *  ) { }
+<a name="l00360"></a>00360             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> * get_tls( tls_key_t &amp; ) { <span class="keywordflow">return</span> (size_t)0; }
+<a name="l00361"></a>00361         };
+<a name="l00362"></a>00362 
+<a name="l00364"></a>00364         <span class="keyword">template</span> &lt;&gt;
+<a name="l00365"></a>00365         <span class="keyword">struct </span>tls_manager &lt;ets_key_per_instance&gt; {
+<a name="l00366"></a>00366 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00367"></a>00367 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD tls_key_t;
+<a name="l00368"></a>00368             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> create_key( tls_key_t &amp;k) { k = TlsAlloc(); }
+<a name="l00369"></a>00369             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> destroy_key( tls_key_t &amp;k) { TlsFree(k); }
+<a name="l00370"></a>00370             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> set_tls( tls_key_t &amp;k, <span class="keywordtype">void</span> * value) { TlsSetValue(k, (LPVOID)value); }
+<a name="l00371"></a>00371             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> * get_tls( tls_key_t &amp;k ) { <span class="keywordflow">return</span> (<span class="keywordtype">void</span> *)TlsGetValue(k); }
+<a name="l00372"></a>00372 <span class="preprocessor">#else</span>
+<a name="l00373"></a>00373 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_key_t tls_key_t;
+<a name="l00374"></a>00374             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> create_key( tls_key_t &amp;k) { pthread_key_create(&amp;k, NULL); }
+<a name="l00375"></a>00375             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> destroy_key( tls_key_t &amp;k) { pthread_key_delete(k); }
+<a name="l00376"></a>00376             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> set_tls( tls_key_t &amp;k, <span class="keywordtype">void</span> * value) { pthread_setspecific(k, value); }
+<a name="l00377"></a>00377             <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> * get_tls( tls_key_t &amp;k ) { <span class="keywordflow">return</span> pthread_getspecific(k); }
+<a name="l00378"></a>00378 <span class="preprocessor">#endif</span>
+<a name="l00379"></a>00379 <span class="preprocessor"></span>        };
+<a name="l00380"></a>00380 
+<a name="l00381"></a>00381         <span class="keyword">class </span>thread_hash_compare {
+<a name="l00382"></a>00382         <span class="keyword">public</span>:
+<a name="l00383"></a>00383             <span class="comment">// using hack suggested by Arch to get value for thread id for hashing...</span>
+<a name="l00384"></a>00384 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00385"></a>00385 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD thread_key;
+<a name="l00386"></a>00386 <span class="preprocessor">#else</span>
+<a name="l00387"></a>00387 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_t thread_key;
+<a name="l00388"></a>00388 <span class="preprocessor">#endif</span>
+<a name="l00389"></a>00389 <span class="preprocessor"></span>            <span class="keyword">static</span> thread_key my_thread_key(<span class="keyword">const</span> tbb_thread::id j) {
+<a name="l00390"></a>00390                 thread_key key_val;
+<a name="l00391"></a>00391                 memcpy(&amp;key_val, &amp;j, <span class="keyword">sizeof</span>(thread_key));
+<a name="l00392"></a>00392                 <span class="keywordflow">return</span> key_val;
+<a name="l00393"></a>00393             }
+<a name="l00394"></a>00394 
+<a name="l00395"></a>00395             <span class="keywordtype">bool</span> equal( <span class="keyword">const</span> thread_key j, <span class="keyword">const</span> thread_key k)<span class="keyword"> const </span>{
+<a name="l00396"></a>00396                 <span class="keywordflow">return</span> j == k;
+<a name="l00397"></a>00397             }
+<a name="l00398"></a>00398             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> hash(<span class="keyword">const</span> thread_key k)<span class="keyword"> const </span>{
+<a name="l00399"></a>00399                 <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)k;
+<a name="l00400"></a>00400             }
+<a name="l00401"></a>00401         };
+<a name="l00402"></a>00402 
+<a name="l00403"></a>00403         <span class="comment">// storage for initialization function pointer</span>
+<a name="l00404"></a>00404         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00405"></a>00405         <span class="keyword">struct </span>callback_base {
+<a name="l00406"></a>00406             <span class="keyword">virtual</span> T apply( ) = 0;
+<a name="l00407"></a>00407             <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroy( ) = 0;
+<a name="l00408"></a>00408             <span class="comment">// need to be able to create copies of callback_base for copy constructor</span>
+<a name="l00409"></a>00409             <span class="keyword">virtual</span> callback_base* make_copy() = 0;
+<a name="l00410"></a>00410             <span class="comment">// need virtual destructor to satisfy GCC compiler warning</span>
+<a name="l00411"></a>00411             <span class="keyword">virtual</span> ~callback_base() { }
+<a name="l00412"></a>00412         };
+<a name="l00413"></a>00413 
+<a name="l00414"></a>00414         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> Functor&gt;
+<a name="l00415"></a>00415         <span class="keyword">struct </span>callback_leaf : <span class="keyword">public</span> callback_base&lt;T&gt; {
+<a name="l00416"></a>00416             <span class="keyword">typedef</span> Functor my_callback_type;
+<a name="l00417"></a>00417             <span class="keyword">typedef</span> callback_leaf&lt;T,Functor&gt; my_type;
+<a name="l00418"></a>00418             <span class="keyword">typedef</span> my_type* callback_pointer;
+<a name="l00419"></a>00419             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00170.html">tbb::tbb_allocator&lt;my_type&gt;</a> my_allocator_type;
+<a name="l00420"></a>00420             Functor f;
+<a name="l00421"></a>00421             callback_leaf( <span class="keyword">const</span> Functor&amp; f_) : f(f_) {
+<a name="l00422"></a>00422             }
+<a name="l00423"></a>00423 
+<a name="l00424"></a>00424             <span class="keyword">static</span> callback_pointer new_callback(<span class="keyword">const</span> Functor&amp; f_ ) {
+<a name="l00425"></a>00425                 <span class="keywordtype">void</span>* new_void = my_allocator_type().allocate(1);
+<a name="l00426"></a>00426                 callback_pointer new_cb = <span class="keyword">new</span> (new_void) callback_leaf&lt;T,Functor&gt;(f_); <span class="comment">// placement new</span>
+<a name="l00427"></a>00427                 <span class="keywordflow">return</span> new_cb;
+<a name="l00428"></a>00428             }
+<a name="l00429"></a>00429 
+<a name="l00430"></a>00430             <span class="comment">/* override */</span> callback_pointer make_copy() {
+<a name="l00431"></a>00431                 <span class="keywordflow">return</span> new_callback( f );
+<a name="l00432"></a>00432             }
+<a name="l00433"></a>00433 
+<a name="l00434"></a>00434              <span class="comment">/* override */</span> <span class="keywordtype">void</span> destroy( ) {
+<a name="l00435"></a>00435                  callback_pointer my_ptr = <span class="keyword">this</span>;
+<a name="l00436"></a>00436                  my_allocator_type().destroy(my_ptr);
+<a name="l00437"></a>00437                  my_allocator_type().deallocate(my_ptr,1);
+<a name="l00438"></a>00438              }
+<a name="l00439"></a>00439             <span class="comment">/* override */</span> T apply() { <span class="keywordflow">return</span> f(); }  <span class="comment">// does copy construction of returned value.</span>
+<a name="l00440"></a>00440         };
+<a name="l00441"></a>00441 
+<a name="l00442"></a>00442         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HC, <span class="keyword">typename</span> A&gt;
+<a name="l00443"></a>00443         <span class="keyword">class </span>ets_concurrent_hash_map : <span class="keyword">public</span> tbb::concurrent_hash_map&lt;Key, T, HC, A&gt; {
+<a name="l00444"></a>00444         <span class="keyword">public</span>:
+<a name="l00445"></a>00445             <span class="keyword">typedef</span> <a class="code" href="a00130.html">tbb::concurrent_hash_map&lt;Key, T, HC, A&gt;</a> base_type;
+<a name="l00446"></a>00446             <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_pointer const_pointer;
+<a name="l00447"></a>00447             <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::key_type key_type;
+<a name="l00448"></a>00448             const_pointer find( <span class="keyword">const</span> key_type &amp;k ) { <span class="keywordflow">return</span> base_type::find( k ); } <span class="comment">// make public</span>
+<a name="l00449"></a>00449         };
+<a name="l00450"></a>00450     
+<a name="l00451"></a>00451     } <span class="comment">// namespace internal</span>
+<a name="l00453"></a>00453 <span class="comment"></span>
+<a name="l00455"></a>00455     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, 
+<a name="l00456"></a>00456               <span class="keyword">typename</span> Allocator=cache_aligned_allocator&lt;T&gt;, 
+<a name="l00457"></a><a class="code" href="a00138.html">00457</a>               <a class="code" href="a00229.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> ETS_key_type=ets_no_key &gt; 
+<a name="l00458"></a>00458     <span class="keyword">class </span><a class="code" href="a00138.html">enumerable_thread_specific</a> { 
+<a name="l00459"></a>00459 
+<a name="l00460"></a>00460         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U, <span class="keyword">typename</span> A, ets_key_usage_type C&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00138.html">enumerable_thread_specific</a>;
+<a name="l00461"></a>00461     
+<a name="l00462"></a>00462         <span class="keyword">typedef</span> internal::tls_manager&lt; ETS_key_type &gt; my_tls_manager;
+<a name="l00463"></a>00463 
+<a name="l00465"></a>00465         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt;
+<a name="l00466"></a>00466         <span class="keyword">struct </span>padded_element {
+<a name="l00467"></a>00467             U value;
+<a name="l00468"></a>00468             <span class="keywordtype">char</span> padding[ ( (<span class="keyword">sizeof</span>(U) - 1) / internal::NFS_MaxLineSize + 1 ) * internal::NFS_MaxLineSize - <span class="keyword">sizeof</span>(U) ];
+<a name="l00469"></a>00469             padded_element(<span class="keyword">const</span> U &amp;v) : value(v) {}
+<a name="l00470"></a>00470             padded_element() {}
+<a name="l00471"></a>00471         };
+<a name="l00472"></a>00472     
+<a name="l00474"></a>00474         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I&gt;
+<a name="l00475"></a>00475         <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00122.html">blocked_range</a>&lt;I&gt; {
+<a name="l00476"></a>00476         <span class="keyword">public</span>:
+<a name="l00477"></a>00477             <span class="keyword">typedef</span> T value_type;
+<a name="l00478"></a>00478             <span class="keyword">typedef</span> T&amp; reference;
+<a name="l00479"></a>00479             <span class="keyword">typedef</span> <span class="keyword">const</span> T&amp; const_reference;
+<a name="l00480"></a>00480             <span class="keyword">typedef</span> I iterator;
+<a name="l00481"></a>00481             <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00482"></a>00482             generic_range_type( I begin_, I end_, size_t grainsize = 1) : <a class="code" href="a00122.html">blocked_range&lt;I&gt;</a>(begin_,end_,grainsize) {} 
+<a name="l00483"></a>00483             template&lt;typename U&gt;
+<a name="l00484"></a>00484             generic_range_type( <span class="keyword">const</span> generic_range_type&lt;U&gt;&amp; r) : <a class="code" href="a00122.html">blocked_range&lt;I&gt;</a>(r.begin(),r.end(),r.grainsize()) {} 
+<a name="l00485"></a>00485             generic_range_type( generic_range_type&amp; r, <a class="code" href="a00165.html">split</a> ) : <a class="code" href="a00122.html">blocked_range&lt;I&gt;</a>(r,<a class="code" href="a00165.html">split</a>()) {}
+<a name="l00486"></a>00486         };
+<a name="l00487"></a>00487     
+<a name="l00488"></a>00488         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind&lt; padded_element&lt;T&gt; &gt;::other padded_allocator_type;
+<a name="l00489"></a>00489         <span class="keyword">typedef</span> <a class="code" href="a00136.html">tbb::concurrent_vector&lt; padded_element&lt;T&gt;</a>, padded_allocator_type &gt; <a class="code" href="a00136.html">internal_collection_type</a>;
+<a name="l00490"></a>00490         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::size_type hash_table_index_type; <span class="comment">// storing array indices rather than iterators to simplify</span>
+<a name="l00491"></a>00491         <span class="comment">// copying the hash table that correlates thread IDs with concurrent vector elements.</span>
+<a name="l00492"></a>00492         
+<a name="l00493"></a>00493         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind&lt; std::pair&lt; typename internal::thread_hash_compare::thread_key, hash_table_index_type &gt; &gt;::other hash_element_allocator;
+<a name="l00494"></a>00494         <span class="keyword">typedef</span> internal::ets_concurrent_hash_map&lt; typename internal::thread_hash_compare::thread_key, hash_table_index_type, internal::thread_hash_compare, hash_element_allocator &gt; thread_to_index_type;
+<a name="l00495"></a>00495 
+<a name="l00496"></a>00496         <span class="keyword">typename</span> my_tls_manager::tls_key_t my_key;
+<a name="l00497"></a>00497 
+<a name="l00498"></a>00498         <span class="keywordtype">void</span> reset_key() {
+<a name="l00499"></a>00499             my_tls_manager::destroy_key(my_key);
+<a name="l00500"></a>00500             my_tls_manager::create_key(my_key); 
+<a name="l00501"></a>00501         }
+<a name="l00502"></a>00502 
+<a name="l00503"></a>00503         internal::callback_base&lt;T&gt; *my_finit_callback;
+<a name="l00504"></a>00504 
+<a name="l00505"></a>00505         <span class="comment">// need to use a pointed-to exemplar because T may not be assignable.</span>
+<a name="l00506"></a>00506         <span class="comment">// using tbb_allocator instead of padded_element_allocator because we may be</span>
+<a name="l00507"></a>00507         <span class="comment">// copying an exemplar from one instantiation of ETS to another with a different</span>
+<a name="l00508"></a>00508         <span class="comment">// allocator.</span>
+<a name="l00509"></a>00509         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00170.html">tbb::tbb_allocator&lt;padded_element&lt;T&gt;</a> &gt; <a class="code" href="a00170.html">exemplar_allocator_type</a>;
+<a name="l00510"></a>00510         <span class="keyword">static</span> padded_element&lt;T&gt; * create_exemplar(<span class="keyword">const</span> T&amp; my_value) {
+<a name="l00511"></a>00511             padded_element&lt;T&gt; *new_exemplar = 0;
+<a name="l00512"></a>00512             <span class="comment">// void *new_space = padded_allocator_type().allocate(1);</span>
+<a name="l00513"></a>00513             <span class="keywordtype">void</span> *new_space = exemplar_allocator_type().allocate(1);
+<a name="l00514"></a>00514             new_exemplar = <span class="keyword">new</span>(new_space) padded_element&lt;T&gt;(my_value);
+<a name="l00515"></a>00515             <span class="keywordflow">return</span> new_exemplar;
+<a name="l00516"></a>00516         }
+<a name="l00517"></a>00517 
+<a name="l00518"></a>00518         <span class="keyword">static</span> padded_element&lt;T&gt; *create_exemplar( ) {
+<a name="l00519"></a>00519             <span class="comment">// void *new_space = padded_allocator_type().allocate(1);</span>
+<a name="l00520"></a>00520             <span class="keywordtype">void</span> *new_space = exemplar_allocator_type().allocate(1);
+<a name="l00521"></a>00521             padded_element&lt;T&gt; *new_exemplar = <span class="keyword">new</span>(new_space) padded_element&lt;T&gt;( );
+<a name="l00522"></a>00522             <span class="keywordflow">return</span> new_exemplar;
+<a name="l00523"></a>00523         }
+<a name="l00524"></a>00524 
+<a name="l00525"></a>00525         <span class="keyword">static</span> <span class="keywordtype">void</span> free_exemplar(padded_element&lt;T&gt; *my_ptr) {
+<a name="l00526"></a>00526             <span class="comment">// padded_allocator_type().destroy(my_ptr);</span>
+<a name="l00527"></a>00527             <span class="comment">// padded_allocator_type().deallocate(my_ptr,1);</span>
+<a name="l00528"></a>00528             exemplar_allocator_type().destroy(my_ptr);
+<a name="l00529"></a>00529             exemplar_allocator_type().deallocate(my_ptr,1);
+<a name="l00530"></a>00530         }
+<a name="l00531"></a>00531 
+<a name="l00532"></a>00532         padded_element&lt;T&gt;* my_exemplar_ptr;
+<a name="l00533"></a>00533 
+<a name="l00534"></a>00534         internal_collection_type my_locals;
+<a name="l00535"></a>00535         thread_to_index_type my_hash_tbl;
+<a name="l00536"></a>00536     
+<a name="l00537"></a>00537     <span class="keyword">public</span>:
+<a name="l00538"></a>00538     
+<a name="l00540"></a>00540         <span class="keyword">typedef</span> Allocator <a class="code" href="a00138.html#60047d25605a1ef993c49234e9ac5c2d">allocator_type</a>;
+<a name="l00541"></a>00541         <span class="keyword">typedef</span> T value_type;
+<a name="l00542"></a>00542         <span class="keyword">typedef</span> T&amp; reference;
+<a name="l00543"></a>00543         <span class="keyword">typedef</span> <span class="keyword">const</span> T&amp; const_reference;
+<a name="l00544"></a>00544         <span class="keyword">typedef</span> T* pointer;
+<a name="l00545"></a>00545         <span class="keyword">typedef</span> <span class="keyword">const</span> T* const_pointer;
+<a name="l00546"></a>00546         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::size_type size_type;
+<a name="l00547"></a>00547         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::difference_type difference_type;
+<a name="l00548"></a>00548     
+<a name="l00549"></a>00549         <span class="comment">// Iterator types</span>
+<a name="l00550"></a>00550         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::enumerable_thread_specific_iterator&lt; internal_collection_type, value_type &gt; iterator;
+<a name="l00551"></a>00551         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::enumerable_thread_specific_iterator&lt; internal_collection_type, const value_type &gt; const_iterator;
+<a name="l00552"></a>00552 
+<a name="l00553"></a>00553         <span class="comment">// Parallel range types</span>
+<a name="l00554"></a>00554         <span class="keyword">typedef</span> generic_range_type&lt; iterator &gt; range_type;
+<a name="l00555"></a>00555         <span class="keyword">typedef</span> generic_range_type&lt; const_iterator &gt; const_range_type;
+<a name="l00556"></a>00556     
+<a name="l00558"></a>00558         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>() : my_finit_callback(0) { 
+<a name="l00559"></a>00559             my_exemplar_ptr = create_exemplar();
+<a name="l00560"></a>00560             my_tls_manager::create_key(my_key); 
+<a name="l00561"></a>00561         }
+<a name="l00562"></a>00562 
+<a name="l00564"></a>00564         <span class="comment">// Finit should be a function taking 0 parameters and returning a T</span>
+<a name="l00565"></a><a class="code" href="a00138.html#e5698930b84c098bb6d87175b8b50306">00565</a>         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Finit&gt;
+<a name="l00566"></a>00566         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>( Finit _finit )
+<a name="l00567"></a>00567         {
+<a name="l00568"></a>00568             my_finit_callback = internal::callback_leaf&lt;T,Finit&gt;::new_callback( _finit );
+<a name="l00569"></a>00569             my_tls_manager::create_key(my_key);
+<a name="l00570"></a>00570             my_exemplar_ptr = 0; <span class="comment">// don't need exemplar if function is provided</span>
+<a name="l00571"></a>00571         }
+<a name="l00572"></a>00572     
+<a name="l00574"></a>00574         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>(<span class="keyword">const</span> T &amp;_exemplar) : my_finit_callback(0) {
+<a name="l00575"></a>00575             my_exemplar_ptr = create_exemplar(_exemplar);
+<a name="l00576"></a>00576             my_tls_manager::create_key(my_key); 
+<a name="l00577"></a>00577         }
+<a name="l00578"></a>00578     
+<a name="l00580"></a>00580         <a class="code" href="a00138.html#41176526161d6fef1bdd19c2db7ded4d">~enumerable_thread_specific</a>() { 
+<a name="l00581"></a>00581             my_tls_manager::destroy_key(my_key); 
+<a name="l00582"></a>00582             <span class="keywordflow">if</span>(my_finit_callback) {
+<a name="l00583"></a>00583                 my_finit_callback-&gt;destroy();
+<a name="l00584"></a>00584             }
+<a name="l00585"></a>00585             <span class="keywordflow">if</span>(my_exemplar_ptr)
+<a name="l00586"></a>00586             {
+<a name="l00587"></a>00587                 free_exemplar(my_exemplar_ptr);
+<a name="l00588"></a>00588             }
+<a name="l00589"></a>00589         }
+<a name="l00590"></a>00590       
+<a name="l00592"></a>00592         reference <a class="code" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>() {
+<a name="l00593"></a>00593             <span class="keywordtype">bool</span> exists;
+<a name="l00594"></a>00594             <span class="keywordflow">return</span> <a class="code" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>(exists);
+<a name="l00595"></a>00595         }
+<a name="l00596"></a>00596 
+<a name="l00598"></a>00598         reference <a class="code" href="a00138.html#ceb691814a0001241c43595d309cf615">local</a>(<span class="keywordtype">bool</span>&amp; exists)  {
+<a name="l00599"></a>00599             <span class="keywordflow">if</span> ( pointer local_ptr = static_cast&lt;pointer&gt;(my_tls_manager::get_tls(my_key)) ) {
+<a name="l00600"></a>00600                 exists = <span class="keyword">true</span>;
+<a name="l00601"></a>00601                <span class="keywordflow">return</span> *local_ptr;
+<a name="l00602"></a>00602             }
+<a name="l00603"></a>00603             hash_table_index_type local_index;
+<a name="l00604"></a>00604             <span class="keyword">typename</span> internal::thread_hash_compare::thread_key my_t_key = internal::thread_hash_compare::my_thread_key(tbb::this_tbb_thread::get_id());
+<a name="l00605"></a>00605             {
+<a name="l00606"></a>00606                 <span class="keyword">typename</span> thread_to_index_type::const_pointer my_existing_entry;
+<a name="l00607"></a>00607                 my_existing_entry = my_hash_tbl.find(my_t_key);
+<a name="l00608"></a>00608                 <span class="keywordflow">if</span>(my_existing_entry) {
+<a name="l00609"></a>00609                     exists = <span class="keyword">true</span>;
+<a name="l00610"></a>00610                     local_index = my_existing_entry-&gt;second;
+<a name="l00611"></a>00611                 }
+<a name="l00612"></a>00612                 <span class="keywordflow">else</span> {
+<a name="l00613"></a>00613 
+<a name="l00614"></a>00614                     <span class="comment">// see if the table entry can be found by accessor</span>
+<a name="l00615"></a>00615                     <span class="keyword">typename</span> thread_to_index_type::accessor a;
+<a name="l00616"></a>00616                     <span class="keywordflow">if</span>(!my_hash_tbl.insert(a, my_t_key)) {
+<a name="l00617"></a>00617                         exists = <span class="keyword">true</span>;
+<a name="l00618"></a>00618                         local_index = a-&gt;second;
+<a name="l00619"></a>00619                     }
+<a name="l00620"></a>00620                     <span class="keywordflow">else</span> {
+<a name="l00621"></a>00621                         <span class="comment">// create new entry</span>
+<a name="l00622"></a>00622                         exists = <span class="keyword">false</span>;
+<a name="l00623"></a>00623                         <span class="keywordflow">if</span>(my_finit_callback) {
+<a name="l00624"></a>00624                             <span class="comment">// convert iterator to array index</span>
+<a name="l00625"></a>00625 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00626"></a>00626 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(my_finit_callback-&gt;apply());
+<a name="l00627"></a>00627 <span class="preprocessor">#else</span>
+<a name="l00628"></a>00628 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(my_finit_callback-&gt;apply()) - my_locals.<a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>();
+<a name="l00629"></a>00629 <span class="preprocessor">#endif</span>
+<a name="l00630"></a>00630 <span class="preprocessor"></span>                        }
+<a name="l00631"></a>00631                         <span class="keywordflow">else</span> {
+<a name="l00632"></a>00632                             <span class="comment">// convert iterator to array index</span>
+<a name="l00633"></a>00633 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00634"></a>00634 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*my_exemplar_ptr);
+<a name="l00635"></a>00635 <span class="preprocessor">#else</span>
+<a name="l00636"></a>00636 <span class="preprocessor"></span>                            local_index = my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*my_exemplar_ptr) - my_locals.<a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>();
+<a name="l00637"></a>00637 <span class="preprocessor">#endif</span>
+<a name="l00638"></a>00638 <span class="preprocessor"></span>                        }
+<a name="l00639"></a>00639                         <span class="comment">// insert into hash table</span>
+<a name="l00640"></a>00640                         a-&gt;second = local_index;
+<a name="l00641"></a>00641                     }
+<a name="l00642"></a>00642                 }
+<a name="l00643"></a>00643             }
+<a name="l00644"></a>00644 
+<a name="l00645"></a>00645             reference local_ref = (my_locals[local_index].value);
+<a name="l00646"></a>00646             my_tls_manager::set_tls( my_key, static_cast&lt;void *&gt;(&amp;local_ref) );
+<a name="l00647"></a>00647             <span class="keywordflow">return</span> local_ref;
+<a name="l00648"></a>00648         } <span class="comment">// local</span>
+<a name="l00649"></a>00649 
+<a name="l00651"></a>00651         size_type <a class="code" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>(); }
+<a name="l00652"></a>00652     
+<a name="l00654"></a>00654         <span class="keywordtype">bool</span> <a class="code" href="a00138.html#ad23345a722622199deaa4dfd243d9f8">empty</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00136.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>(); }
+<a name="l00655"></a>00655     
+<a name="l00657"></a>00657         iterator <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>() { <span class="keywordflow">return</span> iterator( my_locals, 0 ); }
+<a name="l00659"></a>00659         iterator <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>() { <span class="keywordflow">return</span> iterator(my_locals, my_locals.<a class="code" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() ); }
+<a name="l00660"></a>00660     
+<a name="l00662"></a>00662         const_iterator <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, 0); }
+<a name="l00663"></a>00663     
+<a name="l00665"></a>00665         const_iterator <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, my_locals.<a class="code" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()); }
+<a name="l00666"></a>00666 
+<a name="l00668"></a>00668         range_type <a class="code" href="a00138.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a>( size_t grainsize=1 ) { <span class="keywordflow">return</span> range_type( <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>(), <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>(), grainsize ); } 
+<a name="l00669"></a>00669         
+<a name="l00671"></a>00671         const_range_type <a class="code" href="a00138.html#56f6124f5870e26433a5bb2b71e4b7e9">range</a>( size_t grainsize=1 )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_range_type( <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>(), <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>(), grainsize ); }
+<a name="l00672"></a>00672     
+<a name="l00674"></a>00674         <span class="keywordtype">void</span> <a class="code" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>() {
+<a name="l00675"></a>00675             my_locals.<a class="code" href="a00136.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>();
+<a name="l00676"></a>00676             my_hash_tbl.clear();
+<a name="l00677"></a>00677             reset_key();
+<a name="l00678"></a>00678             <span class="comment">// callback is not destroyed</span>
+<a name="l00679"></a>00679             <span class="comment">// exemplar is not destroyed</span>
+<a name="l00680"></a>00680         }
+<a name="l00681"></a>00681 
+<a name="l00682"></a>00682         <span class="comment">// STL container methods</span>
+<a name="l00683"></a>00683         <span class="comment">// copy constructor</span>
+<a name="l00684"></a>00684 
+<a name="l00685"></a>00685     <span class="keyword">private</span>:
+<a name="l00686"></a>00686 
+<a name="l00687"></a>00687         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2&gt;
+<a name="l00688"></a>00688         <span class="keywordtype">void</span>
+<a name="l00689"></a>00689         internal_copy_construct( <span class="keyword">const</span> enumerable_thread_specific&lt;U, A2, C2&gt;&amp; other) {
+<a name="l00690"></a>00690             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00138.html">tbb::enumerable_thread_specific&lt;U, A2, C2&gt;</a> other_type;
+<a name="l00691"></a>00691             <span class="keywordflow">for</span>(<span class="keyword">typename</span> other_type::const_iterator ci = other.begin(); ci != other.end(); ++ci) {
+<a name="l00692"></a>00692                 my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*ci);
+<a name="l00693"></a>00693             }
+<a name="l00694"></a>00694             <span class="keywordflow">if</span>(other.my_finit_callback) {
+<a name="l00695"></a>00695                 my_finit_callback = other.my_finit_callback-&gt;make_copy();
+<a name="l00696"></a>00696             }
+<a name="l00697"></a>00697             <span class="keywordflow">else</span> {
+<a name="l00698"></a>00698                 my_finit_callback = 0;
+<a name="l00699"></a>00699             }
+<a name="l00700"></a>00700             <span class="keywordflow">if</span>(other.my_exemplar_ptr) {
+<a name="l00701"></a>00701                 my_exemplar_ptr = create_exemplar(other.my_exemplar_ptr-&gt;value);
+<a name="l00702"></a>00702             }
+<a name="l00703"></a>00703             <span class="keywordflow">else</span> {
+<a name="l00704"></a>00704                 my_exemplar_ptr = 0;
+<a name="l00705"></a>00705             }
+<a name="l00706"></a>00706             my_tls_manager::create_key(my_key);
+<a name="l00707"></a>00707         }
+<a name="l00708"></a>00708 
+<a name="l00709"></a>00709     <span class="keyword">public</span>:
+<a name="l00710"></a>00710 
+<a name="l00711"></a>00711         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype&gt;
+<a name="l00712"></a>00712         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>( <span class="keyword">const</span> enumerable_thread_specific&lt;U, Alloc, Cachetype&gt;&amp; other ) : my_hash_tbl(other.my_hash_tbl) 
+<a name="l00713"></a>00713         {   <span class="comment">// Have to do push_back because the contained elements are not necessarily assignable.</span>
+<a name="l00714"></a>00714             internal_copy_construct(other);
+<a name="l00715"></a>00715         }
+<a name="l00716"></a>00716 
+<a name="l00717"></a>00717         <span class="comment">// non-templatized version</span>
+<a name="l00718"></a>00718         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>( <span class="keyword">const</span> <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>&amp; other ) : my_hash_tbl(other.my_hash_tbl) 
+<a name="l00719"></a>00719         {
+<a name="l00720"></a>00720             internal_copy_construct(other);
+<a name="l00721"></a>00721         }
+<a name="l00722"></a>00722 
+<a name="l00723"></a>00723     <span class="keyword">private</span>:
+<a name="l00724"></a>00724 
+<a name="l00725"></a>00725         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2&gt;
+<a name="l00726"></a>00726         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a> &amp;
+<a name="l00727"></a>00727         internal_assign(<span class="keyword">const</span> enumerable_thread_specific&lt;U, A2, C2&gt;&amp; other) {
+<a name="l00728"></a>00728             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00138.html">tbb::enumerable_thread_specific&lt;U, A2, C2&gt;</a> other_type;
+<a name="l00729"></a>00729             <span class="keywordflow">if</span>(static_cast&lt;void *&gt;( <span class="keyword">this</span> ) != static_cast&lt;const void *&gt;( &amp;other )) {
+<a name="l00730"></a>00730                 this-&gt;<a class="code" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">clear</a>(); <span class="comment">// resets TLS key</span>
+<a name="l00731"></a>00731                 my_hash_tbl = other.my_hash_tbl;
+<a name="l00732"></a>00732                 <span class="comment">// cannot use assign because T may not be assignable.</span>
+<a name="l00733"></a>00733                 <span class="keywordflow">for</span>(<span class="keyword">typename</span> other_type::const_iterator ci = other.begin(); ci != other.end(); ++ci) {
+<a name="l00734"></a>00734                     my_locals.<a class="code" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(*ci);
+<a name="l00735"></a>00735                 }
+<a name="l00736"></a>00736 
+<a name="l00737"></a>00737                 <span class="keywordflow">if</span>(my_finit_callback) {
+<a name="l00738"></a>00738                     my_finit_callback-&gt;destroy();
+<a name="l00739"></a>00739                     my_finit_callback = 0;
+<a name="l00740"></a>00740                 }
+<a name="l00741"></a>00741                 <span class="keywordflow">if</span>(my_exemplar_ptr) {
+<a name="l00742"></a>00742                     free_exemplar(my_exemplar_ptr);
+<a name="l00743"></a>00743                     my_exemplar_ptr = 0;
+<a name="l00744"></a>00744                 }
+<a name="l00745"></a>00745                 <span class="keywordflow">if</span>(other.my_finit_callback) {
+<a name="l00746"></a>00746                     my_finit_callback = other.my_finit_callback-&gt;make_copy();
+<a name="l00747"></a>00747                 }
+<a name="l00748"></a>00748 
+<a name="l00749"></a>00749                 <span class="keywordflow">if</span>(other.my_exemplar_ptr) {
+<a name="l00750"></a>00750                     my_exemplar_ptr = create_exemplar(other.my_exemplar_ptr-&gt;value);
+<a name="l00751"></a>00751                 }
+<a name="l00752"></a>00752             }
+<a name="l00753"></a>00753             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00754"></a>00754         }
+<a name="l00755"></a>00755 
+<a name="l00756"></a>00756     <span class="keyword">public</span>:
+<a name="l00757"></a>00757 
+<a name="l00758"></a>00758         <span class="comment">// assignment</span>
+<a name="l00759"></a>00759         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>&amp; other) {
+<a name="l00760"></a>00760             <span class="keywordflow">return</span> internal_assign(other);
+<a name="l00761"></a>00761         }
+<a name="l00762"></a>00762 
+<a name="l00763"></a>00763         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype&gt;
+<a name="l00764"></a>00764         <a class="code" href="a00138.html#632e351d5269ac609b08dba19282f3a3">enumerable_thread_specific</a>&amp; operator=(<span class="keyword">const</span> enumerable_thread_specific&lt;U, Alloc, Cachetype&gt;&amp; other)
+<a name="l00765"></a>00765         {
+<a name="l00766"></a>00766             <span class="keywordflow">return</span> internal_assign(other);
+<a name="l00767"></a>00767         }
+<a name="l00768"></a>00768 
+<a name="l00769"></a>00769     <span class="keyword">private</span>:
+<a name="l00770"></a>00770 
+<a name="l00771"></a>00771         <span class="comment">// combine_func_t has signature T(T,T) or T(const T&amp;, const T&amp;)</span>
+<a name="l00772"></a>00772         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> combine_func_t&gt;
+<a name="l00773"></a>00773         T internal_combine(<span class="keyword">typename</span> internal_collection_type::const_range_type r, combine_func_t f_combine) {
+<a name="l00774"></a>00774             <span class="keywordflow">if</span>(r.is_divisible()) {
+<a name="l00775"></a>00775                 <span class="keyword">typename</span> internal_collection_type::const_range_type r2(r,split());
+<a name="l00776"></a>00776                 <span class="keywordflow">return</span> f_combine(internal_combine(r2, f_combine), internal_combine(r, f_combine));
+<a name="l00777"></a>00777             }
+<a name="l00778"></a>00778             <span class="keywordflow">if</span>(r.size() == 1) {
+<a name="l00779"></a>00779                 <span class="keywordflow">return</span> r.begin()-&gt;value;
+<a name="l00780"></a>00780             }
+<a name="l00781"></a>00781             <span class="keyword">typename</span> internal_collection_type::const_iterator i2 = r.begin();
+<a name="l00782"></a>00782             ++i2;
+<a name="l00783"></a>00783             <span class="keywordflow">return</span> f_combine(r.begin()-&gt;value, i2-&gt;value);
+<a name="l00784"></a>00784         }
+<a name="l00785"></a>00785 
+<a name="l00786"></a>00786     <span class="keyword">public</span>:
+<a name="l00787"></a>00787 
+<a name="l00788"></a>00788         <span class="comment">// combine_func_t has signature T(T,T) or T(const T&amp;, const T&amp;)</span>
+<a name="l00789"></a>00789         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> combine_func_t&gt;
+<a name="l00790"></a>00790         T combine(combine_func_t f_combine) {
+<a name="l00791"></a>00791             <span class="keywordflow">if</span>(my_locals.<a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>() == my_locals.<a class="code" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">end</a>()) {
+<a name="l00792"></a>00792                 <span class="keywordflow">if</span>(my_finit_callback) {
+<a name="l00793"></a>00793                     <span class="keywordflow">return</span> my_finit_callback-&gt;apply();
+<a name="l00794"></a>00794                 }
+<a name="l00795"></a>00795                 <span class="keywordflow">return</span> (*my_exemplar_ptr).value;
+<a name="l00796"></a>00796             }
+<a name="l00797"></a>00797             <span class="keyword">typename</span> internal_collection_type::const_range_type r(my_locals.<a class="code" href="a00136.html#730b23a251ecb6d37f692fb22f38e029">begin</a>(), my_locals.<a class="code" href="a00136.html#c0b51160e5a764982ec97a455f94f2c6">end</a>(), (size_t)2);
+<a name="l00798"></a>00798             <span class="keywordflow">return</span> internal_combine(r, f_combine);
+<a name="l00799"></a>00799         }
+<a name="l00800"></a>00800 
+<a name="l00801"></a>00801         <span class="comment">// combine_func_t has signature void(T) or void(const T&amp;)</span>
+<a name="l00802"></a>00802         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> combine_func_t&gt;
+<a name="l00803"></a>00803         <span class="keywordtype">void</span> combine_each(combine_func_t f_combine) {
+<a name="l00804"></a>00804             <span class="keywordflow">for</span>(const_iterator ci = <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>(); ci != <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>(); ++ci) {
+<a name="l00805"></a>00805                 f_combine( *ci );
+<a name="l00806"></a>00806             }
+<a name="l00807"></a>00807         }
+<a name="l00808"></a>00808     }; <span class="comment">// enumerable_thread_specific</span>
+<a name="l00809"></a>00809 
+<a name="l00810"></a>00810     <span class="keyword">template</span>&lt; <span class="keyword">typename</span> Container &gt;
+<a name="l00811"></a>00811     <span class="keyword">class </span>flattened2d {
+<a name="l00812"></a>00812 
+<a name="l00813"></a>00813         <span class="comment">// This intermediate typedef is to address issues with VC7.1 compilers</span>
+<a name="l00814"></a>00814         <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::value_type conval_type;
+<a name="l00815"></a>00815 
+<a name="l00816"></a>00816     <span class="keyword">public</span>:
+<a name="l00817"></a>00817 
+<a name="l00819"></a>00819         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::size_type size_type;
+<a name="l00820"></a>00820         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::difference_type difference_type;
+<a name="l00821"></a>00821         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::allocator_type allocator_type;
+<a name="l00822"></a>00822         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::value_type value_type;
+<a name="l00823"></a>00823         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::reference reference;
+<a name="l00824"></a>00824         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_reference const_reference;
+<a name="l00825"></a>00825         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::pointer pointer;
+<a name="l00826"></a>00826         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_pointer const_pointer;
+<a name="l00827"></a>00827 
+<a name="l00828"></a>00828         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator&lt;Container, value_type&gt; iterator;
+<a name="l00829"></a>00829         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator&lt;Container, const value_type&gt; const_iterator;
+<a name="l00830"></a>00830 
+<a name="l00831"></a>00831         flattened2d( <span class="keyword">const</span> Container &amp;c, <span class="keyword">typename</span> Container::const_iterator b, <span class="keyword">typename</span> Container::const_iterator e ) : 
+<a name="l00832"></a>00832             my_container(const_cast&lt;Container*&gt;(&amp;c)), my_begin(b), my_end(e) { }
+<a name="l00833"></a>00833 
+<a name="l00834"></a>00834         flattened2d( <span class="keyword">const</span> Container &amp;c ) : 
+<a name="l00835"></a>00835             my_container(const_cast&lt;Container*&gt;(&amp;c)), my_begin(c.<a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>()), my_end(c.<a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()) { }
+<a name="l00836"></a>00836 
+<a name="l00837"></a>00837         iterator <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>() { <span class="keywordflow">return</span> iterator(*my_container) = my_begin; }
+<a name="l00838"></a>00838         iterator <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>() { <span class="keywordflow">return</span> iterator(*my_container) = my_end; }
+<a name="l00839"></a>00839         const_iterator <a class="code" href="a00138.html#225f945c810397c6a54d5b8317dc5843">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_begin; }
+<a name="l00840"></a>00840         const_iterator <a class="code" href="a00138.html#44c0b67ebb56b2ae1fa260d9e2bd1e99">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_end; }
+<a name="l00841"></a>00841 
+<a name="l00842"></a>00842         size_type <a class="code" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">size</a>()<span class="keyword"> const </span>{
+<a name="l00843"></a>00843             size_type tot_size = 0;
+<a name="l00844"></a>00844             <span class="keywordflow">for</span>(<span class="keyword">typename</span> Container::const_iterator i = my_begin; i != my_end; ++i) {
+<a name="l00845"></a>00845                 tot_size += i-&gt;size();
+<a name="l00846"></a>00846             }
+<a name="l00847"></a>00847             <span class="keywordflow">return</span> tot_size;
+<a name="l00848"></a>00848         }
+<a name="l00849"></a>00849 
+<a name="l00850"></a>00850     <span class="keyword">private</span>:
+<a name="l00851"></a>00851 
+<a name="l00852"></a>00852         Container *my_container;
+<a name="l00853"></a>00853         <span class="keyword">typename</span> Container::const_iterator my_begin;
+<a name="l00854"></a>00854         <span class="keyword">typename</span> Container::const_iterator my_end;
+<a name="l00855"></a>00855 
+<a name="l00856"></a>00856     };
+<a name="l00857"></a>00857 
+<a name="l00858"></a>00858     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Container&gt;
+<a name="l00859"></a>00859     flattened2d&lt;Container&gt; flatten2d(<span class="keyword">const</span> Container &amp;c, <span class="keyword">const</span> <span class="keyword">typename</span> Container::const_iterator b, <span class="keyword">const</span> <span class="keyword">typename</span> Container::const_iterator e) {
+<a name="l00860"></a>00860         <span class="keywordflow">return</span> flattened2d&lt;Container&gt;(c, b, e);
+<a name="l00861"></a>00861     }
+<a name="l00862"></a>00862 
+<a name="l00863"></a>00863     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Container&gt;
+<a name="l00864"></a>00864     flattened2d&lt;Container&gt; flatten2d(<span class="keyword">const</span> Container &amp;c) {
+<a name="l00865"></a>00865         <span class="keywordflow">return</span> flattened2d&lt;Container&gt;(c);
+<a name="l00866"></a>00866     }
+<a name="l00867"></a>00867 
+<a name="l00868"></a>00868 } <span class="comment">// namespace tbb</span>
+<a name="l00869"></a>00869 
+<a name="l00870"></a>00870 <span class="preprocessor">#endif</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00299.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00299.html
new file mode 100644 (file)
index 0000000..e5ab4bd
--- /dev/null
@@ -0,0 +1,238 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_mutex_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#include &lt;windows.h&gt;</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#if !defined(_WIN32_WINNT)</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="comment">// The following Windows API function is declared explicitly;</span>
+<a name="l00028"></a>00028 <span class="comment">// otherwise any user would have to specify /D_WIN32_WINNT=0x0400</span>
+<a name="l00029"></a>00029 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
+<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a>00032 <span class="preprocessor">#else </span><span class="comment">/* if not _WIN32||_WIN64 */</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;pthread.h&gt;</span>
+<a name="l00034"></a>00034 <span class="keyword">namespace </span>tbb { <span class="keyword">namespace </span>internal {
+<a name="l00035"></a>00035 <span class="comment">// Use this internal TBB function to throw an exception</span>
+<a name="l00036"></a>00036 <span class="keyword">extern</span> <span class="keywordtype">void</span> handle_perror( <span class="keywordtype">int</span> error_code, <span class="keyword">const</span> <span class="keywordtype">char</span>* what );
+<a name="l00037"></a>00037 } } <span class="comment">//namespaces</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00039"></a>00039 
+<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;new&gt;</span>
+<a name="l00041"></a>00041 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00042"></a>00042 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00043"></a>00043 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00044"></a>00044 
+<a name="l00045"></a>00045 <span class="keyword">namespace </span>tbb {
+<a name="l00046"></a>00046 
+<a name="l00048"></a>00048 
+<a name="l00050"></a><a class="code" href="a00142.html">00050</a> <span class="keyword">class </span><a class="code" href="a00142.html">mutex</a> {
+<a name="l00051"></a>00051 <span class="keyword">public</span>:
+<a name="l00053"></a><a class="code" href="a00142.html#05313cb77d4f85213103d4dab74ed454">00053</a>     <a class="code" href="a00142.html#05313cb77d4f85213103d4dab74ed454">mutex</a>() {
+<a name="l00054"></a>00054 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span>    internal_construct();
+<a name="l00056"></a>00056 <span class="preprocessor">#else</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span>        InitializeCriticalSection(&amp;impl);
+<a name="l00059"></a>00059 <span class="preprocessor">  #else</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span>        <span class="keywordtype">int</span> error_code = pthread_mutex_init(&amp;impl,NULL);
+<a name="l00061"></a>00061         <span class="keywordflow">if</span>( error_code )
+<a name="l00062"></a>00062             tbb::internal::handle_perror(error_code,<span class="stringliteral">"mutex: pthread_mutex_init failed"</span>);
+<a name="l00063"></a>00063 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00065"></a>00065     };
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067     ~<a class="code" href="a00142.html">mutex</a>() {
+<a name="l00068"></a>00068 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span>        internal_destroy();
+<a name="l00070"></a>00070 <span class="preprocessor">#else</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span>        DeleteCriticalSection(&amp;impl);
+<a name="l00073"></a>00073 <span class="preprocessor">  #else</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span>        pthread_mutex_destroy(&amp;impl); 
+<a name="l00075"></a>00075 
+<a name="l00076"></a>00076 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00077"></a>00077 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00078"></a>00078     };
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080     <span class="keyword">class </span>scoped_lock;
+<a name="l00081"></a>00081     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
+<a name="l00082"></a>00082 
+<a name="l00084"></a>00084 
+<a name="l00086"></a><a class="code" href="a00143.html">00086</a>     <span class="keyword">class </span><a class="code" href="a00143.html">scoped_lock</a> : internal::no_copy {
+<a name="l00087"></a>00087     <span class="keyword">public</span>:
+<a name="l00089"></a><a class="code" href="a00143.html#1d403ae51b484df5d86d85ae38f11e6e">00089</a>         <a class="code" href="a00143.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>() : my_mutex(NULL) {};
+<a name="l00090"></a>00090 
+<a name="l00092"></a>00092 
+<a name="l00093"></a><a class="code" href="a00143.html#605a6b9af0f8cdabdf81825e0de99600">00093</a>         <a class="code" href="a00143.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>( <a class="code" href="a00142.html">mutex</a>&amp; <a class="code" href="a00142.html">mutex</a> ) {
+<a name="l00094"></a>00094             <a class="code" href="a00143.html#862e022841cdc522e4296a5533b22efd">acquire</a>( mutex );
+<a name="l00095"></a>00095         }
+<a name="l00096"></a>00096 
+<a name="l00098"></a><a class="code" href="a00143.html#0ebbbecaf4311e9df7362cb76ceaa368">00098</a>         <a class="code" href="a00143.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a>() {
+<a name="l00099"></a>00099             <span class="keywordflow">if</span>( my_mutex ) 
+<a name="l00100"></a>00100                 <a class="code" href="a00143.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>();
+<a name="l00101"></a>00101         }
+<a name="l00102"></a>00102 
+<a name="l00104"></a><a class="code" href="a00143.html#862e022841cdc522e4296a5533b22efd">00104</a>         <span class="keywordtype">void</span> <a class="code" href="a00143.html#862e022841cdc522e4296a5533b22efd">acquire</a>( <a class="code" href="a00142.html">mutex</a>&amp; <a class="code" href="a00142.html">mutex</a> ) {
+<a name="l00105"></a>00105 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00106"></a>00106 <span class="preprocessor"></span>            internal_acquire(mutex);
+<a name="l00107"></a>00107 <span class="preprocessor">#else</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span>            mutex.<a class="code" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">lock</a>();
+<a name="l00109"></a>00109             my_mutex = &amp;mutex;
+<a name="l00110"></a>00110 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00111"></a>00111         }
+<a name="l00112"></a>00112 
+<a name="l00114"></a><a class="code" href="a00143.html#591e0c49b82bcedffcbe0923f1b915ec">00114</a>         <span class="keywordtype">bool</span> <a class="code" href="a00143.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>( <a class="code" href="a00142.html">mutex</a>&amp; <a class="code" href="a00142.html">mutex</a> ) {
+<a name="l00115"></a>00115 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00116"></a>00116 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire (mutex);
+<a name="l00117"></a>00117 <span class="preprocessor">#else</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = mutex.<a class="code" href="a00142.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>();
+<a name="l00119"></a>00119             <span class="keywordflow">if</span>( result )
+<a name="l00120"></a>00120                 my_mutex = &amp;mutex;
+<a name="l00121"></a>00121             <span class="keywordflow">return</span> result;
+<a name="l00122"></a>00122 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00123"></a>00123         }
+<a name="l00124"></a>00124 
+<a name="l00126"></a><a class="code" href="a00143.html#0d51d18cd99df3b2e93bf07378d0992c">00126</a>         <span class="keywordtype">void</span> <a class="code" href="a00143.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>() {
+<a name="l00127"></a>00127 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>            internal_release ();
+<a name="l00129"></a>00129 <span class="preprocessor">#else</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span>            my_mutex-&gt;<a class="code" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>();
+<a name="l00131"></a>00131             my_mutex = NULL;
+<a name="l00132"></a>00132 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00133"></a>00133         }
+<a name="l00134"></a>00134 
+<a name="l00135"></a>00135     <span class="keyword">private</span>:
+<a name="l00137"></a>00137         <a class="code" href="a00142.html">mutex</a>* my_mutex;
+<a name="l00138"></a>00138 
+<a name="l00140"></a>00140         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00142.html">mutex</a>&amp; m );
+<a name="l00141"></a>00141 
+<a name="l00143"></a>00143         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00142.html">mutex</a>&amp; m );
+<a name="l00144"></a>00144 
+<a name="l00146"></a>00146         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
+<a name="l00147"></a>00147 
+<a name="l00148"></a>00148         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00142.html">mutex</a>;
+<a name="l00149"></a>00149     };
+<a name="l00150"></a>00150 
+<a name="l00151"></a>00151     <span class="comment">// Mutex traits</span>
+<a name="l00152"></a>00152     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
+<a name="l00153"></a>00153     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
+<a name="l00154"></a>00154     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">false</span>;
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156     <span class="comment">// ISO C++0x compatibility methods</span>
+<a name="l00157"></a>00157 
+<a name="l00159"></a><a class="code" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">00159</a>     <span class="keywordtype">void</span> <a class="code" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">lock</a>() {
+<a name="l00160"></a>00160 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00161"></a>00161 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space&lt;scoped_lock,1&gt;</a> tmp;
+<a name="l00162"></a>00162         <span class="keyword">new</span>(tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00143.html">scoped_lock</a>(*<span class="keyword">this</span>);
+<a name="l00163"></a>00163 <span class="preprocessor">#else</span>
+<a name="l00164"></a>00164 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00165"></a>00165 <span class="preprocessor"></span>        EnterCriticalSection(&amp;impl);
+<a name="l00166"></a>00166 <span class="preprocessor">  #else</span>
+<a name="l00167"></a>00167 <span class="preprocessor"></span>        pthread_mutex_lock(&amp;impl);
+<a name="l00168"></a>00168 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00169"></a>00169 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00170"></a>00170     }
+<a name="l00171"></a>00171 
+<a name="l00173"></a>00173 
+<a name="l00174"></a><a class="code" href="a00142.html#4331652c79dea1c1131bd59ab161b234">00174</a>     <span class="keywordtype">bool</span> <a class="code" href="a00142.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>() {
+<a name="l00175"></a>00175 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00176"></a>00176 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space&lt;scoped_lock,1&gt;</a> tmp;
+<a name="l00177"></a>00177         <a class="code" href="a00143.html">scoped_lock</a>&amp; s = *tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00178"></a>00178         s.<a class="code" href="a00143.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = NULL;
+<a name="l00179"></a>00179         <span class="keywordflow">return</span> s.<a class="code" href="a00143.html#e86ffb41a026694b16637f78aa337874">internal_try_acquire</a>(*<span class="keyword">this</span>);
+<a name="l00180"></a>00180 <span class="preprocessor">#else</span>
+<a name="l00181"></a>00181 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00182"></a>00182 <span class="preprocessor"></span>        <span class="keywordflow">return</span> TryEnterCriticalSection(&amp;impl)!=0;
+<a name="l00183"></a>00183 <span class="preprocessor">  #else</span>
+<a name="l00184"></a>00184 <span class="preprocessor"></span>        <span class="keywordflow">return</span> pthread_mutex_trylock(&amp;impl)==0;
+<a name="l00185"></a>00185 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00186"></a>00186 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00187"></a>00187     }
+<a name="l00188"></a>00188 
+<a name="l00190"></a><a class="code" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">00190</a>     <span class="keywordtype">void</span> <a class="code" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>() {
+<a name="l00191"></a>00191 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00192"></a>00192 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space&lt;scoped_lock,1&gt;</a> tmp;
+<a name="l00193"></a>00193         <a class="code" href="a00143.html">scoped_lock</a>&amp; s = *tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00194"></a>00194         s.<a class="code" href="a00143.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = <span class="keyword">this</span>;
+<a name="l00195"></a>00195         s.<a class="code" href="a00143.html#448b7e9042afcdc455ea3f929ac4c594">internal_release</a>();
+<a name="l00196"></a>00196 <span class="preprocessor">#else</span>
+<a name="l00197"></a>00197 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00198"></a>00198 <span class="preprocessor"></span>        LeaveCriticalSection(&amp;impl);
+<a name="l00199"></a>00199 <span class="preprocessor">  #else</span>
+<a name="l00200"></a>00200 <span class="preprocessor"></span>        pthread_mutex_unlock(&amp;impl);
+<a name="l00201"></a>00201 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00202"></a>00202 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00203"></a>00203     }
+<a name="l00204"></a>00204 
+<a name="l00205"></a>00205 <span class="keyword">private</span>:
+<a name="l00206"></a>00206 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00207"></a>00207 <span class="preprocessor"></span>    CRITICAL_SECTION impl;    
+<a name="l00208"></a>00208     <span class="keyword">enum</span> state_t {
+<a name="l00209"></a>00209         INITIALIZED=0x1234,
+<a name="l00210"></a>00210         DESTROYED=0x789A,
+<a name="l00211"></a>00211         HELD=0x56CD
+<a name="l00212"></a>00212     } state;
+<a name="l00213"></a>00213 <span class="preprocessor">#else</span>
+<a name="l00214"></a>00214 <span class="preprocessor"></span>    pthread_mutex_t impl;
+<a name="l00215"></a>00215 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00216"></a>00216 
+<a name="l00218"></a>00218     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00219"></a>00219 
+<a name="l00221"></a>00221     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
+<a name="l00222"></a>00222 };
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224 __TBB_DEFINE_PROFILING_SET_NAME(mutex)
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226 } <span class="comment">// namespace tbb </span>
+<a name="l00227"></a>00227 
+<a name="l00228"></a>00228 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00301.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00301.html
new file mode 100644 (file)
index 0000000..aa934cd
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>null_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>null_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_null_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_null_mutex_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="keyword">namespace </span>tbb {
+<a name="l00025"></a>00025     
+<a name="l00027"></a>00027 
+<a name="l00029"></a><a class="code" href="a00144.html">00029</a> <span class="keyword">class </span><a class="code" href="a00144.html">null_mutex</a> {   
+<a name="l00031"></a>00031     <a class="code" href="a00144.html">null_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00144.html">null_mutex</a>&amp; );   
+<a name="l00032"></a>00032     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00144.html">null_mutex</a>&amp; );   
+<a name="l00033"></a>00033 <span class="keyword">public</span>:   
+<a name="l00035"></a><a class="code" href="a00145.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00145.html">scoped_lock</a> {   
+<a name="l00036"></a>00036     <span class="keyword">public</span>:   
+<a name="l00037"></a>00037         <a class="code" href="a00145.html">scoped_lock</a>() {}
+<a name="l00038"></a>00038         <a class="code" href="a00145.html">scoped_lock</a>( <a class="code" href="a00144.html">null_mutex</a>&amp; ) {}   
+<a name="l00039"></a>00039         ~<a class="code" href="a00145.html">scoped_lock</a>() {}
+<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00144.html">null_mutex</a>&amp; ) {}
+<a name="l00041"></a>00041         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00144.html">null_mutex</a>&amp; ) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+<a name="l00042"></a>00042         <span class="keywordtype">void</span> release() {}
+<a name="l00043"></a>00043     };
+<a name="l00044"></a>00044   
+<a name="l00045"></a>00045     <a class="code" href="a00144.html">null_mutex</a>() {}
+<a name="l00046"></a>00046     
+<a name="l00047"></a>00047     <span class="comment">// Mutex traits   </span>
+<a name="l00048"></a>00048     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;   
+<a name="l00049"></a>00049     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">true</span>;
+<a name="l00050"></a>00050     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
+<a name="l00051"></a>00051 };  
+<a name="l00052"></a>00052 
+<a name="l00053"></a>00053 }
+<a name="l00054"></a>00054 
+<a name="l00055"></a>00055 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_null_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00302.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00302.html
new file mode 100644 (file)
index 0000000..7f648db
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>null_rw_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>null_rw_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_null_rw_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_null_rw_mutex_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="keyword">namespace </span>tbb {
+<a name="l00025"></a>00025     
+<a name="l00027"></a>00027 
+<a name="l00029"></a><a class="code" href="a00146.html">00029</a> <span class="keyword">class </span><a class="code" href="a00146.html">null_rw_mutex</a> {
+<a name="l00031"></a>00031     <a class="code" href="a00146.html">null_rw_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00146.html">null_rw_mutex</a>&amp; );   
+<a name="l00032"></a>00032     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00146.html">null_rw_mutex</a>&amp; );   
+<a name="l00033"></a>00033 <span class="keyword">public</span>:   
+<a name="l00035"></a><a class="code" href="a00147.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00147.html">scoped_lock</a> {   
+<a name="l00036"></a>00036     <span class="keyword">public</span>:   
+<a name="l00037"></a>00037         <a class="code" href="a00147.html">scoped_lock</a>() {}
+<a name="l00038"></a>00038         <a class="code" href="a00147.html">scoped_lock</a>( <a class="code" href="a00146.html">null_rw_mutex</a>&amp; , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) {}
+<a name="l00039"></a>00039         ~<a class="code" href="a00147.html">scoped_lock</a>() {}
+<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00146.html">null_rw_mutex</a>&amp; , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) {}
+<a name="l00041"></a>00041         <span class="keywordtype">bool</span> upgrade_to_writer() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+<a name="l00042"></a>00042         <span class="keywordtype">bool</span> downgrade_to_reader() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+<a name="l00043"></a>00043         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00146.html">null_rw_mutex</a>&amp; , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+<a name="l00044"></a>00044         <span class="keywordtype">void</span> release() {}
+<a name="l00045"></a>00045     };
+<a name="l00046"></a>00046   
+<a name="l00047"></a>00047     <a class="code" href="a00146.html">null_rw_mutex</a>() {}
+<a name="l00048"></a>00048     
+<a name="l00049"></a>00049     <span class="comment">// Mutex traits   </span>
+<a name="l00050"></a>00050     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">true</span>;   
+<a name="l00051"></a>00051     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">true</span>;
+<a name="l00052"></a>00052     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
+<a name="l00053"></a>00053 };  
+<a name="l00054"></a>00054 
+<a name="l00055"></a>00055 }
+<a name="l00056"></a>00056 
+<a name="l00057"></a>00057 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_null_rw_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00303.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00303.html
new file mode 100644 (file)
index 0000000..74a1184
--- /dev/null
@@ -0,0 +1,480 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>parallel_do.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>parallel_do.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_do_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_do_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;iterator&gt;</span>
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
+<a name="l00029"></a>00029 
+<a name="l00031"></a>00031 <span class="keyword">namespace </span>internal {
+<a name="l00032"></a>00032     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item&gt; <span class="keyword">class </span>parallel_do_feeder_impl;
+<a name="l00033"></a>00033     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body&gt; <span class="keyword">class </span>do_group_task;
+<a name="l00034"></a>00034 
+<a name="l00036"></a>00036     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00037"></a>00037     <span class="keyword">struct </span>strip { <span class="keyword">typedef</span> T type; };
+<a name="l00038"></a>00038     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00039"></a>00039     <span class="keyword">struct </span>strip&lt;T&amp;&gt; { <span class="keyword">typedef</span> T type; };
+<a name="l00040"></a>00040     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00041"></a>00041     <span class="keyword">struct </span>strip&lt;const T&amp;&gt; { <span class="keyword">typedef</span> T type; };
+<a name="l00042"></a>00042     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00043"></a>00043     <span class="keyword">struct </span>strip&lt;volatile T&amp;&gt; { <span class="keyword">typedef</span> T type; };
+<a name="l00044"></a>00044     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00045"></a>00045     <span class="keyword">struct </span>strip&lt;const volatile T&amp;&gt; { <span class="keyword">typedef</span> T type; };
+<a name="l00046"></a>00046     <span class="comment">// Most of the compilers remove cv-qualifiers from non-reference function argument types. </span>
+<a name="l00047"></a>00047     <span class="comment">// But unfortunately there are those that don't.</span>
+<a name="l00048"></a>00048     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00049"></a>00049     <span class="keyword">struct </span>strip&lt;const T&gt; { <span class="keyword">typedef</span> T type; };
+<a name="l00050"></a>00050     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00051"></a>00051     <span class="keyword">struct </span>strip&lt;volatile T&gt; { <span class="keyword">typedef</span> T type; };
+<a name="l00052"></a>00052     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00053"></a>00053     <span class="keyword">struct </span>strip&lt;const volatile T&gt; { <span class="keyword">typedef</span> T type; };
+<a name="l00054"></a>00054 } <span class="comment">// namespace internal</span>
+<a name="l00056"></a>00056 <span class="comment"></span>
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Item&gt;
+<a name="l00060"></a><a class="code" href="a00148.html">00060</a> <span class="keyword">class </span><a class="code" href="a00148.html">parallel_do_feeder</a>: internal::no_copy
+<a name="l00061"></a>00061 {
+<a name="l00062"></a>00062     <a class="code" href="a00148.html">parallel_do_feeder</a>() {}
+<a name="l00063"></a>00063     <span class="keyword">virtual</span> ~<a class="code" href="a00148.html">parallel_do_feeder</a> () {}
+<a name="l00064"></a>00064     <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_add( <span class="keyword">const</span> Item&amp; item ) = 0;
+<a name="l00065"></a>00065     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::parallel_do_feeder_impl;
+<a name="l00066"></a>00066 <span class="keyword">public</span>:
+<a name="l00068"></a><a class="code" href="a00148.html#40baaf0f6856f4491dd0adf896c93516">00068</a>     <span class="keywordtype">void</span> <a class="code" href="a00148.html#40baaf0f6856f4491dd0adf896c93516">add</a>( <span class="keyword">const</span> Item&amp; item ) {internal_add(item);}
+<a name="l00069"></a>00069 };
+<a name="l00070"></a>00070 
+<a name="l00072"></a>00072 <span class="keyword">namespace </span>internal {
+<a name="l00074"></a>00074 
+<a name="l00076"></a>00076     <span class="keyword">template</span>&lt;<span class="keyword">class</span> Body, <span class="keyword">typename</span> Item&gt;
+<a name="l00077"></a>00077     <span class="keyword">class </span>parallel_do_operator_selector
+<a name="l00078"></a>00078     {
+<a name="l00079"></a>00079         <span class="keyword">typedef</span> parallel_do_feeder&lt;Item&gt; Feeder;
+<a name="l00080"></a>00080         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2, <span class="keyword">typename</span> CvItem &gt;
+<a name="l00081"></a>00081         <span class="keyword">static</span> <span class="keywordtype">void</span> internal_call( <span class="keyword">const</span> Body&amp; obj, A1&amp; arg1, A2&amp;, <span class="keywordtype">void</span> (Body::*)(CvItem) <span class="keyword">const</span> ) {
+<a name="l00082"></a>00082             obj(arg1);
+<a name="l00083"></a>00083         }
+<a name="l00084"></a>00084         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2, <span class="keyword">typename</span> CvItem &gt;
+<a name="l00085"></a>00085         <span class="keyword">static</span> <span class="keywordtype">void</span> internal_call( <span class="keyword">const</span> Body&amp; obj, A1&amp; arg1, A2&amp; arg2, <span class="keywordtype">void</span> (Body::*)(CvItem, parallel_do_feeder&lt;Item&gt;&amp;) <span class="keyword">const</span> ) {
+<a name="l00086"></a>00086             obj(arg1, arg2);
+<a name="l00087"></a>00087         }
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089     <span class="keyword">public</span>:
+<a name="l00090"></a>00090         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2 &gt;
+<a name="l00091"></a>00091         <span class="keyword">static</span> <span class="keywordtype">void</span> call( <span class="keyword">const</span> Body&amp; obj, A1&amp; arg1, A2&amp; arg2 )
+<a name="l00092"></a>00092         {
+<a name="l00093"></a>00093             internal_call( obj, arg1, arg2, &amp;Body::operator() );
+<a name="l00094"></a>00094         }
+<a name="l00095"></a>00095     };
+<a name="l00096"></a>00096 
+<a name="l00098"></a>00098 
+<a name="l00100"></a>00100     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item&gt;
+<a name="l00101"></a>00101     <span class="keyword">class </span>do_iteration_task: <span class="keyword">public</span> task
+<a name="l00102"></a>00102     {
+<a name="l00103"></a>00103         <span class="keyword">typedef</span> parallel_do_feeder_impl&lt;Body, Item&gt; feeder_type;
+<a name="l00104"></a>00104 
+<a name="l00105"></a>00105         Item my_value;
+<a name="l00106"></a>00106         feeder_type&amp; my_feeder;
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108         do_iteration_task( <span class="keyword">const</span> Item&amp; value, feeder_type&amp; feeder ) : 
+<a name="l00109"></a>00109             my_value(value), my_feeder(feeder)
+<a name="l00110"></a>00110         {}
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112         <span class="comment">/*override*/</span> 
+<a name="l00113"></a>00113         task* execute()
+<a name="l00114"></a>00114         {
+<a name="l00115"></a>00115             parallel_do_operator_selector&lt;Body, Item&gt;::call(*my_feeder.my_body, my_value, my_feeder);
+<a name="l00116"></a>00116             <span class="keywordflow">return</span> NULL;
+<a name="l00117"></a>00117         }
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_&gt; <span class="keyword">friend</span> <span class="keyword">class </span>parallel_do_feeder_impl;
+<a name="l00120"></a>00120     }; <span class="comment">// class do_iteration_task</span>
+<a name="l00121"></a>00121 
+<a name="l00122"></a>00122     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item&gt;
+<a name="l00123"></a>00123     <span class="keyword">class </span>do_iteration_task_iter: <span class="keyword">public</span> task
+<a name="l00124"></a>00124     {
+<a name="l00125"></a>00125         <span class="keyword">typedef</span> parallel_do_feeder_impl&lt;Body, Item&gt; feeder_type;
+<a name="l00126"></a>00126 
+<a name="l00127"></a>00127         Iterator my_iter;
+<a name="l00128"></a>00128         feeder_type&amp; my_feeder;
+<a name="l00129"></a>00129 
+<a name="l00130"></a>00130         do_iteration_task_iter( <span class="keyword">const</span> Iterator&amp; iter, feeder_type&amp; feeder ) : 
+<a name="l00131"></a>00131             my_iter(iter), my_feeder(feeder)
+<a name="l00132"></a>00132         {}
+<a name="l00133"></a>00133 
+<a name="l00134"></a>00134         <span class="comment">/*override*/</span> 
+<a name="l00135"></a>00135         task* execute()
+<a name="l00136"></a>00136         {
+<a name="l00137"></a>00137             parallel_do_operator_selector&lt;Body, Item&gt;::call(*my_feeder.my_body, *my_iter, my_feeder);
+<a name="l00138"></a>00138             <span class="keywordflow">return</span> NULL;
+<a name="l00139"></a>00139         }
+<a name="l00140"></a>00140 
+<a name="l00141"></a>00141         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator_, <span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_&gt; <span class="keyword">friend</span> <span class="keyword">class </span>do_group_task_forward;    
+<a name="l00142"></a>00142         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_&gt; <span class="keyword">friend</span> <span class="keyword">class </span>do_group_task_input;    
+<a name="l00143"></a>00143         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator_, <span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_&gt; <span class="keyword">friend</span> <span class="keyword">class </span>do_task_iter;    
+<a name="l00144"></a>00144     }; <span class="comment">// class do_iteration_task_iter</span>
+<a name="l00145"></a>00145 
+<a name="l00147"></a>00147 
+<a name="l00149"></a>00149     <span class="keyword">template</span>&lt;<span class="keyword">class</span> Body, <span class="keyword">typename</span> Item&gt;
+<a name="l00150"></a>00150     <span class="keyword">class </span>parallel_do_feeder_impl : <span class="keyword">public</span> parallel_do_feeder&lt;Item&gt;
+<a name="l00151"></a>00151     {
+<a name="l00152"></a>00152         <span class="comment">/*override*/</span> 
+<a name="l00153"></a>00153         <span class="keywordtype">void</span> internal_add( <span class="keyword">const</span> Item&amp; item )
+<a name="l00154"></a>00154         {
+<a name="l00155"></a>00155             <span class="keyword">typedef</span> do_iteration_task&lt;Body, Item&gt; iteration_type;
+<a name="l00156"></a>00156 
+<a name="l00157"></a>00157             iteration_type&amp; t = *<span class="keyword">new</span> (<a class="code" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().allocate_additional_child_of(*my_barrier)) iteration_type(item, *<span class="keyword">this</span>);
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159             t.spawn( t );
+<a name="l00160"></a>00160         }
+<a name="l00161"></a>00161     <span class="keyword">public</span>:
+<a name="l00162"></a>00162         <span class="keyword">const</span> Body* my_body;
+<a name="l00163"></a>00163         empty_task* my_barrier;
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165         parallel_do_feeder_impl()
+<a name="l00166"></a>00166         {
+<a name="l00167"></a>00167             my_barrier = <span class="keyword">new</span>( <a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>() ) empty_task();
+<a name="l00168"></a>00168             __TBB_ASSERT(my_barrier, <span class="stringliteral">"root task allocation failed"</span>);
+<a name="l00169"></a>00169         }
+<a name="l00170"></a>00170 
+<a name="l00171"></a>00171 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00172"></a>00172 <span class="preprocessor"></span>        parallel_do_feeder_impl(<a class="code" href="a00167.html">tbb::task_group_context</a> &amp;context)
+<a name="l00173"></a>00173         {
+<a name="l00174"></a>00174             my_barrier = <span class="keyword">new</span>( <a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(context) ) empty_task();
+<a name="l00175"></a>00175             __TBB_ASSERT(my_barrier, <span class="stringliteral">"root task allocation failed"</span>);
+<a name="l00176"></a>00176         }
+<a name="l00177"></a>00177 <span class="preprocessor">#endif</span>
+<a name="l00178"></a>00178 <span class="preprocessor"></span>
+<a name="l00179"></a>00179         ~parallel_do_feeder_impl()
+<a name="l00180"></a>00180         {
+<a name="l00181"></a>00181             my_barrier-&gt;destroy(*my_barrier);
+<a name="l00182"></a>00182         }
+<a name="l00183"></a>00183     }; <span class="comment">// class parallel_do_feeder_impl</span>
+<a name="l00184"></a>00184 
+<a name="l00185"></a>00185 
+<a name="l00187"></a>00187 
+<a name="l00190"></a>00190     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item&gt;
+<a name="l00191"></a>00191     <span class="keyword">class </span>do_group_task_forward: <span class="keyword">public</span> task
+<a name="l00192"></a>00192     {
+<a name="l00193"></a>00193         <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;         
+<a name="l00194"></a>00194 
+<a name="l00195"></a>00195         <span class="keyword">typedef</span> parallel_do_feeder_impl&lt;Body, Item&gt; feeder_type;
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197         feeder_type&amp; my_feeder;
+<a name="l00198"></a>00198         Iterator my_first;
+<a name="l00199"></a>00199         size_t my_size;
+<a name="l00200"></a>00200         
+<a name="l00201"></a>00201         do_group_task_forward( Iterator first, size_t size, feeder_type&amp; feeder ) 
+<a name="l00202"></a>00202             : my_feeder(feeder), my_first(first), my_size(size)
+<a name="l00203"></a>00203         {}
+<a name="l00204"></a>00204 
+<a name="l00205"></a>00205         <span class="comment">/*override*/</span> task* execute()
+<a name="l00206"></a>00206         {
+<a name="l00207"></a>00207             <span class="keyword">typedef</span> do_iteration_task_iter&lt;Iterator, Body, Item&gt; iteration_type;
+<a name="l00208"></a>00208             __TBB_ASSERT( my_size&gt;0, NULL );
+<a name="l00209"></a>00209             task_list list;
+<a name="l00210"></a>00210             task* t; 
+<a name="l00211"></a>00211             size_t k=0; 
+<a name="l00212"></a>00212             <span class="keywordflow">for</span>(;;) {
+<a name="l00213"></a>00213                 t = <span class="keyword">new</span>( allocate_child() ) iteration_type( my_first, my_feeder );
+<a name="l00214"></a>00214                 ++my_first;
+<a name="l00215"></a>00215                 <span class="keywordflow">if</span>( ++k==my_size ) <span class="keywordflow">break</span>;
+<a name="l00216"></a>00216                 list.push_back(*t);
+<a name="l00217"></a>00217             }
+<a name="l00218"></a>00218             set_ref_count(<span class="keywordtype">int</span>(k+1));
+<a name="l00219"></a>00219             spawn(list);
+<a name="l00220"></a>00220             spawn_and_wait_for_all(*t);
+<a name="l00221"></a>00221             <span class="keywordflow">return</span> NULL;
+<a name="l00222"></a>00222         }
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator_, <span class="keyword">typename</span> Body_, <span class="keyword">typename</span> _Item&gt; <span class="keyword">friend</span> <span class="keyword">class </span>do_task_iter;
+<a name="l00225"></a>00225     }; <span class="comment">// class do_group_task_forward</span>
+<a name="l00226"></a>00226 
+<a name="l00227"></a>00227     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item&gt;
+<a name="l00228"></a>00228     <span class="keyword">class </span>do_group_task_input: <span class="keyword">public</span> task
+<a name="l00229"></a>00229     {
+<a name="l00230"></a>00230         <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;         
+<a name="l00231"></a>00231         
+<a name="l00232"></a>00232         <span class="keyword">typedef</span> parallel_do_feeder_impl&lt;Body, Item&gt; feeder_type;
+<a name="l00233"></a>00233 
+<a name="l00234"></a>00234         feeder_type&amp; my_feeder;
+<a name="l00235"></a>00235         size_t my_size;
+<a name="l00236"></a>00236         aligned_space&lt;Item, max_arg_size&gt; my_arg;
+<a name="l00237"></a>00237 
+<a name="l00238"></a>00238         do_group_task_input( feeder_type&amp; feeder ) 
+<a name="l00239"></a>00239             : my_feeder(feeder), my_size(0)
+<a name="l00240"></a>00240         {}
+<a name="l00241"></a>00241 
+<a name="l00242"></a>00242         <span class="comment">/*override*/</span> task* execute()
+<a name="l00243"></a>00243         {
+<a name="l00244"></a>00244             <span class="keyword">typedef</span> do_iteration_task_iter&lt;Item*, Body, Item&gt; iteration_type;
+<a name="l00245"></a>00245             __TBB_ASSERT( my_size&gt;0, NULL );
+<a name="l00246"></a>00246             task_list list;
+<a name="l00247"></a>00247             task* t; 
+<a name="l00248"></a>00248             size_t k=0; 
+<a name="l00249"></a>00249             <span class="keywordflow">for</span>(;;) {
+<a name="l00250"></a>00250                 t = <span class="keyword">new</span>( allocate_child() ) iteration_type( my_arg.begin() + k, my_feeder );
+<a name="l00251"></a>00251                 <span class="keywordflow">if</span>( ++k==my_size ) <span class="keywordflow">break</span>;
+<a name="l00252"></a>00252                 list.push_back(*t);
+<a name="l00253"></a>00253             }
+<a name="l00254"></a>00254             set_ref_count(<span class="keywordtype">int</span>(k+1));
+<a name="l00255"></a>00255             spawn(list);
+<a name="l00256"></a>00256             spawn_and_wait_for_all(*t);
+<a name="l00257"></a>00257             <span class="keywordflow">return</span> NULL;
+<a name="l00258"></a>00258         }
+<a name="l00259"></a>00259 
+<a name="l00260"></a>00260         ~do_group_task_input(){
+<a name="l00261"></a>00261             <span class="keywordflow">for</span>( size_t k=0; k&lt;my_size; ++k)
+<a name="l00262"></a>00262                 (my_arg.begin() + k)-&gt;~Item();
+<a name="l00263"></a>00263         }
+<a name="l00264"></a>00264 
+<a name="l00265"></a>00265         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator_, <span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_&gt; <span class="keyword">friend</span> <span class="keyword">class </span>do_task_iter;
+<a name="l00266"></a>00266     }; <span class="comment">// class do_group_task_input</span>
+<a name="l00267"></a>00267     
+<a name="l00269"></a>00269 
+<a name="l00271"></a>00271     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item&gt;
+<a name="l00272"></a>00272     <span class="keyword">class </span>do_task_iter: <span class="keyword">public</span> task
+<a name="l00273"></a>00273     {
+<a name="l00274"></a>00274         <span class="keyword">typedef</span> parallel_do_feeder_impl&lt;Body, Item&gt; feeder_type;
+<a name="l00275"></a>00275 
+<a name="l00276"></a>00276     <span class="keyword">public</span>:
+<a name="l00277"></a>00277         do_task_iter( Iterator first, Iterator last , feeder_type&amp; feeder ) : 
+<a name="l00278"></a>00278             my_first(first), my_last(last), my_feeder(feeder)
+<a name="l00279"></a>00279         {}
+<a name="l00280"></a>00280 
+<a name="l00281"></a>00281     <span class="keyword">private</span>:
+<a name="l00282"></a>00282         Iterator my_first;
+<a name="l00283"></a>00283         Iterator my_last;
+<a name="l00284"></a>00284         feeder_type&amp; my_feeder;
+<a name="l00285"></a>00285 
+<a name="l00286"></a>00286         <span class="comment">/* Do not merge run(xxx) and run_xxx() methods. They are separated in order</span>
+<a name="l00287"></a>00287 <span class="comment">            to make sure that compilers will eliminate unused argument of type xxx</span>
+<a name="l00288"></a>00288 <span class="comment">            (that is will not put it on stack). The sole purpose of this argument </span>
+<a name="l00289"></a>00289 <span class="comment">            is overload resolution.</span>
+<a name="l00290"></a>00290 <span class="comment">            </span>
+<a name="l00291"></a>00291 <span class="comment">            An alternative could be using template functions, but explicit specialization </span>
+<a name="l00292"></a>00292 <span class="comment">            of member function templates is not supported for non specialized class </span>
+<a name="l00293"></a>00293 <span class="comment">            templates. Besides template functions would always fall back to the least </span>
+<a name="l00294"></a>00294 <span class="comment">            efficient variant (the one for input iterators) in case of iterators having </span>
+<a name="l00295"></a>00295 <span class="comment">            custom tags derived from basic ones. */</span>
+<a name="l00296"></a>00296         <span class="comment">/*override*/</span> task* execute()
+<a name="l00297"></a>00297         {
+<a name="l00298"></a>00298             <span class="keyword">typedef</span> <span class="keyword">typename</span> std::iterator_traits&lt;Iterator&gt;::iterator_category iterator_tag;
+<a name="l00299"></a>00299             <span class="keywordflow">return</span> run( (iterator_tag*)NULL );
+<a name="l00300"></a>00300         }
+<a name="l00301"></a>00301 
+<a name="l00304"></a>00304         <span class="keyword">inline</span> task* run( <span class="keywordtype">void</span>* ) { <span class="keywordflow">return</span> run_for_input_iterator(); }
+<a name="l00305"></a>00305         
+<a name="l00306"></a>00306         task* run_for_input_iterator() {
+<a name="l00307"></a>00307             <span class="keyword">typedef</span> do_group_task_input&lt;Body, Item&gt; block_type;
+<a name="l00308"></a>00308 
+<a name="l00309"></a>00309             block_type&amp; t = *<span class="keyword">new</span>( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(my_feeder);
+<a name="l00310"></a>00310             size_t k=0; 
+<a name="l00311"></a>00311             <span class="keywordflow">while</span>( !(my_first == my_last) ) {
+<a name="l00312"></a>00312                 <span class="keyword">new</span> (t.my_arg.begin() + k) Item(*my_first);
+<a name="l00313"></a>00313                 ++my_first;
+<a name="l00314"></a>00314                 <span class="keywordflow">if</span>( ++k==block_type::max_arg_size ) {
+<a name="l00315"></a>00315                     <span class="keywordflow">if</span> ( !(my_first == my_last) )
+<a name="l00316"></a>00316                         recycle_to_reexecute();
+<a name="l00317"></a>00317                     <span class="keywordflow">break</span>;
+<a name="l00318"></a>00318                 }
+<a name="l00319"></a>00319             }
+<a name="l00320"></a>00320             <span class="keywordflow">if</span>( k==0 ) {
+<a name="l00321"></a>00321                 destroy(t);
+<a name="l00322"></a>00322                 <span class="keywordflow">return</span> NULL;
+<a name="l00323"></a>00323             } <span class="keywordflow">else</span> {
+<a name="l00324"></a>00324                 t.my_size = k;
+<a name="l00325"></a>00325                 <span class="keywordflow">return</span> &amp;t;
+<a name="l00326"></a>00326             }
+<a name="l00327"></a>00327         }
+<a name="l00328"></a>00328 
+<a name="l00329"></a>00329         <span class="keyword">inline</span> task* run( std::forward_iterator_tag* ) { <span class="keywordflow">return</span> run_for_forward_iterator(); }
+<a name="l00330"></a>00330 
+<a name="l00331"></a>00331         task* run_for_forward_iterator() {
+<a name="l00332"></a>00332             <span class="keyword">typedef</span> do_group_task_forward&lt;Iterator, Body, Item&gt; block_type;
+<a name="l00333"></a>00333 
+<a name="l00334"></a>00334             Iterator first = my_first;
+<a name="l00335"></a>00335             size_t k=0; 
+<a name="l00336"></a>00336             <span class="keywordflow">while</span>( !(my_first==my_last) ) {
+<a name="l00337"></a>00337                 ++my_first;
+<a name="l00338"></a>00338                 <span class="keywordflow">if</span>( ++k==block_type::max_arg_size ) {
+<a name="l00339"></a>00339                     <span class="keywordflow">if</span> ( !(my_first==my_last) )
+<a name="l00340"></a>00340                         recycle_to_reexecute();
+<a name="l00341"></a>00341                     <span class="keywordflow">break</span>;
+<a name="l00342"></a>00342                 }
+<a name="l00343"></a>00343             }
+<a name="l00344"></a>00344             <span class="keywordflow">return</span> k==0 ? NULL : <span class="keyword">new</span>( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(first, k, my_feeder);
+<a name="l00345"></a>00345         }
+<a name="l00346"></a>00346         
+<a name="l00347"></a>00347         <span class="keyword">inline</span> task* run( std::random_access_iterator_tag* ) { <span class="keywordflow">return</span> run_for_random_access_iterator(); }
+<a name="l00348"></a>00348 
+<a name="l00349"></a>00349         task* run_for_random_access_iterator() {
+<a name="l00350"></a>00350             <span class="keyword">typedef</span> do_group_task_forward&lt;Iterator, Body, Item&gt; block_type;
+<a name="l00351"></a>00351             <span class="keyword">typedef</span> do_iteration_task_iter&lt;Iterator, Body, Item&gt; iteration_type;
+<a name="l00352"></a>00352             
+<a name="l00353"></a>00353             size_t k = static_cast&lt;size_t&gt;(my_last-my_first); 
+<a name="l00354"></a>00354             <span class="keywordflow">if</span>( k &gt; block_type::max_arg_size ) {
+<a name="l00355"></a>00355                 Iterator middle = my_first + k/2;
+<a name="l00356"></a>00356 
+<a name="l00357"></a>00357                 empty_task&amp; c = *<span class="keyword">new</span>( allocate_continuation() ) empty_task;
+<a name="l00358"></a>00358                 do_task_iter&amp; b = *<span class="keyword">new</span>( c.allocate_child() ) do_task_iter(middle, my_last, my_feeder);
+<a name="l00359"></a>00359                 recycle_as_child_of(c);
+<a name="l00360"></a>00360 
+<a name="l00361"></a>00361                 my_last = middle;
+<a name="l00362"></a>00362                 c.set_ref_count(2);
+<a name="l00363"></a>00363                 c.spawn(b);
+<a name="l00364"></a>00364                 <span class="keywordflow">return</span> <span class="keyword">this</span>;
+<a name="l00365"></a>00365             }<span class="keywordflow">else</span> <span class="keywordflow">if</span>( k != 0 ) {
+<a name="l00366"></a>00366                 task_list list;
+<a name="l00367"></a>00367                 task* t; 
+<a name="l00368"></a>00368                 size_t k1=0; 
+<a name="l00369"></a>00369                 <span class="keywordflow">for</span>(;;) {
+<a name="l00370"></a>00370                     t = <span class="keyword">new</span>( allocate_child() ) iteration_type(my_first, my_feeder);
+<a name="l00371"></a>00371                     ++my_first;
+<a name="l00372"></a>00372                     <span class="keywordflow">if</span>( ++k1==k ) <span class="keywordflow">break</span>;
+<a name="l00373"></a>00373                     list.push_back(*t);
+<a name="l00374"></a>00374                 }
+<a name="l00375"></a>00375                 set_ref_count(<span class="keywordtype">int</span>(k+1));
+<a name="l00376"></a>00376                 spawn(list);
+<a name="l00377"></a>00377                 spawn_and_wait_for_all(*t);
+<a name="l00378"></a>00378             }
+<a name="l00379"></a>00379             <span class="keywordflow">return</span> NULL;
+<a name="l00380"></a>00380         }
+<a name="l00381"></a>00381     }; <span class="comment">// class do_task_iter</span>
+<a name="l00382"></a>00382 
+<a name="l00384"></a>00384 
+<a name="l00386"></a>00386     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item&gt; 
+<a name="l00387"></a>00387     <span class="keywordtype">void</span> run_parallel_do( Iterator first, Iterator last, <span class="keyword">const</span> Body&amp; body
+<a name="l00388"></a>00388 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00389"></a>00389         , task_group_context&amp; context
+<a name="l00390"></a>00390 #endif
+<a name="l00391"></a>00391         )
+<a name="l00392"></a>00392     {
+<a name="l00393"></a>00393         <span class="keyword">typedef</span> do_task_iter&lt;Iterator, Body, Item&gt; root_iteration_task;
+<a name="l00394"></a>00394 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00395"></a>00395 <span class="preprocessor"></span>        parallel_do_feeder_impl&lt;Body, Item&gt; feeder(context);
+<a name="l00396"></a>00396 <span class="preprocessor">#else</span>
+<a name="l00397"></a>00397 <span class="preprocessor"></span>        parallel_do_feeder_impl&lt;Body, Item&gt; feeder;
+<a name="l00398"></a>00398 <span class="preprocessor">#endif</span>
+<a name="l00399"></a>00399 <span class="preprocessor"></span>        feeder.my_body = &amp;body;
+<a name="l00400"></a>00400 
+<a name="l00401"></a>00401         root_iteration_task &amp;t = *<span class="keyword">new</span>( feeder.my_barrier-&gt;allocate_child() ) root_iteration_task(first, last, feeder);
+<a name="l00402"></a>00402 
+<a name="l00403"></a>00403         feeder.my_barrier-&gt;set_ref_count(2);
+<a name="l00404"></a>00404         feeder.my_barrier-&gt;spawn_and_wait_for_all(t);
+<a name="l00405"></a>00405     }
+<a name="l00406"></a>00406 
+<a name="l00408"></a>00408 
+<a name="l00410"></a>00410     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item&gt; 
+<a name="l00411"></a>00411     <span class="keywordtype">void</span> select_parallel_do( Iterator first, Iterator last, <span class="keyword">const</span> Body&amp; body, <span class="keywordtype">void</span> (Body::*)(Item) <span class="keyword">const</span>
+<a name="l00412"></a>00412 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00413"></a>00413         , task_group_context&amp; context 
+<a name="l00414"></a>00414 #endif <span class="comment">// __TBB_EXCEPTIONS </span>
+<a name="l00415"></a>00415         )
+<a name="l00416"></a>00416     {
+<a name="l00417"></a>00417         run_parallel_do&lt;Iterator, Body, typename strip&lt;Item&gt;::type&gt;( first, last, body
+<a name="l00418"></a>00418 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00419"></a>00419 <span class="preprocessor"></span>            , context
+<a name="l00420"></a>00420 <span class="preprocessor">#endif // __TBB_EXCEPTIONS </span>
+<a name="l00421"></a>00421 <span class="preprocessor"></span>            );
+<a name="l00422"></a>00422     }
+<a name="l00423"></a>00423 
+<a name="l00425"></a>00425 
+<a name="l00427"></a>00427     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item, <span class="keyword">typename</span> _Item&gt; 
+<a name="l00428"></a>00428     <span class="keywordtype">void</span> select_parallel_do( Iterator first, Iterator last, <span class="keyword">const</span> Body&amp; body, <span class="keywordtype">void</span> (Body::*)(Item, parallel_do_feeder&lt;_Item&gt;&amp;) <span class="keyword">const</span>
+<a name="l00429"></a>00429 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00430"></a>00430         , task_group_context&amp; context 
+<a name="l00431"></a>00431 #endif <span class="comment">// __TBB_EXCEPTIONS</span>
+<a name="l00432"></a>00432         )
+<a name="l00433"></a>00433     {
+<a name="l00434"></a>00434         run_parallel_do&lt;Iterator, Body, typename strip&lt;Item&gt;::type&gt;( first, last, body
+<a name="l00435"></a>00435 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00436"></a>00436 <span class="preprocessor"></span>            , context
+<a name="l00437"></a>00437 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
+<a name="l00438"></a>00438 <span class="preprocessor"></span>            );
+<a name="l00439"></a>00439     }
+<a name="l00440"></a>00440 
+<a name="l00441"></a>00441 } <span class="comment">// namespace internal</span>
+<a name="l00443"></a>00443 <span class="comment"></span>
+<a name="l00444"></a>00444 
+<a name="l00467"></a>00467 
+<a name="l00468"></a>00468 
+<a name="l00469"></a>00469 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body&gt; 
+<a name="l00470"></a><a class="code" href="a00233.html#g3383e2703977012b6f384d673410f1f7">00470</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g3383e2703977012b6f384d673410f1f7">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body&amp; body )
+<a name="l00471"></a>00471 {
+<a name="l00472"></a>00472     <span class="keywordflow">if</span> ( first == last )
+<a name="l00473"></a>00473         <span class="keywordflow">return</span>;
+<a name="l00474"></a>00474 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00475"></a>00475 <span class="preprocessor"></span>    <a class="code" href="a00167.html">task_group_context</a> context;
+<a name="l00476"></a>00476 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
+<a name="l00477"></a>00477 <span class="preprocessor"></span>    internal::select_parallel_do( first, last, body, &amp;Body::operator()
+<a name="l00478"></a>00478 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00479"></a>00479         , context
+<a name="l00480"></a>00480 #endif <span class="comment">// __TBB_EXCEPTIONS</span>
+<a name="l00481"></a>00481         );
+<a name="l00482"></a>00482 }
+<a name="l00483"></a>00483 
+<a name="l00484"></a>00484 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00486"></a>00486 <span class="preprocessor"></span>
+<a name="l00487"></a>00487 <span class="preprocessor">template&lt;typename Iterator, typename Body&gt; </span>
+<a name="l00488"></a><a class="code" href="a00233.html#g2617dc9b88b3285a7212599d49f74228">00488</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00233.html#g3383e2703977012b6f384d673410f1f7">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body&amp; body, <a class="code" href="a00167.html">task_group_context</a>&amp; context  )
+<a name="l00489"></a>00489 {
+<a name="l00490"></a>00490     <span class="keywordflow">if</span> ( first == last )
+<a name="l00491"></a>00491         <span class="keywordflow">return</span>;
+<a name="l00492"></a>00492     internal::select_parallel_do( first, last, body, &amp;Body::operator(), context );
+<a name="l00493"></a>00493 }
+<a name="l00494"></a>00494 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
+<a name="l00495"></a>00495 <span class="preprocessor"></span>
+<a name="l00497"></a>00497 
+<a name="l00498"></a>00498 } <span class="comment">// namespace </span>
+<a name="l00499"></a>00499 
+<a name="l00500"></a>00500 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_do_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00312.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00312.html
new file mode 100644 (file)
index 0000000..e4513ae
--- /dev/null
@@ -0,0 +1,226 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>parallel_for.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>parallel_for.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_for_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_for_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "partitioner.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "blocked_range.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;new&gt;</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;stdexcept&gt;</span> <span class="comment">// std::invalid_argument</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;string&gt;</span> <span class="comment">// std::invalid_argument text</span>
+<a name="l00030"></a>00030 
+<a name="l00031"></a>00031 <span class="keyword">namespace </span>tbb {
+<a name="l00032"></a>00032 
+<a name="l00034"></a>00034 <span class="keyword">namespace </span>internal {
+<a name="l00035"></a>00035 
+<a name="l00037"></a>00037 
+<a name="l00038"></a>00038     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt;
+<a name="l00039"></a>00039     <span class="keyword">class </span>start_for: <span class="keyword">public</span> task {
+<a name="l00040"></a>00040         Range my_range;
+<a name="l00041"></a>00041         <span class="keyword">const</span> Body my_body;
+<a name="l00042"></a>00042         <span class="keyword">typename</span> Partitioner::partition_type my_partition;
+<a name="l00043"></a>00043         <span class="comment">/*override*/</span> task* execute();
+<a name="l00044"></a>00044 
+<a name="l00046"></a>00046         start_for( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Body&amp; body, Partitioner&amp; partitioner ) :
+<a name="l00047"></a>00047             my_range(range),    
+<a name="l00048"></a>00048             my_body(body),
+<a name="l00049"></a>00049             my_partition(partitioner)
+<a name="l00050"></a>00050         {
+<a name="l00051"></a>00051         }
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054         start_for( start_for&amp; parent, split ) :
+<a name="l00055"></a>00055             my_range(parent.my_range,split()),    
+<a name="l00056"></a>00056             my_body(parent.my_body),
+<a name="l00057"></a>00057             my_partition(parent.my_partition,split())
+<a name="l00058"></a>00058         {
+<a name="l00059"></a>00059             my_partition.set_affinity(*<span class="keyword">this</span>);
+<a name="l00060"></a>00060         }
+<a name="l00062"></a>00062         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
+<a name="l00063"></a>00063             my_partition.note_affinity( <span class="keywordtype">id</span> );
+<a name="l00064"></a>00064         }
+<a name="l00065"></a>00065     <span class="keyword">public</span>:
+<a name="l00066"></a>00066         <span class="keyword">static</span> <span class="keywordtype">void</span> run(  <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Body&amp; body, <span class="keyword">const</span> Partitioner&amp; partitioner ) {
+<a name="l00067"></a>00067             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00068"></a>00068 #<span class="keywordflow">if</span> !__TBB_EXCEPTIONS || TBB_JOIN_OUTER_TASK_GROUP
+<a name="l00069"></a>00069                 start_for&amp; a = *<span class="keyword">new</span>(<a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_for(range,body,const_cast&lt;Partitioner&amp;&gt;(partitioner));
+<a name="l00070"></a>00070 <span class="preprocessor">#else</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
+<a name="l00072"></a>00072                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
+<a name="l00073"></a>00073                 task_group_context context;
+<a name="l00074"></a>00074                 start_for&amp; a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast&lt;Partitioner&amp;&gt;(partitioner));
+<a name="l00075"></a>00075 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS &amp;&amp; !TBB_JOIN_OUTER_TASK_GROUP */</span>
+<a name="l00076"></a>00076                 <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
+<a name="l00077"></a>00077             }
+<a name="l00078"></a>00078         }
+<a name="l00079"></a>00079 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keywordtype">void</span> run(  <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Body&amp; body, <span class="keyword">const</span> Partitioner&amp; partitioner, task_group_context&amp; context ) {
+<a name="l00081"></a>00081             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00082"></a>00082                 start_for&amp; a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast&lt;Partitioner&amp;&gt;(partitioner));
+<a name="l00083"></a>00083                 <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
+<a name="l00084"></a>00084             }
+<a name="l00085"></a>00085         }
+<a name="l00086"></a>00086 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00087"></a>00087     };
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt;
+<a name="l00090"></a>00090     task* start_for&lt;Range,Body,Partitioner&gt;::execute() {
+<a name="l00091"></a>00091         <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
+<a name="l00092"></a>00092             my_body( my_range );
+<a name="l00093"></a>00093             <span class="keywordflow">return</span> my_partition.continue_after_execute_range(*<span class="keyword">this</span>); 
+<a name="l00094"></a>00094         } <span class="keywordflow">else</span> {
+<a name="l00095"></a>00095             empty_task&amp; c = *<span class="keyword">new</span>( this-&gt;allocate_continuation() ) empty_task;
+<a name="l00096"></a>00096             recycle_as_child_of(c);
+<a name="l00097"></a>00097             c.set_ref_count(2);
+<a name="l00098"></a>00098             <span class="keywordtype">bool</span> delay = my_partition.decide_whether_to_delay();
+<a name="l00099"></a>00099             start_for&amp; b = *<span class="keyword">new</span>( c.allocate_child() ) start_for(*<span class="keyword">this</span>,split());
+<a name="l00100"></a>00100             my_partition.spawn_or_delay(delay,*<span class="keyword">this</span>,b);
+<a name="l00101"></a>00101             <span class="keywordflow">return</span> <span class="keyword">this</span>;
+<a name="l00102"></a>00102         }
+<a name="l00103"></a>00103     } 
+<a name="l00104"></a>00104 } <span class="comment">// namespace internal</span>
+<a name="l00106"></a>00106 <span class="comment"></span>
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
+<a name="l00109"></a>00109 
+<a name="l00120"></a>00120 
+<a name="l00122"></a>00122 
+<a name="l00123"></a>00123 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00124"></a><a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">00124</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Body&amp; body ) {
+<a name="l00125"></a>00125     internal::start_for&lt;Range,Body,__TBB_DEFAULT_PARTITIONER&gt;::run(range,body,__TBB_DEFAULT_PARTITIONER());
+<a name="l00126"></a>00126 }
+<a name="l00127"></a>00127 
+<a name="l00129"></a>00129 
+<a name="l00130"></a>00130 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00131"></a><a class="code" href="a00233.html#g13cac5dd55c7533bccea43a51c33d0e5">00131</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Body&amp; body, <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>&amp; partitioner ) {
+<a name="l00132"></a>00132     internal::start_for&lt;Range,Body,simple_partitioner&gt;::run(range,body,partitioner);
+<a name="l00133"></a>00133 }
+<a name="l00134"></a>00134 
+<a name="l00136"></a>00136 
+<a name="l00137"></a>00137 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00138"></a><a class="code" href="a00233.html#ga7ac75d532389b55b9247f3fdb0b00d1">00138</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Body&amp; body, <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>&amp; partitioner ) {
+<a name="l00139"></a>00139     internal::start_for&lt;Range,Body,auto_partitioner&gt;::run(range,body,partitioner);
+<a name="l00140"></a>00140 }
+<a name="l00141"></a>00141 
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00145"></a><a class="code" href="a00233.html#g9cd1b210ceb1c040f30e390b4a21bde8">00145</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Body&amp; body, <a class="code" href="a00115.html">affinity_partitioner</a>&amp; partitioner ) {
+<a name="l00146"></a>00146     internal::start_for&lt;Range,Body,affinity_partitioner&gt;::run(range,body,partitioner);
+<a name="l00147"></a>00147 }
+<a name="l00148"></a>00148 
+<a name="l00149"></a>00149 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00151"></a>00151 <span class="preprocessor"></span>
+<a name="l00152"></a>00152 <span class="preprocessor">template&lt;typename Range, typename Body&gt;</span>
+<a name="l00153"></a><a class="code" href="a00233.html#g2d317a5e0078cd193125439fed60dfdc">00153</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Body&amp; body, <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>&amp; partitioner, <a class="code" href="a00167.html">task_group_context</a>&amp; context ) {
+<a name="l00154"></a>00154     internal::start_for&lt;Range,Body,simple_partitioner&gt;::run(range, body, partitioner, context);
+<a name="l00155"></a>00155 }
+<a name="l00156"></a>00156 
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00160"></a><a class="code" href="a00233.html#g1c0700e3f85e83a788ff3ede88ebb7e9">00160</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Body&amp; body, <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>&amp; partitioner, <a class="code" href="a00167.html">task_group_context</a>&amp; context ) {
+<a name="l00161"></a>00161     internal::start_for&lt;Range,Body,auto_partitioner&gt;::run(range, body, partitioner, context);
+<a name="l00162"></a>00162 }
+<a name="l00163"></a>00163 
+<a name="l00165"></a>00165 
+<a name="l00166"></a>00166 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00167"></a><a class="code" href="a00233.html#g04b4696b67370c01353ff5974c8f1196">00167</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Body&amp; body, <a class="code" href="a00115.html">affinity_partitioner</a>&amp; partitioner, <a class="code" href="a00167.html">task_group_context</a>&amp; context ) {
+<a name="l00168"></a>00168     internal::start_for&lt;Range,Body,affinity_partitioner&gt;::run(range,body,partitioner, context);
+<a name="l00169"></a>00169 }
+<a name="l00170"></a>00170 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172 
+<a name="l00174"></a>00174 <span class="keyword">namespace </span>internal {
+<a name="l00176"></a>00176 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Function, <span class="keyword">typename</span> Index&gt;
+<a name="l00177"></a>00177 <span class="keyword">class </span>parallel_for_body : internal::no_assign {
+<a name="l00178"></a>00178     Function &amp;my_func;
+<a name="l00179"></a>00179     <span class="keyword">const</span> Index my_begin;
+<a name="l00180"></a>00180     <span class="keyword">const</span> Index my_step; 
+<a name="l00181"></a>00181 <span class="keyword">public</span>:
+<a name="l00182"></a>00182     parallel_for_body( Function&amp; _func, Index&amp; _begin, Index&amp; _step) 
+<a name="l00183"></a>00183         : my_func(_func), my_begin(_begin), my_step(_step) {}
+<a name="l00184"></a>00184     
+<a name="l00185"></a>00185     <span class="keywordtype">void</span> operator()( <a class="code" href="a00122.html">tbb::blocked_range&lt;Index&gt;</a>&amp; r )<span class="keyword"> const </span>{
+<a name="l00186"></a>00186         <span class="keywordflow">for</span>( Index i = r.<a class="code" href="a00122.html#18d2258400756ac1446dac7676b18df3">begin</a>(),  k = my_begin + i * my_step; i &lt; r.<a class="code" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>(); i++, k = k + my_step)
+<a name="l00187"></a>00187             my_func( k );
+<a name="l00188"></a>00188     }
+<a name="l00189"></a>00189 };
+<a name="l00190"></a>00190 } <span class="comment">// namespace internal</span>
+<a name="l00192"></a>00192 <span class="comment"></span>
+<a name="l00193"></a>00193 <span class="keyword">namespace </span>strict_ppl {
+<a name="l00194"></a>00194 
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function&gt;
+<a name="l00198"></a><a class="code" href="a00232.html#c2173259899af1fe7751a32139ec3ebf">00198</a> Function <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, Function f) {
+<a name="l00199"></a>00199     <a class="code" href="a00167.html">tbb::task_group_context</a> context;
+<a name="l00200"></a>00200     <span class="keywordflow">return</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, step, f, context);
+<a name="l00201"></a>00201 }
+<a name="l00202"></a>00202 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function&gt;
+<a name="l00203"></a>00203 Function <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, Function f, <a class="code" href="a00167.html">tbb::task_group_context</a> &amp;context) {
+<a name="l00204"></a>00204     <span class="keywordflow">if</span> (step &lt;= 0 ) <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">"step should be positive"</span>);
+<a name="l00205"></a>00205 
+<a name="l00206"></a>00206     <span class="keywordflow">if</span> (last &gt; first) {
+<a name="l00207"></a>00207         Index end = (last - first) / step;
+<a name="l00208"></a>00208         <span class="keywordflow">if</span> (first + end * step &lt; last) end++;
+<a name="l00209"></a>00209         <a class="code" href="a00122.html">tbb::blocked_range&lt;Index&gt;</a> range(static_cast&lt;Index&gt;(0), end);
+<a name="l00210"></a>00210         internal::parallel_for_body&lt;Function, Index&gt; body(f, first, step);
+<a name="l00211"></a>00211         <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">tbb::parallel_for</a>(range, body, <a class="code" href="a00120.html">tbb::auto_partitioner</a>(), context);
+<a name="l00212"></a>00212     }
+<a name="l00213"></a>00213     <span class="keywordflow">return</span> f;
+<a name="l00214"></a>00214 }
+<a name="l00216"></a>00216 
+<a name="l00217"></a>00217 } <span class="comment">// namespace strict_ppl</span>
+<a name="l00218"></a>00218 
+<a name="l00219"></a>00219 <span class="keyword">using</span> <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">strict_ppl::parallel_for</a>;
+<a name="l00220"></a>00220 
+<a name="l00221"></a>00221 } <span class="comment">// namespace tbb</span>
+<a name="l00222"></a>00222 
+<a name="l00223"></a>00223 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_for_H */</span>
+<a name="l00224"></a>00224 
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00316.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00316.html
new file mode 100644 (file)
index 0000000..75f8a07
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>parallel_for_each.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>parallel_for_each.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_for_each_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_for_each_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "parallel_do.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
+<a name="l00027"></a>00027 
+<a name="l00029"></a>00029 <span class="keyword">namespace </span>internal {
+<a name="l00030"></a>00030     <span class="comment">// The class calls user function in operator()</span>
+<a name="l00031"></a>00031     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Function, <span class="keyword">typename</span> Iterator&gt;
+<a name="l00032"></a>00032     <span class="keyword">class </span>parallel_for_each_body : internal::no_assign {
+<a name="l00033"></a>00033         Function &amp;my_func;
+<a name="l00034"></a>00034     <span class="keyword">public</span>:
+<a name="l00035"></a>00035         parallel_for_each_body(Function &amp;_func) : my_func(_func) {}
+<a name="l00036"></a>00036         parallel_for_each_body(<span class="keyword">const</span> parallel_for_each_body&lt;Function, Iterator&gt; &amp;_caller) : my_func(_caller.my_func) {}
+<a name="l00037"></a>00037 
+<a name="l00038"></a>00038         <span class="keywordtype">void</span> operator() ( <span class="keyword">typename</span> std::iterator_traits&lt;Iterator&gt;::value_type value )<span class="keyword"> const </span>{
+<a name="l00039"></a>00039             my_func(value);
+<a name="l00040"></a>00040         }
+<a name="l00041"></a>00041     };
+<a name="l00042"></a>00042 } <span class="comment">// namespace internal</span>
+<a name="l00044"></a>00044 <span class="comment"></span>
+<a name="l00048"></a>00048 
+<a name="l00049"></a>00049 
+<a name="l00050"></a>00050 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> InputIterator, <span class="keyword">typename</span> Function&gt;
+<a name="l00051"></a><a class="code" href="a00233.html#gbcb40499f038fd82deca88366b404790">00051</a> Function <a class="code" href="a00233.html#gbcb40499f038fd82deca88366b404790">parallel_for_each</a>(InputIterator first, InputIterator last, Function f, <a class="code" href="a00167.html">task_group_context</a> &amp;context) {
+<a name="l00052"></a>00052     internal::parallel_for_each_body&lt;Function, InputIterator&gt; body(f);
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054     <a class="code" href="a00233.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body, context);
+<a name="l00055"></a>00055     <span class="keywordflow">return</span> f;
+<a name="l00056"></a>00056 }
+<a name="l00057"></a>00057 
+<a name="l00059"></a>00059 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> InputIterator, <span class="keyword">typename</span> Function&gt;
+<a name="l00060"></a><a class="code" href="a00233.html#g85a58ff0853f129adb6f9e4355326ccc">00060</a> Function <a class="code" href="a00233.html#gbcb40499f038fd82deca88366b404790">parallel_for_each</a>(InputIterator first, InputIterator last, Function f) {
+<a name="l00061"></a>00061     internal::parallel_for_each_body&lt;Function, InputIterator&gt; body(f);
+<a name="l00062"></a>00062 
+<a name="l00063"></a>00063     <a class="code" href="a00233.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body);
+<a name="l00064"></a>00064     <span class="keywordflow">return</span> f;
+<a name="l00065"></a>00065 }
+<a name="l00066"></a>00066 
+<a name="l00068"></a>00068 
+<a name="l00069"></a>00069 } <span class="comment">// namespace</span>
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_for_each_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00318.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00318.html
new file mode 100644 (file)
index 0000000..3096d79
--- /dev/null
@@ -0,0 +1,348 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>parallel_invoke.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>parallel_invoke.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_invoke_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_invoke_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
+<a name="l00027"></a>00027 
+<a name="l00029"></a>00029 <span class="keyword">namespace </span>internal {
+<a name="l00030"></a>00030     <span class="comment">// Simple task object, executing user method</span>
+<a name="l00031"></a>00031     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> function&gt;
+<a name="l00032"></a>00032     <span class="keyword">class </span>function_invoker : <span class="keyword">public</span> task{
+<a name="l00033"></a>00033     <span class="keyword">public</span>:
+<a name="l00034"></a>00034         function_invoker(function&amp; _function) : my_function(_function) {}
+<a name="l00035"></a>00035     <span class="keyword">private</span>:
+<a name="l00036"></a>00036         function &amp;my_function;
+<a name="l00037"></a>00037         <span class="comment">/*override*/</span>
+<a name="l00038"></a>00038         task* execute()
+<a name="l00039"></a>00039         {
+<a name="l00040"></a>00040             my_function();
+<a name="l00041"></a>00041             <span class="keywordflow">return</span> NULL;
+<a name="l00042"></a>00042         }
+<a name="l00043"></a>00043     };
+<a name="l00044"></a>00044 
+<a name="l00045"></a>00045     <span class="comment">// The class spawns two or three child tasks</span>
+<a name="l00046"></a>00046     <span class="keyword">template</span> &lt;size_t N, <span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2, <span class="keyword">typename</span> function3&gt;
+<a name="l00047"></a>00047     <span class="keyword">class </span>spawner : <span class="keyword">public</span> task {
+<a name="l00048"></a>00048     <span class="keyword">private</span>:
+<a name="l00049"></a>00049         function1&amp; my_func1;
+<a name="l00050"></a>00050         function2&amp; my_func2;
+<a name="l00051"></a>00051         function3&amp; my_func3;
+<a name="l00052"></a>00052         <span class="keywordtype">bool</span> is_recycled;
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054         task* execute (){
+<a name="l00055"></a>00055             <span class="keywordflow">if</span>(is_recycled){
+<a name="l00056"></a>00056                 <span class="keywordflow">return</span> NULL;
+<a name="l00057"></a>00057             }<span class="keywordflow">else</span>{
+<a name="l00058"></a>00058                 __TBB_ASSERT(N==2 || N==3, <span class="stringliteral">"Number of arguments passed to spawner is wrong"</span>);
+<a name="l00059"></a>00059                 set_ref_count(N);
+<a name="l00060"></a>00060                 recycle_as_safe_continuation();
+<a name="l00061"></a>00061                 internal::function_invoker&lt;function2&gt;* invoker2 = <span class="keyword">new</span> (allocate_child()) internal::function_invoker&lt;function2&gt;(my_func2);
+<a name="l00062"></a>00062                 __TBB_ASSERT(invoker2, <span class="stringliteral">"Child task allocation failed"</span>);
+<a name="l00063"></a>00063                 spawn(*invoker2);
+<a name="l00064"></a>00064                 size_t n = N; <span class="comment">// To prevent compiler warnings</span>
+<a name="l00065"></a>00065                 <span class="keywordflow">if</span> (n&gt;2) {
+<a name="l00066"></a>00066                     internal::function_invoker&lt;function3&gt;* invoker3 = <span class="keyword">new</span> (allocate_child()) internal::function_invoker&lt;function3&gt;(my_func3);
+<a name="l00067"></a>00067                     __TBB_ASSERT(invoker3, <span class="stringliteral">"Child task allocation failed"</span>);
+<a name="l00068"></a>00068                     spawn(*invoker3);
+<a name="l00069"></a>00069                 }
+<a name="l00070"></a>00070                 my_func1();
+<a name="l00071"></a>00071                 is_recycled = <span class="keyword">true</span>;
+<a name="l00072"></a>00072                 <span class="keywordflow">return</span> NULL;
+<a name="l00073"></a>00073             }
+<a name="l00074"></a>00074         } <span class="comment">// execute</span>
+<a name="l00075"></a>00075 
+<a name="l00076"></a>00076     <span class="keyword">public</span>:
+<a name="l00077"></a>00077         spawner(function1&amp; _func1, function2&amp; _func2, function3&amp; _func3) : my_func1(_func1), my_func2(_func2), my_func3(_func3), is_recycled(false) {}
+<a name="l00078"></a>00078     };
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080     <span class="comment">// Creates and spawns child tasks</span>
+<a name="l00081"></a>00081     <span class="keyword">class </span>parallel_invoke_helper : <span class="keyword">public</span> empty_task {
+<a name="l00082"></a>00082     <span class="keyword">public</span>:
+<a name="l00083"></a>00083         <span class="comment">// Dummy functor class</span>
+<a name="l00084"></a>00084         <span class="keyword">class </span>parallel_invoke_noop {
+<a name="l00085"></a>00085         <span class="keyword">public</span>:
+<a name="l00086"></a>00086             <span class="keywordtype">void</span> operator() ()<span class="keyword"> const </span>{}
+<a name="l00087"></a>00087         };
+<a name="l00088"></a>00088         <span class="comment">// Creates a helper object with user-defined number of children expected</span>
+<a name="l00089"></a>00089         parallel_invoke_helper(<span class="keywordtype">int</span> number_of_children)
+<a name="l00090"></a>00090         {
+<a name="l00091"></a>00091             set_ref_count(number_of_children + 1);
+<a name="l00092"></a>00092         }
+<a name="l00093"></a>00093         <span class="comment">// Adds child task and spawns it</span>
+<a name="l00094"></a>00094         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> function&gt;
+<a name="l00095"></a>00095         <span class="keywordtype">void</span> add_child (function &amp;_func)
+<a name="l00096"></a>00096         {
+<a name="l00097"></a>00097             internal::function_invoker&lt;function&gt;* invoker = <span class="keyword">new</span> (allocate_child()) internal::function_invoker&lt;function&gt;(_func);
+<a name="l00098"></a>00098             __TBB_ASSERT(invoker, <span class="stringliteral">"Child task allocation failed"</span>);
+<a name="l00099"></a>00099             spawn(*invoker);
+<a name="l00100"></a>00100         }
+<a name="l00101"></a>00101 
+<a name="l00102"></a>00102         <span class="comment">// Adds a task with multiple child tasks and spawns it</span>
+<a name="l00103"></a>00103         <span class="comment">// two arguments</span>
+<a name="l00104"></a>00104         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2&gt;
+<a name="l00105"></a>00105         <span class="keywordtype">void</span> add_children (function1&amp; _func1, function2&amp; _func2)
+<a name="l00106"></a>00106         {
+<a name="l00107"></a>00107             <span class="comment">// The third argument is dummy, it is ignored actually.</span>
+<a name="l00108"></a>00108             parallel_invoke_noop noop;
+<a name="l00109"></a>00109             internal::spawner&lt;2, function1, function2, parallel_invoke_noop&gt;&amp; sub_root = *<span class="keyword">new</span>(allocate_child())internal::spawner&lt;2, function1, function2, parallel_invoke_noop&gt;(_func1, _func2, noop);
+<a name="l00110"></a>00110             spawn(sub_root);
+<a name="l00111"></a>00111         }
+<a name="l00112"></a>00112         <span class="comment">// three arguments</span>
+<a name="l00113"></a>00113         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2, <span class="keyword">typename</span> function3&gt;
+<a name="l00114"></a>00114         <span class="keywordtype">void</span> add_children (function1&amp; _func1, function2&amp; _func2, function3&amp; _func3)
+<a name="l00115"></a>00115         {
+<a name="l00116"></a>00116             internal::spawner&lt;3, function1, function2, function3&gt;&amp; sub_root = *<span class="keyword">new</span>(allocate_child())internal::spawner&lt;3, function1, function2, function3&gt;(_func1, _func2, _func3);
+<a name="l00117"></a>00117             spawn(sub_root);
+<a name="l00118"></a>00118         }
+<a name="l00119"></a>00119 
+<a name="l00120"></a>00120         <span class="comment">// Waits for all child tasks</span>
+<a name="l00121"></a>00121         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> F0&gt;
+<a name="l00122"></a>00122         <span class="keywordtype">void</span> run_and_finish(F0&amp; f0)
+<a name="l00123"></a>00123         {
+<a name="l00124"></a>00124             internal::function_invoker&lt;F0&gt;* invoker = <span class="keyword">new</span> (allocate_child()) internal::function_invoker&lt;F0&gt;(f0);
+<a name="l00125"></a>00125             __TBB_ASSERT(invoker, <span class="stringliteral">"Child task allocation failed"</span>);
+<a name="l00126"></a>00126             spawn_and_wait_for_all(*invoker);
+<a name="l00127"></a>00127         }
+<a name="l00128"></a>00128     };
+<a name="l00129"></a>00129     <span class="comment">// The class destroys root if exception occured as well as in normal case</span>
+<a name="l00130"></a>00130     <span class="keyword">class </span>parallel_invoke_cleaner: internal::no_copy { 
+<a name="l00131"></a>00131     <span class="keyword">public</span>:
+<a name="l00132"></a>00132         parallel_invoke_cleaner(<span class="keywordtype">int</span> number_of_children, <a class="code" href="a00167.html">tbb::task_group_context</a>&amp; context) : root(*new(task::allocate_root(context)) internal::parallel_invoke_helper(number_of_children))
+<a name="l00133"></a>00133         {}
+<a name="l00134"></a>00134         ~parallel_invoke_cleaner(){
+<a name="l00135"></a>00135             root.destroy(root);
+<a name="l00136"></a>00136         }
+<a name="l00137"></a>00137         internal::parallel_invoke_helper&amp; root;
+<a name="l00138"></a>00138     };
+<a name="l00139"></a>00139 } <span class="comment">// namespace internal</span>
+<a name="l00141"></a>00141 <span class="comment"></span>
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146 
+<a name="l00148"></a>00148 <span class="comment">// parallel_invoke with user-defined context</span>
+<a name="l00149"></a>00149 <span class="comment">// two arguments</span>
+<a name="l00150"></a>00150 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1 &gt;
+<a name="l00151"></a><a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">00151</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, <a class="code" href="a00167.html">tbb::task_group_context</a>&amp; context) {
+<a name="l00152"></a>00152     internal::parallel_invoke_cleaner cleaner(2, context);
+<a name="l00153"></a>00153     internal::parallel_invoke_helper&amp; root = cleaner.root;
+<a name="l00154"></a>00154 
+<a name="l00155"></a>00155     root.add_child(f1);
+<a name="l00156"></a>00156 
+<a name="l00157"></a>00157     root.run_and_finish(f0);
+<a name="l00158"></a>00158 }
+<a name="l00159"></a>00159 
+<a name="l00160"></a>00160 <span class="comment">// three arguments</span>
+<a name="l00161"></a>00161 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2 &gt;
+<a name="l00162"></a>00162 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, <a class="code" href="a00167.html">tbb::task_group_context</a>&amp; context) {
+<a name="l00163"></a>00163     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00164"></a>00164     internal::parallel_invoke_helper&amp; root = cleaner.root;
+<a name="l00165"></a>00165 
+<a name="l00166"></a>00166     root.add_child(f2);
+<a name="l00167"></a>00167     root.add_child(f1);
+<a name="l00168"></a>00168 
+<a name="l00169"></a>00169     root.run_and_finish(f0);
+<a name="l00170"></a>00170 }
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172 <span class="comment">// four arguments</span>
+<a name="l00173"></a>00173 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3&gt;
+<a name="l00174"></a>00174 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, <a class="code" href="a00167.html">tbb::task_group_context</a>&amp; context) {
+<a name="l00175"></a>00175     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00176"></a>00176     internal::parallel_invoke_helper&amp; root = cleaner.root;
+<a name="l00177"></a>00177 
+<a name="l00178"></a>00178     root.add_child(f3);
+<a name="l00179"></a>00179     root.add_child(f2);
+<a name="l00180"></a>00180     root.add_child(f1);
+<a name="l00181"></a>00181 
+<a name="l00182"></a>00182     root.run_and_finish(f0);
+<a name="l00183"></a>00183 }
+<a name="l00184"></a>00184 
+<a name="l00185"></a>00185 <span class="comment">// five arguments</span>
+<a name="l00186"></a>00186 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4 &gt;
+<a name="l00187"></a>00187 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, <a class="code" href="a00167.html">tbb::task_group_context</a>&amp; context) {
+<a name="l00188"></a>00188     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00189"></a>00189     internal::parallel_invoke_helper&amp; root = cleaner.root;
+<a name="l00190"></a>00190 
+<a name="l00191"></a>00191     root.add_children(f4, f3);
+<a name="l00192"></a>00192     root.add_children(f2, f1);
+<a name="l00193"></a>00193 
+<a name="l00194"></a>00194     root.run_and_finish(f0);
+<a name="l00195"></a>00195 }
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197 <span class="comment">// six arguments</span>
+<a name="l00198"></a>00198 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5 &gt;
+<a name="l00199"></a>00199 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, <a class="code" href="a00167.html">tbb::task_group_context</a>&amp; context) {
+<a name="l00200"></a>00200     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00201"></a>00201     internal::parallel_invoke_helper&amp; root = cleaner.root;
+<a name="l00202"></a>00202 
+<a name="l00203"></a>00203     root.add_children(f5, f4, f3);
+<a name="l00204"></a>00204     root.add_children(f2, f1);
+<a name="l00205"></a>00205 
+<a name="l00206"></a>00206     root.run_and_finish(f0);
+<a name="l00207"></a>00207 }
+<a name="l00208"></a>00208 
+<a name="l00209"></a>00209 <span class="comment">// seven arguments</span>
+<a name="l00210"></a>00210 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6 &gt;
+<a name="l00211"></a>00211 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, <a class="code" href="a00167.html">tbb::task_group_context</a>&amp; context) {
+<a name="l00212"></a>00212     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00213"></a>00213     internal::parallel_invoke_helper&amp; root = cleaner.root;
+<a name="l00214"></a>00214 
+<a name="l00215"></a>00215     root.add_children(f6, f5, f4);
+<a name="l00216"></a>00216     root.add_children(f3, f2, f1);
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218     root.run_and_finish(f0);
+<a name="l00219"></a>00219 }
+<a name="l00220"></a>00220 
+<a name="l00221"></a>00221 <span class="comment">// eight arguments</span>
+<a name="l00222"></a>00222 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6,
+<a name="l00223"></a>00223     <span class="keyword">typename</span> F7&gt;
+<a name="l00224"></a>00224 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, <a class="code" href="a00167.html">tbb::task_group_context</a>&amp; context) {
+<a name="l00225"></a>00225     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00226"></a>00226     internal::parallel_invoke_helper&amp; root = cleaner.root;
+<a name="l00227"></a>00227 
+<a name="l00228"></a>00228     root.add_children(f7, f6, f5);
+<a name="l00229"></a>00229     root.add_children(f4, f3);
+<a name="l00230"></a>00230     root.add_children(f2, f1);
+<a name="l00231"></a>00231 
+<a name="l00232"></a>00232     root.run_and_finish(f0);
+<a name="l00233"></a>00233 }
+<a name="l00234"></a>00234 
+<a name="l00235"></a>00235 <span class="comment">// nine arguments</span>
+<a name="l00236"></a>00236 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6,
+<a name="l00237"></a>00237         <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8&gt;
+<a name="l00238"></a>00238 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, <a class="code" href="a00167.html">tbb::task_group_context</a>&amp; context) {
+<a name="l00239"></a>00239     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00240"></a>00240     internal::parallel_invoke_helper&amp; root = cleaner.root;
+<a name="l00241"></a>00241 
+<a name="l00242"></a>00242     root.add_children(f8, f7, f6);
+<a name="l00243"></a>00243     root.add_children(f5, f4, f3);
+<a name="l00244"></a>00244     root.add_children(f2, f1);
+<a name="l00245"></a>00245 
+<a name="l00246"></a>00246     root.run_and_finish(f0);
+<a name="l00247"></a>00247 }
+<a name="l00248"></a>00248 
+<a name="l00249"></a>00249 <span class="comment">// ten arguments</span>
+<a name="l00250"></a>00250 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6,
+<a name="l00251"></a>00251         <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8, <span class="keyword">typename</span> F9&gt;
+<a name="l00252"></a>00252 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9, <a class="code" href="a00167.html">tbb::task_group_context</a>&amp; context) {
+<a name="l00253"></a>00253     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00254"></a>00254     internal::parallel_invoke_helper&amp; root = cleaner.root;
+<a name="l00255"></a>00255 
+<a name="l00256"></a>00256     root.add_children(f9, f8, f7);
+<a name="l00257"></a>00257     root.add_children(f6, f5, f4);
+<a name="l00258"></a>00258     root.add_children(f3, f2, f1);
+<a name="l00259"></a>00259 
+<a name="l00260"></a>00260     root.run_and_finish(f0);
+<a name="l00261"></a>00261 }
+<a name="l00262"></a>00262 
+<a name="l00263"></a>00263 <span class="comment">// two arguments</span>
+<a name="l00264"></a>00264 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1&gt;
+<a name="l00265"></a>00265 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1) {
+<a name="l00266"></a>00266     task_group_context context;
+<a name="l00267"></a>00267     parallel_invoke&lt;F0, F1&gt;(f0, f1, context);
+<a name="l00268"></a>00268 }
+<a name="l00269"></a>00269 <span class="comment">// three arguments</span>
+<a name="l00270"></a>00270 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2&gt;
+<a name="l00271"></a>00271 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2) {
+<a name="l00272"></a>00272     task_group_context context;
+<a name="l00273"></a>00273     parallel_invoke&lt;F0, F1, F2&gt;(f0, f1, f2, context);
+<a name="l00274"></a>00274 }
+<a name="l00275"></a>00275 <span class="comment">// four arguments</span>
+<a name="l00276"></a>00276 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3 &gt;
+<a name="l00277"></a>00277 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3) {
+<a name="l00278"></a>00278     task_group_context context;
+<a name="l00279"></a>00279     parallel_invoke&lt;F0, F1, F2, F3&gt;(f0, f1, f2, f3, context);
+<a name="l00280"></a>00280 }
+<a name="l00281"></a>00281 <span class="comment">// five arguments</span>
+<a name="l00282"></a>00282 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4&gt;
+<a name="l00283"></a>00283 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4) {
+<a name="l00284"></a>00284     task_group_context context;
+<a name="l00285"></a>00285     parallel_invoke&lt;F0, F1, F2, F3, F4&gt;(f0, f1, f2, f3, f4, context);
+<a name="l00286"></a>00286 }
+<a name="l00287"></a>00287 <span class="comment">// six arguments</span>
+<a name="l00288"></a>00288 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5&gt;
+<a name="l00289"></a>00289 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5) {
+<a name="l00290"></a>00290     task_group_context context;
+<a name="l00291"></a>00291     parallel_invoke&lt;F0, F1, F2, F3, F4, F5&gt;(f0, f1, f2, f3, f4, f5, context);
+<a name="l00292"></a>00292 }
+<a name="l00293"></a>00293 <span class="comment">// seven arguments</span>
+<a name="l00294"></a>00294 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6&gt;
+<a name="l00295"></a>00295 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6) {
+<a name="l00296"></a>00296     task_group_context context;
+<a name="l00297"></a>00297     parallel_invoke&lt;F0, F1, F2, F3, F4, F5, F6&gt;(f0, f1, f2, f3, f4, f5, f6, context);
+<a name="l00298"></a>00298 }
+<a name="l00299"></a>00299 <span class="comment">// eigth arguments</span>
+<a name="l00300"></a>00300 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6,
+<a name="l00301"></a>00301         <span class="keyword">typename</span> F7&gt;
+<a name="l00302"></a>00302 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7) {
+<a name="l00303"></a>00303     task_group_context context;
+<a name="l00304"></a>00304     parallel_invoke&lt;F0, F1, F2, F3, F4, F5, F6, F7&gt;(f0, f1, f2, f3, f4, f5, f6, f7, context);
+<a name="l00305"></a>00305 }
+<a name="l00306"></a>00306 <span class="comment">// nine arguments</span>
+<a name="l00307"></a>00307 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6,
+<a name="l00308"></a>00308         <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8&gt;
+<a name="l00309"></a>00309 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8) {
+<a name="l00310"></a>00310     task_group_context context;
+<a name="l00311"></a>00311     parallel_invoke&lt;F0, F1, F2, F3, F4, F5, F6, F7, F8&gt;(f0, f1, f2, f3, f4, f5, f6, f7, f8, context);
+<a name="l00312"></a>00312 }
+<a name="l00313"></a>00313 <span class="comment">// ten arguments</span>
+<a name="l00314"></a>00314 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2, <span class="keyword">typename</span> F3, <span class="keyword">typename</span> F4, <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6,
+<a name="l00315"></a>00315         <span class="keyword">typename</span> F7, <span class="keyword">typename</span> F8, <span class="keyword">typename</span> F9&gt;
+<a name="l00316"></a>00316 <span class="keywordtype">void</span> <a class="code" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">parallel_invoke</a>(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9) {
+<a name="l00317"></a>00317     task_group_context context;
+<a name="l00318"></a>00318     parallel_invoke&lt;F0, F1, F2, F3, F4, F5, F6, F7, F8, F9&gt;(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, context);
+<a name="l00319"></a>00319 }
+<a name="l00320"></a>00320 
+<a name="l00322"></a>00322 
+<a name="l00323"></a>00323 } <span class="comment">// namespace</span>
+<a name="l00324"></a>00324 
+<a name="l00325"></a>00325 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_invoke_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00324.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00324.html
new file mode 100644 (file)
index 0000000..e0ea2c4
--- /dev/null
@@ -0,0 +1,360 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>parallel_reduce.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>parallel_reduce.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_reduce_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_reduce_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "partitioner.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;new&gt;</span>
+<a name="l00028"></a>00028 
+<a name="l00029"></a>00029 <span class="keyword">namespace </span>tbb {
+<a name="l00030"></a>00030 
+<a name="l00032"></a>00032 <span class="keyword">namespace </span>internal {
+<a name="l00033"></a>00033 
+<a name="l00035"></a>00035     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3( <span class="keywordtype">void</span>* dst, <span class="keywordtype">void</span>* src );
+<a name="l00036"></a>00036 
+<a name="l00038"></a>00038     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+<a name="l00039"></a>00039 
+<a name="l00040"></a>00040     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">inline</span> <span class="keywordtype">void</span> parallel_reduce_store_body( T*&amp; dst, T* src ) {
+<a name="l00041"></a>00041 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>        itt_store_pointer_with_release_v3(&amp;dst,src);
+<a name="l00043"></a>00043 <span class="preprocessor">#else</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span>        __TBB_store_with_release(dst,src);
+<a name="l00045"></a>00045 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+<a name="l00046"></a>00046     }
+<a name="l00047"></a>00047 
+<a name="l00048"></a>00048     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">inline</span> T* parallel_reduce_load_body( T*&amp; src ) {
+<a name="l00049"></a>00049 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span>        <span class="keywordflow">return</span> static_cast&lt;T*&gt;(itt_load_pointer_with_acquire_v3(&amp;src));
+<a name="l00051"></a>00051 <span class="preprocessor">#else</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span>        <span class="keywordflow">return</span> __TBB_load_with_acquire(src);
+<a name="l00053"></a>00053 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+<a name="l00054"></a>00054     }
+<a name="l00055"></a>00055 
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058     <span class="keyword">typedef</span> <span class="keywordtype">char</span> reduction_context;
+<a name="l00059"></a>00059 
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body&gt;
+<a name="l00063"></a>00063     <span class="keyword">class </span>finish_reduce: <span class="keyword">public</span> task {
+<a name="l00065"></a>00065         Body* my_body;
+<a name="l00066"></a>00066         <span class="keywordtype">bool</span> has_right_zombie;
+<a name="l00067"></a>00067         <span class="keyword">const</span> reduction_context my_context;
+<a name="l00068"></a>00068         aligned_space&lt;Body,1&gt; zombie_space;
+<a name="l00069"></a>00069         finish_reduce( <span class="keywordtype">char</span> context ) : 
+<a name="l00070"></a>00070             my_body(NULL),
+<a name="l00071"></a>00071             has_right_zombie(false),
+<a name="l00072"></a>00072             my_context(context)
+<a name="l00073"></a>00073         {
+<a name="l00074"></a>00074         }
+<a name="l00075"></a>00075         task* execute() {
+<a name="l00076"></a>00076             <span class="keywordflow">if</span>( has_right_zombie ) {
+<a name="l00077"></a>00077                 <span class="comment">// Right child was stolen.</span>
+<a name="l00078"></a>00078                 Body* s = zombie_space.begin();
+<a name="l00079"></a>00079                 my_body-&gt;join( *s );
+<a name="l00080"></a>00080                 s-&gt;~Body();
+<a name="l00081"></a>00081             }
+<a name="l00082"></a>00082             <span class="keywordflow">if</span>( my_context==1 ) 
+<a name="l00083"></a>00083                 parallel_reduce_store_body( static_cast&lt;finish_reduce*&gt;(parent())-&gt;my_body, my_body );
+<a name="l00084"></a>00084             <span class="keywordflow">return</span> NULL;
+<a name="l00085"></a>00085         }       
+<a name="l00086"></a>00086         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range,<span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Partitioner&gt;
+<a name="l00087"></a>00087         <span class="keyword">friend</span> <span class="keyword">class </span>start_reduce;
+<a name="l00088"></a>00088     };
+<a name="l00089"></a>00089 
+<a name="l00091"></a>00091 
+<a name="l00092"></a>00092     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt;
+<a name="l00093"></a>00093     <span class="keyword">class </span>start_reduce: <span class="keyword">public</span> task {
+<a name="l00094"></a>00094         <span class="keyword">typedef</span> finish_reduce&lt;Body&gt; finish_type;
+<a name="l00095"></a>00095         Body* my_body;
+<a name="l00096"></a>00096         Range my_range;
+<a name="l00097"></a>00097         <span class="keyword">typename</span> Partitioner::partition_type my_partition;
+<a name="l00098"></a>00098         reduction_context my_context;
+<a name="l00099"></a>00099         <span class="comment">/*override*/</span> task* execute();
+<a name="l00100"></a>00100         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body_&gt;
+<a name="l00101"></a>00101         <span class="keyword">friend</span> <span class="keyword">class </span>finish_reduce;
+<a name="l00102"></a>00102     
+<a name="l00104"></a>00104         start_reduce( <span class="keyword">const</span> Range&amp; range, Body* body, Partitioner&amp; partitioner ) :
+<a name="l00105"></a>00105             my_body(body),
+<a name="l00106"></a>00106             my_range(range),
+<a name="l00107"></a>00107             my_partition(partitioner),
+<a name="l00108"></a>00108             my_context(0)
+<a name="l00109"></a>00109         {
+<a name="l00110"></a>00110         }
+<a name="l00112"></a>00112 
+<a name="l00113"></a>00113         start_reduce( start_reduce&amp; parent, split ) :
+<a name="l00114"></a>00114             my_body(parent.my_body),
+<a name="l00115"></a>00115             my_range(parent.my_range,split()),
+<a name="l00116"></a>00116             my_partition(parent.my_partition,split()),
+<a name="l00117"></a>00117             my_context(2)
+<a name="l00118"></a>00118         {
+<a name="l00119"></a>00119             my_partition.set_affinity(*<span class="keyword">this</span>);
+<a name="l00120"></a>00120             parent.my_context = 1;
+<a name="l00121"></a>00121         }
+<a name="l00123"></a>00123         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
+<a name="l00124"></a>00124             my_partition.note_affinity( <span class="keywordtype">id</span> );
+<a name="l00125"></a>00125         }
+<a name="l00126"></a>00126 
+<a name="l00127"></a>00127 <span class="keyword">public</span>:
+<a name="l00128"></a>00128         <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range&amp; range, Body&amp; body, Partitioner&amp; partitioner ) {
+<a name="l00129"></a>00129             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00130"></a>00130 #<span class="keywordflow">if</span> !__TBB_EXCEPTIONS || TBB_JOIN_OUTER_TASK_GROUP
+<a name="l00131"></a>00131                 <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(<a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_reduce(range,&amp;body,partitioner) );
+<a name="l00132"></a>00132 <span class="preprocessor">#else</span>
+<a name="l00133"></a>00133 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
+<a name="l00134"></a>00134                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
+<a name="l00135"></a>00135                 task_group_context context;
+<a name="l00136"></a>00136                 <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(task::allocate_root(context)) start_reduce(range,&amp;body,partitioner) );
+<a name="l00137"></a>00137 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS &amp;&amp; !TBB_JOIN_OUTER_TASK_GROUP */</span>
+<a name="l00138"></a>00138             }
+<a name="l00139"></a>00139         }
+<a name="l00140"></a>00140 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00141"></a>00141 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range&amp; range, Body&amp; body, Partitioner&amp; partitioner, task_group_context&amp; context ) {
+<a name="l00142"></a>00142             <span class="keywordflow">if</span>( !range.empty() ) 
+<a name="l00143"></a>00143                 <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(task::allocate_root(context)) start_reduce(range,&amp;body,partitioner) );
+<a name="l00144"></a>00144         }
+<a name="l00145"></a>00145 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00146"></a>00146     };
+<a name="l00147"></a>00147 
+<a name="l00148"></a>00148     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt;
+<a name="l00149"></a>00149     task* start_reduce&lt;Range,Body,Partitioner&gt;::execute() {
+<a name="l00150"></a>00150         <span class="keywordflow">if</span>( my_context==2 ) {
+<a name="l00151"></a>00151             finish_type* p = static_cast&lt;finish_type*&gt;(parent() );
+<a name="l00152"></a>00152             <span class="keywordflow">if</span>( !parallel_reduce_load_body(p-&gt;my_body) ) {
+<a name="l00153"></a>00153                 my_body = <span class="keyword">new</span>( p-&gt;zombie_space.begin() ) Body(*my_body,split());
+<a name="l00154"></a>00154                 p-&gt;has_right_zombie = <span class="keyword">true</span>;
+<a name="l00155"></a>00155             } 
+<a name="l00156"></a>00156         }
+<a name="l00157"></a>00157         <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
+<a name="l00158"></a>00158             (*my_body)( my_range );
+<a name="l00159"></a>00159             <span class="keywordflow">if</span>( my_context==1 ) 
+<a name="l00160"></a>00160                 parallel_reduce_store_body(static_cast&lt;finish_type*&gt;(parent())-&gt;my_body, my_body );
+<a name="l00161"></a>00161             <span class="keywordflow">return</span> my_partition.continue_after_execute_range(*<span class="keyword">this</span>);
+<a name="l00162"></a>00162         } <span class="keywordflow">else</span> {
+<a name="l00163"></a>00163             finish_type&amp; c = *<span class="keyword">new</span>( allocate_continuation()) finish_type(my_context);
+<a name="l00164"></a>00164             recycle_as_child_of(c);
+<a name="l00165"></a>00165             c.set_ref_count(2);    
+<a name="l00166"></a>00166             <span class="keywordtype">bool</span> delay = my_partition.decide_whether_to_delay();
+<a name="l00167"></a>00167             start_reduce&amp; b = *<span class="keyword">new</span>( c.allocate_child() ) start_reduce(*<span class="keyword">this</span>,split());
+<a name="l00168"></a>00168             my_partition.spawn_or_delay(delay,*<span class="keyword">this</span>,b);
+<a name="l00169"></a>00169             <span class="keywordflow">return</span> <span class="keyword">this</span>;
+<a name="l00170"></a>00170         }
+<a name="l00171"></a>00171     } 
+<a name="l00172"></a>00172 
+<a name="l00174"></a>00174 
+<a name="l00178"></a>00178     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction&gt;
+<a name="l00179"></a>00179     <span class="keyword">class </span>lambda_reduce_body {
+<a name="l00180"></a>00180 
+<a name="l00181"></a>00181 <span class="comment">//FIXME: decide if my_real_body, my_reduction, and identity_element should be copied or referenced</span>
+<a name="l00182"></a>00182 <span class="comment">//       (might require some performance measurements)</span>
+<a name="l00183"></a>00183 
+<a name="l00184"></a>00184         <span class="keyword">const</span> Value&amp;     identity_element;
+<a name="l00185"></a>00185         <span class="keyword">const</span> RealBody&amp;  my_real_body;
+<a name="l00186"></a>00186         <span class="keyword">const</span> Reduction&amp; my_reduction;
+<a name="l00187"></a>00187         Value            my_value;
+<a name="l00188"></a>00188         lambda_reduce_body&amp; operator= ( <span class="keyword">const</span> lambda_reduce_body&amp; other );
+<a name="l00189"></a>00189     <span class="keyword">public</span>:
+<a name="l00190"></a>00190         lambda_reduce_body( <span class="keyword">const</span> Value&amp; identity, <span class="keyword">const</span> RealBody&amp; body, <span class="keyword">const</span> Reduction&amp; reduction )
+<a name="l00191"></a>00191             : identity_element(identity)
+<a name="l00192"></a>00192             , my_real_body(body)
+<a name="l00193"></a>00193             , my_reduction(reduction)
+<a name="l00194"></a>00194             , my_value(identity)
+<a name="l00195"></a>00195         { }
+<a name="l00196"></a>00196         lambda_reduce_body( <span class="keyword">const</span> lambda_reduce_body&amp; other )
+<a name="l00197"></a>00197             : identity_element(other.identity_element)
+<a name="l00198"></a>00198             , my_real_body(other.my_real_body)
+<a name="l00199"></a>00199             , my_reduction(other.my_reduction)
+<a name="l00200"></a>00200             , my_value(other.my_value)
+<a name="l00201"></a>00201         { }
+<a name="l00202"></a>00202         lambda_reduce_body( lambda_reduce_body&amp; other, <a class="code" href="a00165.html">tbb::split</a> )
+<a name="l00203"></a>00203             : identity_element(other.identity_element)
+<a name="l00204"></a>00204             , my_real_body(other.my_real_body)
+<a name="l00205"></a>00205             , my_reduction(other.my_reduction)
+<a name="l00206"></a>00206             , my_value(other.identity_element)
+<a name="l00207"></a>00207         { }
+<a name="l00208"></a>00208         <span class="keywordtype">void</span> operator()(Range&amp; range) {
+<a name="l00209"></a>00209             my_value = my_real_body(range, const_cast&lt;const Value&amp;&gt;(my_value));
+<a name="l00210"></a>00210         }
+<a name="l00211"></a>00211         <span class="keywordtype">void</span> join( lambda_reduce_body&amp; rhs ) {
+<a name="l00212"></a>00212             my_value = my_reduction(const_cast&lt;const Value&amp;&gt;(my_value), const_cast&lt;const Value&amp;&gt;(rhs.my_value));
+<a name="l00213"></a>00213         }
+<a name="l00214"></a>00214         Value result()<span class="keyword"> const </span>{
+<a name="l00215"></a>00215             <span class="keywordflow">return</span> my_value;
+<a name="l00216"></a>00216         }
+<a name="l00217"></a>00217     };
+<a name="l00218"></a>00218 
+<a name="l00219"></a>00219 } <span class="comment">// namespace internal</span>
+<a name="l00221"></a>00221 <span class="comment"></span>
+<a name="l00222"></a>00222 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
+<a name="l00223"></a>00223 
+<a name="l00242"></a>00242 
+<a name="l00244"></a>00244 
+<a name="l00245"></a>00245 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00246"></a><a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">00246</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, Body&amp; body ) {
+<a name="l00247"></a>00247     internal::start_reduce&lt;Range,Body, const __TBB_DEFAULT_PARTITIONER&gt;::run( range, body, __TBB_DEFAULT_PARTITIONER() );
+<a name="l00248"></a>00248 }
+<a name="l00249"></a>00249 
+<a name="l00251"></a>00251 
+<a name="l00252"></a>00252 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00253"></a><a class="code" href="a00233.html#gec1b7c03f9da909bef5db12e3d41bed3">00253</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, Body&amp; body, <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>&amp; partitioner ) {
+<a name="l00254"></a>00254     internal::start_reduce&lt;Range,Body,const simple_partitioner&gt;::run( range, body, partitioner );
+<a name="l00255"></a>00255 }
+<a name="l00256"></a>00256 
+<a name="l00258"></a>00258 
+<a name="l00259"></a>00259 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00260"></a><a class="code" href="a00233.html#g18a19157e6245992fc00ca0adeb7dd37">00260</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, Body&amp; body, <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>&amp; partitioner ) {
+<a name="l00261"></a>00261     internal::start_reduce&lt;Range,Body,const auto_partitioner&gt;::run( range, body, partitioner );
+<a name="l00262"></a>00262 }
+<a name="l00263"></a>00263 
+<a name="l00265"></a>00265 
+<a name="l00266"></a>00266 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00267"></a><a class="code" href="a00233.html#gc61e73fcc36c92d79a217fc355ff4a6b">00267</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, Body&amp; body, <a class="code" href="a00115.html">affinity_partitioner</a>&amp; partitioner ) {
+<a name="l00268"></a>00268     internal::start_reduce&lt;Range,Body,affinity_partitioner&gt;::run( range, body, partitioner );
+<a name="l00269"></a>00269 }
+<a name="l00270"></a>00270 
+<a name="l00271"></a>00271 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00273"></a>00273 <span class="preprocessor"></span>
+<a name="l00274"></a>00274 <span class="preprocessor">template&lt;typename Range, typename Body&gt;</span>
+<a name="l00275"></a><a class="code" href="a00233.html#g45cb00c42a18e334bbde8b7535afe460">00275</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, Body&amp; body, <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>&amp; partitioner, <a class="code" href="a00167.html">task_group_context</a>&amp; context ) {
+<a name="l00276"></a>00276     internal::start_reduce&lt;Range,Body,const simple_partitioner&gt;::run( range, body, partitioner, context );
+<a name="l00277"></a>00277 }
+<a name="l00278"></a>00278 
+<a name="l00280"></a>00280 
+<a name="l00281"></a>00281 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00282"></a><a class="code" href="a00233.html#g1c1ea1d7c61b3c225e92c70d669a53a5">00282</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, Body&amp; body, <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>&amp; partitioner, <a class="code" href="a00167.html">task_group_context</a>&amp; context ) {
+<a name="l00283"></a>00283     internal::start_reduce&lt;Range,Body,const auto_partitioner&gt;::run( range, body, partitioner, context );
+<a name="l00284"></a>00284 }
+<a name="l00285"></a>00285 
+<a name="l00287"></a>00287 
+<a name="l00288"></a>00288 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00289"></a><a class="code" href="a00233.html#gd9ac3a3811060314695f33b703c6e11b">00289</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, Body&amp; body, <a class="code" href="a00115.html">affinity_partitioner</a>&amp; partitioner, <a class="code" href="a00167.html">task_group_context</a>&amp; context ) {
+<a name="l00290"></a>00290     internal::start_reduce&lt;Range,Body,affinity_partitioner&gt;::run( range, body, partitioner, context );
+<a name="l00291"></a>00291 }
+<a name="l00292"></a>00292 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00293"></a>00293 
+<a name="l00297"></a>00297 
+<a name="l00298"></a>00298 
+<a name="l00299"></a>00299 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction&gt;
+<a name="l00300"></a><a class="code" href="a00233.html#gc9412e09fb01fcad8c018ea9cffb28ef">00300</a> Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Value&amp; identity, <span class="keyword">const</span> RealBody&amp; real_body, <span class="keyword">const</span> Reduction&amp; reduction ) {
+<a name="l00301"></a>00301     internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt; body(identity, real_body, reduction);
+<a name="l00302"></a>00302     internal::start_reduce&lt;Range,internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt;,<span class="keyword">const</span> __TBB_DEFAULT_PARTITIONER&gt;
+<a name="l00303"></a>00303                           ::run(range, body, __TBB_DEFAULT_PARTITIONER() );
+<a name="l00304"></a>00304     <span class="keywordflow">return</span> body.result();
+<a name="l00305"></a>00305 }
+<a name="l00306"></a>00306 
+<a name="l00308"></a>00308 
+<a name="l00309"></a>00309 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction&gt;
+<a name="l00310"></a><a class="code" href="a00233.html#gaddffeec0e892ac3d6fc7fc2053e1eca">00310</a> Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Value&amp; identity, <span class="keyword">const</span> RealBody&amp; real_body, <span class="keyword">const</span> Reduction&amp; reduction,
+<a name="l00311"></a>00311                        <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>&amp; partitioner ) {
+<a name="l00312"></a>00312     internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt; body(identity, real_body, reduction);
+<a name="l00313"></a>00313     internal::start_reduce&lt;Range,internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt;,<span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>&gt;
+<a name="l00314"></a>00314                           ::run(range, body, partitioner );
+<a name="l00315"></a>00315     <span class="keywordflow">return</span> body.result();
+<a name="l00316"></a>00316 }
+<a name="l00317"></a>00317 
+<a name="l00319"></a>00319 
+<a name="l00320"></a>00320 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction&gt;
+<a name="l00321"></a><a class="code" href="a00233.html#gb175401f0729e40dd2c5860a17c14385">00321</a> Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Value&amp; identity, <span class="keyword">const</span> RealBody&amp; real_body, <span class="keyword">const</span> Reduction&amp; reduction,
+<a name="l00322"></a>00322                        <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>&amp; partitioner ) {
+<a name="l00323"></a>00323     internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt; body(identity, real_body, reduction);
+<a name="l00324"></a>00324     internal::start_reduce&lt;Range,internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt;,<span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>&gt;
+<a name="l00325"></a>00325                           ::run( range, body, partitioner );
+<a name="l00326"></a>00326     <span class="keywordflow">return</span> body.result();
+<a name="l00327"></a>00327 }
+<a name="l00328"></a>00328 
+<a name="l00330"></a>00330 
+<a name="l00331"></a>00331 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction&gt;
+<a name="l00332"></a><a class="code" href="a00233.html#gb7f1f1828ae2b330ce05b8513a495154">00332</a> Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Value&amp; identity, <span class="keyword">const</span> RealBody&amp; real_body, <span class="keyword">const</span> Reduction&amp; reduction,
+<a name="l00333"></a>00333                        <a class="code" href="a00115.html">affinity_partitioner</a>&amp; partitioner ) {
+<a name="l00334"></a>00334     internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt; body(identity, real_body, reduction);
+<a name="l00335"></a>00335     internal::start_reduce&lt;Range,internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt;,<a class="code" href="a00115.html">affinity_partitioner</a>&gt;
+<a name="l00336"></a>00336                                         ::run( range, body, partitioner );
+<a name="l00337"></a>00337     <span class="keywordflow">return</span> body.result();
+<a name="l00338"></a>00338 }
+<a name="l00339"></a>00339 
+<a name="l00340"></a>00340 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00342"></a>00342 <span class="preprocessor"></span>
+<a name="l00343"></a>00343 <span class="preprocessor">template&lt;typename Range, typename Value, typename RealBody, typename Reduction&gt;</span>
+<a name="l00344"></a><a class="code" href="a00233.html#gfbc0cc2026d87f11a96bcd62788f5bb5">00344</a> <span class="preprocessor"></span>Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Value&amp; identity, <span class="keyword">const</span> RealBody&amp; real_body, <span class="keyword">const</span> Reduction&amp; reduction,
+<a name="l00345"></a>00345                        <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>&amp; partitioner, <a class="code" href="a00167.html">task_group_context</a>&amp; context ) {
+<a name="l00346"></a>00346     internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt; body(identity, real_body, reduction);
+<a name="l00347"></a>00347     internal::start_reduce&lt;Range,internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt;,<span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>&gt;
+<a name="l00348"></a>00348                           ::run( range, body, partitioner, context );
+<a name="l00349"></a>00349     <span class="keywordflow">return</span> body.result();
+<a name="l00350"></a>00350 }
+<a name="l00351"></a>00351 
+<a name="l00353"></a>00353 
+<a name="l00354"></a>00354 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction&gt;
+<a name="l00355"></a><a class="code" href="a00233.html#g630c90a399937d9d4ae70ff883186dfd">00355</a> Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Value&amp; identity, <span class="keyword">const</span> RealBody&amp; real_body, <span class="keyword">const</span> Reduction&amp; reduction,
+<a name="l00356"></a>00356                        <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>&amp; partitioner, <a class="code" href="a00167.html">task_group_context</a>&amp; context ) {
+<a name="l00357"></a>00357     internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt; body(identity, real_body, reduction);
+<a name="l00358"></a>00358     internal::start_reduce&lt;Range,internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt;,<span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>&gt;
+<a name="l00359"></a>00359                           ::run( range, body, partitioner, context );
+<a name="l00360"></a>00360     <span class="keywordflow">return</span> body.result();
+<a name="l00361"></a>00361 }
+<a name="l00362"></a>00362 
+<a name="l00364"></a>00364 
+<a name="l00365"></a>00365 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction&gt;
+<a name="l00366"></a><a class="code" href="a00233.html#g496bd7eadb3b97495ccb5655ef90319e">00366</a> Value <a class="code" href="a00233.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range&amp; range, <span class="keyword">const</span> Value&amp; identity, <span class="keyword">const</span> RealBody&amp; real_body, <span class="keyword">const</span> Reduction&amp; reduction,
+<a name="l00367"></a>00367                        <a class="code" href="a00115.html">affinity_partitioner</a>&amp; partitioner, <a class="code" href="a00167.html">task_group_context</a>&amp; context ) {
+<a name="l00368"></a>00368     internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt; body(identity, real_body, reduction);
+<a name="l00369"></a>00369     internal::start_reduce&lt;Range,internal::lambda_reduce_body&lt;Range,Value,RealBody,Reduction&gt;,<a class="code" href="a00115.html">affinity_partitioner</a>&gt;
+<a name="l00370"></a>00370                                         ::run( range, body, partitioner, context );
+<a name="l00371"></a>00371     <span class="keywordflow">return</span> body.result();
+<a name="l00372"></a>00372 }
+<a name="l00373"></a>00373 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00374"></a>00374 
+<a name="l00375"></a>00375 
+<a name="l00376"></a>00376 } <span class="comment">// namespace tbb</span>
+<a name="l00377"></a>00377 
+<a name="l00378"></a>00378 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_reduce_H */</span>
+<a name="l00379"></a>00379 
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00328.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00328.html
new file mode 100644 (file)
index 0000000..44cc052
--- /dev/null
@@ -0,0 +1,457 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>parallel_scan.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>parallel_scan.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_scan_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_scan_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;new&gt;</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "partitioner.h"</span>
+<a name="l00028"></a>00028 
+<a name="l00029"></a>00029 <span class="keyword">namespace </span>tbb {
+<a name="l00030"></a>00030 
+<a name="l00032"></a>00032 
+<a name="l00033"></a><a class="code" href="a00151.html">00033</a> <span class="keyword">struct </span><a class="code" href="a00151.html">pre_scan_tag</a> {
+<a name="l00034"></a>00034     <span class="keyword">static</span> <span class="keywordtype">bool</span> is_final_scan() {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+<a name="l00035"></a>00035 };
+<a name="l00036"></a>00036 
+<a name="l00038"></a>00038 
+<a name="l00039"></a><a class="code" href="a00140.html">00039</a> <span class="keyword">struct </span><a class="code" href="a00140.html">final_scan_tag</a> {
+<a name="l00040"></a>00040     <span class="keyword">static</span> <span class="keywordtype">bool</span> is_final_scan() {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+<a name="l00041"></a>00041 };
+<a name="l00042"></a>00042 
+<a name="l00044"></a>00044 <span class="keyword">namespace </span>internal {
+<a name="l00045"></a>00045 
+<a name="l00047"></a>00047 
+<a name="l00048"></a>00048     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00049"></a>00049     <span class="keyword">class </span>final_sum: <span class="keyword">public</span> <a class="code" href="a00166.html">task</a> {
+<a name="l00050"></a>00050     <span class="keyword">public</span>:
+<a name="l00051"></a>00051         Body body;
+<a name="l00052"></a>00052     <span class="keyword">private</span>:
+<a name="l00053"></a>00053         <a class="code" href="a00116.html">aligned_space&lt;Range,1&gt;</a> range;
+<a name="l00055"></a>00055         Body* stuff_last;
+<a name="l00056"></a>00056     <span class="keyword">public</span>:
+<a name="l00057"></a>00057         final_sum( Body&amp; body_ ) :
+<a name="l00058"></a>00058             body(body_,<a class="code" href="a00165.html">split</a>())
+<a name="l00059"></a>00059         {
+<a name="l00060"></a>00060             poison_pointer(stuff_last);
+<a name="l00061"></a>00061         }
+<a name="l00062"></a>00062         ~final_sum() {
+<a name="l00063"></a>00063             range.begin()-&gt;~Range();
+<a name="l00064"></a>00064         }     
+<a name="l00065"></a>00065         <span class="keywordtype">void</span> finish_construction( <span class="keyword">const</span> Range&amp; range_, Body* stuff_last_ ) {
+<a name="l00066"></a>00066             <span class="keyword">new</span>( range.begin() ) Range(range_);
+<a name="l00067"></a>00067             stuff_last = stuff_last_;
+<a name="l00068"></a>00068         }
+<a name="l00069"></a>00069     <span class="keyword">private</span>:
+<a name="l00070"></a>00070         <span class="comment">/*override*/</span> task* execute() {
+<a name="l00071"></a>00071             body( *range.begin(), final_scan_tag() );
+<a name="l00072"></a>00072             <span class="keywordflow">if</span>( stuff_last )
+<a name="l00073"></a>00073                 stuff_last-&gt;assign(body);
+<a name="l00074"></a>00074             <span class="keywordflow">return</span> NULL;
+<a name="l00075"></a>00075         }
+<a name="l00076"></a>00076     };       
+<a name="l00077"></a>00077 
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00081"></a>00081     <span class="keyword">class </span>sum_node: <span class="keyword">public</span> task {
+<a name="l00082"></a>00082         <span class="keyword">typedef</span> final_sum&lt;Range,Body&gt; final_sum_type;
+<a name="l00083"></a>00083     <span class="keyword">public</span>:
+<a name="l00084"></a>00084         final_sum_type *incoming; 
+<a name="l00085"></a>00085         final_sum_type *body;
+<a name="l00086"></a>00086         Body *stuff_last;
+<a name="l00087"></a>00087     <span class="keyword">private</span>:
+<a name="l00088"></a>00088         final_sum_type *left_sum;
+<a name="l00089"></a>00089         sum_node *left;
+<a name="l00090"></a>00090         sum_node *right;     
+<a name="l00091"></a>00091         <span class="keywordtype">bool</span> left_is_final;
+<a name="l00092"></a>00092         Range range;
+<a name="l00093"></a>00093         sum_node( <span class="keyword">const</span> Range range_, <span class="keywordtype">bool</span> left_is_final_ ) : 
+<a name="l00094"></a>00094             left_sum(NULL), 
+<a name="l00095"></a>00095             left(NULL), 
+<a name="l00096"></a>00096             right(NULL), 
+<a name="l00097"></a>00097             left_is_final(left_is_final_), 
+<a name="l00098"></a>00098             range(range_)
+<a name="l00099"></a>00099         {
+<a name="l00100"></a>00100             <span class="comment">// Poison fields that will be set by second pass.</span>
+<a name="l00101"></a>00101             poison_pointer(body);
+<a name="l00102"></a>00102             poison_pointer(incoming);
+<a name="l00103"></a>00103         }
+<a name="l00104"></a>00104         task* create_child( <span class="keyword">const</span> Range&amp; range, final_sum_type&amp; f, sum_node* n, final_sum_type* incoming, Body* stuff_last ) {
+<a name="l00105"></a>00105             <span class="keywordflow">if</span>( !n ) {
+<a name="l00106"></a>00106                 f.recycle_as_child_of( *<span class="keyword">this</span> );
+<a name="l00107"></a>00107                 f.finish_construction( range, stuff_last );
+<a name="l00108"></a>00108                 <span class="keywordflow">return</span> &amp;f;
+<a name="l00109"></a>00109             } <span class="keywordflow">else</span> {
+<a name="l00110"></a>00110                 n-&gt;body = &amp;f;
+<a name="l00111"></a>00111                 n-&gt;incoming = incoming;
+<a name="l00112"></a>00112                 n-&gt;stuff_last = stuff_last;
+<a name="l00113"></a>00113                 <span class="keywordflow">return</span> n;
+<a name="l00114"></a>00114             }
+<a name="l00115"></a>00115         }
+<a name="l00116"></a>00116         <span class="comment">/*override*/</span> task* execute() {
+<a name="l00117"></a>00117             <span class="keywordflow">if</span>( body ) {
+<a name="l00118"></a>00118                 <span class="keywordflow">if</span>( incoming )
+<a name="l00119"></a>00119                     left_sum-&gt;body.reverse_join( incoming-&gt;body );
+<a name="l00120"></a>00120                 recycle_as_continuation();
+<a name="l00121"></a>00121                 sum_node&amp; c = *<span class="keyword">this</span>;
+<a name="l00122"></a>00122                 task* b = c.create_child(Range(range,split()),*left_sum,right,left_sum,stuff_last);
+<a name="l00123"></a>00123                 task* a = left_is_final ? NULL : c.create_child(range,*body,left,incoming,NULL);
+<a name="l00124"></a>00124                 set_ref_count( (a!=NULL)+(b!=NULL) );
+<a name="l00125"></a>00125                 body = NULL; 
+<a name="l00126"></a>00126                 <span class="keywordflow">if</span>( a ) spawn(*b);
+<a name="l00127"></a>00127                 <span class="keywordflow">else</span> a = b;
+<a name="l00128"></a>00128                 <span class="keywordflow">return</span> a;
+<a name="l00129"></a>00129             } <span class="keywordflow">else</span> {
+<a name="l00130"></a>00130                 <span class="keywordflow">return</span> NULL;
+<a name="l00131"></a>00131             }
+<a name="l00132"></a>00132         }
+<a name="l00133"></a>00133         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range_,<span class="keyword">typename</span> Body_,<span class="keyword">typename</span> Partitioner_&gt;
+<a name="l00134"></a>00134         <span class="keyword">friend</span> <span class="keyword">class </span>start_scan;
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range_,<span class="keyword">typename</span> Body_&gt;
+<a name="l00137"></a>00137         <span class="keyword">friend</span> <span class="keyword">class </span>finish_scan;
+<a name="l00138"></a>00138     };
+<a name="l00139"></a>00139 
+<a name="l00141"></a>00141 
+<a name="l00142"></a>00142     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00143"></a>00143     <span class="keyword">class </span>finish_scan: <span class="keyword">public</span> task {
+<a name="l00144"></a>00144         <span class="keyword">typedef</span> sum_node&lt;Range,Body&gt; sum_node_type;
+<a name="l00145"></a>00145         <span class="keyword">typedef</span> final_sum&lt;Range,Body&gt; final_sum_type;
+<a name="l00146"></a>00146         final_sum_type** <span class="keyword">const</span> sum;
+<a name="l00147"></a>00147         sum_node_type*&amp; return_slot;
+<a name="l00148"></a>00148     <span class="keyword">public</span>:
+<a name="l00149"></a>00149         final_sum_type* right_zombie;
+<a name="l00150"></a>00150         sum_node_type&amp; result;
+<a name="l00151"></a>00151 
+<a name="l00152"></a>00152         <span class="comment">/*override*/</span> task* execute() {
+<a name="l00153"></a>00153             __TBB_ASSERT( result.ref_count()==(result.left!=NULL)+(result.right!=NULL), NULL );
+<a name="l00154"></a>00154             <span class="keywordflow">if</span>( result.left )
+<a name="l00155"></a>00155                 result.left_is_final = <span class="keyword">false</span>;
+<a name="l00156"></a>00156             <span class="keywordflow">if</span>( right_zombie &amp;&amp; sum ) 
+<a name="l00157"></a>00157                 ((*sum)-&gt;body).reverse_join(result.left_sum-&gt;body);
+<a name="l00158"></a>00158             __TBB_ASSERT( !return_slot, NULL );
+<a name="l00159"></a>00159             <span class="keywordflow">if</span>( right_zombie || result.right ) {
+<a name="l00160"></a>00160                 return_slot = &amp;result;
+<a name="l00161"></a>00161             } <span class="keywordflow">else</span> {
+<a name="l00162"></a>00162                 destroy( result );
+<a name="l00163"></a>00163             }
+<a name="l00164"></a>00164             <span class="keywordflow">if</span>( right_zombie &amp;&amp; !sum &amp;&amp; !result.right ) {
+<a name="l00165"></a>00165                 destroy(*right_zombie);
+<a name="l00166"></a>00166                 right_zombie = NULL;
+<a name="l00167"></a>00167             }
+<a name="l00168"></a>00168             <span class="keywordflow">return</span> NULL;
+<a name="l00169"></a>00169         }
+<a name="l00170"></a>00170 
+<a name="l00171"></a>00171         finish_scan( sum_node_type*&amp; return_slot_, final_sum_type** sum_, sum_node_type&amp; result_ ) : 
+<a name="l00172"></a>00172             sum(sum_),
+<a name="l00173"></a>00173             return_slot(return_slot_), 
+<a name="l00174"></a>00174             right_zombie(NULL),
+<a name="l00175"></a>00175             result(result_)
+<a name="l00176"></a>00176         {
+<a name="l00177"></a>00177             __TBB_ASSERT( !return_slot, NULL );
+<a name="l00178"></a>00178         }
+<a name="l00179"></a>00179         ~finish_scan(){
+<a name="l00180"></a>00180 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00181"></a>00181 <span class="preprocessor"></span>            <span class="keywordflow">if</span> (is_cancelled()) {
+<a name="l00182"></a>00182                 <span class="keywordflow">if</span> (result.ref_count() == 0) destroy(result);
+<a name="l00183"></a>00183                 <span class="keywordflow">if</span> (right_zombie) destroy(*right_zombie);
+<a name="l00184"></a>00184             }
+<a name="l00185"></a>00185 <span class="preprocessor">#endif</span>
+<a name="l00186"></a>00186 <span class="preprocessor"></span>        }
+<a name="l00187"></a>00187     };
+<a name="l00188"></a>00188 
+<a name="l00190"></a>00190 
+<a name="l00191"></a>00191     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner=simple_partitioner&gt;
+<a name="l00192"></a>00192     <span class="keyword">class </span>start_scan: <span class="keyword">public</span> task {
+<a name="l00193"></a>00193         <span class="keyword">typedef</span> sum_node&lt;Range,Body&gt; sum_node_type;
+<a name="l00194"></a>00194         <span class="keyword">typedef</span> final_sum&lt;Range,Body&gt; final_sum_type;
+<a name="l00195"></a>00195         final_sum_type* body;
+<a name="l00197"></a>00197         final_sum_type** sum; 
+<a name="l00198"></a>00198         sum_node_type** return_slot;
+<a name="l00200"></a>00200         sum_node_type* parent_sum;
+<a name="l00201"></a>00201         <span class="keywordtype">bool</span> is_final;
+<a name="l00202"></a>00202         <span class="keywordtype">bool</span> is_right_child;
+<a name="l00203"></a>00203         Range range;
+<a name="l00204"></a>00204         <span class="keyword">typename</span> Partitioner::partition_type partition;
+<a name="l00205"></a>00205         <span class="comment">/*override*/</span> task* execute();
+<a name="l00206"></a>00206 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00207"></a>00207 <span class="preprocessor"></span>        <a class="code" href="a00167.html">tbb::task_group_context</a> &amp;my_context;
+<a name="l00208"></a>00208 <span class="preprocessor">#endif</span>
+<a name="l00209"></a>00209 <span class="preprocessor"></span>    <span class="keyword">public</span>:
+<a name="l00210"></a>00210         start_scan( sum_node_type*&amp; return_slot_, start_scan&amp; parent, sum_node_type* parent_sum_ 
+<a name="l00211"></a>00211 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00212"></a>00212             , <a class="code" href="a00167.html">tbb::task_group_context</a> &amp;_context
+<a name="l00213"></a>00213 #endif
+<a name="l00214"></a>00214             ) :
+<a name="l00215"></a>00215             body(parent.body),
+<a name="l00216"></a>00216             sum(parent.sum),
+<a name="l00217"></a>00217             return_slot(&amp;return_slot_),
+<a name="l00218"></a>00218             parent_sum(parent_sum_),
+<a name="l00219"></a>00219             is_final(parent.is_final),
+<a name="l00220"></a>00220             is_right_child(false),
+<a name="l00221"></a>00221             range(parent.range,split()),
+<a name="l00222"></a>00222             partition(parent.partition,split())
+<a name="l00223"></a>00223 #if __TBB_EXCEPTIONS
+<a name="l00224"></a>00224         , my_context (_context)
+<a name="l00225"></a>00225 #endif
+<a name="l00226"></a>00226         {
+<a name="l00227"></a>00227             __TBB_ASSERT( !*return_slot, NULL );
+<a name="l00228"></a>00228         }
+<a name="l00229"></a>00229 
+<a name="l00230"></a>00230         start_scan( sum_node_type*&amp; return_slot_, <span class="keyword">const</span> Range&amp; range_, final_sum_type&amp; body_, <span class="keyword">const</span> Partitioner&amp; partitioner_
+<a name="l00231"></a>00231 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00232"></a>00232         , <a class="code" href="a00167.html">tbb::task_group_context</a> &amp;_context
+<a name="l00233"></a>00233 #endif
+<a name="l00234"></a>00234             ) :
+<a name="l00235"></a>00235             body(&amp;body_),
+<a name="l00236"></a>00236             sum(NULL),
+<a name="l00237"></a>00237             return_slot(&amp;return_slot_),
+<a name="l00238"></a>00238             parent_sum(NULL),
+<a name="l00239"></a>00239             is_final(true),
+<a name="l00240"></a>00240             is_right_child(false),
+<a name="l00241"></a>00241             range(range_),
+<a name="l00242"></a>00242             partition(partitioner_)
+<a name="l00243"></a>00243 #if __TBB_EXCEPTIONS
+<a name="l00244"></a>00244             , my_context (_context)
+<a name="l00245"></a>00245 #endif
+<a name="l00246"></a>00246         {
+<a name="l00247"></a>00247             __TBB_ASSERT( !*return_slot, NULL );
+<a name="l00248"></a>00248         }
+<a name="l00249"></a>00249 
+<a name="l00250"></a>00250         <span class="keyword">static</span> <span class="keywordtype">void</span> run(  <span class="keyword">const</span> Range&amp; range, Body&amp; body, <span class="keyword">const</span> Partitioner&amp; partitioner 
+<a name="l00251"></a>00251 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00252"></a>00252         , task_group_context&amp; context
+<a name="l00253"></a>00253 #endif
+<a name="l00254"></a>00254             ) {
+<a name="l00255"></a>00255             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00256"></a>00256                 <span class="keyword">typedef</span> internal::start_scan&lt;Range,Body,Partitioner&gt; start_pass1_type;
+<a name="l00257"></a>00257                 internal::sum_node&lt;Range,Body&gt;* root = NULL;
+<a name="l00258"></a>00258                 <span class="keyword">typedef</span> internal::final_sum&lt;Range,Body&gt; final_sum_type;
+<a name="l00259"></a>00259 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00260"></a>00260 <span class="preprocessor"></span>                final_sum_type* temp_body = <span class="keyword">new</span>(<a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(context)) final_sum_type( body );
+<a name="l00261"></a>00261                 start_pass1_type&amp; pass1 = *<span class="keyword">new</span>(<a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(context)) start_pass1_type(
+<a name="l00262"></a>00262                     <span class="comment">/*return_slot=*/</span>root,
+<a name="l00263"></a>00263                     range,
+<a name="l00264"></a>00264                     *temp_body,
+<a name="l00265"></a>00265                     partitioner,
+<a name="l00266"></a>00266                     context
+<a name="l00267"></a>00267                     );
+<a name="l00268"></a>00268 <span class="preprocessor">#else</span>
+<a name="l00269"></a>00269 <span class="preprocessor"></span>                final_sum_type* temp_body = <span class="keyword">new</span>(<a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) final_sum_type( body );
+<a name="l00270"></a>00270                 start_pass1_type&amp; pass1 = *<span class="keyword">new</span>(<a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_pass1_type(
+<a name="l00271"></a>00271                     <span class="comment">/*return_slot=*/</span>root,
+<a name="l00272"></a>00272                     range,
+<a name="l00273"></a>00273                     *temp_body,
+<a name="l00274"></a>00274                     partitioner );
+<a name="l00275"></a>00275 <span class="preprocessor">#endif</span>
+<a name="l00276"></a>00276 <span class="preprocessor"></span>                <span class="comment">// The class is intended to destroy allocated tasks if exception occurs</span>
+<a name="l00277"></a>00277                 <span class="keyword">class </span>task_cleaner: internal::no_copy {
+<a name="l00278"></a>00278                     internal::sum_node&lt;Range,Body&gt;* my_root;
+<a name="l00279"></a>00279                     final_sum_type* my_temp_body;
+<a name="l00280"></a>00280                     <span class="keyword">const</span> Range&amp; my_range;
+<a name="l00281"></a>00281                     Body&amp; my_body;
+<a name="l00282"></a>00282                     start_pass1_type* my_pass1;
+<a name="l00283"></a>00283                 <span class="keyword">public</span>:
+<a name="l00284"></a>00284                     <span class="keywordtype">bool</span> do_clean; <span class="comment">// Set to true if cleanup is required.</span>
+<a name="l00285"></a>00285                     task_cleaner(internal::sum_node&lt;Range,Body&gt;* _root, final_sum_type* _temp_body, <span class="keyword">const</span> Range&amp; _range, Body&amp; _body, start_pass1_type* _pass1)
+<a name="l00286"></a>00286                         : my_root(_root), my_temp_body(_temp_body), my_range(_range), my_body(_body), my_pass1(_pass1), do_clean(true) {}
+<a name="l00287"></a>00287                     ~task_cleaner(){
+<a name="l00288"></a>00288                         <span class="keywordflow">if</span> (do_clean) {
+<a name="l00289"></a>00289                             my_body.assign(my_temp_body-&gt;body);
+<a name="l00290"></a>00290                             my_temp_body-&gt;finish_construction( my_range, NULL );
+<a name="l00291"></a>00291                             my_temp_body-&gt;destroy(*my_temp_body);
+<a name="l00292"></a>00292                         }
+<a name="l00293"></a>00293                     }
+<a name="l00294"></a>00294                 };
+<a name="l00295"></a>00295                 task_cleaner my_cleaner(root, temp_body, range, body, &amp;pass1);
+<a name="l00296"></a>00296 
+<a name="l00297"></a>00297                 <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( pass1 );
+<a name="l00298"></a>00298                 my_cleaner.do_clean = <span class="keyword">false</span>;
+<a name="l00299"></a>00299                 <span class="keywordflow">if</span>( root ) {
+<a name="l00300"></a>00300                     root-&gt;body = temp_body;
+<a name="l00301"></a>00301                     root-&gt;incoming = NULL;
+<a name="l00302"></a>00302                     root-&gt;stuff_last = &amp;body;
+<a name="l00303"></a>00303                     <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *root );
+<a name="l00304"></a>00304                 } <span class="keywordflow">else</span> {
+<a name="l00305"></a>00305                     my_cleaner.do_clean = <span class="keyword">true</span>;
+<a name="l00306"></a>00306                 }
+<a name="l00307"></a>00307             }
+<a name="l00308"></a>00308         }
+<a name="l00309"></a>00309     };
+<a name="l00310"></a>00310 
+<a name="l00311"></a>00311     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt;
+<a name="l00312"></a>00312     task* start_scan&lt;Range,Body,Partitioner&gt;::execute() {
+<a name="l00313"></a>00313         <span class="keyword">typedef</span> internal::finish_scan&lt;Range,Body&gt; finish_pass1_type;
+<a name="l00314"></a>00314         finish_pass1_type* p = parent_sum ? static_cast&lt;finish_pass1_type*&gt;( parent() ) : NULL;
+<a name="l00315"></a>00315         <span class="comment">// Inspecting p-&gt;result.left_sum would ordinarily be a race condition.</span>
+<a name="l00316"></a>00316         <span class="comment">// But we inspect it only if we are not a stolen task, in which case we</span>
+<a name="l00317"></a>00317         <span class="comment">// know that task assigning to p-&gt;result.left_sum has completed.</span>
+<a name="l00318"></a>00318         <span class="keywordtype">bool</span> treat_as_stolen = is_right_child &amp;&amp; (is_stolen_task() || body!=p-&gt;result.left_sum);
+<a name="l00319"></a>00319         <span class="keywordflow">if</span>( treat_as_stolen ) {
+<a name="l00320"></a>00320             <span class="comment">// Invocation is for right child that has been really stolen or needs to be virtually stolen</span>
+<a name="l00321"></a>00321 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00322"></a>00322 <span class="preprocessor"></span>            p-&gt;right_zombie = body = <span class="keyword">new</span>( allocate_root(my_context) ) final_sum_type(body-&gt;body);
+<a name="l00323"></a>00323 <span class="preprocessor">#else</span>
+<a name="l00324"></a>00324 <span class="preprocessor"></span>            p-&gt;right_zombie = body = <span class="keyword">new</span>( allocate_root() ) final_sum_type(body-&gt;body);
+<a name="l00325"></a>00325 <span class="preprocessor">#endif</span>
+<a name="l00326"></a>00326 <span class="preprocessor"></span>            is_final = <span class="keyword">false</span>;
+<a name="l00327"></a>00327         }
+<a name="l00328"></a>00328         task* next_task = NULL;
+<a name="l00329"></a>00329         <span class="keywordflow">if</span>( (is_right_child &amp;&amp; !treat_as_stolen) || !range.is_divisible() || partition.should_execute_range(*<span class="keyword">this</span>) ) {
+<a name="l00330"></a>00330             <span class="keywordflow">if</span>( is_final )
+<a name="l00331"></a>00331                 (body-&gt;body)( range, final_scan_tag() );
+<a name="l00332"></a>00332             <span class="keywordflow">else</span> <span class="keywordflow">if</span>( sum )
+<a name="l00333"></a>00333                 (body-&gt;body)( range, pre_scan_tag() );
+<a name="l00334"></a>00334             <span class="keywordflow">if</span>( sum ) 
+<a name="l00335"></a>00335                 *sum = body;
+<a name="l00336"></a>00336             __TBB_ASSERT( !*return_slot, NULL );
+<a name="l00337"></a>00337         } <span class="keywordflow">else</span> {
+<a name="l00338"></a>00338             sum_node_type* result;
+<a name="l00339"></a>00339             <span class="keywordflow">if</span>( parent_sum ) 
+<a name="l00340"></a>00340                 result = <span class="keyword">new</span>(allocate_additional_child_of(*parent_sum)) sum_node_type(range,<span class="comment">/*left_is_final=*/</span>is_final);
+<a name="l00341"></a>00341             <span class="keywordflow">else</span>
+<a name="l00342"></a>00342 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00343"></a>00343 <span class="preprocessor"></span>                result = <span class="keyword">new</span>(<a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(my_context)) sum_node_type(range,<span class="comment">/*left_is_final=*/</span>is_final);
+<a name="l00344"></a>00344 <span class="preprocessor">#else</span>
+<a name="l00345"></a>00345 <span class="preprocessor"></span>                result = <span class="keyword">new</span>(<a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) sum_node_type(range,<span class="comment">/*left_is_final=*/</span>is_final);
+<a name="l00346"></a>00346 <span class="preprocessor">#endif</span>
+<a name="l00347"></a>00347 <span class="preprocessor"></span>            finish_pass1_type&amp; c = *<span class="keyword">new</span>( allocate_continuation()) finish_pass1_type(*return_slot,sum,*result);
+<a name="l00348"></a>00348             <span class="comment">// Split off right child</span>
+<a name="l00349"></a>00349 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00350"></a>00350 <span class="preprocessor"></span>            start_scan&amp; b = *<span class="keyword">new</span>( c.allocate_child() ) start_scan( <span class="comment">/*return_slot=*/</span>result-&gt;right, *<span class="keyword">this</span>, result, my_context );
+<a name="l00351"></a>00351 <span class="preprocessor">#else</span>
+<a name="l00352"></a>00352 <span class="preprocessor"></span>            start_scan&amp; b = *<span class="keyword">new</span>( c.allocate_child() ) start_scan( <span class="comment">/*return_slot=*/</span>result-&gt;right, *<span class="keyword">this</span>, result );
+<a name="l00353"></a>00353 <span class="preprocessor">#endif</span>
+<a name="l00354"></a>00354 <span class="preprocessor"></span>            b.is_right_child = <span class="keyword">true</span>;    
+<a name="l00355"></a>00355             <span class="comment">// Left child is recycling of *this.  Must recycle this before spawning b, </span>
+<a name="l00356"></a>00356             <span class="comment">// otherwise b might complete and decrement c.ref_count() to zero, which</span>
+<a name="l00357"></a>00357             <span class="comment">// would cause c.execute() to run prematurely.</span>
+<a name="l00358"></a>00358             recycle_as_child_of(c);
+<a name="l00359"></a>00359             c.set_ref_count(2);
+<a name="l00360"></a>00360             c.spawn(b);
+<a name="l00361"></a>00361             sum = &amp;result-&gt;left_sum;
+<a name="l00362"></a>00362             return_slot = &amp;result-&gt;left;
+<a name="l00363"></a>00363             is_right_child = <span class="keyword">false</span>;
+<a name="l00364"></a>00364             next_task = <span class="keyword">this</span>;
+<a name="l00365"></a>00365             parent_sum = result; 
+<a name="l00366"></a>00366             __TBB_ASSERT( !*return_slot, NULL );
+<a name="l00367"></a>00367         }
+<a name="l00368"></a>00368         <span class="keywordflow">return</span> next_task;
+<a name="l00369"></a>00369     } 
+<a name="l00370"></a>00370 } <span class="comment">// namespace internal</span>
+<a name="l00372"></a>00372 <span class="comment"></span>
+<a name="l00373"></a>00373 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
+<a name="l00374"></a>00374 
+<a name="l00392"></a>00392 
+<a name="l00394"></a>00394 
+<a name="l00395"></a>00395 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00396"></a><a class="code" href="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">00396</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range&amp; range, Body&amp; body ) {
+<a name="l00397"></a>00397 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00398"></a>00398 <span class="preprocessor"></span>    <a class="code" href="a00167.html">task_group_context</a> context;
+<a name="l00399"></a>00399 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
+<a name="l00400"></a>00400 <span class="preprocessor"></span>    internal::start_scan&lt;Range,Body,__TBB_DEFAULT_PARTITIONER&gt;::run(range,body,__TBB_DEFAULT_PARTITIONER()
+<a name="l00401"></a>00401 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00402"></a>00402         , context
+<a name="l00403"></a>00403 #endif
+<a name="l00404"></a>00404         );
+<a name="l00405"></a>00405 }
+<a name="l00406"></a>00406 
+<a name="l00408"></a>00408 
+<a name="l00409"></a>00409 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00410"></a><a class="code" href="a00233.html#gc9fac8870b2e6365fb337014404529df">00410</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range&amp; range, Body&amp; body, <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>&amp; partitioner ) {
+<a name="l00411"></a>00411 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00412"></a>00412 <span class="preprocessor"></span>    <a class="code" href="a00167.html">task_group_context</a> context;
+<a name="l00413"></a>00413 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
+<a name="l00414"></a>00414 <span class="preprocessor"></span>    internal::start_scan&lt;Range,Body,simple_partitioner&gt;::run(range,body,partitioner
+<a name="l00415"></a>00415 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00416"></a>00416         , context
+<a name="l00417"></a>00417 #endif
+<a name="l00418"></a>00418         );
+<a name="l00419"></a>00419 }
+<a name="l00420"></a>00420 
+<a name="l00422"></a>00422 
+<a name="l00423"></a>00423 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00424"></a><a class="code" href="a00233.html#g62fde400a37bbca1a2fddc8e3d22f556">00424</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range&amp; range, Body&amp; body, <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>&amp; partitioner ) {
+<a name="l00425"></a>00425 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00426"></a>00426 <span class="preprocessor"></span>    <a class="code" href="a00167.html">task_group_context</a> context;
+<a name="l00427"></a>00427 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
+<a name="l00428"></a>00428 <span class="preprocessor"></span>    internal::start_scan&lt;Range,Body,auto_partitioner&gt;::run(range,body,partitioner
+<a name="l00429"></a>00429 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+<a name="l00430"></a>00430         , context
+<a name="l00431"></a>00431 #endif
+<a name="l00432"></a>00432         );
+<a name="l00433"></a>00433 }
+<a name="l00434"></a>00434 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00436"></a>00436 <span class="preprocessor"></span>
+<a name="l00437"></a>00437 <span class="preprocessor">template&lt;typename Range, typename Body&gt;</span>
+<a name="l00438"></a><a class="code" href="a00233.html#gb7451aa58925fb7bb579b367c4ba3500">00438</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range&amp; range, Body&amp; body, <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>&amp; partitioner, <a class="code" href="a00167.html">tbb::task_group_context</a> &amp; context ) {
+<a name="l00439"></a>00439     internal::start_scan&lt;Range,Body,simple_partitioner&gt;::run(range,body,partitioner,context);
+<a name="l00440"></a>00440 }
+<a name="l00441"></a>00441 
+<a name="l00443"></a>00443 
+<a name="l00444"></a>00444 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00445"></a><a class="code" href="a00233.html#g40a7c46037dbafa74fce7a91cc60d9d7">00445</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range&amp; range, Body&amp; body, <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>&amp; partitioner, <a class="code" href="a00167.html">tbb::task_group_context</a> &amp; context ) {
+<a name="l00446"></a>00446     internal::start_scan&lt;Range,Body,auto_partitioner&gt;::run(range,body,partitioner,context);
+<a name="l00447"></a>00447 }
+<a name="l00448"></a>00448 
+<a name="l00450"></a>00450 
+<a name="l00451"></a>00451 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt;
+<a name="l00452"></a><a class="code" href="a00233.html#g83716e2b2926c1fc225802aa309fd2bf">00452</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range&amp; range, Body&amp; body, <a class="code" href="a00167.html">tbb::task_group_context</a> &amp; context ) {
+<a name="l00453"></a>00453     internal::start_scan&lt;Range,Body,__TBB_DEFAULT_PARTITIONER&gt;::run(range,body,__TBB_DEFAULT_PARTITIONER(),context);
+<a name="l00454"></a>00454 }
+<a name="l00455"></a>00455 <span class="preprocessor">#endif</span>
+<a name="l00456"></a>00456 <span class="preprocessor"></span>
+<a name="l00458"></a>00458 
+<a name="l00459"></a>00459 } <span class="comment">// namespace tbb</span>
+<a name="l00460"></a>00460 
+<a name="l00461"></a>00461 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_scan_H */</span>
+<a name="l00462"></a>00462 
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00334.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00334.html
new file mode 100644 (file)
index 0000000..fe8795c
--- /dev/null
@@ -0,0 +1,225 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>parallel_sort.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>parallel_sort.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_sort_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_sort_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "parallel_for.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "blocked_range.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;algorithm&gt;</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;iterator&gt;</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;functional&gt;</span>
+<a name="l00029"></a>00029 
+<a name="l00030"></a>00030 <span class="keyword">namespace </span>tbb {
+<a name="l00031"></a>00031 
+<a name="l00033"></a>00033 <span class="keyword">namespace </span>internal {
+<a name="l00034"></a>00034 
+<a name="l00036"></a>00036 
+<a name="l00039"></a>00039 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare&gt;
+<a name="l00040"></a>00040 <span class="keyword">class </span>quick_sort_range: <span class="keyword">private</span> no_assign {
+<a name="l00041"></a>00041 
+<a name="l00042"></a>00042     <span class="keyword">inline</span> size_t median_of_three(<span class="keyword">const</span> RandomAccessIterator &amp;array, size_t l, size_t m, size_t r)<span class="keyword"> const </span>{
+<a name="l00043"></a>00043         <span class="keywordflow">return</span> comp(array[l], array[m]) ? ( comp(array[m], array[r]) ? m : ( comp( array[l], array[r]) ? r : l ) ) 
+<a name="l00044"></a>00044                                         : ( comp(array[r], array[m]) ? m : ( comp( array[r], array[l] ) ? r : l ) );
+<a name="l00045"></a>00045     }
+<a name="l00046"></a>00046 
+<a name="l00047"></a>00047     <span class="keyword">inline</span> size_t pseudo_median_of_nine( <span class="keyword">const</span> RandomAccessIterator &amp;array, <span class="keyword">const</span> quick_sort_range &amp;range )<span class="keyword"> const </span>{
+<a name="l00048"></a>00048         size_t offset = range.size/8u;
+<a name="l00049"></a>00049         <span class="keywordflow">return</span> median_of_three(array, 
+<a name="l00050"></a>00050                                median_of_three(array, 0, offset, offset*2),
+<a name="l00051"></a>00051                                median_of_three(array, offset*3, offset*4, offset*5),
+<a name="l00052"></a>00052                                median_of_three(array, offset*6, offset*7, range.size - 1) );
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054     }
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056 <span class="keyword">public</span>:
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058     <span class="keyword">static</span> <span class="keyword">const</span> size_t grainsize = 500;
+<a name="l00059"></a>00059     <span class="keyword">const</span> Compare &amp;comp;
+<a name="l00060"></a>00060     RandomAccessIterator begin;
+<a name="l00061"></a>00061     size_t size;
+<a name="l00062"></a>00062 
+<a name="l00063"></a>00063     quick_sort_range( RandomAccessIterator begin_, size_t size_, <span class="keyword">const</span> Compare &amp;comp_ ) :
+<a name="l00064"></a>00064         comp(comp_), begin(begin_), size(size_) {}
+<a name="l00065"></a>00065 
+<a name="l00066"></a>00066     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size==0;}
+<a name="l00067"></a>00067     <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size&gt;=grainsize;}
+<a name="l00068"></a>00068 
+<a name="l00069"></a>00069     quick_sort_range( quick_sort_range&amp; range, split ) : comp(range.comp) {
+<a name="l00070"></a>00070         RandomAccessIterator array = range.begin;
+<a name="l00071"></a>00071         RandomAccessIterator key0 = range.begin; 
+<a name="l00072"></a>00072         size_t m = pseudo_median_of_nine(array, range);
+<a name="l00073"></a>00073         <span class="keywordflow">if</span> (m) std::swap ( array[0], array[m] );
+<a name="l00074"></a>00074 
+<a name="l00075"></a>00075         size_t i=0;
+<a name="l00076"></a>00076         size_t j=range.size;
+<a name="l00077"></a>00077         <span class="comment">// Partition interval [i+1,j-1] with key *key0.</span>
+<a name="l00078"></a>00078         <span class="keywordflow">for</span>(;;) {
+<a name="l00079"></a>00079             __TBB_ASSERT( i&lt;j, NULL );
+<a name="l00080"></a>00080             <span class="comment">// Loop must terminate since array[l]==*key0.</span>
+<a name="l00081"></a>00081             <span class="keywordflow">do</span> {
+<a name="l00082"></a>00082                 --j;
+<a name="l00083"></a>00083                 __TBB_ASSERT( i&lt;=j, <span class="stringliteral">"bad ordering relation?"</span> );
+<a name="l00084"></a>00084             } <span class="keywordflow">while</span>( comp( *key0, array[j] ));
+<a name="l00085"></a>00085             <span class="keywordflow">do</span> {
+<a name="l00086"></a>00086                 __TBB_ASSERT( i&lt;=j, NULL );
+<a name="l00087"></a>00087                 <span class="keywordflow">if</span>( i==j ) <span class="keywordflow">goto</span> partition;
+<a name="l00088"></a>00088                 ++i;
+<a name="l00089"></a>00089             } <span class="keywordflow">while</span>( comp( array[i],*key0 ));
+<a name="l00090"></a>00090             <span class="keywordflow">if</span>( i==j ) <span class="keywordflow">goto</span> partition;
+<a name="l00091"></a>00091             std::swap( array[i], array[j] );
+<a name="l00092"></a>00092         }
+<a name="l00093"></a>00093 partition:
+<a name="l00094"></a>00094         <span class="comment">// Put the partition key were it belongs</span>
+<a name="l00095"></a>00095         std::swap( array[j], *key0 );
+<a name="l00096"></a>00096         <span class="comment">// array[l..j) is less or equal to key.</span>
+<a name="l00097"></a>00097         <span class="comment">// array(j..r) is greater or equal to key.</span>
+<a name="l00098"></a>00098         <span class="comment">// array[j] is equal to key</span>
+<a name="l00099"></a>00099         i=j+1;
+<a name="l00100"></a>00100         begin = array+i;
+<a name="l00101"></a>00101         size = range.size-i;
+<a name="l00102"></a>00102         range.size = j;
+<a name="l00103"></a>00103     }
+<a name="l00104"></a>00104 };
+<a name="l00105"></a>00105 
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare&gt;
+<a name="l00109"></a>00109 <span class="keyword">class </span>quick_sort_pretest_body : internal::no_assign {
+<a name="l00110"></a>00110     <span class="keyword">const</span> Compare &amp;comp;
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112 <span class="keyword">public</span>:
+<a name="l00113"></a>00113     quick_sort_pretest_body(<span class="keyword">const</span> Compare &amp;_comp) : comp(_comp) {}
+<a name="l00114"></a>00114 
+<a name="l00115"></a>00115     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> blocked_range&lt;RandomAccessIterator&gt;&amp; range )<span class="keyword"> const </span>{
+<a name="l00116"></a>00116         task &amp;my_task = <a class="code" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>();
+<a name="l00117"></a>00117         RandomAccessIterator my_end = range.end();
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119         <span class="keywordtype">int</span> i = 0;
+<a name="l00120"></a>00120         <span class="keywordflow">for</span> (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i) {
+<a name="l00121"></a>00121             <span class="keywordflow">if</span> ( i%64 == 0 &amp;&amp; my_task.is_cancelled() ) <span class="keywordflow">break</span>;
+<a name="l00122"></a>00122           
+<a name="l00123"></a>00123             <span class="comment">// The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1</span>
+<a name="l00124"></a>00124             <span class="keywordflow">if</span> ( comp( *(k), *(k-1) ) ) {
+<a name="l00125"></a>00125                 my_task.cancel_group_execution();
+<a name="l00126"></a>00126                 <span class="keywordflow">break</span>;
+<a name="l00127"></a>00127             }
+<a name="l00128"></a>00128         }
+<a name="l00129"></a>00129     }
+<a name="l00130"></a>00130 
+<a name="l00131"></a>00131 };
+<a name="l00132"></a>00132 
+<a name="l00134"></a>00134 
+<a name="l00135"></a>00135 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare&gt;
+<a name="l00136"></a>00136 <span class="keyword">struct </span>quick_sort_body {
+<a name="l00137"></a>00137     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> quick_sort_range&lt;RandomAccessIterator,Compare&gt;&amp; range )<span class="keyword"> const </span>{
+<a name="l00138"></a>00138         <span class="comment">//SerialQuickSort( range.begin, range.size, range.comp );</span>
+<a name="l00139"></a>00139         std::sort( range.begin, range.begin + range.size, range.comp );
+<a name="l00140"></a>00140     }
+<a name="l00141"></a>00141 };
+<a name="l00142"></a>00142 
+<a name="l00144"></a>00144 
+<a name="l00145"></a>00145 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare&gt;
+<a name="l00146"></a>00146 <span class="keywordtype">void</span> parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare&amp; comp ) {
+<a name="l00147"></a>00147     task_group_context my_context;
+<a name="l00148"></a>00148     <span class="keyword">const</span> <span class="keywordtype">int</span> serial_cutoff = 9;
+<a name="l00149"></a>00149 
+<a name="l00150"></a>00150     __TBB_ASSERT( begin + serial_cutoff &lt; end, <span class="stringliteral">"min_parallel_size is smaller than serial cutoff?"</span> );
+<a name="l00151"></a>00151     RandomAccessIterator k;
+<a name="l00152"></a>00152     <span class="keywordflow">for</span> ( k = begin ; k != begin + serial_cutoff; ++k ) {
+<a name="l00153"></a>00153         <span class="keywordflow">if</span> ( comp( *(k+1), *k ) ) {
+<a name="l00154"></a>00154             <span class="keywordflow">goto</span> do_parallel_quick_sort;
+<a name="l00155"></a>00155         }
+<a name="l00156"></a>00156     }
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158     <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( blocked_range&lt;RandomAccessIterator&gt;(k+1, end),
+<a name="l00159"></a>00159                   quick_sort_pretest_body&lt;RandomAccessIterator,Compare&gt;(comp),
+<a name="l00160"></a>00160                   auto_partitioner(),
+<a name="l00161"></a>00161                   my_context);
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163     <span class="keywordflow">if</span> (my_context.is_group_execution_cancelled())
+<a name="l00164"></a>00164 do_parallel_quick_sort:
+<a name="l00165"></a>00165         <a class="code" href="a00233.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( quick_sort_range&lt;RandomAccessIterator,Compare&gt;(begin, end-begin, comp ), 
+<a name="l00166"></a>00166                       quick_sort_body&lt;RandomAccessIterator,Compare&gt;(),
+<a name="l00167"></a>00167                       auto_partitioner() );
+<a name="l00168"></a>00168 }
+<a name="l00169"></a>00169 
+<a name="l00170"></a>00170 } <span class="comment">// namespace internal</span>
+<a name="l00172"></a>00172 <span class="comment"></span>
+<a name="l00183"></a>00183 
+<a name="l00185"></a>00185 
+<a name="l00188"></a>00188 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare&gt;
+<a name="l00189"></a><a class="code" href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">00189</a> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare&amp; comp) { 
+<a name="l00190"></a>00190     <span class="keyword">const</span> <span class="keywordtype">int</span> min_parallel_size = 500; 
+<a name="l00191"></a>00191     <span class="keywordflow">if</span>( end &gt; begin ) {
+<a name="l00192"></a>00192         <span class="keywordflow">if</span> (end - begin &lt; min_parallel_size) { 
+<a name="l00193"></a>00193             std::sort(begin, end, comp);
+<a name="l00194"></a>00194         } <span class="keywordflow">else</span> {
+<a name="l00195"></a>00195             internal::parallel_quick_sort(begin, end, comp);
+<a name="l00196"></a>00196         }
+<a name="l00197"></a>00197     }
+<a name="l00198"></a>00198 }
+<a name="l00199"></a>00199 
+<a name="l00201"></a>00201 
+<a name="l00202"></a>00202 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RandomAccessIterator&gt;
+<a name="l00203"></a><a class="code" href="a00233.html#g16c3eb77d0e530834c51ce3857f01012">00203</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end ) { 
+<a name="l00204"></a>00204     <a class="code" href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less&lt; <span class="keyword">typename</span> std::iterator_traits&lt;RandomAccessIterator&gt;::value_type &gt;() );
+<a name="l00205"></a>00205 }
+<a name="l00206"></a>00206 
+<a name="l00208"></a>00208 
+<a name="l00209"></a>00209 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00210"></a><a class="code" href="a00233.html#gc7576f82fdedc8a701a6c17ad9415926">00210</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( T * begin, T * end ) {
+<a name="l00211"></a>00211     <a class="code" href="a00233.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less&lt; T &gt;() );
+<a name="l00212"></a>00212 }   
+<a name="l00214"></a>00214 
+<a name="l00215"></a>00215 
+<a name="l00216"></a>00216 } <span class="comment">// namespace tbb</span>
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218 <span class="preprocessor">#endif</span>
+<a name="l00219"></a>00219 <span class="preprocessor"></span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00338.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00338.html
new file mode 100644 (file)
index 0000000..4ad6cfc
--- /dev/null
@@ -0,0 +1,196 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>parallel_while.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>parallel_while.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_while</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_while</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;new&gt;</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
+<a name="l00028"></a>00028 
+<a name="l00029"></a>00029 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body&gt;
+<a name="l00030"></a>00030 <span class="keyword">class </span>parallel_while;
+<a name="l00031"></a>00031 
+<a name="l00033"></a>00033 <span class="keyword">namespace </span>internal {
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Stream, <span class="keyword">typename</span> Body&gt; <span class="keyword">class </span>while_task;
+<a name="l00036"></a>00036 
+<a name="l00038"></a>00038 
+<a name="l00040"></a>00040     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body&gt;
+<a name="l00041"></a>00041     <span class="keyword">class </span>while_iteration_task: <span class="keyword">public</span> task {
+<a name="l00042"></a>00042         <span class="keyword">const</span> Body&amp; my_body;
+<a name="l00043"></a>00043         <span class="keyword">typename</span> Body::argument_type my_value;
+<a name="l00044"></a>00044         <span class="comment">/*override*/</span> task* execute() {
+<a name="l00045"></a>00045             my_body(my_value); 
+<a name="l00046"></a>00046             <span class="keywordflow">return</span> NULL;
+<a name="l00047"></a>00047         }
+<a name="l00048"></a>00048         while_iteration_task( <span class="keyword">const</span> <span class="keyword">typename</span> Body::argument_type&amp; value, <span class="keyword">const</span> Body&amp; body ) : 
+<a name="l00049"></a>00049             my_body(body), my_value(value)
+<a name="l00050"></a>00050         {}
+<a name="l00051"></a>00051         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body_&gt; <span class="keyword">friend</span> <span class="keyword">class </span>while_group_task;
+<a name="l00052"></a>00052         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00149.html">tbb::parallel_while</a>&lt;Body&gt;;
+<a name="l00053"></a>00053     };
+<a name="l00054"></a>00054 
+<a name="l00056"></a>00056 
+<a name="l00058"></a>00058     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body&gt;
+<a name="l00059"></a>00059     <span class="keyword">class </span>while_group_task: <span class="keyword">public</span> task {
+<a name="l00060"></a>00060         <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;         
+<a name="l00061"></a>00061         <span class="keyword">const</span> Body&amp; my_body;
+<a name="l00062"></a>00062         size_t size;
+<a name="l00063"></a>00063         <span class="keyword">typename</span> Body::argument_type my_arg[max_arg_size];
+<a name="l00064"></a>00064         while_group_task( <span class="keyword">const</span> Body&amp; body ) : my_body(body), size(0) {} 
+<a name="l00065"></a>00065         <span class="comment">/*override*/</span> task* execute() {
+<a name="l00066"></a>00066             <span class="keyword">typedef</span> while_iteration_task&lt;Body&gt; iteration_type;
+<a name="l00067"></a>00067             __TBB_ASSERT( size&gt;0, NULL );
+<a name="l00068"></a>00068             task_list list;
+<a name="l00069"></a>00069             task* t; 
+<a name="l00070"></a>00070             size_t k=0; 
+<a name="l00071"></a>00071             <span class="keywordflow">for</span>(;;) {
+<a name="l00072"></a>00072                 t = <span class="keyword">new</span>( allocate_child() ) iteration_type(my_arg[k],my_body); 
+<a name="l00073"></a>00073                 <span class="keywordflow">if</span>( ++k==size ) <span class="keywordflow">break</span>;
+<a name="l00074"></a>00074                 list.push_back(*t);
+<a name="l00075"></a>00075             }
+<a name="l00076"></a>00076             set_ref_count(<span class="keywordtype">int</span>(k+1));
+<a name="l00077"></a>00077             spawn(list);
+<a name="l00078"></a>00078             spawn_and_wait_for_all(*t);
+<a name="l00079"></a>00079             <span class="keywordflow">return</span> NULL;
+<a name="l00080"></a>00080         }
+<a name="l00081"></a>00081         <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Stream, <span class="keyword">typename</span> Body_&gt; <span class="keyword">friend</span> <span class="keyword">class </span>while_task;
+<a name="l00082"></a>00082     };
+<a name="l00083"></a>00083     
+<a name="l00085"></a>00085 
+<a name="l00087"></a>00087     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Stream, <span class="keyword">typename</span> Body&gt;
+<a name="l00088"></a>00088     <span class="keyword">class </span>while_task: <span class="keyword">public</span> task {
+<a name="l00089"></a>00089         Stream&amp; my_stream;
+<a name="l00090"></a>00090         <span class="keyword">const</span> Body&amp; my_body;
+<a name="l00091"></a>00091         empty_task&amp; my_barrier;
+<a name="l00092"></a>00092         <span class="comment">/*override*/</span> task* execute() {
+<a name="l00093"></a>00093             <span class="keyword">typedef</span> while_group_task&lt;Body&gt; block_type;
+<a name="l00094"></a>00094             block_type&amp; t = *<span class="keyword">new</span>( allocate_additional_child_of(my_barrier) ) block_type(my_body);
+<a name="l00095"></a>00095             size_t k=0; 
+<a name="l00096"></a>00096             <span class="keywordflow">while</span>( my_stream.pop_if_present(t.my_arg[k]) ) {
+<a name="l00097"></a>00097                 <span class="keywordflow">if</span>( ++k==block_type::max_arg_size ) {
+<a name="l00098"></a>00098                     <span class="comment">// There might be more iterations.</span>
+<a name="l00099"></a>00099                     recycle_to_reexecute();
+<a name="l00100"></a>00100                     <span class="keywordflow">break</span>;
+<a name="l00101"></a>00101                 }
+<a name="l00102"></a>00102             }
+<a name="l00103"></a>00103             <span class="keywordflow">if</span>( k==0 ) {
+<a name="l00104"></a>00104                 destroy(t);
+<a name="l00105"></a>00105                 <span class="keywordflow">return</span> NULL;
+<a name="l00106"></a>00106             } <span class="keywordflow">else</span> {
+<a name="l00107"></a>00107                 t.size = k;
+<a name="l00108"></a>00108                 <span class="keywordflow">return</span> &amp;t;
+<a name="l00109"></a>00109             }
+<a name="l00110"></a>00110         }
+<a name="l00111"></a>00111         while_task( Stream&amp; stream, <span class="keyword">const</span> Body&amp; body, empty_task&amp; barrier ) : 
+<a name="l00112"></a>00112             my_stream(stream),
+<a name="l00113"></a>00113             my_body(body),
+<a name="l00114"></a>00114             my_barrier(barrier)
+<a name="l00115"></a>00115         {} 
+<a name="l00116"></a>00116         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00149.html">tbb::parallel_while</a>&lt;Body&gt;;
+<a name="l00117"></a>00117     };
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119 } <span class="comment">// namespace internal</span>
+<a name="l00121"></a>00121 <span class="comment"></span>
+<a name="l00123"></a>00123 
+<a name="l00128"></a>00128 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body&gt;
+<a name="l00129"></a><a class="code" href="a00149.html">00129</a> <span class="keyword">class </span><a class="code" href="a00149.html">parallel_while</a>: internal::no_copy {
+<a name="l00130"></a>00130 <span class="keyword">public</span>:
+<a name="l00132"></a><a class="code" href="a00149.html#36e26ba3880c7bcf804a97ba0cbe133f">00132</a>     <a class="code" href="a00149.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>() : my_body(NULL), my_barrier(NULL) {}
+<a name="l00133"></a>00133 
+<a name="l00135"></a><a class="code" href="a00149.html#6fcfc973cc56b79c6d0fbb8a31be7e84">00135</a>     <a class="code" href="a00149.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a>() {
+<a name="l00136"></a>00136         <span class="keywordflow">if</span>( my_barrier ) {
+<a name="l00137"></a>00137             my_barrier-&gt;<a class="code" href="a00166.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a>(*my_barrier);    
+<a name="l00138"></a>00138             my_barrier = NULL;
+<a name="l00139"></a>00139         }
+<a name="l00140"></a>00140     }
+<a name="l00141"></a>00141 
+<a name="l00143"></a><a class="code" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">00143</a>     <span class="keyword">typedef</span> <span class="keyword">typename</span> Body::argument_type <a class="code" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">value_type</a>;
+<a name="l00144"></a>00144 
+<a name="l00146"></a>00146 
+<a name="l00149"></a>00149     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Stream&gt;
+<a name="l00150"></a>00150     <span class="keywordtype">void</span> <a class="code" href="a00149.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a>( Stream&amp; stream, <span class="keyword">const</span> Body&amp; body );
+<a name="l00151"></a>00151 
+<a name="l00153"></a>00153 
+<a name="l00154"></a>00154     <span class="keywordtype">void</span> <a class="code" href="a00149.html#e131c560057a58229992b61eb8dba4c6">add</a>( <span class="keyword">const</span> <a class="code" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">value_type</a>&amp; item );
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156 <span class="keyword">private</span>:
+<a name="l00157"></a>00157     <span class="keyword">const</span> Body* my_body;
+<a name="l00158"></a>00158     <a class="code" href="a00137.html">empty_task</a>* my_barrier;
+<a name="l00159"></a>00159 };
+<a name="l00160"></a>00160 
+<a name="l00161"></a>00161 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body&gt;
+<a name="l00162"></a>00162 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Stream&gt;
+<a name="l00163"></a><a class="code" href="a00149.html#b32a0a6e5e09ebb7fad3e6652c19afe5">00163</a> <span class="keywordtype">void</span> <a class="code" href="a00149.html">parallel_while&lt;Body&gt;::run</a>( Stream&amp; stream, <span class="keyword">const</span> Body&amp; body ) {
+<a name="l00164"></a>00164     <span class="keyword">using namespace </span>internal;
+<a name="l00165"></a>00165     <a class="code" href="a00137.html">empty_task</a>&amp; barrier = *<span class="keyword">new</span>( <a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>() ) <a class="code" href="a00137.html">empty_task</a>();
+<a name="l00166"></a>00166     my_body = &amp;body;
+<a name="l00167"></a>00167     my_barrier = &amp;barrier;
+<a name="l00168"></a>00168     my_barrier-&gt;<a class="code" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(2);
+<a name="l00169"></a>00169     while_task&lt;Stream,Body&gt;&amp; w = *<span class="keyword">new</span>( my_barrier-&gt;<a class="code" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>() ) while_task&lt;Stream,Body&gt;( stream, body, barrier );
+<a name="l00170"></a>00170     my_barrier-&gt;<a class="code" href="a00166.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(w);
+<a name="l00171"></a>00171     my_barrier-&gt;<a class="code" href="a00166.html#a57def00c8e9d932dbea0b3ee23991b9">destroy</a>(*my_barrier);
+<a name="l00172"></a>00172     my_barrier = NULL;
+<a name="l00173"></a>00173     my_body = NULL;
+<a name="l00174"></a>00174 }
+<a name="l00175"></a>00175 
+<a name="l00176"></a>00176 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Body&gt;
+<a name="l00177"></a><a class="code" href="a00149.html#e131c560057a58229992b61eb8dba4c6">00177</a> <span class="keywordtype">void</span> <a class="code" href="a00149.html">parallel_while&lt;Body&gt;::add</a>( <span class="keyword">const</span> value_type&amp; item ) {
+<a name="l00178"></a>00178     __TBB_ASSERT(my_barrier,<span class="stringliteral">"attempt to add to parallel_while that is not running"</span>);
+<a name="l00179"></a>00179     <span class="keyword">typedef</span> internal::while_iteration_task&lt;Body&gt; iteration_type;
+<a name="l00180"></a>00180     iteration_type&amp; i = *<span class="keyword">new</span>( <a class="code" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().<a class="code" href="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">allocate_additional_child_of</a>(*my_barrier) ) iteration_type(item,*my_body);
+<a name="l00181"></a>00181     <a class="code" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().<a class="code" href="a00166.html#f7737143d458f1ed1c0d7da3971d9e6b">spawn</a>( i );
+<a name="l00182"></a>00182 }
+<a name="l00183"></a>00183 
+<a name="l00184"></a>00184 } <span class="comment">// namespace </span>
+<a name="l00185"></a>00185 
+<a name="l00186"></a>00186 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_while */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00342.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00342.html
new file mode 100644 (file)
index 0000000..aef9058
--- /dev/null
@@ -0,0 +1,232 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>partitioner.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>partitioner.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_partitioner_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_partitioner_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
+<a name="l00027"></a>00027 <span class="keyword">class </span>affinity_partitioner;
+<a name="l00028"></a>00028 
+<a name="l00030"></a>00030 <span class="keyword">namespace </span>internal {
+<a name="l00031"></a>00031 size_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();
+<a name="l00032"></a>00032 
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="keyword">class </span>affinity_partitioner_base_v3: no_copy {
+<a name="l00036"></a>00036     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00115.html">tbb::affinity_partitioner</a>;
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039     affinity_id* my_array;
+<a name="l00041"></a>00041     size_t my_size;
+<a name="l00043"></a>00043     affinity_partitioner_base_v3() : my_array(NULL), my_size(0) {}
+<a name="l00045"></a>00045     ~affinity_partitioner_base_v3() {resize(0);}
+<a name="l00047"></a>00047 
+<a name="l00048"></a>00048     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD resize( <span class="keywordtype">unsigned</span> factor );
+<a name="l00049"></a>00049     <span class="keyword">friend</span> <span class="keyword">class </span>affinity_partition_type;
+<a name="l00050"></a>00050 };
+<a name="l00051"></a>00051 
+<a name="l00053"></a>00053 <span class="keyword">class </span>partition_type_base {
+<a name="l00054"></a>00054 <span class="keyword">public</span>:
+<a name="l00055"></a>00055     <span class="keywordtype">void</span> set_affinity( task &amp; ) {}
+<a name="l00056"></a>00056     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> ) {}
+<a name="l00057"></a>00057     task* continue_after_execute_range( task&amp; ) {<span class="keywordflow">return</span> NULL;}
+<a name="l00058"></a>00058     <span class="keywordtype">bool</span> decide_whether_to_delay() {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+<a name="l00059"></a>00059     <span class="keywordtype">void</span> spawn_or_delay( <span class="keywordtype">bool</span>, task&amp; a, task&amp; b ) {
+<a name="l00060"></a>00060         a.spawn(b);
+<a name="l00061"></a>00061     }
+<a name="l00062"></a>00062 };
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064 <span class="keyword">class </span>affinity_partition_type;
+<a name="l00065"></a>00065 
+<a name="l00066"></a>00066 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt; <span class="keyword">class </span>start_for;
+<a name="l00067"></a>00067 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt; <span class="keyword">class </span>start_reduce;
+<a name="l00068"></a>00068 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt; <span class="keyword">class </span>start_reduce_with_affinity;
+<a name="l00069"></a>00069 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt; <span class="keyword">class </span>start_scan;
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071 } <span class="comment">// namespace internal</span>
+<a name="l00073"></a>00073 <span class="comment"></span>
+<a name="l00075"></a>00075 
+<a name="l00077"></a><a class="code" href="a00160.html">00077</a> <span class="keyword">class </span><a class="code" href="a00160.html">simple_partitioner</a> {
+<a name="l00078"></a>00078 <span class="keyword">public</span>:
+<a name="l00079"></a>00079     <a class="code" href="a00160.html">simple_partitioner</a>() {}
+<a name="l00080"></a>00080 <span class="keyword">private</span>:
+<a name="l00081"></a>00081     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_for;
+<a name="l00082"></a>00082     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_reduce;
+<a name="l00083"></a>00083     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_scan;
+<a name="l00084"></a>00084 
+<a name="l00085"></a>00085     <span class="keyword">class </span>partition_type: <span class="keyword">public</span> internal::partition_type_base {
+<a name="l00086"></a>00086     <span class="keyword">public</span>:
+<a name="l00087"></a>00087         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00166.html">task</a>&amp; ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+<a name="l00088"></a>00088         partition_type( <span class="keyword">const</span> <a class="code" href="a00160.html">simple_partitioner</a>&amp; ) {}
+<a name="l00089"></a>00089         partition_type( <span class="keyword">const</span> partition_type&amp;, <a class="code" href="a00165.html">split</a> ) {}
+<a name="l00090"></a>00090     };
+<a name="l00091"></a>00091 };
+<a name="l00092"></a>00092 
+<a name="l00094"></a>00094 
+<a name="l00097"></a><a class="code" href="a00120.html">00097</a> <span class="keyword">class </span><a class="code" href="a00120.html">auto_partitioner</a> {
+<a name="l00098"></a>00098 <span class="keyword">public</span>:
+<a name="l00099"></a>00099     <a class="code" href="a00120.html">auto_partitioner</a>() {}
+<a name="l00100"></a>00100 
+<a name="l00101"></a>00101 <span class="keyword">private</span>:
+<a name="l00102"></a>00102     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_for;
+<a name="l00103"></a>00103     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_reduce;
+<a name="l00104"></a>00104     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_scan;
+<a name="l00105"></a>00105 
+<a name="l00106"></a>00106     <span class="keyword">class </span>partition_type: <span class="keyword">public</span> internal::partition_type_base {
+<a name="l00107"></a>00107         size_t num_chunks;
+<a name="l00108"></a>00108         <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
+<a name="l00109"></a>00109 <span class="keyword">public</span>:
+<a name="l00110"></a>00110         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00166.html">task</a> &amp;t) {
+<a name="l00111"></a>00111             <span class="keywordflow">if</span>( num_chunks&lt;VICTIM_CHUNKS &amp;&amp; t.<a class="code" href="a00166.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() )
+<a name="l00112"></a>00112                 num_chunks = VICTIM_CHUNKS;
+<a name="l00113"></a>00113             <span class="keywordflow">return</span> num_chunks==1;
+<a name="l00114"></a>00114         }
+<a name="l00115"></a>00115         partition_type( <span class="keyword">const</span> <a class="code" href="a00120.html">auto_partitioner</a>&amp; ) : num_chunks(internal::get_initial_auto_partitioner_divisor()) {}
+<a name="l00116"></a>00116         partition_type( partition_type&amp; pt, <a class="code" href="a00165.html">split</a> ) {
+<a name="l00117"></a>00117             num_chunks = pt.num_chunks /= 2u;
+<a name="l00118"></a>00118         }
+<a name="l00119"></a>00119     };
+<a name="l00120"></a>00120 };
+<a name="l00121"></a>00121 
+<a name="l00123"></a><a class="code" href="a00115.html">00123</a> <span class="keyword">class </span><a class="code" href="a00115.html">affinity_partitioner</a>: internal::affinity_partitioner_base_v3 {
+<a name="l00124"></a>00124 <span class="keyword">public</span>:
+<a name="l00125"></a>00125     <a class="code" href="a00115.html">affinity_partitioner</a>() {}
+<a name="l00126"></a>00126 
+<a name="l00127"></a>00127 <span class="keyword">private</span>:
+<a name="l00128"></a>00128     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_for;
+<a name="l00129"></a>00129     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_reduce;
+<a name="l00130"></a>00130     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_reduce_with_affinity;
+<a name="l00131"></a>00131     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner&gt; <span class="keyword">friend</span> <span class="keyword">class </span>internal::start_scan;
+<a name="l00132"></a>00132 
+<a name="l00133"></a>00133     <span class="keyword">typedef</span> internal::affinity_partition_type partition_type;
+<a name="l00134"></a>00134     <span class="keyword">friend</span> <span class="keyword">class </span>internal::affinity_partition_type;
+<a name="l00135"></a>00135 };
+<a name="l00136"></a>00136 
+<a name="l00138"></a>00138 <span class="keyword">namespace </span>internal {
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140 <span class="keyword">class </span>affinity_partition_type: <span class="keyword">public</span> no_copy {
+<a name="l00142"></a>00142     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> factor = 16;
+<a name="l00143"></a>00143     <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
+<a name="l00144"></a>00144 
+<a name="l00145"></a>00145     internal::affinity_id* my_array;
+<a name="l00146"></a>00146     <a class="code" href="a00168.html">task_list</a> delay_list;
+<a name="l00147"></a>00147     <span class="keywordtype">unsigned</span> map_begin, map_end;
+<a name="l00148"></a>00148     size_t num_chunks;
+<a name="l00149"></a>00149 <span class="keyword">public</span>:
+<a name="l00150"></a>00150     affinity_partition_type( <a class="code" href="a00115.html">affinity_partitioner</a>&amp; ap ) {
+<a name="l00151"></a>00151         __TBB_ASSERT( (factor&amp;(factor-1))==0, <span class="stringliteral">"factor must be power of two"</span> ); 
+<a name="l00152"></a>00152         ap.resize(factor);
+<a name="l00153"></a>00153         my_array = ap.my_array;
+<a name="l00154"></a>00154         map_begin = 0;
+<a name="l00155"></a>00155         map_end = unsigned(ap.my_size);
+<a name="l00156"></a>00156         num_chunks = internal::get_initial_auto_partitioner_divisor();
+<a name="l00157"></a>00157     }
+<a name="l00158"></a>00158     affinity_partition_type(affinity_partition_type&amp; p, split) : my_array(p.my_array) {
+<a name="l00159"></a>00159         __TBB_ASSERT( p.map_end-p.map_begin&lt;factor || (p.map_end-p.map_begin)%factor==0, NULL );
+<a name="l00160"></a>00160         num_chunks = p.num_chunks /= 2;
+<a name="l00161"></a>00161         <span class="keywordtype">unsigned</span> e = p.map_end;
+<a name="l00162"></a>00162         <span class="keywordtype">unsigned</span> d = (e - p.map_begin)/2;
+<a name="l00163"></a>00163         <span class="keywordflow">if</span>( d&gt;factor ) 
+<a name="l00164"></a>00164             d &amp;= 0u-factor;
+<a name="l00165"></a>00165         map_end = e;
+<a name="l00166"></a>00166         map_begin = p.map_end = e-d;
+<a name="l00167"></a>00167     }
+<a name="l00168"></a>00168 
+<a name="l00169"></a>00169     <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> task &amp;t) {
+<a name="l00170"></a>00170         <span class="keywordflow">if</span>( num_chunks &lt; VICTIM_CHUNKS &amp;&amp; t.is_stolen_task() )
+<a name="l00171"></a>00171             num_chunks = VICTIM_CHUNKS;
+<a name="l00172"></a>00172         <span class="keywordflow">return</span> num_chunks == 1;
+<a name="l00173"></a>00173     }
+<a name="l00174"></a>00174 
+<a name="l00175"></a>00175     <span class="keywordtype">void</span> set_affinity( task &amp;t ) {
+<a name="l00176"></a>00176         <span class="keywordflow">if</span>( map_begin&lt;map_end )
+<a name="l00177"></a>00177             t.set_affinity( my_array[map_begin] );
+<a name="l00178"></a>00178     }
+<a name="l00179"></a>00179     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> <span class="keywordtype">id</span> ) {
+<a name="l00180"></a>00180         <span class="keywordflow">if</span>( map_begin&lt;map_end ) 
+<a name="l00181"></a>00181             my_array[map_begin] = id;
+<a name="l00182"></a>00182     }
+<a name="l00183"></a>00183     task* continue_after_execute_range( task&amp; t ) {
+<a name="l00184"></a>00184         task* first = NULL;
+<a name="l00185"></a>00185         <span class="keywordflow">if</span>( !delay_list.empty() ) {
+<a name="l00186"></a>00186             first = &amp;delay_list.pop_front();
+<a name="l00187"></a>00187             <span class="keywordflow">while</span>( !delay_list.empty() ) {
+<a name="l00188"></a>00188                 t.spawn(*first);
+<a name="l00189"></a>00189                 first = &amp;delay_list.pop_front();
+<a name="l00190"></a>00190             }
+<a name="l00191"></a>00191         }
+<a name="l00192"></a>00192         <span class="keywordflow">return</span> first;
+<a name="l00193"></a>00193     }
+<a name="l00194"></a>00194     <span class="keywordtype">bool</span> decide_whether_to_delay() {
+<a name="l00195"></a>00195         <span class="comment">// The possible underflow caused by "-1u" is deliberate</span>
+<a name="l00196"></a>00196         <span class="keywordflow">return</span> (map_begin&amp;(factor-1))==0 &amp;&amp; map_end-map_begin-1u&lt;factor;
+<a name="l00197"></a>00197     }
+<a name="l00198"></a>00198     <span class="keywordtype">void</span> spawn_or_delay( <span class="keywordtype">bool</span> delay, task&amp; a, task&amp; b ) {
+<a name="l00199"></a>00199         <span class="keywordflow">if</span>( delay )  
+<a name="l00200"></a>00200             delay_list.push_back(b);
+<a name="l00201"></a>00201         <span class="keywordflow">else</span> 
+<a name="l00202"></a>00202             a.spawn(b);
+<a name="l00203"></a>00203     }
+<a name="l00204"></a>00204 
+<a name="l00205"></a>00205     ~affinity_partition_type() {
+<a name="l00206"></a>00206         <span class="comment">// The delay_list can be non-empty if an exception is thrown.</span>
+<a name="l00207"></a>00207         <span class="keywordflow">while</span>( !delay_list.empty() ) {
+<a name="l00208"></a>00208             task&amp; t = delay_list.pop_front();
+<a name="l00209"></a>00209             t.destroy(t);
+<a name="l00210"></a>00210         } 
+<a name="l00211"></a>00211     }
+<a name="l00212"></a>00212 };
+<a name="l00213"></a>00213 
+<a name="l00214"></a>00214 } <span class="comment">// namespace internal</span>
+<a name="l00216"></a>00216 <span class="comment"></span>
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218 } <span class="comment">// namespace tbb</span>
+<a name="l00219"></a>00219 
+<a name="l00220"></a>00220 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_partitioner_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00347.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00347.html
new file mode 100644 (file)
index 0000000..48b1ebf
--- /dev/null
@@ -0,0 +1,237 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>pipeline.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>pipeline.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_pipeline_H </span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_pipeline_H </span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "task.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;cstddef&gt;</span>
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
+<a name="l00029"></a>00029 
+<a name="l00030"></a>00030 <span class="keyword">class </span>pipeline;
+<a name="l00031"></a>00031 <span class="keyword">class </span>filter;
+<a name="l00032"></a>00032 
+<a name="l00034"></a>00034 <span class="keyword">namespace </span>internal {
+<a name="l00035"></a>00035 
+<a name="l00036"></a>00036 <span class="comment">// The argument for PIPELINE_VERSION should be an integer between 2 and 9</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#define __TBB_PIPELINE_VERSION(x) (unsigned char)(x-2)&lt;&lt;1</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>
+<a name="l00039"></a>00039 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Token;
+<a name="l00040"></a>00040 <span class="keyword">typedef</span> <span class="keywordtype">long</span> tokendiff_t;
+<a name="l00041"></a>00041 <span class="keyword">class </span>stage_task;
+<a name="l00042"></a>00042 <span class="keyword">class </span>input_buffer;
+<a name="l00043"></a>00043 <span class="keyword">class </span>pipeline_root_task;
+<a name="l00044"></a>00044 <span class="keyword">class </span>pipeline_cleaner;
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046 } <span class="comment">// namespace internal</span>
+<a name="l00048"></a>00048 <span class="comment"></span>
+<a name="l00050"></a>00050 
+<a name="l00051"></a><a class="code" href="a00139.html">00051</a> <span class="keyword">class </span><a class="code" href="a00139.html">filter</a>: internal::no_copy {
+<a name="l00052"></a>00052 <span class="keyword">private</span>:
+<a name="l00054"></a>00054     <span class="keyword">static</span> <a class="code" href="a00139.html">filter</a>* not_in_pipeline() {<span class="keywordflow">return</span> reinterpret_cast&lt;filter*&gt;(internal::intptr(-1));}
+<a name="l00055"></a>00055     
+<a name="l00057"></a>00057     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> filter_is_serial = 0x1; 
+<a name="l00058"></a>00058 
+<a name="l00060"></a>00060 
+<a name="l00062"></a>00062     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> filter_is_out_of_order = 0x1&lt;&lt;4;  
+<a name="l00063"></a>00063 
+<a name="l00065"></a>00065     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> filter_is_bound = 0x1&lt;&lt;5;  
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> current_version = __TBB_PIPELINE_VERSION(5);
+<a name="l00068"></a>00068     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> version_mask = 0x7&lt;&lt;1; <span class="comment">// bits 1-3 are for version</span>
+<a name="l00069"></a>00069 <span class="keyword">public</span>:
+<a name="l00070"></a><a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">00070</a>     <span class="keyword">enum</span> <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> {
+<a name="l00072"></a>00072         <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a> = current_version | filter_is_out_of_order, 
+<a name="l00074"></a>00074         <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">serial_in_order</a> = current_version | filter_is_serial,
+<a name="l00076"></a>00076         <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">serial_out_of_order</a> = current_version | filter_is_serial | filter_is_out_of_order,
+<a name="l00078"></a>00078         <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> = serial_in_order
+<a name="l00079"></a>00079     };
+<a name="l00080"></a>00080 <span class="keyword">protected</span>:
+<a name="l00081"></a>00081     <a class="code" href="a00139.html">filter</a>( <span class="keywordtype">bool</span> is_serial_ ) : 
+<a name="l00082"></a>00082         next_filter_in_pipeline(not_in_pipeline()),
+<a name="l00083"></a>00083         my_input_buffer(NULL),
+<a name="l00084"></a>00084         my_filter_mode(static_cast&lt;unsigned char&gt;(is_serial_ ? <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">serial</a> : <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">parallel</a>)),
+<a name="l00085"></a>00085         prev_filter_in_pipeline(not_in_pipeline()),
+<a name="l00086"></a>00086         my_pipeline(NULL),
+<a name="l00087"></a>00087         next_segment(NULL)
+<a name="l00088"></a>00088     {}
+<a name="l00089"></a>00089     
+<a name="l00090"></a>00090     filter( <a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode ) :
+<a name="l00091"></a>00091         next_filter_in_pipeline(not_in_pipeline()),
+<a name="l00092"></a>00092         my_input_buffer(NULL),
+<a name="l00093"></a>00093         my_filter_mode(static_cast&lt;unsigned char&gt;(filter_mode)),
+<a name="l00094"></a>00094         prev_filter_in_pipeline(not_in_pipeline()),
+<a name="l00095"></a>00095         my_pipeline(NULL),
+<a name="l00096"></a>00096         next_segment(NULL)
+<a name="l00097"></a>00097     {}
+<a name="l00098"></a>00098 
+<a name="l00099"></a>00099 <span class="keyword">public</span>:
+<a name="l00101"></a><a class="code" href="a00139.html#fcfec27656a69ff2072802ac001e936f">00101</a>     <span class="keywordtype">bool</span> <a class="code" href="a00139.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>()<span class="keyword"> const </span>{
+<a name="l00102"></a>00102         <span class="keywordflow">return</span> bool( my_filter_mode &amp; filter_is_serial );
+<a name="l00103"></a>00103     }  
+<a name="l00104"></a>00104     
+<a name="l00106"></a><a class="code" href="a00139.html#cd53206c4795ef2df5df26b795caf692">00106</a>     <span class="keywordtype">bool</span> <a class="code" href="a00139.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>()<span class="keyword"> const </span>{
+<a name="l00107"></a>00107         <span class="keywordflow">return</span> (my_filter_mode &amp; (filter_is_out_of_order|filter_is_serial))==filter_is_serial;
+<a name="l00108"></a>00108     }
+<a name="l00109"></a>00109 
+<a name="l00111"></a><a class="code" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">00111</a>     <span class="keywordtype">bool</span> <a class="code" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>()<span class="keyword"> const </span>{
+<a name="l00112"></a>00112         <span class="keywordflow">return</span> ( my_filter_mode &amp; filter_is_bound )==filter_is_bound;
+<a name="l00113"></a>00113     }
+<a name="l00114"></a>00114 
+<a name="l00116"></a>00116 
+<a name="l00117"></a>00117     <span class="keyword">virtual</span> <span class="keywordtype">void</span>* <a class="code" href="a00139.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>( <span class="keywordtype">void</span>* item ) = 0;
+<a name="l00118"></a>00118 
+<a name="l00120"></a>00120 
+<a name="l00121"></a>00121     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00139.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>();
+<a name="l00122"></a>00122 
+<a name="l00123"></a>00123 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00125"></a>00125 <span class="preprocessor"></span>
+<a name="l00127"></a><a class="code" href="a00139.html#56275eb889c77c4807967133e21401bd">00127</a> <span class="preprocessor">    virtual void finalize( void* </span><span class="comment">/*item*/</span> ) {};
+<a name="l00128"></a>00128 <span class="preprocessor">#endif</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span>
+<a name="l00130"></a>00130 <span class="keyword">private</span>:
+<a name="l00132"></a>00132     <a class="code" href="a00139.html">filter</a>* next_filter_in_pipeline;
+<a name="l00133"></a>00133 
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136     internal::input_buffer* my_input_buffer;
+<a name="l00137"></a>00137 
+<a name="l00138"></a>00138     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
+<a name="l00139"></a>00139     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
+<a name="l00140"></a>00140     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00150.html">pipeline</a>;
+<a name="l00141"></a>00141     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00175.html">thread_bound_filter</a>;
+<a name="l00142"></a>00142 
+<a name="l00144"></a>00144     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> my_filter_mode;
+<a name="l00145"></a>00145 
+<a name="l00147"></a>00147     <a class="code" href="a00139.html">filter</a>* prev_filter_in_pipeline;
+<a name="l00148"></a>00148 
+<a name="l00150"></a>00150     <a class="code" href="a00150.html">pipeline</a>* my_pipeline;
+<a name="l00151"></a>00151 
+<a name="l00153"></a>00153 
+<a name="l00154"></a>00154     <a class="code" href="a00139.html">filter</a>* next_segment;
+<a name="l00155"></a>00155 };
+<a name="l00156"></a>00156 
+<a name="l00158"></a>00158 
+<a name="l00159"></a><a class="code" href="a00175.html">00159</a> <span class="keyword">class </span><a class="code" href="a00175.html">thread_bound_filter</a>: <span class="keyword">public</span> <a class="code" href="a00139.html">filter</a> {
+<a name="l00160"></a>00160 <span class="keyword">public</span>:
+<a name="l00161"></a>00161     <span class="keyword">enum</span> result_type {
+<a name="l00162"></a>00162         <span class="comment">// item was processed</span>
+<a name="l00163"></a>00163         success,
+<a name="l00164"></a>00164         <span class="comment">// item is currently not available</span>
+<a name="l00165"></a>00165         item_not_available,
+<a name="l00166"></a>00166         <span class="comment">// there are no more items to process</span>
+<a name="l00167"></a>00167         end_of_stream
+<a name="l00168"></a>00168     };
+<a name="l00169"></a>00169 <span class="keyword">protected</span>:
+<a name="l00170"></a>00170     <a class="code" href="a00175.html">thread_bound_filter</a>(<a class="code" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">mode</a> filter_mode): 
+<a name="l00171"></a>00171          <a class="code" href="a00139.html">filter</a>(static_cast&lt;mode&gt;(filter_mode | filter::filter_is_bound))
+<a name="l00172"></a>00172     {}
+<a name="l00173"></a>00173 <span class="keyword">public</span>:
+<a name="l00175"></a>00175 
+<a name="l00180"></a>00180     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00175.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>(); 
+<a name="l00181"></a>00181 
+<a name="l00183"></a>00183 
+<a name="l00187"></a>00187     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00175.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>();
+<a name="l00188"></a>00188 
+<a name="l00189"></a>00189 <span class="keyword">private</span>:
+<a name="l00191"></a>00191     result_type internal_process_item(<span class="keywordtype">bool</span> is_blocking);
+<a name="l00192"></a>00192 };
+<a name="l00193"></a>00193 
+<a name="l00195"></a>00195 
+<a name="l00196"></a><a class="code" href="a00150.html">00196</a> <span class="keyword">class </span><a class="code" href="a00150.html">pipeline</a> {
+<a name="l00197"></a>00197 <span class="keyword">public</span>:
+<a name="l00199"></a>00199     __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>();
+<a name="l00200"></a>00200 
+<a name="l00203"></a>00203     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>();
+<a name="l00204"></a>00204 
+<a name="l00206"></a>00206     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>( <a class="code" href="a00139.html">filter</a>&amp; filter_ );
+<a name="l00207"></a>00207 
+<a name="l00209"></a>00209     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#f627616049b3fe36801f37ee40403ef8">run</a>( size_t max_number_of_live_tokens );
+<a name="l00210"></a>00210 
+<a name="l00211"></a>00211 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00213"></a>00213 <span class="preprocessor">    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens, tbb::task_group_context&amp; context );</span>
+<a name="l00214"></a>00214 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00215"></a>00215 <span class="preprocessor"></span>
+<a name="l00217"></a>00217     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00150.html#2c84aef5b834b555ee220b176e25931e">clear</a>();
+<a name="l00218"></a>00218 
+<a name="l00219"></a>00219 <span class="keyword">private</span>:
+<a name="l00220"></a>00220     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
+<a name="l00221"></a>00221     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
+<a name="l00222"></a>00222     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00139.html">filter</a>;
+<a name="l00223"></a>00223     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00175.html">thread_bound_filter</a>;
+<a name="l00224"></a>00224     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_cleaner;
+<a name="l00225"></a>00225 
+<a name="l00227"></a>00227     <a class="code" href="a00139.html">filter</a>* filter_list;
+<a name="l00228"></a>00228 
+<a name="l00230"></a>00230     <a class="code" href="a00139.html">filter</a>* filter_end;
+<a name="l00231"></a>00231 
+<a name="l00233"></a>00233     <a class="code" href="a00166.html">task</a>* end_counter;
+<a name="l00234"></a>00234 
+<a name="l00236"></a>00236     <a class="code" href="a00117.html">atomic&lt;internal::Token&gt;</a> input_tokens;
+<a name="l00237"></a>00237 
+<a name="l00239"></a>00239     <a class="code" href="a00117.html">atomic&lt;internal::Token&gt;</a> token_counter;
+<a name="l00240"></a>00240 
+<a name="l00242"></a>00242     <span class="keywordtype">bool</span> end_of_input;
+<a name="l00243"></a>00243 
+<a name="l00245"></a>00245     <span class="keywordtype">bool</span> has_thread_bound_filters;
+<a name="l00246"></a>00246 
+<a name="l00248"></a>00248     <span class="keywordtype">void</span> remove_filter( <a class="code" href="a00139.html">filter</a>&amp; filter_ );
+<a name="l00249"></a>00249 
+<a name="l00251"></a>00251     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD inject_token( <a class="code" href="a00166.html">task</a>&amp; <span class="keyword">self</span> );
+<a name="l00252"></a>00252 
+<a name="l00253"></a>00253 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00255"></a>00255 <span class="preprocessor">    void clear_filters();</span>
+<a name="l00256"></a>00256 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00257"></a>00257 <span class="preprocessor"></span>};
+<a name="l00258"></a>00258 
+<a name="l00259"></a>00259 } <span class="comment">// tbb</span>
+<a name="l00260"></a>00260 
+<a name="l00261"></a>00261 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_pipeline_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00348.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00348.html
new file mode 100644 (file)
index 0000000..231211e
--- /dev/null
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>queuing_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>queuing_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_queuing_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_queuing_mutex_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;cstring&gt;</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
+<a name="l00029"></a>00029 
+<a name="l00031"></a>00031 
+<a name="l00032"></a><a class="code" href="a00152.html">00032</a> <span class="keyword">class </span><a class="code" href="a00152.html">queuing_mutex</a> {
+<a name="l00033"></a>00033 <span class="keyword">public</span>:
+<a name="l00035"></a><a class="code" href="a00152.html#b389ad9c4db7293e4bdb5b8cda69ec04">00035</a>     <a class="code" href="a00152.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a>() {
+<a name="l00036"></a>00036         q_tail = NULL;
+<a name="l00037"></a>00037 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>        internal_construct();
+<a name="l00039"></a>00039 <span class="preprocessor">#endif</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span>    }
+<a name="l00041"></a>00041 
+<a name="l00043"></a>00043 
+<a name="l00045"></a><a class="code" href="a00153.html">00045</a>     <span class="keyword">class </span><a class="code" href="a00153.html">scoped_lock</a>: internal::no_copy {
+<a name="l00047"></a>00047         <span class="keywordtype">void</span> initialize() {
+<a name="l00048"></a>00048             <a class="code" href="a00142.html">mutex</a> = NULL;
+<a name="l00049"></a>00049 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span>            internal::poison_pointer(next);
+<a name="l00051"></a>00051 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00052"></a>00052         }
+<a name="l00053"></a>00053     <span class="keyword">public</span>:
+<a name="l00055"></a>00055 
+<a name="l00056"></a><a class="code" href="a00153.html#db0fa3967491014572e24d6607bdc971">00056</a>         <a class="code" href="a00153.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>() {initialize();}
+<a name="l00057"></a>00057 
+<a name="l00059"></a>00059 
+<a name="l00060"></a><a class="code" href="a00153.html#9b51ef972f5618ac17caadb58841ab6d">00060</a>         <a class="code" href="a00153.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>( <a class="code" href="a00152.html">queuing_mutex</a>&amp; m ) {
+<a name="l00061"></a>00061             initialize();
+<a name="l00062"></a>00062             <a class="code" href="a00153.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(m);
+<a name="l00063"></a>00063         }
+<a name="l00064"></a>00064 
+<a name="l00066"></a><a class="code" href="a00153.html#ac2c576a93570957d694192a5f491443">00066</a>         <a class="code" href="a00153.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>() {
+<a name="l00067"></a>00067             <span class="keywordflow">if</span>( <a class="code" href="a00142.html">mutex</a> ) <a class="code" href="a00153.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>();
+<a name="l00068"></a>00068         }
+<a name="l00069"></a>00069 
+<a name="l00071"></a>00071         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00153.html#533e4fc8355ee321206a0609c42d909d">acquire</a>( <a class="code" href="a00152.html">queuing_mutex</a>&amp; m );
+<a name="l00072"></a>00072 
+<a name="l00074"></a>00074         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00153.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>( <a class="code" href="a00152.html">queuing_mutex</a>&amp; m );
+<a name="l00075"></a>00075 
+<a name="l00077"></a>00077         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00153.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>();
+<a name="l00078"></a>00078 
+<a name="l00079"></a>00079     <span class="keyword">private</span>:
+<a name="l00081"></a>00081         <a class="code" href="a00152.html">queuing_mutex</a>* <a class="code" href="a00142.html">mutex</a>;
+<a name="l00082"></a>00082 
+<a name="l00084"></a>00084         <a class="code" href="a00153.html">scoped_lock</a> *next;
+<a name="l00085"></a>00085 
+<a name="l00087"></a>00087 
+<a name="l00090"></a>00090         internal::uintptr going;
+<a name="l00091"></a>00091     };
+<a name="l00092"></a>00092 
+<a name="l00093"></a>00093     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00094"></a>00094 
+<a name="l00095"></a>00095     <span class="comment">// Mutex traits</span>
+<a name="l00096"></a>00096     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
+<a name="l00097"></a>00097     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
+<a name="l00098"></a>00098     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
+<a name="l00099"></a>00099 
+<a name="l00100"></a>00100     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
+<a name="l00101"></a>00101 <span class="keyword">private</span>:
+<a name="l00103"></a>00103     <a class="code" href="a00117.html">atomic&lt;scoped_lock*&gt;</a> q_tail;
+<a name="l00104"></a>00104 
+<a name="l00105"></a>00105 };
+<a name="l00106"></a>00106 
+<a name="l00107"></a>00107 __TBB_DEFINE_PROFILING_SET_NAME(queuing_mutex)
+<a name="l00108"></a>00108 
+<a name="l00109"></a>00109 } <span class="comment">// namespace tbb</span>
+<a name="l00110"></a>00110 
+<a name="l00111"></a>00111 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_queuing_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00349.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00349.html
new file mode 100644 (file)
index 0000000..0192598
--- /dev/null
@@ -0,0 +1,156 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>queuing_rw_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>queuing_rw_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_queuing_rw_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_queuing_rw_mutex_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;cstring&gt;</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
+<a name="l00029"></a>00029 
+<a name="l00031"></a>00031 
+<a name="l00034"></a><a class="code" href="a00154.html">00034</a> <span class="keyword">class </span><a class="code" href="a00154.html">queuing_rw_mutex</a> {
+<a name="l00035"></a>00035 <span class="keyword">public</span>:
+<a name="l00037"></a><a class="code" href="a00154.html#85c90877c3447690ac4e2ac4ff8dea5e">00037</a>     <a class="code" href="a00154.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a>() {
+<a name="l00038"></a>00038         q_tail = NULL;
+<a name="l00039"></a>00039 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span>        internal_construct();
+<a name="l00041"></a>00041 <span class="preprocessor">#endif</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>    }
+<a name="l00043"></a>00043 
+<a name="l00045"></a><a class="code" href="a00154.html#1ba73e3d95cfdf8323880bc623af9099">00045</a>     <a class="code" href="a00154.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a>() {
+<a name="l00046"></a>00046 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span>        __TBB_ASSERT( !q_tail, <span class="stringliteral">"destruction of an acquired mutex"</span>);
+<a name="l00048"></a>00048 <span class="preprocessor">#endif</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>    }
+<a name="l00050"></a>00050 
+<a name="l00051"></a>00051     <span class="keyword">class </span>scoped_lock;
+<a name="l00052"></a>00052     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
+<a name="l00053"></a>00053 
+<a name="l00055"></a>00055 
+<a name="l00057"></a><a class="code" href="a00155.html">00057</a>     <span class="keyword">class </span><a class="code" href="a00155.html">scoped_lock</a>: internal::no_copy {
+<a name="l00059"></a>00059         <span class="keywordtype">void</span> initialize() {
+<a name="l00060"></a>00060             <a class="code" href="a00142.html">mutex</a> = NULL;
+<a name="l00061"></a>00061 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span>            state = 0xFF; <span class="comment">// Set to invalid state</span>
+<a name="l00063"></a>00063             internal::poison_pointer(next);
+<a name="l00064"></a>00064             internal::poison_pointer(prev);
+<a name="l00065"></a>00065 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00066"></a>00066         }
+<a name="l00067"></a>00067     <span class="keyword">public</span>:
+<a name="l00069"></a>00069 
+<a name="l00070"></a><a class="code" href="a00155.html#c62e365be7bcbba091c9ea7454a4d22c">00070</a>         <a class="code" href="a00155.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>() {initialize();}
+<a name="l00071"></a>00071 
+<a name="l00073"></a>00073 
+<a name="l00074"></a><a class="code" href="a00155.html#fbb8798792d3aebb136c46fc63d2529e">00074</a>         <a class="code" href="a00155.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>( <a class="code" href="a00154.html">queuing_rw_mutex</a>&amp; m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> ) {
+<a name="l00075"></a>00075             initialize();
+<a name="l00076"></a>00076             <a class="code" href="a00155.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(m,write);
+<a name="l00077"></a>00077         }
+<a name="l00078"></a>00078 
+<a name="l00080"></a><a class="code" href="a00155.html#32c7d67a660d23ebbaab1a1d2826d31a">00080</a>         <a class="code" href="a00155.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>() {
+<a name="l00081"></a>00081             <span class="keywordflow">if</span>( <a class="code" href="a00142.html">mutex</a> ) <a class="code" href="a00155.html#67ae221109ddc69510ab593874e435d4">release</a>();
+<a name="l00082"></a>00082         }
+<a name="l00083"></a>00083 
+<a name="l00085"></a>00085         <span class="keywordtype">void</span> <a class="code" href="a00155.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>( <a class="code" href="a00154.html">queuing_rw_mutex</a>&amp; m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
+<a name="l00086"></a>00086 
+<a name="l00088"></a>00088         <span class="keywordtype">bool</span> <a class="code" href="a00155.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>( <a class="code" href="a00154.html">queuing_rw_mutex</a>&amp; m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
+<a name="l00089"></a>00089 
+<a name="l00091"></a>00091         <span class="keywordtype">void</span> <a class="code" href="a00155.html#67ae221109ddc69510ab593874e435d4">release</a>();
+<a name="l00092"></a>00092 
+<a name="l00094"></a>00094 
+<a name="l00095"></a>00095         <span class="keywordtype">bool</span> <a class="code" href="a00155.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a>();
+<a name="l00096"></a>00096 
+<a name="l00098"></a>00098         <span class="keywordtype">bool</span> <a class="code" href="a00155.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a>();
+<a name="l00099"></a>00099 
+<a name="l00100"></a>00100     <span class="keyword">private</span>:
+<a name="l00102"></a>00102         <a class="code" href="a00154.html">queuing_rw_mutex</a>* <a class="code" href="a00142.html">mutex</a>;
+<a name="l00103"></a>00103 
+<a name="l00105"></a>00105         <a class="code" href="a00155.html">scoped_lock</a> * prev, * next;
+<a name="l00106"></a>00106 
+<a name="l00107"></a>00107         <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> state_t;
+<a name="l00108"></a>00108 
+<a name="l00110"></a>00110         <a class="code" href="a00117.html">atomic&lt;state_t&gt;</a> state;
+<a name="l00111"></a>00111 
+<a name="l00113"></a>00113 
+<a name="l00114"></a>00114         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> going;
+<a name="l00115"></a>00115 
+<a name="l00117"></a>00117         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> internal_lock;
+<a name="l00118"></a>00118 
+<a name="l00120"></a>00120         <span class="keywordtype">void</span> acquire_internal_lock();
+<a name="l00121"></a>00121 
+<a name="l00123"></a>00123 
+<a name="l00124"></a>00124         <span class="keywordtype">bool</span> try_acquire_internal_lock();
+<a name="l00125"></a>00125 
+<a name="l00127"></a>00127         <span class="keywordtype">void</span> release_internal_lock();
+<a name="l00128"></a>00128 
+<a name="l00130"></a>00130         <span class="keywordtype">void</span> wait_for_release_of_internal_lock();
+<a name="l00131"></a>00131 
+<a name="l00133"></a>00133         <span class="keywordtype">void</span> unblock_or_wait_on_internal_lock( uintptr_t );
+<a name="l00134"></a>00134     };
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00137"></a>00137 
+<a name="l00138"></a>00138     <span class="comment">// Mutex traits</span>
+<a name="l00139"></a>00139     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">true</span>;
+<a name="l00140"></a>00140     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
+<a name="l00141"></a>00141     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
+<a name="l00142"></a>00142 
+<a name="l00143"></a>00143 <span class="keyword">private</span>:
+<a name="l00145"></a>00145     <a class="code" href="a00117.html">atomic&lt;scoped_lock*&gt;</a> q_tail;
+<a name="l00146"></a>00146 
+<a name="l00147"></a>00147 };
+<a name="l00148"></a>00148 
+<a name="l00149"></a>00149 __TBB_DEFINE_PROFILING_SET_NAME(queuing_rw_mutex)
+<a name="l00150"></a>00150 
+<a name="l00151"></a>00151 } <span class="comment">// namespace tbb</span>
+<a name="l00152"></a>00152 
+<a name="l00153"></a>00153 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_queuing_rw_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00350.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00350.html
new file mode 100644 (file)
index 0000000..20b0b3f
--- /dev/null
@@ -0,0 +1,247 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>recursive_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>recursive_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_recursive_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_recursive_mutex_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;windows.h&gt;</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#if !defined(_WIN32_WINNT)</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">// The following Windows API function is declared explicitly;</span>
+<a name="l00029"></a>00029 <span class="comment">// otherwise any user would have to specify /D_WIN32_WINNT=0x0400</span>
+<a name="l00030"></a>00030 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
+<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span>
+<a name="l00033"></a>00033 <span class="preprocessor">#else </span><span class="comment">/* if not _WIN32||_WIN64 */</span>
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;pthread.h&gt;</span>
+<a name="l00036"></a>00036 <span class="keyword">namespace </span>tbb { <span class="keyword">namespace </span>internal {
+<a name="l00037"></a>00037 <span class="comment">// Use this internal TBB function to throw an exception</span>
+<a name="l00038"></a>00038   <span class="keyword">extern</span> <span class="keywordtype">void</span> handle_perror( <span class="keywordtype">int</span> error_code, <span class="keyword">const</span> <span class="keywordtype">char</span>* what );
+<a name="l00039"></a>00039 } } <span class="comment">//namespaces</span>
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043 <span class="preprocessor">#include &lt;new&gt;</span>
+<a name="l00044"></a>00044 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00045"></a>00045 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00047"></a>00047 
+<a name="l00048"></a>00048 <span class="keyword">namespace </span>tbb {
+<a name="l00050"></a>00050 
+<a name="l00052"></a><a class="code" href="a00156.html">00052</a> <span class="keyword">class </span><a class="code" href="a00156.html">recursive_mutex</a> {
+<a name="l00053"></a>00053 <span class="keyword">public</span>:
+<a name="l00055"></a><a class="code" href="a00156.html#d2fceb7f95c24a8cd1457d4527e4b8c6">00055</a>     <a class="code" href="a00156.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a>() {
+<a name="l00056"></a>00056 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>        internal_construct();
+<a name="l00058"></a>00058 <span class="preprocessor">#else</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span>        InitializeCriticalSection(&amp;impl);
+<a name="l00061"></a>00061 <span class="preprocessor">  #else</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span>        pthread_mutexattr_t mtx_attr;
+<a name="l00063"></a>00063         <span class="keywordtype">int</span> error_code = pthread_mutexattr_init( &amp;mtx_attr );
+<a name="l00064"></a>00064         <span class="keywordflow">if</span>( error_code )
+<a name="l00065"></a>00065             tbb::internal::handle_perror(error_code,<span class="stringliteral">"recursive_mutex: pthread_mutexattr_init failed"</span>);
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067         pthread_mutexattr_settype( &amp;mtx_attr, PTHREAD_MUTEX_RECURSIVE );
+<a name="l00068"></a>00068         error_code = pthread_mutex_init( &amp;impl, &amp;mtx_attr );
+<a name="l00069"></a>00069         <span class="keywordflow">if</span>( error_code )
+<a name="l00070"></a>00070             tbb::internal::handle_perror(error_code,<span class="stringliteral">"recursive_mutex: pthread_mutex_init failed"</span>);
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072         pthread_mutexattr_destroy( &amp;mtx_attr );
+<a name="l00073"></a>00073 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
+<a name="l00074"></a>00074 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00075"></a>00075     };
+<a name="l00076"></a>00076 
+<a name="l00077"></a>00077     ~<a class="code" href="a00156.html">recursive_mutex</a>() {
+<a name="l00078"></a>00078 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span>        internal_destroy();
+<a name="l00080"></a>00080 <span class="preprocessor">#else</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span>        DeleteCriticalSection(&amp;impl);
+<a name="l00083"></a>00083 <span class="preprocessor">  #else</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span>        pthread_mutex_destroy(&amp;impl); 
+<a name="l00085"></a>00085 
+<a name="l00086"></a>00086 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00087"></a>00087 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00088"></a>00088     };
+<a name="l00089"></a>00089 
+<a name="l00090"></a>00090     <span class="keyword">class </span>scoped_lock;
+<a name="l00091"></a>00091     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
+<a name="l00092"></a>00092 
+<a name="l00094"></a>00094 
+<a name="l00096"></a><a class="code" href="a00157.html">00096</a>     <span class="keyword">class </span><a class="code" href="a00157.html">scoped_lock</a>: internal::no_copy {
+<a name="l00097"></a>00097     <span class="keyword">public</span>:
+<a name="l00099"></a><a class="code" href="a00157.html#d82d4d36fbf9727a493d26ae50855fe7">00099</a>         <a class="code" href="a00157.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>() : my_mutex(NULL) {};
+<a name="l00100"></a>00100 
+<a name="l00102"></a><a class="code" href="a00157.html#dec17713c4c1321ac8fec66816d0c602">00102</a>         <a class="code" href="a00157.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>( <a class="code" href="a00156.html">recursive_mutex</a>&amp; <a class="code" href="a00142.html">mutex</a> ) {
+<a name="l00103"></a>00103 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00104"></a>00104 <span class="preprocessor"></span>            my_mutex = &amp;mutex; 
+<a name="l00105"></a>00105 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00106"></a>00106             <a class="code" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( mutex );
+<a name="l00107"></a>00107         }
+<a name="l00108"></a>00108 
+<a name="l00110"></a><a class="code" href="a00157.html#c1197ffb8f3cd9d4fed71d7e06265b7c">00110</a>         <a class="code" href="a00157.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a>() {
+<a name="l00111"></a>00111             <span class="keywordflow">if</span>( my_mutex ) 
+<a name="l00112"></a>00112                 <a class="code" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>();
+<a name="l00113"></a>00113         }
+<a name="l00114"></a>00114 
+<a name="l00116"></a><a class="code" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">00116</a>         <span class="keywordtype">void</span> <a class="code" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( <a class="code" href="a00156.html">recursive_mutex</a>&amp; <a class="code" href="a00142.html">mutex</a> ) {
+<a name="l00117"></a>00117 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span>            internal_acquire( mutex );
+<a name="l00119"></a>00119 <span class="preprocessor">#else</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span>            my_mutex = &amp;mutex;
+<a name="l00121"></a>00121             mutex.<a class="code" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>();
+<a name="l00122"></a>00122 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00123"></a>00123         }
+<a name="l00124"></a>00124 
+<a name="l00126"></a><a class="code" href="a00157.html#36bfc3e93e3ef6340abef4901444d340">00126</a>         <span class="keywordtype">bool</span> <a class="code" href="a00157.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>( <a class="code" href="a00156.html">recursive_mutex</a>&amp; <a class="code" href="a00142.html">mutex</a> ) {
+<a name="l00127"></a>00127 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire( mutex );
+<a name="l00129"></a>00129 <span class="preprocessor">#else</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = mutex.<a class="code" href="a00156.html#86e719b0afee25704af11ab97694d240">try_lock</a>();
+<a name="l00131"></a>00131             <span class="keywordflow">if</span>( result )
+<a name="l00132"></a>00132                 my_mutex = &amp;mutex;
+<a name="l00133"></a>00133             <span class="keywordflow">return</span> result;
+<a name="l00134"></a>00134 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00135"></a>00135         }
+<a name="l00136"></a>00136 
+<a name="l00138"></a><a class="code" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">00138</a>         <span class="keywordtype">void</span> <a class="code" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>() {
+<a name="l00139"></a>00139 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span>            internal_release();
+<a name="l00141"></a>00141 <span class="preprocessor">#else</span>
+<a name="l00142"></a>00142 <span class="preprocessor"></span>            my_mutex-&gt;<a class="code" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>();
+<a name="l00143"></a>00143             my_mutex = NULL;
+<a name="l00144"></a>00144 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00145"></a>00145         }
+<a name="l00146"></a>00146 
+<a name="l00147"></a>00147     <span class="keyword">private</span>:
+<a name="l00149"></a>00149         <a class="code" href="a00156.html">recursive_mutex</a>* my_mutex;
+<a name="l00150"></a>00150 
+<a name="l00152"></a>00152         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00156.html">recursive_mutex</a>&amp; m );
+<a name="l00153"></a>00153 
+<a name="l00155"></a>00155         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00156.html">recursive_mutex</a>&amp; m );
+<a name="l00156"></a>00156 
+<a name="l00158"></a>00158         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
+<a name="l00159"></a>00159 
+<a name="l00160"></a>00160         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00156.html">recursive_mutex</a>;
+<a name="l00161"></a>00161     };
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163     <span class="comment">// Mutex traits</span>
+<a name="l00164"></a>00164     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
+<a name="l00165"></a>00165     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">true</span>;
+<a name="l00166"></a>00166     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">false</span>;
+<a name="l00167"></a>00167 
+<a name="l00168"></a>00168     <span class="comment">// C++0x compatibility interface</span>
+<a name="l00169"></a>00169     
+<a name="l00171"></a><a class="code" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">00171</a>     <span class="keywordtype">void</span> <a class="code" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>() {
+<a name="l00172"></a>00172 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00173"></a>00173 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space&lt;scoped_lock,1&gt;</a> tmp;
+<a name="l00174"></a>00174         <span class="keyword">new</span>(tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00157.html">scoped_lock</a>(*<span class="keyword">this</span>);
+<a name="l00175"></a>00175 <span class="preprocessor">#else</span>
+<a name="l00176"></a>00176 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00177"></a>00177 <span class="preprocessor"></span>        EnterCriticalSection(&amp;impl);
+<a name="l00178"></a>00178 <span class="preprocessor">  #else</span>
+<a name="l00179"></a>00179 <span class="preprocessor"></span>        pthread_mutex_lock(&amp;impl);
+<a name="l00180"></a>00180 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00181"></a>00181 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00182"></a>00182     }
+<a name="l00183"></a>00183 
+<a name="l00185"></a>00185 
+<a name="l00186"></a><a class="code" href="a00156.html#86e719b0afee25704af11ab97694d240">00186</a>     <span class="keywordtype">bool</span> <a class="code" href="a00156.html#86e719b0afee25704af11ab97694d240">try_lock</a>() {
+<a name="l00187"></a>00187 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00188"></a>00188 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space&lt;scoped_lock,1&gt;</a> tmp;
+<a name="l00189"></a>00189         <span class="keywordflow">return</span> (<span class="keyword">new</span>(tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00157.html">scoped_lock</a>)-&gt;internal_try_acquire(*<span class="keyword">this</span>);
+<a name="l00190"></a>00190 <span class="preprocessor">#else        </span>
+<a name="l00191"></a>00191 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00192"></a>00192 <span class="preprocessor"></span>        <span class="keywordflow">return</span> TryEnterCriticalSection(&amp;impl)!=0;
+<a name="l00193"></a>00193 <span class="preprocessor">  #else</span>
+<a name="l00194"></a>00194 <span class="preprocessor"></span>        <span class="keywordflow">return</span> pthread_mutex_trylock(&amp;impl)==0;
+<a name="l00195"></a>00195 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00196"></a>00196 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00197"></a>00197     }
+<a name="l00198"></a>00198 
+<a name="l00200"></a><a class="code" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">00200</a>     <span class="keywordtype">void</span> <a class="code" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>() {
+<a name="l00201"></a>00201 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00202"></a>00202 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space&lt;scoped_lock,1&gt;</a> tmp;
+<a name="l00203"></a>00203         <a class="code" href="a00157.html">scoped_lock</a>&amp; s = *tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00204"></a>00204         s.<a class="code" href="a00157.html#3efd10a49e2435ea5215b49907f93ba2">my_mutex</a> = <span class="keyword">this</span>;
+<a name="l00205"></a>00205         s.<a class="code" href="a00157.html#43ed37cec508072e53a52113c8040137">internal_release</a>();
+<a name="l00206"></a>00206 <span class="preprocessor">#else</span>
+<a name="l00207"></a>00207 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00208"></a>00208 <span class="preprocessor"></span>        LeaveCriticalSection(&amp;impl);
+<a name="l00209"></a>00209 <span class="preprocessor">  #else</span>
+<a name="l00210"></a>00210 <span class="preprocessor"></span>        pthread_mutex_unlock(&amp;impl);
+<a name="l00211"></a>00211 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00212"></a>00212 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00213"></a>00213     }
+<a name="l00214"></a>00214 
+<a name="l00215"></a>00215 <span class="keyword">private</span>:
+<a name="l00216"></a>00216 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00217"></a>00217 <span class="preprocessor"></span>    CRITICAL_SECTION impl;
+<a name="l00218"></a>00218     <span class="keyword">enum</span> state_t {
+<a name="l00219"></a>00219         INITIALIZED=0x1234,
+<a name="l00220"></a>00220         DESTROYED=0x789A,
+<a name="l00221"></a>00221     } state;
+<a name="l00222"></a>00222 <span class="preprocessor">#else</span>
+<a name="l00223"></a>00223 <span class="preprocessor"></span>    pthread_mutex_t impl;
+<a name="l00224"></a>00224 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00225"></a>00225 
+<a name="l00227"></a>00227     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00228"></a>00228 
+<a name="l00230"></a>00230     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
+<a name="l00231"></a>00231 };
+<a name="l00232"></a>00232 
+<a name="l00233"></a>00233 __TBB_DEFINE_PROFILING_SET_NAME(recursive_mutex)
+<a name="l00234"></a>00234 
+<a name="l00235"></a>00235 } <span class="comment">// namespace tbb </span>
+<a name="l00236"></a>00236 
+<a name="l00237"></a>00237 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_recursive_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00351.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00351.html
new file mode 100644 (file)
index 0000000..9ac20c5
--- /dev/null
@@ -0,0 +1,197 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>scalable_allocator.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>scalable_allocator.h</h1><a href="a00210.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_scalable_allocator_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_scalable_allocator_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;stddef.h&gt;</span> <span class="comment">/* Need ptrdiff_t and size_t from here. */</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="preprocessor">#if !defined(__cplusplus) &amp;&amp; __ICC==1100</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 991)</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a>00032 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00034"></a>00034 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
+<a name="l00035"></a>00035 
+<a name="l00036"></a>00036 <span class="preprocessor">#if _MSC_VER &gt;= 1400</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC   __cdecl</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a> (size_t size);
+<a name="l00045"></a>00045 
+<a name="l00048"></a>00048 <span class="keywordtype">void</span>   __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00049"></a>00049 
+<a name="l00052"></a>00052 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size);
+<a name="l00053"></a>00053 
+<a name="l00056"></a>00056 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, size_t size);
+<a name="l00057"></a>00057 
+<a name="l00060"></a>00060 <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (<span class="keywordtype">void</span>** memptr, size_t alignment, size_t size);
+<a name="l00061"></a>00061 
+<a name="l00064"></a>00064 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_aligned_malloc</a> (size_t size, size_t alignment);
+<a name="l00065"></a>00065 
+<a name="l00068"></a>00068 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_aligned_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size, size_t alignment);
+<a name="l00069"></a>00069 
+<a name="l00072"></a>00072 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00235.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00073"></a>00073 
+<a name="l00074"></a>00074 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span>} <span class="comment">/* extern "C" */</span>
+<a name="l00076"></a>00076 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
+<a name="l00077"></a>00077 
+<a name="l00078"></a>00078 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span>
+<a name="l00080"></a>00080 <span class="preprocessor">#include &lt;new&gt;</span>      <span class="comment">/* To use new with the placement argument */</span>
+<a name="l00081"></a>00081 
+<a name="l00082"></a>00082 <span class="comment">/* Ensure that including this header does not cause implicit linkage with TBB */</span>
+<a name="l00083"></a>00083 <span class="preprocessor">#ifndef __TBB_NO_IMPLICIT_LINKAGE</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="preprocessor">    #include "tbb_stddef.h"</span>
+<a name="l00086"></a>00086 <span class="preprocessor">    #undef  __TBB_NO_IMPLICIT_LINKAGE</span>
+<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">    #include "tbb_stddef.h"</span>
+<a name="l00089"></a>00089 <span class="preprocessor">#endif</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span>
+<a name="l00091"></a>00091 
+<a name="l00092"></a>00092 <span class="keyword">namespace </span>tbb {
+<a name="l00093"></a>00093 
+<a name="l00094"></a>00094 <span class="preprocessor">#if _MSC_VER &amp;&amp; !defined(__INTEL_COMPILER)</span>
+<a name="l00095"></a>00095 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
+<a name="l00096"></a>00096 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
+<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00099"></a>00099 <span class="preprocessor"></span>
+<a name="l00101"></a>00101 
+<a name="l00104"></a>00104 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00105"></a><a class="code" href="a00158.html">00105</a> <span class="keyword">class </span><a class="code" href="a00158.html">scalable_allocator</a> {
+<a name="l00106"></a>00106 <span class="keyword">public</span>:
+<a name="l00107"></a>00107     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type&lt;T&gt;::value_type value_type;
+<a name="l00108"></a>00108     <span class="keyword">typedef</span> value_type* pointer;
+<a name="l00109"></a>00109     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
+<a name="l00110"></a>00110     <span class="keyword">typedef</span> value_type&amp; reference;
+<a name="l00111"></a>00111     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type&amp; const_reference;
+<a name="l00112"></a>00112     <span class="keyword">typedef</span> size_t size_type;
+<a name="l00113"></a>00113     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00114"></a>00114     <span class="keyword">template</span>&lt;<span class="keyword">class</span> U&gt; <span class="keyword">struct </span>rebind {
+<a name="l00115"></a>00115         <span class="keyword">typedef</span> <a class="code" href="a00158.html">scalable_allocator&lt;U&gt;</a> other;
+<a name="l00116"></a>00116     };
+<a name="l00117"></a>00117 
+<a name="l00118"></a>00118     <a class="code" href="a00158.html">scalable_allocator</a>() <span class="keywordflow">throw</span>() {}
+<a name="l00119"></a>00119     <a class="code" href="a00158.html">scalable_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00158.html">scalable_allocator</a>&amp; ) <span class="keywordflow">throw</span>() {}
+<a name="l00120"></a>00120     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt; <a class="code" href="a00158.html">scalable_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00158.html">scalable_allocator&lt;U&gt;</a>&amp;) <span class="keywordflow">throw</span>() {}
+<a name="l00121"></a>00121 
+<a name="l00122"></a>00122     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &amp;x;}
+<a name="l00123"></a>00123     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &amp;x;}
+<a name="l00124"></a>00124 
+<a name="l00126"></a><a class="code" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">00126</a>     pointer <a class="code" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> =0 ) {
+<a name="l00127"></a>00127         <span class="keywordflow">return</span> static_cast&lt;pointer&gt;( <a class="code" href="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a>( n * <span class="keyword">sizeof</span>(value_type) ) );
+<a name="l00128"></a>00128     }
+<a name="l00129"></a>00129 
+<a name="l00131"></a><a class="code" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">00131</a>     <span class="keywordtype">void</span> <a class="code" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>( pointer p, size_type ) {
+<a name="l00132"></a>00132         <a class="code" href="a00235.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a>( p );
+<a name="l00133"></a>00133     }
+<a name="l00134"></a>00134 
+<a name="l00136"></a><a class="code" href="a00158.html#880e766f1d913988c21973dbdd874fd5">00136</a>     size_type <a class="code" href="a00158.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const throw() {
+<a name="l00137"></a>00137         size_type absolutemax = static_cast&lt;size_type&gt;(-1) / <span class="keyword">sizeof</span> (value_type);
+<a name="l00138"></a>00138         <span class="keywordflow">return</span> (absolutemax &gt; 0 ? absolutemax : 1);
+<a name="l00139"></a>00139     }
+<a name="l00140"></a>00140     <span class="keywordtype">void</span> construct( pointer p, <span class="keyword">const</span> value_type&amp; val ) { <span class="keyword">new</span>(static_cast&lt;void*&gt;(p)) value_type(val); }
+<a name="l00141"></a>00141     <span class="keywordtype">void</span> destroy( pointer p ) {p-&gt;~value_type();}
+<a name="l00142"></a>00142 };
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144 <span class="preprocessor">#if _MSC_VER &amp;&amp; !defined(__INTEL_COMPILER)</span>
+<a name="l00145"></a>00145 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00146"></a>00146 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
+<a name="l00147"></a>00147 <span class="preprocessor"></span>
+<a name="l00149"></a>00149 
+<a name="l00150"></a>00150 <span class="keyword">template</span>&lt;&gt;
+<a name="l00151"></a><a class="code" href="a00159.html">00151</a> <span class="keyword">class </span><a class="code" href="a00158.html">scalable_allocator</a>&lt;void&gt; {
+<a name="l00152"></a>00152 <span class="keyword">public</span>:
+<a name="l00153"></a>00153     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
+<a name="l00154"></a>00154     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
+<a name="l00155"></a>00155     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
+<a name="l00156"></a>00156     <span class="keyword">template</span>&lt;<span class="keyword">class</span> U&gt; <span class="keyword">struct </span>rebind {
+<a name="l00157"></a>00157         <span class="keyword">typedef</span> <a class="code" href="a00158.html">scalable_allocator&lt;U&gt;</a> other;
+<a name="l00158"></a>00158     };
+<a name="l00159"></a>00159 };
+<a name="l00160"></a>00160 
+<a name="l00161"></a>00161 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00162"></a>00162 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00158.html">scalable_allocator&lt;T&gt;</a>&amp;, <span class="keyword">const</span> <a class="code" href="a00158.html">scalable_allocator&lt;U&gt;</a>&amp; ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+<a name="l00163"></a>00163 
+<a name="l00164"></a>00164 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00165"></a>00165 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> scalable_allocator&lt;T&gt;&amp;, <span class="keyword">const</span> scalable_allocator&lt;U&gt;&amp; ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+<a name="l00166"></a>00166 
+<a name="l00167"></a>00167 } <span class="comment">// namespace tbb</span>
+<a name="l00168"></a>00168 
+<a name="l00169"></a>00169 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00170"></a>00170 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_BUILD &amp;&amp; !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)</span>
+<a name="l00171"></a>00171 <span class="preprocessor"></span><span class="preprocessor">        #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00172"></a>00172 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00173"></a>00173 <span class="preprocessor"></span>
+<a name="l00174"></a>00174 <span class="preprocessor">    #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE</span>
+<a name="l00175"></a>00175 <span class="preprocessor"></span><span class="preprocessor">        #ifdef _DEBUG</span>
+<a name="l00176"></a>00176 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbbmalloc_debug.lib")</span>
+<a name="l00177"></a>00177 <span class="preprocessor"></span><span class="preprocessor">        #else</span>
+<a name="l00178"></a>00178 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbbmalloc.lib")</span>
+<a name="l00179"></a>00179 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
+<a name="l00180"></a>00180 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00181"></a>00181 <span class="preprocessor"></span>
+<a name="l00182"></a>00182 
+<a name="l00183"></a>00183 <span class="preprocessor">#endif</span>
+<a name="l00184"></a>00184 <span class="preprocessor"></span>
+<a name="l00185"></a>00185 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
+<a name="l00186"></a>00186 
+<a name="l00187"></a>00187 <span class="preprocessor">#if !defined(__cplusplus) &amp;&amp; __ICC==1100</span>
+<a name="l00188"></a>00188 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="preprocessor">#endif // ICC 11.0 warning 991 is back</span>
+<a name="l00190"></a>00190 <span class="preprocessor"></span>
+<a name="l00191"></a>00191 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_scalable_allocator_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00352.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00352.html
new file mode 100644 (file)
index 0000000..684cc98
--- /dev/null
@@ -0,0 +1,192 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>spin_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>spin_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_spin_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_spin_mutex_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;cstddef&gt;</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;new&gt;</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "tbb_machine.h"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00030"></a>00030 
+<a name="l00031"></a>00031 <span class="keyword">namespace </span>tbb {
+<a name="l00032"></a>00032 
+<a name="l00034"></a>00034 
+<a name="l00039"></a><a class="code" href="a00161.html">00039</a> <span class="keyword">class </span><a class="code" href="a00161.html">spin_mutex</a> {
+<a name="l00041"></a>00041     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> flag;
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043 <span class="keyword">public</span>:
+<a name="l00045"></a>00045 
+<a name="l00046"></a><a class="code" href="a00161.html#3d8fb44644fd8d41ada1fbeba7409be3">00046</a>     <a class="code" href="a00161.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</a>() : flag(0) {
+<a name="l00047"></a>00047 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span>        internal_construct();
+<a name="l00049"></a>00049 <span class="preprocessor">#endif</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span>    }
+<a name="l00051"></a>00051 
+<a name="l00053"></a><a class="code" href="a00162.html">00053</a>     <span class="keyword">class </span><a class="code" href="a00162.html">scoped_lock</a> : internal::no_copy {
+<a name="l00054"></a>00054     <span class="keyword">private</span>:
+<a name="l00056"></a>00056         <a class="code" href="a00161.html">spin_mutex</a>* my_mutex; 
+<a name="l00057"></a>00057 
+<a name="l00059"></a>00059         internal::uintptr my_unlock_value;
+<a name="l00060"></a>00060 
+<a name="l00062"></a>00062         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00161.html">spin_mutex</a>&amp; m );
+<a name="l00063"></a>00063 
+<a name="l00065"></a>00065         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00161.html">spin_mutex</a>&amp; m );
+<a name="l00066"></a>00066 
+<a name="l00068"></a>00068         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
+<a name="l00069"></a>00069 
+<a name="l00070"></a>00070         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00161.html">spin_mutex</a>;
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072     <span class="keyword">public</span>:
+<a name="l00074"></a><a class="code" href="a00162.html#29ae680ae7f5e685c2e15535b9c855b3">00074</a>         <a class="code" href="a00162.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>() : my_mutex(NULL), my_unlock_value(0) {}
+<a name="l00075"></a>00075 
+<a name="l00077"></a><a class="code" href="a00162.html#5ce6807050a9e8f87bcb4a65dccb12ef">00077</a>         <a class="code" href="a00162.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>( <a class="code" href="a00161.html">spin_mutex</a>&amp; m ) { 
+<a name="l00078"></a>00078 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span>            my_mutex=NULL;
+<a name="l00080"></a>00080             internal_acquire(m);
+<a name="l00081"></a>00081 <span class="preprocessor">#else</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span>            my_unlock_value = __TBB_LockByte(m.<a class="code" href="a00161.html#81b0b05fb71280ce0c79708e82569d86">flag</a>);
+<a name="l00083"></a>00083             my_mutex=&amp;m;
+<a name="l00084"></a>00084 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/</span>
+<a name="l00085"></a>00085         }
+<a name="l00086"></a>00086 
+<a name="l00088"></a><a class="code" href="a00162.html#3ee3c338732b1f64b0b32a757807a30d">00088</a>         <span class="keywordtype">void</span> <a class="code" href="a00162.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>( <a class="code" href="a00161.html">spin_mutex</a>&amp; m ) {
+<a name="l00089"></a>00089 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span>            internal_acquire(m);
+<a name="l00091"></a>00091 <span class="preprocessor">#else</span>
+<a name="l00092"></a>00092 <span class="preprocessor"></span>            my_unlock_value = __TBB_LockByte(m.<a class="code" href="a00161.html#81b0b05fb71280ce0c79708e82569d86">flag</a>);
+<a name="l00093"></a>00093             my_mutex = &amp;m;
+<a name="l00094"></a>00094 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/</span>
+<a name="l00095"></a>00095         }
+<a name="l00096"></a>00096 
+<a name="l00098"></a>00098 
+<a name="l00099"></a><a class="code" href="a00162.html#9297ec188534b45dc0ca48f2f39a0501">00099</a>         <span class="keywordtype">bool</span> <a class="code" href="a00162.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>( <a class="code" href="a00161.html">spin_mutex</a>&amp; m ) {
+<a name="l00100"></a>00100 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00101"></a>00101 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire(m);
+<a name="l00102"></a>00102 <span class="preprocessor">#else</span>
+<a name="l00103"></a>00103 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = __TBB_TryLockByte(m.<a class="code" href="a00161.html#81b0b05fb71280ce0c79708e82569d86">flag</a>);
+<a name="l00104"></a>00104             <span class="keywordflow">if</span>( result ) {
+<a name="l00105"></a>00105                 my_unlock_value = 0;
+<a name="l00106"></a>00106                 my_mutex = &amp;m;
+<a name="l00107"></a>00107             }
+<a name="l00108"></a>00108             <span class="keywordflow">return</span> result;
+<a name="l00109"></a>00109 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/</span>
+<a name="l00110"></a>00110         }
+<a name="l00111"></a>00111 
+<a name="l00113"></a><a class="code" href="a00162.html#eeb615e68e963e6bf8d9c11402d0ce8e">00113</a>         <span class="keywordtype">void</span> <a class="code" href="a00162.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a>() {
+<a name="l00114"></a>00114 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span>            internal_release();
+<a name="l00116"></a>00116 <span class="preprocessor">#else</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span>            __TBB_store_with_release(my_mutex-&gt;<a class="code" href="a00161.html#81b0b05fb71280ce0c79708e82569d86">flag</a>, static_cast&lt;unsigned char&gt;(my_unlock_value));
+<a name="l00118"></a>00118             my_mutex = NULL;
+<a name="l00119"></a>00119 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00120"></a>00120         }
+<a name="l00121"></a>00121 
+<a name="l00123"></a><a class="code" href="a00162.html#ac6fa425d1f06c56d8b70abc51aac844">00123</a>         <a class="code" href="a00162.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a>() {
+<a name="l00124"></a>00124             <span class="keywordflow">if</span>( my_mutex ) {
+<a name="l00125"></a>00125 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span>                internal_release();
+<a name="l00127"></a>00127 <span class="preprocessor">#else</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>                __TBB_store_with_release(my_mutex-&gt;<a class="code" href="a00161.html#81b0b05fb71280ce0c79708e82569d86">flag</a>, static_cast&lt;unsigned char&gt;(my_unlock_value));
+<a name="l00129"></a>00129 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00130"></a>00130             }
+<a name="l00131"></a>00131         }
+<a name="l00132"></a>00132     };
+<a name="l00133"></a>00133 
+<a name="l00134"></a>00134     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136     <span class="comment">// Mutex traits</span>
+<a name="l00137"></a>00137     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
+<a name="l00138"></a>00138     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
+<a name="l00139"></a>00139     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">false</span>;
+<a name="l00140"></a>00140 
+<a name="l00141"></a>00141     <span class="comment">// ISO C++0x compatibility methods</span>
+<a name="l00142"></a>00142 
+<a name="l00144"></a><a class="code" href="a00161.html#4f748989e19b6045e3a2d2ee73626a28">00144</a>     <span class="keywordtype">void</span> <a class="code" href="a00161.html#4f748989e19b6045e3a2d2ee73626a28">lock</a>() {
+<a name="l00145"></a>00145 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00146"></a>00146 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space&lt;scoped_lock,1&gt;</a> tmp;
+<a name="l00147"></a>00147         <span class="keyword">new</span>(tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00162.html">scoped_lock</a>(*<span class="keyword">this</span>);
+<a name="l00148"></a>00148 <span class="preprocessor">#else</span>
+<a name="l00149"></a>00149 <span class="preprocessor"></span>        __TBB_LockByte(flag);
+<a name="l00150"></a>00150 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS*/</span>
+<a name="l00151"></a>00151     }
+<a name="l00152"></a>00152 
+<a name="l00154"></a>00154 
+<a name="l00155"></a><a class="code" href="a00161.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">00155</a>     <span class="keywordtype">bool</span> <a class="code" href="a00161.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</a>() {
+<a name="l00156"></a>00156 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00157"></a>00157 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space&lt;scoped_lock,1&gt;</a> tmp;
+<a name="l00158"></a>00158         <span class="keywordflow">return</span> (<span class="keyword">new</span>(tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00162.html">scoped_lock</a>)-&gt;internal_try_acquire(*<span class="keyword">this</span>);
+<a name="l00159"></a>00159 <span class="preprocessor">#else</span>
+<a name="l00160"></a>00160 <span class="preprocessor"></span>        <span class="keywordflow">return</span> __TBB_TryLockByte(flag);
+<a name="l00161"></a>00161 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS*/</span>
+<a name="l00162"></a>00162     }
+<a name="l00163"></a>00163 
+<a name="l00165"></a><a class="code" href="a00161.html#0e843ee6265f57f27d228ba91e7308ef">00165</a>     <span class="keywordtype">void</span> <a class="code" href="a00161.html#0e843ee6265f57f27d228ba91e7308ef">unlock</a>() {
+<a name="l00166"></a>00166 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00167"></a>00167 <span class="preprocessor"></span>        <a class="code" href="a00116.html">aligned_space&lt;scoped_lock,1&gt;</a> tmp;
+<a name="l00168"></a>00168         <a class="code" href="a00162.html">scoped_lock</a>&amp; s = *tmp.<a class="code" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00169"></a>00169         s.<a class="code" href="a00162.html#d968921bed018503214f36e09007ee7b">my_mutex</a> = <span class="keyword">this</span>;
+<a name="l00170"></a>00170         s.<a class="code" href="a00162.html#0821c9dc231cd41586306fd54f701873">my_unlock_value</a> = 0;
+<a name="l00171"></a>00171         s.<a class="code" href="a00162.html#8f4d19aa2d6d112034d281eed0dab5fa">internal_release</a>();
+<a name="l00172"></a>00172 <span class="preprocessor">#else</span>
+<a name="l00173"></a>00173 <span class="preprocessor"></span>        __TBB_store_with_release(flag, 0);
+<a name="l00174"></a>00174 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+<a name="l00175"></a>00175     }
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
+<a name="l00178"></a>00178 };
+<a name="l00179"></a>00179 
+<a name="l00180"></a>00180 __TBB_DEFINE_PROFILING_SET_NAME(spin_mutex)
+<a name="l00181"></a>00181 
+<a name="l00182"></a>00182 } <span class="comment">// namespace tbb</span>
+<a name="l00183"></a>00183 
+<a name="l00184"></a>00184 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_spin_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00353.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00353.html
new file mode 100644 (file)
index 0000000..a7e4aae
--- /dev/null
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>spin_rw_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>spin_rw_mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_spin_rw_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_spin_rw_mutex_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_machine.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
+<a name="l00029"></a>00029 
+<a name="l00030"></a>00030 <span class="keyword">class </span>spin_rw_mutex_v3;
+<a name="l00031"></a>00031 <span class="keyword">typedef</span> spin_rw_mutex_v3 spin_rw_mutex;
+<a name="l00032"></a>00032 
+<a name="l00034"></a>00034 
+<a name="l00035"></a><a class="code" href="a00163.html">00035</a> <span class="keyword">class </span><a class="code" href="a00163.html">spin_rw_mutex_v3</a> {
+<a name="l00037"></a>00037 
+<a name="l00039"></a>00039     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_acquire_writer();
+<a name="l00040"></a>00040 
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release_writer();
+<a name="l00044"></a>00044 
+<a name="l00046"></a>00046     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire_reader();
+<a name="l00047"></a>00047 
+<a name="l00049"></a>00049     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_upgrade();
+<a name="l00050"></a>00050 
+<a name="l00052"></a>00052 
+<a name="l00053"></a>00053     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_downgrade();
+<a name="l00054"></a>00054 
+<a name="l00056"></a>00056     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release_reader();
+<a name="l00057"></a>00057 
+<a name="l00059"></a>00059     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire_writer();
+<a name="l00060"></a>00060 
+<a name="l00062"></a>00062     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire_reader();
+<a name="l00063"></a>00063 
+<a name="l00065"></a>00065 <span class="keyword">public</span>:
+<a name="l00067"></a><a class="code" href="a00163.html#61332b2756de89f3f5f69310cbb6e70c">00067</a>     <a class="code" href="a00163.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a>() : state(0) {
+<a name="l00068"></a>00068 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span>        internal_construct();
+<a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span>    }
+<a name="l00072"></a>00072 
+<a name="l00073"></a>00073 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00075"></a><a class="code" href="a00163.html#9a815fb2759e55072ed413f1b6970cf3">00075</a> <span class="preprocessor">    ~spin_rw_mutex_v3() {</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>        __TBB_ASSERT( !state, <span class="stringliteral">"destruction of an acquired mutex"</span>);
+<a name="l00077"></a>00077     };
+<a name="l00078"></a>00078 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00079"></a>00079 
+<a name="l00081"></a>00081 
+<a name="l00083"></a><a class="code" href="a00164.html">00083</a>     <span class="keyword">class </span><a class="code" href="a00164.html">scoped_lock</a> : internal::no_copy {
+<a name="l00084"></a>00084     <span class="keyword">public</span>:
+<a name="l00086"></a>00086 
+<a name="l00087"></a><a class="code" href="a00164.html#d6ea60dee5563f702379bf5e51aa8806">00087</a>         <a class="code" href="a00164.html">scoped_lock</a>() : <a class="code" href="a00142.html">mutex</a>(NULL) {}
+<a name="l00088"></a>00088 
+<a name="l00090"></a>00090 
+<a name="l00091"></a><a class="code" href="a00164.html#42a92d4f8fdde425b111cfa8a9228071">00091</a>         <a class="code" href="a00164.html">scoped_lock</a>( <a class="code" href="a00163.html">spin_rw_mutex</a>&amp; m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) : <a class="code" href="a00142.html">mutex</a>(NULL) {
+<a name="l00092"></a>00092             <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>(m, write);
+<a name="l00093"></a>00093         }
+<a name="l00094"></a>00094 
+<a name="l00096"></a><a class="code" href="a00164.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">00096</a>         ~<a class="code" href="a00164.html">scoped_lock</a>() {
+<a name="l00097"></a>00097             <span class="keywordflow">if</span>( <a class="code" href="a00142.html">mutex</a> ) <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>();
+<a name="l00098"></a>00098         }
+<a name="l00099"></a>00099 
+<a name="l00101"></a><a class="code" href="a00164.html#b0b646ec5be02a127d159bbb7ca65353">00101</a>         <span class="keywordtype">void</span> <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00163.html">spin_rw_mutex</a>&amp; m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
+<a name="l00102"></a>00102             __TBB_ASSERT( !<a class="code" href="a00142.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
+<a name="l00103"></a>00103             is_writer = write; 
+<a name="l00104"></a>00104             <a class="code" href="a00142.html">mutex</a> = &amp;m;
+<a name="l00105"></a>00105             <span class="keywordflow">if</span>( write ) <a class="code" href="a00142.html">mutex</a>-&gt;internal_acquire_writer();
+<a name="l00106"></a>00106             <span class="keywordflow">else</span>        <a class="code" href="a00142.html">mutex</a>-&gt;internal_acquire_reader();
+<a name="l00107"></a>00107         }
+<a name="l00108"></a>00108 
+<a name="l00110"></a>00110 
+<a name="l00111"></a><a class="code" href="a00164.html#3f0b1e3f2efab63336400348bd070226">00111</a>         <span class="keywordtype">bool</span> upgrade_to_writer() {
+<a name="l00112"></a>00112             __TBB_ASSERT( <a class="code" href="a00142.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
+<a name="l00113"></a>00113             __TBB_ASSERT( !is_writer, <span class="stringliteral">"not a reader"</span> );
+<a name="l00114"></a>00114             is_writer = <span class="keyword">true</span>; 
+<a name="l00115"></a>00115             <span class="keywordflow">return</span> <a class="code" href="a00142.html">mutex</a>-&gt;internal_upgrade();
+<a name="l00116"></a>00116         }
+<a name="l00117"></a>00117 
+<a name="l00119"></a><a class="code" href="a00164.html#61b14d00a78185c9b2d206ebfc379124">00119</a>         <span class="keywordtype">void</span> <a class="code" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
+<a name="l00120"></a>00120             __TBB_ASSERT( <a class="code" href="a00142.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
+<a name="l00121"></a>00121             <a class="code" href="a00163.html">spin_rw_mutex</a> *m = <a class="code" href="a00142.html">mutex</a>; 
+<a name="l00122"></a>00122             <a class="code" href="a00142.html">mutex</a> = NULL;
+<a name="l00123"></a>00123 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( is_writer ) m-&gt;internal_release_writer();
+<a name="l00125"></a>00125             <span class="keywordflow">else</span>            m-&gt;internal_release_reader();
+<a name="l00126"></a>00126 <span class="preprocessor">#else</span>
+<a name="l00127"></a>00127 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( is_writer ) __TBB_AtomicAND( &amp;m-&gt;<a class="code" href="a00163.html#621b900d5fef23d2e401aabcbb777c76">state</a>, READERS ); 
+<a name="l00128"></a>00128             <span class="keywordflow">else</span>            __TBB_FetchAndAddWrelease( &amp;m-&gt;<a class="code" href="a00163.html#621b900d5fef23d2e401aabcbb777c76">state</a>, -(intptr_t)ONE_READER);
+<a name="l00129"></a>00129 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00130"></a>00130         }
+<a name="l00131"></a>00131 
+<a name="l00133"></a><a class="code" href="a00164.html#c2c2c38a08cb9080e87099fac3e5bc94">00133</a>         <span class="keywordtype">bool</span> downgrade_to_reader() {
+<a name="l00134"></a>00134 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00135"></a>00135 <span class="preprocessor"></span>            __TBB_ASSERT( <a class="code" href="a00142.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
+<a name="l00136"></a>00136             __TBB_ASSERT( is_writer, <span class="stringliteral">"not a writer"</span> );
+<a name="l00137"></a>00137             <a class="code" href="a00142.html">mutex</a>-&gt;internal_downgrade();
+<a name="l00138"></a>00138 <span class="preprocessor">#else</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span>            __TBB_FetchAndAddW( &amp;<a class="code" href="a00142.html">mutex</a>-&gt;state, ((intptr_t)ONE_READER-WRITER));
+<a name="l00140"></a>00140 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00141"></a>00141             is_writer = <span class="keyword">false</span>;
+<a name="l00142"></a>00142 
+<a name="l00143"></a>00143             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00144"></a>00144         }
+<a name="l00145"></a>00145 
+<a name="l00147"></a><a class="code" href="a00164.html#9879626968d9b9a04cd2ec0fb2e84ae1">00147</a>         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00163.html">spin_rw_mutex</a>&amp; m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
+<a name="l00148"></a>00148             __TBB_ASSERT( !<a class="code" href="a00142.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
+<a name="l00149"></a>00149             <span class="keywordtype">bool</span> result;
+<a name="l00150"></a>00150             is_writer = write; 
+<a name="l00151"></a>00151             result = write? m.internal_try_acquire_writer()
+<a name="l00152"></a>00152                           : m.internal_try_acquire_reader();
+<a name="l00153"></a>00153             <span class="keywordflow">if</span>( result ) 
+<a name="l00154"></a>00154                 <a class="code" href="a00142.html">mutex</a> = &amp;m;
+<a name="l00155"></a>00155             <span class="keywordflow">return</span> result;
+<a name="l00156"></a>00156         }
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158     <span class="keyword">private</span>:
+<a name="l00160"></a>00160         <a class="code" href="a00163.html">spin_rw_mutex</a>* <a class="code" href="a00142.html">mutex</a>;
+<a name="l00161"></a>00161 
+<a name="l00163"></a>00163 
+<a name="l00164"></a>00164         <span class="keywordtype">bool</span> is_writer;
+<a name="l00165"></a>00165     };
+<a name="l00166"></a>00166 
+<a name="l00167"></a>00167     <span class="comment">// Mutex traits</span>
+<a name="l00168"></a>00168     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">true</span>;
+<a name="l00169"></a>00169     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
+<a name="l00170"></a>00170     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">false</span>;
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172     <span class="comment">// ISO C++0x compatibility methods</span>
+<a name="l00173"></a>00173 
+<a name="l00175"></a><a class="code" href="a00163.html#4007d6e1523dbc3c2bb7f889ab789a8a">00175</a>     <span class="keywordtype">void</span> lock() {internal_acquire_writer();}
+<a name="l00176"></a>00176 
+<a name="l00178"></a>00178 
+<a name="l00179"></a><a class="code" href="a00163.html#088bb256be794cc47d3b83791632fdfc">00179</a>     <span class="keywordtype">bool</span> try_lock() {<span class="keywordflow">return</span> internal_try_acquire_writer();}
+<a name="l00180"></a>00180 
+<a name="l00182"></a><a class="code" href="a00163.html#f9f52ead2098eb5fb12da59d5ae53b55">00182</a>     <span class="keywordtype">void</span> unlock() {
+<a name="l00183"></a>00183 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00184"></a>00184 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( state&amp;WRITER ) internal_release_writer();
+<a name="l00185"></a>00185         <span class="keywordflow">else</span>               internal_release_reader();
+<a name="l00186"></a>00186 <span class="preprocessor">#else</span>
+<a name="l00187"></a>00187 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( state&amp;WRITER ) __TBB_AtomicAND( &amp;state, READERS ); 
+<a name="l00188"></a>00188         <span class="keywordflow">else</span>               __TBB_FetchAndAddWrelease( &amp;state, -(intptr_t)ONE_READER);
+<a name="l00189"></a>00189 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00190"></a>00190     }
+<a name="l00191"></a>00191 
+<a name="l00192"></a>00192     <span class="comment">// Methods for reader locks that resemble ISO C++0x compatibility methods.</span>
+<a name="l00193"></a>00193 
+<a name="l00195"></a><a class="code" href="a00163.html#13f799708ac4ca437a16be202e263e18">00195</a>     <span class="keywordtype">void</span> lock_read() {internal_acquire_reader();}
+<a name="l00196"></a>00196 
+<a name="l00198"></a>00198 
+<a name="l00199"></a><a class="code" href="a00163.html#b8667415869013f840d976aa406d385a">00199</a>     <span class="keywordtype">bool</span> try_lock_read() {<span class="keywordflow">return</span> internal_try_acquire_reader();}
+<a name="l00200"></a>00200 
+<a name="l00201"></a>00201 <span class="keyword">private</span>:
+<a name="l00202"></a>00202     <span class="keyword">typedef</span> intptr_t state_t;
+<a name="l00203"></a>00203     <span class="keyword">static</span> <span class="keyword">const</span> state_t WRITER = 1;
+<a name="l00204"></a>00204     <span class="keyword">static</span> <span class="keyword">const</span> state_t WRITER_PENDING = 2;
+<a name="l00205"></a>00205     <span class="keyword">static</span> <span class="keyword">const</span> state_t READERS = ~(WRITER | WRITER_PENDING);
+<a name="l00206"></a>00206     <span class="keyword">static</span> <span class="keyword">const</span> state_t ONE_READER = 4;
+<a name="l00207"></a>00207     <span class="keyword">static</span> <span class="keyword">const</span> state_t BUSY = WRITER | READERS;
+<a name="l00209"></a>00209 
+<a name="l00212"></a>00212     state_t state;
+<a name="l00213"></a>00213 
+<a name="l00214"></a>00214     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00215"></a>00215 };
+<a name="l00216"></a>00216 
+<a name="l00217"></a>00217 __TBB_DEFINE_PROFILING_SET_NAME(spin_rw_mutex)
+<a name="l00218"></a>00218 
+<a name="l00219"></a>00219 } <span class="comment">// namespace tbb</span>
+<a name="l00220"></a>00220 
+<a name="l00221"></a>00221 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_spin_rw_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00354.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00354.html
new file mode 100644 (file)
index 0000000..ce62200
--- /dev/null
@@ -0,0 +1,662 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>task.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>task.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_task_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_task_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_machine.h"</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00030"></a>00030 
+<a name="l00031"></a>00031 <span class="keyword">namespace </span>tbb {
+<a name="l00032"></a>00032 
+<a name="l00033"></a>00033 <span class="keyword">class </span>task;
+<a name="l00034"></a>00034 <span class="keyword">class </span>task_list;
+<a name="l00035"></a>00035 
+<a name="l00036"></a>00036 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="keyword">class </span>task_group_context;
+<a name="l00038"></a>00038 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00039"></a>00039 
+<a name="l00041"></a>00041 <span class="keyword">namespace </span>internal {
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043     <span class="keyword">class </span>scheduler: no_copy {
+<a name="l00044"></a>00044     <span class="keyword">public</span>:
+<a name="l00046"></a>00046         <span class="keyword">virtual</span> <span class="keywordtype">void</span> spawn( task&amp; first, task*&amp; next ) = 0;
+<a name="l00047"></a>00047 
+<a name="l00049"></a>00049         <span class="keyword">virtual</span> <span class="keywordtype">void</span> wait_for_all( task&amp; parent, task* child ) = 0;
+<a name="l00050"></a>00050 
+<a name="l00052"></a>00052         <span class="keyword">virtual</span> <span class="keywordtype">void</span> spawn_root_and_wait( task&amp; first, task*&amp; next ) = 0;
+<a name="l00053"></a>00053 
+<a name="l00055"></a>00055         <span class="comment">//  Have to have it just to shut up overzealous compilation warnings</span>
+<a name="l00056"></a>00056         <span class="keyword">virtual</span> ~scheduler() = 0;
+<a name="l00057"></a>00057     };
+<a name="l00058"></a>00058 
+<a name="l00060"></a>00060 
+<a name="l00061"></a>00061     <span class="keyword">typedef</span> intptr reference_count;
+<a name="l00062"></a>00062 
+<a name="l00064"></a>00064     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> affinity_id;
+<a name="l00065"></a>00065 
+<a name="l00066"></a>00066 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00067"></a>00067 <span class="preprocessor"></span>    <span class="keyword">struct </span>context_list_node_t {
+<a name="l00068"></a>00068         context_list_node_t *my_prev,
+<a name="l00069"></a>00069                             *my_next;
+<a name="l00070"></a>00070     };
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072     <span class="keyword">class </span>allocate_root_with_context_proxy: no_assign {
+<a name="l00073"></a>00073         task_group_context&amp; my_context;
+<a name="l00074"></a>00074     <span class="keyword">public</span>:
+<a name="l00075"></a>00075         allocate_root_with_context_proxy ( task_group_context&amp; ctx ) : my_context(ctx) {}
+<a name="l00076"></a>00076         task&amp; __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+<a name="l00077"></a>00077         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task&amp; ) <span class="keyword">const</span>;
+<a name="l00078"></a>00078     };
+<a name="l00079"></a>00079 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00080"></a>00080 
+<a name="l00081"></a>00081     <span class="keyword">class </span>allocate_root_proxy: no_assign {
+<a name="l00082"></a>00082     <span class="keyword">public</span>:
+<a name="l00083"></a>00083         <span class="keyword">static</span> task&amp; __TBB_EXPORTED_FUNC allocate( size_t size );
+<a name="l00084"></a>00084         <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC free( task&amp; );
+<a name="l00085"></a>00085     };
+<a name="l00086"></a>00086 
+<a name="l00087"></a>00087     <span class="keyword">class </span>allocate_continuation_proxy: no_assign {
+<a name="l00088"></a>00088     <span class="keyword">public</span>:
+<a name="l00089"></a>00089         task&amp; __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+<a name="l00090"></a>00090         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task&amp; ) <span class="keyword">const</span>;
+<a name="l00091"></a>00091     };
+<a name="l00092"></a>00092 
+<a name="l00093"></a>00093     <span class="keyword">class </span>allocate_child_proxy: no_assign {
+<a name="l00094"></a>00094     <span class="keyword">public</span>:
+<a name="l00095"></a>00095         task&amp; __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+<a name="l00096"></a>00096         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task&amp; ) <span class="keyword">const</span>;
+<a name="l00097"></a>00097     };
+<a name="l00098"></a>00098 
+<a name="l00099"></a>00099     <span class="keyword">class </span>allocate_additional_child_of_proxy: no_assign {
+<a name="l00100"></a>00100         task&amp; <span class="keyword">self</span>;
+<a name="l00101"></a>00101         task&amp; parent;
+<a name="l00102"></a>00102     <span class="keyword">public</span>:
+<a name="l00103"></a>00103         allocate_additional_child_of_proxy( task&amp; self_, task&amp; parent_ ) : self(self_), parent(parent_) {}
+<a name="l00104"></a>00104         task&amp; __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+<a name="l00105"></a>00105         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task&amp; ) <span class="keyword">const</span>;
+<a name="l00106"></a>00106     };
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108     <span class="keyword">class </span>task_group_base;
+<a name="l00109"></a>00109 
+<a name="l00111"></a>00111 
+<a name="l00116"></a>00116     <span class="keyword">class </span>task_prefix {
+<a name="l00117"></a>00117     <span class="keyword">private</span>:
+<a name="l00118"></a>00118         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00166.html">tbb::task</a>;
+<a name="l00119"></a>00119         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00168.html">tbb::task_list</a>;
+<a name="l00120"></a>00120         <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
+<a name="l00121"></a>00121         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
+<a name="l00122"></a>00122         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
+<a name="l00123"></a>00123         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
+<a name="l00124"></a>00124         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
+<a name="l00125"></a>00125         <span class="keyword">friend</span> <span class="keyword">class </span>internal::task_group_base;
+<a name="l00126"></a>00126 
+<a name="l00127"></a>00127 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span>
+<a name="l00132"></a>00132 <span class="preprocessor">        task_group_context  *context;</span>
+<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00134"></a>00134         
+<a name="l00136"></a>00136 
+<a name="l00141"></a>00141         scheduler* origin;
+<a name="l00142"></a>00142 
+<a name="l00144"></a>00144         scheduler* owner;
+<a name="l00145"></a>00145 
+<a name="l00147"></a>00147 
+<a name="l00150"></a>00150         <a class="code" href="a00166.html">tbb::task</a>* parent;
+<a name="l00151"></a>00151 
+<a name="l00153"></a>00153 
+<a name="l00157"></a>00157         reference_count ref_count;
+<a name="l00158"></a>00158 
+<a name="l00160"></a>00160         <span class="keywordtype">int</span> depth;
+<a name="l00161"></a>00161 
+<a name="l00163"></a>00163 
+<a name="l00164"></a>00164         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> state;
+<a name="l00165"></a>00165 
+<a name="l00167"></a>00167 
+<a name="l00171"></a>00171         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> extra_state;
+<a name="l00172"></a>00172 
+<a name="l00173"></a>00173         affinity_id affinity;
+<a name="l00174"></a>00174 
+<a name="l00176"></a>00176         <a class="code" href="a00166.html">tbb::task</a>* next;
+<a name="l00177"></a>00177 
+<a name="l00179"></a>00179         <a class="code" href="a00166.html">tbb::task</a>&amp; task() {<span class="keywordflow">return</span> *reinterpret_cast&lt;tbb::task*&gt;(<span class="keyword">this</span>+1);}
+<a name="l00180"></a>00180     };
+<a name="l00181"></a>00181 
+<a name="l00182"></a>00182 } <span class="comment">// namespace internal</span>
+<a name="l00184"></a>00184 <span class="comment"></span>
+<a name="l00185"></a>00185 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00186"></a>00186 <span class="preprocessor"></span>
+<a name="l00187"></a>00187 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00188"></a>00188 <span class="preprocessor"></span>    <span class="keyword">class </span>tbb_exception;
+<a name="l00189"></a>00189 <span class="preprocessor">#else</span>
+<a name="l00190"></a>00190 <span class="preprocessor"></span>    <span class="keyword">namespace </span>internal {
+<a name="l00191"></a>00191         <span class="keyword">class </span>tbb_exception_ptr;
+<a name="l00192"></a>00192     }
+<a name="l00193"></a>00193 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00194"></a>00194 
+<a name="l00196"></a>00196 
+<a name="l00216"></a><a class="code" href="a00167.html">00216</a> <span class="keyword">class </span><a class="code" href="a00167.html">task_group_context</a> : internal::no_copy
+<a name="l00217"></a>00217 {
+<a name="l00218"></a>00218 <span class="keyword">private</span>:
+<a name="l00219"></a>00219 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00220"></a>00220 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00172.html">tbb_exception</a> <a class="code" href="a00172.html">exception_container_type</a>;
+<a name="l00221"></a>00221 <span class="preprocessor">#else</span>
+<a name="l00222"></a>00222 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00173.html">internal::tbb_exception_ptr</a> <a class="code" href="a00172.html">exception_container_type</a>;
+<a name="l00223"></a>00223 <span class="preprocessor">#endif</span>
+<a name="l00224"></a>00224 <span class="preprocessor"></span>
+<a name="l00225"></a>00225     <span class="keyword">enum</span> version_traits_word_layout {
+<a name="l00226"></a>00226         traits_offset = 16,
+<a name="l00227"></a>00227         version_mask = 0xFFFF,
+<a name="l00228"></a>00228         traits_mask = 0xFFFFul &lt;&lt; traits_offset
+<a name="l00229"></a>00229     };
+<a name="l00230"></a>00230 
+<a name="l00231"></a>00231 <span class="keyword">public</span>:
+<a name="l00232"></a>00232     <span class="keyword">enum</span> kind_type {
+<a name="l00233"></a>00233         isolated,
+<a name="l00234"></a>00234         bound
+<a name="l00235"></a>00235     };
+<a name="l00236"></a>00236 
+<a name="l00237"></a>00237     <span class="keyword">enum</span> traits_type {
+<a name="l00238"></a>00238         exact_exception = 0x0001ul &lt;&lt; traits_offset,
+<a name="l00239"></a>00239         no_cancellation = 0x0002ul &lt;&lt; traits_offset,
+<a name="l00240"></a>00240         concurrent_wait = 0x0004ul &lt;&lt; traits_offset,
+<a name="l00241"></a>00241 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00242"></a>00242 <span class="preprocessor"></span>        default_traits = 0
+<a name="l00243"></a>00243 <span class="preprocessor">#else</span>
+<a name="l00244"></a>00244 <span class="preprocessor"></span>        default_traits = exact_exception
+<a name="l00245"></a>00245 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00246"></a>00246     };
+<a name="l00247"></a>00247 
+<a name="l00248"></a>00248 <span class="keyword">private</span>:
+<a name="l00249"></a>00249     <span class="keyword">union </span>{
+<a name="l00251"></a>00251         kind_type my_kind;
+<a name="l00252"></a>00252         uintptr_t _my_kind_aligner;
+<a name="l00253"></a>00253     };
+<a name="l00254"></a>00254 
+<a name="l00256"></a>00256     <a class="code" href="a00167.html">task_group_context</a> *my_parent;
+<a name="l00257"></a>00257 
+<a name="l00259"></a>00259 
+<a name="l00261"></a>00261     internal::context_list_node_t my_node;
+<a name="l00262"></a>00262 
+<a name="l00264"></a>00264 
+<a name="l00267"></a>00267     <span class="keywordtype">char</span> _leading_padding[internal::NFS_MaxLineSize - 
+<a name="l00268"></a>00268                     2 * <span class="keyword">sizeof</span>(uintptr_t)- <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*) - <span class="keyword">sizeof</span>(internal::context_list_node_t)];
+<a name="l00269"></a>00269     
+<a name="l00271"></a>00271     uintptr_t my_cancellation_requested;
+<a name="l00272"></a>00272     
+<a name="l00274"></a>00274 
+<a name="l00277"></a>00277     uintptr_t  my_version_and_traits;
+<a name="l00278"></a>00278 
+<a name="l00280"></a>00280     <a class="code" href="a00172.html">exception_container_type</a> *my_exception;
+<a name="l00281"></a>00281 
+<a name="l00283"></a>00283 
+<a name="l00286"></a>00286     <span class="keywordtype">void</span> *my_owner;
+<a name="l00287"></a>00287 
+<a name="l00289"></a>00289 
+<a name="l00290"></a>00290     <span class="keywordtype">char</span> _trailing_padding[internal::NFS_MaxLineSize - <span class="keyword">sizeof</span>(intptr_t) - 2 * <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*)];
+<a name="l00291"></a>00291 
+<a name="l00292"></a>00292 <span class="keyword">public</span>:
+<a name="l00294"></a>00294 
+<a name="l00321"></a><a class="code" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">00321</a>     <a class="code" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">task_group_context</a> ( kind_type relation_with_parent = bound,
+<a name="l00322"></a>00322                          uintptr_t traits = default_traits )
+<a name="l00323"></a>00323         : my_kind(relation_with_parent)
+<a name="l00324"></a>00324         , my_version_and_traits(1 | traits)
+<a name="l00325"></a>00325     {
+<a name="l00326"></a>00326         <a class="code" href="a00167.html#49a55352084fd44b8863d182e839e6dc">init</a>();
+<a name="l00327"></a>00327     }
+<a name="l00328"></a>00328 
+<a name="l00329"></a>00329     __TBB_EXPORTED_METHOD ~<a class="code" href="a00167.html">task_group_context</a> ();
+<a name="l00330"></a>00330 
+<a name="l00332"></a>00332 
+<a name="l00339"></a>00339     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00167.html#6d30d16bf1cd22f86c6afaf29c2b430c">reset</a> ();
+<a name="l00340"></a>00340 
+<a name="l00342"></a>00342 
+<a name="l00349"></a>00349     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00167.html#8bcdfdf4e6bfb76125b6de15c00b571d">cancel_group_execution</a> ();
+<a name="l00350"></a>00350 
+<a name="l00352"></a>00352     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00167.html#4db72f16210b0a991b2c134d6763a4cc">is_group_execution_cancelled</a> () <span class="keyword">const</span>;
+<a name="l00353"></a>00353 
+<a name="l00355"></a>00355 
+<a name="l00361"></a>00361     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00167.html#d97c8a03615594b71b4ef06ff75cf561">register_pending_exception</a> ();
+<a name="l00362"></a>00362 
+<a name="l00363"></a>00363 <span class="keyword">protected</span>:
+<a name="l00365"></a>00365 
+<a name="l00366"></a>00366     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00167.html#49a55352084fd44b8863d182e839e6dc">init</a> ();
+<a name="l00367"></a>00367 
+<a name="l00368"></a>00368 <span class="keyword">private</span>:
+<a name="l00369"></a>00369     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00166.html">task</a>;
+<a name="l00370"></a>00370     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
+<a name="l00371"></a>00371 
+<a name="l00372"></a>00372     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_required = bound;
+<a name="l00373"></a>00373     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_completed = kind_type(bound+1);
+<a name="l00374"></a>00374 
+<a name="l00377"></a>00377     <span class="keywordtype">void</span> propagate_cancellation_from_ancestors ();
+<a name="l00378"></a>00378 
+<a name="l00380"></a>00380     <span class="keywordtype">bool</span> is_alive () { 
+<a name="l00381"></a>00381 <span class="preprocessor">#if TBB_USE_DEBUG</span>
+<a name="l00382"></a>00382 <span class="preprocessor"></span>        <span class="keywordflow">return</span> my_version_and_traits != 0xDeadBeef;
+<a name="l00383"></a>00383 <span class="preprocessor">#else</span>
+<a name="l00384"></a>00384 <span class="preprocessor"></span>        <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00385"></a>00385 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_DEBUG */</span>
+<a name="l00386"></a>00386     }
+<a name="l00387"></a>00387 }; <span class="comment">// class task_group_context</span>
+<a name="l00388"></a>00388 
+<a name="l00389"></a>00389 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00390"></a>00390 
+<a name="l00392"></a>00392 
+<a name="l00393"></a><a class="code" href="a00166.html">00393</a> <span class="keyword">class </span><a class="code" href="a00166.html">task</a>: internal::no_copy {
+<a name="l00395"></a>00395     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_ref_count( <span class="keywordtype">int</span> count );
+<a name="l00396"></a>00396 
+<a name="l00398"></a>00398     internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count();
+<a name="l00399"></a>00399 
+<a name="l00400"></a>00400 <span class="keyword">protected</span>:
+<a name="l00402"></a><a class="code" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">00402</a>     <a class="code" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>() {prefix().extra_state=1;}
+<a name="l00403"></a>00403 
+<a name="l00404"></a>00404 <span class="keyword">public</span>:
+<a name="l00406"></a><a class="code" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">00406</a>     <span class="keyword">virtual</span> <a class="code" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">~task</a>() {}
+<a name="l00407"></a>00407 
+<a name="l00409"></a>00409     <span class="keyword">virtual</span> <a class="code" href="a00166.html">task</a>* <a class="code" href="a00166.html#22c298cd40937a431a06777423f002f6">execute</a>() = 0;
+<a name="l00410"></a>00410 
+<a name="l00412"></a><a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e">00412</a>     <span class="keyword">enum</span> <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a> {
+<a name="l00414"></a>00414         <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a>,
+<a name="l00416"></a>00416         <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a>,
+<a name="l00418"></a>00418         <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a>,
+<a name="l00420"></a>00420         <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a>,
+<a name="l00422"></a>00422         <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a>,
+<a name="l00424"></a>00424         <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a>
+<a name="l00425"></a>00425     };
+<a name="l00426"></a>00426 
+<a name="l00427"></a>00427     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00428"></a>00428     <span class="comment">// Allocating tasks</span>
+<a name="l00429"></a>00429     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00430"></a>00430 
+<a name="l00432"></a><a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">00432</a>     <span class="keyword">static</span> internal::allocate_root_proxy <a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>() {
+<a name="l00433"></a>00433         <span class="keywordflow">return</span> internal::allocate_root_proxy();
+<a name="l00434"></a>00434     }
+<a name="l00435"></a>00435 
+<a name="l00436"></a>00436 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00438"></a><a class="code" href="a00166.html#8ccc518caf31075a3e073996d2d240a4">00438</a> <span class="preprocessor">    static internal::allocate_root_with_context_proxy allocate_root( task_group_context&amp; ctx ) {</span>
+<a name="l00439"></a>00439 <span class="preprocessor"></span>        <span class="keywordflow">return</span> internal::allocate_root_with_context_proxy(ctx);
+<a name="l00440"></a>00440     }
+<a name="l00441"></a>00441 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00442"></a>00442 
+<a name="l00444"></a>00444 
+<a name="l00445"></a><a class="code" href="a00166.html#1434c79a5138993269d034008bff7329">00445</a>     internal::allocate_continuation_proxy&amp; allocate_continuation() {
+<a name="l00446"></a>00446         <span class="keywordflow">return</span> *reinterpret_cast&lt;internal::allocate_continuation_proxy*&gt;(<span class="keyword">this</span>);
+<a name="l00447"></a>00447     }
+<a name="l00448"></a>00448 
+<a name="l00450"></a><a class="code" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">00450</a>     internal::allocate_child_proxy&amp; allocate_child() {
+<a name="l00451"></a>00451         <span class="keywordflow">return</span> *reinterpret_cast&lt;internal::allocate_child_proxy*&gt;(<span class="keyword">this</span>);
+<a name="l00452"></a>00452     }
+<a name="l00453"></a>00453 
+<a name="l00455"></a>00455 
+<a name="l00457"></a><a class="code" href="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">00457</a>     internal::allocate_additional_child_of_proxy allocate_additional_child_of( <a class="code" href="a00166.html">task</a>&amp; t ) {
+<a name="l00458"></a>00458         <span class="keywordflow">return</span> internal::allocate_additional_child_of_proxy(*<span class="keyword">this</span>,t);
+<a name="l00459"></a>00459     }
+<a name="l00460"></a>00460 
+<a name="l00462"></a>00462 
+<a name="l00466"></a>00466     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD destroy( <a class="code" href="a00166.html">task</a>&amp; victim );
+<a name="l00467"></a>00467 
+<a name="l00468"></a>00468     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00469"></a>00469     <span class="comment">// Recycling of tasks</span>
+<a name="l00470"></a>00470     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00471"></a>00471 
+<a name="l00473"></a>00473 
+<a name="l00479"></a><a class="code" href="a00166.html#a67a79e18f62b43a623a00cfbd76db4c">00479</a>     <span class="keywordtype">void</span> recycle_as_continuation() {
+<a name="l00480"></a>00480         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
+<a name="l00481"></a>00481         prefix().state = allocated;
+<a name="l00482"></a>00482     }
+<a name="l00483"></a>00483 
+<a name="l00485"></a>00485 
+<a name="l00486"></a><a class="code" href="a00166.html#3b290d14109704e2b69dc1ac980a7a76">00486</a>     <span class="keywordtype">void</span> recycle_as_safe_continuation() {
+<a name="l00487"></a>00487         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
+<a name="l00488"></a>00488         prefix().state = recycle;
+<a name="l00489"></a>00489     }
+<a name="l00490"></a>00490 
+<a name="l00492"></a><a class="code" href="a00166.html#db399855177438bbc9cc61d508dae8d2">00492</a>     <span class="keywordtype">void</span> recycle_as_child_of( <a class="code" href="a00166.html">task</a>&amp; new_parent ) {
+<a name="l00493"></a>00493         internal::task_prefix&amp; p = prefix();
+<a name="l00494"></a>00494         __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, <span class="stringliteral">"execute not running, or already recycled"</span> );
+<a name="l00495"></a>00495         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled as a child"</span> );
+<a name="l00496"></a>00496         __TBB_ASSERT( p.parent==NULL, <span class="stringliteral">"parent must be null"</span> );
+<a name="l00497"></a>00497         __TBB_ASSERT( new_parent.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state&lt;=recycle, <span class="stringliteral">"corrupt parent's state"</span> );
+<a name="l00498"></a>00498         __TBB_ASSERT( new_parent.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state!=freed, <span class="stringliteral">"parent already freed"</span> );
+<a name="l00499"></a>00499         p.state = allocated;
+<a name="l00500"></a>00500         p.parent = &amp;new_parent;
+<a name="l00501"></a>00501         p.<a class="code" href="a00166.html#7653ceef53a188d05b5c779e1104b698">depth</a> = new_parent.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().depth+1;
+<a name="l00502"></a>00502 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00503"></a>00503 <span class="preprocessor"></span>        p.context = new_parent.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().context;
+<a name="l00504"></a>00504 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00505"></a>00505     }
+<a name="l00506"></a>00506 
+<a name="l00508"></a>00508 
+<a name="l00509"></a><a class="code" href="a00166.html#4f1be9bbcdb487830dbe298b68d85144">00509</a>     <span class="keywordtype">void</span> recycle_to_reexecute() {
+<a name="l00510"></a>00510         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running, or already recycled"</span> );
+<a name="l00511"></a>00511         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled for reexecution"</span> );
+<a name="l00512"></a>00512         prefix().state = reexecute;
+<a name="l00513"></a>00513     }
+<a name="l00514"></a>00514 
+<a name="l00515"></a>00515 <span class="preprocessor">#if __TBB_TASK_DEQUE</span>
+<a name="l00516"></a>00516 <span class="preprocessor"></span>    <span class="comment">// All depth-related methods are obsolete, and are retained for the sake </span>
+<a name="l00517"></a>00517     <span class="comment">// of backward source compatibility only</span>
+<a name="l00518"></a>00518     intptr_t depth()<span class="keyword"> const </span>{<span class="keywordflow">return</span> 0;}
+<a name="l00519"></a>00519     <span class="keywordtype">void</span> set_depth( intptr_t ) {}
+<a name="l00520"></a>00520     <span class="keywordtype">void</span> add_to_depth( <span class="keywordtype">int</span> ) {}
+<a name="l00521"></a>00521 
+<a name="l00522"></a>00522 <span class="preprocessor">#else </span><span class="comment">/* !__TBB_TASK_DEQUE */</span>
+<a name="l00524"></a>00524 
+<a name="l00525"></a><a class="code" href="a00166.html#d8815c39bb61bd7e2d2691c476ed03b9">00525</a>     typedef internal::intptr depth_type;
+<a name="l00526"></a>00526 
+<a name="l00528"></a><a class="code" href="a00166.html#5be823a972b3c3b9901c5963eeb050fd">00528</a>     depth_type depth()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().depth;}
+<a name="l00529"></a>00529 
+<a name="l00531"></a>00531 
+<a name="l00532"></a><a class="code" href="a00166.html#fc4d4e61a56823aa1efdbb5d59e42973">00532</a>     <span class="keywordtype">void</span> set_depth( depth_type new_depth ) {
+<a name="l00533"></a>00533         __TBB_ASSERT( state()!=ready, <span class="stringliteral">"cannot change depth of ready task"</span> );
+<a name="l00534"></a>00534         __TBB_ASSERT( new_depth&gt;=0, <span class="stringliteral">"depth cannot be negative"</span> );
+<a name="l00535"></a>00535         __TBB_ASSERT( new_depth==<span class="keywordtype">int</span>(new_depth), <span class="stringliteral">"integer overflow error"</span>);
+<a name="l00536"></a>00536         prefix().depth = int(new_depth);
+<a name="l00537"></a>00537     }
+<a name="l00538"></a>00538 
+<a name="l00540"></a>00540 
+<a name="l00541"></a><a class="code" href="a00166.html#b0f98c633647fc73b978fe4cd2277ac4">00541</a>     <span class="keywordtype">void</span> add_to_depth( <span class="keywordtype">int</span> delta ) {
+<a name="l00542"></a>00542         __TBB_ASSERT( state()!=ready, <span class="stringliteral">"cannot change depth of ready task"</span> );
+<a name="l00543"></a>00543         __TBB_ASSERT( prefix().depth&gt;=-delta, <span class="stringliteral">"depth cannot be negative"</span> );
+<a name="l00544"></a>00544         prefix().depth+=delta;
+<a name="l00545"></a>00545     }
+<a name="l00546"></a>00546 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_TASK_DEQUE */</span>
+<a name="l00547"></a>00547 
+<a name="l00548"></a>00548     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00549"></a>00549     <span class="comment">// Spawning and blocking</span>
+<a name="l00550"></a>00550     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00551"></a>00551 
+<a name="l00553"></a><a class="code" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">00553</a>     <span class="keywordtype">void</span> set_ref_count( <span class="keywordtype">int</span> count ) {
+<a name="l00554"></a>00554 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00555"></a>00555 <span class="preprocessor"></span>        internal_set_ref_count(count);
+<a name="l00556"></a>00556 <span class="preprocessor">#else</span>
+<a name="l00557"></a>00557 <span class="preprocessor"></span>        prefix().ref_count = count;
+<a name="l00558"></a>00558 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00559"></a>00559     }
+<a name="l00560"></a>00560 
+<a name="l00562"></a>00562 
+<a name="l00563"></a><a class="code" href="a00166.html#f5fb43c7ad0de5a4b95703cebc39e345">00563</a>     <span class="keywordtype">void</span> increment_ref_count() {
+<a name="l00564"></a>00564         __TBB_FetchAndIncrementWacquire( &amp;prefix().ref_count );
+<a name="l00565"></a>00565     }
+<a name="l00566"></a>00566 
+<a name="l00568"></a>00568 
+<a name="l00569"></a><a class="code" href="a00166.html#ef4680f5c148020c5e7e43ddef44cd5d">00569</a>     <span class="keywordtype">int</span> decrement_ref_count() {
+<a name="l00570"></a>00570 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00571"></a>00571 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(internal_decrement_ref_count());
+<a name="l00572"></a>00572 <span class="preprocessor">#else</span>
+<a name="l00573"></a>00573 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(__TBB_FetchAndDecrementWrelease( &amp;prefix().ref_count ))-1;
+<a name="l00574"></a>00574 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00575"></a>00575     }
+<a name="l00576"></a>00576 
+<a name="l00578"></a>00578 
+<a name="l00582"></a><a class="code" href="a00166.html#f7737143d458f1ed1c0d7da3971d9e6b">00582</a>     <span class="keywordtype">void</span> spawn( <a class="code" href="a00166.html">task</a>&amp; child ) {
+<a name="l00583"></a>00583 <span class="preprocessor">#if !__TBB_RELAXED_OWNERSHIP</span>
+<a name="l00584"></a>00584 <span class="preprocessor"></span>        __TBB_ASSERT( is_owned_by_current_thread(), <span class="stringliteral">"'this' not owned by current thread"</span> );
+<a name="l00585"></a>00585 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_RELAXED_OWNERSHIP */</span>
+<a name="l00586"></a>00586         prefix().owner-&gt;spawn( child, child.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next );
+<a name="l00587"></a>00587     }
+<a name="l00588"></a>00588 
+<a name="l00590"></a>00590 
+<a name="l00591"></a>00591     <span class="keywordtype">void</span> spawn( <a class="code" href="a00168.html">task_list</a>&amp; list );
+<a name="l00592"></a>00592 
+<a name="l00594"></a><a class="code" href="a00166.html#3ce28ca9baa771cfc37ecd72e69c4f3c">00594</a>     <span class="keywordtype">void</span> spawn_and_wait_for_all( <a class="code" href="a00166.html">task</a>&amp; child ) {
+<a name="l00595"></a>00595 <span class="preprocessor">#if !__TBB_RELAXED_OWNERSHIP</span>
+<a name="l00596"></a>00596 <span class="preprocessor"></span>        __TBB_ASSERT( is_owned_by_current_thread(), <span class="stringliteral">"'this' not owned by current thread"</span> );
+<a name="l00597"></a>00597 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_RELAXED_OWNERSHIP */</span>
+<a name="l00598"></a>00598         prefix().owner-&gt;wait_for_all( *<span class="keyword">this</span>, &amp;child );
+<a name="l00599"></a>00599     }
+<a name="l00600"></a>00600 
+<a name="l00602"></a>00602     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD spawn_and_wait_for_all( <a class="code" href="a00168.html">task_list</a>&amp; list );
+<a name="l00603"></a>00603 
+<a name="l00605"></a>00605 
+<a name="l00607"></a><a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">00607</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00166.html">task</a>&amp; root ) {
+<a name="l00608"></a>00608 <span class="preprocessor">#if !__TBB_RELAXED_OWNERSHIP</span>
+<a name="l00609"></a>00609 <span class="preprocessor"></span>        __TBB_ASSERT( root.<a class="code" href="a00166.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>(), <span class="stringliteral">"root not owned by current thread"</span> );
+<a name="l00610"></a>00610 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_RELAXED_OWNERSHIP */</span>
+<a name="l00611"></a>00611         root.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner-&gt;spawn_root_and_wait( root, root.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next );
+<a name="l00612"></a>00612     }
+<a name="l00613"></a>00613 
+<a name="l00615"></a>00615 
+<a name="l00617"></a>00617     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00168.html">task_list</a>&amp; root_list );
+<a name="l00618"></a>00618 
+<a name="l00620"></a>00620 
+<a name="l00621"></a><a class="code" href="a00166.html#53d2615ad9c38859b4c8080936600283">00621</a>     <span class="keywordtype">void</span> wait_for_all() {
+<a name="l00622"></a>00622 <span class="preprocessor">#if !__TBB_RELAXED_OWNERSHIP</span>
+<a name="l00623"></a>00623 <span class="preprocessor"></span>        __TBB_ASSERT( is_owned_by_current_thread(), <span class="stringliteral">"'this' not owned by current thread"</span> );
+<a name="l00624"></a>00624 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_RELAXED_OWNERSHIP */</span>
+<a name="l00625"></a>00625         prefix().owner-&gt;wait_for_all( *<span class="keyword">this</span>, NULL );
+<a name="l00626"></a>00626     }
+<a name="l00627"></a>00627 
+<a name="l00629"></a>00629     <span class="keyword">static</span> <a class="code" href="a00166.html">task</a>&amp; __TBB_EXPORTED_FUNC <span class="keyword">self</span>();
+<a name="l00630"></a>00630 
+<a name="l00632"></a><a class="code" href="a00166.html#314e98ee4347ccec83efcb9ee22e8596">00632</a>     <a class="code" href="a00166.html">task</a>* parent()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().parent;}
+<a name="l00633"></a>00633 
+<a name="l00634"></a>00634 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00636"></a><a class="code" href="a00166.html#d8c36a93f3972590fbb65ff1cef3173b">00636</a> <span class="preprocessor">    task_group_context* context() {return prefix().context;}</span>
+<a name="l00637"></a>00637 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>   
+<a name="l00638"></a>00638 
+<a name="l00640"></a><a class="code" href="a00166.html#f9169402702f56bf519448aaf34450aa">00640</a>     <span class="keywordtype">bool</span> is_stolen_task()<span class="keyword"> const </span>{
+<a name="l00641"></a>00641 <span class="preprocessor">#if __TBB_PROVIDE_VIRTUAL_SCHEDULER</span>
+<a name="l00642"></a>00642 <span class="preprocessor"></span>        <span class="comment">// The virtual scheduler directly identifies stolen tasks.</span>
+<a name="l00643"></a>00643         <span class="keywordtype">int</span> es_virtual_steal = 4;
+<a name="l00644"></a>00644         <span class="keywordflow">if</span>(prefix().extra_state &amp; es_virtual_steal)
+<a name="l00645"></a>00645             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00646"></a>00646 <span class="preprocessor">#endif </span><span class="comment">/* TBB_PROVIDE_VIRTUAL_SCHEDULER */</span>
+<a name="l00647"></a>00647         internal::task_prefix&amp; p = prefix();
+<a name="l00648"></a>00648         internal::task_prefix&amp; q = parent()-&gt;prefix();
+<a name="l00649"></a>00649         <span class="keywordflow">return</span> p.owner!=q.owner;
+<a name="l00650"></a>00650     }
+<a name="l00651"></a>00651 
+<a name="l00652"></a>00652     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00653"></a>00653     <span class="comment">// Debugging</span>
+<a name="l00654"></a>00654     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00655"></a>00655 
+<a name="l00657"></a><a class="code" href="a00166.html#0af7b2d7e6e8b4333b2accfce3dfb374">00657</a>     <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a> state()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00166.html#4a3c415562d17905390ea5b49d12293e">state_type</a>(prefix().state);}
+<a name="l00658"></a>00658 
+<a name="l00660"></a><a class="code" href="a00166.html#ad774f55eaec008ae02b236423209ced">00660</a>     <span class="keywordtype">int</span> ref_count()<span class="keyword"> const </span>{
+<a name="l00661"></a>00661 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00662"></a>00662 <span class="preprocessor"></span>        internal::reference_count ref_count = prefix().ref_count;
+<a name="l00663"></a>00663         __TBB_ASSERT( ref_count==<span class="keywordtype">int</span>(ref_count), <span class="stringliteral">"integer overflow error"</span>);
+<a name="l00664"></a>00664 <span class="preprocessor">#endif</span>
+<a name="l00665"></a>00665 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(prefix().ref_count);
+<a name="l00666"></a>00666     }
+<a name="l00667"></a>00667 
+<a name="l00669"></a>00669     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD is_owned_by_current_thread() <span class="keyword">const</span>;
+<a name="l00670"></a>00670 
+<a name="l00671"></a>00671     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00672"></a>00672     <span class="comment">// Affinity</span>
+<a name="l00673"></a>00673     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00674"></a>00674  
+<a name="l00676"></a>00676 
+<a name="l00677"></a><a class="code" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">00677</a>     <span class="keyword">typedef</span> internal::affinity_id affinity_id;
+<a name="l00678"></a>00678 
+<a name="l00680"></a><a class="code" href="a00166.html#dca19d7a45487a7d67a0db517e2b57c9">00680</a>     <span class="keywordtype">void</span> set_affinity( affinity_id <span class="keywordtype">id</span> ) {prefix().affinity = id;}
+<a name="l00681"></a>00681 
+<a name="l00683"></a><a class="code" href="a00166.html#3a920a56b0bcf2801518fb45b2c9d2be">00683</a>     affinity_id affinity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().affinity;}
+<a name="l00684"></a>00684 
+<a name="l00686"></a>00686 
+<a name="l00690"></a>00690     <span class="keyword">virtual</span> <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD note_affinity( affinity_id <span class="keywordtype">id</span> );
+<a name="l00691"></a>00691 
+<a name="l00692"></a>00692 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00694"></a>00694 <span class="preprocessor"></span>
+<a name="l00695"></a><a class="code" href="a00166.html#0f3fb4aac549ab642022450a4bd13326">00695</a> <span class="preprocessor">    bool cancel_group_execution () { return prefix().context-&gt;cancel_group_execution(); }</span>
+<a name="l00696"></a>00696 <span class="preprocessor"></span>
+<a name="l00698"></a><a class="code" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">00698</a>     <span class="keywordtype">bool</span> is_cancelled ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> prefix().context-&gt;is_group_execution_cancelled(); }
+<a name="l00699"></a>00699 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00700"></a>00700 
+<a name="l00701"></a>00701 <span class="keyword">private</span>:
+<a name="l00702"></a>00702     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00168.html">task_list</a>;
+<a name="l00703"></a>00703     <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
+<a name="l00704"></a>00704     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
+<a name="l00705"></a>00705 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00706"></a>00706 <span class="preprocessor"></span>    <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
+<a name="l00707"></a>00707 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00708"></a>00708     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
+<a name="l00709"></a>00709     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
+<a name="l00710"></a>00710     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
+<a name="l00711"></a>00711     
+<a name="l00712"></a>00712     <span class="keyword">friend</span> <span class="keyword">class </span>internal::task_group_base;
+<a name="l00713"></a>00713 
+<a name="l00715"></a>00715 
+<a name="l00716"></a>00716     internal::task_prefix&amp; prefix( internal::version_tag* = NULL )<span class="keyword"> const </span>{
+<a name="l00717"></a>00717         <span class="keywordflow">return</span> reinterpret_cast&lt;internal::task_prefix*&gt;(const_cast&lt;task*&gt;(<span class="keyword">this</span>))[-1];
+<a name="l00718"></a>00718     }
+<a name="l00719"></a>00719 }; <span class="comment">// class task</span>
+<a name="l00720"></a>00720 
+<a name="l00722"></a>00722 
+<a name="l00723"></a><a class="code" href="a00137.html">00723</a> <span class="keyword">class </span><a class="code" href="a00137.html">empty_task</a>: <span class="keyword">public</span> <a class="code" href="a00166.html">task</a> {
+<a name="l00724"></a>00724     <span class="comment">/*override*/</span> <a class="code" href="a00166.html">task</a>* execute() {
+<a name="l00725"></a>00725         <span class="keywordflow">return</span> NULL;
+<a name="l00726"></a>00726     }
+<a name="l00727"></a>00727 };
+<a name="l00728"></a>00728 
+<a name="l00730"></a>00730 
+<a name="l00732"></a><a class="code" href="a00168.html">00732</a> <span class="keyword">class </span><a class="code" href="a00168.html">task_list</a>: internal::no_copy {
+<a name="l00733"></a>00733 <span class="keyword">private</span>:
+<a name="l00734"></a>00734     <a class="code" href="a00166.html">task</a>* first;
+<a name="l00735"></a>00735     <a class="code" href="a00166.html">task</a>** next_ptr;
+<a name="l00736"></a>00736     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00166.html">task</a>;
+<a name="l00737"></a>00737 <span class="keyword">public</span>:
+<a name="l00739"></a><a class="code" href="a00168.html#416341c2047eaef50417b41eaf7e9de6">00739</a>     <a class="code" href="a00168.html">task_list</a>() : first(NULL), next_ptr(&amp;first) {}
+<a name="l00740"></a>00740 
+<a name="l00742"></a><a class="code" href="a00168.html#6d438f1499a02db1e59c24ab6043e5ba">00742</a>     ~<a class="code" href="a00168.html">task_list</a>() {}
+<a name="l00743"></a>00743 
+<a name="l00745"></a><a class="code" href="a00168.html#f3ac31e092814b90929f81bb30441959">00745</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !first;}
+<a name="l00746"></a>00746 
+<a name="l00748"></a><a class="code" href="a00168.html#4cd34756bc4763dafb8c84838a0124ff">00748</a>     <span class="keywordtype">void</span> push_back( <a class="code" href="a00166.html">task</a>&amp; <a class="code" href="a00166.html">task</a> ) {
+<a name="l00749"></a>00749         task.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next = NULL;
+<a name="l00750"></a>00750         *next_ptr = &amp;task;
+<a name="l00751"></a>00751         next_ptr = &amp;task.<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
+<a name="l00752"></a>00752     }
+<a name="l00753"></a>00753 
+<a name="l00755"></a><a class="code" href="a00168.html#5fe85df5ed524418389d34051750347d">00755</a>     <a class="code" href="a00166.html">task</a>&amp; pop_front() {
+<a name="l00756"></a>00756         __TBB_ASSERT( !empty(), <span class="stringliteral">"attempt to pop item from empty task_list"</span> );
+<a name="l00757"></a>00757         <a class="code" href="a00166.html">task</a>* result = first;
+<a name="l00758"></a>00758         first = result-&gt;<a class="code" href="a00166.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
+<a name="l00759"></a>00759         <span class="keywordflow">if</span>( !first ) next_ptr = &amp;first;
+<a name="l00760"></a>00760         <span class="keywordflow">return</span> *result;
+<a name="l00761"></a>00761     }
+<a name="l00762"></a>00762 
+<a name="l00764"></a><a class="code" href="a00168.html#fce446ee13e025969945328f3ff59b95">00764</a>     <span class="keywordtype">void</span> clear() {
+<a name="l00765"></a>00765         first=NULL;
+<a name="l00766"></a>00766         next_ptr=&amp;first;
+<a name="l00767"></a>00767     }
+<a name="l00768"></a>00768 };
+<a name="l00769"></a>00769 
+<a name="l00770"></a><a class="code" href="a00166.html#db841c647eb6d754440c2f4e4a73c80b">00770</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> task::spawn( <a class="code" href="a00168.html">task_list</a>&amp; list ) {
+<a name="l00771"></a>00771 <span class="preprocessor">#if !__TBB_RELAXED_OWNERSHIP</span>
+<a name="l00772"></a>00772 <span class="preprocessor"></span>    __TBB_ASSERT( <a class="code" href="a00166.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>(), <span class="stringliteral">"'this' not owned by current thread"</span> );
+<a name="l00773"></a>00773 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_RELAXED_OWNERSHIP */</span>
+<a name="l00774"></a>00774     <span class="keywordflow">if</span>( <a class="code" href="a00166.html">task</a>* t = list.<a class="code" href="a00168.html#78fcc389819ee34427d510f7d8cb8b1e">first</a> ) {
+<a name="l00775"></a>00775         prefix().owner-&gt;spawn( *t, *list.<a class="code" href="a00168.html#21553a32bcd08f980aa28f61254307da">next_ptr</a> );
+<a name="l00776"></a>00776         list.<a class="code" href="a00168.html#fce446ee13e025969945328f3ff59b95">clear</a>();
+<a name="l00777"></a>00777     }
+<a name="l00778"></a>00778 }
+<a name="l00779"></a>00779 
+<a name="l00780"></a><a class="code" href="a00166.html#c33c7edbaec67aa8a56f48986a9dc69f">00780</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00166.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( <a class="code" href="a00168.html">task_list</a>&amp; root_list ) {
+<a name="l00781"></a>00781     <span class="keywordflow">if</span>( <a class="code" href="a00166.html">task</a>* t = root_list.<a class="code" href="a00168.html#78fcc389819ee34427d510f7d8cb8b1e">first</a> ) {
+<a name="l00782"></a>00782 <span class="preprocessor">#if !__TBB_RELAXED_OWNERSHIP</span>
+<a name="l00783"></a>00783 <span class="preprocessor"></span>        __TBB_ASSERT( t-&gt;is_owned_by_current_thread(), <span class="stringliteral">"'this' not owned by current thread"</span> );
+<a name="l00784"></a>00784 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_RELAXED_OWNERSHIP */</span>
+<a name="l00785"></a>00785         t-&gt;prefix().owner-&gt;spawn_root_and_wait( *t, *root_list.<a class="code" href="a00168.html#21553a32bcd08f980aa28f61254307da">next_ptr</a> );
+<a name="l00786"></a>00786         root_list.<a class="code" href="a00168.html#fce446ee13e025969945328f3ff59b95">clear</a>();
+<a name="l00787"></a>00787     }
+<a name="l00788"></a>00788 }
+<a name="l00789"></a>00789 
+<a name="l00790"></a>00790 } <span class="comment">// namespace tbb</span>
+<a name="l00791"></a>00791 
+<a name="l00792"></a>00792 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_root_proxy&amp; ) {
+<a name="l00793"></a>00793     <span class="keywordflow">return</span> &amp;tbb::internal::allocate_root_proxy::allocate(bytes);
+<a name="l00794"></a>00794 }
+<a name="l00795"></a>00795 
+<a name="l00796"></a>00796 <span class="keyword">inline</span> <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* task, <span class="keyword">const</span> tbb::internal::allocate_root_proxy&amp; ) {
+<a name="l00797"></a>00797     tbb::internal::allocate_root_proxy::free( *static_cast&lt;tbb::task*&gt;(task) );
+<a name="l00798"></a>00798 }
+<a name="l00799"></a>00799 
+<a name="l00800"></a>00800 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00801"></a>00801 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_root_with_context_proxy&amp; p ) {
+<a name="l00802"></a>00802     <span class="keywordflow">return</span> &amp;p.allocate(bytes);
+<a name="l00803"></a>00803 }
+<a name="l00804"></a>00804 
+<a name="l00805"></a>00805 <span class="keyword">inline</span> <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* task, <span class="keyword">const</span> tbb::internal::allocate_root_with_context_proxy&amp; p ) {
+<a name="l00806"></a>00806     p.free( *static_cast&lt;tbb::task*&gt;(task) );
+<a name="l00807"></a>00807 }
+<a name="l00808"></a>00808 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00809"></a>00809 
+<a name="l00810"></a>00810 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_continuation_proxy&amp; p ) {
+<a name="l00811"></a>00811     <span class="keywordflow">return</span> &amp;p.allocate(bytes);
+<a name="l00812"></a>00812 }
+<a name="l00813"></a>00813 
+<a name="l00814"></a>00814 <span class="keyword">inline</span> <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* task, <span class="keyword">const</span> tbb::internal::allocate_continuation_proxy&amp; p ) {
+<a name="l00815"></a>00815     p.free( *static_cast&lt;tbb::task*&gt;(task) );
+<a name="l00816"></a>00816 }
+<a name="l00817"></a>00817 
+<a name="l00818"></a>00818 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_child_proxy&amp; p ) {
+<a name="l00819"></a>00819     <span class="keywordflow">return</span> &amp;p.allocate(bytes);
+<a name="l00820"></a>00820 }
+<a name="l00821"></a>00821 
+<a name="l00822"></a>00822 <span class="keyword">inline</span> <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* task, <span class="keyword">const</span> tbb::internal::allocate_child_proxy&amp; p ) {
+<a name="l00823"></a>00823     p.free( *static_cast&lt;tbb::task*&gt;(task) );
+<a name="l00824"></a>00824 }
+<a name="l00825"></a>00825 
+<a name="l00826"></a>00826 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_additional_child_of_proxy&amp; p ) {
+<a name="l00827"></a>00827     <span class="keywordflow">return</span> &amp;p.allocate(bytes);
+<a name="l00828"></a>00828 }
+<a name="l00829"></a>00829 
+<a name="l00830"></a>00830 <span class="keyword">inline</span> <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* task, <span class="keyword">const</span> tbb::internal::allocate_additional_child_of_proxy&amp; p ) {
+<a name="l00831"></a>00831     p.free( *static_cast&lt;tbb::task*&gt;(task) );
+<a name="l00832"></a>00832 }
+<a name="l00833"></a>00833 
+<a name="l00834"></a>00834 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00363.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00363.html
new file mode 100644 (file)
index 0000000..fa6ff88
--- /dev/null
@@ -0,0 +1,249 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>task_group.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>task_group.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_task_group_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_task_group_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "task.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F&gt;
+<a name="l00029"></a>00029 <span class="keyword">class </span>task_handle {
+<a name="l00030"></a>00030     F my_func;
+<a name="l00031"></a>00031 
+<a name="l00032"></a>00032 <span class="keyword">public</span>:
+<a name="l00033"></a>00033     task_handle( <span class="keyword">const</span> F&amp; f ) : my_func(f) {}
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035     <span class="keywordtype">void</span> operator()() { my_func(); }
+<a name="l00036"></a>00036 };
+<a name="l00037"></a>00037 
+<a name="l00038"></a>00038 <span class="keyword">enum</span> task_group_status {
+<a name="l00039"></a>00039     not_complete,
+<a name="l00040"></a>00040     complete,
+<a name="l00041"></a>00041     canceled
+<a name="l00042"></a>00042 };
+<a name="l00043"></a>00043 
+<a name="l00044"></a>00044 <span class="keyword">namespace </span>internal {
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046 <span class="comment">// Suppress gratuitous warnings from icc 11.0 when lambda expressions are used in instances of function_task.</span>
+<a name="l00047"></a>00047 <span class="comment">//#pragma warning(disable: 588)</span>
+<a name="l00048"></a>00048 
+<a name="l00049"></a>00049 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F&gt;
+<a name="l00050"></a>00050 <span class="keyword">class </span>function_task : <span class="keyword">public</span> task {
+<a name="l00051"></a>00051     F my_func;
+<a name="l00052"></a>00052     <span class="comment">/*override*/</span> <a class="code" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
+<a name="l00053"></a>00053         my_func();
+<a name="l00054"></a>00054         <span class="keywordflow">return</span> NULL;
+<a name="l00055"></a>00055     }
+<a name="l00056"></a>00056 <span class="keyword">public</span>:
+<a name="l00057"></a>00057     function_task( <span class="keyword">const</span> F&amp; f ) : my_func(f) {}
+<a name="l00058"></a>00058 };
+<a name="l00059"></a>00059 
+<a name="l00060"></a>00060 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F&gt;
+<a name="l00061"></a>00061 <span class="keyword">class </span>task_handle_task : <span class="keyword">public</span> task {
+<a name="l00062"></a>00062     task_handle&lt;F&gt;&amp; my_handle;
+<a name="l00063"></a>00063     <span class="comment">/*override*/</span> <a class="code" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
+<a name="l00064"></a>00064         my_handle();
+<a name="l00065"></a>00065         <span class="keywordflow">return</span> NULL;
+<a name="l00066"></a>00066     }
+<a name="l00067"></a>00067 <span class="keyword">public</span>:
+<a name="l00068"></a>00068     task_handle_task( task_handle&lt;F&gt;&amp; h ) : my_handle(h) {}
+<a name="l00069"></a>00069 };
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071 <span class="keyword">class </span>task_group_base : internal::no_copy {
+<a name="l00072"></a>00072 <span class="keyword">protected</span>:
+<a name="l00073"></a>00073     empty_task* my_root;
+<a name="l00074"></a>00074     task_group_context my_context;
+<a name="l00075"></a>00075 
+<a name="l00076"></a>00076 <span class="preprocessor">#if __TBB_RELAXED_OWNERSHIP</span>
+<a name="l00077"></a>00077 <span class="preprocessor"></span>    task&amp; owner () { <span class="keywordflow">return</span> *my_root; }
+<a name="l00078"></a>00078 <span class="preprocessor">#else</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span>    task&amp; owner () { <span class="keywordflow">return</span> <a class="code" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>(); }
+<a name="l00080"></a>00080 <span class="preprocessor">#endif</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span>
+<a name="l00082"></a>00082     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F&gt;
+<a name="l00083"></a>00083     task_group_status internal_run_and_wait( F&amp; f ) {
+<a name="l00084"></a>00084         <span class="keywordflow">try</span> {
+<a name="l00085"></a>00085             <span class="keywordflow">if</span> ( !my_context.is_group_execution_cancelled() )
+<a name="l00086"></a>00086                 f();
+<a name="l00087"></a>00087         } <span class="keywordflow">catch</span> ( ... ) {
+<a name="l00088"></a>00088             my_context.register_pending_exception();
+<a name="l00089"></a>00089         }
+<a name="l00090"></a>00090         <span class="keywordflow">return</span> wait();
+<a name="l00091"></a>00091     }
+<a name="l00092"></a>00092 
+<a name="l00093"></a>00093     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F, <span class="keyword">typename</span> Task&gt;
+<a name="l00094"></a>00094     <span class="keywordtype">void</span> internal_run( F&amp; f ) {
+<a name="l00095"></a>00095         owner().spawn( *<span class="keyword">new</span>( owner().allocate_additional_child_of(*my_root) ) Task(f) );
+<a name="l00096"></a>00096     }
+<a name="l00097"></a>00097 
+<a name="l00098"></a>00098 <span class="keyword">public</span>:
+<a name="l00099"></a>00099     task_group_base( uintptr_t traits = 0 )
+<a name="l00100"></a>00100         : my_context(task_group_context::bound, task_group_context::default_traits | traits)
+<a name="l00101"></a>00101     {
+<a name="l00102"></a>00102         my_root = <span class="keyword">new</span>( <a class="code" href="a00166.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(my_context) ) empty_task;
+<a name="l00103"></a>00103         my_root-&gt;set_ref_count(1);
+<a name="l00104"></a>00104     }
+<a name="l00105"></a>00105 
+<a name="l00106"></a>00106     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F&gt;
+<a name="l00107"></a>00107     <span class="keywordtype">void</span> run( task_handle&lt;F&gt;&amp; h ) {
+<a name="l00108"></a>00108         internal_run&lt; task_handle&lt;F&gt;, internal::task_handle_task&lt;F&gt; &gt;( h );
+<a name="l00109"></a>00109     }
+<a name="l00110"></a>00110 
+<a name="l00111"></a>00111     task_group_status wait() {
+<a name="l00112"></a>00112         <span class="keywordflow">try</span> {
+<a name="l00113"></a>00113             owner().prefix().owner-&gt;wait_for_all( *my_root, NULL );
+<a name="l00114"></a>00114         } <span class="keywordflow">catch</span> ( ... ) {
+<a name="l00115"></a>00115             my_context.reset();
+<a name="l00116"></a>00116             <span class="keywordflow">throw</span>;
+<a name="l00117"></a>00117         }
+<a name="l00118"></a>00118         <span class="keywordflow">if</span> ( my_context.is_group_execution_cancelled() ) {
+<a name="l00119"></a>00119             my_context.reset();
+<a name="l00120"></a>00120             <span class="keywordflow">return</span> canceled;
+<a name="l00121"></a>00121         }
+<a name="l00122"></a>00122         <span class="keywordflow">return</span> complete;
+<a name="l00123"></a>00123     }
+<a name="l00124"></a>00124 
+<a name="l00125"></a>00125     <span class="keywordtype">bool</span> is_canceling() {
+<a name="l00126"></a>00126         <span class="keywordflow">return</span> my_context.is_group_execution_cancelled();
+<a name="l00127"></a>00127     }
+<a name="l00128"></a>00128 
+<a name="l00129"></a>00129     <span class="keywordtype">void</span> cancel() {
+<a name="l00130"></a>00130         my_context.cancel_group_execution();
+<a name="l00131"></a>00131     }
+<a name="l00132"></a>00132 }; <span class="comment">// class task_group_base</span>
+<a name="l00133"></a>00133 
+<a name="l00134"></a>00134 } <span class="comment">// namespace internal</span>
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136 <span class="keyword">class </span>task_group : <span class="keyword">public</span> internal::task_group_base {
+<a name="l00137"></a>00137 <span class="keyword">public</span>:
+<a name="l00138"></a>00138     task_group () : task_group_base( task_group_context::concurrent_wait ) {}
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140     ~task_group() <span class="keyword">try</span> {
+<a name="l00141"></a>00141         __TBB_ASSERT( my_root-&gt;ref_count() != 0, NULL );
+<a name="l00142"></a>00142         <span class="keywordflow">if</span>( my_root-&gt;ref_count() &gt; 1 )
+<a name="l00143"></a>00143             my_root-&gt;wait_for_all();
+<a name="l00144"></a>00144         owner().destroy(*my_root);
+<a name="l00145"></a>00145     }
+<a name="l00146"></a>00146     <span class="keywordflow">catch</span> (...) {
+<a name="l00147"></a>00147         owner().destroy(*my_root);
+<a name="l00148"></a>00148         <span class="keywordflow">throw</span>;
+<a name="l00149"></a>00149     }
+<a name="l00150"></a>00150 
+<a name="l00151"></a>00151 <span class="preprocessor">#if __SUNPRO_CC</span>
+<a name="l00152"></a>00152 <span class="preprocessor"></span>    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F&gt;
+<a name="l00153"></a>00153     <span class="keywordtype">void</span> run( task_handle&lt;F&gt;&amp; h ) {
+<a name="l00154"></a>00154         internal_run&lt; task_handle&lt;F&gt;, internal::task_handle_task&lt;F&gt; &gt;( h );
+<a name="l00155"></a>00155     }
+<a name="l00156"></a>00156 <span class="preprocessor">#else</span>
+<a name="l00157"></a>00157 <span class="preprocessor"></span>    <span class="keyword">using</span> task_group_base::run;
+<a name="l00158"></a>00158 <span class="preprocessor">#endif</span>
+<a name="l00159"></a>00159 <span class="preprocessor"></span>
+<a name="l00160"></a>00160     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F&gt;
+<a name="l00161"></a>00161     <span class="keywordtype">void</span> run( <span class="keyword">const</span> F&amp; f ) {
+<a name="l00162"></a>00162         internal_run&lt; const F, internal::function_task&lt;F&gt; &gt;( f );
+<a name="l00163"></a>00163     }
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F&gt;
+<a name="l00166"></a>00166     task_group_status run_and_wait( <span class="keyword">const</span> F&amp; f ) {
+<a name="l00167"></a>00167         <span class="keywordflow">return</span> internal_run_and_wait&lt;const F&gt;( f );
+<a name="l00168"></a>00168     }
+<a name="l00169"></a>00169 
+<a name="l00170"></a>00170     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F&gt;
+<a name="l00171"></a>00171     task_group_status run_and_wait( F&amp; f ) {
+<a name="l00172"></a>00172         <span class="keywordflow">return</span> internal_run_and_wait&lt;F&gt;( f );
+<a name="l00173"></a>00173     }
+<a name="l00174"></a>00174 
+<a name="l00175"></a>00175 }; <span class="comment">// class task_group</span>
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177 <span class="keyword">class </span>missing_wait : <span class="keyword">public</span> std::exception {
+<a name="l00178"></a>00178 <span class="keyword">public</span>:
+<a name="l00179"></a>00179     <span class="comment">/*override*/</span> 
+<a name="l00180"></a>00180     <span class="keyword">const</span> <span class="keywordtype">char</span>* what() const throw() { <span class="keywordflow">return</span> <span class="stringliteral">"wait() was not called on the structured_task_group"</span>; }
+<a name="l00181"></a>00181 };
+<a name="l00182"></a>00182 
+<a name="l00183"></a>00183 <span class="keyword">class </span>structured_task_group : <span class="keyword">public</span> internal::task_group_base {
+<a name="l00184"></a>00184 <span class="keyword">public</span>:
+<a name="l00185"></a>00185     ~structured_task_group() {
+<a name="l00186"></a>00186         <span class="keywordflow">if</span>( my_root-&gt;ref_count() &gt; 1 ) {
+<a name="l00187"></a>00187             <span class="keywordtype">bool</span> stack_unwinding_in_progress = std::uncaught_exception();
+<a name="l00188"></a>00188             <span class="comment">// Always attempt to do proper cleanup to avoid inevitable memory corruption </span>
+<a name="l00189"></a>00189             <span class="comment">// in case of missing wait (for the sake of better testability &amp; debuggability)</span>
+<a name="l00190"></a>00190             <span class="keywordflow">if</span> ( !is_canceling() )
+<a name="l00191"></a>00191                 cancel();
+<a name="l00192"></a>00192             my_root-&gt;wait_for_all();
+<a name="l00193"></a>00193             owner().destroy(*my_root);
+<a name="l00194"></a>00194             <span class="keywordflow">if</span> ( !stack_unwinding_in_progress )
+<a name="l00195"></a>00195                 <span class="keywordflow">throw</span> missing_wait();
+<a name="l00196"></a>00196         }
+<a name="l00197"></a>00197         <span class="keywordflow">else</span>
+<a name="l00198"></a>00198             owner().destroy(*my_root);
+<a name="l00199"></a>00199     }
+<a name="l00200"></a>00200 
+<a name="l00201"></a>00201     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F&gt;
+<a name="l00202"></a>00202     task_group_status run_and_wait ( task_handle&lt;F&gt;&amp; h ) {
+<a name="l00203"></a>00203         <span class="keywordflow">return</span> internal_run_and_wait&lt; task_handle&lt;F&gt; &gt;( h );
+<a name="l00204"></a>00204     }
+<a name="l00205"></a>00205 
+<a name="l00206"></a>00206     task_group_status wait() {
+<a name="l00207"></a>00207         __TBB_ASSERT ( my_root-&gt;ref_count() != 0, <span class="stringliteral">"wait() can be called only once during the structured_task_group lifetime"</span> );
+<a name="l00208"></a>00208         <span class="keywordflow">return</span> task_group_base::wait();
+<a name="l00209"></a>00209     }
+<a name="l00210"></a>00210 }; <span class="comment">// class structured_task_group</span>
+<a name="l00211"></a>00211 
+<a name="l00212"></a>00212 <span class="keyword">inline</span> 
+<a name="l00213"></a>00213 <span class="keywordtype">bool</span> is_current_task_group_canceling() {
+<a name="l00214"></a>00214     <span class="keywordflow">return</span> <a class="code" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().<a class="code" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>();
+<a name="l00215"></a>00215 }
+<a name="l00216"></a>00216 
+<a name="l00217"></a>00217 } <span class="comment">// namespace tbb</span>
+<a name="l00218"></a>00218 
+<a name="l00219"></a>00219 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_group_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00371.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00371.html
new file mode 100644 (file)
index 0000000..c63fa9c
--- /dev/null
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>task_scheduler_init.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>task_scheduler_init.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_task_scheduler_init_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_task_scheduler_init_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="keyword">namespace </span>tbb {
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">typedef</span> std::size_t stack_size_type;
+<a name="l00029"></a>00029 
+<a name="l00031"></a>00031 <span class="keyword">namespace </span>internal {
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034     <span class="keyword">class </span>scheduler;
+<a name="l00035"></a>00035 } <span class="comment">// namespace internal</span>
+<a name="l00037"></a>00037 <span class="comment"></span>
+<a name="l00039"></a>00039 
+<a name="l00042"></a><a class="code" href="a00169.html">00042</a> <span class="keyword">class </span><a class="code" href="a00169.html">task_scheduler_init</a>: internal::no_copy {
+<a name="l00044"></a>00044     internal::scheduler* my_scheduler;
+<a name="l00045"></a>00045 <span class="keyword">public</span>:
+<a name="l00046"></a>00046 
+<a name="l00048"></a><a class="code" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">00048</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> = -1;
+<a name="l00049"></a>00049 
+<a name="l00051"></a><a class="code" href="a00169.html#e6c860f1e559026ff3ef4599c0d6c514">00051</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00169.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a> = -2;
+<a name="l00052"></a>00052 
+<a name="l00054"></a>00054 
+<a name="l00062"></a>00062     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00169.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> );
+<a name="l00063"></a>00063 
+<a name="l00065"></a>00065 
+<a name="l00066"></a>00066     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00169.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads, stack_size_type thread_stack_size );
+<a name="l00067"></a>00067 
+<a name="l00069"></a>00069     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00169.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
+<a name="l00070"></a>00070 
+<a name="l00072"></a><a class="code" href="a00169.html#421600bf9bf9338bcf937063f2ff0e90">00072</a>     <a class="code" href="a00169.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)  {
+<a name="l00073"></a>00073         <a class="code" href="a00169.html#d476053cc712e572554823492a5229ce">initialize</a>( number_of_threads, thread_stack_size );
+<a name="l00074"></a>00074     }
+<a name="l00075"></a>00075 
+<a name="l00077"></a><a class="code" href="a00169.html#4da6c86292d80c703a66c1f6f5299488">00077</a>     <a class="code" href="a00169.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>() {
+<a name="l00078"></a>00078         <span class="keywordflow">if</span>( my_scheduler ) 
+<a name="l00079"></a>00079             <a class="code" href="a00169.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
+<a name="l00080"></a>00080         internal::poison_pointer( my_scheduler );
+<a name="l00081"></a>00081     }
+<a name="l00083"></a>00083 
+<a name="l00090"></a>00090     <span class="keyword">static</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00169.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a> ();
+<a name="l00091"></a>00091 
+<a name="l00093"></a><a class="code" href="a00169.html#12752282977029f23416642bc03e8b74">00093</a>     <span class="keywordtype">bool</span> <a class="code" href="a00169.html#12752282977029f23416642bc03e8b74">is_active</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_scheduler != NULL; }
+<a name="l00094"></a>00094 };
+<a name="l00095"></a>00095 
+<a name="l00096"></a>00096 } <span class="comment">// namespace tbb</span>
+<a name="l00097"></a>00097 
+<a name="l00098"></a>00098 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_scheduler_init_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00372.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00372.html
new file mode 100644 (file)
index 0000000..87886d1
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>task_scheduler_observer.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>task_scheduler_observer.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_task_scheduler_observer_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_task_scheduler_observer_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="preprocessor">#if __TBB_SCHEDULER_OBSERVER</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
+<a name="l00029"></a>00029 
+<a name="l00030"></a>00030 <span class="keyword">namespace </span>internal {
+<a name="l00031"></a>00031 
+<a name="l00032"></a>00032 <span class="keyword">class </span>observer_proxy;
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034 <span class="keyword">class </span>task_scheduler_observer_v3 {
+<a name="l00035"></a>00035     <span class="keyword">friend</span> <span class="keyword">class </span>observer_proxy;
+<a name="l00036"></a>00036     observer_proxy* my_proxy;
+<a name="l00037"></a>00037     atomic&lt;intptr&gt; my_busy_count;
+<a name="l00038"></a>00038 <span class="keyword">public</span>:
+<a name="l00040"></a>00040     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD observe( <span class="keywordtype">bool</span> state=<span class="keyword">true</span> );
+<a name="l00041"></a>00041 
+<a name="l00043"></a>00043     <span class="keywordtype">bool</span> is_observing()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_proxy!=NULL;}
+<a name="l00044"></a>00044 
+<a name="l00046"></a>00046     task_scheduler_observer_v3() : my_proxy(NULL) {my_busy_count=0;}
+<a name="l00047"></a>00047 
+<a name="l00049"></a>00049     <span class="keyword">virtual</span> <span class="keywordtype">void</span> on_scheduler_entry( <span class="keywordtype">bool</span> <span class="comment">/*is_worker*/</span> ) {} 
+<a name="l00050"></a>00050 
+<a name="l00052"></a>00052     <span class="keyword">virtual</span> <span class="keywordtype">void</span> on_scheduler_exit( <span class="keywordtype">bool</span> <span class="comment">/*is_worker*/</span> ) {}
+<a name="l00053"></a>00053 
+<a name="l00055"></a>00055     <span class="keyword">virtual</span> ~task_scheduler_observer_v3() {observe(<span class="keyword">false</span>);}
+<a name="l00056"></a>00056 };
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058 } <span class="comment">// namespace internal</span>
+<a name="l00059"></a>00059 
+<a name="l00060"></a>00060 <span class="keyword">typedef</span> internal::task_scheduler_observer_v3 task_scheduler_observer;
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062 } <span class="comment">// namespace tbb</span>
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_SCHEDULER_OBSERVER */</span>
+<a name="l00065"></a>00065 
+<a name="l00066"></a>00066 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_scheduler_observer_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00374.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00374.html
new file mode 100644 (file)
index 0000000..3de030a
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include "blocked_range.h"</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include "blocked_range2d.h"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "blocked_range3d.h"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "concurrent_hash_map.h"</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include "concurrent_queue.h"</span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include "concurrent_vector.h"</span>
+<a name="l00041"></a>00041 <span class="preprocessor">#include "enumerable_thread_specific.h"</span>
+<a name="l00042"></a>00042 <span class="preprocessor">#include "mutex.h"</span>
+<a name="l00043"></a>00043 <span class="preprocessor">#include "null_mutex.h"</span>
+<a name="l00044"></a>00044 <span class="preprocessor">#include "null_rw_mutex.h"</span>
+<a name="l00045"></a>00045 <span class="preprocessor">#include "parallel_do.h"</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#include "parallel_for.h"</span>
+<a name="l00047"></a>00047 <span class="preprocessor">#include "parallel_for_each.h"</span>
+<a name="l00048"></a>00048 <span class="preprocessor">#include "parallel_invoke.h"</span>
+<a name="l00049"></a>00049 <span class="preprocessor">#include "parallel_reduce.h"</span>
+<a name="l00050"></a>00050 <span class="preprocessor">#include "parallel_scan.h"</span>
+<a name="l00051"></a>00051 <span class="preprocessor">#include "parallel_sort.h"</span>
+<a name="l00052"></a>00052 <span class="preprocessor">#include "partitioner.h"</span>
+<a name="l00053"></a>00053 <span class="preprocessor">#include "pipeline.h"</span>
+<a name="l00054"></a>00054 <span class="preprocessor">#include "queuing_mutex.h"</span>
+<a name="l00055"></a>00055 <span class="preprocessor">#include "queuing_rw_mutex.h"</span>
+<a name="l00056"></a>00056 <span class="preprocessor">#include "recursive_mutex.h"</span>
+<a name="l00057"></a>00057 <span class="preprocessor">#include "spin_mutex.h"</span>
+<a name="l00058"></a>00058 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
+<a name="l00059"></a>00059 <span class="preprocessor">#include "task.h"</span>
+<a name="l00060"></a>00060 <span class="preprocessor">#include "task_group.h"</span>
+<a name="l00061"></a>00061 <span class="preprocessor">#include "task_scheduler_init.h"</span>
+<a name="l00062"></a>00062 <span class="preprocessor">#include "task_scheduler_observer.h"</span>
+<a name="l00063"></a>00063 <span class="preprocessor">#include "tbb_allocator.h"</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00065"></a>00065 <span class="preprocessor">#include "tbb_thread.h"</span>
+<a name="l00066"></a>00066 <span class="preprocessor">#include "tick_count.h"</span>
+<a name="l00067"></a>00067 
+<a name="l00068"></a>00068 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00375.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00375.html
new file mode 100644 (file)
index 0000000..051ae73
--- /dev/null
@@ -0,0 +1,201 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb_allocator.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb_allocator.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_allocator_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_allocator_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;new&gt;</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;cstring&gt;</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
+<a name="l00029"></a>00029 
+<a name="l00031"></a>00031 <span class="keyword">namespace </span>internal {
+<a name="l00032"></a>00032 
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC deallocate_via_handler_v3( <span class="keywordtype">void</span> *p );
+<a name="l00036"></a>00036 
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n );
+<a name="l00040"></a>00040 
+<a name="l00042"></a>00042     <span class="keywordtype">bool</span> __TBB_EXPORTED_FUNC is_malloc_used_v3();
+<a name="l00043"></a>00043 }
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046 <span class="preprocessor">#if _MSC_VER &amp;&amp; !defined(__INTEL_COMPILER)</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
+<a name="l00048"></a>00048 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span>
+<a name="l00053"></a>00053 
+<a name="l00058"></a>00058 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00059"></a><a class="code" href="a00170.html">00059</a> <span class="keyword">class </span><a class="code" href="a00170.html">tbb_allocator</a> {
+<a name="l00060"></a>00060 <span class="keyword">public</span>:
+<a name="l00061"></a>00061     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type&lt;T&gt;::value_type value_type;
+<a name="l00062"></a>00062     <span class="keyword">typedef</span> value_type* pointer;
+<a name="l00063"></a>00063     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
+<a name="l00064"></a>00064     <span class="keyword">typedef</span> value_type&amp; reference;
+<a name="l00065"></a>00065     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type&amp; const_reference;
+<a name="l00066"></a>00066     <span class="keyword">typedef</span> size_t size_type;
+<a name="l00067"></a>00067     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00068"></a>00068     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt; <span class="keyword">struct </span>rebind {
+<a name="l00069"></a>00069         <span class="keyword">typedef</span> <a class="code" href="a00170.html">tbb_allocator&lt;U&gt;</a> other;
+<a name="l00070"></a>00070     };
+<a name="l00071"></a>00071 
+<a name="l00073"></a><a class="code" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">00073</a>     <span class="keyword">enum</span> <a class="code" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> {
+<a name="l00074"></a>00074         scalable, 
+<a name="l00075"></a>00075         standard
+<a name="l00076"></a>00076     };
+<a name="l00077"></a>00077 
+<a name="l00078"></a>00078     <a class="code" href="a00170.html">tbb_allocator</a>() throw() {}
+<a name="l00079"></a>00079     tbb_allocator( <span class="keyword">const</span> tbb_allocator&amp; ) throw() {}
+<a name="l00080"></a>00080     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt; tbb_allocator(<span class="keyword">const</span> tbb_allocator&lt;U&gt;&amp;) throw() {}
+<a name="l00081"></a>00081 
+<a name="l00082"></a>00082     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &amp;x;}
+<a name="l00083"></a>00083     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &amp;x;}
+<a name="l00084"></a>00084     
+<a name="l00086"></a><a class="code" href="a00170.html#f6cb487b1bdce0b581f265a77dca6d53">00086</a>     pointer <a class="code" href="a00170.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> = 0) {
+<a name="l00087"></a>00087         <span class="keywordflow">return</span> pointer(internal::allocate_via_handler_v3( n * <span class="keyword">sizeof</span>(value_type) ));
+<a name="l00088"></a>00088     }
+<a name="l00089"></a>00089 
+<a name="l00091"></a><a class="code" href="a00170.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">00091</a>     <span class="keywordtype">void</span> <a class="code" href="a00170.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a>( pointer p, size_type ) {
+<a name="l00092"></a>00092         internal::deallocate_via_handler_v3(p);        
+<a name="l00093"></a>00093     }
+<a name="l00094"></a>00094 
+<a name="l00096"></a><a class="code" href="a00170.html#f059ca2c96243024f0d562ee3a87a3a5">00096</a>     size_type <a class="code" href="a00170.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a>() const throw() {
+<a name="l00097"></a>00097         size_type max = static_cast&lt;size_type&gt;(-1) / <span class="keyword">sizeof</span> (value_type);
+<a name="l00098"></a>00098         <span class="keywordflow">return</span> (max &gt; 0 ? max : 1);
+<a name="l00099"></a>00099     }
+<a name="l00100"></a>00100     
+<a name="l00102"></a><a class="code" href="a00170.html#ab228ab9e324ed041c2226e1d717df5f">00102</a>     <span class="keywordtype">void</span> <a class="code" href="a00170.html#ab228ab9e324ed041c2226e1d717df5f">construct</a>( pointer p, <span class="keyword">const</span> value_type&amp; value ) {<span class="keyword">new</span>(static_cast&lt;void*&gt;(p)) value_type(value);}
+<a name="l00103"></a>00103 
+<a name="l00105"></a><a class="code" href="a00170.html#ef133522bf55f05a605bee0763208281">00105</a>     <span class="keywordtype">void</span> <a class="code" href="a00170.html#ef133522bf55f05a605bee0763208281">destroy</a>( pointer p ) {p-&gt;~value_type();}
+<a name="l00106"></a>00106 
+<a name="l00108"></a><a class="code" href="a00170.html#78701e7454ef8e1a25b5acd364367080">00108</a>     <span class="keyword">static</span> <a class="code" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> <a class="code" href="a00170.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a>() {
+<a name="l00109"></a>00109         <span class="keywordflow">return</span> internal::is_malloc_used_v3() ? standard : scalable;
+<a name="l00110"></a>00110     }
+<a name="l00111"></a>00111 };
+<a name="l00112"></a>00112 
+<a name="l00113"></a>00113 <span class="preprocessor">#if _MSC_VER &amp;&amp; !defined(__INTEL_COMPILER)</span>
+<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
+<a name="l00116"></a>00116 <span class="preprocessor"></span>
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119 <span class="keyword">template</span>&lt;&gt; 
+<a name="l00120"></a><a class="code" href="a00171.html">00120</a> <span class="keyword">class </span><a class="code" href="a00170.html">tbb_allocator</a>&lt;void&gt; {
+<a name="l00121"></a>00121 <span class="keyword">public</span>:
+<a name="l00122"></a>00122     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
+<a name="l00123"></a>00123     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
+<a name="l00124"></a>00124     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
+<a name="l00125"></a>00125     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt; <span class="keyword">struct </span>rebind {
+<a name="l00126"></a>00126         <span class="keyword">typedef</span> <a class="code" href="a00170.html">tbb_allocator&lt;U&gt;</a> other;
+<a name="l00127"></a>00127     };
+<a name="l00128"></a>00128 };
+<a name="l00129"></a>00129 
+<a name="l00130"></a>00130 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00131"></a>00131 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00170.html">tbb_allocator&lt;T&gt;</a>&amp;, <span class="keyword">const</span> <a class="code" href="a00170.html">tbb_allocator&lt;U&gt;</a>&amp; ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+<a name="l00132"></a>00132 
+<a name="l00133"></a>00133 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00134"></a>00134 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> tbb_allocator&lt;T&gt;&amp;, <span class="keyword">const</span> tbb_allocator&lt;U&gt;&amp; ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+<a name="l00135"></a>00135 
+<a name="l00137"></a>00137 
+<a name="l00142"></a>00142 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">template</span>&lt;<span class="keyword">typename</span> X&gt; <span class="keyword">class </span>Allocator = tbb_allocator&gt;
+<a name="l00143"></a><a class="code" href="a00179.html">00143</a> <span class="keyword">class </span><a class="code" href="a00179.html">zero_allocator</a> : <span class="keyword">public</span> Allocator&lt;T&gt;
+<a name="l00144"></a>00144 {
+<a name="l00145"></a>00145 <span class="keyword">public</span>:
+<a name="l00146"></a>00146     <span class="keyword">typedef</span> Allocator&lt;T&gt; base_allocator_type;
+<a name="l00147"></a>00147     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::value_type value_type;
+<a name="l00148"></a>00148     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::pointer pointer;
+<a name="l00149"></a>00149     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::const_pointer const_pointer;
+<a name="l00150"></a>00150     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::reference reference;
+<a name="l00151"></a>00151     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::const_reference const_reference;
+<a name="l00152"></a>00152     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::size_type size_type;
+<a name="l00153"></a>00153     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::difference_type difference_type;
+<a name="l00154"></a>00154     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt; <span class="keyword">struct </span>rebind {
+<a name="l00155"></a>00155         <span class="keyword">typedef</span> <a class="code" href="a00179.html">zero_allocator&lt;U, Allocator&gt;</a> other;
+<a name="l00156"></a>00156     };
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158     <a class="code" href="a00179.html">zero_allocator</a>() <span class="keywordflow">throw</span>() { }
+<a name="l00159"></a>00159     <a class="code" href="a00179.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00179.html">zero_allocator</a> &amp;a) <span class="keywordflow">throw</span>() : base_allocator_type( a ) { }
+<a name="l00160"></a>00160     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt;
+<a name="l00161"></a>00161     <a class="code" href="a00179.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00179.html">zero_allocator&lt;U&gt;</a> &amp;a) <span class="keywordflow">throw</span>() : base_allocator_type( Allocator&lt;U&gt;( a ) ) { }
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163     pointer allocate(<span class="keyword">const</span> size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span> *hint = 0 ) {
+<a name="l00164"></a>00164         pointer ptr = base_allocator_type::allocate( n, hint );
+<a name="l00165"></a>00165         std::memset( ptr, 0, n * <span class="keyword">sizeof</span>(value_type) );
+<a name="l00166"></a>00166         <span class="keywordflow">return</span> ptr;
+<a name="l00167"></a>00167     }
+<a name="l00168"></a>00168 };
+<a name="l00169"></a>00169 
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172 <span class="keyword">template</span>&lt;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">class </span>Allocator&gt; 
+<a name="l00173"></a><a class="code" href="a00180.html">00173</a> <span class="keyword">class </span><a class="code" href="a00179.html">zero_allocator</a>&lt;void, Allocator&gt; : <span class="keyword">public</span> Allocator&lt;void&gt; {
+<a name="l00174"></a>00174 <span class="keyword">public</span>:
+<a name="l00175"></a>00175     <span class="keyword">typedef</span> Allocator&lt;void&gt; base_allocator_type;
+<a name="l00176"></a>00176     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::value_type value_type;
+<a name="l00177"></a>00177     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::pointer pointer;
+<a name="l00178"></a>00178     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::const_pointer const_pointer;
+<a name="l00179"></a>00179     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt; <span class="keyword">struct </span>rebind {
+<a name="l00180"></a>00180         <span class="keyword">typedef</span> <a class="code" href="a00179.html">zero_allocator&lt;U, Allocator&gt;</a> other;
+<a name="l00181"></a>00181     };
+<a name="l00182"></a>00182 };
+<a name="l00183"></a>00183 
+<a name="l00184"></a>00184 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T1, <span class="keyword">template</span>&lt;<span class="keyword">typename</span> X1&gt; <span class="keyword">class </span>B1, <span class="keyword">typename</span> T2, <span class="keyword">template</span>&lt;<span class="keyword">typename</span> X2&gt; <span class="keyword">class </span>B2&gt;
+<a name="l00185"></a>00185 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00179.html">zero_allocator&lt;T1,B1&gt;</a> &amp;a, <span class="keyword">const</span> <a class="code" href="a00179.html">zero_allocator&lt;T2,B2&gt;</a> &amp;b) {
+<a name="l00186"></a>00186     <span class="keywordflow">return</span> static_cast&lt; B1&lt;T1&gt; &gt;(a) == <span class="keyword">static_cast</span>&lt; B2&lt;T2&gt; &gt;(b);
+<a name="l00187"></a>00187 }
+<a name="l00188"></a>00188 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T1, <span class="keyword">template</span>&lt;<span class="keyword">typename</span> X1&gt; <span class="keyword">class </span>B1, <span class="keyword">typename</span> T2, <span class="keyword">template</span>&lt;<span class="keyword">typename</span> X2&gt; <span class="keyword">class </span>B2&gt;
+<a name="l00189"></a>00189 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> zero_allocator&lt;T1,B1&gt; &amp;a, <span class="keyword">const</span> zero_allocator&lt;T2,B2&gt; &amp;b) {
+<a name="l00190"></a>00190     <span class="keywordflow">return</span> static_cast&lt; B1&lt;T1&gt; &gt;(a) != <span class="keyword">static_cast</span>&lt; B2&lt;T2&gt; &gt;(b);
+<a name="l00191"></a>00191 }
+<a name="l00192"></a>00192 
+<a name="l00193"></a>00193 } <span class="comment">// namespace tbb </span>
+<a name="l00194"></a>00194 
+<a name="l00195"></a>00195 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_allocator_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00379.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00379.html
new file mode 100644 (file)
index 0000000..089f2dc
--- /dev/null
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb_config.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_config_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_config_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00033"></a>00033 <span class="preprocessor">#ifndef TBB_USE_DEBUG</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG TBB_DO_ASSERT</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG 0</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#else</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define TBB_DO_ASSERT TBB_USE_DEBUG</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_DEBUG */</span>
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043 <span class="preprocessor">#ifndef TBB_USE_ASSERT</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_DO_ASSERT</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_USE_DEBUG</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+<a name="l00049"></a>00049 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00050"></a>00050 
+<a name="l00051"></a>00051 <span class="preprocessor">#ifndef TBB_USE_THREADING_TOOLS</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_THREADING_TOOLS</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_DO_THREADING_TOOLS</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_USE_DEBUG</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS */</span>
+<a name="l00057"></a>00057 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059 <span class="preprocessor">#ifndef TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_PERFORMANCE_WARNINGS</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_PERFORMANCE_WARNINGS</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_USE_DEBUG</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_PEFORMANCE_WARNINGS */</span>
+<a name="l00065"></a>00065 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_PERFORMANCE_WARNINGS */</span>
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067 
+<a name="l00070"></a>00070 <span class="preprocessor">#ifndef __TBB_EXCEPTIONS</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXCEPTIONS 1</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00073"></a>00073 
+<a name="l00074"></a>00074 <span class="preprocessor">#ifndef __TBB_SCHEDULER_OBSERVER</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_SCHEDULER_OBSERVER 1</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_SCHEDULER_OBSERVER */</span>
+<a name="l00077"></a>00077 
+<a name="l00078"></a>00078 <span class="preprocessor">#ifndef __TBB_TASK_SCHEDULER_AUTO_INIT</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TASK_SCHEDULER_AUTO_INIT 1</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_SCHEDULER_AUTO_INIT */</span>
+<a name="l00081"></a>00081 
+<a name="l00082"></a>00082 <span class="preprocessor">#ifndef __TBB_TASK_DEQUE</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TASK_DEQUE 1</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__TBB_TASK_DEQUE */</span>
+<a name="l00085"></a>00085 
+<a name="l00086"></a>00086 <span class="preprocessor">#if __TBB_TASK_DEQUE</span>
+<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_RELAXED_OWNERSHIP</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_RELAXED_OWNERSHIP 1</span>
+<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__TBB_RELAXED_OWNERSHIP */</span>
+<a name="l00090"></a>00090 <span class="preprocessor">#else</span>
+<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#ifdef __TBB_RELAXED_OWNERSHIP</span>
+<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#undef __TBB_RELAXED_OWNERSHIP</span>
+<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_RELAXED_OWNERSHIP */</span>
+<a name="l00094"></a>00094 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_TASK_DEQUE */</span>
+<a name="l00095"></a>00095 
+<a name="l00096"></a>00096 <span class="preprocessor">#ifndef __TBB_NEW_ITT_NOTIFY</span>
+<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NEW_ITT_NOTIFY 1</span>
+<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__TBB_NEW_ITT_NOTIFY */</span>
+<a name="l00099"></a>00099 
+<a name="l00100"></a>00100 <span class="preprocessor">#ifndef __TBB_PROVIDE_VIRTUAL_SCHEDULER</span>
+<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_PROVIDE_VIRTUAL_SCHEDULER 0</span>
+<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__TBB_PROVIDE_VIRTUAL_SCHEDULER */</span>
+<a name="l00103"></a>00103 
+<a name="l00104"></a>00104 <span class="preprocessor">#if !__TBB_PROVIDE_VIRTUAL_SCHEDULER</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#ifdef DO_ITT_ANNOTATE</span>
+<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#undef DO_ITT_ANNOTATE</span>
+<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__TBB_PROVIDE_VIRTUAL_SCHEDULER */</span>
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110 <span class="comment">/* TODO: The following condition should be extended as soon as new compilers/runtimes </span>
+<a name="l00111"></a>00111 <span class="comment">         with std::exception_ptr support appear. */</span>
+<a name="l00112"></a>00112 <span class="preprocessor">#define __TBB_EXCEPTION_PTR_PRESENT  ( _MSC_VER &gt;= 1600 )</span>
+<a name="l00113"></a>00113 <span class="preprocessor"></span>
+<a name="l00114"></a>00114 
+<a name="l00115"></a>00115 <span class="preprocessor">#ifndef TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_EXCEPTION_PTR_PRESENT</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_CAPTURED_EXCEPTION 0</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span><span class="preprocessor">    #else</span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_CAPTURED_EXCEPTION 1</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00121"></a>00121 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00122"></a>00122 <span class="preprocessor">    #if !TBB_USE_CAPTURED_EXCEPTION &amp;&amp; !__TBB_EXCEPTION_PTR_PRESENT</span>
+<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">        #error Current runtime does not support std::exception_ptr. Set TBB_USE_CAPTURED_EXCEPTION and make sure that your code is ready to catch tbb::captured_exception.</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00125"></a>00125 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00126"></a>00126 
+<a name="l00127"></a>00127 
+<a name="l00128"></a>00128 <span class="preprocessor">#ifndef __TBB_DEFAULT_PARTITIONER</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span>
+<a name="l00131"></a>00131 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::simple_partitioner</span>
+<a name="l00132"></a>00132 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00133"></a>00133 <span class="preprocessor"></span>
+<a name="l00134"></a>00134 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::auto_partitioner</span>
+<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DEFAULT_PARTITIONER */</span>
+<a name="l00136"></a>00136 <span class="preprocessor">#endif </span><span class="comment">/* !defined(__TBB_DEFAULT_PARTITIONER */</span>
+<a name="l00137"></a>00137 
+<a name="l00140"></a>00140 <span class="preprocessor">#if __GNUC__==4 &amp;&amp; __GNUC_MINOR__==4</span>
+<a name="l00141"></a>00141 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_GCC_WARNING_SUPPRESSION_ENABLED 1</span>
+<a name="l00142"></a>00142 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00143"></a>00143 <span class="preprocessor"></span>
+<a name="l00150"></a>00150 <span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; _MSC_VER &lt; 0x1500 &amp;&amp; !defined(__INTEL_COMPILER)</span>
+<a name="l00151"></a>00151 <span class="preprocessor"></span>
+<a name="l00153"></a>00153 <span class="preprocessor">    #define __TBB_TEMPLATE_FRIENDS_BROKEN 1</span>
+<a name="l00154"></a>00154 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00155"></a>00155 <span class="preprocessor"></span>
+<a name="l00156"></a>00156 <span class="preprocessor">#if __GLIBC__==2 &amp;&amp; __GLIBC_MINOR__==3 || __MINGW32__</span>
+<a name="l00157"></a>00157 <span class="preprocessor"></span>
+<a name="l00158"></a>00158 <span class="preprocessor">    #define __TBB_EXCEPTION_HANDLING_BROKEN 1</span>
+<a name="l00159"></a>00159 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00160"></a>00160 <span class="preprocessor"></span>
+<a name="l00161"></a>00161 <span class="preprocessor">#if __FreeBSD__</span>
+<a name="l00162"></a>00162 <span class="preprocessor"></span>
+<a name="l00164"></a>00164 <span class="preprocessor">    #define __TBB_PRIO_INHERIT_BROKEN 1</span>
+<a name="l00165"></a>00165 <span class="preprocessor"></span>
+<a name="l00168"></a>00168 <span class="preprocessor">    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1</span>
+<a name="l00169"></a>00169 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __FreeBSD__ */</span>
+<a name="l00170"></a>00170 
+<a name="l00171"></a>00171 <span class="preprocessor">#if __LRB__</span>
+<a name="l00172"></a>00172 <span class="preprocessor"></span><span class="preprocessor">#include "tbb_config_lrb.h"</span>
+<a name="l00173"></a>00173 <span class="preprocessor">#endif</span>
+<a name="l00174"></a>00174 <span class="preprocessor"></span>
+<a name="l00175"></a>00175 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_config_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00380.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00380.html
new file mode 100644 (file)
index 0000000..3cab0b4
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb_config_lrb.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb_config_lrb.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_config_lrb_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_config_lrb_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#if !__LRB__</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">    #error tbb_config_lrb.h should be included only when building for LRB platform</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00030"></a>00030 <span class="preprocessor">#define __TBB_FLOATING_POINT_BROKEN 1</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a>00032 <span class="preprocessor">#if XENSIM &amp;&amp; !__FreeBSD__</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">    #error LRB compiler does not define __FreeBSD__ anymore. Check for the __TBB_XXX_BROKEN defined under __FreeBSD__</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__FreeBSD__ */</span>
+<a name="l00035"></a>00035 
+<a name="l00036"></a>00036 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_config_lrb_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00381.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00381.html
new file mode 100644 (file)
index 0000000..b56b969
--- /dev/null
@@ -0,0 +1,255 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb_exception.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb_exception.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_exception_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_exception_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;stdexcept&gt;</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="preprocessor">#if __TBB_EXCEPTIONS &amp;&amp; !defined(__EXCEPTIONS) &amp;&amp; !defined(_CPPUNWIND) &amp;&amp; !defined(__SUNPRO_CC)</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#error The current compilation environment does not support exception handling. Please set __TBB_EXCEPTIONS to 0 in tbb_config.h</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span>
+<a name="l00031"></a>00031 <span class="keyword">namespace </span>tbb {
+<a name="l00032"></a>00032 
+<a name="l00034"></a><a class="code" href="a00121.html">00034</a> <span class="keyword">class </span><a class="code" href="a00121.html">bad_last_alloc</a> : <span class="keyword">public</span> std::bad_alloc {
+<a name="l00035"></a>00035 <span class="keyword">public</span>:
+<a name="l00036"></a>00036     <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* what() <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> <span class="stringliteral">"bad allocation in previous or concurrent attempt"</span>; }
+<a name="l00037"></a>00037     <span class="keyword">virtual</span> ~<a class="code" href="a00121.html">bad_last_alloc</a>() <span class="keywordflow">throw</span>() {}
+<a name="l00038"></a>00038 };
+<a name="l00039"></a>00039 
+<a name="l00040"></a>00040 <span class="keyword">namespace </span>internal {
+<a name="l00041"></a>00041 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC throw_bad_last_alloc_exception_v4() ;
+<a name="l00042"></a>00042 } <span class="comment">// namespace internal</span>
+<a name="l00043"></a>00043 
+<a name="l00044"></a>00044 } <span class="comment">// namespace tbb</span>
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#include "tbb_allocator.h"</span>
+<a name="l00048"></a>00048 <span class="preprocessor">#include &lt;exception&gt;</span>
+<a name="l00049"></a>00049 <span class="preprocessor">#include &lt;typeinfo&gt;</span>
+<a name="l00050"></a>00050 <span class="preprocessor">#include &lt;new&gt;</span>
+<a name="l00051"></a>00051 
+<a name="l00052"></a>00052 <span class="keyword">namespace </span>tbb {
+<a name="l00053"></a>00053 
+<a name="l00055"></a>00055 
+<a name="l00075"></a><a class="code" href="a00172.html">00075</a> <span class="keyword">class </span><a class="code" href="a00172.html">tbb_exception</a> : <span class="keyword">public</span> std::exception {
+<a name="l00076"></a>00076 <span class="keyword">public</span>:
+<a name="l00078"></a>00078 
+<a name="l00079"></a>00079     <span class="keyword">virtual</span> <a class="code" href="a00172.html">tbb_exception</a>* <a class="code" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">move</a> () <span class="keywordflow">throw</span>() = 0;
+<a name="l00080"></a>00080     
+<a name="l00082"></a>00082 
+<a name="l00084"></a>00084     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a> () <span class="keywordflow">throw</span>() = 0;
+<a name="l00085"></a>00085 
+<a name="l00087"></a>00087 
+<a name="l00091"></a>00091     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a> () = 0;
+<a name="l00092"></a>00092 
+<a name="l00094"></a>00094     <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00172.html#d00f6497e552fee978a02bfcbebf46e2">name</a>() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
+<a name="l00095"></a>00095 
+<a name="l00097"></a>00097     <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00172.html#e8157689ecb66bc6c72d3618bf3cc371">what</a>() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
+<a name="l00098"></a>00098 };
+<a name="l00099"></a>00099 
+<a name="l00101"></a>00101 
+<a name="l00105"></a><a class="code" href="a00127.html">00105</a> <span class="keyword">class </span><a class="code" href="a00127.html">captured_exception</a> : <span class="keyword">public</span> <a class="code" href="a00172.html">tbb_exception</a>
+<a name="l00106"></a>00106 {
+<a name="l00107"></a>00107 <span class="keyword">public</span>:
+<a name="l00108"></a>00108     <a class="code" href="a00127.html">captured_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00127.html">captured_exception</a>&amp; src )
+<a name="l00109"></a>00109         : <a class="code" href="a00172.html">tbb_exception</a>(src), my_dynamic(<span class="keyword">false</span>)
+<a name="l00110"></a>00110     {
+<a name="l00111"></a>00111         set(src.<a class="code" href="a00127.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00127.html#788adf4e55cdad7abc178a48a1d47e69">my_exception_info</a>);
+<a name="l00112"></a>00112     }
+<a name="l00113"></a>00113 
+<a name="l00114"></a>00114     <a class="code" href="a00127.html">captured_exception</a> ( <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>, <span class="keyword">const</span> <span class="keywordtype">char</span>* info )
+<a name="l00115"></a>00115         : my_dynamic(<span class="keyword">false</span>)
+<a name="l00116"></a>00116     {
+<a name="l00117"></a>00117         set(name, info);
+<a name="l00118"></a>00118     }
+<a name="l00119"></a>00119 
+<a name="l00120"></a>00120     __TBB_EXPORTED_METHOD ~<a class="code" href="a00127.html">captured_exception</a> () <span class="keywordflow">throw</span>() {
+<a name="l00121"></a>00121         clear();
+<a name="l00122"></a>00122     }
+<a name="l00123"></a>00123 
+<a name="l00124"></a>00124     <a class="code" href="a00127.html">captured_exception</a>&amp; operator= ( <span class="keyword">const</span> <a class="code" href="a00127.html">captured_exception</a>&amp; src ) {
+<a name="l00125"></a>00125         <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &amp;src ) {
+<a name="l00126"></a>00126             clear();
+<a name="l00127"></a>00127             set(src.<a class="code" href="a00127.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00127.html#788adf4e55cdad7abc178a48a1d47e69">my_exception_info</a>);
+<a name="l00128"></a>00128         }
+<a name="l00129"></a>00129         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00130"></a>00130     }
+<a name="l00131"></a>00131 
+<a name="l00132"></a>00132     <span class="comment">/*override*/</span> 
+<a name="l00133"></a>00133     <a class="code" href="a00127.html">captured_exception</a>* <a class="code" href="a00127.html#df6bbb78a362fe862a341e81e2999810">move</a> () <span class="keywordflow">throw</span>();
+<a name="l00134"></a>00134 
+<a name="l00135"></a>00135     <span class="comment">/*override*/</span> 
+<a name="l00136"></a>00136     <span class="keywordtype">void</span> <a class="code" href="a00127.html#667812a82f1525e968c52593dea0ef4c">destroy</a> () <span class="keywordflow">throw</span>();
+<a name="l00137"></a>00137 
+<a name="l00138"></a>00138     <span class="comment">/*override*/</span> 
+<a name="l00139"></a><a class="code" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">00139</a>     <span class="keywordtype">void</span> <a class="code" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a> () { <span class="keywordflow">throw</span> *<span class="keyword">this</span>; }
+<a name="l00140"></a>00140 
+<a name="l00141"></a>00141     <span class="comment">/*override*/</span> 
+<a name="l00142"></a>00142     <span class="keyword">const</span> <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD <a class="code" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const throw();
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144     <span class="comment">/*override*/</span> 
+<a name="l00145"></a>00145     const <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD <a class="code" href="a00127.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const throw();
+<a name="l00146"></a>00146 
+<a name="l00147"></a>00147 private:
+<a name="l00149"></a>00149     <a class="code" href="a00127.html">captured_exception</a>() {}
+<a name="l00150"></a>00150 
+<a name="l00152"></a>00152     <span class="keyword">static</span> captured_exception* allocate ( <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <span class="keywordtype">char</span>* info );
+<a name="l00153"></a>00153 
+<a name="l00154"></a>00154     <span class="keywordtype">void</span> set ( <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <span class="keywordtype">char</span>* info ) <span class="keywordflow">throw</span>();
+<a name="l00155"></a>00155     <span class="keywordtype">void</span> clear () throw();
+<a name="l00156"></a>00156 
+<a name="l00157"></a>00157     <span class="keywordtype">bool</span> my_dynamic;
+<a name="l00158"></a>00158     const <span class="keywordtype">char</span>* my_exception_name;
+<a name="l00159"></a>00159     const <span class="keywordtype">char</span>* my_exception_info;
+<a name="l00160"></a>00160 };
+<a name="l00161"></a>00161 
+<a name="l00163"></a>00163 
+<a name="l00167"></a>00167 template&lt;typename ExceptionData&gt;
+<a name="l00168"></a><a class="code" href="a00141.html">00168</a> class <a class="code" href="a00141.html">movable_exception</a> : public <a class="code" href="a00172.html">tbb_exception</a>
+<a name="l00169"></a>00169 {
+<a name="l00170"></a>00170     <span class="keyword">typedef</span> <a class="code" href="a00141.html">movable_exception&lt;ExceptionData&gt;</a> <a class="code" href="a00141.html">self_type</a>;
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172 <span class="keyword">public</span>:
+<a name="l00173"></a>00173     <a class="code" href="a00141.html">movable_exception</a> ( <span class="keyword">const</span> ExceptionData&amp; data ) 
+<a name="l00174"></a>00174         : my_exception_data(data)
+<a name="l00175"></a>00175         , my_dynamic(<span class="keyword">false</span>)
+<a name="l00176"></a>00176         , my_exception_name(<span class="keyword">typeid</span>(self_type).<a class="code" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>())
+<a name="l00177"></a>00177     {}
+<a name="l00178"></a>00178 
+<a name="l00179"></a>00179     <a class="code" href="a00141.html">movable_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00141.html">movable_exception</a>&amp; src ) <span class="keywordflow">throw</span> () 
+<a name="l00180"></a>00180         : tbb_exception(src)
+<a name="l00181"></a>00181         , my_exception_data(src.<a class="code" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>)
+<a name="l00182"></a>00182         , my_dynamic(<span class="keyword">false</span>)
+<a name="l00183"></a>00183         , my_exception_name(src.<a class="code" href="a00141.html#5f5843b501829ff824c9c8d28c8283eb">my_exception_name</a>)
+<a name="l00184"></a>00184     {}
+<a name="l00185"></a>00185 
+<a name="l00186"></a>00186     ~<a class="code" href="a00141.html">movable_exception</a> () <span class="keywordflow">throw</span>() {}
+<a name="l00187"></a>00187 
+<a name="l00188"></a>00188     <span class="keyword">const</span> <a class="code" href="a00141.html">movable_exception</a>&amp; operator= ( <span class="keyword">const</span> <a class="code" href="a00141.html">movable_exception</a>&amp; src ) {
+<a name="l00189"></a>00189         <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &amp;src ) {
+<a name="l00190"></a>00190             my_exception_data = src.<a class="code" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>;
+<a name="l00191"></a>00191             my_exception_name = src.<a class="code" href="a00141.html#5f5843b501829ff824c9c8d28c8283eb">my_exception_name</a>;
+<a name="l00192"></a>00192         }
+<a name="l00193"></a>00193         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00194"></a>00194     }
+<a name="l00195"></a>00195 
+<a name="l00196"></a>00196     ExceptionData&amp; data () <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> my_exception_data; }
+<a name="l00197"></a>00197 
+<a name="l00198"></a>00198     <span class="keyword">const</span> ExceptionData&amp; data () <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> my_exception_data; }
+<a name="l00199"></a>00199 
+<a name="l00200"></a><a class="code" href="a00141.html#bc5f5c4739b17ac5211ac58226c2f5a5">00200</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a> () const throw() { <span class="keywordflow">return</span> my_exception_name; }
+<a name="l00201"></a>00201 
+<a name="l00202"></a><a class="code" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">00202</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00127.html#6b5988ef74a1fe2a58998d110b3633e0">what</a> () const throw() { <span class="keywordflow">return</span> <span class="stringliteral">"tbb::movable_exception"</span>; }
+<a name="l00203"></a>00203 
+<a name="l00204"></a>00204     <span class="comment">/*override*/</span> 
+<a name="l00205"></a><a class="code" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">00205</a>     <a class="code" href="a00141.html">movable_exception</a>* <a class="code" href="a00127.html#df6bbb78a362fe862a341e81e2999810">move</a> () throw() {
+<a name="l00206"></a>00206         <span class="keywordtype">void</span>* e = internal::allocate_via_handler_v3(<span class="keyword">sizeof</span>(<a class="code" href="a00141.html">movable_exception</a>));
+<a name="l00207"></a>00207         <span class="keywordflow">if</span> ( e ) {
+<a name="l00208"></a>00208             <span class="keyword">new</span> (e) movable_exception(*<span class="keyword">this</span>);
+<a name="l00209"></a>00209             ((movable_exception*)e)-&gt;my_dynamic = <span class="keyword">true</span>;
+<a name="l00210"></a>00210         }
+<a name="l00211"></a>00211         <span class="keywordflow">return</span> (movable_exception*)e;
+<a name="l00212"></a>00212     }
+<a name="l00213"></a>00213     <span class="comment">/*override*/</span> 
+<a name="l00214"></a><a class="code" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">00214</a>     <span class="keywordtype">void</span> <a class="code" href="a00127.html#667812a82f1525e968c52593dea0ef4c">destroy</a> () throw() {
+<a name="l00215"></a>00215         __TBB_ASSERT ( my_dynamic, <span class="stringliteral">"Method destroy can be called only on dynamically allocated movable_exceptions"</span> );
+<a name="l00216"></a>00216         <span class="keywordflow">if</span> ( my_dynamic ) {
+<a name="l00217"></a>00217             this-&gt;~<a class="code" href="a00141.html">movable_exception</a>();
+<a name="l00218"></a>00218             internal::deallocate_via_handler_v3(<span class="keyword">this</span>);
+<a name="l00219"></a>00219         }
+<a name="l00220"></a>00220     }
+<a name="l00221"></a>00221     <span class="comment">/*override*/</span> 
+<a name="l00222"></a><a class="code" href="a00141.html#17cffba35811c92b7e65d63506b69602">00222</a>     <span class="keywordtype">void</span> <a class="code" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a> () {
+<a name="l00223"></a>00223         <span class="keywordflow">throw</span> *<span class="keyword">this</span>;
+<a name="l00224"></a>00224     }
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226 <span class="keyword">protected</span>:
+<a name="l00228"></a><a class="code" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">00228</a>     ExceptionData  my_exception_data;
+<a name="l00229"></a>00229 
+<a name="l00230"></a>00230 <span class="keyword">private</span>:
+<a name="l00232"></a>00232     <span class="keywordtype">bool</span> my_dynamic;
+<a name="l00233"></a>00233 
+<a name="l00235"></a>00235 
+<a name="l00236"></a>00236     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_name;
+<a name="l00237"></a>00237 };
+<a name="l00238"></a>00238 
+<a name="l00239"></a>00239 <span class="preprocessor">#if !TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00240"></a>00240 <span class="preprocessor"></span><span class="keyword">namespace </span>internal {
+<a name="l00241"></a>00241 
+<a name="l00243"></a>00243 
+<a name="l00245"></a><a class="code" href="a00173.html">00245</a> <span class="keyword">class </span><a class="code" href="a00173.html">tbb_exception_ptr</a> {
+<a name="l00246"></a>00246     std::exception_ptr  my_ptr;
+<a name="l00247"></a>00247 
+<a name="l00248"></a>00248 <span class="keyword">public</span>:
+<a name="l00249"></a>00249     <span class="keyword">static</span> <a class="code" href="a00173.html">tbb_exception_ptr</a>* allocate ();
+<a name="l00250"></a>00250     <span class="keyword">static</span> <a class="code" href="a00173.html">tbb_exception_ptr</a>* allocate ( <span class="keyword">const</span> <a class="code" href="a00172.html">tbb_exception</a>&amp; );
+<a name="l00251"></a>00251     <span class="keyword">static</span> <a class="code" href="a00173.html">tbb_exception_ptr</a>* allocate ( <span class="keyword">const</span> <a class="code" href="a00127.html">captured_exception</a>&amp; );
+<a name="l00252"></a>00252     
+<a name="l00254"></a>00254 
+<a name="l00255"></a>00255     <span class="keywordtype">void</span> <a class="code" href="a00127.html#667812a82f1525e968c52593dea0ef4c">destroy</a> () <span class="keywordflow">throw</span>();
+<a name="l00256"></a>00256 
+<a name="l00258"></a><a class="code" href="a00173.html#292832fd5c523e3d8081a22247840a1d">00258</a>     <span class="keywordtype">void</span> <a class="code" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a> () { std::rethrow_exception(my_ptr); }
+<a name="l00259"></a>00259 
+<a name="l00260"></a>00260 <span class="keyword">private</span>:
+<a name="l00261"></a>00261     <a class="code" href="a00173.html">tbb_exception_ptr</a> ( <span class="keyword">const</span> std::exception_ptr&amp; src ) : my_ptr(src) {}
+<a name="l00262"></a>00262     tbb_exception_ptr ( <span class="keyword">const</span> <a class="code" href="a00127.html">captured_exception</a>&amp; src ) : my_ptr(std::copy_exception(src)) {}
+<a name="l00263"></a>00263 }; <span class="comment">// class tbb::internal::tbb_exception_ptr</span>
+<a name="l00264"></a>00264 
+<a name="l00265"></a>00265 } <span class="comment">// namespace internal</span>
+<a name="l00266"></a>00266 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00267"></a>00267 
+<a name="l00268"></a>00268 } <span class="comment">// namespace tbb</span>
+<a name="l00269"></a>00269 
+<a name="l00270"></a>00270 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+<a name="l00271"></a>00271 
+<a name="l00272"></a>00272 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_exception_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00382.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00382.html
new file mode 100644 (file)
index 0000000..85a2e39
--- /dev/null
@@ -0,0 +1,604 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb_machine.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb_machine.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_machine_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00028"></a>00028 <span class="preprocessor">#ifdef _MANAGED</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#pragma managed(push, off)</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a>00032 <span class="preprocessor">#if __MINGW32__</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
+<a name="l00034"></a>00034 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> __declspec(dllimport) int __stdcall SwitchToThread( <span class="keywordtype">void</span> );
+<a name="l00035"></a>00035 <span class="preprocessor">#define __TBB_Yield()  SwitchToThread()</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#elif defined(_M_IX86)</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_ia32.h"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#elif defined(_M_AMD64) </span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_intel64.h"</span>
+<a name="l00040"></a>00040 <span class="preprocessor">#else</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#error Unsupported platform</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 <span class="preprocessor">#ifdef _MANAGED</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#pragma managed(pop)</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span>
+<a name="l00048"></a>00048 <span class="preprocessor">#elif __linux__ || __FreeBSD__</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>
+<a name="l00050"></a>00050 <span class="preprocessor">#if __i386__</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
+<a name="l00052"></a>00052 <span class="preprocessor">#elif __x86_64__</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_intel64.h"</span>
+<a name="l00054"></a>00054 <span class="preprocessor">#elif __ia64__</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia64.h"</span>
+<a name="l00056"></a>00056 <span class="preprocessor">#endif</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>
+<a name="l00058"></a>00058 <span class="preprocessor">#elif __APPLE__</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span>
+<a name="l00060"></a>00060 <span class="preprocessor">#if __i386__</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
+<a name="l00062"></a>00062 <span class="preprocessor">#elif __x86_64__</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_intel64.h"</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#elif __POWERPC__</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#include "machine/mac_ppc.h"</span>
+<a name="l00066"></a>00066 <span class="preprocessor">#endif</span>
+<a name="l00067"></a>00067 <span class="preprocessor"></span>
+<a name="l00068"></a>00068 <span class="preprocessor">#elif _AIX</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span>
+<a name="l00070"></a>00070 <span class="preprocessor">#include "machine/ibm_aix51.h"</span>
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072 <span class="preprocessor">#elif __sun || __SUNPRO_CC</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span>
+<a name="l00074"></a>00074 <span class="preprocessor">#define __asm__ asm </span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define __volatile__ volatile</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#if __i386  || __i386__</span>
+<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
+<a name="l00078"></a>00078 <span class="preprocessor">#elif __x86_64__</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_intel64.h"</span>
+<a name="l00080"></a>00080 <span class="preprocessor">#endif</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span>
+<a name="l00082"></a>00082 <span class="preprocessor">#endif</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span>
+<a name="l00084"></a>00084 <span class="preprocessor">#if    !defined(__TBB_CompareAndSwap4) \</span>
+<a name="l00085"></a>00085 <span class="preprocessor">    || !defined(__TBB_CompareAndSwap8) \</span>
+<a name="l00086"></a>00086 <span class="preprocessor">    || !defined(__TBB_Yield)           \</span>
+<a name="l00087"></a>00087 <span class="preprocessor">    || !defined(__TBB_release_consistency_helper)</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#error Minimal requirements for tbb_machine.h not satisfied </span>
+<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span>
+<a name="l00091"></a>00091 <span class="preprocessor">#ifndef __TBB_load_with_acquire</span>
+<a name="l00093"></a>00093 <span class="preprocessor">    template&lt;typename T&gt;</span>
+<a name="l00094"></a>00094 <span class="preprocessor"></span>    <span class="keyword">inline</span> T __TBB_load_with_acquire(<span class="keyword">const</span> <span class="keyword">volatile</span> T&amp; location) {
+<a name="l00095"></a>00095         T temp = location;
+<a name="l00096"></a>00096         __TBB_release_consistency_helper();
+<a name="l00097"></a>00097         <span class="keywordflow">return</span> temp;
+<a name="l00098"></a>00098     }
+<a name="l00099"></a>00099 <span class="preprocessor">#endif</span>
+<a name="l00100"></a>00100 <span class="preprocessor"></span>
+<a name="l00101"></a>00101 <span class="preprocessor">#ifndef __TBB_store_with_release</span>
+<a name="l00103"></a>00103 <span class="preprocessor">    template&lt;typename T, typename V&gt;</span>
+<a name="l00104"></a>00104 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_with_release(<span class="keyword">volatile</span> T&amp; location, V value) {
+<a name="l00105"></a>00105         __TBB_release_consistency_helper();
+<a name="l00106"></a>00106         location = T(value); 
+<a name="l00107"></a>00107     }
+<a name="l00108"></a>00108 <span class="preprocessor">#endif</span>
+<a name="l00109"></a>00109 <span class="preprocessor"></span>
+<a name="l00110"></a>00110 <span class="preprocessor">#ifndef __TBB_Pause</span>
+<a name="l00111"></a>00111 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_Pause(int32_t) {
+<a name="l00112"></a>00112         __TBB_Yield();
+<a name="l00113"></a>00113     }
+<a name="l00114"></a>00114 <span class="preprocessor">#endif</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span>
+<a name="l00116"></a>00116 <span class="keyword">namespace </span>tbb {
+<a name="l00117"></a>00117 <span class="keyword">namespace </span>internal {
+<a name="l00118"></a>00118 
+<a name="l00120"></a>00120 
+<a name="l00121"></a><a class="code" href="a00119.html">00121</a> <span class="keyword">class </span><a class="code" href="a00119.html">atomic_backoff</a> {
+<a name="l00123"></a>00123 
+<a name="l00125"></a>00125     <span class="keyword">static</span> <span class="keyword">const</span> int32_t LOOPS_BEFORE_YIELD = 16;
+<a name="l00126"></a>00126     int32_t count;
+<a name="l00127"></a>00127 <span class="keyword">public</span>:
+<a name="l00128"></a>00128     <a class="code" href="a00119.html">atomic_backoff</a>() : count(1) {}
+<a name="l00129"></a>00129 
+<a name="l00131"></a><a class="code" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">00131</a>     <span class="keywordtype">void</span> <a class="code" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>() {
+<a name="l00132"></a>00132         <span class="keywordflow">if</span>( count&lt;=LOOPS_BEFORE_YIELD ) {
+<a name="l00133"></a>00133             __TBB_Pause(count);
+<a name="l00134"></a>00134             <span class="comment">// Pause twice as long the next time.</span>
+<a name="l00135"></a>00135             count*=2;
+<a name="l00136"></a>00136         } <span class="keywordflow">else</span> {
+<a name="l00137"></a>00137             <span class="comment">// Pause is so long that we might as well yield CPU to scheduler.</span>
+<a name="l00138"></a>00138             __TBB_Yield();
+<a name="l00139"></a>00139         }
+<a name="l00140"></a>00140     }
+<a name="l00141"></a>00141 
+<a name="l00142"></a>00142     <span class="comment">// pause for a few times and then return false immediately.</span>
+<a name="l00143"></a>00143     <span class="keywordtype">bool</span> bounded_pause() {
+<a name="l00144"></a>00144         <span class="keywordflow">if</span>( count&lt;=LOOPS_BEFORE_YIELD ) {
+<a name="l00145"></a>00145             __TBB_Pause(count);
+<a name="l00146"></a>00146             <span class="comment">// Pause twice as long the next time.</span>
+<a name="l00147"></a>00147             count*=2;
+<a name="l00148"></a>00148             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00149"></a>00149         } <span class="keywordflow">else</span> {
+<a name="l00150"></a>00150             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00151"></a>00151         }
+<a name="l00152"></a>00152     }
+<a name="l00153"></a>00153 
+<a name="l00154"></a>00154     <span class="keywordtype">void</span> reset() {
+<a name="l00155"></a>00155         count = 1;
+<a name="l00156"></a>00156     }
+<a name="l00157"></a>00157 };
+<a name="l00158"></a>00158 
+<a name="l00160"></a>00160 
+<a name="l00161"></a>00161 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00162"></a>00162 <span class="keywordtype">void</span> spin_wait_while_eq( <span class="keyword">const</span> <span class="keyword">volatile</span> T&amp; location, U value ) {
+<a name="l00163"></a>00163     atomic_backoff backoff;
+<a name="l00164"></a>00164     <span class="keywordflow">while</span>( location==value ) backoff.pause();
+<a name="l00165"></a>00165 }
+<a name="l00166"></a>00166 
+<a name="l00168"></a>00168 
+<a name="l00169"></a>00169 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;
+<a name="l00170"></a>00170 <span class="keywordtype">void</span> spin_wait_until_eq( <span class="keyword">const</span> <span class="keyword">volatile</span> T&amp; location, <span class="keyword">const</span> U value ) {
+<a name="l00171"></a>00171     atomic_backoff backoff;
+<a name="l00172"></a>00172     <span class="keywordflow">while</span>( location!=value ) backoff.pause();
+<a name="l00173"></a>00173 }
+<a name="l00174"></a>00174 
+<a name="l00175"></a>00175 <span class="comment">// T should be unsigned, otherwise sign propagation will break correctness of bit manipulations.</span>
+<a name="l00176"></a>00176 <span class="comment">// S should be either 1 or 2, for the mask calculation to work correctly.</span>
+<a name="l00177"></a>00177 <span class="comment">// Together, these rules limit applicability of Masked CAS to unsigned char and unsigned short.</span>
+<a name="l00178"></a>00178 <span class="keyword">template</span>&lt;size_t S, <span class="keyword">typename</span> T&gt;
+<a name="l00179"></a>00179 <span class="keyword">inline</span> T __TBB_MaskedCompareAndSwap (<span class="keyword">volatile</span> T *ptr, T value, T comparand ) {
+<a name="l00180"></a>00180     <span class="keyword">volatile</span> uint32_t * base = (uint32_t*)( (uintptr_t)ptr &amp; ~(uintptr_t)0x3 );
+<a name="l00181"></a>00181 <span class="preprocessor">#if __TBB_BIG_ENDIAN</span>
+<a name="l00182"></a>00182 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*( 4-S - (uintptr_t(ptr) &amp; 0x3) ) );
+<a name="l00183"></a>00183 <span class="preprocessor">#else</span>
+<a name="l00184"></a>00184 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*((uintptr_t)ptr &amp; 0x3) );
+<a name="l00185"></a>00185 <span class="preprocessor">#endif</span>
+<a name="l00186"></a>00186 <span class="preprocessor"></span>    <span class="keyword">const</span> uint32_t mask = ( (1&lt;&lt;(S*8)) - 1 )&lt;&lt;bitoffset;
+<a name="l00187"></a>00187     atomic_backoff b;
+<a name="l00188"></a>00188     uint32_t result;
+<a name="l00189"></a>00189     <span class="keywordflow">for</span>(;;) {
+<a name="l00190"></a>00190         result = *base; <span class="comment">// reload the base value which might change during the pause</span>
+<a name="l00191"></a>00191         uint32_t old_value = ( result &amp; ~mask ) | ( comparand &lt;&lt; bitoffset );
+<a name="l00192"></a>00192         uint32_t new_value = ( result &amp; ~mask ) | ( value &lt;&lt; bitoffset );
+<a name="l00193"></a>00193         <span class="comment">// __TBB_CompareAndSwap4 presumed to have full fence. </span>
+<a name="l00194"></a>00194         result = __TBB_CompareAndSwap4( base, new_value, old_value );
+<a name="l00195"></a>00195         <span class="keywordflow">if</span>(  result==old_value               <span class="comment">// CAS succeeded</span>
+<a name="l00196"></a>00196           || ((result^old_value)&amp;mask)!=0 )  <span class="comment">// CAS failed and the bits of interest have changed</span>
+<a name="l00197"></a>00197             <span class="keywordflow">break</span>;
+<a name="l00198"></a>00198         <span class="keywordflow">else</span>                                 <span class="comment">// CAS failed but the bits of interest left unchanged</span>
+<a name="l00199"></a>00199             b.pause();
+<a name="l00200"></a>00200     }
+<a name="l00201"></a>00201     <span class="keywordflow">return</span> T((result &amp; mask) &gt;&gt; bitoffset);
+<a name="l00202"></a>00202 }
+<a name="l00203"></a>00203 
+<a name="l00204"></a>00204 <span class="keyword">template</span>&lt;size_t S, <span class="keyword">typename</span> T&gt;
+<a name="l00205"></a>00205 <span class="keyword">inline</span> T __TBB_CompareAndSwapGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value, T comparand ) { 
+<a name="l00206"></a>00206     <span class="keywordflow">return</span> __TBB_CompareAndSwapW((T *)ptr,value,comparand);
+<a name="l00207"></a>00207 }
+<a name="l00208"></a>00208 
+<a name="l00209"></a>00209 <span class="keyword">template</span>&lt;&gt;
+<a name="l00210"></a>00210 <span class="keyword">inline</span> uint8_t __TBB_CompareAndSwapGeneric &lt;1,uint8_t&gt; (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, uint8_t value, uint8_t comparand ) {
+<a name="l00211"></a>00211 #ifdef __TBB_CompareAndSwap1
+<a name="l00212"></a>00212     <span class="keywordflow">return</span> __TBB_CompareAndSwap1(ptr,value,comparand);
+<a name="l00213"></a>00213 <span class="preprocessor">#else</span>
+<a name="l00214"></a>00214 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap&lt;1,uint8_t&gt;((<span class="keyword">volatile</span> uint8_t *)ptr,value,comparand);
+<a name="l00215"></a>00215 <span class="preprocessor">#endif</span>
+<a name="l00216"></a>00216 <span class="preprocessor"></span>}
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218 <span class="keyword">template</span>&lt;&gt;
+<a name="l00219"></a>00219 <span class="keyword">inline</span> uint16_t __TBB_CompareAndSwapGeneric &lt;2,uint16_t&gt; (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, uint16_t value, uint16_t comparand ) {
+<a name="l00220"></a>00220 #ifdef __TBB_CompareAndSwap2
+<a name="l00221"></a>00221     <span class="keywordflow">return</span> __TBB_CompareAndSwap2(ptr,value,comparand);
+<a name="l00222"></a>00222 <span class="preprocessor">#else</span>
+<a name="l00223"></a>00223 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap&lt;2,uint16_t&gt;((<span class="keyword">volatile</span> uint16_t *)ptr,value,comparand);
+<a name="l00224"></a>00224 <span class="preprocessor">#endif</span>
+<a name="l00225"></a>00225 <span class="preprocessor"></span>}
+<a name="l00226"></a>00226 
+<a name="l00227"></a>00227 <span class="keyword">template</span>&lt;&gt;
+<a name="l00228"></a>00228 <span class="keyword">inline</span> uint32_t __TBB_CompareAndSwapGeneric &lt;4,uint32_t&gt; (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, uint32_t value, uint32_t comparand ) { 
+<a name="l00229"></a>00229     <span class="keywordflow">return</span> __TBB_CompareAndSwap4(ptr,value,comparand);
+<a name="l00230"></a>00230 }
+<a name="l00231"></a>00231 
+<a name="l00232"></a>00232 <span class="keyword">template</span>&lt;&gt;
+<a name="l00233"></a>00233 <span class="keyword">inline</span> uint64_t __TBB_CompareAndSwapGeneric &lt;8,uint64_t&gt; (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, uint64_t value, uint64_t comparand ) { 
+<a name="l00234"></a>00234     <span class="keywordflow">return</span> __TBB_CompareAndSwap8(ptr,value,comparand);
+<a name="l00235"></a>00235 }
+<a name="l00236"></a>00236 
+<a name="l00237"></a>00237 <span class="keyword">template</span>&lt;size_t S, <span class="keyword">typename</span> T&gt;
+<a name="l00238"></a>00238 <span class="keyword">inline</span> T __TBB_FetchAndAddGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T addend) {
+<a name="l00239"></a>00239     atomic_backoff b;
+<a name="l00240"></a>00240     T result;
+<a name="l00241"></a>00241     <span class="keywordflow">for</span>(;;) {
+<a name="l00242"></a>00242         result = *reinterpret_cast&lt;volatile T *&gt;(ptr);
+<a name="l00243"></a>00243         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence. </span>
+<a name="l00244"></a>00244         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric&lt;S,T&gt; ( ptr, result+addend, result )==result ) 
+<a name="l00245"></a>00245             <span class="keywordflow">break</span>;
+<a name="l00246"></a>00246         b.pause();
+<a name="l00247"></a>00247     }
+<a name="l00248"></a>00248     <span class="keywordflow">return</span> result;
+<a name="l00249"></a>00249 }
+<a name="l00250"></a>00250 
+<a name="l00251"></a>00251 <span class="keyword">template</span>&lt;size_t S, <span class="keyword">typename</span> T&gt;
+<a name="l00252"></a>00252 <span class="keyword">inline</span> T __TBB_FetchAndStoreGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value) {
+<a name="l00253"></a>00253     atomic_backoff b;
+<a name="l00254"></a>00254     T result;
+<a name="l00255"></a>00255     <span class="keywordflow">for</span>(;;) {
+<a name="l00256"></a>00256         result = *reinterpret_cast&lt;volatile T *&gt;(ptr);
+<a name="l00257"></a>00257         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence.</span>
+<a name="l00258"></a>00258         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric&lt;S,T&gt; ( ptr, value, result )==result ) 
+<a name="l00259"></a>00259             <span class="keywordflow">break</span>;
+<a name="l00260"></a>00260         b.pause();
+<a name="l00261"></a>00261     }
+<a name="l00262"></a>00262     <span class="keywordflow">return</span> result;
+<a name="l00263"></a>00263 }
+<a name="l00264"></a>00264 
+<a name="l00265"></a>00265 <span class="comment">// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as </span>
+<a name="l00266"></a>00266 <span class="comment">// strict as type T.  Type type should have a trivial default constructor and destructor, so that</span>
+<a name="l00267"></a>00267 <span class="comment">// arrays of that type can be declared without initializers.  </span>
+<a name="l00268"></a>00268 <span class="comment">// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands</span>
+<a name="l00269"></a>00269 <span class="comment">// to a type bigger than T.</span>
+<a name="l00270"></a>00270 <span class="comment">// The default definition here works on machines where integers are naturally aligned and the</span>
+<a name="l00271"></a>00271 <span class="comment">// strictest alignment is 16.</span>
+<a name="l00272"></a>00272 <span class="preprocessor">#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict</span>
+<a name="l00273"></a>00273 <span class="preprocessor"></span>
+<a name="l00274"></a>00274 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC</span>
+<a name="l00275"></a>00275 <span class="preprocessor"></span><span class="keyword">struct </span>__TBB_machine_type_with_strictest_alignment {
+<a name="l00276"></a>00276     <span class="keywordtype">int</span> member[4];
+<a name="l00277"></a>00277 } __attribute__((aligned(16)));
+<a name="l00278"></a>00278 <span class="preprocessor">#elif _MSC_VER</span>
+<a name="l00279"></a>00279 <span class="preprocessor"></span>__declspec(align(16)) struct __TBB_machine_type_with_strictest_alignment {
+<a name="l00280"></a>00280     <span class="keywordtype">int</span> member[4];
+<a name="l00281"></a>00281 };
+<a name="l00282"></a>00282 <span class="preprocessor">#else</span>
+<a name="l00283"></a>00283 <span class="preprocessor"></span><span class="preprocessor">#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T) or __TBB_machine_type_with_strictest_alignment</span>
+<a name="l00284"></a>00284 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00285"></a>00285 <span class="preprocessor"></span>
+<a name="l00286"></a>00286 <span class="keyword">template</span>&lt;size_t N&gt; <span class="keyword">struct </span>type_with_alignment {__TBB_machine_type_with_strictest_alignment member;};
+<a name="l00287"></a>00287 <span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>type_with_alignment&lt;1&gt; { <span class="keywordtype">char</span> member; };
+<a name="l00288"></a>00288 <span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>type_with_alignment&lt;2&gt; { uint16_t member; };
+<a name="l00289"></a>00289 <span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>type_with_alignment&lt;4&gt; { uint32_t member; };
+<a name="l00290"></a>00290 <span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>type_with_alignment&lt;8&gt; { uint64_t member; };
+<a name="l00291"></a>00291 
+<a name="l00292"></a>00292 <span class="preprocessor">#if _MSC_VER||defined(__GNUC__)&amp;&amp;__GNUC__==3 &amp;&amp; __GNUC_MINOR__&lt;=2  </span>
+<a name="l00294"></a>00294 <span class="preprocessor"></span>
+<a name="l00296"></a>00296 <span class="preprocessor">template&lt;size_t Size, typename T&gt; </span>
+<a name="l00297"></a><a class="code" href="a00178.html">00297</a> <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00178.html">work_around_alignment_bug</a> {
+<a name="l00298"></a>00298 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00299"></a>00299 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof(T);
+<a name="l00300"></a>00300 <span class="preprocessor">#else</span>
+<a name="l00301"></a>00301 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof__(T);
+<a name="l00302"></a>00302 <span class="preprocessor">#endif</span>
+<a name="l00303"></a>00303 <span class="preprocessor"></span>};
+<a name="l00304"></a>00304 <span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment&lt;tbb::internal::work_around_alignment_bug&lt;sizeof(T),T&gt;::alignment&gt;</span>
+<a name="l00305"></a>00305 <span class="preprocessor"></span><span class="preprocessor">#elif __GNUC__ || __SUNPRO_CC</span>
+<a name="l00306"></a>00306 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment&lt;__alignof__(T)&gt;</span>
+<a name="l00307"></a>00307 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00308"></a>00308 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) __TBB_machine_type_with_strictest_alignment</span>
+<a name="l00309"></a>00309 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00310"></a>00310 <span class="preprocessor"></span><span class="preprocessor">#endif  </span><span class="comment">/* ____TBB_TypeWithAlignmentAtLeastAsStrict */</span>
+<a name="l00311"></a>00311 
+<a name="l00312"></a>00312 } <span class="comment">// namespace internal</span>
+<a name="l00313"></a>00313 } <span class="comment">// namespace tbb</span>
+<a name="l00314"></a>00314 
+<a name="l00315"></a>00315 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1</span>
+<a name="l00316"></a>00316 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1 tbb::internal::__TBB_CompareAndSwapGeneric&lt;1,uint8_t&gt;</span>
+<a name="l00317"></a>00317 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00318"></a>00318 <span class="preprocessor"></span>
+<a name="l00319"></a>00319 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2 </span>
+<a name="l00320"></a>00320 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2 tbb::internal::__TBB_CompareAndSwapGeneric&lt;2,uint16_t&gt;</span>
+<a name="l00321"></a>00321 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00322"></a>00322 <span class="preprocessor"></span>
+<a name="l00323"></a>00323 <span class="preprocessor">#ifndef __TBB_CompareAndSwapW</span>
+<a name="l00324"></a>00324 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwapW tbb::internal::__TBB_CompareAndSwapGeneric&lt;sizeof(ptrdiff_t),ptrdiff_t&gt;</span>
+<a name="l00325"></a>00325 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00326"></a>00326 <span class="preprocessor"></span>
+<a name="l00327"></a>00327 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1</span>
+<a name="l00328"></a>00328 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1 tbb::internal::__TBB_FetchAndAddGeneric&lt;1,uint8_t&gt;</span>
+<a name="l00329"></a>00329 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00330"></a>00330 <span class="preprocessor"></span>
+<a name="l00331"></a>00331 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2</span>
+<a name="l00332"></a>00332 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2 tbb::internal::__TBB_FetchAndAddGeneric&lt;2,uint16_t&gt;</span>
+<a name="l00333"></a>00333 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00334"></a>00334 <span class="preprocessor"></span>
+<a name="l00335"></a>00335 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4</span>
+<a name="l00336"></a>00336 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4 tbb::internal::__TBB_FetchAndAddGeneric&lt;4,uint32_t&gt;</span>
+<a name="l00337"></a>00337 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00338"></a>00338 <span class="preprocessor"></span>
+<a name="l00339"></a>00339 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8</span>
+<a name="l00340"></a>00340 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8 tbb::internal::__TBB_FetchAndAddGeneric&lt;8,uint64_t&gt;</span>
+<a name="l00341"></a>00341 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00342"></a>00342 <span class="preprocessor"></span>
+<a name="l00343"></a>00343 <span class="preprocessor">#ifndef __TBB_FetchAndAddW</span>
+<a name="l00344"></a>00344 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddW tbb::internal::__TBB_FetchAndAddGeneric&lt;sizeof(ptrdiff_t),ptrdiff_t&gt;</span>
+<a name="l00345"></a>00345 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00346"></a>00346 <span class="preprocessor"></span>
+<a name="l00347"></a>00347 <span class="preprocessor">#ifndef __TBB_FetchAndStore1</span>
+<a name="l00348"></a>00348 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1 tbb::internal::__TBB_FetchAndStoreGeneric&lt;1,uint8_t&gt;</span>
+<a name="l00349"></a>00349 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00350"></a>00350 <span class="preprocessor"></span>
+<a name="l00351"></a>00351 <span class="preprocessor">#ifndef __TBB_FetchAndStore2</span>
+<a name="l00352"></a>00352 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2 tbb::internal::__TBB_FetchAndStoreGeneric&lt;2,uint16_t&gt;</span>
+<a name="l00353"></a>00353 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00354"></a>00354 <span class="preprocessor"></span>
+<a name="l00355"></a>00355 <span class="preprocessor">#ifndef __TBB_FetchAndStore4</span>
+<a name="l00356"></a>00356 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4 tbb::internal::__TBB_FetchAndStoreGeneric&lt;4,uint32_t&gt;</span>
+<a name="l00357"></a>00357 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00358"></a>00358 <span class="preprocessor"></span>
+<a name="l00359"></a>00359 <span class="preprocessor">#ifndef __TBB_FetchAndStore8</span>
+<a name="l00360"></a>00360 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8 tbb::internal::__TBB_FetchAndStoreGeneric&lt;8,uint64_t&gt;</span>
+<a name="l00361"></a>00361 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00362"></a>00362 <span class="preprocessor"></span>
+<a name="l00363"></a>00363 <span class="preprocessor">#ifndef __TBB_FetchAndStoreW</span>
+<a name="l00364"></a>00364 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStoreW tbb::internal::__TBB_FetchAndStoreGeneric&lt;sizeof(ptrdiff_t),ptrdiff_t&gt;</span>
+<a name="l00365"></a>00365 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00366"></a>00366 <span class="preprocessor"></span>
+<a name="l00367"></a>00367 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
+<a name="l00368"></a>00368 <span class="preprocessor"></span>
+<a name="l00369"></a>00369 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1__TBB_full_fence</span>
+<a name="l00370"></a>00370 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1__TBB_full_fence __TBB_CompareAndSwap1</span>
+<a name="l00371"></a>00371 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00372"></a>00372 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1acquire</span>
+<a name="l00373"></a>00373 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1acquire __TBB_CompareAndSwap1__TBB_full_fence</span>
+<a name="l00374"></a>00374 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00375"></a>00375 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1release</span>
+<a name="l00376"></a>00376 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1release __TBB_CompareAndSwap1__TBB_full_fence</span>
+<a name="l00377"></a>00377 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00378"></a>00378 <span class="preprocessor"></span>
+<a name="l00379"></a>00379 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2__TBB_full_fence</span>
+<a name="l00380"></a>00380 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2__TBB_full_fence __TBB_CompareAndSwap2</span>
+<a name="l00381"></a>00381 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00382"></a>00382 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2acquire</span>
+<a name="l00383"></a>00383 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2acquire __TBB_CompareAndSwap2__TBB_full_fence</span>
+<a name="l00384"></a>00384 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00385"></a>00385 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2release</span>
+<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2release __TBB_CompareAndSwap2__TBB_full_fence</span>
+<a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00388"></a>00388 <span class="preprocessor"></span>
+<a name="l00389"></a>00389 <span class="preprocessor">#ifndef __TBB_CompareAndSwap4__TBB_full_fence</span>
+<a name="l00390"></a>00390 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4__TBB_full_fence __TBB_CompareAndSwap4</span>
+<a name="l00391"></a>00391 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00392"></a>00392 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4acquire</span>
+<a name="l00393"></a>00393 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4acquire __TBB_CompareAndSwap4__TBB_full_fence</span>
+<a name="l00394"></a>00394 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00395"></a>00395 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4release</span>
+<a name="l00396"></a>00396 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4release __TBB_CompareAndSwap4__TBB_full_fence</span>
+<a name="l00397"></a>00397 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+<a name="l00398"></a>00398 <span class="preprocessor"></span>
+<a name="l00399"></a>00399 <span class="preprocessor">#ifndef __TBB_CompareAndSwap8__TBB_full_fence</span>
+<a name="l00400"></a>00400 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8__TBB_full_fence __TBB_CompareAndSwap8</span>
+<a name="l00401"></a>00401 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00402"></a>00402 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8acquire</span>
+<a name="l00403"></a>00403 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8acquire __TBB_CompareAndSwap8__TBB_full_fence</span>
+<a name="l00404"></a>00404 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00405"></a>00405 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8release</span>
+<a name="l00406"></a>00406 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8release __TBB_CompareAndSwap8__TBB_full_fence</span>
+<a name="l00407"></a>00407 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00408"></a>00408 <span class="preprocessor"></span>
+<a name="l00409"></a>00409 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1__TBB_full_fence</span>
+<a name="l00410"></a>00410 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1__TBB_full_fence __TBB_FetchAndAdd1</span>
+<a name="l00411"></a>00411 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00412"></a>00412 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1acquire</span>
+<a name="l00413"></a>00413 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1acquire __TBB_FetchAndAdd1__TBB_full_fence</span>
+<a name="l00414"></a>00414 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00415"></a>00415 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1release</span>
+<a name="l00416"></a>00416 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1release __TBB_FetchAndAdd1__TBB_full_fence</span>
+<a name="l00417"></a>00417 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00418"></a>00418 <span class="preprocessor"></span>
+<a name="l00419"></a>00419 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2__TBB_full_fence</span>
+<a name="l00420"></a>00420 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2__TBB_full_fence __TBB_FetchAndAdd2</span>
+<a name="l00421"></a>00421 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00422"></a>00422 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2acquire</span>
+<a name="l00423"></a>00423 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2acquire __TBB_FetchAndAdd2__TBB_full_fence</span>
+<a name="l00424"></a>00424 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00425"></a>00425 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2release</span>
+<a name="l00426"></a>00426 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2release __TBB_FetchAndAdd2__TBB_full_fence</span>
+<a name="l00427"></a>00427 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00428"></a>00428 <span class="preprocessor"></span>
+<a name="l00429"></a>00429 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4__TBB_full_fence</span>
+<a name="l00430"></a>00430 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4__TBB_full_fence __TBB_FetchAndAdd4</span>
+<a name="l00431"></a>00431 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00432"></a>00432 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4acquire</span>
+<a name="l00433"></a>00433 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4acquire __TBB_FetchAndAdd4__TBB_full_fence</span>
+<a name="l00434"></a>00434 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00435"></a>00435 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4release</span>
+<a name="l00436"></a>00436 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4release __TBB_FetchAndAdd4__TBB_full_fence</span>
+<a name="l00437"></a>00437 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00438"></a>00438 <span class="preprocessor"></span>
+<a name="l00439"></a>00439 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8__TBB_full_fence</span>
+<a name="l00440"></a>00440 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8__TBB_full_fence __TBB_FetchAndAdd8</span>
+<a name="l00441"></a>00441 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00442"></a>00442 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8acquire</span>
+<a name="l00443"></a>00443 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8acquire __TBB_FetchAndAdd8__TBB_full_fence</span>
+<a name="l00444"></a>00444 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00445"></a>00445 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8release</span>
+<a name="l00446"></a>00446 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8release __TBB_FetchAndAdd8__TBB_full_fence</span>
+<a name="l00447"></a>00447 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00448"></a>00448 <span class="preprocessor"></span>
+<a name="l00449"></a>00449 <span class="preprocessor">#ifndef __TBB_FetchAndStore1__TBB_full_fence</span>
+<a name="l00450"></a>00450 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1__TBB_full_fence __TBB_FetchAndStore1</span>
+<a name="l00451"></a>00451 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00452"></a>00452 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1acquire</span>
+<a name="l00453"></a>00453 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1acquire __TBB_FetchAndStore1__TBB_full_fence</span>
+<a name="l00454"></a>00454 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00455"></a>00455 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1release</span>
+<a name="l00456"></a>00456 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1release __TBB_FetchAndStore1__TBB_full_fence</span>
+<a name="l00457"></a>00457 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00458"></a>00458 <span class="preprocessor"></span>
+<a name="l00459"></a>00459 <span class="preprocessor">#ifndef __TBB_FetchAndStore2__TBB_full_fence</span>
+<a name="l00460"></a>00460 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2__TBB_full_fence __TBB_FetchAndStore2</span>
+<a name="l00461"></a>00461 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00462"></a>00462 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2acquire</span>
+<a name="l00463"></a>00463 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2acquire __TBB_FetchAndStore2__TBB_full_fence</span>
+<a name="l00464"></a>00464 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00465"></a>00465 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2release</span>
+<a name="l00466"></a>00466 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2release __TBB_FetchAndStore2__TBB_full_fence</span>
+<a name="l00467"></a>00467 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00468"></a>00468 <span class="preprocessor"></span>
+<a name="l00469"></a>00469 <span class="preprocessor">#ifndef __TBB_FetchAndStore4__TBB_full_fence</span>
+<a name="l00470"></a>00470 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4__TBB_full_fence __TBB_FetchAndStore4</span>
+<a name="l00471"></a>00471 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00472"></a>00472 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4acquire</span>
+<a name="l00473"></a>00473 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4acquire __TBB_FetchAndStore4__TBB_full_fence</span>
+<a name="l00474"></a>00474 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00475"></a>00475 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4release</span>
+<a name="l00476"></a>00476 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4release __TBB_FetchAndStore4__TBB_full_fence</span>
+<a name="l00477"></a>00477 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00478"></a>00478 <span class="preprocessor"></span>
+<a name="l00479"></a>00479 <span class="preprocessor">#ifndef __TBB_FetchAndStore8__TBB_full_fence</span>
+<a name="l00480"></a>00480 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8__TBB_full_fence __TBB_FetchAndStore8</span>
+<a name="l00481"></a>00481 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00482"></a>00482 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8acquire</span>
+<a name="l00483"></a>00483 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8acquire __TBB_FetchAndStore8__TBB_full_fence</span>
+<a name="l00484"></a>00484 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00485"></a>00485 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8release</span>
+<a name="l00486"></a>00486 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8release __TBB_FetchAndStore8__TBB_full_fence</span>
+<a name="l00487"></a>00487 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00488"></a>00488 <span class="preprocessor"></span>
+<a name="l00489"></a>00489 <span class="preprocessor">#endif // __TBB_DECL_FENCED_ATOMICS</span>
+<a name="l00490"></a>00490 <span class="preprocessor"></span>
+<a name="l00491"></a>00491 <span class="comment">// Special atomic functions</span>
+<a name="l00492"></a>00492 <span class="preprocessor">#ifndef __TBB_FetchAndAddWrelease</span>
+<a name="l00493"></a>00493 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddWrelease __TBB_FetchAndAddW</span>
+<a name="l00494"></a>00494 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00495"></a>00495 <span class="preprocessor"></span>
+<a name="l00496"></a>00496 <span class="preprocessor">#ifndef __TBB_FetchAndIncrementWacquire</span>
+<a name="l00497"></a>00497 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)</span>
+<a name="l00498"></a>00498 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00499"></a>00499 <span class="preprocessor"></span>
+<a name="l00500"></a>00500 <span class="preprocessor">#ifndef __TBB_FetchAndDecrementWrelease</span>
+<a name="l00501"></a>00501 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,(-1))</span>
+<a name="l00502"></a>00502 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00503"></a>00503 <span class="preprocessor"></span>
+<a name="l00504"></a>00504 <span class="preprocessor">#if __TBB_WORDSIZE==4</span>
+<a name="l00505"></a>00505 <span class="preprocessor"></span><span class="comment">// On 32-bit platforms, "atomic.h" requires definition of __TBB_Store8 and __TBB_Load8</span>
+<a name="l00506"></a>00506 <span class="preprocessor">#ifndef __TBB_Store8</span>
+<a name="l00507"></a>00507 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_Store8 (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, int64_t value) {
+<a name="l00508"></a>00508     <a class="code" href="a00119.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00509"></a>00509     <span class="keywordflow">for</span>(;;) {
+<a name="l00510"></a>00510         int64_t result = *(int64_t *)ptr;
+<a name="l00511"></a>00511         <span class="keywordflow">if</span>( __TBB_CompareAndSwap8(ptr,value,result)==result ) <span class="keywordflow">break</span>;
+<a name="l00512"></a>00512         b.<a class="code" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00513"></a>00513     }
+<a name="l00514"></a>00514 }
+<a name="l00515"></a>00515 <span class="preprocessor">#endif</span>
+<a name="l00516"></a>00516 <span class="preprocessor"></span>
+<a name="l00517"></a>00517 <span class="preprocessor">#ifndef __TBB_Load8</span>
+<a name="l00518"></a>00518 <span class="preprocessor"></span><span class="keyword">inline</span> int64_t __TBB_Load8 (<span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr) {
+<a name="l00519"></a>00519     int64_t result = *(int64_t *)ptr;
+<a name="l00520"></a>00520     result = __TBB_CompareAndSwap8((<span class="keyword">volatile</span> <span class="keywordtype">void</span> *)ptr,result,result);
+<a name="l00521"></a>00521     <span class="keywordflow">return</span> result;
+<a name="l00522"></a>00522 }
+<a name="l00523"></a>00523 <span class="preprocessor">#endif</span>
+<a name="l00524"></a>00524 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
+<a name="l00525"></a>00525 
+<a name="l00526"></a>00526 <span class="preprocessor">#ifndef __TBB_Log2</span>
+<a name="l00527"></a>00527 <span class="preprocessor"></span><span class="keyword">inline</span> intptr_t __TBB_Log2( uintptr_t x ) {
+<a name="l00528"></a>00528     <span class="keywordflow">if</span>( x==0 ) <span class="keywordflow">return</span> -1;
+<a name="l00529"></a>00529     intptr_t result = 0;
+<a name="l00530"></a>00530     uintptr_t tmp;
+<a name="l00531"></a>00531 <span class="preprocessor">#if __TBB_WORDSIZE&gt;=8</span>
+<a name="l00532"></a>00532 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x&gt;&gt;32) ) { x=tmp; result += 32; }
+<a name="l00533"></a>00533 <span class="preprocessor">#endif</span>
+<a name="l00534"></a>00534 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x&gt;&gt;16) ) { x=tmp; result += 16; }
+<a name="l00535"></a>00535     <span class="keywordflow">if</span>( (tmp = x&gt;&gt;8) )  { x=tmp; result += 8; }
+<a name="l00536"></a>00536     <span class="keywordflow">if</span>( (tmp = x&gt;&gt;4) )  { x=tmp; result += 4; }
+<a name="l00537"></a>00537     <span class="keywordflow">if</span>( (tmp = x&gt;&gt;2) )  { x=tmp; result += 2; }
+<a name="l00538"></a>00538     <span class="keywordflow">return</span> (x&amp;2)? result+1: result;
+<a name="l00539"></a>00539 }
+<a name="l00540"></a>00540 <span class="preprocessor">#endif</span>
+<a name="l00541"></a>00541 <span class="preprocessor"></span>
+<a name="l00542"></a>00542 <span class="preprocessor">#ifndef __TBB_AtomicOR</span>
+<a name="l00543"></a>00543 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_AtomicOR( <span class="keyword">volatile</span> <span class="keywordtype">void</span> *operand, uintptr_t addend ) {
+<a name="l00544"></a>00544     <a class="code" href="a00119.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00545"></a>00545     <span class="keywordflow">for</span>(;;) {
+<a name="l00546"></a>00546         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
+<a name="l00547"></a>00547         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);
+<a name="l00548"></a>00548         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
+<a name="l00549"></a>00549         b.<a class="code" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00550"></a>00550     }
+<a name="l00551"></a>00551 }
+<a name="l00552"></a>00552 <span class="preprocessor">#endif</span>
+<a name="l00553"></a>00553 <span class="preprocessor"></span>
+<a name="l00554"></a>00554 <span class="preprocessor">#ifndef __TBB_AtomicAND</span>
+<a name="l00555"></a>00555 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_AtomicAND( <span class="keyword">volatile</span> <span class="keywordtype">void</span> *operand, uintptr_t addend ) {
+<a name="l00556"></a>00556     <a class="code" href="a00119.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00557"></a>00557     <span class="keywordflow">for</span>(;;) {
+<a name="l00558"></a>00558         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
+<a name="l00559"></a>00559         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&amp;addend, tmp);
+<a name="l00560"></a>00560         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
+<a name="l00561"></a>00561         b.<a class="code" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00562"></a>00562     }
+<a name="l00563"></a>00563 }
+<a name="l00564"></a>00564 <span class="preprocessor">#endif</span>
+<a name="l00565"></a>00565 <span class="preprocessor"></span>
+<a name="l00566"></a>00566 <span class="preprocessor">#ifndef __TBB_TryLockByte</span>
+<a name="l00567"></a>00567 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> __TBB_TryLockByte( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> &amp;flag ) {
+<a name="l00568"></a>00568     <span class="keywordflow">return</span> __TBB_CompareAndSwap1(&amp;flag,1,0)==0;
+<a name="l00569"></a>00569 }
+<a name="l00570"></a>00570 <span class="preprocessor">#endif</span>
+<a name="l00571"></a>00571 <span class="preprocessor"></span>
+<a name="l00572"></a>00572 <span class="preprocessor">#ifndef __TBB_LockByte</span>
+<a name="l00573"></a>00573 <span class="preprocessor"></span><span class="keyword">inline</span> uintptr_t __TBB_LockByte( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>&amp; flag ) {
+<a name="l00574"></a>00574     <span class="keywordflow">if</span> ( !__TBB_TryLockByte(flag) ) {
+<a name="l00575"></a>00575         <a class="code" href="a00119.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00576"></a>00576         <span class="keywordflow">do</span> {
+<a name="l00577"></a>00577             b.<a class="code" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00578"></a>00578         } <span class="keywordflow">while</span> ( !__TBB_TryLockByte(flag) );
+<a name="l00579"></a>00579     }
+<a name="l00580"></a>00580     <span class="keywordflow">return</span> 0;
+<a name="l00581"></a>00581 }
+<a name="l00582"></a>00582 <span class="preprocessor">#endif</span>
+<a name="l00583"></a>00583 <span class="preprocessor"></span>
+<a name="l00584"></a>00584 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_machine_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00385.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00385.html
new file mode 100644 (file)
index 0000000..34ef897
--- /dev/null
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb_profiling.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb_profiling.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_profiling_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_profiling_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="comment">// Check if the tools support is enabled</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#if (_WIN32||_WIN64||__linux__) &amp;&amp; TBB_USE_THREADING_TOOLS</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span>
+<a name="l00027"></a>00027 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#include &lt;stdlib.h&gt;</span>  <span class="comment">/* mbstowcs_s */</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00031"></a>00031 
+<a name="l00032"></a>00032 <span class="keyword">namespace </span>tbb {
+<a name="l00033"></a>00033     <span class="keyword">namespace </span>internal {
+<a name="l00034"></a>00034 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>        <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_set_sync_name_v3( <span class="keywordtype">void</span> *obj, <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* name ); 
+<a name="l00036"></a>00036         <span class="keyword">inline</span> size_t multibyte_to_widechar( <span class="keywordtype">wchar_t</span>* wcs, <span class="keyword">const</span> <span class="keywordtype">char</span>* mbs, size_t bufsize) {
+<a name="l00037"></a>00037 <span class="preprocessor">#if _MSC_VER&gt;=1400</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>            size_t len;
+<a name="l00039"></a>00039             mbstowcs_s( &amp;len, wcs, bufsize, mbs, _TRUNCATE );
+<a name="l00040"></a>00040             <span class="keywordflow">return</span> len;   <span class="comment">// mbstowcs_s counts null terminator</span>
+<a name="l00041"></a>00041 <span class="preprocessor">#else</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>            size_t len = mbstowcs( wcs, mbs, bufsize );
+<a name="l00043"></a>00043             <span class="keywordflow">if</span>(wcs &amp;&amp; len!=size_t(-1) )
+<a name="l00044"></a>00044                 wcs[len&lt;bufsize-1? len: bufsize-1] = wchar_t(<span class="charliteral">'\0'</span>);
+<a name="l00045"></a>00045             <span class="keywordflow">return</span> len+1; <span class="comment">// mbstowcs does not count null terminator</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#endif</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span>        }
+<a name="l00048"></a>00048 <span class="preprocessor">#else</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>        <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_set_sync_name_v3( <span class="keywordtype">void</span> *obj, <span class="keyword">const</span> <span class="keywordtype">char</span>* name ); 
+<a name="l00050"></a>00050 <span class="preprocessor">#endif</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span>    } <span class="comment">// namespace internal</span>
+<a name="l00052"></a>00052 } <span class="comment">// namespace tbb</span>
+<a name="l00053"></a>00053 
+<a name="l00055"></a>00055 
+<a name="l00057"></a>00057 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \</span>
+<a name="l00059"></a>00059 <span class="preprocessor">        namespace profiling {                                                       \</span>
+<a name="l00060"></a>00060 <span class="preprocessor">            inline void set_name( sync_object_type&amp; obj, const wchar_t* name ) {    \</span>
+<a name="l00061"></a>00061 <span class="preprocessor">                tbb::internal::itt_set_sync_name_v3( &amp;obj, name );                  \</span>
+<a name="l00062"></a>00062 <span class="preprocessor">            }                                                                       \</span>
+<a name="l00063"></a>00063 <span class="preprocessor">            inline void set_name( sync_object_type&amp; obj, const char* name ) {       \</span>
+<a name="l00064"></a>00064 <span class="preprocessor">                size_t len = tbb::internal::multibyte_to_widechar(NULL, name, 0);   \</span>
+<a name="l00065"></a>00065 <span class="preprocessor">                wchar_t *wname = new wchar_t[len];                                  \</span>
+<a name="l00066"></a>00066 <span class="preprocessor">                tbb::internal::multibyte_to_widechar(wname, name, len);             \</span>
+<a name="l00067"></a>00067 <span class="preprocessor">                set_name( obj, wname );                                             \</span>
+<a name="l00068"></a>00068 <span class="preprocessor">                delete[] wname;                                                     \</span>
+<a name="l00069"></a>00069 <span class="preprocessor">            }                                                                       \</span>
+<a name="l00070"></a>00070 <span class="preprocessor">        }</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !WIN */</span>
+<a name="l00072"></a>00072 <span class="preprocessor">    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \</span>
+<a name="l00073"></a>00073 <span class="preprocessor">        namespace profiling {                                                       \</span>
+<a name="l00074"></a>00074 <span class="preprocessor">            inline void set_name( sync_object_type&amp; obj, const char* name ) {       \</span>
+<a name="l00075"></a>00075 <span class="preprocessor">                tbb::internal::itt_set_sync_name_v3( &amp;obj, name );                  \</span>
+<a name="l00076"></a>00076 <span class="preprocessor">            }                                                                       \</span>
+<a name="l00077"></a>00077 <span class="preprocessor">        }</span>
+<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !WIN */</span>
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080 <span class="preprocessor">#else </span><span class="comment">/* no tools support */</span>
+<a name="l00081"></a>00081 
+<a name="l00082"></a>00082 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \</span>
+<a name="l00084"></a>00084 <span class="preprocessor">        namespace profiling {                                               \</span>
+<a name="l00085"></a>00085 <span class="preprocessor">            inline void set_name( sync_object_type&amp;, const wchar_t* ) {}    \</span>
+<a name="l00086"></a>00086 <span class="preprocessor">            inline void set_name( sync_object_type&amp;, const char* ) {}       \</span>
+<a name="l00087"></a>00087 <span class="preprocessor">        }</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !WIN */</span>
+<a name="l00089"></a>00089 <span class="preprocessor">    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \</span>
+<a name="l00090"></a>00090 <span class="preprocessor">        namespace profiling {                                               \</span>
+<a name="l00091"></a>00091 <span class="preprocessor">            inline void set_name( sync_object_type&amp;, const char* ) {}       \</span>
+<a name="l00092"></a>00092 <span class="preprocessor">        }</span>
+<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !WIN */</span>
+<a name="l00094"></a>00094 
+<a name="l00095"></a>00095 <span class="preprocessor">#endif </span><span class="comment">/* no tools support */</span>
+<a name="l00096"></a>00096 
+<a name="l00097"></a>00097 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_profiling_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00386.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00386.html
new file mode 100644 (file)
index 0000000..849c6d9
--- /dev/null
@@ -0,0 +1,226 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb_stddef.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb_stddef.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_stddef_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_stddef_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="comment">// Marketing-driven product version</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#define TBB_VERSION_MAJOR 2</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define TBB_VERSION_MINOR 2</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00028"></a>00028 <span class="comment">// Engineering-focused interface version</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#define TBB_INTERFACE_VERSION 4001</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a>00032 <span class="comment">// The oldest major interface version still supported</span>
+<a name="l00033"></a>00033 <span class="comment">// To be used in SONAME, manifests, etc.</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#define TBB_COMPATIBLE_INTERFACE_VERSION 2</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>
+<a name="l00036"></a>00036 <span class="preprocessor">#define __TBB_STRING_AUX(x) #x</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_STRING(x) __TBB_STRING_AUX(x)</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>
+<a name="l00039"></a>00039 <span class="comment">// We do not need defines below for resource processing on windows</span>
+<a name="l00040"></a>00040 <span class="preprocessor">#if !defined RC_INVOKED</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00042"></a>00042 <span class="comment">// Define groups for Doxygen documentation</span>
+<a name="l00052"></a>00052 <span class="comment"></span><span class="comment">// Simple text that is displayed on the main page of Doxygen documentation.</span>
+<a name="l00094"></a>00094 <span class="comment"></span><span class="comment">// Define preprocessor symbols used to determine architecture</span>
+<a name="l00095"></a>00095 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">#   if defined(_M_AMD64)</span>
+<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_x86_64 1</span>
+<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#   elif defined(_M_IA64)</span>
+<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_ipf 1</span>
+<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#   elif defined(_M_IX86)||defined(__i386__) // the latter for MinGW support</span>
+<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_x86_32 1</span>
+<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#   endif</span>
+<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* Assume generic Unix */</span>
+<a name="l00104"></a>00104 <span class="preprocessor">#   if !__linux__ &amp;&amp; !__APPLE__</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_generic_os 1</span>
+<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#   endif</span>
+<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#   if __x86_64__</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_x86_64 1</span>
+<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#   elif __ia64__</span>
+<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_ipf 1</span>
+<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#   elif __i386__||__i386  // __i386 is for Sun OS</span>
+<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_x86_32 1</span>
+<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="preprocessor">#   else</span>
+<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">#       define __TBB_generic_arch 1</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#   endif</span>
+<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span>
+<a name="l00118"></a>00118 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="comment">// define the parts of stdint.h that are needed, but put them inside tbb::internal</span>
+<a name="l00120"></a>00120 <span class="keyword">namespace </span>tbb {
+<a name="l00121"></a>00121 <span class="keyword">namespace </span>internal {
+<a name="l00122"></a>00122     <span class="keyword">typedef</span> __int8 int8_t;
+<a name="l00123"></a>00123     <span class="keyword">typedef</span> __int16 int16_t;
+<a name="l00124"></a>00124     <span class="keyword">typedef</span> __int32 int32_t;
+<a name="l00125"></a>00125     <span class="keyword">typedef</span> __int64 int64_t;
+<a name="l00126"></a>00126     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int8 uint8_t;
+<a name="l00127"></a>00127     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int16 uint16_t;
+<a name="l00128"></a>00128     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int32 uint32_t;
+<a name="l00129"></a>00129     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 uint64_t;
+<a name="l00130"></a>00130 } <span class="comment">// namespace internal</span>
+<a name="l00131"></a>00131 } <span class="comment">// namespace tbb</span>
+<a name="l00132"></a>00132 <span class="preprocessor">#else</span>
+<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="preprocessor">#include &lt;stdint.h&gt;</span>
+<a name="l00134"></a>00134 <span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER */</span>
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136 <span class="preprocessor">#if _MSC_VER &gt;=1400</span>
+<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC   __cdecl</span>
+<a name="l00138"></a>00138 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_METHOD __thiscall</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
+<a name="l00141"></a>00141 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_METHOD</span>
+<a name="l00142"></a>00142 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00143"></a>00143 <span class="preprocessor"></span>
+<a name="l00144"></a>00144 <span class="preprocessor">#include &lt;cstddef&gt;</span>      <span class="comment">/* Need size_t and ptrdiff_t (the latter on Windows only) from here. */</span>
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00147"></a>00147 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_windef_H</span>
+<a name="l00148"></a>00148 <span class="preprocessor"></span><span class="preprocessor">#include "_tbb_windef.h"</span>
+<a name="l00149"></a>00149 <span class="preprocessor">#undef __TBB_tbb_windef_H</span>
+<a name="l00150"></a>00150 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00151"></a>00151 <span class="preprocessor"></span>
+<a name="l00152"></a>00152 <span class="preprocessor">#include "tbb_config.h"</span>
+<a name="l00153"></a>00153 
+<a name="l00154"></a>00154 <span class="keyword">namespace </span>tbb {
+<a name="l00156"></a><a class="code" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">00156</a>     <span class="keyword">typedef</span> void(*<a class="code" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a>)( <span class="keyword">const</span> <span class="keywordtype">char</span>* filename, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* expression, <span class="keyword">const</span> <span class="keywordtype">char</span> * comment );
+<a name="l00157"></a>00157 }
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00160"></a>00160 <span class="preprocessor"></span>
+<a name="l00162"></a>00162 
+<a name="l00165"></a>00165 <span class="preprocessor">#define __TBB_ASSERT(predicate,message) ((predicate)?((void)0):tbb::assertion_failure(__FILE__,__LINE__,#predicate,message))</span>
+<a name="l00166"></a>00166 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_ASSERT_EX __TBB_ASSERT</span>
+<a name="l00167"></a>00167 <span class="preprocessor"></span>
+<a name="l00168"></a>00168 <span class="keyword">namespace </span>tbb {
+<a name="l00170"></a>00170     <a class="code" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> __TBB_EXPORTED_FUNC <a class="code" href="a00229.html#823fa1c15dd829d1d9167157450ddcd9">set_assertion_handler</a>( <a class="code" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> new_handler );
+<a name="l00171"></a>00171 
+<a name="l00173"></a>00173 
+<a name="l00176"></a>00176     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00229.html#3d1252787be39b4aef311f1cadaff9e8">assertion_failure</a>( <span class="keyword">const</span> <span class="keywordtype">char</span>* filename, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* expression, <span class="keyword">const</span> <span class="keywordtype">char</span>* comment );
+<a name="l00177"></a>00177 } <span class="comment">// namespace tbb</span>
+<a name="l00178"></a>00178 
+<a name="l00179"></a>00179 <span class="preprocessor">#else</span>
+<a name="l00180"></a>00180 <span class="preprocessor"></span>
+<a name="l00182"></a>00182 <span class="preprocessor">#define __TBB_ASSERT(predicate,comment) ((void)0)</span>
+<a name="l00184"></a>00184 <span class="preprocessor">#define __TBB_ASSERT_EX(predicate,comment) ((void)(1 &amp;&amp; (predicate)))</span>
+<a name="l00185"></a>00185 <span class="preprocessor"></span>
+<a name="l00186"></a>00186 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00187"></a>00187 
+<a name="l00189"></a>00189 <span class="keyword">namespace </span>tbb {
+<a name="l00190"></a>00190 
+<a name="l00192"></a>00192 
+<a name="l00196"></a>00196 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00229.html#a6858b22e90041c9c4669674ff39b056">TBB_runtime_interface_version</a>();
+<a name="l00197"></a>00197 
+<a name="l00199"></a>00199 
+<a name="l00203"></a><a class="code" href="a00165.html">00203</a> <span class="keyword">class </span><a class="code" href="a00165.html">split</a> {
+<a name="l00204"></a>00204 };
+<a name="l00205"></a>00205 
+<a name="l00210"></a>00210 <span class="keyword">namespace </span>internal {
+<a name="l00211"></a>00211 
+<a name="l00212"></a>00212 <span class="keyword">using</span> std::size_t;
+<a name="l00213"></a>00213 
+<a name="l00215"></a>00215 
+<a name="l00217"></a>00217 <span class="keyword">typedef</span> size_t uintptr;
+<a name="l00218"></a>00218 
+<a name="l00220"></a>00220 
+<a name="l00222"></a>00222 <span class="keyword">typedef</span> std::ptrdiff_t intptr;
+<a name="l00223"></a>00223 
+<a name="l00225"></a>00225 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC runtime_warning( <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ... );
+<a name="l00226"></a>00226 
+<a name="l00227"></a>00227 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00229"></a>00229 <span class="preprocessor">template&lt;typename T&gt;</span>
+<a name="l00230"></a>00230 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T* &amp; p ) {
+<a name="l00231"></a>00231     p = reinterpret_cast&lt;T*&gt;(-1);
+<a name="l00232"></a>00232 }
+<a name="l00233"></a>00233 <span class="preprocessor">#else</span>
+<a name="l00234"></a>00234 <span class="preprocessor"></span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00235"></a>00235 <span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T* ) {<span class="comment">/*do nothing*/</span>}
+<a name="l00236"></a>00236 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00237"></a>00237 
+<a name="l00239"></a>00239 <span class="keyword">class </span>no_assign {
+<a name="l00240"></a>00240     <span class="comment">// Deny assignment</span>
+<a name="l00241"></a>00241     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> no_assign&amp; );
+<a name="l00242"></a>00242 <span class="keyword">public</span>:
+<a name="l00243"></a>00243 <span class="preprocessor">#if __GNUC__</span>
+<a name="l00245"></a>00245 <span class="preprocessor">    no_assign() {}</span>
+<a name="l00246"></a>00246 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
+<a name="l00247"></a>00247 };
+<a name="l00248"></a>00248 
+<a name="l00250"></a>00250 <span class="keyword">class </span>no_copy: no_assign {
+<a name="l00252"></a>00252     no_copy( <span class="keyword">const</span> no_copy&amp; );
+<a name="l00253"></a>00253 <span class="keyword">public</span>:
+<a name="l00255"></a>00255     no_copy() {}
+<a name="l00256"></a>00256 };
+<a name="l00257"></a>00257 
+<a name="l00259"></a>00259 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
+<a name="l00260"></a>00260 <span class="keyword">struct </span>allocator_type {
+<a name="l00261"></a>00261     <span class="keyword">typedef</span> T value_type;
+<a name="l00262"></a>00262 };
+<a name="l00263"></a>00263 
+<a name="l00264"></a>00264 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00266"></a>00266 <span class="preprocessor">template&lt;typename T&gt;</span>
+<a name="l00267"></a>00267 <span class="preprocessor"></span><span class="keyword">struct </span>allocator_type&lt;const T&gt; {
+<a name="l00268"></a>00268     <span class="keyword">typedef</span> T value_type;
+<a name="l00269"></a>00269 };
+<a name="l00270"></a>00270 <span class="preprocessor">#endif</span>
+<a name="l00271"></a>00271 <span class="preprocessor"></span>
+<a name="l00272"></a>00272 <span class="comment">// Struct to be used as a version tag for inline functions.</span>
+<a name="l00275"></a>00275 <span class="comment"></span><span class="keyword">struct </span>version_tag_v3 {};
+<a name="l00276"></a>00276 
+<a name="l00277"></a>00277 <span class="keyword">typedef</span> version_tag_v3 version_tag;
+<a name="l00278"></a>00278 
+<a name="l00279"></a>00279 } <span class="comment">// internal</span>
+<a name="l00281"></a>00281 <span class="comment"></span>
+<a name="l00282"></a>00282 } <span class="comment">// tbb</span>
+<a name="l00283"></a>00283 
+<a name="l00284"></a>00284 <span class="preprocessor">#endif </span><span class="comment">/* RC_INVOKED */</span>
+<a name="l00285"></a>00285 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_stddef_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00391.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00391.html
new file mode 100644 (file)
index 0000000..18637fa
--- /dev/null
@@ -0,0 +1,298 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb_thread.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbb_thread.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_thread_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_thread_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#include &lt;windows.h&gt;</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#define __TBB_NATIVE_THREAD_ROUTINE unsigned WINAPI</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) unsigned (WINAPI* r)( void* )</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NATIVE_THREAD_ROUTINE void*</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) void* (*r)( void* )</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#include &lt;pthread.h&gt;</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;iosfwd&gt;</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;exception&gt;</span>             <span class="comment">// Need std::terminate from here.</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include "tick_count.h"</span>
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039 <span class="keyword">namespace </span>tbb {
+<a name="l00040"></a>00040 
+<a name="l00042"></a>00042 <span class="keyword">namespace </span>internal {
+<a name="l00043"></a>00043     
+<a name="l00044"></a>00044     <span class="keyword">class </span>tbb_thread_v3;
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046 } <span class="comment">// namespace internal</span>
+<a name="l00047"></a>00047 
+<a name="l00048"></a>00048 <span class="keywordtype">void</span> swap( internal::tbb_thread_v3&amp; t1, internal::tbb_thread_v3&amp; t2 ); 
+<a name="l00049"></a>00049 
+<a name="l00050"></a>00050 <span class="keyword">namespace </span>internal {
+<a name="l00051"></a>00051 
+<a name="l00053"></a>00053     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC allocate_closure_v3( size_t size );
+<a name="l00055"></a>00055     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC free_closure_v3( <span class="keywordtype">void</span>* );
+<a name="l00056"></a>00056    
+<a name="l00057"></a>00057     <span class="keyword">struct </span>thread_closure_base {
+<a name="l00058"></a>00058         <span class="keywordtype">void</span>* operator new( size_t size ) {<span class="keywordflow">return</span> allocate_closure_v3(size);}
+<a name="l00059"></a>00059         <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* ptr ) {free_closure_v3(ptr);}
+<a name="l00060"></a>00060     };
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062     <span class="keyword">template</span>&lt;<span class="keyword">class</span> F&gt; <span class="keyword">struct </span>thread_closure_0: thread_closure_base {
+<a name="l00063"></a>00063         F function;
+<a name="l00064"></a>00064 
+<a name="l00065"></a>00065         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
+<a name="l00066"></a>00066             thread_closure_0 *<span class="keyword">self</span> = static_cast&lt;thread_closure_0*&gt;(c);
+<a name="l00067"></a>00067             <span class="keywordflow">try</span> {
+<a name="l00068"></a>00068                 <span class="keyword">self</span>-&gt;function();
+<a name="l00069"></a>00069             } <span class="keywordflow">catch</span> ( ... ) {
+<a name="l00070"></a>00070                 std::terminate();
+<a name="l00071"></a>00071             }
+<a name="l00072"></a>00072             <span class="keyword">delete</span> <span class="keyword">self</span>;
+<a name="l00073"></a>00073             <span class="keywordflow">return</span> 0;
+<a name="l00074"></a>00074         }
+<a name="l00075"></a>00075         thread_closure_0( <span class="keyword">const</span> F&amp; f ) : function(f) {}
+<a name="l00076"></a>00076     };
+<a name="l00078"></a>00078     <span class="keyword">template</span>&lt;<span class="keyword">class</span> F, <span class="keyword">class</span> X&gt; <span class="keyword">struct </span>thread_closure_1: thread_closure_base {
+<a name="l00079"></a>00079         F function;
+<a name="l00080"></a>00080         X arg1;
+<a name="l00082"></a>00082         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
+<a name="l00083"></a>00083             thread_closure_1 *<span class="keyword">self</span> = static_cast&lt;thread_closure_1*&gt;(c);
+<a name="l00084"></a>00084             <span class="keywordflow">try</span> {
+<a name="l00085"></a>00085                 <span class="keyword">self</span>-&gt;function(self-&gt;arg1);
+<a name="l00086"></a>00086             } <span class="keywordflow">catch</span> ( ... ) {
+<a name="l00087"></a>00087                 std::terminate();
+<a name="l00088"></a>00088             }
+<a name="l00089"></a>00089             <span class="keyword">delete</span> <span class="keyword">self</span>;
+<a name="l00090"></a>00090             <span class="keywordflow">return</span> 0;
+<a name="l00091"></a>00091         }
+<a name="l00092"></a>00092         thread_closure_1( <span class="keyword">const</span> F&amp; f, <span class="keyword">const</span> X&amp; x ) : function(f), arg1(x) {}
+<a name="l00093"></a>00093     };
+<a name="l00094"></a>00094     <span class="keyword">template</span>&lt;<span class="keyword">class</span> F, <span class="keyword">class</span> X, <span class="keyword">class</span> Y&gt; <span class="keyword">struct </span>thread_closure_2: thread_closure_base {
+<a name="l00095"></a>00095         F function;
+<a name="l00096"></a>00096         X arg1;
+<a name="l00097"></a>00097         Y arg2;
+<a name="l00099"></a>00099         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
+<a name="l00100"></a>00100             thread_closure_2 *<span class="keyword">self</span> = static_cast&lt;thread_closure_2*&gt;(c);
+<a name="l00101"></a>00101             <span class="keywordflow">try</span> {
+<a name="l00102"></a>00102                 <span class="keyword">self</span>-&gt;function(self-&gt;arg1, self-&gt;arg2);
+<a name="l00103"></a>00103             } <span class="keywordflow">catch</span> ( ... ) {
+<a name="l00104"></a>00104                 std::terminate();
+<a name="l00105"></a>00105             }
+<a name="l00106"></a>00106             <span class="keyword">delete</span> <span class="keyword">self</span>;
+<a name="l00107"></a>00107             <span class="keywordflow">return</span> 0;
+<a name="l00108"></a>00108         }
+<a name="l00109"></a>00109         thread_closure_2( <span class="keyword">const</span> F&amp; f, <span class="keyword">const</span> X&amp; x, <span class="keyword">const</span> Y&amp; y ) : function(f), arg1(x), arg2(y) {}
+<a name="l00110"></a>00110     };
+<a name="l00111"></a>00111 
+<a name="l00113"></a>00113     <span class="keyword">class </span>tbb_thread_v3 {
+<a name="l00114"></a>00114         tbb_thread_v3(<span class="keyword">const</span> tbb_thread_v3&amp;); <span class="comment">// = delete;   // Deny access</span>
+<a name="l00115"></a>00115     <span class="keyword">public</span>:
+<a name="l00116"></a>00116 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span>        <span class="keyword">typedef</span> HANDLE native_handle_type; 
+<a name="l00118"></a>00118 <span class="preprocessor">#else</span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span>        <span class="keyword">typedef</span> pthread_t native_handle_type; 
+<a name="l00120"></a>00120 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00121"></a>00121 <span class="preprocessor"></span>
+<a name="l00122"></a>00122         <span class="keyword">class </span>id;
+<a name="l00124"></a>00124         tbb_thread_v3() : my_handle(0)
+<a name="l00125"></a>00125 #if _WIN32||_WIN64
+<a name="l00126"></a>00126             , my_thread_id(0)
+<a name="l00127"></a>00127 #endif <span class="comment">// _WIN32||_WIN64</span>
+<a name="l00128"></a>00128         {}
+<a name="l00129"></a>00129         
+<a name="l00131"></a>00131         <span class="keyword">template</span> &lt;<span class="keyword">class</span> F&gt; <span class="keyword">explicit</span> tbb_thread_v3(F f) {
+<a name="l00132"></a>00132             <span class="keyword">typedef</span> internal::thread_closure_0&lt;F&gt; closure_type;
+<a name="l00133"></a>00133             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f));
+<a name="l00134"></a>00134         }
+<a name="l00136"></a>00136         <span class="keyword">template</span> &lt;<span class="keyword">class</span> F, <span class="keyword">class</span> X&gt; tbb_thread_v3(F f, X x) {
+<a name="l00137"></a>00137             <span class="keyword">typedef</span> internal::thread_closure_1&lt;F,X&gt; closure_type;
+<a name="l00138"></a>00138             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x));
+<a name="l00139"></a>00139         }
+<a name="l00141"></a>00141         <span class="keyword">template</span> &lt;<span class="keyword">class</span> F, <span class="keyword">class</span> X, <span class="keyword">class</span> Y&gt; tbb_thread_v3(F f, X x, Y y) {
+<a name="l00142"></a>00142             <span class="keyword">typedef</span> internal::thread_closure_2&lt;F,X,Y&gt; closure_type;
+<a name="l00143"></a>00143             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x,y));
+<a name="l00144"></a>00144         }
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146         tbb_thread_v3&amp; operator=(tbb_thread_v3&amp; x) {
+<a name="l00147"></a>00147             <span class="keywordflow">if</span> (joinable()) detach();
+<a name="l00148"></a>00148             my_handle = x.my_handle;
+<a name="l00149"></a>00149             x.my_handle = 0;
+<a name="l00150"></a>00150 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00151"></a>00151 <span class="preprocessor"></span>            my_thread_id = x.my_thread_id;
+<a name="l00152"></a>00152             x.my_thread_id = 0;
+<a name="l00153"></a>00153 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00154"></a>00154 <span class="preprocessor"></span>            <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00155"></a>00155         }
+<a name="l00156"></a>00156         <span class="keywordtype">bool</span> joinable()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_handle!=0; }
+<a name="l00158"></a>00158         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD join();
+<a name="l00160"></a>00160         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD detach();
+<a name="l00161"></a>00161         ~tbb_thread_v3() {<span class="keywordflow">if</span>( joinable() ) detach();}
+<a name="l00162"></a>00162         <span class="keyword">inline</span> <span class="keywordtype">id</span> get_id() <span class="keyword">const</span>;
+<a name="l00163"></a>00163         native_handle_type native_handle() { <span class="keywordflow">return</span> my_handle; }
+<a name="l00164"></a>00164     
+<a name="l00166"></a>00166         <span class="keyword">static</span> <span class="keywordtype">unsigned</span> __TBB_EXPORTED_FUNC hardware_concurrency();
+<a name="l00167"></a>00167     <span class="keyword">private</span>:
+<a name="l00168"></a>00168         native_handle_type my_handle; 
+<a name="l00169"></a>00169 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00170"></a>00170 <span class="preprocessor"></span>        DWORD my_thread_id;
+<a name="l00171"></a>00171 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00172"></a>00172 <span class="preprocessor"></span>
+<a name="l00174"></a>00174         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine), 
+<a name="l00175"></a>00175                              <span class="keywordtype">void</span>* closure );
+<a name="l00176"></a>00176         <span class="keyword">friend</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3&amp; t1, tbb_thread_v3&amp; t2 );
+<a name="l00177"></a>00177         <span class="keyword">friend</span> <span class="keywordtype">void</span> tbb::swap( tbb_thread_v3&amp; t1, tbb_thread_v3&amp; t2 ); 
+<a name="l00178"></a>00178     };
+<a name="l00179"></a>00179         
+<a name="l00180"></a>00180     <span class="keyword">class </span>tbb_thread_v3::id { 
+<a name="l00181"></a>00181 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00182"></a>00182 <span class="preprocessor"></span>        DWORD my_id;
+<a name="l00183"></a>00183         id( DWORD my_id ) : my_id(my_id) {}
+<a name="l00184"></a>00184 <span class="preprocessor">#else</span>
+<a name="l00185"></a>00185 <span class="preprocessor"></span>        pthread_t my_id;
+<a name="l00186"></a>00186         id( pthread_t my_id ) : my_id(my_id) {}
+<a name="l00187"></a>00187 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00188"></a>00188 <span class="preprocessor"></span>        <span class="keyword">friend</span> <span class="keyword">class </span>tbb_thread_v3;
+<a name="l00189"></a>00189     <span class="keyword">public</span>:
+<a name="l00190"></a>00190         id() : my_id(0) {}
+<a name="l00191"></a>00191 
+<a name="l00192"></a>00192         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00193"></a>00193         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00194"></a>00194         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator&lt;( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00195"></a>00195         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator&lt;=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00196"></a>00196         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator&gt;( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00197"></a>00197         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator&gt;=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00198"></a>00198         
+<a name="l00199"></a>00199         <span class="keyword">template</span>&lt;<span class="keyword">class</span> <span class="keywordtype">char</span>T, <span class="keyword">class</span> traits&gt;
+<a name="l00200"></a>00200         <span class="keyword">friend</span> std::basic_ostream&lt;charT, traits&gt;&amp;
+<a name="l00201"></a>00201         operator&lt;&lt; (std::basic_ostream&lt;charT, traits&gt; &amp;out, 
+<a name="l00202"></a>00202                     tbb_thread_v3::id id)
+<a name="l00203"></a>00203         {
+<a name="l00204"></a>00204             out &lt;&lt; <span class="keywordtype">id</span>.my_id;
+<a name="l00205"></a>00205             <span class="keywordflow">return</span> out;
+<a name="l00206"></a>00206         }
+<a name="l00207"></a>00207         <span class="keyword">friend</span> tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
+<a name="l00208"></a>00208     }; <span class="comment">// tbb_thread_v3::id</span>
+<a name="l00209"></a>00209 
+<a name="l00210"></a>00210     tbb_thread_v3::id tbb_thread_v3::get_id()<span class="keyword"> const </span>{
+<a name="l00211"></a>00211 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00212"></a>00212 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_thread_id);
+<a name="l00213"></a>00213 <span class="preprocessor">#else</span>
+<a name="l00214"></a>00214 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_handle);
+<a name="l00215"></a>00215 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00216"></a>00216 <span class="preprocessor"></span>    }
+<a name="l00217"></a>00217     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3&amp; t1, tbb_thread_v3&amp; t2 );
+<a name="l00218"></a>00218     tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
+<a name="l00219"></a>00219     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_yield_v3();
+<a name="l00220"></a>00220     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_sleep_v3(<span class="keyword">const</span> tick_count::interval_t &amp;i);
+<a name="l00221"></a>00221 
+<a name="l00222"></a>00222     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00223"></a>00223     {
+<a name="l00224"></a>00224         <span class="keywordflow">return</span> x.my_id == y.my_id;
+<a name="l00225"></a>00225     }
+<a name="l00226"></a>00226     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00227"></a>00227     {
+<a name="l00228"></a>00228         <span class="keywordflow">return</span> x.my_id != y.my_id;
+<a name="l00229"></a>00229     }
+<a name="l00230"></a>00230     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator&lt;(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00231"></a>00231     {
+<a name="l00232"></a>00232         <span class="keywordflow">return</span> x.my_id &lt; y.my_id;
+<a name="l00233"></a>00233     }
+<a name="l00234"></a>00234     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator&lt;=(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00235"></a>00235     {
+<a name="l00236"></a>00236         <span class="keywordflow">return</span> x.my_id &lt;= y.my_id;
+<a name="l00237"></a>00237     }
+<a name="l00238"></a>00238     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator&gt;(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00239"></a>00239     {
+<a name="l00240"></a>00240         <span class="keywordflow">return</span> x.my_id &gt; y.my_id;
+<a name="l00241"></a>00241     }
+<a name="l00242"></a>00242     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator&gt;=(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00243"></a>00243     {
+<a name="l00244"></a>00244         <span class="keywordflow">return</span> x.my_id &gt;= y.my_id;
+<a name="l00245"></a>00245     }
+<a name="l00246"></a>00246 
+<a name="l00247"></a>00247 } <span class="comment">// namespace internal;</span>
+<a name="l00248"></a>00248 
+<a name="l00250"></a>00250 <span class="keyword">typedef</span> internal::tbb_thread_v3 tbb_thread;
+<a name="l00251"></a>00251 
+<a name="l00252"></a>00252 <span class="keyword">using</span> internal::operator==;
+<a name="l00253"></a>00253 <span class="keyword">using</span> internal::operator!=;
+<a name="l00254"></a>00254 <span class="keyword">using</span> internal::operator&lt;;
+<a name="l00255"></a>00255 <span class="keyword">using</span> internal::operator&gt;;
+<a name="l00256"></a>00256 <span class="keyword">using</span> internal::operator&lt;=;
+<a name="l00257"></a>00257 <span class="keyword">using</span> internal::operator&gt;=;
+<a name="l00258"></a>00258 
+<a name="l00259"></a>00259 <span class="keyword">inline</span> <span class="keywordtype">void</span> move( tbb_thread&amp; t1, tbb_thread&amp; t2 ) {
+<a name="l00260"></a>00260     internal::move_v3(t1, t2);
+<a name="l00261"></a>00261 }
+<a name="l00262"></a>00262 
+<a name="l00263"></a>00263 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap( internal::tbb_thread_v3&amp; t1, internal::tbb_thread_v3&amp; t2 ) {
+<a name="l00264"></a>00264     tbb::tbb_thread::native_handle_type h = t1.my_handle;
+<a name="l00265"></a>00265     t1.my_handle = t2.my_handle;
+<a name="l00266"></a>00266     t2.my_handle = h;
+<a name="l00267"></a>00267 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00268"></a>00268 <span class="preprocessor"></span>    DWORD i = t1.my_thread_id;
+<a name="l00269"></a>00269     t1.my_thread_id = t2.my_thread_id;
+<a name="l00270"></a>00270     t2.my_thread_id = i;
+<a name="l00271"></a>00271 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00272"></a>00272 }
+<a name="l00273"></a>00273 
+<a name="l00274"></a>00274 <span class="keyword">namespace </span>this_tbb_thread {
+<a name="l00275"></a>00275     <span class="keyword">inline</span> tbb_thread::id get_id() { <span class="keywordflow">return</span> internal::thread_get_id_v3(); }
+<a name="l00277"></a>00277     <span class="keyword">inline</span> <span class="keywordtype">void</span> yield() { internal::thread_yield_v3(); }
+<a name="l00279"></a>00279     <span class="keyword">inline</span> <span class="keywordtype">void</span> sleep(<span class="keyword">const</span> tick_count::interval_t &amp;i) { 
+<a name="l00280"></a>00280         internal::thread_sleep_v3(i);  
+<a name="l00281"></a>00281     }
+<a name="l00282"></a>00282 }  <span class="comment">// namespace this_tbb_thread</span>
+<a name="l00283"></a>00283 
+<a name="l00284"></a>00284 } <span class="comment">// namespace tbb</span>
+<a name="l00285"></a>00285 
+<a name="l00286"></a>00286 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_thread_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00399.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00399.html
new file mode 100644 (file)
index 0000000..ab1f0b2
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbbmalloc_proxy.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tbbmalloc_proxy.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="comment">/*</span>
+<a name="l00022"></a>00022 <span class="comment">Replacing the standard memory allocation routines in Microsoft* C/C++ RTL </span>
+<a name="l00023"></a>00023 <span class="comment">(malloc/free, global new/delete, etc.) with the TBB memory allocator. </span>
+<a name="l00024"></a>00024 <span class="comment"></span>
+<a name="l00025"></a>00025 <span class="comment">Include the following header to a source of any binary which is loaded during </span>
+<a name="l00026"></a>00026 <span class="comment">application startup</span>
+<a name="l00027"></a>00027 <span class="comment"></span>
+<a name="l00028"></a>00028 <span class="comment">#include "tbb/tbbmalloc_proxy.h"</span>
+<a name="l00029"></a>00029 <span class="comment"></span>
+<a name="l00030"></a>00030 <span class="comment">or add following parameters to the linker options for the binary which is </span>
+<a name="l00031"></a>00031 <span class="comment">loaded during application startup. It can be either exe-file or dll.</span>
+<a name="l00032"></a>00032 <span class="comment"></span>
+<a name="l00033"></a>00033 <span class="comment">For win32</span>
+<a name="l00034"></a>00034 <span class="comment">tbbmalloc_proxy.lib /INCLUDE:"___TBB_malloc_proxy"</span>
+<a name="l00035"></a>00035 <span class="comment">win64</span>
+<a name="l00036"></a>00036 <span class="comment">tbbmalloc_proxy.lib /INCLUDE:"__TBB_malloc_proxy"</span>
+<a name="l00037"></a>00037 <span class="comment">*/</span>
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039 <span class="preprocessor">#ifndef __TBB_tbbmalloc_proxy_H</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbbmalloc_proxy_H</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00042"></a>00042 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 <span class="preprocessor">#ifdef _DEBUG</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">    #pragma comment(lib, "tbbmalloc_proxy_debug.lib")</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">    #pragma comment(lib, "tbbmalloc_proxy.lib")</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>
+<a name="l00050"></a>00050 <span class="preprocessor">#if defined(_WIN64)</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">    #pragma comment(linker, "/include:__TBB_malloc_proxy")</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">    #pragma comment(linker, "/include:___TBB_malloc_proxy")</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span>
+<a name="l00056"></a>00056 <span class="preprocessor">#else</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="comment">/* Primarily to support MinGW */</span>
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> <span class="keywordtype">void</span> __TBB_malloc_proxy();
+<a name="l00060"></a>00060 <span class="keyword">struct </span>__TBB_malloc_proxy_caller {
+<a name="l00061"></a>00061     __TBB_malloc_proxy_caller() { __TBB_malloc_proxy(); }
+<a name="l00062"></a>00062 } <span class="keyword">volatile</span> __TBB_malloc_proxy_helper_object;
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064 <span class="preprocessor">#endif // _MSC_VER</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00066"></a>00066 <span class="preprocessor">#endif //__TBB_tbbmalloc_proxy_H</span>
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00401.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/a00401.html
new file mode 100644 (file)
index 0000000..a7f80c1
--- /dev/null
@@ -0,0 +1,164 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tick_count.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>tick_count.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.</span>
+<a name="l00003"></a>00003 <span class="comment"></span>
+<a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
+<a name="l00005"></a>00005 <span class="comment">    to the source code ("Material") are owned by Intel Corporation or its</span>
+<a name="l00006"></a>00006 <span class="comment">    suppliers or licensors.  Title to the Material remains with Intel</span>
+<a name="l00007"></a>00007 <span class="comment">    Corporation or its suppliers and licensors.  The Material is protected</span>
+<a name="l00008"></a>00008 <span class="comment">    by worldwide copyright laws and treaty provisions.  No part of the</span>
+<a name="l00009"></a>00009 <span class="comment">    Material may be used, copied, reproduced, modified, published, uploaded,</span>
+<a name="l00010"></a>00010 <span class="comment">    posted, transmitted, distributed, or disclosed in any way without</span>
+<a name="l00011"></a>00011 <span class="comment">    Intel's prior express written permission.</span>
+<a name="l00012"></a>00012 <span class="comment"></span>
+<a name="l00013"></a>00013 <span class="comment">    No license under any patent, copyright, trade secret or other</span>
+<a name="l00014"></a>00014 <span class="comment">    intellectual property right is granted to or conferred upon you by</span>
+<a name="l00015"></a>00015 <span class="comment">    disclosure or delivery of the Materials, either expressly, by</span>
+<a name="l00016"></a>00016 <span class="comment">    implication, inducement, estoppel or otherwise.  Any license under such</span>
+<a name="l00017"></a>00017 <span class="comment">    intellectual property rights must be express and approved by Intel in</span>
+<a name="l00018"></a>00018 <span class="comment">    writing.</span>
+<a name="l00019"></a>00019 <span class="comment">*/</span>
+<a name="l00020"></a>00020 
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tick_count_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tick_count_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#include &lt;windows.h&gt;</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#elif __linux__</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include &lt;ctime&gt;</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;sys/time.h&gt;</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#endif </span><span class="comment">/* (choice of OS) */</span>
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034 <span class="keyword">namespace </span>tbb {
+<a name="l00035"></a>00035 
+<a name="l00037"></a>00037 
+<a name="l00038"></a><a class="code" href="a00176.html">00038</a> <span class="keyword">class </span><a class="code" href="a00176.html">tick_count</a> {
+<a name="l00039"></a>00039 <span class="keyword">public</span>:
+<a name="l00041"></a><a class="code" href="a00177.html">00041</a>     <span class="keyword">class </span><a class="code" href="a00177.html">interval_t</a> {
+<a name="l00042"></a>00042         <span class="keywordtype">long</span> <span class="keywordtype">long</span> value;
+<a name="l00043"></a>00043         <span class="keyword">explicit</span> <a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>( <span class="keywordtype">long</span> <span class="keywordtype">long</span> value_ ) : value(value_) {}
+<a name="l00044"></a>00044     <span class="keyword">public</span>:
+<a name="l00046"></a><a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">00046</a>         <a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>() : value(0) {};
+<a name="l00047"></a>00047 
+<a name="l00049"></a>00049         <span class="keyword">explicit</span> <a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>( <span class="keywordtype">double</span> sec );
+<a name="l00050"></a>00050 
+<a name="l00052"></a>00052         <span class="keywordtype">double</span> <a class="code" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a>() <span class="keyword">const</span>;
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00176.html">tbb::tick_count</a>;
+<a name="l00055"></a>00055 
+<a name="l00057"></a>00057         <span class="keyword">friend</span> <a class="code" href="a00177.html">interval_t</a> <a class="code" href="a00177.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00176.html">tick_count</a>&amp; t1, <span class="keyword">const</span> <a class="code" href="a00176.html">tick_count</a>&amp; t0 );
+<a name="l00058"></a>00058 
+<a name="l00060"></a><a class="code" href="a00177.html#5871ead1ca230efbe52a5008470e6428">00060</a>         <span class="keyword">friend</span> <a class="code" href="a00177.html">interval_t</a> <a class="code" href="a00177.html#5871ead1ca230efbe52a5008470e6428">operator+</a>( <span class="keyword">const</span> <a class="code" href="a00177.html">interval_t</a>&amp; i, <span class="keyword">const</span> <a class="code" href="a00177.html">interval_t</a>&amp; j ) {
+<a name="l00061"></a>00061             <span class="keywordflow">return</span> <a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00177.html#beea71acda120af3e3e29f10e8cb5c10">value</a>+j.<a class="code" href="a00177.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
+<a name="l00062"></a>00062         }
+<a name="l00063"></a>00063 
+<a name="l00065"></a><a class="code" href="a00177.html#fa509691e1d689830931e36edd274f76">00065</a>         <span class="keyword">friend</span> <a class="code" href="a00177.html">interval_t</a> <a class="code" href="a00177.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00177.html">interval_t</a>&amp; i, <span class="keyword">const</span> <a class="code" href="a00177.html">interval_t</a>&amp; j ) {
+<a name="l00066"></a>00066             <span class="keywordflow">return</span> <a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00177.html#beea71acda120af3e3e29f10e8cb5c10">value</a>-j.<a class="code" href="a00177.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
+<a name="l00067"></a>00067         }
+<a name="l00068"></a>00068 
+<a name="l00070"></a><a class="code" href="a00177.html#cd9814947902e26463a69a111530f81b">00070</a>         <a class="code" href="a00177.html">interval_t</a>&amp; <a class="code" href="a00177.html#cd9814947902e26463a69a111530f81b">operator+=</a>( <span class="keyword">const</span> <a class="code" href="a00177.html">interval_t</a>&amp; i ) {value += i.<a class="code" href="a00177.html#beea71acda120af3e3e29f10e8cb5c10">value</a>; <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
+<a name="l00071"></a>00071 
+<a name="l00073"></a><a class="code" href="a00177.html#35ff7eaf7c2031b4a991402ac9ecb940">00073</a>         <a class="code" href="a00177.html">interval_t</a>&amp; <a class="code" href="a00177.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>( <span class="keyword">const</span> <a class="code" href="a00177.html">interval_t</a>&amp; i ) {value -= i.<a class="code" href="a00177.html#beea71acda120af3e3e29f10e8cb5c10">value</a>; <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
+<a name="l00074"></a>00074     };
+<a name="l00075"></a>00075     
+<a name="l00077"></a><a class="code" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">00077</a>     <a class="code" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a>() : my_count(0) {};
+<a name="l00078"></a>00078 
+<a name="l00080"></a>00080     <span class="keyword">static</span> <a class="code" href="a00176.html">tick_count</a> <a class="code" href="a00176.html#fb7f78ca61cf28398645ace66e284473">now</a>();
+<a name="l00081"></a>00081     
+<a name="l00083"></a>00083     <span class="keyword">friend</span> interval_t <a class="code" href="a00176.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00176.html">tick_count</a>&amp; t1, <span class="keyword">const</span> <a class="code" href="a00176.html">tick_count</a>&amp; t0 );
+<a name="l00084"></a>00084 
+<a name="l00085"></a>00085 <span class="keyword">private</span>:
+<a name="l00086"></a>00086     <span class="keywordtype">long</span> <span class="keywordtype">long</span> my_count;
+<a name="l00087"></a>00087 };
+<a name="l00088"></a>00088 
+<a name="l00089"></a><a class="code" href="a00176.html#fb7f78ca61cf28398645ace66e284473">00089</a> <span class="keyword">inline</span> <a class="code" href="a00176.html">tick_count</a> <a class="code" href="a00176.html#fb7f78ca61cf28398645ace66e284473">tick_count::now</a>() {
+<a name="l00090"></a>00090     <a class="code" href="a00176.html">tick_count</a> result;
+<a name="l00091"></a>00091 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00092"></a>00092 <span class="preprocessor"></span>    LARGE_INTEGER qpcnt;
+<a name="l00093"></a>00093     QueryPerformanceCounter(&amp;qpcnt);
+<a name="l00094"></a>00094     result.<a class="code" href="a00176.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> = qpcnt.QuadPart;
+<a name="l00095"></a>00095 <span class="preprocessor">#elif __linux__</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span>    <span class="keyword">struct </span>timespec ts;
+<a name="l00097"></a>00097 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00098"></a>00098 <span class="preprocessor"></span>    <span class="keywordtype">int</span> status = 
+<a name="l00099"></a>00099 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00100"></a>00100         clock_gettime( CLOCK_REALTIME, &amp;ts );
+<a name="l00101"></a>00101     __TBB_ASSERT( status==0, <span class="stringliteral">"CLOCK_REALTIME not supported"</span> );
+<a name="l00102"></a>00102     result.<a class="code" href="a00176.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> = static_cast&lt;long long&gt;(1000000000UL)*static_cast&lt;long long&gt;(ts.tv_sec) + static_cast&lt;long long&gt;(ts.tv_nsec);
+<a name="l00103"></a>00103 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
+<a name="l00104"></a>00104     <span class="keyword">struct </span>timeval tv;
+<a name="l00105"></a>00105 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00106"></a>00106 <span class="preprocessor"></span>    <span class="keywordtype">int</span> status = 
+<a name="l00107"></a>00107 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00108"></a>00108         gettimeofday(&amp;tv, NULL);
+<a name="l00109"></a>00109     __TBB_ASSERT( status==0, <span class="stringliteral">"gettimeofday failed"</span> );
+<a name="l00110"></a>00110     result.<a class="code" href="a00176.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> = static_cast&lt;long long&gt;(1000000)*static_cast&lt;long long&gt;(tv.tv_sec) + static_cast&lt;long long&gt;(tv.tv_usec);
+<a name="l00111"></a>00111 <span class="preprocessor">#endif </span><span class="comment">/*(choice of OS) */</span>
+<a name="l00112"></a>00112     <span class="keywordflow">return</span> result;
+<a name="l00113"></a>00113 }
+<a name="l00114"></a>00114 
+<a name="l00115"></a><a class="code" href="a00177.html#1a21a428e00cced2e6a49e0f5f2258bf">00115</a> <span class="keyword">inline</span> <a class="code" href="a00177.html#75a9a0949f8a8a84d6758835f1b48dad">tick_count::interval_t::interval_t</a>( <span class="keywordtype">double</span> sec )
+<a name="l00116"></a>00116 {
+<a name="l00117"></a>00117 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span>    LARGE_INTEGER qpfreq;
+<a name="l00119"></a>00119     QueryPerformanceFrequency(&amp;qpfreq);
+<a name="l00120"></a>00120     value = static_cast&lt;long long&gt;(sec*qpfreq.QuadPart);
+<a name="l00121"></a>00121 <span class="preprocessor">#elif __linux__</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span>    value = static_cast&lt;long long&gt;(sec*1E9);
+<a name="l00123"></a>00123 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
+<a name="l00124"></a>00124     value = static_cast&lt;long long&gt;(sec*1E6);
+<a name="l00125"></a>00125 <span class="preprocessor">#endif </span><span class="comment">/* (choice of OS) */</span>
+<a name="l00126"></a>00126 }
+<a name="l00127"></a>00127 
+<a name="l00128"></a><a class="code" href="a00176.html#09dde78a4100800c11bb883d6204b586">00128</a> <span class="keyword">inline</span> <a class="code" href="a00177.html">tick_count::interval_t</a> <a class="code" href="a00176.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00176.html">tick_count</a>&amp; t1, <span class="keyword">const</span> <a class="code" href="a00176.html">tick_count</a>&amp; t0 ) {
+<a name="l00129"></a>00129     <span class="keywordflow">return</span> <a class="code" href="a00177.html">tick_count::interval_t</a>( t1.<a class="code" href="a00176.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a>-t0.<a class="code" href="a00176.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> );
+<a name="l00130"></a>00130 }
+<a name="l00131"></a>00131 
+<a name="l00132"></a><a class="code" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">00132</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">tick_count::interval_t::seconds</a>()<span class="keyword"> const </span>{
+<a name="l00133"></a>00133 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00134"></a>00134 <span class="preprocessor"></span>    LARGE_INTEGER qpfreq;
+<a name="l00135"></a>00135     QueryPerformanceFrequency(&amp;qpfreq);
+<a name="l00136"></a>00136     <span class="keywordflow">return</span> value/(double)qpfreq.QuadPart;
+<a name="l00137"></a>00137 #elif __linux__
+<a name="l00138"></a>00138     <span class="keywordflow">return</span> value*1E-9;
+<a name="l00139"></a>00139 #<span class="keywordflow">else</span> <span class="comment">/* generic Unix */</span>
+<a name="l00140"></a>00140     <span class="keywordflow">return</span> value*1E-6;
+<a name="l00141"></a>00141 #endif <span class="comment">/* (choice of OS) */</span>
+<a name="l00142"></a>00142 }
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144 } <span class="comment">// namespace tbb</span>
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tick_count_H */</span>
+<a name="l00147"></a>00147 
+</pre></div><hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/annotated.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/annotated.html
new file mode 100644 (file)
index 0000000..5d0c760
--- /dev/null
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>Class List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>
+  <tr><td class="indexkey"><a class="el" href="a00115.html">tbb::affinity_partitioner</a></td><td class="indexvalue">An affinity partitioner </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00116.html">tbb::aligned_space&lt; T, N &gt;</a></td><td class="indexvalue">Block of space aligned sufficiently to construct an array T with N elements </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00117.html">tbb::atomic&lt; T &gt;</a></td><td class="indexvalue">Primary template for atomic </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00118.html">tbb::atomic&lt; void * &gt;</a></td><td class="indexvalue">Specialization for <a class="el" href="a00118.html">atomic&lt;void*&gt;</a>, for sake of not allowing arithmetic or operator-&gt; </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a></td><td class="indexvalue">Class that implements exponential backoff </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00120.html">tbb::auto_partitioner</a></td><td class="indexvalue">An auto partitioner </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00121.html">tbb::bad_last_alloc</a></td><td class="indexvalue">Exception for concurrent containers </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a></td><td class="indexvalue">A range over which to iterate </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a></td><td class="indexvalue">A 2-dimensional range that models the Range concept </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a></td><td class="indexvalue">A 3-dimensional range that models the Range concept </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a></td><td class="indexvalue">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00126.html">tbb::cache_aligned_allocator&lt; void &gt;</a></td><td class="indexvalue">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00127.html">tbb::captured_exception</a></td><td class="indexvalue">This class is used by TBB to propagate information about unhandled exceptions into the root thread </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a></td><td class="indexvalue">Thread-local storage with optional reduction </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></td><td class="indexvalue">A high-performance thread-safe blocking concurrent bounded queue </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></td><td class="indexvalue">Unordered map from Key to T </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00131.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</a></td><td class="indexvalue">Allows write access to elements and combines data access, locking, and garbage collection </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00132.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a></td><td class="indexvalue">Bucket accessor is to find, rehash, acquire a lock, and access a bucket </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></td><td class="indexvalue">Combines data access, locking, and garbage collection </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a></td><td class="indexvalue">A high-performance thread-safe non-blocking concurrent queue </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></td><td class="indexvalue">A high-performance thread-safe blocking concurrent bounded queue </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a></td><td class="indexvalue">Concurrent vector container </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00137.html">tbb::empty_task</a></td><td class="indexvalue">Task that does nothing. Useful for synchronization </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a></td><td class="indexvalue">The thread local class template </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00139.html">tbb::filter</a></td><td class="indexvalue">A stage in a pipeline </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00140.html">tbb::final_scan_tag</a></td><td class="indexvalue">Used to indicate that the final scan is being performed </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a></td><td class="indexvalue">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00142.html">tbb::mutex</a></td><td class="indexvalue">Wrapper around the platform's native reader-writer lock </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00144.html">tbb::null_mutex</a></td><td class="indexvalue">A mutex which does nothing </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a></td><td class="indexvalue">Represents acquisition of a mutex </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00146.html">tbb::null_rw_mutex</a></td><td class="indexvalue">A rw mutex which does nothing </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a></td><td class="indexvalue">Represents acquisition of a mutex </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00148.html">tbb::parallel_do_feeder&lt; Item &gt;</a></td><td class="indexvalue">Class the user supplied algorithm body uses to add new tasks </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00149.html">tbb::parallel_while&lt; Body &gt;</a></td><td class="indexvalue">Parallel iteration over a stream, with optional addition of more work </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00150.html">tbb::pipeline</a></td><td class="indexvalue">A processing pipeling that applies filters to items </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00151.html">tbb::pre_scan_tag</a></td><td class="indexvalue">Used to indicate that the initial scan is being performed </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00152.html">tbb::queuing_mutex</a></td><td class="indexvalue">Queuing lock with local-only spinning </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a></td><td class="indexvalue">Reader-writer lock with local-only spinning </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00156.html">tbb::recursive_mutex</a></td><td class="indexvalue">Mutex that allows recursive mutex acquisition </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a></td><td class="indexvalue">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00159.html">tbb::scalable_allocator&lt; void &gt;</a></td><td class="indexvalue">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00160.html">tbb::simple_partitioner</a></td><td class="indexvalue">A simple partitioner </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00161.html">tbb::spin_mutex</a></td><td class="indexvalue">A lock that occupies a single byte </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a></td><td class="indexvalue">Represents acquisition of a mutex </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a></td><td class="indexvalue">Fast, unfair, spinning reader-writer lock with backoff and writer-preference </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00165.html">tbb::split</a></td><td class="indexvalue">Dummy type that distinguishes splitting constructor from copy constructor </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00166.html">tbb::task</a></td><td class="indexvalue">Base class for user-defined tasks </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00167.html">tbb::task_group_context</a></td><td class="indexvalue">Used to form groups of tasks </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00168.html">tbb::task_list</a></td><td class="indexvalue">A list of children </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00169.html">tbb::task_scheduler_init</a></td><td class="indexvalue">Class representing reference to tbb scheduler </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a></td><td class="indexvalue">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00171.html">tbb::tbb_allocator&lt; void &gt;</a></td><td class="indexvalue">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00172.html">tbb::tbb_exception</a></td><td class="indexvalue">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a></td><td class="indexvalue">Exception container that preserves the exact copy of the original exception </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00174.html">tbb::tbb_hash_compare&lt; T &gt;</a></td><td class="indexvalue">Hash_compare - default argument </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00175.html">tbb::thread_bound_filter</a></td><td class="indexvalue">A stage in a pipeline served by a user thread </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00176.html">tbb::tick_count</a></td><td class="indexvalue">Absolute timestamp </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00177.html">tbb::tick_count::interval_t</a></td><td class="indexvalue">Relative time interval </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00178.html">tbb::internal::work_around_alignment_bug&lt; Size, T &gt;</a></td><td class="indexvalue">Work around for bug in GNU 3.2 and MSVC compilers </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a></td><td class="indexvalue">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00180.html">tbb::zero_allocator&lt; void, Allocator &gt;</a></td><td class="indexvalue">Analogous to std::allocator&lt;void&gt;, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+</table>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/concepts.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/concepts.html
new file mode 100644 (file)
index 0000000..5bc1b55
--- /dev/null
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>TBB concepts</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="index.html">Main Page</a></div>
+<h1><a class="anchor" name="concepts">TBB concepts</a></h1>A concept is a set of requirements to a type, which are necessary and sufficient for the type to model a particular behavior or a set of behaviors. Some concepts are specific to a particular algorithm (e.g. algorithm body), while other ones are common to several algorithms (e.g. range concept).<p>
+All TBB algorithms make use of different classes implementing various concepts. Implementation classes are supplied by the user as type arguments of template parameters and/or as objects passed as function call arguments. The library provides predefined implementations of some concepts (e.g. several kinds of <a class="el" href="range_req.html">ranges</a>), while other ones must always be implemented by the user.<p>
+TBB defines a set of minimal requirements each concept must conform to. Here is the list of different concepts hyperlinked to the corresponding requirements specifications:<ul>
+<li><a class="el" href="range_req.html">Requirements on range concept</a></li><li><a class="el" href="parallel_do_body_req.html">Requirements on parallel_do body</a></li><li><a class="el" href="parallel_for_body_req.html">Requirements on parallel_for body</a></li><li><a class="el" href="parallel_reduce_body_req.html">Requirements on parallel_reduce body</a></li><li><a class="el" href="parallel_scan_body_req.html">Requirements on parallel_scan body</a></li><li><a class="el" href="parallel_sort_iter_req.html">Requirements on iterators for parallel_sort</a> </li></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/deprecated.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/deprecated.html
new file mode 100644 (file)
index 0000000..4edaa4c
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Deprecated List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<h1><a class="anchor" name="deprecated">Deprecated List</a></h1><a class="anchor" name="_deprecated000001"></a> <dl>
+<dt>Member <a class="el" href="a00135.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue::pop_if_present</a> (T &amp;destination) </dt>
+<dd>Use try_pop() </dd>
+</dl>
+<p>
+<a class="anchor" name="_deprecated000002"></a> <dl>
+<dt>Member <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">tbb::filter::serial</a>  </dt>
+<dd>use serial_in_order instead </dd>
+</dl>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/doxygen.css b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/doxygen.css
new file mode 100644 (file)
index 0000000..5d58369
--- /dev/null
@@ -0,0 +1,358 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
+       font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+BODY,TD {
+       font-size: 90%;
+}
+H1 {
+       text-align: center;
+       font-size: 160%;
+}
+H2 {
+       font-size: 120%;
+}
+H3 {
+       font-size: 100%;
+}
+CAPTION { font-weight: bold }
+DIV.qindex {
+       width: 100%;
+       background-color: #e8eef2;
+       border: 1px solid #84b0c7;
+       text-align: center;
+       margin: 2px;
+       padding: 2px;
+       line-height: 140%;
+}
+DIV.nav {
+       width: 100%;
+       background-color: #e8eef2;
+       border: 1px solid #84b0c7;
+       text-align: center;
+       margin: 2px;
+       padding: 2px;
+       line-height: 140%;
+}
+DIV.navtab {
+       background-color: #e8eef2;
+       border: 1px solid #84b0c7;
+       text-align: center;
+       margin: 2px;
+       margin-right: 15px;
+       padding: 2px;
+}
+TD.navtab {
+       font-size: 70%;
+}
+A.qindex {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D;
+}
+A.qindex:visited {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D
+}
+A.qindex:hover {
+       text-decoration: none;
+       background-color: #ddddff;
+}
+A.qindexHL {
+       text-decoration: none;
+       font-weight: bold;
+       background-color: #6666cc;
+       color: #ffffff;
+       border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+       text-decoration: none;
+       background-color: #6666cc;
+       color: #ffffff;
+}
+A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+.fragment {
+       font-family: monospace, fixed;
+       font-size: 95%;
+}
+PRE.fragment {
+       border: 1px solid #CCCCCC;
+       background-color: #f5f5f5;
+       margin-top: 4px;
+       margin-bottom: 4px;
+       margin-left: 2px;
+       margin-right: 8px;
+       padding-left: 6px;
+       padding-right: 6px;
+       padding-top: 4px;
+       padding-bottom: 4px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+
+DIV.groupHeader {
+       margin-left: 16px;
+       margin-top: 12px;
+       margin-bottom: 6px;
+       font-weight: bold;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+BODY {
+       background: white;
+       color: black;
+       margin-right: 20px;
+       margin-left: 20px;
+}
+TD.indexkey {
+       background-color: #e8eef2;
+       font-weight: bold;
+       padding-right  : 10px;
+       padding-top    : 2px;
+       padding-left   : 10px;
+       padding-bottom : 2px;
+       margin-left    : 0px;
+       margin-right   : 0px;
+       margin-top     : 2px;
+       margin-bottom  : 2px;
+       border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+       background-color: #e8eef2;
+       font-style: italic;
+       padding-right  : 10px;
+       padding-top    : 2px;
+       padding-left   : 10px;
+       padding-bottom : 2px;
+       margin-left    : 0px;
+       margin-right   : 0px;
+       margin-top     : 2px;
+       margin-bottom  : 2px;
+       border: 1px solid #CCCCCC;
+}
+TR.memlist {
+   background-color: #f0f0f0; 
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+SPAN.keyword       { color: #008000 }
+SPAN.keywordtype   { color: #604020 }
+SPAN.keywordflow   { color: #e08000 }
+SPAN.comment       { color: #800000 }
+SPAN.preprocessor  { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral   { color: #008080 }
+.mdescLeft {
+       padding: 0px 8px 4px 8px;
+       font-size: 80%;
+       font-style: italic;
+       background-color: #FAFAFA;
+       border-top: 1px none #E0E0E0;
+       border-right: 1px none #E0E0E0;
+       border-bottom: 1px none #E0E0E0;
+       border-left: 1px none #E0E0E0;
+       margin: 0px;
+}
+.mdescRight {
+       padding: 0px 8px 4px 8px;
+       font-size: 80%;
+       font-style: italic;
+       background-color: #FAFAFA;
+       border-top: 1px none #E0E0E0;
+       border-right: 1px none #E0E0E0;
+       border-bottom: 1px none #E0E0E0;
+       border-left: 1px none #E0E0E0;
+       margin: 0px;
+}
+.memItemLeft {
+       padding: 1px 0px 0px 8px;
+       margin: 4px;
+       border-top-width: 1px;
+       border-right-width: 1px;
+       border-bottom-width: 1px;
+       border-left-width: 1px;
+       border-top-color: #E0E0E0;
+       border-right-color: #E0E0E0;
+       border-bottom-color: #E0E0E0;
+       border-left-color: #E0E0E0;
+       border-top-style: solid;
+       border-right-style: none;
+       border-bottom-style: none;
+       border-left-style: none;
+       background-color: #FAFAFA;
+       font-size: 80%;
+}
+.memItemRight {
+       padding: 1px 8px 0px 8px;
+       margin: 4px;
+       border-top-width: 1px;
+       border-right-width: 1px;
+       border-bottom-width: 1px;
+       border-left-width: 1px;
+       border-top-color: #E0E0E0;
+       border-right-color: #E0E0E0;
+       border-bottom-color: #E0E0E0;
+       border-left-color: #E0E0E0;
+       border-top-style: solid;
+       border-right-style: none;
+       border-bottom-style: none;
+       border-left-style: none;
+       background-color: #FAFAFA;
+       font-size: 80%;
+}
+.memTemplItemLeft {
+       padding: 1px 0px 0px 8px;
+       margin: 4px;
+       border-top-width: 1px;
+       border-right-width: 1px;
+       border-bottom-width: 1px;
+       border-left-width: 1px;
+       border-top-color: #E0E0E0;
+       border-right-color: #E0E0E0;
+       border-bottom-color: #E0E0E0;
+       border-left-color: #E0E0E0;
+       border-top-style: none;
+       border-right-style: none;
+       border-bottom-style: none;
+       border-left-style: none;
+       background-color: #FAFAFA;
+       font-size: 80%;
+}
+.memTemplItemRight {
+       padding: 1px 8px 0px 8px;
+       margin: 4px;
+       border-top-width: 1px;
+       border-right-width: 1px;
+       border-bottom-width: 1px;
+       border-left-width: 1px;
+       border-top-color: #E0E0E0;
+       border-right-color: #E0E0E0;
+       border-bottom-color: #E0E0E0;
+       border-left-color: #E0E0E0;
+       border-top-style: none;
+       border-right-style: none;
+       border-bottom-style: none;
+       border-left-style: none;
+       background-color: #FAFAFA;
+       font-size: 80%;
+}
+.memTemplParams {
+       padding: 1px 0px 0px 8px;
+       margin: 4px;
+       border-top-width: 1px;
+       border-right-width: 1px;
+       border-bottom-width: 1px;
+       border-left-width: 1px;
+       border-top-color: #E0E0E0;
+       border-right-color: #E0E0E0;
+       border-bottom-color: #E0E0E0;
+       border-left-color: #E0E0E0;
+       border-top-style: solid;
+       border-right-style: none;
+       border-bottom-style: none;
+       border-left-style: none;
+       color: #606060;
+       background-color: #FAFAFA;
+       font-size: 80%;
+}
+.search     { color: #003399;
+              font-weight: bold;
+}
+FORM.search {
+              margin-bottom: 0px;
+              margin-top: 0px;
+}
+INPUT.search { font-size: 75%;
+               color: #000080;
+               font-weight: normal;
+               background-color: #e8eef2;
+}
+TD.tiny      { font-size: 75%;
+}
+a {
+       color: #1A41A8;
+}
+a:visited {
+       color: #2A3798;
+}
+.dirtab { padding: 4px;
+          border-collapse: collapse;
+          border: 1px solid #84b0c7;
+}
+TH.dirtab { background: #e8eef2;
+            font-weight: bold;
+}
+HR { height: 1px;
+     border: none;
+     border-top: 1px solid black;
+}
+
+/* Style for detailed member documentation */
+.memtemplate {
+  font-size: 80%;
+  color: #606060;
+  font-weight: normal;
+} 
+.memnav { 
+  background-color: #e8eef2;
+  border: 1px solid #84b0c7;
+  text-align: center;
+  margin: 2px;
+  margin-right: 15px;
+  padding: 2px;
+}
+.memitem {
+  padding: 4px;
+  background-color: #eef3f5;
+  border-width: 1px;
+  border-style: solid;
+  border-color: #dedeee;
+  -moz-border-radius: 8px 8px 8px 8px;
+}
+.memname {
+  white-space: nowrap;
+  font-weight: bold;
+}
+.memdoc{
+  padding-left: 10px;
+}
+.memproto {
+  background-color: #d5e1e8;
+  width: 100%;
+  border-width: 1px;
+  border-style: solid;
+  border-color: #84b0c7;
+  font-weight: bold;
+  -moz-border-radius: 8px 8px 8px 8px;
+}
+.paramkey {
+  text-align: right;
+}
+.paramtype {
+  white-space: nowrap;
+}
+.paramname {
+  color: #602020;
+  font-style: italic;
+}
+/* End Styling for detailed member documentation */
+
+/* for the tree view */
+.ftvtree {
+       font-family: sans-serif;
+       margin:0.5em;
+}
+.directory { font-size: 9pt; font-weight: bold; }
+.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; }
+.directory > h3 { margin-top: 0; }
+.directory p { margin: 0px; white-space: nowrap; }
+.directory div { display: none; margin: 0px; }
+.directory img { vertical-align: -30%; }
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/files.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/files.html
new file mode 100644 (file)
index 0000000..a40e34d
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>File Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>File List</h1>Here is a list of all documented files with brief descriptions:<table>
+  <tr><td class="indexkey"><b>_concurrent_queue_internal.h</b> <a href="a00239.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>_tbb_windef.h</b> <a href="a00255.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>aligned_space.h</b> <a href="a00257.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>atomic.h</b> <a href="a00258.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>blocked_range.h</b> <a href="a00266.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>blocked_range2d.h</b> <a href="a00267.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>blocked_range3d.h</b> <a href="a00268.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>cache_aligned_allocator.h</b> <a href="a00269.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>combinable.h</b> <a href="a00271.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_hash_map.h</b> <a href="a00272.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_queue.h</b> <a href="a00281.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_vector.h</b> <a href="a00282.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>enumerable_thread_specific.h</b> <a href="a00291.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>mutex.h</b> <a href="a00299.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>null_mutex.h</b> <a href="a00301.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>null_rw_mutex.h</b> <a href="a00302.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_do.h</b> <a href="a00303.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_for.h</b> <a href="a00312.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_for_each.h</b> <a href="a00316.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_invoke.h</b> <a href="a00318.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_reduce.h</b> <a href="a00324.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_scan.h</b> <a href="a00328.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_sort.h</b> <a href="a00334.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_while.h</b> <a href="a00338.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>partitioner.h</b> <a href="a00342.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>pipeline.h</b> <a href="a00347.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>queuing_mutex.h</b> <a href="a00348.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>queuing_rw_mutex.h</b> <a href="a00349.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>recursive_mutex.h</b> <a href="a00350.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00210.html">scalable_allocator.h</a> <a href="a00351.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>spin_mutex.h</b> <a href="a00352.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>spin_rw_mutex.h</b> <a href="a00353.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>task.h</b> <a href="a00354.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>task_group.h</b> <a href="a00363.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>task_scheduler_init.h</b> <a href="a00371.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>task_scheduler_observer.h</b> <a href="a00372.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb.h</b> <a href="a00374.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_allocator.h</b> <a href="a00375.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_config.h</b> <a href="a00379.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_config_lrb.h</b> <a href="a00380.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_exception.h</b> <a href="a00381.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_machine.h</b> <a href="a00382.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_profiling.h</b> <a href="a00385.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_stddef.h</b> <a href="a00386.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_thread.h</b> <a href="a00391.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbbmalloc_proxy.h</b> <a href="a00399.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tick_count.h</b> <a href="a00401.html">[code]</a></td><td class="indexvalue"></td></tr>
+</table>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions.html
new file mode 100644 (file)
index 0000000..68ed09e
--- /dev/null
@@ -0,0 +1,307 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li id="current"><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related&nbsp;Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="#index_a"><span>a</span></a></li>
+    <li><a href="#index_b"><span>b</span></a></li>
+    <li><a href="#index_c"><span>c</span></a></li>
+    <li><a href="#index_d"><span>d</span></a></li>
+    <li><a href="#index_e"><span>e</span></a></li>
+    <li><a href="#index_f"><span>f</span></a></li>
+    <li><a href="#index_g"><span>g</span></a></li>
+    <li><a href="#index_i"><span>i</span></a></li>
+    <li><a href="#index_l"><span>l</span></a></li>
+    <li><a href="#index_m"><span>m</span></a></li>
+    <li><a href="#index_n"><span>n</span></a></li>
+    <li><a href="#index_o"><span>o</span></a></li>
+    <li><a href="#index_p"><span>p</span></a></li>
+    <li><a href="#index_q"><span>q</span></a></li>
+    <li><a href="#index_r"><span>r</span></a></li>
+    <li><a href="#index_s"><span>s</span></a></li>
+    <li><a href="#index_t"><span>t</span></a></li>
+    <li><a href="#index_u"><span>u</span></a></li>
+    <li><a href="#index_v"><span>v</span></a></li>
+    <li><a href="#index_w"><span>w</span></a></li>
+    <li><a href="#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented class members with links to the class documentation for each member:
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>acquire()
+: <a class="el" href="a00164.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#533e4fc8355ee321206a0609c42d909d">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00143.html#862e022841cdc522e4296a5533b22efd">tbb::mutex::scoped_lock</a>, <a class="el" href="a00132.html#7b75959ce5a971b05cfefcbc1d09a022">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a><li>add()
+: <a class="el" href="a00149.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while&lt; Body &gt;</a>, <a class="el" href="a00148.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder&lt; Item &gt;</a><li>add_filter()
+: <a class="el" href="a00150.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>add_to_depth()
+: <a class="el" href="a00166.html#b0f98c633647fc73b978fe4cd2277ac4">tbb::task</a><li>affinity()
+: <a class="el" href="a00166.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>affinity_id
+: <a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocate()
+: <a class="el" href="a00170.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator&lt; T &gt;</a>, <a class="el" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator&lt; T &gt;</a>, <a class="el" href="a00125.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">tbb::cache_aligned_allocator&lt; T &gt;</a><li>allocate_additional_child_of()
+: <a class="el" href="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">tbb::task</a><li>allocate_child()
+: <a class="el" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
+: <a class="el" href="a00166.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
+: <a class="el" href="a00166.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>allocated
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>allocator_type
+: <a class="el" href="a00170.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator&lt; T &gt;</a>, <a class="el" href="a00138.html#60047d25605a1ef993c49234e9ac5c2d">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>assign()
+: <a class="el" href="a00136.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector&lt; T, A &gt;</a><li>at()
+: <a class="el" href="a00136.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector&lt; T, A &gt;</a><li>automatic
+: <a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a></ul>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>back()
+: <a class="el" href="a00136.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector&lt; T, A &gt;</a><li>begin()
+: <a class="el" href="a00138.html#ba6674c6102a6faf8f96d131497654b3">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00136.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range&lt; Value &gt;</a>, <a class="el" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space&lt; T, N &gt;</a><li>blocked_range()
+: <a class="el" href="a00122.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range&lt; Value &gt;</a></ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>cancel_group_execution()
+: <a class="el" href="a00166.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00167.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
+: <a class="el" href="a00136.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue&lt; T, A &gt;</a><li>cbegin()
+: <a class="el" href="a00136.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector&lt; T, A &gt;</a><li>cend()
+: <a class="el" href="a00136.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector&lt; T, A &gt;</a><li>clear()
+: <a class="el" href="a00168.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00150.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00136.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#c32e8e84c0524155133b4aae32d2a827">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>, <a class="el" href="a00130.html#36bcd50fd5383f3682032323b2d74333">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>cols()
+: <a class="el" href="a00124.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>, <a class="el" href="a00123.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a><li>compact()
+: <a class="el" href="a00136.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector&lt; T, A &gt;</a><li>concurrent_bounded_queue()
+: <a class="el" href="a00129.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue&lt; T, A &gt;</a><li>concurrent_hash_map()
+: <a class="el" href="a00130.html#b5132202dff9ee3d619bef6b1d84edea">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>concurrent_queue()
+: <a class="el" href="a00135.html#383187b910f8c3ca27a39c1638566f15">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>concurrent_vector()
+: <a class="el" href="a00136.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector&lt; T, A &gt;</a><li>const_accessor()
+: <a class="el" href="a00133.html#6eedb35a3ca397dd289ed5ca6fb4d95d">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a><li>const_iterator
+: <a class="el" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range&lt; Value &gt;</a><li>const_reference
+: <a class="el" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>construct()
+: <a class="el" href="a00170.html#ab228ab9e324ed041c2226e1d717df5f">tbb::tbb_allocator&lt; T &gt;</a>, <a class="el" href="a00125.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator&lt; T &gt;</a><li>context()
+: <a class="el" href="a00166.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>count()
+: <a class="el" href="a00130.html#a3e97a1f3cb66e81a2336b013ef1ae7d">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>crbegin()
+: <a class="el" href="a00136.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector&lt; T, A &gt;</a><li>crend()
+: <a class="el" href="a00136.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector&lt; T, A &gt;</a></ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>deallocate()
+: <a class="el" href="a00170.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator&lt; T &gt;</a>, <a class="el" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator&lt; T &gt;</a>, <a class="el" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator&lt; T &gt;</a><li>decrement_ref_count()
+: <a class="el" href="a00166.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>default_num_threads()
+: <a class="el" href="a00169.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>deferred
+: <a class="el" href="a00169.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>depth()
+: <a class="el" href="a00166.html#5be823a972b3c3b9901c5963eeb050fd">tbb::task</a><li>depth_type
+: <a class="el" href="a00166.html#d8815c39bb61bd7e2d2691c476ed03b9">tbb::task</a><li>destroy()
+: <a class="el" href="a00173.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception&lt; ExceptionData &gt;</a>, <a class="el" href="a00127.html#667812a82f1525e968c52593dea0ef4c">tbb::captured_exception</a>, <a class="el" href="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00170.html#ef133522bf55f05a605bee0763208281">tbb::tbb_allocator&lt; T &gt;</a>, <a class="el" href="a00166.html#a57def00c8e9d932dbea0b3ee23991b9">tbb::task</a>, <a class="el" href="a00125.html#cd298895a4f1654b5149ec84b591ecb5">tbb::cache_aligned_allocator&lt; T &gt;</a><li>difference_type
+: <a class="el" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>downgrade_to_reader()
+: <a class="el" href="a00164.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00155.html#0d2f93edf7b15ec4bcee138823220c52">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>empty()
+: <a class="el" href="a00168.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00138.html#ad23345a722622199deaa4dfd243d9f8">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00136.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#f3f6fce0cfa2d581d6f3b47e0613ad64">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>, <a class="el" href="a00130.html#3e5d085375320cd3f34faeedc5bba8f6">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>, <a class="el" href="a00133.html#e55c7c3f0acd7fd823a07957e71a7462">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a>, <a class="el" href="a00124.html#356860e1c977d91711e8216bd55c0b25">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>, <a class="el" href="a00123.html#d144cb2d88cef553420311aca8667a44">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>, <a class="el" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">tbb::blocked_range&lt; Value &gt;</a><li>end()
+: <a class="el" href="a00138.html#89811890e6a77f1e0cfc6c24ed35d09b">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00136.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range&lt; Value &gt;</a>, <a class="el" href="a00116.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space&lt; T, N &gt;</a><li>enumerable_thread_specific()
+: <a class="el" href="a00138.html#0466c43272d8458185e980fc2dc4abe2">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a><li>erase()
+: <a class="el" href="a00130.html#b65abfa291da566617dd58dfb349630a">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>exclude()
+: <a class="el" href="a00130.html#671965989ffb5f6084c776cb0bb6cdab">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>execute()
+: <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">tbb::task</a><li>executing
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</a></ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>finalize()
+: <a class="el" href="a00139.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
+: <a class="el" href="a00130.html#2f1ca7e8319c464349a9de304b6dbf4a">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>freed
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>front()
+: <a class="el" href="a00136.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector&lt; T, A &gt;</a></ul>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>get_allocator()
+: <a class="el" href="a00136.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>, <a class="el" href="a00130.html#79d1e5c3b975dbd38b43138266fe4c0e">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>grainsize()
+: <a class="el" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range&lt; Value &gt;</a><li>grow_by()
+: <a class="el" href="a00136.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector&lt; T, A &gt;</a><li>grow_to_at_least()
+: <a class="el" href="a00136.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector&lt; T, A &gt;</a></ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>increment_ref_count()
+: <a class="el" href="a00166.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>init()
+: <a class="el" href="a00167.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
+: <a class="el" href="a00169.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>insert()
+: <a class="el" href="a00130.html#7b42dba04d71e1367f0d542087906178">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>internal_copy()
+: <a class="el" href="a00130.html#7973cd92f57dcb092ab757f8d9e089f9">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>internal_equal_range()
+: <a class="el" href="a00130.html#308ec5ad19fdd1be4d345f8013070150">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>interval_t()
+: <a class="el" href="a00177.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
+: <a class="el" href="a00169.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
+: <a class="el" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
+: <a class="el" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a><li>is_divisible()
+: <a class="el" href="a00124.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>, <a class="el" href="a00123.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>, <a class="el" href="a00122.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range&lt; Value &gt;</a><li>is_group_execution_cancelled()
+: <a class="el" href="a00167.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
+: <a class="el" href="a00139.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
+: <a class="el" href="a00166.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
+: <a class="el" href="a00139.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
+: <a class="el" href="a00166.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer()
+: <a class="el" href="a00132.html#adf8e405df5787351fe816c42042b9ec">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a></ul>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>local()
+: <a class="el" href="a00138.html#9505351eace34ed7130257adcae91706">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a><li>lock()
+: <a class="el" href="a00163.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00161.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
+: <a class="el" href="a00163.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a><li>lookup()
+: <a class="el" href="a00130.html#0f0ba43d9cb783f12dd01bf5677da097">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>malloc_type
+: <a class="el" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator&lt; T &gt;</a><li>max_size()
+: <a class="el" href="a00170.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator&lt; T &gt;</a>, <a class="el" href="a00158.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator&lt; T &gt;</a>, <a class="el" href="a00136.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00130.html#6ed260e217fb310050928d7bd03f1b5e">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>, <a class="el" href="a00125.html#fb23b687b4c0429dab4c7f8017266cf0">tbb::cache_aligned_allocator&lt; T &gt;</a><li>mode
+: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">tbb::filter</a><li>move()
+: <a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception&lt; ExceptionData &gt;</a>, <a class="el" href="a00127.html#df6bbb78a362fe862a341e81e2999810">tbb::captured_exception</a>, <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex()
+: <a class="el" href="a00142.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a><li>my_exception_data
+: <a class="el" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception&lt; ExceptionData &gt;</a></ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>name()
+: <a class="el" href="a00141.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception&lt; ExceptionData &gt;</a>, <a class="el" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00172.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>note_affinity()
+: <a class="el" href="a00166.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
+: <a class="el" href="a00176.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</a></ul>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>operator *()
+: <a class="el" href="a00131.html#03a091f7355a3c0c03f839893695f372">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</a>, <a class="el" href="a00133.html#d95b7a39a08b7ab256dfff2ca37cdb75">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a><li>operator()()
+: <a class="el" href="a00139.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00132.html#7e98ad1b46ed35fb4a92d65c16c6982d">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a><li>operator+
+: <a class="el" href="a00177.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator+=()
+: <a class="el" href="a00177.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-
+: <a class="el" href="a00176.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00177.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a><li>operator-=()
+: <a class="el" href="a00177.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator-&gt;()
+: <a class="el" href="a00131.html#302f02e5deec0a67b872e9cfb08d9e60">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</a>, <a class="el" href="a00133.html#6fc0491f6420ffe38c48786e7b9ab042">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a><li>operator=()
+: <a class="el" href="a00136.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00130.html#adadeb9d1acb8c3b34517435666cf297">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>operator[]()
+: <a class="el" href="a00136.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector&lt; T, A &gt;</a></ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>page_range_type
+: <a class="el" href="a00124.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a><li>pages()
+: <a class="el" href="a00124.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a><li>parallel
+: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">tbb::filter</a><li>parallel_while()
+: <a class="el" href="a00149.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while&lt; Body &gt;</a><li>parent()
+: <a class="el" href="a00166.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
+: <a class="el" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
+: <a class="el" href="a00150.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
+: <a class="el" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue&lt; T, A &gt;</a><li>pop_front()
+: <a class="el" href="a00168.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
+: <a class="el" href="a00135.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a><li>process_item()
+: <a class="el" href="a00175.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
+: <a class="el" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>push_back()
+: <a class="el" href="a00168.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector&lt; T, A &gt;</a><li>push_if_not_full()
+: <a class="el" href="a00135.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></ul>
+<h3><a class="anchor" name="index_q">- q -</a></h3><ul>
+<li>queuing_mutex()
+: <a class="el" href="a00152.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
+: <a class="el" href="a00154.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</a></ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>range()
+: <a class="el" href="a00138.html#a32dd1d88e42dc1faccceca244b12b6c">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00136.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector&lt; T, A &gt;</a><li>rbegin()
+: <a class="el" href="a00136.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector&lt; T, A &gt;</a><li>ready
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recursive_mutex()
+: <a class="el" href="a00156.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>recycle_as_child_of()
+: <a class="el" href="a00166.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
+: <a class="el" href="a00166.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
+: <a class="el" href="a00166.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
+: <a class="el" href="a00166.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>reexecute
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a><li>ref_count()
+: <a class="el" href="a00166.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>reference
+: <a class="el" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>register_pending_exception()
+: <a class="el" href="a00167.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>release()
+: <a class="el" href="a00164.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00143.html#0d51d18cd99df3b2e93bf07378d0992c">tbb::mutex::scoped_lock</a>, <a class="el" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a><li>rend()
+: <a class="el" href="a00136.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector&lt; T, A &gt;</a><li>reserve()
+: <a class="el" href="a00136.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector&lt; T, A &gt;</a><li>reset()
+: <a class="el" href="a00167.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
+: <a class="el" href="a00136.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector&lt; T, A &gt;</a><li>row_range_type
+: <a class="el" href="a00123.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a><li>rows()
+: <a class="el" href="a00124.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>, <a class="el" href="a00123.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a><li>run()
+: <a class="el" href="a00150.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00149.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while&lt; Body &gt;</a></ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>scoped_lock()
+: <a class="el" href="a00164.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#fbb8798792d3aebb136c46fc63d2529e">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#9b51ef972f5618ac17caadb58841ab6d">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00143.html#605a6b9af0f8cdabdf81825e0de99600">tbb::mutex::scoped_lock</a><li>seconds()
+: <a class="el" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
+: <a class="el" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>serial
+: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">tbb::filter</a><li>serial_in_order
+: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">tbb::filter</a><li>serial_out_of_order
+: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">tbb::filter</a><li>set_affinity()
+: <a class="el" href="a00166.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
+: <a class="el" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">tbb::concurrent_bounded_queue&lt; T, A &gt;</a><li>set_depth()
+: <a class="el" href="a00166.html#fc4d4e61a56823aa1efdbb5d59e42973">tbb::task</a><li>set_ref_count()
+: <a class="el" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>shrink_to_fit()
+: <a class="el" href="a00136.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector&lt; T, A &gt;</a><li>size()
+: <a class="el" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>, <a class="el" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">tbb::blocked_range&lt; Value &gt;</a><li>size_type
+: <a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>, <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range&lt; Value &gt;</a><li>spawn()
+: <a class="el" href="a00166.html#db841c647eb6d754440c2f4e4a73c80b">tbb::task</a><li>spawn_and_wait_for_all()
+: <a class="el" href="a00166.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
+: <a class="el" href="a00166.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
+: <a class="el" href="a00161.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
+: <a class="el" href="a00163.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
+: <a class="el" href="a00166.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>state_type
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a><li>swap()
+: <a class="el" href="a00136.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00130.html#dd73f70aa6602021ea2c56bac9715353">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></ul>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>task()
+: <a class="el" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
+: <a class="el" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
+: <a class="el" href="a00168.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
+: <a class="el" href="a00169.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
+: <a class="el" href="a00169.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
+: <a class="el" href="a00173.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00141.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception&lt; ExceptionData &gt;</a>, <a class="el" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
+: <a class="el" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
+: <a class="el" href="a00164.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#e5a014fb817599386a87170cf2cf51a9">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00143.html#591e0c49b82bcedffcbe0923f1b915ec">tbb::mutex::scoped_lock</a><li>try_lock()
+: <a class="el" href="a00163.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00161.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00156.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00142.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
+: <a class="el" href="a00163.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a><li>try_pop()
+: <a class="el" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>try_process_item()
+: <a class="el" href="a00175.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
+: <a class="el" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>unlock()
+: <a class="el" href="a00163.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00161.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
+: <a class="el" href="a00134.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>upgrade_to_writer()
+: <a class="el" href="a00164.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00155.html#11ba1da4a722c9e6f73339a52c487e82">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
+<li>value_type
+: <a class="el" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while&lt; Body &gt;</a>, <a class="el" href="a00129.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>, <a class="el" href="a00131.html#34035ddb9e2a27f2f0a1f6a2a16730cf">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</a>, <a class="el" href="a00133.html#b5de4197079009b1cfd8bdeb594c6428">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></ul>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>wait_for_all()
+: <a class="el" href="a00166.html#53d2615ad9c38859b4c8080936600283">tbb::task</a><li>what()
+: <a class="el" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception&lt; ExceptionData &gt;</a>, <a class="el" href="a00127.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00172.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
+<h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
+<li>~combinable()
+: <a class="el" href="a00128.html#2c87e79ae98588a5780f708773388843">tbb::combinable&lt; T &gt;</a><li>~concurrent_bounded_queue()
+: <a class="el" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue&lt; T, A &gt;</a><li>~concurrent_hash_map()
+: <a class="el" href="a00130.html#5e96649f71f68f3b6bf3b1eee6b441a7">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>~concurrent_queue()
+: <a class="el" href="a00134.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>~concurrent_vector()
+: <a class="el" href="a00136.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector&lt; T, A &gt;</a><li>~const_accessor()
+: <a class="el" href="a00133.html#e002771760f510e06c03e0a198286172">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a><li>~enumerable_thread_specific()
+: <a class="el" href="a00138.html#41176526161d6fef1bdd19c2db7ded4d">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a><li>~filter()
+: <a class="el" href="a00139.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~parallel_while()
+: <a class="el" href="a00149.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while&lt; Body &gt;</a><li>~pipeline()
+: <a class="el" href="a00150.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
+: <a class="el" href="a00154.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~scoped_lock()
+: <a class="el" href="a00164.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#32c7d67a660d23ebbaab1a1d2826d31a">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#ac2c576a93570957d694192a5f491443">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00143.html#0ebbbecaf4311e9df7362cb76ceaa368">tbb::mutex::scoped_lock</a><li>~spin_rw_mutex_v3()
+: <a class="el" href="a00163.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
+: <a class="el" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
+: <a class="el" href="a00168.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
+: <a class="el" href="a00169.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_enum.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_enum.html
new file mode 100644 (file)
index 0000000..b429934
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members - Enumerations</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li id="current"><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li id="current"><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related&nbsp;Functions</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>malloc_type
+: <a class="el" href="a00170.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator&lt; T &gt;</a><li>mode
+: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf">tbb::filter</a><li>state_type
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_eval.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_eval.html
new file mode 100644 (file)
index 0000000..3370c2b
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members - Enumerator</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li id="current"><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li id="current"><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related&nbsp;Functions</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>allocated
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>executing
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</a><li>freed
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>parallel
+: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf75740556347260927e94ce3b23a34abe">tbb::filter</a><li>ready
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recycle
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>reexecute
+: <a class="el" href="a00166.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a><li>serial
+: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cff8662693d85bd1cd3df052b761edd237">tbb::filter</a><li>serial_in_order
+: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf5645f2f2a541e53009d3e719c06c5f93">tbb::filter</a><li>serial_out_of_order
+: <a class="el" href="a00139.html#d3b6ed2c517144199d0c39c62ddfd8cf7fb70bcb663107adfc2938de89bab7d9">tbb::filter</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_func.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_func.html
new file mode 100644 (file)
index 0000000..a5dd020
--- /dev/null
@@ -0,0 +1,276 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li id="current"><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related&nbsp;Functions</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="#index_a"><span>a</span></a></li>
+    <li><a href="#index_b"><span>b</span></a></li>
+    <li><a href="#index_c"><span>c</span></a></li>
+    <li><a href="#index_d"><span>d</span></a></li>
+    <li><a href="#index_e"><span>e</span></a></li>
+    <li><a href="#index_f"><span>f</span></a></li>
+    <li><a href="#index_g"><span>g</span></a></li>
+    <li><a href="#index_i"><span>i</span></a></li>
+    <li><a href="#index_l"><span>l</span></a></li>
+    <li><a href="#index_m"><span>m</span></a></li>
+    <li><a href="#index_n"><span>n</span></a></li>
+    <li><a href="#index_o"><span>o</span></a></li>
+    <li><a href="#index_p"><span>p</span></a></li>
+    <li><a href="#index_q"><span>q</span></a></li>
+    <li><a href="#index_r"><span>r</span></a></li>
+    <li><a href="#index_s"><span>s</span></a></li>
+    <li><a href="#index_t"><span>t</span></a></li>
+    <li><a href="#index_u"><span>u</span></a></li>
+    <li><a href="#index_w"><span>w</span></a></li>
+    <li><a href="#index_~"><span>~</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>acquire()
+: <a class="el" href="a00164.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#533e4fc8355ee321206a0609c42d909d">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00143.html#862e022841cdc522e4296a5533b22efd">tbb::mutex::scoped_lock</a>, <a class="el" href="a00132.html#7b75959ce5a971b05cfefcbc1d09a022">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a><li>add()
+: <a class="el" href="a00149.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while&lt; Body &gt;</a>, <a class="el" href="a00148.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder&lt; Item &gt;</a><li>add_filter()
+: <a class="el" href="a00150.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>add_to_depth()
+: <a class="el" href="a00166.html#b0f98c633647fc73b978fe4cd2277ac4">tbb::task</a><li>affinity()
+: <a class="el" href="a00166.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>allocate()
+: <a class="el" href="a00170.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator&lt; T &gt;</a>, <a class="el" href="a00158.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator&lt; T &gt;</a>, <a class="el" href="a00125.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">tbb::cache_aligned_allocator&lt; T &gt;</a><li>allocate_additional_child_of()
+: <a class="el" href="a00166.html#43bfe64c0e9333c0ca895cc0c375512b">tbb::task</a><li>allocate_child()
+: <a class="el" href="a00166.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
+: <a class="el" href="a00166.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
+: <a class="el" href="a00166.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>allocator_type()
+: <a class="el" href="a00170.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator&lt; T &gt;</a>, <a class="el" href="a00138.html#60047d25605a1ef993c49234e9ac5c2d">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>assign()
+: <a class="el" href="a00136.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector&lt; T, A &gt;</a><li>at()
+: <a class="el" href="a00136.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector&lt; T, A &gt;</a></ul>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>back()
+: <a class="el" href="a00136.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector&lt; T, A &gt;</a><li>begin()
+: <a class="el" href="a00138.html#ba6674c6102a6faf8f96d131497654b3">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00136.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00122.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range&lt; Value &gt;</a>, <a class="el" href="a00116.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space&lt; T, N &gt;</a><li>blocked_range()
+: <a class="el" href="a00122.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range&lt; Value &gt;</a></ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>cancel_group_execution()
+: <a class="el" href="a00166.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00167.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
+: <a class="el" href="a00136.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00129.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue&lt; T, A &gt;</a><li>cbegin()
+: <a class="el" href="a00136.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector&lt; T, A &gt;</a><li>cend()
+: <a class="el" href="a00136.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector&lt; T, A &gt;</a><li>clear()
+: <a class="el" href="a00168.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00150.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00138.html#c890601a45273ef759e64ac2fe75cb6a">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00136.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00129.html#90b31e2954c6e4596c7900435a5f4bc1">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#c32e8e84c0524155133b4aae32d2a827">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>, <a class="el" href="a00130.html#36bcd50fd5383f3682032323b2d74333">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>cols()
+: <a class="el" href="a00124.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>, <a class="el" href="a00123.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a><li>compact()
+: <a class="el" href="a00136.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector&lt; T, A &gt;</a><li>concurrent_bounded_queue()
+: <a class="el" href="a00129.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue&lt; T, A &gt;</a><li>concurrent_hash_map()
+: <a class="el" href="a00130.html#b5132202dff9ee3d619bef6b1d84edea">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>concurrent_queue()
+: <a class="el" href="a00135.html#383187b910f8c3ca27a39c1638566f15">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>concurrent_vector()
+: <a class="el" href="a00136.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector&lt; T, A &gt;</a><li>const_accessor()
+: <a class="el" href="a00133.html#6eedb35a3ca397dd289ed5ca6fb4d95d">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a><li>construct()
+: <a class="el" href="a00170.html#ab228ab9e324ed041c2226e1d717df5f">tbb::tbb_allocator&lt; T &gt;</a>, <a class="el" href="a00125.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator&lt; T &gt;</a><li>context()
+: <a class="el" href="a00166.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>count()
+: <a class="el" href="a00130.html#a3e97a1f3cb66e81a2336b013ef1ae7d">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>crbegin()
+: <a class="el" href="a00136.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector&lt; T, A &gt;</a><li>crend()
+: <a class="el" href="a00136.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector&lt; T, A &gt;</a></ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>deallocate()
+: <a class="el" href="a00170.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator&lt; T &gt;</a>, <a class="el" href="a00158.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator&lt; T &gt;</a>, <a class="el" href="a00125.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator&lt; T &gt;</a><li>decrement_ref_count()
+: <a class="el" href="a00166.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>default_num_threads()
+: <a class="el" href="a00169.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>depth()
+: <a class="el" href="a00166.html#5be823a972b3c3b9901c5963eeb050fd">tbb::task</a><li>destroy()
+: <a class="el" href="a00173.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00141.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception&lt; ExceptionData &gt;</a>, <a class="el" href="a00127.html#667812a82f1525e968c52593dea0ef4c">tbb::captured_exception</a>, <a class="el" href="a00172.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00170.html#ef133522bf55f05a605bee0763208281">tbb::tbb_allocator&lt; T &gt;</a>, <a class="el" href="a00166.html#a57def00c8e9d932dbea0b3ee23991b9">tbb::task</a>, <a class="el" href="a00125.html#cd298895a4f1654b5149ec84b591ecb5">tbb::cache_aligned_allocator&lt; T &gt;</a><li>downgrade_to_reader()
+: <a class="el" href="a00164.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00155.html#0d2f93edf7b15ec4bcee138823220c52">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>empty()
+: <a class="el" href="a00168.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00138.html#ad23345a722622199deaa4dfd243d9f8">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00136.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00129.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#f3f6fce0cfa2d581d6f3b47e0613ad64">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>, <a class="el" href="a00130.html#3e5d085375320cd3f34faeedc5bba8f6">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>, <a class="el" href="a00133.html#e55c7c3f0acd7fd823a07957e71a7462">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a>, <a class="el" href="a00124.html#356860e1c977d91711e8216bd55c0b25">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>, <a class="el" href="a00123.html#d144cb2d88cef553420311aca8667a44">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>, <a class="el" href="a00122.html#8f4f02f530eb3f2e7ea26e06f76aef9d">tbb::blocked_range&lt; Value &gt;</a><li>end()
+: <a class="el" href="a00138.html#89811890e6a77f1e0cfc6c24ed35d09b">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00136.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00122.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range&lt; Value &gt;</a>, <a class="el" href="a00116.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space&lt; T, N &gt;</a><li>enumerable_thread_specific()
+: <a class="el" href="a00138.html#0466c43272d8458185e980fc2dc4abe2">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a><li>erase()
+: <a class="el" href="a00130.html#b65abfa291da566617dd58dfb349630a">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>exclude()
+: <a class="el" href="a00130.html#671965989ffb5f6084c776cb0bb6cdab">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>execute()
+: <a class="el" href="a00166.html#22c298cd40937a431a06777423f002f6">tbb::task</a></ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>finalize()
+: <a class="el" href="a00139.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
+: <a class="el" href="a00130.html#2f1ca7e8319c464349a9de304b6dbf4a">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>front()
+: <a class="el" href="a00136.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector&lt; T, A &gt;</a></ul>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>get_allocator()
+: <a class="el" href="a00136.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00129.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>, <a class="el" href="a00130.html#79d1e5c3b975dbd38b43138266fe4c0e">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>grainsize()
+: <a class="el" href="a00122.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range&lt; Value &gt;</a><li>grow_by()
+: <a class="el" href="a00136.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector&lt; T, A &gt;</a><li>grow_to_at_least()
+: <a class="el" href="a00136.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector&lt; T, A &gt;</a></ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>increment_ref_count()
+: <a class="el" href="a00166.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>init()
+: <a class="el" href="a00167.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
+: <a class="el" href="a00169.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>insert()
+: <a class="el" href="a00130.html#7b42dba04d71e1367f0d542087906178">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>internal_copy()
+: <a class="el" href="a00130.html#7973cd92f57dcb092ab757f8d9e089f9">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>internal_equal_range()
+: <a class="el" href="a00130.html#308ec5ad19fdd1be4d345f8013070150">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>interval_t()
+: <a class="el" href="a00177.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
+: <a class="el" href="a00169.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
+: <a class="el" href="a00139.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
+: <a class="el" href="a00166.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a><li>is_divisible()
+: <a class="el" href="a00124.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>, <a class="el" href="a00123.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>, <a class="el" href="a00122.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range&lt; Value &gt;</a><li>is_group_execution_cancelled()
+: <a class="el" href="a00167.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
+: <a class="el" href="a00139.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
+: <a class="el" href="a00166.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
+: <a class="el" href="a00139.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
+: <a class="el" href="a00166.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer()
+: <a class="el" href="a00132.html#adf8e405df5787351fe816c42042b9ec">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a></ul>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>local()
+: <a class="el" href="a00138.html#9505351eace34ed7130257adcae91706">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a><li>lock()
+: <a class="el" href="a00163.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00161.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00156.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00142.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
+: <a class="el" href="a00163.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a><li>lookup()
+: <a class="el" href="a00130.html#0f0ba43d9cb783f12dd01bf5677da097">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>max_size()
+: <a class="el" href="a00170.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator&lt; T &gt;</a>, <a class="el" href="a00158.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator&lt; T &gt;</a>, <a class="el" href="a00136.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00130.html#6ed260e217fb310050928d7bd03f1b5e">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>, <a class="el" href="a00125.html#fb23b687b4c0429dab4c7f8017266cf0">tbb::cache_aligned_allocator&lt; T &gt;</a><li>move()
+: <a class="el" href="a00141.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception&lt; ExceptionData &gt;</a>, <a class="el" href="a00127.html#df6bbb78a362fe862a341e81e2999810">tbb::captured_exception</a>, <a class="el" href="a00172.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex()
+: <a class="el" href="a00142.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a></ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>name()
+: <a class="el" href="a00141.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception&lt; ExceptionData &gt;</a>, <a class="el" href="a00127.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00172.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>note_affinity()
+: <a class="el" href="a00166.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
+: <a class="el" href="a00176.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</a></ul>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>operator *()
+: <a class="el" href="a00131.html#03a091f7355a3c0c03f839893695f372">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</a>, <a class="el" href="a00133.html#d95b7a39a08b7ab256dfff2ca37cdb75">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a><li>operator()()
+: <a class="el" href="a00139.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00132.html#7e98ad1b46ed35fb4a92d65c16c6982d">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a><li>operator+=()
+: <a class="el" href="a00177.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-=()
+: <a class="el" href="a00177.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator-&gt;()
+: <a class="el" href="a00131.html#302f02e5deec0a67b872e9cfb08d9e60">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</a>, <a class="el" href="a00133.html#6fc0491f6420ffe38c48786e7b9ab042">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a><li>operator=()
+: <a class="el" href="a00136.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00130.html#adadeb9d1acb8c3b34517435666cf297">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>operator[]()
+: <a class="el" href="a00136.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector&lt; T, A &gt;</a></ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>pages()
+: <a class="el" href="a00124.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a><li>parallel_while()
+: <a class="el" href="a00149.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while&lt; Body &gt;</a><li>parent()
+: <a class="el" href="a00166.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
+: <a class="el" href="a00119.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
+: <a class="el" href="a00150.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
+: <a class="el" href="a00129.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue&lt; T, A &gt;</a><li>pop_front()
+: <a class="el" href="a00168.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
+: <a class="el" href="a00135.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a><li>process_item()
+: <a class="el" href="a00175.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
+: <a class="el" href="a00129.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>push_back()
+: <a class="el" href="a00168.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00136.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector&lt; T, A &gt;</a><li>push_if_not_full()
+: <a class="el" href="a00135.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a></ul>
+<h3><a class="anchor" name="index_q">- q -</a></h3><ul>
+<li>queuing_mutex()
+: <a class="el" href="a00152.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
+: <a class="el" href="a00154.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</a></ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>range()
+: <a class="el" href="a00138.html#a32dd1d88e42dc1faccceca244b12b6c">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00136.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector&lt; T, A &gt;</a><li>rbegin()
+: <a class="el" href="a00136.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector&lt; T, A &gt;</a><li>recursive_mutex()
+: <a class="el" href="a00156.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle_as_child_of()
+: <a class="el" href="a00166.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
+: <a class="el" href="a00166.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
+: <a class="el" href="a00166.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
+: <a class="el" href="a00166.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>ref_count()
+: <a class="el" href="a00166.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>register_pending_exception()
+: <a class="el" href="a00167.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>release()
+: <a class="el" href="a00164.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00143.html#0d51d18cd99df3b2e93bf07378d0992c">tbb::mutex::scoped_lock</a>, <a class="el" href="a00133.html#09575d1a2dfeb8cd896c27cdd3770517">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a><li>rend()
+: <a class="el" href="a00136.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector&lt; T, A &gt;</a><li>reserve()
+: <a class="el" href="a00136.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector&lt; T, A &gt;</a><li>reset()
+: <a class="el" href="a00167.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
+: <a class="el" href="a00136.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector&lt; T, A &gt;</a><li>rows()
+: <a class="el" href="a00124.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>, <a class="el" href="a00123.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a><li>run()
+: <a class="el" href="a00150.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00149.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while&lt; Body &gt;</a></ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>scoped_lock()
+: <a class="el" href="a00164.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#fbb8798792d3aebb136c46fc63d2529e">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#9b51ef972f5618ac17caadb58841ab6d">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00143.html#605a6b9af0f8cdabdf81825e0de99600">tbb::mutex::scoped_lock</a><li>seconds()
+: <a class="el" href="a00177.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
+: <a class="el" href="a00166.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>set_affinity()
+: <a class="el" href="a00166.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
+: <a class="el" href="a00129.html#089f33dfd504e30a95f40ed2a5799367">tbb::concurrent_bounded_queue&lt; T, A &gt;</a><li>set_depth()
+: <a class="el" href="a00166.html#fc4d4e61a56823aa1efdbb5d59e42973">tbb::task</a><li>set_ref_count()
+: <a class="el" href="a00166.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>shrink_to_fit()
+: <a class="el" href="a00136.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector&lt; T, A &gt;</a><li>size()
+: <a class="el" href="a00138.html#302a4d6f55f852d5b7a6679e0e00316e">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00136.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00129.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00130.html#25b0e3881038877604c5efc1c14c4afd">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>, <a class="el" href="a00122.html#9eaa0b6beff1420f688570bbf6b8c462">tbb::blocked_range&lt; Value &gt;</a><li>spawn()
+: <a class="el" href="a00166.html#db841c647eb6d754440c2f4e4a73c80b">tbb::task</a><li>spawn_and_wait_for_all()
+: <a class="el" href="a00166.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
+: <a class="el" href="a00166.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
+: <a class="el" href="a00161.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
+: <a class="el" href="a00163.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
+: <a class="el" href="a00166.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>swap()
+: <a class="el" href="a00136.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector&lt; T, A &gt;</a>, <a class="el" href="a00130.html#dd73f70aa6602021ea2c56bac9715353">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a></ul>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>task()
+: <a class="el" href="a00166.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
+: <a class="el" href="a00167.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
+: <a class="el" href="a00168.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
+: <a class="el" href="a00169.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
+: <a class="el" href="a00169.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
+: <a class="el" href="a00173.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00141.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception&lt; ExceptionData &gt;</a>, <a class="el" href="a00127.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00172.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
+: <a class="el" href="a00176.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
+: <a class="el" href="a00164.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#e5a014fb817599386a87170cf2cf51a9">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00143.html#591e0c49b82bcedffcbe0923f1b915ec">tbb::mutex::scoped_lock</a><li>try_lock()
+: <a class="el" href="a00163.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00161.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00156.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00142.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
+: <a class="el" href="a00163.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a><li>try_pop()
+: <a class="el" href="a00129.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>try_process_item()
+: <a class="el" href="a00175.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
+: <a class="el" href="a00129.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue&lt; T, A &gt;</a></ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>unlock()
+: <a class="el" href="a00163.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00161.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00156.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00142.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
+: <a class="el" href="a00134.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>upgrade_to_writer()
+: <a class="el" href="a00164.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00155.html#11ba1da4a722c9e6f73339a52c487e82">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>wait_for_all()
+: <a class="el" href="a00166.html#53d2615ad9c38859b4c8080936600283">tbb::task</a><li>what()
+: <a class="el" href="a00141.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception&lt; ExceptionData &gt;</a>, <a class="el" href="a00127.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00172.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
+<h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
+<li>~combinable()
+: <a class="el" href="a00128.html#2c87e79ae98588a5780f708773388843">tbb::combinable&lt; T &gt;</a><li>~concurrent_bounded_queue()
+: <a class="el" href="a00129.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue&lt; T, A &gt;</a><li>~concurrent_hash_map()
+: <a class="el" href="a00130.html#5e96649f71f68f3b6bf3b1eee6b441a7">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a><li>~concurrent_queue()
+: <a class="el" href="a00134.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>~concurrent_vector()
+: <a class="el" href="a00136.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector&lt; T, A &gt;</a><li>~const_accessor()
+: <a class="el" href="a00133.html#e002771760f510e06c03e0a198286172">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a><li>~enumerable_thread_specific()
+: <a class="el" href="a00138.html#41176526161d6fef1bdd19c2db7ded4d">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a><li>~filter()
+: <a class="el" href="a00139.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~parallel_while()
+: <a class="el" href="a00149.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while&lt; Body &gt;</a><li>~pipeline()
+: <a class="el" href="a00150.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
+: <a class="el" href="a00154.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~scoped_lock()
+: <a class="el" href="a00164.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00162.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00157.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00155.html#32c7d67a660d23ebbaab1a1d2826d31a">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00153.html#ac2c576a93570957d694192a5f491443">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00143.html#0ebbbecaf4311e9df7362cb76ceaa368">tbb::mutex::scoped_lock</a><li>~spin_rw_mutex_v3()
+: <a class="el" href="a00163.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
+: <a class="el" href="a00166.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
+: <a class="el" href="a00168.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
+: <a class="el" href="a00169.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_rela.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_rela.html
new file mode 100644 (file)
index 0000000..cb05088
--- /dev/null
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members - Related Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li id="current"><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li id="current"><a href="functions_rela.html"><span>Related&nbsp;Functions</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>operator+
+: <a class="el" href="a00177.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator-
+: <a class="el" href="a00176.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00177.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_type.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_type.html
new file mode 100644 (file)
index 0000000..b6e67e3
--- /dev/null
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members - Typedefs</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li id="current"><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li id="current"><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related&nbsp;Functions</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>affinity_id
+: <a class="el" href="a00166.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocator_type
+: <a class="el" href="a00170.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator&lt; T &gt;</a>, <a class="el" href="a00138.html#60047d25605a1ef993c49234e9ac5c2d">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>, <a class="el" href="a00129.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>const_iterator
+: <a class="el" href="a00122.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range&lt; Value &gt;</a><li>const_reference
+: <a class="el" href="a00129.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>depth_type
+: <a class="el" href="a00166.html#d8815c39bb61bd7e2d2691c476ed03b9">tbb::task</a><li>difference_type
+: <a class="el" href="a00129.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>page_range_type
+: <a class="el" href="a00124.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a><li>reference
+: <a class="el" href="a00129.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a><li>row_range_type
+: <a class="el" href="a00123.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a><li>size_type
+: <a class="el" href="a00129.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>, <a class="el" href="a00122.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range&lt; Value &gt;</a><li>value_type
+: <a class="el" href="a00149.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while&lt; Body &gt;</a>, <a class="el" href="a00129.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>, <a class="el" href="a00134.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>, <a class="el" href="a00131.html#34035ddb9e2a27f2f0a1f6a2a16730cf">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</a>, <a class="el" href="a00133.html#b5de4197079009b1cfd8bdeb594c6428">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_vars.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/functions_vars.html
new file mode 100644 (file)
index 0000000..c50f97a
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members - Variables</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li id="current"><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    <li><a href="functions_type.html"><span>Typedefs</span></a></li>
+    <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+    <li><a href="functions_rela.html"><span>Related&nbsp;Functions</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>automatic
+: <a class="el" href="a00169.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a><li>deferred
+: <a class="el" href="a00169.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>my_exception_data
+: <a class="el" href="a00141.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception&lt; ExceptionData &gt;</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/globals.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/globals.html
new file mode 100644 (file)
index 0000000..72d8e8a
--- /dev/null
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+  </ul>
+</div>
+Here is a list of all documented file members with links to the documentation:
+<p>
+<ul>
+<li>scalable_aligned_free()
+: <a class="el" href="a00235.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
+: <a class="el" href="a00235.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
+: <a class="el" href="a00235.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
+: <a class="el" href="a00235.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
+: <a class="el" href="a00235.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
+: <a class="el" href="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_posix_memalign()
+: <a class="el" href="a00235.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
+: <a class="el" href="a00235.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/globals_func.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/globals_func.html
new file mode 100644 (file)
index 0000000..941487f
--- /dev/null
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li id="current"><a href="globals_func.html"><span>Functions</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>scalable_aligned_free()
+: <a class="el" href="a00235.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
+: <a class="el" href="a00235.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
+: <a class="el" href="a00235.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
+: <a class="el" href="a00235.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
+: <a class="el" href="a00235.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
+: <a class="el" href="a00235.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_posix_memalign()
+: <a class="el" href="a00235.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
+: <a class="el" href="a00235.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/graph_legend.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/graph_legend.html
new file mode 100644 (file)
index 0000000..72aae12
--- /dev/null
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Graph Legend</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<h1>Graph Legend</h1>This page explains how to interpret the graphs that are generated by doxygen.<p>
+Consider the following example: <div class="fragment"><pre class="fragment"><span class="comment">/*! Invisible class because of truncation */</span>
+<span class="keyword">class </span>Invisible { };
+<span class="comment"></span>
+<span class="comment">/*! Truncated class, inheritance relation is hidden */</span>
+<span class="keyword">class </span>Truncated : <span class="keyword">public</span> Invisible { };
+
+<span class="comment">/* Class not documented with doxygen comments */</span>
+<span class="keyword">class </span>Undocumented { };
+<span class="comment"></span>
+<span class="comment">/*! Class that is inherited using public inheritance */</span>
+<span class="keyword">class </span>PublicBase : <span class="keyword">public</span> Truncated { };
+<span class="comment"></span>
+<span class="comment">/*! A template class */</span>
+<span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; <span class="keyword">class </span>Templ { };
+<span class="comment"></span>
+<span class="comment">/*! Class that is inherited using protected inheritance */</span>
+<span class="keyword">class </span>ProtectedBase { };
+<span class="comment"></span>
+<span class="comment">/*! Class that is inherited using private inheritance */</span>
+<span class="keyword">class </span>PrivateBase { };
+<span class="comment"></span>
+<span class="comment">/*! Class that is used by the Inherited class */</span>
+<span class="keyword">class </span>Used { };
+<span class="comment"></span>
+<span class="comment">/*! Super class that inherits a number of other classes */</span>
+<span class="keyword">class </span>Inherited : <span class="keyword">public</span> PublicBase,
+                  <span class="keyword">protected</span> ProtectedBase,
+                  <span class="keyword">private</span> PrivateBase,
+                  <span class="keyword">public</span> Undocumented
+                  <span class="keyword">public</span> Templ&lt;int&gt;
+{
+  <span class="keyword">private</span>:
+    Used *m_usedClass;
+};
+</pre></div> If the <code>MAX_DOT_GRAPH_HEIGHT</code> tag in the configuration file is set to 240 this will result in the following graph:<p>
+<center><div align="center">
+<img src="graph_legend.gif" alt="graph_legend.gif">
+</div>
+</center> <p>
+The boxes in the above graph have the following meaning: <ul>
+<li>
+A filled black box represents the struct or class for which the graph is generated. </li>
+<li>
+A box with a black border denotes a documented struct or class. </li>
+<li>
+A box with a grey border denotes an undocumented struct or class. </li>
+<li>
+A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
+</ul>
+The arrows have the following meaning: <ul>
+<li>
+A dark blue arrow is used to visualize a public inheritance relation between two classes. </li>
+<li>
+A dark green arrow is used for protected inheritance. </li>
+<li>
+A dark red arrow is used for private inheritance. </li>
+<li>
+A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible. </li>
+<li>
+A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance. </li>
+</ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/hierarchy.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/hierarchy.html
new file mode 100644 (file)
index 0000000..883a6ce
--- /dev/null
@@ -0,0 +1,110 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Hierarchical Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+    <li id="current"><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>Class Hierarchy</h1>This inheritance list is sorted roughly, but not completely, alphabetically:<ul>
+<li><a class="el" href="a00115.html">tbb::affinity_partitioner</a>
+<li><a class="el" href="a00116.html">tbb::aligned_space&lt; T, N &gt;</a>
+<li><a class="el" href="a00117.html">tbb::atomic&lt; T &gt;</a>
+<li><a class="el" href="a00118.html">tbb::atomic&lt; void * &gt;</a>
+<li><a class="el" href="a00119.html">tbb::internal::atomic_backoff</a>
+<li><a class="el" href="a00120.html">tbb::auto_partitioner</a>
+<li><a class="el" href="a00121.html">tbb::bad_last_alloc</a>
+<li><a class="el" href="a00122.html">tbb::blocked_range&lt; Value &gt;</a>
+<li><a class="el" href="a00123.html">tbb::blocked_range2d&lt; RowValue, ColValue &gt;</a>
+<li><a class="el" href="a00124.html">tbb::blocked_range3d&lt; PageValue, RowValue, ColValue &gt;</a>
+<li><a class="el" href="a00122.html">tbb::blocked_range&lt; I &gt;</a>
+<li><a class="el" href="a00125.html">tbb::cache_aligned_allocator&lt; T &gt;</a>
+<li><a class="el" href="a00126.html">tbb::cache_aligned_allocator&lt; void &gt;</a>
+<li><a class="el" href="a00128.html">tbb::combinable&lt; T &gt;</a>
+<li><a class="el" href="a00129.html">tbb::concurrent_bounded_queue&lt; T, A &gt;</a>
+<ul>
+<li><a class="el" href="a00135.html">tbb::deprecated::concurrent_queue&lt; T, A &gt;</a>
+</ul>
+<li><a class="el" href="a00130.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;</a>
+<li><a class="el" href="a00132.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::bucket_accessor</a>
+<li><a class="el" href="a00133.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::const_accessor</a>
+<ul>
+<li><a class="el" href="a00131.html">tbb::concurrent_hash_map&lt; Key, T, HashCompare, Allocator &gt;::accessor</a>
+</ul>
+<li><a class="el" href="a00134.html">tbb::strict_ppl::concurrent_queue&lt; T, A &gt;</a>
+<li><a class="el" href="a00136.html">tbb::concurrent_vector&lt; T, A &gt;</a>
+<li><a class="el" href="a00138.html">tbb::enumerable_thread_specific&lt; T, Allocator, ETS_key_type &gt;</a>
+<li><a class="el" href="a00139.html">tbb::filter</a>
+<ul>
+<li><a class="el" href="a00175.html">tbb::thread_bound_filter</a>
+</ul>
+<li><a class="el" href="a00140.html">tbb::final_scan_tag</a>
+<li><b>atomic_impl</b><li><a class="el" href="a00142.html">tbb::mutex</a>
+<li><a class="el" href="a00143.html">tbb::mutex::scoped_lock</a>
+<li><a class="el" href="a00144.html">tbb::null_mutex</a>
+<li><a class="el" href="a00145.html">tbb::null_mutex::scoped_lock</a>
+<li><a class="el" href="a00146.html">tbb::null_rw_mutex</a>
+<li><a class="el" href="a00147.html">tbb::null_rw_mutex::scoped_lock</a>
+<li><a class="el" href="a00148.html">tbb::parallel_do_feeder&lt; Item &gt;</a>
+<li><a class="el" href="a00149.html">tbb::parallel_while&lt; Body &gt;</a>
+<li><a class="el" href="a00150.html">tbb::pipeline</a>
+<li><a class="el" href="a00151.html">tbb::pre_scan_tag</a>
+<li><a class="el" href="a00152.html">tbb::queuing_mutex</a>
+<li><a class="el" href="a00153.html">tbb::queuing_mutex::scoped_lock</a>
+<li><a class="el" href="a00154.html">tbb::queuing_rw_mutex</a>
+<li><a class="el" href="a00155.html">tbb::queuing_rw_mutex::scoped_lock</a>
+<li><a class="el" href="a00156.html">tbb::recursive_mutex</a>
+<li><a class="el" href="a00157.html">tbb::recursive_mutex::scoped_lock</a>
+<li><a class="el" href="a00158.html">tbb::scalable_allocator&lt; T &gt;</a>
+<li><a class="el" href="a00159.html">tbb::scalable_allocator&lt; void &gt;</a>
+<li><a class="el" href="a00160.html">tbb::simple_partitioner</a>
+<li><a class="el" href="a00161.html">tbb::spin_mutex</a>
+<li><a class="el" href="a00162.html">tbb::spin_mutex::scoped_lock</a>
+<li><a class="el" href="a00163.html">tbb::spin_rw_mutex_v3</a>
+<li><a class="el" href="a00164.html">tbb::spin_rw_mutex_v3::scoped_lock</a>
+<li><a class="el" href="a00165.html">tbb::split</a>
+<li><a class="el" href="a00166.html">tbb::task</a>
+<ul>
+<li><a class="el" href="a00137.html">tbb::empty_task</a>
+</ul>
+<li><a class="el" href="a00167.html">tbb::task_group_context</a>
+<li><a class="el" href="a00168.html">tbb::task_list</a>
+<li><a class="el" href="a00169.html">tbb::task_scheduler_init</a>
+<li><a class="el" href="a00170.html">tbb::tbb_allocator&lt; T &gt;</a>
+<li><a class="el" href="a00171.html">tbb::tbb_allocator&lt; void &gt;</a>
+<li><a class="el" href="a00172.html">tbb::tbb_exception</a>
+<ul>
+<li><a class="el" href="a00127.html">tbb::captured_exception</a>
+<li><a class="el" href="a00141.html">tbb::movable_exception&lt; ExceptionData &gt;</a>
+</ul>
+<li><a class="el" href="a00173.html">tbb::internal::tbb_exception_ptr</a>
+<li><a class="el" href="a00174.html">tbb::tbb_hash_compare&lt; T &gt;</a>
+<li><a class="el" href="a00176.html">tbb::tick_count</a>
+<li><a class="el" href="a00177.html">tbb::tick_count::interval_t</a>
+<li><a class="el" href="a00178.html">tbb::internal::work_around_alignment_bug&lt; Size, T &gt;</a>
+<li><a class="el" href="a00179.html">tbb::zero_allocator&lt; T, Allocator &gt;</a>
+<li><a class="el" href="a00180.html">tbb::zero_allocator&lt; void, Allocator &gt;</a>
+</ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/index.html
new file mode 100644 (file)
index 0000000..7625a32
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Main Page</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<h1>Main Page</h1>
+<p>
+Click the tabs above for information about the<ul>
+<li><a href="./modules.html">Modules</a> (groups of functionality) implemented by the library</li><li><a href="./annotated.html">Classes</a> provided by the library</li><li><a href="./files.html">Files</a> constituting the library.</li></ul>
+Please note that significant part of TBB functionality is implemented in the form of template functions, descriptions of which are not accessible on the <a href="./annotated.html">Classes</a> tab. Use <a href="./modules.html">Modules</a> or <a href="./namespacemembers.html">Namespace/Namespace Members</a> tabs to find them.<p>
+Additional pieces of information can be found here<ul>
+<li><a class="el" href="concepts.html">TBB concepts</a></li></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/modules.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/modules.html
new file mode 100644 (file)
index 0000000..3e26ac0
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Module Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li id="current"><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<h1>Modules</h1>Here is a list of all modules:<ul>
+<li><a class="el" href="a00233.html">Algorithms</a>
+<li><a class="el" href="a00234.html">Containers</a>
+<li><a class="el" href="a00235.html">Memory Allocation</a>
+<li><a class="el" href="a00236.html">Synchronization</a>
+<li><a class="el" href="a00237.html">Timing</a>
+<li><a class="el" href="a00238.html">Task Scheduling</a>
+</ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers.html
new file mode 100644 (file)
index 0000000..fe6bc28
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="namespaces.html"><span>Namespace List</span></a></li>
+    <li id="current"><a href="namespacemembers.html"><span>Namespace&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="namespacemembers.html"><span>All</span></a></li>
+    <li><a href="namespacemembers_func.html"><span>Functions</span></a></li>
+    <li><a href="namespacemembers_vars.html"><span>Variables</span></a></li>
+    <li><a href="namespacemembers_type.html"><span>Typedefs</span></a></li>
+    <li><a href="namespacemembers_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="namespacemembers_eval.html"><span>Enumerator</span></a></li>
+  </ul>
+</div>
+Here is a list of all documented namespace members with links to the namespaces they belong to:
+<p>
+<ul>
+<li>__TBB_DECL_ATOMIC_ALT()
+: <a class="el" href="a00229.html#ad165cf61abbe349d413df2589679add">tbb</a><li>__TBB_full_fence
+: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">tbb</a><li>acquire
+: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>assertion_failure()
+: <a class="el" href="a00229.html#3d1252787be39b4aef311f1cadaff9e8">tbb</a><li>assertion_handler_type
+: <a class="el" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">tbb</a><li>ets_key_usage_type
+: <a class="el" href="a00229.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>hash_multiplier
+: <a class="el" href="a00229.html#6902d551186a654ffbf88582d4a0bdfa">tbb</a><li>memory_semantics
+: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fef">tbb</a><li>parallel_do()
+: <a class="el" href="a00233.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
+: <a class="el" href="a00232.html#c2173259899af1fe7751a32139ec3ebf">tbb::strict_ppl</a>, <a class="el" href="a00233.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
+: <a class="el" href="a00233.html#g85a58ff0853f129adb6f9e4355326ccc">tbb</a><li>parallel_invoke()
+: <a class="el" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">tbb</a><li>parallel_reduce()
+: <a class="el" href="a00233.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
+: <a class="el" href="a00233.html#g83716e2b2926c1fc225802aa309fd2bf">tbb</a><li>parallel_sort()
+: <a class="el" href="a00233.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>release
+: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a><li>set_assertion_handler()
+: <a class="el" href="a00229.html#823fa1c15dd829d1d9167157450ddcd9">tbb</a><li>tbb_hasher()
+: <a class="el" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb</a><li>TBB_runtime_interface_version()
+: <a class="el" href="a00229.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_enum.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_enum.html
new file mode 100644 (file)
index 0000000..d6b1f30
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="namespaces.html"><span>Namespace List</span></a></li>
+    <li id="current"><a href="namespacemembers.html"><span>Namespace&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="namespacemembers.html"><span>All</span></a></li>
+    <li><a href="namespacemembers_func.html"><span>Functions</span></a></li>
+    <li><a href="namespacemembers_vars.html"><span>Variables</span></a></li>
+    <li><a href="namespacemembers_type.html"><span>Typedefs</span></a></li>
+    <li id="current"><a href="namespacemembers_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="namespacemembers_eval.html"><span>Enumerator</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>ets_key_usage_type
+: <a class="el" href="a00229.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>memory_semantics
+: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fef">tbb</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_eval.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_eval.html
new file mode 100644 (file)
index 0000000..5037833
--- /dev/null
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="namespaces.html"><span>Namespace List</span></a></li>
+    <li id="current"><a href="namespacemembers.html"><span>Namespace&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="namespacemembers.html"><span>All</span></a></li>
+    <li><a href="namespacemembers_func.html"><span>Functions</span></a></li>
+    <li><a href="namespacemembers_vars.html"><span>Variables</span></a></li>
+    <li><a href="namespacemembers_type.html"><span>Typedefs</span></a></li>
+    <li><a href="namespacemembers_enum.html"><span>Enumerations</span></a></li>
+    <li id="current"><a href="namespacemembers_eval.html"><span>Enumerator</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>__TBB_full_fence
+: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fefc6db01678b1749dff7554688d079520c">tbb</a><li>acquire
+: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>release
+: <a class="el" href="a00229.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_func.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_func.html
new file mode 100644 (file)
index 0000000..ba26724
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="namespaces.html"><span>Namespace List</span></a></li>
+    <li id="current"><a href="namespacemembers.html"><span>Namespace&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="namespacemembers.html"><span>All</span></a></li>
+    <li id="current"><a href="namespacemembers_func.html"><span>Functions</span></a></li>
+    <li><a href="namespacemembers_vars.html"><span>Variables</span></a></li>
+    <li><a href="namespacemembers_type.html"><span>Typedefs</span></a></li>
+    <li><a href="namespacemembers_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="namespacemembers_eval.html"><span>Enumerator</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>__TBB_DECL_ATOMIC_ALT()
+: <a class="el" href="a00229.html#ad165cf61abbe349d413df2589679add">tbb</a><li>assertion_failure()
+: <a class="el" href="a00229.html#3d1252787be39b4aef311f1cadaff9e8">tbb</a><li>parallel_do()
+: <a class="el" href="a00233.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
+: <a class="el" href="a00232.html#c2173259899af1fe7751a32139ec3ebf">tbb::strict_ppl</a>, <a class="el" href="a00233.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
+: <a class="el" href="a00233.html#g85a58ff0853f129adb6f9e4355326ccc">tbb</a><li>parallel_invoke()
+: <a class="el" href="a00233.html#gbaadafdb93d290acec86e07fc8909c29">tbb</a><li>parallel_reduce()
+: <a class="el" href="a00233.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
+: <a class="el" href="a00233.html#g83716e2b2926c1fc225802aa309fd2bf">tbb</a><li>parallel_sort()
+: <a class="el" href="a00233.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>set_assertion_handler()
+: <a class="el" href="a00229.html#823fa1c15dd829d1d9167157450ddcd9">tbb</a><li>tbb_hasher()
+: <a class="el" href="a00229.html#2babc190640003767a3049a4d3c5ee35">tbb</a><li>TBB_runtime_interface_version()
+: <a class="el" href="a00229.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_type.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_type.html
new file mode 100644 (file)
index 0000000..9a8704f
--- /dev/null
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="namespaces.html"><span>Namespace List</span></a></li>
+    <li id="current"><a href="namespacemembers.html"><span>Namespace&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="namespacemembers.html"><span>All</span></a></li>
+    <li><a href="namespacemembers_func.html"><span>Functions</span></a></li>
+    <li><a href="namespacemembers_vars.html"><span>Variables</span></a></li>
+    <li id="current"><a href="namespacemembers_type.html"><span>Typedefs</span></a></li>
+    <li><a href="namespacemembers_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="namespacemembers_eval.html"><span>Enumerator</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>assertion_handler_type
+: <a class="el" href="a00229.html#ed375248ff6019a70ca0f9da528e5d0b">tbb</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_vars.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespacemembers_vars.html
new file mode 100644 (file)
index 0000000..ffb3a55
--- /dev/null
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Class Members</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="namespaces.html"><span>Namespace List</span></a></li>
+    <li id="current"><a href="namespacemembers.html"><span>Namespace&nbsp;Members</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="namespacemembers.html"><span>All</span></a></li>
+    <li><a href="namespacemembers_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="namespacemembers_vars.html"><span>Variables</span></a></li>
+    <li><a href="namespacemembers_type.html"><span>Typedefs</span></a></li>
+    <li><a href="namespacemembers_enum.html"><span>Enumerations</span></a></li>
+    <li><a href="namespacemembers_eval.html"><span>Enumerator</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>hash_multiplier
+: <a class="el" href="a00229.html#6902d551186a654ffbf88582d4a0bdfa">tbb</a></ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespaces.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/namespaces.html
new file mode 100644 (file)
index 0000000..19324a4
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Namespace Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="namespaces.html"><span>Namespace List</span></a></li>
+    <li><a href="namespacemembers.html"><span>Namespace&nbsp;Members</span></a></li>
+  </ul></div>
+<h1>Namespace List</h1>Here is a list of all documented namespaces with brief descriptions:<table>
+  <tr><td class="indexkey"><a class="el" href="a00229.html">tbb</a></td><td class="indexvalue">The namespace tbb contains all components of the library </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00232.html">tbb::strict_ppl</a></td><td class="indexvalue">For internal use only </td></tr>
+</table>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/pages.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/pages.html
new file mode 100644 (file)
index 0000000..c865eb3
--- /dev/null
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Page Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li id="current"><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<h1>Related Pages</h1>Here is a list of all related documentation pages:<ul>
+<li><a class="el" href="parallel_reduce_lambda_req.html">Requirements on parallel_reduce anonymous function objects (lambda functions)</a>
+
+<li><a class="el" href="deprecated.html">Deprecated List</a>
+
+</ul>
+<hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_do_body_req.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_do_body_req.html
new file mode 100644 (file)
index 0000000..c35d5c6
--- /dev/null
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Requirements on parallel_do body</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="index.html">Main Page</a>&nbsp;&raquo&nbsp;<a class="el" href="concepts.html">TBB concepts</a></div>
+<h1><a class="anchor" name="parallel_do_body_req">Requirements on parallel_do body</a></h1>Class <code>Body</code> implementing the concept of parallel_do body must define: -<div class="fragment"><pre class="fragment">        B::operator()( 
+                cv_item_type item,
+                parallel_do_feeder&lt;item_type&gt;&amp; feeder
+        ) <span class="keyword">const</span>
+        
+        OR
+
+        B::operator()( cv_item_type&amp; item ) <span class="keyword">const</span>
+</pre></div> Process item. May be invoked concurrently for the same <code>this</code> but different <code>item</code>.<p>
+-<div class="fragment"><pre class="fragment"> item_type( <span class="keyword">const</span> item_type&amp; ) 
+</pre></div> Copy a work item. -<div class="fragment"><pre class="fragment"> ~item_type() 
+</pre></div> Destroy a work item <hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_for_body_req.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_for_body_req.html
new file mode 100644 (file)
index 0000000..aa57658
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Requirements on parallel_for body</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="index.html">Main Page</a>&nbsp;&raquo&nbsp;<a class="el" href="concepts.html">TBB concepts</a></div>
+<h1><a class="anchor" name="parallel_for_body_req">Requirements on parallel_for body</a></h1>Class <code>Body</code> implementing the concept of parallel_for body must define: -<div class="fragment"><pre class="fragment"> Body::Body( <span class="keyword">const</span> Body&amp; ); 
+</pre></div> Copy constructor -<div class="fragment"><pre class="fragment"> Body::~Body(); 
+</pre></div> Destructor -<div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> Body::operator()( Range&amp; r ) <span class="keyword">const</span>; 
+</pre></div> Function call operator applying the body to range <code>r</code>. <hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_reduce_body_req.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_reduce_body_req.html
new file mode 100644 (file)
index 0000000..32e67c4
--- /dev/null
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Requirements on parallel_reduce body</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="index.html">Main Page</a>&nbsp;&raquo&nbsp;<a class="el" href="concepts.html">TBB concepts</a></div>
+<h1><a class="anchor" name="parallel_reduce_body_req">Requirements on parallel_reduce body</a></h1>Class <code>Body</code> implementing the concept of parallel_reduce body must define: -<div class="fragment"><pre class="fragment"> Body::Body( Body&amp;, split ); 
+</pre></div> Splitting constructor. Must be able to run concurrently with operator() and method <code>join</code> -<div class="fragment"><pre class="fragment"> Body::~Body(); 
+</pre></div> Destructor -<div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> Body::operator()( Range&amp; r ); 
+</pre></div> Function call operator applying body to range <code>r</code> and accumulating the result -<div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> Body::join( Body&amp; b ); 
+</pre></div> Join results. The result in <code>b</code> should be merged into the result of <code>this</code> <hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_reduce_lambda_req.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_reduce_lambda_req.html
new file mode 100644 (file)
index 0000000..d607d03
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Requirements on parallel_reduce anonymous function objects (lambda functions)</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<h1><a class="anchor" name="parallel_reduce_lambda_req">Requirements on parallel_reduce anonymous function objects (lambda functions)</a></h1>TO BE DOCUMENTED <hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_scan_body_req.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_scan_body_req.html
new file mode 100644 (file)
index 0000000..9806d53
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Requirements on parallel_scan body</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="index.html">Main Page</a>&nbsp;&raquo&nbsp;<a class="el" href="concepts.html">TBB concepts</a></div>
+<h1><a class="anchor" name="parallel_scan_body_req">Requirements on parallel_scan body</a></h1>Class <code>Body</code> implementing the concept of parallel_reduce body must define: -<div class="fragment"><pre class="fragment"> Body::Body( Body&amp;, split ); 
+</pre></div> Splitting constructor. Split <code>b</code> so that <code>this</code> and <code>b</code> can accumulate separately -<div class="fragment"><pre class="fragment"> Body::~Body(); 
+</pre></div> Destructor -<div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> Body::operator()( <span class="keyword">const</span> Range&amp; r, pre_scan_tag ); 
+</pre></div> Preprocess iterations for range <code>r</code> -<div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> Body::operator()( <span class="keyword">const</span> Range&amp; r, final_scan_tag ); 
+</pre></div> Do final processing for iterations of range <code>r</code> -<div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> Body::reverse_join( Body&amp; a ); 
+</pre></div> Merge preprocessing state of <code>a</code> into <code>this</code>, where <code>a</code> was created earlier from <code>b</code> by b's splitting constructor <hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_sort_iter_req.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/parallel_sort_iter_req.html
new file mode 100644 (file)
index 0000000..15b4c39
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Requirements on iterators for parallel_sort</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="index.html">Main Page</a>&nbsp;&raquo&nbsp;<a class="el" href="concepts.html">TBB concepts</a></div>
+<h1><a class="anchor" name="parallel_sort_iter_req">Requirements on iterators for parallel_sort</a></h1>Requirements on value type <code>T</code> of <code>RandomAccessIterator</code> for <code>parallel_sort:</code> -<div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> swap( T&amp; x, T&amp; y ) 
+</pre></div> Swaps <code>x</code> and <code>y</code> -<div class="fragment"><pre class="fragment"> <span class="keywordtype">bool</span> Compare::operator()( <span class="keyword">const</span> T&amp; x, <span class="keyword">const</span> T&amp; y ) 
+</pre></div> True if x comes before y; <hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/range_req.html b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/range_req.html
new file mode 100644 (file)
index 0000000..5509280
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Requirements on range concept</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.7 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li><a href="annotated.html"><span>Classes</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+  </ul></div>
+<div class="nav">
+<a class="el" href="index.html">Main Page</a>&nbsp;&raquo&nbsp;<a class="el" href="concepts.html">TBB concepts</a></div>
+<h1><a class="anchor" name="range_req">Requirements on range concept</a></h1>Class <code>R</code> implementing the concept of range must define: -<div class="fragment"><pre class="fragment"> R::R( <span class="keyword">const</span> R&amp; ); 
+</pre></div> Copy constructor -<div class="fragment"><pre class="fragment"> R::~R(); 
+</pre></div> Destructor -<div class="fragment"><pre class="fragment"> <span class="keywordtype">bool</span> R::is_divisible() <span class="keyword">const</span>; 
+</pre></div> True if range can be partitioned into two subranges -<div class="fragment"><pre class="fragment"> <span class="keywordtype">bool</span> R::empty() <span class="keyword">const</span>; 
+</pre></div> True if range is empty -<div class="fragment"><pre class="fragment"> R::R( R&amp; r, split ); 
+</pre></div> Split range <code>r</code> into two subranges. <hr>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tab_b.gif b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tab_b.gif
new file mode 100644 (file)
index 0000000..0d62348
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tab_b.gif differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tab_l.gif b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tab_l.gif
new file mode 100644 (file)
index 0000000..9b1e633
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tab_l.gif differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tab_r.gif b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tab_r.gif
new file mode 100644 (file)
index 0000000..ce9dd9f
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tab_r.gif differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tabs.css b/deal.II/contrib/tbb/tbb22_20090809oss/doc/html/tabs.css
new file mode 100644 (file)
index 0000000..a61552a
--- /dev/null
@@ -0,0 +1,102 @@
+/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
+
+DIV.tabs
+{
+   float            : left;
+   width            : 100%;
+   background       : url("tab_b.gif") repeat-x bottom;
+   margin-bottom    : 4px;
+}
+
+DIV.tabs UL
+{
+   margin           : 0px;
+   padding-left     : 10px;
+   list-style       : none;
+}
+
+DIV.tabs LI, DIV.tabs FORM
+{
+   display          : inline;
+   margin           : 0px;
+   padding          : 0px;
+}
+
+DIV.tabs FORM
+{
+   float            : right;
+}
+
+DIV.tabs A
+{
+   float            : left;
+   background       : url("tab_r.gif") no-repeat right top;
+   border-bottom    : 1px solid #84B0C7;
+   font-size        : x-small;
+   font-weight      : bold;
+   text-decoration  : none;
+}
+
+DIV.tabs A:hover
+{
+   background-position: 100% -150px;
+}
+
+DIV.tabs A:link, DIV.tabs A:visited,
+DIV.tabs A:active, DIV.tabs A:hover
+{
+       color: #1A419D;
+}
+
+DIV.tabs SPAN
+{
+   float            : left;
+   display          : block;
+   background       : url("tab_l.gif") no-repeat left top;
+   padding          : 5px 9px;
+   white-space      : nowrap;
+}
+
+DIV.tabs INPUT
+{
+   float            : right;
+   display          : inline;
+   font-size        : 1em;
+}
+
+DIV.tabs TD
+{
+   font-size        : x-small;
+   font-weight      : bold;
+   text-decoration  : none;
+}
+
+
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+DIV.tabs SPAN {float : none;}
+/* End IE5-Mac hack */
+
+DIV.tabs A:hover SPAN
+{
+   background-position: 0% -150px;
+}
+
+DIV.tabs LI#current A
+{
+   background-position: 100% -150px;
+   border-width     : 0px;
+}
+
+DIV.tabs LI#current SPAN
+{
+   background-position: 0% -150px;
+   padding-bottom   : 6px;
+}
+
+DIV.nav
+{
+   background       : none;
+   border           : none;
+   border-bottom    : 1px solid #84B0C7;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/index.html
new file mode 100644 (file)
index 0000000..d2b252a
--- /dev/null
@@ -0,0 +1,25 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains the examples referenced by the Threading Building Blocks Getting Started Guide. 
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="sub_string_finder/index.html">sub_string_finder</A>
+<DD>Finds largest matching substrings.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/Makefile
new file mode 100644 (file)
index 0000000..34ba0e8
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=sub_string_finder_extended
+ARGS=
+
+# The C++ compiler
+#CXX=g++
+
+all:   release test
+
+release: *.cpp
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp -ltbb $(LIBS)
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp -ltbb $(LIBS)
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp -ltbb $(LIBS)
+
+debug: *.cpp
+       $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp -ltbb_debug $(LIBS)
+       $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp -ltbb_debug $(LIBS)
+       $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp -ltbb_debug $(LIBS)
+
+clean:
+       $(RM) sub_string_finder sub_string_finder_extended sub_string_finder_pretty *.o *.d
+
+test:
+       ./$(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/Makefile.windows
new file mode 100644 (file)
index 0000000..c733958
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs examples.
+PROG=sub_string_finder_extended
+ARGS=
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+release:
+       $(CXX) sub_string_finder.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder.exe
+       $(CXX) sub_string_finder_extended.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_extended.exe
+       $(CXX) sub_string_finder_pretty.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_pretty.exe
+debug:
+       $(CXX) sub_string_finder.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder.exe
+       $(CXX) sub_string_finder_extended.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_extended.exe
+       $(CXX) sub_string_finder_pretty.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_pretty.exe
+clean:
+       @cmd.exe /C del sub_string_finder*.exe *.obj *.?db *.manifest
+test:
+       $(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/index.html
new file mode 100644 (file)
index 0000000..64dd194
--- /dev/null
@@ -0,0 +1,66 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+A simple example that uses the parallel_for template in a substring matching program. For each position 
+in a string, the program displays the length of the largest matching substring elsewhere in the string. 
+The program also displays the location of a largest match for each position.  Consider the string "babba" 
+as an example. Starting at position 0, "ba" is the largest substring with a match elsewhere in the 
+string (position 3). 
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="sub_string_finder.cpp">sub_string_finder.cpp</A>
+<DD>The example as it appears in the Getting Started Guide.
+<DT><A HREF="sub_string_finder_extended.cpp">sub_string_finder_extended.cpp</A>
+<DD>An example similar to the one in the Getting Started Guide, but with an added sequential
+    implementation.  The two implementations are both timed, by using tick_count,
+    and the speedup of the parallel version is calculated and displayed.
+<DT><A HREF="sub_string_finder_pretty.cpp">sub_string_finder_pretty.cpp</A>
+<DD>An example similar to the one in the Getting Started Guide, but with more attractive printing of the results.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>sub_string_finder</TT>
+<DD>Runs the example as it appears in the Getting Started Guide.
+<DT><TT>sub_string_finder_extended</TT>
+<DD>Runs the extended example with the added sequential implementation.
+<DT><TT>sub_string_finder_pretty</TT>
+<DD>Runs the similar example with more attractive printing of the results.
+<DT>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:
+<DD>Build a <I>debug</I> version of the <TT>sub_string_finder_pretty</TT> example
+    (see the <A HREF=../../index.html#build>build directions</A>).
+    <BR>Run it, e.g., <TT>sub_string_finder_pretty</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp
new file mode 100644 (file)
index 0000000..674abf6
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <iostream>
+#include <string>
+#include <algorithm>
+
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+
+using namespace tbb;
+using namespace std;
+
+static const size_t N = 23;
+
+class SubStringFinder {
+ const string str;
+ size_t *max_array;
+ size_t *pos_array;
+ public:
+ void operator() ( const blocked_range<size_t>& r ) const {
+  for ( size_t i = r.begin(); i != r.end(); ++i ) {
+   size_t max_size = 0, max_pos = 0;
+   for (size_t j = 0; j < str.size(); ++j) 
+    if (j != i) {
+     size_t limit = str.size()-( i > j ? i : j );
+     for (size_t k = 0; k < limit; ++k) {
+      if (str[i + k] != str[j + k]) break;
+      if (k > max_size) {
+       max_size = k;
+       max_pos = j;
+      }
+     }
+    }
+   max_array[i] = max_size;
+   pos_array[i] = max_pos;
+  }
+ }
+ SubStringFinder(string &s, size_t *m, size_t *p) : 
+  str(s), max_array(m), pos_array(p) { }
+};
+
+int main(int argc, char *argv[]) {
+
+ string str[N] = { string("a"), string("b") };
+ for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
+ string &to_scan = str[N-1]; 
+
+ size_t *max = new size_t[to_scan.size()];
+ size_t *pos = new size_t[to_scan.size()];
+
+ parallel_for(blocked_range<size_t>(0, to_scan.size(), 100),
+       SubStringFinder( to_scan, max, pos ) );
+
+ for (size_t i = 0; i < to_scan.size(); ++i)
+  cout << " " << (int)max[i] << "(" << (int)pos[i] << ")" << endl;
+ delete[] max;
+ delete[] pos;
+ return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp
new file mode 100644 (file)
index 0000000..d52f629
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <iostream>
+#include <string>
+#include <algorithm>
+
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+#include "tbb/tick_count.h"
+
+using namespace tbb;
+using namespace std;
+static const size_t N = 22;
+
+void SerialSubStringFinder ( const string &str, size_t *max_array, size_t *pos_array) {
+ for ( size_t i = 0; i < str.size(); ++i ) {
+   size_t max_size = 0, max_pos = 0;
+   for (size_t j = 0; j < str.size(); ++j)
+    if (j != i) {
+     size_t limit = str.size()-( i > j ? i : j );
+     for (size_t k = 0; k < limit; ++k) {
+      if (str[i + k] != str[j + k]) break;
+      if (k > max_size) {
+       max_size = k;
+       max_pos = j;
+      }
+     }
+    }
+   max_array[i] = max_size;
+   pos_array[i] = max_pos;
+  }
+}
+
+class SubStringFinder {
+ const string str;
+ size_t *max_array;
+ size_t *pos_array;
+ public:
+ void operator() ( const blocked_range<size_t>& r ) const {
+  for ( size_t i = r.begin(); i != r.end(); ++i ) {
+   size_t max_size = 0, max_pos = 0;
+   for (size_t j = 0; j < str.size(); ++j) 
+    if (j != i) {
+     size_t limit = str.size()-( i > j ? i : j );
+     for (size_t k = 0; k < limit; ++k) {
+      if (str[i + k] != str[j + k]) break;
+      if (k > max_size) {
+       max_size = k;
+       max_pos = j;
+      }
+     }
+    }
+   max_array[i] = max_size;
+   pos_array[i] = max_pos;
+  }
+ }
+ SubStringFinder(string &s, size_t *m, size_t *p) : 
+  str(s), max_array(m), pos_array(p) { }
+};
+
+int main(int argc, char *argv[]) {
+
+ string str[N] = { string("a"), string("b") };
+ for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
+ string &to_scan = str[N-1]; 
+
+ size_t *max = new size_t[to_scan.size()];
+ size_t *max2 = new size_t[to_scan.size()];
+ size_t *pos = new size_t[to_scan.size()];
+ size_t *pos2 = new size_t[to_scan.size()];
+ cout << " Done building string." << endl;
+
+ tick_count serial_t0 = tick_count::now();
+ SerialSubStringFinder(to_scan, max2, pos2);
+ tick_count serial_t1 = tick_count::now();
+ cout << " Done with serial version." << endl;
+
+ tick_count parallel_t0 = tick_count::now();
+ parallel_for(blocked_range<size_t>(0, to_scan.size(), 100),
+       SubStringFinder( to_scan, max, pos ) );
+ tick_count parallel_t1 = tick_count::now();
+ cout << " Done with parallel version." << endl;
+
+ for (size_t i = 0; i < to_scan.size(); ++i) {
+   if (max[i] != max2[i] || pos[i] != pos2[i]) {
+     cout << "ERROR: Serial and Parallel Results are Different!" << endl;
+   }
+ }
+ cout << " Done validating results." << endl;
+
+ cout << "Serial version ran in " << (serial_t1 - serial_t0).seconds() << " seconds" << endl
+           << "Parallel version ran in " <<  (parallel_t1 - parallel_t0).seconds() << " seconds" << endl
+           << "Resulting in a speedup of " << (serial_t1 - serial_t0).seconds() / (parallel_t1 - parallel_t0).seconds() << endl;
+ delete[] max;
+ delete[] pos;
+ delete[] max2;
+ delete[] pos2;
+ return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp
new file mode 100644 (file)
index 0000000..67f649f
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <iostream>
+#include <string>
+#include <algorithm>
+
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+
+using namespace tbb;
+static const size_t N = 9;
+
+class SubStringFinder {
+ const std::string str;
+ size_t *max_array;
+ size_t *pos_array;
+ public:
+ void operator() ( const blocked_range<size_t>& r ) const {
+  for ( size_t i = r.begin(); i != r.end(); ++i ) {
+   size_t max_size = 0, max_pos = 0;
+   for (size_t j = 0; j < str.size(); ++j) 
+    if (j != i) {
+     size_t limit = str.size()-( i > j ? i : j );
+     for (size_t k = 0; k < limit; ++k) {
+      if (str[i + k] != str[j + k]) break;
+      if (k+1 > max_size) {
+       max_size = k+1;
+       max_pos = j;
+      }
+     }
+    }
+   max_array[i] = max_size;
+   pos_array[i] = max_pos;
+  }
+ }
+ SubStringFinder(std::string &s, size_t *m, size_t *p) :
+  str(s), max_array(m), pos_array(p) { }
+};
+
+int main(int argc, char *argv[]) {
+
+ std::string str[N] = { std::string("a"), std::string("b") };
+ for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
+ std::string &to_scan = str[N-1]; 
+ std::cout << "String to scan: " << to_scan << std::endl;
+
+ size_t *max = new size_t[to_scan.size()];
+ size_t *pos = new size_t[to_scan.size()];
+
+ parallel_for(blocked_range<size_t>(0, to_scan.size(), 100),
+       SubStringFinder( to_scan, max, pos ) );
+
+ for (size_t i = 0; i < to_scan.size(); ++i) {
+   for (size_t j = 0; j < to_scan.size(); ++j) {
+     if (j >= i && j < i + max[i]) std::cout << "_";
+     else std::cout << " ";
+   } 
+   std::cout << std::endl << to_scan << std::endl;
+
+   for (size_t j = 0; j < to_scan.size(); ++j) {
+     if (j >= pos[i] && j < pos[i] + max[i]) std::cout << "*";
+     else std::cout << " ";
+   }
+   std::cout << std::endl;
+ }
+ delete[] max;
+ delete[] pos;
+ return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.sln
new file mode 100644 (file)
index 0000000..8d55e19
--- /dev/null
@@ -0,0 +1,40 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder", "sub_string_finder.vcproj", "{C64078BC-8A63-4C3D-B48D-ECC2B60E75E6}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_pretty", "sub_string_finder_pretty.vcproj", "{8DCA120F-7D8C-4D43-A939-9403F03D3F45}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_extended", "sub_string_finder_extended.vcproj", "{2607C858-EE23-429D-BCCC-D89D2A5EDFFE}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               Debug = Debug
+               Release = Release
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {C64078BC-8A63-4C3D-B48D-ECC2B60E75E6}.Debug.ActiveCfg = Debug|Win32
+               {C64078BC-8A63-4C3D-B48D-ECC2B60E75E6}.Debug.Build.0 = Debug|Win32
+               {C64078BC-8A63-4C3D-B48D-ECC2B60E75E6}.Release.ActiveCfg = Release|Win32
+               {C64078BC-8A63-4C3D-B48D-ECC2B60E75E6}.Release.Build.0 = Release|Win32
+               {8DCA120F-7D8C-4D43-A939-9403F03D3F45}.Debug.ActiveCfg = Debug|Win32
+               {8DCA120F-7D8C-4D43-A939-9403F03D3F45}.Debug.Build.0 = Debug|Win32
+               {8DCA120F-7D8C-4D43-A939-9403F03D3F45}.Release.ActiveCfg = Release|Win32
+               {8DCA120F-7D8C-4D43-A939-9403F03D3F45}.Release.Build.0 = Release|Win32
+               {2607C858-EE23-429D-BCCC-D89D2A5EDFFE}.Debug.ActiveCfg = Debug|Win32
+               {2607C858-EE23-429D-BCCC-D89D2A5EDFFE}.Debug.Build.0 = Debug|Win32
+               {2607C858-EE23-429D-BCCC-D89D2A5EDFFE}.Release.ActiveCfg = Release|Win32
+               {2607C858-EE23-429D-BCCC-D89D2A5EDFFE}.Release.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(SolutionItems) = postSolution
+               ..\index.html = ..\index.html
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.suo
new file mode 100644 (file)
index 0000000..47fb326
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.vcproj
new file mode 100644 (file)
index 0000000..f63add3
--- /dev/null
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="sub_string_finder"
+       ProjectGUID="{C64078BC-8A63-4C3D-B48D-ECC2B60E75E6}"
+       RootNamespace="sub_string_finder"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\sub_string_finder.cpp">
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_extended.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_extended.vcproj
new file mode 100644 (file)
index 0000000..176e625
--- /dev/null
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="sub_string_finder_extended"
+       ProjectGUID="{2607C858-EE23-429D-BCCC-D89D2A5EDFFE}"
+       RootNamespace="sub_string_finder_extended"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\sub_string_finder_extended.cpp">
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_pretty.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_pretty.vcproj
new file mode 100644 (file)
index 0000000..80e8d09
--- /dev/null
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="sub_string_finder_pretty"
+       ProjectGUID="{8DCA120F-7D8C-4D43-A939-9403F03D3F45}"
+       RootNamespace="sub_string_finder_pretty"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\sub_string_finder_pretty.cpp">
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.sln
new file mode 100644 (file)
index 0000000..fc96ac1
--- /dev/null
@@ -0,0 +1,50 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder", "sub_string_finder.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A2525}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_extended", "sub_string_finder_extended.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A2526}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_pretty", "sub_string_finder_pretty.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A2524}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A26B588D-97F7-4466-9672-8A7E3173FBA1}"
+       ProjectSection(SolutionItems) = preProject
+               ..\index.html = ..\index.html
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.Build.0 = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.Build.0 = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.suo
new file mode 100644 (file)
index 0000000..9ad071b
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.vcproj
new file mode 100644 (file)
index 0000000..325ad09
--- /dev/null
@@ -0,0 +1,352 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="sub_string_finder"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2525}"
+       RootNamespace="sub_string_finder"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\sub_string_finder.cpp"
+                               >
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_extended.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_extended.vcproj
new file mode 100644 (file)
index 0000000..91702f4
--- /dev/null
@@ -0,0 +1,352 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="sub_string_finder_extended"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2526}"
+       RootNamespace="sub_string_finder_extended"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\sub_string_finder_extended.cpp"
+                               >
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_pretty.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_pretty.vcproj
new file mode 100644 (file)
index 0000000..8588144
--- /dev/null
@@ -0,0 +1,352 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="sub_string_finder_pretty"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2524}"
+       RootNamespace="sub_string_finder_pretty"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\sub_string_finder_pretty.cpp"
+                               >
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.sln
new file mode 100644 (file)
index 0000000..f8aec9b
--- /dev/null
@@ -0,0 +1,50 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A26B588D-97F7-4466-9672-8A7E3173FBA1}"
+       ProjectSection(SolutionItems) = preProject
+               ..\index.html = ..\index.html
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder", "sub_string_finder.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A2525}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_extended", "sub_string_finder_extended.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A2526}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_pretty", "sub_string_finder_pretty.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A2524}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.Build.0 = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.Build.0 = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.suo
new file mode 100644 (file)
index 0000000..dd4f01e
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.vcproj
new file mode 100644 (file)
index 0000000..bf46161
--- /dev/null
@@ -0,0 +1,349 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="sub_string_finder"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2525}"
+       RootNamespace="sub_string_finder"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\sub_string_finder.cpp"
+                               >
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_extended.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_extended.vcproj
new file mode 100644 (file)
index 0000000..30fea84
--- /dev/null
@@ -0,0 +1,349 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="sub_string_finder_extended"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2526}"
+       RootNamespace="sub_string_finder_extended"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\sub_string_finder_extended.cpp"
+                               >
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_pretty.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_pretty.vcproj
new file mode 100644 (file)
index 0000000..e6d9177
--- /dev/null
@@ -0,0 +1,349 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="sub_string_finder_pretty"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2524}"
+       RootNamespace="sub_string_finder_pretty"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\sub_string_finder_pretty.cpp"
+                               >
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..7a384bc
--- /dev/null
@@ -0,0 +1,566 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 42;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               A1F593A60B8F042A00073279 /* sub_string_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* sub_string_finder.cpp */; };
+               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F594120B8F1E0C00073279 /* sub_string_finder_pretty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */; };
+               A1F594130B8F1E1700073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F594160B8F1E8000073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F594240B8F1F5F00073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F594250B8F1F6800073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F594270B8F1F8100073279 /* sub_string_finder_extended.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F594260B8F1F8100073279 /* sub_string_finder_extended.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+               8DD76F690486A84900D96B5E /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 12;
+                       dstPath = "";
+                       dstSubfolderSpec = 16;
+                       files = (
+                               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               A1F594140B8F1E2D00073279 /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = "";
+                       dstSubfolderSpec = 16;
+                       files = (
+                               A1F594160B8F1E8000073279 /* libtbb.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               A1F5941D0B8F1F2D00073279 /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = "";
+                       dstSubfolderSpec = 16;
+                       files = (
+                               A1F594250B8F1F6800073279 /* libtbb.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+               8DD76F6C0486A84900D96B5E /* sub_string_finder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder; sourceTree = BUILT_PRODUCTS_DIR; };
+               A1F593A50B8F042A00073279 /* sub_string_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder.cpp; path = ../sub_string_finder.cpp; sourceTree = SOURCE_ROOT; };
+               A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+               A1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder_pretty; sourceTree = BUILT_PRODUCTS_DIR; };
+               A1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder_pretty.cpp; path = ../sub_string_finder_pretty.cpp; sourceTree = SOURCE_ROOT; };
+               A1F5941B0B8F1F0900073279 /* sub_string_finder_extended */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder_extended; sourceTree = BUILT_PRODUCTS_DIR; };
+               A1F594260B8F1F8100073279 /* sub_string_finder_extended.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder_extended.cpp; path = ../sub_string_finder_extended.cpp; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               8DD76F660486A84900D96B5E /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               A1F594080B8F1D8E00073279 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F594130B8F1E1700073279 /* libtbb.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               A1F594190B8F1F0900073279 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F594240B8F1F5F00073279 /* libtbb.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               08FB7794FE84155DC02AAC07 /* sub_string_finder */ = {
+                       isa = PBXGroup;
+                       children = (
+                               08FB7795FE84155DC02AAC07 /* Source */,
+                               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+                               1AB674ADFE9D54B511CA2CBB /* Products */,
+                       );
+                       name = sub_string_finder;
+                       sourceTree = "<group>";
+               };
+               08FB7795FE84155DC02AAC07 /* Source */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F594260B8F1F8100073279 /* sub_string_finder_extended.cpp */,
+                               A1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */,
+                               A1F593A50B8F042A00073279 /* sub_string_finder.cpp */,
+                       );
+                       name = Source;
+                       sourceTree = "<group>";
+               };
+               1AB674ADFE9D54B511CA2CBB /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               8DD76F6C0486A84900D96B5E /* sub_string_finder */,
+                               A1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */,
+                               A1F5941B0B8F1F0900073279 /* sub_string_finder_extended */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F593B30B8F06F900073279 /* libtbb.dylib */,
+                       );
+                       name = "External Frameworks and Libraries";
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+               8DD76F620486A84900D96B5E /* sub_string_finder */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "sub_string_finder" */;
+                       buildPhases = (
+                               8DD76F640486A84900D96B5E /* Sources */,
+                               8DD76F660486A84900D96B5E /* Frameworks */,
+                               8DD76F690486A84900D96B5E /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = sub_string_finder;
+                       productInstallPath = "$(HOME)/bin";
+                       productName = sub_string_finder;
+                       productReference = 8DD76F6C0486A84900D96B5E /* sub_string_finder */;
+                       productType = "com.apple.product-type.tool";
+               };
+               A1F594090B8F1D8E00073279 /* sub_string_finder_pretty */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = A1F5940C0B8F1DB600073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_pretty" */;
+                       buildPhases = (
+                               A1F594070B8F1D8E00073279 /* Sources */,
+                               A1F594080B8F1D8E00073279 /* Frameworks */,
+                               A1F594140B8F1E2D00073279 /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = sub_string_finder_pretty;
+                       productName = sub_string_finder_pretty;
+                       productReference = A1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */;
+                       productType = "com.apple.product-type.tool";
+               };
+               A1F5941A0B8F1F0900073279 /* sub_string_finder_extended */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = A1F5941F0B8F1F4E00073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_extended" */;
+                       buildPhases = (
+                               A1F594180B8F1F0900073279 /* Sources */,
+                               A1F594190B8F1F0900073279 /* Frameworks */,
+                               A1F5941D0B8F1F2D00073279 /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = sub_string_finder_extended;
+                       productName = sub_string_finder_extended;
+                       productReference = A1F5941B0B8F1F0900073279 /* sub_string_finder_extended */;
+                       productType = "com.apple.product-type.tool";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               08FB7793FE84155DC02AAC07 /* Project object */ = {
+                       isa = PBXProject;
+                       buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "sub_string_finder" */;
+                       hasScannedForEncodings = 1;
+                       mainGroup = 08FB7794FE84155DC02AAC07 /* sub_string_finder */;
+                       projectDirPath = "";
+                       targets = (
+                               A1F5941A0B8F1F0900073279 /* sub_string_finder_extended */,
+                               A1F594090B8F1D8E00073279 /* sub_string_finder_pretty */,
+                               8DD76F620486A84900D96B5E /* sub_string_finder */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+               8DD76F640486A84900D96B5E /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593A60B8F042A00073279 /* sub_string_finder.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               A1F594070B8F1D8E00073279 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F594120B8F1E0C00073279 /* sub_string_finder_pretty.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               A1F594180B8F1F0900073279 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F594270B8F1F8100073279 /* sub_string_finder_extended.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+               1DEB923208733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = sub_string_finder;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug;
+               };
+               1DEB923308733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = sub_string_finder;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               1DEB923608733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug;
+               };
+               1DEB923708733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release;
+               };
+               A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = sub_string_finder;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug64;
+               };
+               A1F593C70B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = sub_string_finder;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release64;
+               };
+               A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug64;
+               };
+               A1F593C90B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release64;
+               };
+               A1F5940D0B8F1DB600073279 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = sub_string_finder_pretty;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug;
+               };
+               A1F5940E0B8F1DB600073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = sub_string_finder_pretty;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug64;
+               };
+               A1F5940F0B8F1DB600073279 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = YES;
+                               GCC_ENABLE_FIX_AND_CONTINUE = NO;
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = sub_string_finder_pretty;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               A1F594100B8F1DB600073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = sub_string_finder_pretty;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release64;
+               };
+               A1F594200B8F1F4E00073279 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = sub_string_finder_extended;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug;
+               };
+               A1F594210B8F1F4E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = sub_string_finder_extended;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug64;
+               };
+               A1F594220B8F1F4E00073279 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = YES;
+                               GCC_ENABLE_FIX_AND_CONTINUE = NO;
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = sub_string_finder_extended;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               A1F594230B8F1F4E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = sub_string_finder_extended;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release64;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "sub_string_finder" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923208733DC60010E9CD /* Debug */,
+                               A1F593C60B8F0E6E00073279 /* Debug64 */,
+                               1DEB923308733DC60010E9CD /* Release */,
+                               A1F593C70B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "sub_string_finder" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923608733DC60010E9CD /* Debug */,
+                               A1F593C80B8F0E6E00073279 /* Debug64 */,
+                               1DEB923708733DC60010E9CD /* Release */,
+                               A1F593C90B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               A1F5940C0B8F1DB600073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_pretty" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               A1F5940D0B8F1DB600073279 /* Debug */,
+                               A1F5940E0B8F1DB600073279 /* Debug64 */,
+                               A1F5940F0B8F1DB600073279 /* Release */,
+                               A1F594100B8F1DB600073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               A1F5941F0B8F1F4E00073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_extended" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               A1F594200B8F1F4E00073279 /* Debug */,
+                               A1F594210B8F1F4E00073279 /* Debug64 */,
+                               A1F594220B8F1F4E00073279 /* Release */,
+                               A1F594230B8F1F4E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/Makefile
new file mode 100644 (file)
index 0000000..c6368c7
--- /dev/null
@@ -0,0 +1,143 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# This file should be always located and called in $(tbb_root)/examples
+
+# Usage:
+#   make [all] [clean] [release] [debug] [test]
+#      executes specified targets for all examples.
+#   make {example's dir}/{target}
+#      calls specified example with specified target.
+#      For instance: make task/tree_sum/all
+
+tbb_root?=..
+BUILDING_PHASE:=0
+include ../build/common.inc
+
+#check, if tbb_root is not absolute path (the filter keeps only /* paths)
+ifeq ($(filter /% $(SLASH)%, $(subst :, ,$(tbb_root)) ),)
+    # also changes related variables like work_dir
+    override tbb_root := $(CWD)$(SLASH)..
+    export TBB22_INSTALL_DIR := $(tbb_root)
+endif
+
+ifeq ($(tbb_os),windows)
+    ifeq ($(compiler),gcc)
+        EXAMPLE_MAKEFILE = Makefile
+        EXAMPLES = $(wildcard */*/$(EXAMPLE_MAKEFILE))
+        export CPATH := $(CPATH);$(tbb_root)/include
+        export LIBRARY_PATH := $(LIBRARY_PATH);$(work_dir)_release;$(work_dir)_debug
+        export CXXFLAGS += -Wl,--enable-auto-import
+        export RM = cmd /C del /Q /F
+    else
+        EXAMPLE_MAKEFILE = Makefile.windows
+        EXAMPLES = $(wildcard */*/$(EXAMPLE_MAKEFILE))
+        EXAMPLE_MAKEFILE := $(if $(EXAMPLES),Makefile.windows,Makefile)
+        export INCLUDE := $(tbb_root)$(SLASH)include;$(INCLUDE)
+        export LIB := $(work_dir)_release;$(work_dir)_debug;$(LIB)
+    endif
+    work_dir := $(subst /,$(SLASH),$(work_dir))
+    export PATH := $(work_dir)_release;$(work_dir)_debug;$(PATH)
+    export TBB_ARCH_PLATFORM = $(arch)\$(runtime)
+else
+    EXAMPLE_MAKEFILE = Makefile
+    EXAMPLES := $(wildcard */*/$(EXAMPLE_MAKEFILE))
+    # platform-specific settings
+    ifeq ($(arch),ia64)
+        override CXXFLAGS += $(PIC_KEY)
+    endif
+    ifeq ($(compiler),gcc)
+        ifeq ($(arch),intel64)
+            override CXXFLAGS += -m64
+        endif
+        ifeq ($(arch),ia32)
+            override CXXFLAGS += -m32
+        endif
+        ifeq ($(arch),ppc64)
+            override CXXFLAGS += -m64
+        endif
+        ifeq ($(arch),ppc32)
+            override CXXFLAGS += -m32
+        endif
+        ifeq ($(arch),sparc)
+            override CXXFLAGS += -mcpu=v9 -m64
+        endif
+    endif
+    ifeq ($(compiler),suncc)
+        override CXXFLAGS += -I$(tbb_root)$(SLASH)include -library=stlport4 -M$(tbb_root)/build/suncc.map.pause
+        ifeq ($(arch),intel64)
+            override CXXFLAGS += -m64
+        endif
+        ifeq ($(arch),ia32)
+            override CXXFLAGS += -m32
+        endif
+        ifeq ($(arch),sparc)
+            override CXXFLAGS += -m64
+        endif
+    endif
+    ifeq ($(tbb_os),macos)
+        # GUI for examples does not support 64-bit platforms
+        ifeq ($(arch),intel64)
+            export UI=con
+        endif
+        ifeq ($(arch),ppc64)
+            export UI=con
+        endif
+        export DYLD_LIBRARY_PATH := $(DYLD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
+    else
+        export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
+    endif
+    export LIBS
+    export LIBRARY_PATH := $(LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
+    export CPATH := $(CPATH):$(tbb_root)/include
+endif
+
+COMMON_TARGETS := all clean release debug test
+# list of directories of examples
+EXAMPLES_DIRS := $(foreach T,$(EXAMPLES),$(dir $(T)))
+# targets to explicitly call example have format: {example's dir}/{example's target}
+EXAMPLES_TARGETS := $(foreach T,$(COMMON_TARGETS),$(addsuffix $(T),$(EXAMPLES_DIRS)))
+
+.PHONY: $(COMMON_TARGETS) $(EXAMPLES_TARGETS)
+
+.DEFAULT: all
+
+# execute standard targets for all examples
+$(COMMON_TARGETS):: % : $(addsuffix %,$(EXAMPLES_DIRS))
+
+# proxy rule for calling appropriate example
+$(EXAMPLES_TARGETS)::
+       -$(MAKE) -C $(@D)  -f $(EXAMPLE_MAKEFILE) $(notdir $@) CXX="$(CPLUS)" CXXFLAGS="$(CXXFLAGS)"
+
+printenv:
+ifeq ($(tbb_os),windows)
+       @cmd /C set PATH
+       @cmd /C set LIB
+       @cmd /C set INCLUDE
+else
+       @env | grep PATH
+endif
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/Makefile.gmake b/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/Makefile.gmake
new file mode 100644 (file)
index 0000000..07d470d
--- /dev/null
@@ -0,0 +1,83 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# The C++ compiler
+#CXX=g++
+
+# detecting MS Windows (for MinGW support)
+ifeq ($(OS), Windows_NT)
+RM = cmd /C del /Q /F
+RD = cmd /C rmdir
+UI = con
+EXE = $(NAME)$(SUFFIX).exe
+
+else
+RM = rm -f
+RD = rmdir -r
+# detecting x64
+ifeq ($(shell uname -m),x86_64)
+x64 ?= 64
+endif
+# detecting UI ("mac", "x" or "con")
+ifeq ($(shell uname),Darwin)
+UI ?= mac
+else
+UI ?= $(shell sh -c "[ -f /usr/X11R6/lib$(x64)/libX11.so -o -f /usr/lib$(x64)/libX11.so ] && echo x || echo con")
+endif
+
+ifeq ($(UI),x)
+EXE = $(NAME)$(SUFFIX)
+CXXFLAGS += -I/usr/X11R6/include
+LIBS += -lpthread -L/usr/X11R6/lib$(x64) -lX11
+# detect if libXext can be found
+ifeq ($(shell sh -c "[ -f /usr/X11R6/lib$(x64)/libXext.so -o -f /usr/lib$(x64)/libXext.so ] && echo 0"),0)
+LIBS += -lXext
+else  # no libXext
+CXXFLAGS += -DX_NOSHMEM
+endif # libXext
+
+else # ! X
+ifeq ($(UI),mac)
+TBBLIBSPATH ?= /Library/Frameworks/TBB.framework/Libraries
+CXXFLAGS += -arch i386 -mmacosx-version-min=10.4 -msse3 -ftree-vectorize
+LIBS += -framework OpenGL -framework AGL -framework Carbon -L$(TBBLIBSPATH)
+APPRES = $(NAME)$(SUFFIX).app/Contents/Resources
+EXE = $(NAME)$(SUFFIX).app/Contents/MacOS/$(NAME)$(SUFFIX)
+ifneq (,$(shell xcode-select -print-path 2>/dev/null))
+PBXCP = $(shell xcode-select -print-path)/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp
+else
+# look in /System and /Developer
+PBXCP = $(wildcard /[SD]*/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp)
+endif
+PBXCP +=  -resolve-src-symlinks -exclude .DS_Store -exclude CVS -exclude .svn
+
+else # ! Mac
+UI = con
+EXE = $(NAME)$(SUFFIX)
+
+endif # Mac
+endif # X
+endif # Windows vs. other
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/Makefile.win b/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/Makefile.win
new file mode 100644 (file)
index 0000000..894c71e
--- /dev/null
@@ -0,0 +1,79 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Per-build Makefile rules (for recursive $(MAKE) calls from Makefile)
+
+# Base compile/link options
+MYCXXFLAGS = /nologo $(TBB_SECURITY_SWITCH) /EHsc /Zc:forScope /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
+MYLFLAGS = /link /incremental:no /fixed:no $(LFLAGS)
+CXXFLAGS_NDEBUG = /MD /O2 /Oy /Ot /Gy /D NDEBUG
+CXXFLAGS_DEBUG = /MDd /Od /Zi /D _DEBUG
+
+# Specify library directory for Direct X SDK
+DDLIB_DIR=$(DXSDK_DIR)\lib\$(XARCH:AMD64=x64)
+
+# Input and output files
+#SOURCE = v
+#RCNAME = specified externaly
+#EXE =    ^
+# defaults on XARCH = x86
+UISRC = ../../common/gui/$(UI)video.cpp
+
+default:
+
+build_echo:
+       -@echo Building$(DEBUG) $(EXE) with UI=$(UI) XARCH=$(XARCH)
+
+build_one:     build_echo build_$(UI)$(DEBUG)
+
+build_con: $(SOURCE) $(UISRC)
+       $(CXX) $(CXXFLAGS_NDEBUG) $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) /subsystem:console /OUT:$(EXE)
+       @cmd.exe /C del *.obj
+
+build_con_debug: $(SOURCE) $(UISRC)
+       $(CXX) $(CXXFLAGS_DEBUG) $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) /debug /subsystem:console /OUT:$(EXE)
+       @cmd.exe /C del *.obj
+
+build_gdi: $(SOURCE) $(UISRC) vc7.1/$(RCNAME).res
+       $(CXX) $(CXXFLAGS_NDEBUG) /D _WINDOWS $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) vc7.1/$(RCNAME).res /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)
+       @cmd.exe /C del *.obj
+
+build_gdi_debug: $(SOURCE) $(UISRC) vc7.1/$(RCNAME).res
+       $(CXX) $(CXXFLAGS_DEBUG) /D _WINDOWS $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) vc7.1/$(RCNAME).res /debug /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)
+       @cmd.exe /C del *.obj
+
+build_dd: $(SOURCE) $(UISRC) vc7.1/$(RCNAME).res
+       -@echo Using DirectX SDK from "$(DDLIB_DIR)"
+       $(CXX) $(CXXFLAGS_NDEBUG) /D _WINDOWS $(MYCXXFLAGS) /I "$(DXSDK_DIR)\include" $(SOURCE) $(UISRC) $(MYLFLAGS) /LIBPATH:"$(DDLIB_DIR)" vc7.1/$(RCNAME).res /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)
+       @cmd.exe /C del *.obj
+
+build_dd_debug: $(SOURCE) $(UISRC) vc7.1/$(RCNAME).res
+       -@echo Using DirectX SDK from "$(DDLIB_DIR)"
+       $(CXX) $(CXXFLAGS_DEBUG) /D _WINDOWS $(MYCXXFLAGS) /I "$(DXSDK_DIR)\include" $(SOURCE) $(UISRC) $(MYLFLAGS) /LIBPATH:"$(DDLIB_DIR)" vc7.1/$(RCNAME).res /debug /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)
+       @cmd.exe /C del *.obj
+
+vc7.1/$(RCNAME).res:
+       rc /r vc7.1/$(RCNAME)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/convideo.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/convideo.cpp
new file mode 100644 (file)
index 0000000..93fd708
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "video.h"
+#include <cassert>
+#include <stdio.h>
+
+unsigned int *              g_pImg = 0;
+int                         g_sizex, g_sizey;
+static video *g_video = 0;
+static int g_fps = 0;
+
+#if _WIN32 || _WIN64
+
+static DWORD g_msec = 0;
+#ifdef _WINDOWS
+HINSTANCE video::win_hInstance = 0;
+int video::win_iCmdShow = 0;
+void video::win_set_class(WNDCLASSEX &wcex) { }
+void video::win_load_accelerators(int idc)  { }
+#endif //_WINDOWS
+
+#else
+
+#include <sched.h>
+#include <sys/time.h>
+struct timeval g_time;
+
+#endif //_WIN32||_WIN64
+
+video::video()
+    : red_mask(0xff0000), red_shift(16), green_mask(0xff00),
+      green_shift(8), blue_mask(0xff), blue_shift(0), depth(24)
+{
+    assert(g_video == 0);
+    g_video = this; title = "Video"; updating = calc_fps = false;
+}
+
+bool video::init_window(int x, int y)
+{
+    g_sizex = x; g_sizey = y;
+    g_pImg = new unsigned int[x*y];
+    running = true;
+    return false;
+}
+
+bool video::init_console()
+{
+    running = true;
+    return true;
+}
+
+void video::terminate()
+{
+    if(calc_fps) {
+        double fps = g_fps;
+#if _WIN32 || _WIN64
+        fps /= (GetTickCount()-g_msec)/1000.0;
+#else
+        struct timezone tz; struct timeval end_time; gettimeofday(&end_time, &tz);
+        fps /= (end_time.tv_sec+1.0*end_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);
+#endif
+        printf("%s: %.1f fps\n", title, fps);
+       }
+    g_video = 0; running = false;
+    if(g_pImg) { delete[] g_pImg; g_pImg = 0; }
+}
+
+video::~video()
+{
+    if(g_video) terminate();
+}
+
+//! Count and display FPS count in titlebar
+bool video::next_frame()
+{
+    if(calc_fps){
+           if(!g_fps) {
+#if _WIN32 || _WIN64
+            g_msec = GetTickCount();
+#else
+            struct timezone tz; gettimeofday(&g_time, &tz);
+#endif
+           }
+        g_fps++;
+    }
+    return running;
+}
+
+//! Do standard loop
+void video::main_loop()
+{
+    on_process();
+}
+
+//! Change window title
+void video::show_title()
+{
+}
+
+///////////////////////////////////////////// public methods of video class ///////////////////////
+
+drawing_area::drawing_area(int x, int y, int sizex, int sizey)
+    : start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(24),
+    base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+{
+    assert(x < g_sizex); assert(y < g_sizey);
+    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
+
+    index = base_index; // current index
+}
+
+drawing_area::~drawing_area() {}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/ddvideo.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/ddvideo.cpp
new file mode 100644 (file)
index 0000000..4e1a28f
--- /dev/null
@@ -0,0 +1,580 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// common Windows parts
+#include "winvideo.h"
+// and another headers
+#include <cassert>
+#include <stdio.h>
+#include <ddraw.h>
+
+#pragma comment(lib, "ddraw.lib")
+#pragma comment(lib, "dxguid.lib")
+
+LPDIRECTDRAW7               g_pDD = NULL;        // DirectDraw object
+LPDIRECTDRAWSURFACE7        g_pDDSPrimary = NULL;// DirectDraw primary surface
+LPDIRECTDRAWSURFACE7        g_pDDSBack = NULL;   // DirectDraw back surface
+LPDIRECTDRAWSURFACE7        g_pDDSOverlay = NULL;// DirectDraw overlay surface
+LPDIRECTDRAWCLIPPER         g_pClipper = NULL;   // DirectDraw clipping struct
+DDOVERLAYFX                 g_OverlayFX;         // DirectDraw overlay effects struct
+DDCAPS                      g_DDCaps;            // DirectDraw hardware capabilities struct
+DWORD                       g_OverlayFlags = 0;  // DirectDraw overlay flags variable
+DWORD                       g_dwXRatio,
+                            g_dwYRatio;          // The ratios between the src and dst rects
+RECT                        g_rcSrc = {0, 0, 0, 0},
+                            g_rcDst = {0, 0, 0, 0};
+HANDLE                      g_hVSync;
+
+// check for new DX SDK (8 & 9)
+#ifdef DDSCAPS_PRIMARYSURFACELEFT
+#include <dxerr8.h>
+#pragma comment(lib, "dxerr8.lib")
+#else
+// old SDK (7)
+#include <d3dx.h>
+#pragma comment(lib, "d3dx.lib")
+#endif
+
+//! Create a dialog box and tell the user what went wrong
+bool DisplayError(LPSTR lpstrErr, HRESULT hres)
+{
+    static bool InError = false;
+    int retval = 0;
+    if (!InError)
+    {
+        InError = true;
+#ifdef DDSCAPS_PRIMARYSURFACELEFT
+        const char *message = hres?DXGetErrorString8A(hres):0;
+#else
+        char message[256]; if(hres) D3DXGetErrorString(hres, 256, message);
+#endif
+        retval = MessageBoxA(g_hAppWnd, lpstrErr, hres?message:"Error!", MB_OK|MB_ICONERROR);
+        InError = false;
+    }
+    return false;
+}
+
+//! Releases the overlay surface
+void DestroyOverlay()
+{
+    if (g_pClipper)
+        g_pClipper->Release();
+    if (g_pDDSOverlay) {
+        g_pImg = 0; LPDIRECTDRAWSURFACE7 pDDSOverlay(g_pDDSOverlay);
+        g_pDDSOverlay = NULL;
+        YIELD_TO_THREAD();
+        pDDSOverlay->Release(); // be sure nobody uses old value
+    }
+}
+
+//! Releases the primary surface
+void DestroyPrimary()
+{
+    if (g_pDDSPrimary)
+    {
+        g_pDDSPrimary->Release();
+        g_pDDSPrimary = NULL;
+    }
+}
+
+//! Releases core DirectDraw objects
+void DestroyDDraw()
+{
+    DestroyPrimary();
+    // Release the DDraw object
+    if (g_pDD) {
+        LPDIRECTDRAW7 pDD(g_pDD); // be sure nobody uses old value
+        g_pDD = NULL; Sleep(1); pDD->Release();
+    }
+}
+
+//! Checks and corrects all boundries for alignment and stretching
+void CheckBoundries(void)
+{
+    // Make sure the coordinates fulfill the stretching requirements.  Often
+    // the hardware will require a certain ammount of stretching to do
+    // overlays. This stretch factor is held in dwMinOverlayStretch as the
+    // stretch factor multiplied by 1000 (to keep an accuracy of 3 decimal places).
+    if ((g_DDCaps.dwCaps & DDCAPS_OVERLAYSTRETCH) && (g_DDCaps.dwMinOverlayStretch)
+        && (g_dwXRatio < g_DDCaps.dwMinOverlayStretch))
+    {
+        g_rcDst.right = 2 * GetSystemMetrics(SM_CXSIZEFRAME) + g_rcDst.left + (g_sizex
+                                 * (g_DDCaps.dwMinOverlayStretch + 1)) / 1000;
+        SetWindowTextA(g_hAppWnd, "Window is too small!");
+    }
+    else if ((g_DDCaps.dwCaps & DDCAPS_OVERLAYSTRETCH) && (g_DDCaps.dwMaxOverlayStretch)
+        && (g_dwXRatio > g_DDCaps.dwMaxOverlayStretch))
+    {
+        g_rcDst.right = 2 * GetSystemMetrics(SM_CXSIZEFRAME) + g_rcDst.left + (g_sizey
+                               * (g_DDCaps.dwMaxOverlayStretch + 999)) / 1000;
+        SetWindowTextA(g_hAppWnd, "Window is too large!");
+    }
+    else if(!g_video->calc_fps) SetWindowText(g_hAppWnd, g_video->title);
+
+    // Recalculate the ratio's for the upcoming calculations
+    g_dwXRatio = (g_rcDst.right - g_rcDst.left) * 1000 / (g_rcSrc.right - g_rcSrc.left);
+    g_dwYRatio = (g_rcDst.bottom - g_rcDst.top) * 1000 / (g_rcSrc.bottom - g_rcSrc.top);
+
+    // Check to make sure we're within the screen's boundries, if not then fix
+    // the problem by adjusting the source rectangle which we draw from.
+    if (g_rcDst.left < 0)
+    {
+        g_rcSrc.left = -g_rcDst.left * 1000 / g_dwXRatio;
+        g_rcDst.left = 0;
+    }
+    if (g_rcDst.right > GetSystemMetrics(SM_CXSCREEN))
+    {
+        g_rcSrc.right = g_sizex - ((g_rcDst.right - GetSystemMetrics(SM_CXSCREEN)) * 1000 / g_dwXRatio);
+        g_rcDst.right = GetSystemMetrics(SM_CXSCREEN);
+    }
+    if (g_rcDst.bottom > GetSystemMetrics(SM_CYSCREEN))
+    {
+        g_rcSrc.bottom = g_sizey - ((g_rcDst.bottom - GetSystemMetrics(SM_CYSCREEN)) * 1000 / g_dwYRatio);
+        g_rcDst.bottom = GetSystemMetrics(SM_CYSCREEN);
+    }
+    // I don't know how useful this is... but just in case someone can do it - here's the check.
+    if (g_rcDst.top < 0)
+    {
+        g_rcSrc.top = -g_rcDst.top * 1000 / g_dwYRatio;
+        g_rcDst.top = 0;
+    }
+
+    // Make sure the coordinates fulfill the alignment requirements
+    // these expressions (x & -y) just do alignment by dropping low order bits...
+    // so to round up, we add first, then truncate.
+    if ((g_DDCaps.dwCaps & DDCAPS_ALIGNBOUNDARYSRC) && g_DDCaps.dwAlignBoundarySrc)
+        g_rcSrc.left = (g_rcSrc.left + g_DDCaps.dwAlignBoundarySrc / 2) & -(signed)
+            (g_DDCaps.dwAlignBoundarySrc);
+    if ((g_DDCaps.dwCaps & DDCAPS_ALIGNSIZESRC) && g_DDCaps.dwAlignSizeSrc)
+        g_rcSrc.right = g_rcSrc.left + (g_rcSrc.right - g_rcSrc.left + g_DDCaps.dwAlignSizeSrc
+                                   / 2) & -(signed) (g_DDCaps.dwAlignSizeSrc);
+    if ((g_DDCaps.dwCaps & DDCAPS_ALIGNBOUNDARYDEST) && g_DDCaps.dwAlignBoundaryDest)
+        g_rcDst.left = (g_rcDst.left + g_DDCaps.dwAlignBoundaryDest / 2) & -(signed)
+            (g_DDCaps.dwAlignBoundaryDest);
+    if ((g_DDCaps.dwCaps & DDCAPS_ALIGNSIZEDEST) && g_DDCaps.dwAlignSizeDest)
+        g_rcDst.right = g_rcDst.left + (g_rcDst.right - g_rcDst.left) & -(signed) (g_DDCaps.dwAlignSizeDest);
+}
+
+//! Get translated by system color value
+DWORD DDColorMatch(IDirectDrawSurface7 * pdds, COLORREF rgb)
+{
+    COLORREF       rgbT;
+    HDC            hdc;
+    DWORD          dw = CLR_INVALID;
+    DDSURFACEDESC2 ddsd;
+    HRESULT        hres;
+
+    //  Use GDI SetPixel to color match for us
+    if (rgb != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK) {
+        rgbT = GetPixel(hdc, 0, 0);     // Save current pixel value
+        SetPixel(hdc, 0, 0, rgb);       // Set our value
+        pdds->ReleaseDC(hdc);
+    }
+    // Now lock the surface so we can read back the converted color
+    ddsd.dwSize = sizeof(ddsd);
+    while ((hres = pdds->Lock(NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING)
+        YIELD_TO_THREAD();
+    if (hres == DD_OK) {
+        dw = *(DWORD *) ddsd.lpSurface;                 // Get DWORD
+        if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
+            dw &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1;  // Mask it to bpp
+        pdds->Unlock(NULL);
+    }
+    else return DisplayError("Can't lock primary surface", hres);
+    //  Now put the color that was there back.
+    if (rgb != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK) {
+        SetPixel(hdc, 0, 0, rgbT);
+        pdds->ReleaseDC(hdc);
+    }
+    return dw;
+}
+
+//! Load the bitmap and copy it to the overlay surface
+bool DrawOverlay()
+{
+    HRESULT        hRet;       // This is where we put return values from DirectDraw.
+    DDSURFACEDESC2 surfDesc;
+    // Setup structure
+    memset(&surfDesc, 0, sizeof(surfDesc)); surfDesc.dwSize = sizeof(surfDesc);
+
+    hRet = g_pDDSOverlay->Lock(NULL, &surfDesc, DDLOCK_SURFACEMEMORYPTR | DDLOCK_NOSYSLOCK | DDLOCK_WRITEONLY, NULL);
+    if (hRet != DD_OK ||  surfDesc.lpSurface == NULL)
+        return DisplayError("Can't lock overlay surface", hRet);
+    else {
+        g_pImg = (unsigned int *)surfDesc.lpSurface;
+        //g_pDDSOverlay->Unlock(NULL); is not needed?
+    }
+    // Setup effects structure
+    memset(&g_OverlayFX, 0, sizeof(g_OverlayFX)); g_OverlayFX.dwSize = sizeof(g_OverlayFX);
+    // Setup overlay flags.
+    g_OverlayFlags = DDOVER_SHOW;
+    // Check for destination color keying capability
+    if ((g_DDCaps.dwCKeyCaps & DDCKEYCAPS_DESTOVERLAY) && ((g_DDCaps.dwCaps & DDCAPS_OVERLAYCANTCLIP) || (g_DDCaps.dwCKeyCaps & DDCKEYCAPS_NOCOSTOVERLAY) ))
+    {
+        // If so, we'll use it to clip the bitmap when other windows go on top
+        // of us. Just for the record - this color range for color keying (the
+        // high/low values) are not heavily supported right now, so for almost
+        // all cards, just use the same color for both.
+        g_OverlayFX.dckDestColorkey.dwColorSpaceLowValue =
+        g_OverlayFX.dckDestColorkey.dwColorSpaceHighValue = DDColorMatch(g_pDDSPrimary, RGBKEY);
+        g_OverlayFlags |= DDOVER_DDFX | DDOVER_KEYDESTOVERRIDE;
+    } else {
+        // If not, we'll setup a clipper for the window.  This will fix the
+        // problem on a few video cards - but the ones that don't shouldn't care.
+        hRet = g_pDD->CreateClipper(0, &g_pClipper, NULL);
+        if (hRet != DD_OK)
+            return DisplayError("Can't create clipper", hRet);
+        hRet = g_pClipper->SetHWnd(0, g_hAppWnd);
+        if (hRet != DD_OK)
+            return DisplayError("Can't attach clipper", hRet);
+        hRet = g_pDDSPrimary->SetClipper(g_pClipper);
+        if (hRet != DD_OK)
+            return DisplayError("Can't set clipper", hRet);
+    }
+    return true;
+}
+
+//! Init the primary surface
+bool DDPrimaryInit()
+{
+    HRESULT        hRet;
+    DDSURFACEDESC2 ddsd;  // A surface description structure
+
+    // Create the primary surface.  The primary surface is the full screen -
+    // since we're a windowed app - we'll just write to the portion of the
+    // screen within our window.
+    memset(&ddsd, 0, sizeof(ddsd)); // Set all fields of struct to 0 and set .dwSize to
+    ddsd.dwSize = sizeof(ddsd);     // Sizeof the variable - these two steps required for most DDraw structs
+    ddsd.dwFlags = DDSD_CAPS;       // Set flags for variables we're using...
+    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;  // Set the variables we said we would in dwFlags
+    hRet = g_pDD->CreateSurface(&ddsd, &g_pDDSPrimary, NULL);
+    if (hRet != DD_OK)
+        return DisplayError("Can't create primary surface", hRet);
+    return true;
+}
+
+//! Init DirectDraw Stuff
+bool DDInit()
+{
+    HRESULT hRet;
+    g_rcSrc.right = g_sizex;
+    g_rcSrc.bottom = g_sizey;
+
+    hRet = DirectDrawCreateEx(NULL, (VOID**)&g_pDD, IID_IDirectDraw7, NULL);
+    if (hRet != DD_OK)
+        return DisplayError("Can't create DirectDraw7 instance", hRet);
+
+    // Set cooperation level with other windows to be normal (ie. not full screen)
+    // You MUST set the cooperation level to be SOMETHING, for windowed apps use
+    // DDSCL_NORMAL, for full screen use: DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN.
+    hRet = g_pDD->SetCooperativeLevel(g_hAppWnd, DDSCL_NORMAL);
+    if (hRet != DD_OK)
+        return DisplayError("Can't set cooperative level", hRet);
+    return DDPrimaryInit();
+}
+
+//! Setup the overlay object
+bool DDOverlayInit()
+{
+    // Get hardware's CAPabilitieS
+    memset(&g_DDCaps, 0, sizeof(g_DDCaps));
+    g_DDCaps.dwSize = sizeof(g_DDCaps);
+    if (g_pDD->GetCaps(&g_DDCaps, 0))
+        return DisplayError("Can't get capabilities");
+
+    // Make sure it supports overlays
+    if (!(g_DDCaps.dwCaps & DDCAPS_OVERLAY))
+        return DisplayError("Hardware doesn't support overlays");
+
+    //DO NOT Make sure it supports stretching (scaling)
+    //if (!(g_DDCaps.dwCaps & DDCAPS_OVERLAYSTRETCH)) return false;
+
+    DDSURFACEDESC2              ddsd;  // DirectDraw surface descriptor
+    HRESULT                     hRet;  // I'm not even going to try...
+    // The pixel formats that we want the surface to be in
+    DDPIXELFORMAT               ddpfOverlayFormats[] = {
+        {sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0xFF0000, 0x0FF00, 0x0000FF, 0}, // 32-bit RGB
+        {sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x007C00, 0x003e0, 0x00001F, 0}, // 16-bit RGB 5:5:5
+        {sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x00F800, 0x007e0, 0x00001F, 0}, // 16-bit RGB 5:6:5
+        {sizeof(DDPIXELFORMAT), DDPF_FOURCC, mmioFOURCC('U','Y','V','Y'), 16, 0, 0, 0, 0}, // UYVY
+        {sizeof(DDPIXELFORMAT), DDPF_FOURCC, mmioFOURCC('Y','4','2','2'), 16, 0, 0, 0, 0}, // the same as UYVY
+        {sizeof(DDPIXELFORMAT), DDPF_FOURCC, mmioFOURCC('Y','U','Y','2'), 16, 0, 0, 0, 0}, // YUY2 is unsupported color-space here
+        {0}};
+
+    // Setup the overlay surface's attributes in the surface descriptor
+    memset(&ddsd, 0, sizeof(ddsd));
+    ddsd.dwSize = sizeof(ddsd);
+    ddsd.ddsCaps.dwCaps = DDSCAPS_OVERLAY | g_DDCaps.ddsCaps.dwCaps&DDSCAPS_VIDEOMEMORY;
+    ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
+    ddsd.dwBackBufferCount = 0;
+    ddsd.dwWidth = g_sizex;
+    ddsd.dwHeight = g_sizey;
+    for(int format = 0; ddpfOverlayFormats[format].dwSize; format++) {
+        ddsd.ddpfPixelFormat = ddpfOverlayFormats[format];
+        // Attempt to create the surface with theses settings
+        hRet = g_pDD->CreateSurface(&ddsd, &g_pDDSOverlay, NULL);
+        if(hRet == DD_OK) break;
+    }
+    if (hRet != DD_OK)
+        return DisplayError("Can't create appropriate overlay surface", hRet);
+    return true;
+}
+
+inline void mouse(int k, LPARAM lParam)
+{
+    int x = (int)LOWORD(lParam), y = (int)HIWORD(lParam);
+    g_video->on_mouse( x*g_sizex/(g_rcDst.right - g_rcDst.left),
+        y*g_sizey/(g_rcDst.bottom - g_rcDst.top), k);
+}
+
+LRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
+{
+    PAINTSTRUCT                 ps;         // Structure for the paint message
+    POINT                       p = {0, 0}; // Translation point for the window's client region
+    HRESULT                     hRet;
+
+    switch (iMsg)
+    {
+        case WM_MOVE:
+            // Make sure we're not moving to be minimized - because otherwise
+            // our ratio varialbes (g_dwXRatio and g_dwYRatio) will end up
+            // being 0, and once we hit CheckBoundries it divides by 0.
+            if (!IsIconic(hwnd))
+            {
+                g_rcSrc.left = 0;
+                g_rcSrc.right = g_sizex;
+                g_rcSrc.top = 0;
+                g_rcSrc.bottom = g_sizey;
+                GetClientRect(hwnd, &g_rcDst);
+                g_dwXRatio = (g_rcDst.right - g_rcDst.left) * 1000 /
+                             (g_rcSrc.right - g_rcSrc.left);
+                g_dwYRatio = (g_rcDst.bottom - g_rcDst.top) * 1000 /
+                             (g_rcSrc.bottom - g_rcSrc.top);
+                ClientToScreen(hwnd, &p);
+                g_rcDst.left = p.x;
+                g_rcDst.top = p.y;
+                g_rcDst.bottom += p.y;
+                g_rcDst.right += p.x;
+                CheckBoundries();
+            }
+            else
+                // Else, hide the overlay... just in case we can't do
+                // destination color keying, this will pull the overlay
+                // off of the screen for the user.
+                if (g_pDDSOverlay && g_pDDSPrimary)
+                    g_pDDSOverlay->UpdateOverlay(NULL, g_pDDSPrimary, NULL, DDOVER_HIDE, NULL);
+            // Check to make sure our window exists before we tell it to
+            // repaint. This will fail the first time (while the window is being created).
+            if (hwnd)
+            {
+                InvalidateRect(hwnd, NULL, FALSE);
+                UpdateWindow(hwnd);
+            }
+            return 0L;
+
+        case WM_SIZE:
+            // Another check for the minimization action.  This check is
+            // quicker though...
+            if (wParam != SIZE_MINIMIZED)
+            {
+                GetClientRect(hwnd, &g_rcDst);
+                ClientToScreen(hwnd, &p);
+                g_rcDst.left = p.x;
+                g_rcDst.top = p.y;
+                g_rcDst.bottom += p.y;
+                g_rcDst.right += p.x;
+                g_rcSrc.left = 0;
+                g_rcSrc.right = g_sizex;
+                g_rcSrc.top = 0;
+                g_rcSrc.bottom = g_sizey;
+                // Here we multiply by 1000 to preserve 3 decimal places in the
+                // division opperation (we picked 1000 to be on the same order
+                // of magnitude as the stretch factor for easier comparisons)
+                g_dwXRatio = (g_rcDst.right - g_rcDst.left) * 1000 /
+                             (g_rcSrc.right - g_rcSrc.left);
+                g_dwYRatio = (g_rcDst.bottom - g_rcDst.top) * 1000 /
+                             (g_rcSrc.bottom - g_rcSrc.top);
+                CheckBoundries();
+            }
+            return 0L;
+
+        case WM_PAINT:
+            BeginPaint(hwnd, &ps);
+            // Check the primary surface to see if it's lost - if so you can
+            // pretty much bet that the other surfaces are also lost - thus
+            // restore EVERYTHING!  If we got our surfaces stolen by a full
+            // screen app - then we'll destroy our primary - and won't be able
+            // to initialize it again. When we get our next paint message (the
+            // full screen app closed for example) we'll want to try to reinit
+            // the surfaces again - that's why there is a check for
+            // g_pDDSPrimary == NULL.  The other option, is that our program
+            // went through this process, could init the primary again, but it
+            // couldn't init the overlay, that's why there's a third check for
+            // g_pDDSOverlay == NULL.  Make sure that the check for
+            // !g_pDDSPrimary is BEFORE the IsLost call - that way if the
+            // pointer is NULL (ie. !g_pDDSPrimary is TRUE) - the compiler
+            // won't try to evaluate the IsLost function (which, since the
+            // g_pDDSPrimary surface is NULL, would be bad...).
+            if (!g_pDDSPrimary || (g_pDDSPrimary->IsLost() != DD_OK) ||
+                (g_pDDSOverlay == NULL))
+            {
+                DestroyOverlay();
+                DestroyPrimary();
+                if (DDPrimaryInit())
+                    if (DDOverlayInit())
+                        if (!DrawOverlay())
+                            DestroyOverlay();
+            }
+            // UpdateOverlay is how we put the overlay on the screen.
+            if (g_pDDSOverlay && g_pDDSPrimary && g_video->updating)
+            {
+                hRet = g_pDDSOverlay->UpdateOverlay(&g_rcSrc, g_pDDSPrimary,
+                                                    &g_rcDst, g_OverlayFlags,
+                                                    &g_OverlayFX);
+#ifdef _DEBUG
+                if(hRet != DD_OK) DisplayError("Can't update overlay", hRet);
+#endif
+            }
+            EndPaint(hwnd, &ps);
+            return 0L;
+
+        // process mouse and keyboard events
+        case WM_LBUTTONDOWN:    mouse(1, lParam); break;
+        case WM_LBUTTONUP:      mouse(-1, lParam); break;
+        case WM_RBUTTONDOWN:    mouse(2, lParam); break;
+        case WM_RBUTTONUP:      mouse(-2, lParam); break;
+        case WM_MBUTTONDOWN:    mouse(3, lParam); break;
+        case WM_MBUTTONUP:      mouse(-3, lParam); break;
+        case WM_CHAR:           g_video->on_key(wParam); break;
+
+        case WM_DISPLAYCHANGE:  return 0L;
+
+        case WM_DESTROY:
+            // Now, shut down the window...
+            PostQuitMessage(0);
+            return 0L;
+    }
+    return g_pUserProc? g_pUserProc(hwnd, iMsg, wParam, lParam) : DefWindowProc(hwnd, iMsg, wParam, lParam);
+}
+
+DWORD WINAPI thread_vsync(LPVOID lpParameter)
+{
+    BOOL vblank = false;
+    while(g_video && g_video->running) {
+        while(!vblank && g_video && g_video->running) {
+            YIELD_TO_THREAD();
+            LPDIRECTDRAW7 pDD(g_pDD);
+            if(pDD) pDD->GetVerticalBlankStatus(&vblank);
+        }
+        LPDIRECTDRAWSURFACE7 pDDSOverlay(g_pDDSOverlay);
+        if(pDDSOverlay) pDDSOverlay->UpdateOverlay(&g_rcSrc, g_pDDSPrimary, &g_rcDst, g_OverlayFlags | DDOVER_REFRESHALL, &g_OverlayFX);
+        do {
+            Sleep(1);
+            LPDIRECTDRAW7 pDD(g_pDD);
+            if(pDD) pDD->GetVerticalBlankStatus(&vblank);
+        } while(vblank && g_video && g_video->running);
+        while(g_video && !g_video->updating && g_video->running) Sleep(10);
+    }
+    return 0;
+}
+
+///////////////////////////////////////////// public methods of video class ///////////////////////
+
+inline void mask2bits(unsigned int mask, color_t &save, char &shift)
+{
+    save  = mask; if(!mask) { shift = 8; return; }
+    shift = 0; while(!(mask&1)) ++shift, mask >>= 1;
+    int bits = 0; while(mask&1) ++bits,  mask >>= 1;
+    shift += bits - 8;
+}
+
+bool video::init_window(int sizex, int sizey)
+{
+    assert(win_hInstance != 0);
+    g_sizex = sizex; g_sizey = sizey;
+    if( !WinInit(win_hInstance, win_iCmdShow, gWndClass, title, false) )
+        return DisplayError("Unable to initialize the program's window.");
+    running = true;
+    if( !DDInit() ) {
+        DestroyDDraw();
+        goto fail;
+    }
+    if( !DDOverlayInit() || !DrawOverlay() ) {
+        DestroyOverlay();
+        DestroyDDraw();
+        goto fail;
+    }
+    DDPIXELFORMAT PixelFormat; memset(&PixelFormat, 0, sizeof(PixelFormat)); PixelFormat.dwSize = sizeof(PixelFormat);
+    g_pDDSOverlay->GetPixelFormat(&PixelFormat);
+    mask2bits(PixelFormat.dwRBitMask, red_mask, red_shift);
+    mask2bits(PixelFormat.dwGBitMask, green_mask, green_shift);
+    mask2bits(PixelFormat.dwBBitMask, blue_mask, blue_shift);
+    if(PixelFormat.dwFlags == DDPF_RGB)
+         depth = char(PixelFormat.dwRGBBitCount);
+    else depth = -char(PixelFormat.dwFourCC);
+    for(int i = 0, e = sizex * sizey * PixelFormat.dwRGBBitCount / 32, c = get_color(0, 0, 0); i < e; i++)
+        g_pImg[i] = c; // clear surface
+    ShowWindow(g_hAppWnd, SW_SHOW);
+    g_hVSync = CreateThread (
+        NULL,          // LPSECURITY_ATTRIBUTES security_attrs
+        0,             // SIZE_T stacksize
+        (LPTHREAD_START_ROUTINE) thread_vsync,
+        this,               // argument
+        0, 0);
+    SetPriorityClass(g_hVSync, IDLE_PRIORITY_CLASS); // questionable
+    return true;
+fail:
+    g_pImg = new unsigned int[g_sizex * g_sizey];
+    return false;
+}
+
+void video::terminate()
+{
+    running = false;
+    DestroyOverlay();
+    if(WaitForSingleObject(g_hVSync, 100) == WAIT_TIMEOUT) TerminateThread(g_hVSync, 0);
+    CloseHandle(g_hVSync);
+    DestroyDDraw();
+    if(g_pImg) delete[] g_pImg;
+    g_pImg = 0; g_video = 0;
+}
+//////////// drawing area constructor & destructor /////////////
+
+drawing_area::drawing_area(int x, int y, int sizex, int sizey)
+: start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(g_video->depth),
+    base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+{
+    assert(ptr32); assert(x < g_sizex); assert(y < g_sizey);
+    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
+
+    index = base_index; // current index
+}
+
+drawing_area::~drawing_area()
+{
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/dxcheck.bat b/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/dxcheck.bat
new file mode 100644 (file)
index 0000000..2f766e3
--- /dev/null
@@ -0,0 +1,36 @@
+@echo off
+REM
+REM Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+REM
+REM This file is part of Threading Building Blocks.
+REM
+REM Threading Building Blocks is free software; you can redistribute it
+REM and/or modify it under the terms of the GNU General Public License
+REM version 2 as published by the Free Software Foundation.
+REM
+REM Threading Building Blocks is distributed in the hope that it will be
+REM useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+REM of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+REM GNU General Public License for more details.
+REM
+REM You should have received a copy of the GNU General Public License
+REM along with Threading Building Blocks; if not, write to the Free Software
+REM Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+REM
+REM As a special exception, you may use this file as part of a free software
+REM library without restriction.  Specifically, if other files instantiate
+REM templates or use macros or inline functions from this file, or you compile
+REM this file and link it with other files to produce an executable, this
+REM file does not by itself cause the resulting executable to be covered by
+REM the GNU General Public License.  This exception does not however
+REM invalidate any other reasons why the executable file might be covered by
+REM the GNU General Public License.
+REM
+if "%DXSDK_DIR%"=="" goto error_no_DXSDK
+goto end
+
+:error_no_DXSDK
+echo DirectX SDK Check : error : This example requires the DirectX SDK.  Either (re)-install the DirectX SDK, or set the DXSDK_DIR environment variable to indicate where it is installed.
+
+:end
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/gdivideo.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/gdivideo.cpp
new file mode 100644 (file)
index 0000000..25cb02f
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// common Windows parts
+#include "winvideo.h"
+// include GDI+ headers
+#include <gdiplus.h>
+// and another headers
+#include <stdio.h>
+
+// tag linking library
+#pragma comment(lib, "gdiplus.lib")
+
+// global specific variables
+Gdiplus::Bitmap *           g_pBitmap;           // main drawing bitmap
+ULONG_PTR                   gdiplusToken;
+Gdiplus::GdiplusStartupInput gdiplusStartupInput;// GDI+
+
+//! display system error
+bool DisplayError(LPSTR lpstrErr, HRESULT hres)
+{
+    static bool InError = false;
+    int retval = 0;
+    if (!InError)
+    {
+        InError = true;
+        LPCSTR lpMsgBuf;
+        if(!hres) hres = GetLastError();
+        FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+                               NULL, hres, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL );
+        retval = MessageBox(g_hAppWnd, lpstrErr, lpMsgBuf, MB_OK|MB_ICONERROR);
+        LocalFree( (HLOCAL)lpMsgBuf );
+        InError = false;
+    }
+    return false;
+}
+
+//! Win event processing function
+LRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
+{
+    switch (iMsg)
+    {
+        case WM_MOVE:
+            // Check to make sure our window exists before we tell it to repaint.
+            // This will fail the first time (while the window is being created).
+            if (hwnd) {
+                InvalidateRect(hwnd, NULL, FALSE);
+                UpdateWindow(hwnd);
+            }
+            return 0L;
+
+        case WM_PAINT:
+            {
+                PAINTSTRUCT ps;
+                Gdiplus::Graphics graphics( BeginPaint(hwnd, &ps) );
+                // redraw just requested area. This call is as fast as simple DrawImage() call.
+                if(g_video->updating) graphics.DrawImage(g_pBitmap, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.left, ps.rcPaint.top,
+                                    ps.rcPaint.right, ps.rcPaint.bottom, Gdiplus::UnitPixel);
+                EndPaint(hwnd, &ps);
+            }
+            return 0L;
+
+        // Proccess all mouse and keyboard events
+        case WM_LBUTTONDOWN:    g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 1); break;
+        case WM_LBUTTONUP:      g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -1); break;
+        case WM_RBUTTONDOWN:    g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 2); break;
+        case WM_RBUTTONUP:      g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -2); break;
+        case WM_MBUTTONDOWN:    g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 3); break;
+        case WM_MBUTTONUP:      g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -3); break;
+        case WM_CHAR:           g_video->on_key( (int)wParam); break;
+
+        // some useless stuff
+        case WM_ERASEBKGND:     return 1;  // keeps erase-background events from happening, reduces chop
+        case WM_DISPLAYCHANGE:  return 0;
+
+        // Now, shut down the window...
+        case WM_DESTROY:        PostQuitMessage(0); return 0;
+    }
+    // call user defined proc, if exists
+    return g_pUserProc? g_pUserProc(hwnd, iMsg, wParam, lParam) : DefWindowProc(hwnd, iMsg, wParam, lParam);
+}
+
+///////////// video functions ////////////////
+
+bool video::init_window(int sizex, int sizey)
+{
+    assert(win_hInstance != 0);
+    g_sizex = sizex; g_sizey = sizey;
+    if (!WinInit(win_hInstance, win_iCmdShow, gWndClass, title, true)) {
+        DisplayError("Unable to initialize the program's window.");
+        return false;
+    }
+    ShowWindow(g_hAppWnd, SW_SHOW);
+    Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
+    g_pImg = new unsigned int[sizex*sizey];
+    g_pBitmap = new Gdiplus::Bitmap(g_sizex, g_sizey, 4*g_sizex, PixelFormat32bppRGB, (BYTE*)g_pImg );
+    running = true;
+    return true;
+}
+
+void video::terminate()
+{
+    if(g_pBitmap) { delete g_pBitmap; g_pBitmap = 0; }
+    Gdiplus::GdiplusShutdown(gdiplusToken);
+    g_video = 0; running = false;
+    if(g_pImg) { delete[] g_pImg; g_pImg = 0; }
+}
+
+//////////// drawing area constructor & destructor /////////////
+
+drawing_area::drawing_area(int x, int y, int sizex, int sizey)
+: start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(24),
+    base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+{
+    assert(x < g_sizex); assert(y < g_sizey);
+    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
+
+    index = base_index; // current index
+}
+
+drawing_area::~drawing_area()
+{
+    if(g_video->updating) {
+        RECT r;
+        r.left = start_x; r.right  = start_x + size_x;
+        r.top  = start_y; r.bottom = start_y + size_y;
+        InvalidateRect(g_hAppWnd, &r, false);
+    }
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/macvideo.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/macvideo.cpp
new file mode 100644 (file)
index 0000000..f2e5224
--- /dev/null
@@ -0,0 +1,1491 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+ *  Based on "OpenGL Image" example from http://developer.apple.com/samplecode/OpenGL_Image/
+ */
+
+#include "video.h"
+#include <sched.h>
+#include <sys/time.h>
+#include <stdio.h>
+#include <string.h>
+#include <pthread.h>
+
+#include <AvailabilityMacros.h>
+#undef DEPRECATED_ATTRIBUTE
+#define DEPRECATED_ATTRIBUTE
+#include <Carbon/Carbon.h>
+#include <AGL/agl.h>
+#include <OpenGL/gl.h>    // for OpenGL API
+#include <OpenGL/glext.h> // for OpenGL extension support 
+
+unsigned int *      g_pImg = 0;
+int                 g_sizex, g_sizey;
+WindowRef           g_window = 0;
+static video *      g_video = 0;
+static int          g_fps = 0;
+struct timeval      g_time;
+static pthread_mutex_t  g_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+
+static OSStatus     AppEventHandler( EventHandlerCallRef inCaller, EventRef inEvent, void* inRefcon );
+WindowRef           HandleNew();
+static OSStatus     WindowEventHandler( EventHandlerCallRef inCaller, EventRef inEvent, void* inRefcon );
+
+static IBNibRef     sNibRef;
+
+//-------------------------------------------------------------------------------------------- 
+
+// structure for creating a fullscreen context
+struct structGLInfo // storage for setup info
+{
+    SInt16 width;               // input: width of drawable (screen width in full screen mode), return: actual width allocated
+    SInt16 height;              // input: height of drawable (screen height in full screen mode), return: actual height allocated
+    UInt32 pixelDepth;          // input: requested pixel depth
+    Boolean fDepthMust;         // input: pixel depth must be set (if false then current depth will be used if able)
+    Boolean fAcceleratedMust;   // input: must renderer be accelerated?
+    GLint aglAttributes[64];    // input: pixel format attributes always required (reset to what was actually allocated)
+    SInt32 VRAM;                // input: minimum VRAM; output: actual (if successful otherwise input)
+    SInt32 textureRAM;          // input: amount of texture RAM required on card; output: same (used in allcoation to ensure enough texture
+    AGLPixelFormat    fmt;      // input: none; output pixel format...
+};
+typedef struct structGLInfo structGLInfo;
+typedef struct structGLInfo * pstructGLInfo;
+
+// structure for creating a context from a window
+struct structGLWindowInfo // storage for setup info
+{
+    Boolean fAcceleratedMust;   // input: must renderer be accelerated?
+    GLint aglAttributes[64];    // input: pixel format attributes always required (reset to what was actually allocated)
+    SInt32 VRAM;                // input: minimum VRAM; output: actual (if successful otherwise input)
+    SInt32 textureRAM;          // input: amount of texture RAM required on card; output: same (used in allcoation to ensure enough texture
+    AGLPixelFormat    fmt;      // input: none; output pixel format...
+    Boolean fDraggable;         // input: is window going to be dragable, 
+                                //        if so renderer check (accel, VRAM, textureRAM) will look at all renderers vice just the current one
+                                //        if window is not dragable renderer check will either check the single device or short 
+                                //            circuit to software if window spans multiple devices 
+                                //        software renderer is consider to have unlimited VRAM, unlimited textureRAM and to not be accelerated
+};
+typedef struct structGLWindowInfo structGLWindowInfo;
+typedef struct structGLWindowInfo * pstructGLWindowInfo;
+
+//-------------------------------------------------------------------------------------------- 
+
+struct recGLCap // structure to store minimum OpenGL capabilites across all displays and GPUs
+{
+    Boolean f_ext_texture_rectangle; // is texture rectangle extension supported
+    Boolean f_ext_client_storage; // is client storage extension supported
+    Boolean f_ext_packed_pixel; // is packed pixel extension supported
+    Boolean f_ext_texture_edge_clamp; // is SGI texture edge clamp extension supported
+    Boolean f_gl_texture_edge_clamp; // is OpenGL texture edge clamp support (1.2+)
+    unsigned long edgeClampParam; // the param that is passed to the texturing parmeteres
+    long maxTextureSize; // the minimum max texture size across all GPUs
+    long maxNOPTDTextureSize; // the minimum max texture size across all GPUs that support non-power of two texture dimensions
+};
+typedef struct recGLCap recGLCap;
+typedef recGLCap * pRecGLCap;
+
+struct recImage // OpenGL and image information associated with each window
+{
+    // genric OpenGL stuff
+    structGLWindowInfo glInfo;  // gl info used with SetupGL to build context
+    AGLContext aglContext;      // the OpenGL context (read: state)
+    GLuint fontList;            // the display list storing the bitmap font created for the context to display info
+    
+    Boolean fAGPTexturing;      // 10.1+ only: texture from AGP memory without loading to GPU
+    
+    // texture display stuff
+    Boolean fNPOTTextures; // are we using Non-Power Of Two (NPOT) textures?
+    Boolean fTileTextures; // are multiple tiled textures used to display image?
+    Boolean fOverlapTextures; // do tiled textures overlapped to create correct filtering between tiles? (only applies if using tiled textures)
+    Boolean fClientTextures; // 10.1+ only: texture from client memory
+        
+    unsigned char * pImageBuffer; // image buffer that contains data for image (disposed after loading into texture if not using client textures)
+    long imageWidth; // height of orginal image
+    long imageHeight; // width of orginal image
+    float imageAspect; // width / height or aspect ratio of orginal image
+    long imageDepth; // depth of image (after loading into gworld, will be either 32 or 16 bits)
+    long textureX; // number of horizontal textures
+    long textureY; // number of vertical textures
+    long maxTextureSize; // max texture size for image
+    GLuint * pTextureName; // array for texture names (# = textureX * textureY)
+    long textureWidth; // total width of texels with cover image (including any border on image, but not internal texture overlaps)
+    long textureHeight; // total height of texels with cover image (including any border on image, but not internal texture overlaps)
+    float zoomX; // zoom from on texel = one pixel is 1.0
+    float zoomY; // zoom from on texel = one pixel is 1.0
+ };
+typedef struct recImage recImage; // typedef for easy declaration
+typedef recImage * pRecImage; // pointer type
+
+// ==================================
+
+// public function declarations -------------------------------------
+
+// Destroys drawable and context
+// Ouputs: *paglDraw, *paglContext should be 0 on exit
+// destorys a context that was associated with an existing window, window is left intacted
+OSStatus DestroyGLFromWindow (AGLContext* paglContext, pstructGLWindowInfo pcontextInfo);
+
+short FindGDHandleFromWindow (WindowPtr pWindow, GDHandle * phgdOnThisDevice);
+
+// disposes OpenGL context, and associated texture list
+OSStatus DisposeGLForWindow (WindowRef window);
+
+// builds the GL context and associated state for the window
+// loads image into a texture or textures
+// disposes of GWorld and image buffer when finished loading textures
+OSStatus BuildGLForWindow (WindowRef window);
+
+// Handle updating context for window moves and resizing
+OSStatus ResizeMoveGLWindow (WindowRef window);
+
+// main GL drawing routine, should be valid window passed in (will setupGL if require).  Draw image
+void DrawGL (WindowRef window);
+
+pRecGLCap gpOpenGLCaps; 
+
+// prototypes (internal/private) --------------------------------------------
+
+static Boolean CheckRenderer (GDHandle hGD, long *VRAM, long *textureRAM, GLint*  , Boolean fAccelMust);
+static Boolean CheckAllDeviceRenderers (long* pVRAM, long* pTextureRAM, GLint* pDepthSizeSupport, Boolean fAccelMust);
+static void DumpCurrent (AGLDrawable* paglDraw, AGLContext* paglContext, pstructGLInfo pcontextInfo);
+static OSStatus BuildGLonWindow (WindowPtr pWindow, AGLContext* paglContext, pstructGLWindowInfo pcontextInfo, AGLContext aglShareContext);
+
+static long GetNextTextureSize (long textureDimension, long maxTextureSize, Boolean textureRectangle);
+static long GetTextureNumFromTextureDim (long textureDimension, long maxTextureSize, Boolean texturesOverlap, Boolean textureRectangle);
+
+// ----------------------------------------------------------------------------------------
+
+// functions (internal/private) ---------------------------------------------
+
+#pragma mark -
+// --------------------------------------------------------------------------
+
+// central error reporting
+
+void ReportErrorNum (char * strError, long numError)
+{
+    char errMsgPStr [257];
+    
+    errMsgPStr[0] = (char)snprintf (errMsgPStr+1, 255, "%s %ld (0x%lx)\n", strError, numError, numError); 
+
+    // ensure we are faded in
+    DebugStr ( (ConstStr255Param) errMsgPStr );
+}
+
+// --------------------------------------------------------------------------
+
+void ReportError (char * strError)
+{
+    char errMsgPStr [257];
+    
+    errMsgPStr[0] = (char)snprintf (errMsgPStr+1, 255, "%s\n", strError); 
+
+    // ensure we are faded in
+    DebugStr ( (ConstStr255Param) errMsgPStr );
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+
+// if error dump agl errors to debugger string, return error
+
+OSStatus aglReportError (void)
+{
+    GLenum err = aglGetError();
+    if (AGL_NO_ERROR != err)
+        ReportError ((char *)aglErrorString(err));
+    // ensure we are returning an OSStatus noErr if no error condition
+    if (err == AGL_NO_ERROR)
+        return noErr;
+    else
+        return (OSStatus) err;
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+
+// if error dump gl errors to debugger string, return error
+
+OSStatus glReportError (void)
+{
+    GLenum err = glGetError();
+    switch (err)
+    {
+        case GL_NO_ERROR:
+            break;
+        case GL_INVALID_ENUM:
+            ReportError ("GL Error: Invalid enumeration");
+            break;
+        case GL_INVALID_VALUE:
+            ReportError ("GL Error: Invalid value");
+            break;
+        case GL_INVALID_OPERATION:
+            ReportError ("GL Error: Invalid operation");
+            break;
+        case GL_STACK_OVERFLOW:
+            ReportError ("GL Error: Stack overflow");
+            break;
+        case GL_STACK_UNDERFLOW:
+            ReportError ("GL Error: Stack underflow");
+            break;
+        case GL_OUT_OF_MEMORY:
+            ReportError ("GL Error: Out of memory");
+            break;
+    }
+    // ensure we are returning an OSStatus noErr if no error condition
+    if (err == GL_NO_ERROR)
+        return noErr;
+    else
+        return (OSStatus) err;
+}
+
+//--------------------------------------------------------------------------------------------
+
+// functions (internal/private) ---------------------------------------------
+
+// CheckRenderer
+
+// looks at renderer attributes it has at least the VRAM is accelerated
+
+// Inputs:     hGD: GDHandle to device to look at
+//            pVRAM: pointer to VRAM in bytes required; out is actual VRAM if a renderer was found, otherwise it is the input parameter
+//            pTextureRAM:  pointer to texture RAM in bytes required; out is same (implementation assume VRAM returned by card is total so we add texture and VRAM)
+//            fAccelMust: do we check for acceleration
+
+// Returns: true if renderer for the requested device complies, false otherwise
+
+static Boolean CheckRenderer (GDHandle hGD, long* pVRAM, long* pTextureRAM, GLint* pDepthSizeSupport, Boolean fAccelMust)
+{
+    AGLRendererInfo info, head_info;
+    GLint inum;
+    GLint dAccel = 0;
+    GLint dVRAM = 0, dMaxVRAM = 0;
+    Boolean canAccel = false, found = false;
+    head_info = aglQueryRendererInfo(&hGD, 1);
+    aglReportError ();
+    if(!head_info)
+    {
+        ReportError ("aglQueryRendererInfo error");
+        return false;
+    }
+    else
+    {
+        info = head_info;
+        inum = 0;
+        // see if we have an accelerated renderer, if so ignore non-accelerated ones
+        // this prevents returning info on software renderer when actually we'll get the hardware one
+        while (info)
+        {    
+            aglDescribeRenderer(info, AGL_ACCELERATED, &dAccel);
+            aglReportError ();
+            if (dAccel)
+                canAccel = true;
+            info = aglNextRendererInfo(info);
+            aglReportError ();
+            inum++;
+        }
+            
+        info = head_info;
+        inum = 0;
+        while (info)
+        {
+            aglDescribeRenderer (info, AGL_ACCELERATED, &dAccel);
+            aglReportError ();
+            // if we can accel then we will choose the accelerated renderer 
+            // how about compliant renderers???
+            if ((canAccel && dAccel) || (!canAccel && (!fAccelMust || dAccel)))
+            {
+                aglDescribeRenderer (info, AGL_VIDEO_MEMORY, &dVRAM);    // we assume that VRAM returned is total thus add texture and VRAM required
+                aglReportError ();
+                if (dVRAM >= (*pVRAM + *pTextureRAM))
+                {
+                    if (dVRAM >= dMaxVRAM) // find card with max VRAM
+                    {
+                        aglDescribeRenderer (info, AGL_DEPTH_MODES, pDepthSizeSupport);    // which depth buffer modes are supported
+                        aglReportError ();
+                        dMaxVRAM = dVRAM; // store max
+                        found = true;
+                    }
+                }
+            }
+            info = aglNextRendererInfo(info);
+            aglReportError ();
+            inum++;
+        }
+    }
+    aglDestroyRendererInfo(head_info);
+    if (found) // if we found a card that has enough VRAM and meets the accel criteria
+    {
+        *pVRAM = dMaxVRAM; // return VRAM
+        return true;
+    }
+    // VRAM will remain to same as it did when sent in
+    return false;
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+
+// CheckAllDeviceRenderers 
+
+// looks at renderer attributes and each device must have at least one renderer that fits the profile
+
+// Inputs:     pVRAM: pointer to VRAM in bytes required; out is actual min VRAM of all renderers found, otherwise it is the input parameter
+//            pTextureRAM:  pointer to texture RAM in bytes required; out is same (implementation assume VRAM returned by card is total so we add texture and VRAM)
+//            fAccelMust: do we check fro acceleration
+
+// Returns: true if any renderer for on each device complies (not necessarily the same renderer), false otherwise
+
+static Boolean CheckAllDeviceRenderers (long* pVRAM, long* pTextureRAM, GLint* pDepthSizeSupport, Boolean fAccelMust)
+{
+    AGLRendererInfo info, head_info;
+    GLint inum;
+    GLint dAccel = 0;
+    GLint dVRAM = 0, dMaxVRAM = 0;
+    Boolean canAccel = false, found = false, goodCheck = true; // can the renderer accelerate, did we find a valid renderer for the device, are we still successfully on all the devices looked at
+    long MinVRAM = 0x8FFFFFFF; // max long
+    GDHandle hGD = GetDeviceList (); // get the first screen
+    while (hGD && goodCheck)
+    {
+        head_info = aglQueryRendererInfo(&hGD, 1);
+        aglReportError ();
+        if(!head_info)
+        {
+            ReportError ("aglQueryRendererInfo error");
+            return false;
+        }
+        else
+        {
+            info = head_info;
+            inum = 0;
+            // see if we have an accelerated renderer, if so ignore non-accelerated ones
+            // this prevents returning info on software renderer when actually we'll get the hardware one
+            while (info)
+            {
+                aglDescribeRenderer(info, AGL_ACCELERATED, &dAccel);
+                aglReportError ();
+                if (dAccel)
+                    canAccel = true;
+                info = aglNextRendererInfo(info);
+                aglReportError ();
+                inum++;
+            }
+                
+            info = head_info;
+            inum = 0;
+            while (info)
+            {    
+                aglDescribeRenderer(info, AGL_ACCELERATED, &dAccel);
+                aglReportError ();
+                // if we can accel then we will choose the accelerated renderer 
+                // how about compliant renderers???
+                if ((canAccel && dAccel) || (!canAccel && (!fAccelMust || dAccel)))
+                {
+                    aglDescribeRenderer(info, AGL_VIDEO_MEMORY, &dVRAM);    // we assume that VRAM returned is total thus add texture and VRAM required
+                    aglReportError ();
+                    if (dVRAM >= (*pVRAM + *pTextureRAM))
+                    {
+                        if (dVRAM >= dMaxVRAM) // find card with max VRAM
+                        {
+                            aglDescribeRenderer(info, AGL_DEPTH_MODES, pDepthSizeSupport);    // which depth buffer modes are supported
+                            aglReportError ();
+                            dMaxVRAM = dVRAM; // store max
+                            found = true;
+                        }
+                    }
+                }
+                info = aglNextRendererInfo(info);
+                aglReportError ();
+                inum++;
+            }
+        }
+        aglDestroyRendererInfo(head_info);
+        if (found) // if we found a card that has enough VRAM and meets the accel criteria
+        {
+            if (MinVRAM > dMaxVRAM)
+                MinVRAM = dMaxVRAM; // return VRAM
+            
+        }
+        else
+            goodCheck = false; // one device failed thus entire requirement fails
+        hGD = GetNextDevice (hGD); // get next device
+    } // while
+    if (goodCheck) // we check all devices and each was good
+    {
+        *pVRAM = MinVRAM; // return VRAM
+        return true;
+    }
+    return false; //at least one device failed to have mins
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+
+// DumpCurrent
+
+// Kills currently allocated context
+// does not care about being pretty (assumes display is likely faded)
+
+// Inputs:     paglDraw, paglContext: things to be destroyed
+
+void DumpCurrent (AGLDrawable* paglDraw, AGLContext* paglContext, pstructGLInfo pcontextInfo)
+{
+    if (*paglContext)
+    {
+        aglSetCurrentContext (NULL);
+        aglReportError ();
+        aglSetDrawable (*paglContext, NULL);
+        aglReportError ();
+        aglDestroyContext (*paglContext);
+        aglReportError ();
+        *paglContext = NULL;
+    }
+    
+    if (pcontextInfo->fmt)
+    {
+        aglDestroyPixelFormat (pcontextInfo->fmt); // pixel format is no longer needed
+        aglReportError ();
+    }
+    pcontextInfo->fmt = 0;
+
+    if (*paglDraw) // do not destory a window on DSp since there is no window built in X
+        DisposeWindow (GetWindowFromPort (*paglDraw));
+    *paglDraw = NULL;
+}
+
+#pragma mark -
+// --------------------------------------------------------------------------
+
+// BuildGLonWindow
+
+static OSStatus BuildGLonWindow (WindowPtr pWindow, AGLContext* paglContext, pstructGLWindowInfo pcontextInfo, AGLContext aglShareContext)
+{
+    GDHandle hGD = NULL;
+    GrafPtr cgrafSave = NULL;
+    short numDevices;
+    GLint depthSizeSupport;
+    OSStatus err = noErr;
+    
+    if (!pWindow || !pcontextInfo)
+    {
+        ReportError ("NULL parameter passed to BuildGLonWindow.");
+        return paramErr;
+    }
+    
+    GetPort (&cgrafSave);
+    SetPortWindowPort(pWindow);
+
+    // check renderere VRAM and acceleration
+    numDevices = FindGDHandleFromWindow (pWindow, &hGD);
+    if (!pcontextInfo->fDraggable)     // if numDevices > 1 then we will only be using the software renderer otherwise check only window device
+    {
+        if ((numDevices > 1) || (numDevices == 0)) // this window spans mulitple devices thus will be software only
+        {
+            // software renderer
+            // infinite VRAM, infinite textureRAM, not accelerated
+            if (pcontextInfo->fAcceleratedMust)
+            {
+                ReportError ("Unable to accelerate window that spans multiple devices");
+                return err;
+            }
+        }
+        else // not draggable on single device
+        {
+            if (!CheckRenderer (hGD, &(pcontextInfo->VRAM), &(pcontextInfo->textureRAM), &depthSizeSupport, pcontextInfo->fAcceleratedMust))
+            {
+                ReportError ("Renderer check failed");
+                return err;
+            }
+        }
+    }
+    // else draggable so must check all for support (each device should have at least one renderer that meets the requirements)
+    else if (!CheckAllDeviceRenderers (&(pcontextInfo->VRAM), &(pcontextInfo->textureRAM), &depthSizeSupport, pcontextInfo->fAcceleratedMust))
+    {
+        ReportError ("Renderer check failed");
+        return err;
+    }
+    
+    // do agl
+    if ((Ptr) kUnresolvedCFragSymbolAddress == (Ptr) aglChoosePixelFormat) // check for existance of OpenGL
+    {
+        ReportError ("OpenGL not installed");
+        return noErr;
+    }    
+    // we successfully passed the renderer check
+
+    if ((!pcontextInfo->fDraggable && (numDevices == 1)))  // not draggable on a single device
+        pcontextInfo->fmt = aglChoosePixelFormat (&hGD, 1, pcontextInfo->aglAttributes); // get an appropriate pixel format
+    else
+        pcontextInfo->fmt = aglChoosePixelFormat (NULL, 0, pcontextInfo->aglAttributes); // get an appropriate pixel format
+    aglReportError ();
+    if (NULL == pcontextInfo->fmt) 
+    {
+        ReportError("Could not find valid pixel format");
+        return noErr;
+    }
+
+    *paglContext = aglCreateContext (pcontextInfo->fmt, aglShareContext); // Create an AGL context
+    if (AGL_BAD_MATCH == aglGetError())
+        *paglContext = aglCreateContext (pcontextInfo->fmt, 0); // unable to sahre context, create without sharing
+    aglReportError ();
+    if (NULL == *paglContext) 
+    {
+        ReportError ("Could not create context");
+        return noErr;
+    }
+    
+    if (!aglSetDrawable (*paglContext, GetWindowPort (pWindow))) // attach the CGrafPtr to the context
+        return aglReportError ();
+    
+    if(!aglSetCurrentContext (*paglContext)) // make the context the current context
+        return aglReportError ();
+
+    SetPort (cgrafSave);
+
+    return err;
+}
+
+#pragma mark -
+
+// functions (public) -------------------------------------------------------
+
+// DestroyGLFromWindow
+
+// Destroys context that waas allocated with BuildGLonWindow
+// Ouputs: *paglContext should be NULL on exit
+
+OSStatus DestroyGLFromWindow (AGLContext* paglContext, pstructGLWindowInfo pcontextInfo)
+{
+    OSStatus err;
+    
+    if ((!paglContext) || (!*paglContext))
+        return paramErr; // not a valid context
+    glFinish ();
+    aglSetCurrentContext (NULL);
+    err = aglReportError ();
+    aglSetDrawable (*paglContext, NULL);
+    err = aglReportError ();
+    aglDestroyContext (*paglContext);
+    err = aglReportError ();
+    *paglContext = NULL;
+
+    if (pcontextInfo->fmt)
+    {
+        aglDestroyPixelFormat (pcontextInfo->fmt); // pixel format is no longer valid
+        err = aglReportError ();
+    }
+    pcontextInfo->fmt = 0;
+    
+    return err;
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+
+// GetWindowDevice
+
+// Inputs:    a valid WindowPtr
+
+// Outputs:    the GDHandle that that window is mostly on
+
+// returns the number of devices that the windows content touches
+
+short FindGDHandleFromWindow (WindowPtr pWindow, GDHandle * phgdOnThisDevice)
+{
+    GrafPtr pgpSave;
+    Rect rectWind, rectSect;
+    long greatestArea, sectArea;
+    short numDevices = 0;
+    GDHandle hgdNthDevice;
+    
+    if (!pWindow || !phgdOnThisDevice)
+        return 0;
+        
+    *phgdOnThisDevice = NULL;
+    
+    GetPort (&pgpSave);
+    SetPortWindowPort (pWindow);
+    
+
+    GetWindowPortBounds (pWindow, &rectWind);
+    LocalToGlobal ((Point*)& rectWind.top);    // convert to global coordinates
+    LocalToGlobal ((Point*)& rectWind.bottom);
+    hgdNthDevice = GetDeviceList ();
+    greatestArea = 0;
+    // check window against all gdRects in gDevice list and remember 
+    //  which gdRect contains largest area of window}
+    while (hgdNthDevice)
+    {
+        if (TestDeviceAttribute (hgdNthDevice, screenDevice))
+            if (TestDeviceAttribute (hgdNthDevice, screenActive))
+            {
+                // The SectRect routine calculates the intersection 
+                //  of the window rectangle and this gDevice 
+                //  rectangle and returns TRUE if the rectangles intersect, 
+                //  FALSE if they don't.
+                SectRect (&rectWind, &(**hgdNthDevice).gdRect, &rectSect);
+                // determine which screen holds greatest window area
+                //  first, calculate area of rectangle on current device
+                sectArea = (long) (rectSect.right - rectSect.left) * (rectSect.bottom - rectSect.top);
+                if (sectArea > 0)
+                    numDevices++;
+                if (sectArea > greatestArea)
+                {
+                    greatestArea = sectArea; // set greatest area so far
+                    *phgdOnThisDevice = hgdNthDevice; // set zoom device
+                }
+                hgdNthDevice = GetNextDevice(hgdNthDevice);
+            }
+    }
+    
+    SetPort (pgpSave);
+    return numDevices;
+}
+
+//--------------------------------------------------------------------------------------------
+// private
+
+// returns the largest power of 2 texture <= textureDimension
+// or in the case of texture rectangle returns the next texture size (can be non-power of two)
+
+static long GetNextTextureSize (long textureDimension, long maxTextureSize, Boolean textureRectangle)
+{
+    long targetTextureSize = maxTextureSize; // start at max texture size
+    if (textureRectangle)
+    {
+        if (textureDimension >= targetTextureSize) // the texture dimension is greater than the target texture size (i.e., it fits)
+            return targetTextureSize; // return corresponding texture size
+        else
+            return textureDimension; // jusr return the dimension
+    }
+    else
+    {
+        do // while we have txture sizes check for texture value being equal or greater
+        {  
+            if (textureDimension >= targetTextureSize) // the texture dimension is greater than the target texture size (i.e., it fits)
+                return targetTextureSize; // return corresponding texture size
+        }
+        while (targetTextureSize >>= 1); // step down to next texture size smaller
+    }
+    return 0; // no textures fit so return zero
+}
+
+// ---------------------------------
+
+// returns the nuber of textures need to represent a size of textureDimension given
+// requirement for power of 2 textures as the maximum texture size
+// for the overlap case each texture effectively covers two less pixels so must iterate through using whole statement
+
+static long GetTextureNumFromTextureDim (long textureDimension, long maxTextureSize, Boolean texturesOverlap, Boolean textureRectangle) 
+{
+    // start at max texture size 
+    // loop through each texture size, removing textures in turn which are less than the remaining texture dimension
+    // each texture has 2 pixels of overlap (one on each side) thus effective texture removed is 2 less than texture size
+    
+    long i = 0; // initially no textures
+    long bitValue = maxTextureSize; // start at max texture size
+    long texOverlapx2 = texturesOverlap ? 2 : 0;
+    textureDimension -= texOverlapx2; // ignore texture border since we are using effective texure size (by subtracting 2 from the initial size)
+    if (textureRectangle)
+    {
+        // count number of full textures
+        while (textureDimension > (bitValue - texOverlapx2)) // while our texture dimension is greater than effective texture size (i.e., minus the border)
+        {
+            i++; // count a texture
+            textureDimension -= bitValue - texOverlapx2; // remove effective texture size
+        }
+        // add one partial texture
+        i++; 
+    }
+    else
+    {
+        do
+        {
+            while (textureDimension >= (bitValue - texOverlapx2)) // while our texture dimension is greater than effective texture size (i.e., minus the border)
+            {
+                i++; // count a texture
+                textureDimension -= bitValue - texOverlapx2; // remove effective texture size
+            }
+        }
+        while ((bitValue >>= 1) > texOverlapx2); // step down to next texture while we are greater than two (less than 4 can't be used due to 2 pixel overlap)
+    if (textureDimension > 0x0) // if any textureDimension is left there is an error, because we can't texture these small segments and in anycase should not have image pixels left
+        ReportErrorNum ("GetTextureNumFromTextureDim error: Texture to small to draw, should not ever get here, texture size remaining:", textureDimension);
+    }
+    return i; // return textures counted
+} 
+
+#pragma mark -
+// ==================================
+// public
+
+// disposes OpenGL context, and associated texture list
+
+OSStatus DisposeGLForWindow (WindowRef window)
+{
+    if (window)
+    {
+        pRecImage pWindowInfo = (pRecImage) GetWRefCon (window); // get gl data stored in refcon
+        SetWRefCon (window, 0); // ensure the refcon is not used again
+        if (NULL == pWindowInfo) // if this is non-existant
+            return paramErr; // then drop out
+        if (NULL != pWindowInfo->aglContext)
+        {
+            aglSetCurrentContext (pWindowInfo->aglContext); // ensaure the context we are working with is set to current
+            aglUpdateContext (pWindowInfo->aglContext); // ensaure the context we are working with is set to current
+            glFinish (); // ensure all gl commands are complete
+            glDeleteTextures (pWindowInfo->textureX * pWindowInfo->textureY, pWindowInfo->pTextureName); // delete the complete set of textures used for the window
+            DestroyGLFromWindow (&pWindowInfo->aglContext, &pWindowInfo->glInfo); // preoperly destroy GL context and any associated structures
+            pWindowInfo->aglContext = NULL; // ensure we don't use invlad context
+        }
+        if (NULL != pWindowInfo->pTextureName)
+        {
+            DisposePtr ((Ptr) pWindowInfo->pTextureName); // dispose of the allocate4d texture name storage
+            pWindowInfo->pTextureName = NULL; // ensure we do not use it again
+        }
+        if (pWindowInfo->pImageBuffer) // MUST preserve the buffer if texturing from client memory
+        {
+            //DisposePtr ((Ptr) pWindowInfo->pImageBuffer); // or image buffer
+            pWindowInfo->pImageBuffer = NULL;
+        }
+        DisposePtr ((Ptr) pWindowInfo);
+        return noErr; // we are good to go
+    }
+    else
+        return paramErr; // NULL window ref passed in
+}
+
+// ---------------------------------
+
+// builds the GL context and associated state for the window
+// loads image into a texture or textures
+// disposes of GWorld and image buffer when finished loading textures
+
+OSStatus BuildGLForWindow (WindowRef window)
+{
+    GrafPtr portSave = NULL; // port which is set on entrance to this routine
+    pRecImage pWindowInfo = (pRecImage) GetWRefCon (window); // the info structure for the window stored in the refcon
+    short i; // iterator
+    GLenum textureTarget = GL_TEXTURE_2D;
+   
+    if (!pWindowInfo->aglContext) // if we get here and do not have a context built, build one
+    {
+        GetPort (&portSave);    // save current port
+        SetPort ((GrafPtr) GetWindowPort (window)); // set port to the current window
+        // set parameters for Carbon SetupGL
+        pWindowInfo->glInfo.fAcceleratedMust = false; // must renderer be accelerated?
+        pWindowInfo->glInfo.VRAM = 0 * 1048576; // minimum VRAM (if not zero this is always required)
+        pWindowInfo->glInfo.textureRAM = 0 * 1048576; // minimum texture RAM (if not zero this is always required)
+           pWindowInfo->glInfo.fDraggable = true; // is this a draggable window
+        pWindowInfo->glInfo.fmt = 0; // output pixel format
+        
+        i = 0; // first attribute in array
+        pWindowInfo->glInfo.aglAttributes [i++] = AGL_RGBA; // RGB + Alpha pixels
+        pWindowInfo->glInfo.aglAttributes [i++] = AGL_DOUBLEBUFFER; // doble buffered context
+        pWindowInfo->glInfo.aglAttributes [i++] = AGL_ACCELERATED; // require hardware acceleration
+        pWindowInfo->glInfo.aglAttributes [i++] = AGL_NO_RECOVERY; // 10.0.4 has problems with the GL (disregards UNPACK_ROW_LENGTH) resulting from using no recovery
+                                                                   // normally we would use no recovery to ensure the minimum pixel size textures are stored by GL.
+        pWindowInfo->glInfo.aglAttributes [i++] = AGL_NONE; // end parameter list
+        BuildGLonWindow (window, &(pWindowInfo->aglContext), &(pWindowInfo->glInfo), NULL); // build opengl context for our window
+        if (!pWindowInfo->aglContext) // if could not create context
+            DestroyGLFromWindow (&pWindowInfo->aglContext, &pWindowInfo->glInfo); // ensure context is destroyed correctly
+        else // we have a valid context
+        {
+            GLint swap = 0; // swap interval (i.e., VBL sync) setting 1 = sync, 0 = no sync
+            Rect rectPort; // window port rectangle
+            long width = pWindowInfo->imageWidth, height = pWindowInfo->imageHeight; // image width and height
+            GDHandle device; // GDevice to find the constrain the window to
+            Rect deviceRect, availRect, rect; // rect of device which window is on (mostly, area wise at least). avialable area for window (minus dock and menu if req), working rect
+
+            GetWindowGreatestAreaDevice (window, kWindowContentRgn, &device, &deviceRect); // find device the window is mostly on
+            GetAvailableWindowPositioningBounds (device, &availRect); //  get the geretest available area for te windoew (mminus doc and menu if applicable)
+            if (width > (availRect.right - availRect.left)) // adjust window width if it is greater than available area (orginally set to image width, see above)
+                width = (availRect.right - availRect.left);
+            if (height > (availRect.bottom - availRect.top)) // adjust window height if it is greater than available area (orginally set to image width, see above)
+                height = (availRect.bottom - availRect.top);
+            SizeWindow (window, (short) width, (short) height, true); // size the window to new width and height
+            ConstrainWindowToScreen(window, kWindowStructureRgn, kWindowConstrainMayResize, NULL, &rect); // ensure window structure region is on the screen
+            GetWindowPortBounds (window, &rectPort); // get port rect for viewport reset
+
+            aglSetCurrentContext (pWindowInfo->aglContext); // set our GL context to this one
+            aglUpdateContext (pWindowInfo->aglContext); // update the context to account for the resize
+            InvalWindowRect (window, &rectPort); // inval the entire window to ensure we get a redraw
+            glViewport (0, 0, rectPort.right - rectPort.left, rectPort.bottom - rectPort.top); // reset viewport to entier window area
+
+            aglSetInteger (pWindowInfo->aglContext, AGL_SWAP_INTERVAL, &swap); // set swap interval to account for vbl syncing or not
+            
+            // set correct texture target // if building on 10.0 or 9 this will be undefined
+        #ifdef GL_TEXTURE_RECTANGLE_EXT
+            if (pWindowInfo->fNPOTTextures)
+                textureTarget = GL_TEXTURE_RECTANGLE_EXT;
+        #endif
+            
+            // Set texture mapping parameters
+            glEnable (textureTarget); // enable texturing
+                
+            glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // set clear color buffer to dark gray
+            glClear (GL_COLOR_BUFFER_BIT); // clear just to color buffer
+            aglSwapBuffers (pWindowInfo->aglContext); // swap the cleared buffer to front
+    
+            //GetFNum ("\pMonaco", &fNum); // get font number for named font
+            //pWindowInfo->fontList = BuildFontGL (pWindowInfo->aglContext, fNum, normal, 9); // build display list for fonts for this context (see aglString for more info)
+            
+            // if we can use texture rectangle // if building on 10.0 or 9 this will be undefined
+        #ifdef GL_TEXTURE_RECTANGLE_EXT
+            if (pWindowInfo->fNPOTTextures)
+                glEnable(GL_TEXTURE_RECTANGLE_EXT);
+        #endif
+            if (pWindowInfo->fAGPTexturing)
+                glTextureRangeAPPLE(textureTarget, pWindowInfo->textureHeight * pWindowInfo->textureWidth * (pWindowInfo->imageDepth >> 3), pWindowInfo->pImageBuffer);
+            glPixelStorei (GL_UNPACK_ROW_LENGTH, pWindowInfo->textureWidth); // set image width in groups (pixels), accounts for border this ensures proper image alignment row to row
+            // get number of textures x and y
+                // extract the number of horiz. textures needed to tile image
+            pWindowInfo->textureX = GetTextureNumFromTextureDim (pWindowInfo->textureWidth, pWindowInfo->maxTextureSize, pWindowInfo->fOverlapTextures, pWindowInfo->fNPOTTextures); 
+                // extract the number of horiz. textures needed to tile image
+            pWindowInfo->textureY = GetTextureNumFromTextureDim (pWindowInfo->textureHeight, pWindowInfo->maxTextureSize, pWindowInfo->fOverlapTextures, pWindowInfo->fNPOTTextures); 
+            pWindowInfo->pTextureName = (GLuint *) NewPtrClear ((long) sizeof (GLuint) * pWindowInfo->textureX * pWindowInfo->textureY); // allocate storage for texture name lists
+            glGenTextures (pWindowInfo->textureX * pWindowInfo->textureY, pWindowInfo->pTextureName); // generate textures names need to support tiling
+            {
+                long x, y, k = 0, offsetY, offsetX = 0, currWidth, currHeight; // texture iterators, texture name iterator, image offsets for tiling, current texture width and height
+                for (x = 0; x < pWindowInfo->textureX; x++) // for all horizontal textures
+                {
+                    currWidth = GetNextTextureSize (pWindowInfo->textureWidth - offsetX, pWindowInfo->maxTextureSize, pWindowInfo->fNPOTTextures); // use remaining to determine next texture size 
+                                                                                                                    // (basically greatest power of 2 which fits into remaining space)
+                    offsetY = 0; // reset vertical offest for every column
+                    for (y = 0; y < pWindowInfo->textureY; y++) // for all vertical textures
+                    {
+                        // buffer pointer is at base + rows * row size + columns
+                        unsigned char * pBuffer = pWindowInfo->pImageBuffer + 
+                                                   offsetY * pWindowInfo->textureWidth * (pWindowInfo->imageDepth >> 3) + 
+                                                   offsetX * (pWindowInfo->imageDepth >> 3);
+                        currHeight = GetNextTextureSize (pWindowInfo->textureHeight - offsetY, pWindowInfo->maxTextureSize, pWindowInfo->fNPOTTextures); // use remaining to determine next texture size
+                        glBindTexture (textureTarget, pWindowInfo->pTextureName[k++]);
+                        if (pWindowInfo->fAGPTexturing) {
+                            glTexParameterf (textureTarget, GL_TEXTURE_PRIORITY, 0.0f); // AGP texturing
+                            glTexParameteri (textureTarget, GL_TEXTURE_STORAGE_HINT_APPLE, GL_STORAGE_SHARED_APPLE);
+                        }
+                        else
+                            glTexParameterf (textureTarget, GL_TEXTURE_PRIORITY, 1.0f);
+                            
+                    #ifdef GL_UNPACK_CLIENT_STORAGE_APPLE
+                        if (pWindowInfo->fClientTextures)
+                            glPixelStorei (GL_UNPACK_CLIENT_STORAGE_APPLE, 1);
+                        else
+                            glPixelStorei (GL_UNPACK_CLIENT_STORAGE_APPLE, 0);
+                    #endif
+
+                        glTexParameteri (textureTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+                        glTexParameteri (textureTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+                        glTexParameteri (textureTarget, GL_TEXTURE_WRAP_S, gpOpenGLCaps->edgeClampParam);
+                        glTexParameteri (textureTarget, GL_TEXTURE_WRAP_T, gpOpenGLCaps->edgeClampParam);
+                        glReportError (); // report any errors so far
+                        glTexImage2D (textureTarget, 0, GL_RGBA, currWidth, currHeight, 0, 
+                                      GL_BGRA_EXT, pWindowInfo->imageDepth == 32 ? GL_UNSIGNED_INT_8_8_8_8_REV : GL_UNSIGNED_SHORT_1_5_5_5_REV, 
+                                      pBuffer); // texture with current width and height at pBuffer location in image buffer with image size as GL_UNPACK_ROW_LENGTH
+                        glReportError (); // report any errors
+                        offsetY += currHeight - 2 * pWindowInfo->fOverlapTextures; // offset in for the amount of texture used, 
+                                                                                       //  since we are overlapping the effective texture used is 2 texels less than texture width
+                    }
+                    offsetX += currWidth - 2 * pWindowInfo->fOverlapTextures; // offset in for the amount of texture used, 
+                                                                              //  since we are overlapping the effective texture used is 2 texels less than texture width
+                }
+            }
+            if (false == pWindowInfo->fClientTextures) // MUST preserve the buffer if texturing from client memory
+            {
+                DisposePtr ((Ptr) pWindowInfo->pImageBuffer); // or image buffer
+                pWindowInfo->pImageBuffer = NULL;
+            }
+        }
+        SetPort (portSave); //reset port
+    }
+    return noErr; // we done
+}
+
+// ---------------------------------
+
+// Handle updating context for window moves and resizing
+
+OSStatus ResizeMoveGLWindow (WindowRef window)
+{
+    OSStatus err = noErr; // no errors to start
+    Rect rectPort; // new port rect
+    pRecImage pWindowInfo = (pRecImage) GetWRefCon (window); // get GL info;
+    if (window && pWindowInfo) // if we have a window
+    {
+        GetWindowPortBounds (window, &rectPort);
+        pWindowInfo->zoomX = (float) (rectPort.right - rectPort.left) / (float) pWindowInfo->imageWidth;
+        pWindowInfo->zoomY = (float) (rectPort.bottom - rectPort.top) / (float) pWindowInfo->imageHeight;
+
+        if (!aglUpdateContext (pWindowInfo->aglContext)) // update the context to ensure gl knows about the move or resize
+               aglReportError (); // report any error with update context
+        if (noErr != err)
+            ReportErrorNum ("ResizeMoveGLWindow error with InvalWindowRect on window: ", err);  // should not get erro here, but who knows
+        err = InvalWindowRect (window, &rectPort);
+    }
+    else
+        err = paramErr; // bad window
+    return err; // return any error 
+}
+
+// ---------------------------------
+
+// main GL drawing routine, should be valid window passed in (will setupGL if require).  Draw image
+
+void DrawGL (WindowRef window)
+{
+    Rect rectPort; // rectangle for port
+    pRecImage pWindowInfo; // the gl info for the target window 
+    long width, height; // width and height or the port and the row of the raster position
+    long effectiveTextureMod = 0; // texture size modification (inset) to account for borders
+    long x, y, k = 0, offsetY, offsetX = 0, currTextureWidth, currTextureHeight;
+    GLenum textureTarget = GL_TEXTURE_2D;
+    
+    if (NULL == window) // if we do not have a window
+        return; // drop out
+    pWindowInfo = (pRecImage) GetWRefCon (window); // get the gl info for the window
+    if (NULL == pWindowInfo) // if this is non-existant
+        return; // then drop out
+    if (NULL == pWindowInfo->aglContext) // try to buld the context if we don't have one (safety check)
+        BuildGLForWindow (window);
+    if (NULL == pWindowInfo->aglContext) // if we still don't have one then drop out
+        return;
+        
+    if (pWindowInfo->fOverlapTextures)
+        effectiveTextureMod = 2; // if we overlap then we need to inset the textures passed to the drawing code
+    // set texture target
+#ifdef GL_TEXTURE_RECTANGLE_EXT
+    if (pWindowInfo->fNPOTTextures)
+        textureTarget = GL_TEXTURE_RECTANGLE_EXT;
+#endif
+
+    aglSetCurrentContext (pWindowInfo->aglContext); // ensaure the context we are working with is set to current
+    aglUpdateContext (pWindowInfo->aglContext); // ensaure the context we are working with is set to current
+
+    GetWindowPortBounds (window, &rectPort); // get the current port (window) bounds
+    width = rectPort.right - rectPort.left; // find width
+    height = rectPort.bottom - rectPort.top; // and height
+    glViewport (0, 0, width, height); // set the viewport to cover entire window
+    
+    glMatrixMode (GL_PROJECTION); // set projection matrix
+    glLoadIdentity (); // to indetity
+    glMatrixMode (GL_MODELVIEW); // set modelview matrix
+    glLoadIdentity (); // to identity
+    glReportError (); // report any GL errors so far
+    
+    // set the model view matrix for an orthographic view scaled to one screen pixel equal image pixel (independent of image zoom)
+    glScalef (2.0f / width, -2.0f /  height, 1.0f); // scale to port per pixel scale
+    //glTranslatef (pWindowInfo->centerX, pWindowInfo->centerY, 0.0f); // translate for image movement
+    //glRotatef (0.0f, 0.0f, 0.0f, 1.0f); // ratate matrix for image rotation
+    glReportError (); // report any GL errors
+    
+    glClear (GL_COLOR_BUFFER_BIT); // clear the color buffer before drawing
+
+    // draw image
+    glEnable (textureTarget); // enable texturing
+    glColor3f (1.0f, 1.0f, 1.0f); // white polygons
+    // offset x and y are used to draw the polygon and need to represent the texture effective edges (without borders)
+    // so walk the texture size images adjusting for each border
+    for (x = 0; x < pWindowInfo->textureX; x++) // for all horizontal textures
+    {
+        // use remaining to determine next texture size
+        currTextureWidth = GetNextTextureSize (pWindowInfo->textureWidth - offsetX, pWindowInfo->maxTextureSize, pWindowInfo->fNPOTTextures) - effectiveTextureMod; // current effective texture width for drawing
+        offsetY = 0; // start at top
+        for (y = 0; y < pWindowInfo->textureY; y++) // for a complete column
+        {
+            // use remaining to determine next texture size
+            currTextureHeight = GetNextTextureSize (pWindowInfo->textureHeight - offsetY, pWindowInfo->maxTextureSize, pWindowInfo->fNPOTTextures) - effectiveTextureMod; // effective texture height for drawing
+            glBindTexture(textureTarget, pWindowInfo->pTextureName[k++]); // work through textures in same order as stored, setting each texture name as current in turn
+            if (!pWindowInfo->fAGPTexturing)
+                glTexSubImage2D(textureTarget, 0, 0, 0, currTextureWidth, currTextureHeight, GL_BGRA, pWindowInfo->imageDepth == 32 ? GL_UNSIGNED_INT_8_8_8_8_REV : GL_UNSIGNED_SHORT_1_5_5_5_REV, pWindowInfo->pImageBuffer);
+            glReportError (); // report any errors
+            {
+                float endX = pWindowInfo->fTileTextures ? currTextureWidth + offsetX : pWindowInfo->imageWidth;
+                float endY = pWindowInfo->fTileTextures ? currTextureHeight + offsetY : pWindowInfo->imageHeight;
+                float startXDraw = (offsetX - pWindowInfo->imageWidth * 0.5f) * pWindowInfo->zoomX; // left edge of poly: offset is in image local coordinates convert to world coordinates
+                float endXDraw = (endX - pWindowInfo->imageWidth * 0.5f) * pWindowInfo->zoomX; // right edge of poly: offset is in image local coordinates convert to world coordinates
+                float startYDraw = (offsetY - pWindowInfo->imageHeight * 0.5f) * pWindowInfo->zoomY; // top edge of poly: offset is in image local coordinates convert to world coordinates
+                float endYDraw = (endY - pWindowInfo->imageHeight * 0.5f) * pWindowInfo->zoomY; // bottom edge of poly: offset is in image local coordinates convert to world coordinates
+                float texOverlap =  pWindowInfo->fOverlapTextures ? 1.0f : 0.0f; // size of texture overlap, switch based on whether we are using overlap or not
+                float startXTexCoord = texOverlap / (currTextureWidth + 2.0f * texOverlap); // texture right edge coordinate (stepped in one pixel for border if required)
+                float endXTexCoord = 1.0f - startXTexCoord; // texture left edge coordinate (stepped in one pixel for border if required)
+                float startYTexCoord = texOverlap / (currTextureHeight + 2.0f * texOverlap); // texture top edge coordinate (stepped in one pixel for border if required)
+                float endYTexCoord = 1.0f - startYTexCoord; // texture bottom edge coordinate (stepped in one pixel for border if required)
+                if (pWindowInfo->fNPOTTextures)
+                {
+                    startXTexCoord = texOverlap; // texture right edge coordinate (stepped in one pixel for border if required)
+                    endXTexCoord = currTextureWidth + texOverlap; // texture left edge coordinate (stepped in one pixel for border if required)
+                    startYTexCoord = texOverlap; // texture top edge coordinate (stepped in one pixel for border if required)
+                    endYTexCoord = currTextureHeight + texOverlap; // texture bottom edge coordinate (stepped in one pixel for border if required)
+                }
+                if (endX > (pWindowInfo->imageWidth + 0.5)) // handle odd image sizes, (+0.5 is to ensure there is no fp resolution problem in comparing two fp numbers)
+                {
+                    endXDraw = (pWindowInfo->imageWidth * 0.5f) * pWindowInfo->zoomX; // end should never be past end of image, so set it there
+                    if (pWindowInfo->fNPOTTextures)
+                        endXTexCoord -= 1.0f;
+                    else
+                        endXTexCoord = 1.0f -  2.0f * startXTexCoord; // for the last texture in odd size images there are two texels of padding so step in 2
+                }
+                if (endY > (pWindowInfo->imageHeight + 0.5f)) // handle odd image sizes, (+0.5 is to ensure there is no fp resolution problem in comparing two fp numbers)
+                {
+                    endYDraw = (pWindowInfo->imageHeight * 0.5f) * pWindowInfo->zoomY; // end should never be past end of image, so set it there
+                    if (pWindowInfo->fNPOTTextures)
+                        endYTexCoord -= 1.0f;
+                    else
+                        endYTexCoord = 1.0f -  2.0f * startYTexCoord; // for the last texture in odd size images there are two texels of padding so step in 2
+                }
+                
+                glBegin (GL_TRIANGLE_STRIP); // draw either tri strips of line strips
+                    glTexCoord2f (startXTexCoord, startYTexCoord); // draw upper left in world coordinates
+                    glVertex3d (startXDraw, startYDraw, 0.0);
+
+                    glTexCoord2f (endXTexCoord, startYTexCoord); // draw lower left in world coordinates
+                    glVertex3d (endXDraw, startYDraw, 0.0);
+
+                    glTexCoord2f (startXTexCoord, endYTexCoord); // draw upper right in world coordinates
+                    glVertex3d (startXDraw, endYDraw, 0.0);
+
+                    glTexCoord2f (endXTexCoord, endYTexCoord); // draw lower right in world coordinates
+                    glVertex3d (endXDraw, endYDraw, 0.0);
+                glEnd();
+                
+            }
+
+            //////////////////////
+
+            glReportError (); // report any errors
+            offsetY += currTextureHeight; // offset drawing position for next texture vertically
+        }
+        offsetX += currTextureWidth; // offset drawing position for next texture horizontally
+    }
+    glReportError (); // report any errors
+
+    glDisable (textureTarget); // done with texturing
+        
+    aglSwapBuffers (pWindowInfo->aglContext);
+}
+
+// finds the minimum OpenGL capabilites across all displays and GPUs attached to machine.
+
+static void FindMinimumOpenGLCapabilities (pRecGLCap pOpenGLCaps)
+{
+    WindowPtr pWin = NULL; 
+    Rect rectWin = {0, 0, 10, 10};
+    GLint attrib[] = { AGL_RGBA, AGL_NONE };
+    AGLPixelFormat fmt = NULL;
+    AGLContext ctx = NULL;
+    GLint deviceMaxTextureSize = 0, NPOTDMaxTextureSize = 0;
+    
+    if (NULL != gpOpenGLCaps)
+    {
+        // init desired caps to max values
+        pOpenGLCaps->f_ext_texture_rectangle = true;
+        pOpenGLCaps->f_ext_client_storage = true;
+        pOpenGLCaps->f_ext_packed_pixel = true;
+        pOpenGLCaps->f_ext_texture_edge_clamp = true;
+        pOpenGLCaps->f_gl_texture_edge_clamp = true;
+        pOpenGLCaps->maxTextureSize = 0x7FFFFFFF;
+        pOpenGLCaps->maxNOPTDTextureSize = 0x7FFFFFFF;
+
+        // build window
+        pWin = NewCWindow (0L, &rectWin, NULL, false,
+                plainDBox, (WindowPtr) -1L, true, 0L);
+                
+        // build context
+        fmt = aglChoosePixelFormat(NULL, 0, attrib);
+        if (fmt)
+            ctx = aglCreateContext(fmt, NULL);
+        if (ctx)
+        {
+            GDHandle hgdNthDevice;
+            
+            aglSetDrawable(ctx, GetWindowPort (pWin));
+            aglSetCurrentContext(ctx);
+            
+            // for each display
+            hgdNthDevice = GetDeviceList ();
+            while (hgdNthDevice)
+            {
+                if (TestDeviceAttribute (hgdNthDevice, screenDevice))
+                    if (TestDeviceAttribute (hgdNthDevice, screenActive))
+                    {
+                        // move window to display
+                        MoveWindow (pWin, (**hgdNthDevice).gdRect.left + 5, (**hgdNthDevice).gdRect.top + 5, false);
+                        aglUpdateContext(ctx);
+                        
+                        // for each cap (this can obviously be expanded)
+                        // if this driver/GPU/display is less capable
+                            // save this minimum capability
+                        {
+                            // get strings
+                            enum { kShortVersionLength = 32 };
+                            const GLubyte * strVersion = glGetString (GL_VERSION); // get version string
+                            const GLubyte * strExtension = glGetString (GL_EXTENSIONS);    // get extension string
+                            
+                            // get just the non-vendor specific part of version string
+                            GLubyte strShortVersion [kShortVersionLength];
+                            short i = 0;
+                            while ((((strVersion[i] <= '9') && (strVersion[i] >= '0')) || (strVersion[i] == '.')) && (i < kShortVersionLength)) // get only basic version info (until first space)
+                                strShortVersion [i] = strVersion[i++];
+                            strShortVersion [i] = 0; //truncate string
+                            
+                            // compare capabilities based on extension string and GL version
+                            pOpenGLCaps->f_ext_texture_rectangle = 
+                                pOpenGLCaps->f_ext_texture_rectangle && (NULL != strstr ((const char *) strExtension, "GL_EXT_texture_rectangle"));
+                            pOpenGLCaps->f_ext_client_storage = 
+                                pOpenGLCaps->f_ext_client_storage && (NULL != strstr ((const char *) strExtension, "GL_APPLE_client_storage"));
+                            pOpenGLCaps->f_ext_packed_pixel = 
+                                pOpenGLCaps->f_ext_packed_pixel && (NULL != strstr ((const char *) strExtension, "GL_APPLE_packed_pixel"));
+                            pOpenGLCaps->f_ext_texture_edge_clamp = 
+                                pOpenGLCaps->f_ext_texture_edge_clamp && (NULL != strstr ((const char *) strExtension, "GL_SGIS_texture_edge_clamp"));
+                            pOpenGLCaps->f_gl_texture_edge_clamp = 
+                                pOpenGLCaps->f_gl_texture_edge_clamp && (!strstr ((const char *) strShortVersion, "1.0") && !strstr ((const char *) strShortVersion, "1.1")); // if not 1.0 and not 1.1 must be 1.2 or greater
+                            
+                            // get device max texture size
+                            glGetIntegerv (GL_MAX_TEXTURE_SIZE, &deviceMaxTextureSize);
+                            if (deviceMaxTextureSize < pOpenGLCaps->maxTextureSize)
+                                pOpenGLCaps->maxTextureSize = deviceMaxTextureSize;
+                            // get max size of non-power of two texture on devices which support
+                            if (NULL != strstr ((const char *) strExtension, "GL_EXT_texture_rectangle"))
+                            {
+                            #ifdef GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT
+                                glGetIntegerv (GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT, &NPOTDMaxTextureSize);
+                                if (NPOTDMaxTextureSize < pOpenGLCaps->maxNOPTDTextureSize)
+                                    pOpenGLCaps->maxNOPTDTextureSize = NPOTDMaxTextureSize;
+                            #endif
+                            }
+                        }
+                        // next display
+                        hgdNthDevice = GetNextDevice(hgdNthDevice);
+                    }
+            }
+            aglDestroyContext( ctx );
+        }
+        else
+        { // could not build context set caps to min
+            pOpenGLCaps->f_ext_texture_rectangle = false;
+            pOpenGLCaps->f_ext_client_storage = false;
+            pOpenGLCaps->f_ext_packed_pixel = false;
+            pOpenGLCaps->f_ext_texture_edge_clamp = false;
+            pOpenGLCaps->f_gl_texture_edge_clamp = false;
+            pOpenGLCaps->maxTextureSize = 0;
+        }
+        
+        // set clamp param based on retrieved capabilities
+        if (pOpenGLCaps->f_gl_texture_edge_clamp) // if OpenGL 1.2 or later and texture edge clamp is supported natively
+                    pOpenGLCaps->edgeClampParam = GL_CLAMP_TO_EDGE;  // use 1.2+ constant to clamp texture coords so as to not sample the border color
+        else if (pOpenGLCaps->f_ext_texture_edge_clamp) // if GL_SGIS_texture_edge_clamp extension supported
+            pOpenGLCaps->edgeClampParam = GL_CLAMP_TO_EDGE_SGIS; // use extension to clamp texture coords so as to not sample the border color
+        else
+            pOpenGLCaps->edgeClampParam = GL_CLAMP; // clamp texture coords to [0, 1]
+
+        aglDestroyPixelFormat( fmt );
+        DisposeWindow( pWin );
+    }
+}
+
+//--------------------------------------------------------------------------------------------
+
+static OSStatus
+WindowEventHandler( EventHandlerCallRef inCaller, EventRef inEvent, void* inRefcon )
+{
+    OSStatus    err = eventNotHandledErr;
+    WindowRef    window = (WindowRef) inRefcon;
+
+    if( GetEventClass(inEvent) == kEventClassMouse )
+    {
+        Point mousePoint; // UInt32 modifiers;
+        verify_noerr( GetEventParameter(inEvent, kEventParamMouseLocation, typeQDPoint, NULL, sizeof(Point), NULL, &mousePoint) );
+        pRecImage pWindowInfo = (pRecImage) GetWRefCon (window); // get the gl info for the window
+        if(pWindowInfo) {
+            SetPortWindowPort(window);
+            GlobalToLocal (&mousePoint); //convert mouse coordinates to local coordintes prior to recording
+            mousePoint.h /= pWindowInfo->zoomX; mousePoint.v /= pWindowInfo->zoomY;
+            if(mousePoint.h >= 0 && mousePoint.h < pWindowInfo->imageWidth && mousePoint.v >= 0 && mousePoint.v < pWindowInfo->imageHeight)
+                g_video->on_mouse(mousePoint.h, mousePoint.v, GetEventKind(inEvent) == kEventMouseUp?-1:1), err = noErr;
+        }
+    }
+    else if( GetEventClass(inEvent) == kEventClassKeyboard )
+    {
+        char ch;
+        verify_noerr( GetEventParameter( inEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof( ch ), NULL, &ch ) );
+        if(g_video)
+            g_video->on_key(ch);
+    }
+    else //if( GetEventClass(inEvent) == kEventClassWindow )
+    {
+        if (GetEventKind(inEvent) == kEventWindowDrawContent)
+        {
+            //DrawGL(window);
+            err = noErr;
+        }
+        else if (GetEventKind(inEvent) == kEventWindowClose)
+        {
+            if (window)
+            {
+                g_video->running = false;
+            }
+            err = noErr;
+        }
+        else if (GetEventKind(inEvent) == kEventWindowShowing)
+        {
+            err = BuildGLForWindow (window);
+        }
+        else if ((GetEventKind(inEvent) == kEventWindowResizeCompleted) || (GetEventKind(inEvent) == kEventWindowDragCompleted))
+        {
+            err = ResizeMoveGLWindow (window);
+        }
+        else if (GetEventKind(inEvent) == kEventWindowZoomed)
+        {
+            err = ResizeMoveGLWindow (window);
+        }
+    }
+    
+    return err;
+}
+//--------------------------------------------------------------------------------------------
+DEFINE_ONE_SHOT_HANDLER_GETTER( WindowEventHandler )
+
+//--------------------------------------------------------------------------------------------
+WindowRef HandleNew()
+{
+    OSStatus  err;
+    WindowRef window;
+    pRecImage pWindowInfo = NULL;
+    static const EventTypeSpec    kWindowEvents[] =
+    {
+       { kEventClassMouse, kEventMouseUp },
+       { kEventClassMouse, kEventMouseDown },
+       { kEventClassKeyboard, kEventRawKeyDown },
+//       { kEventClassCommand, kEventCommandProcess },
+       { kEventClassWindow, kEventWindowShowing },
+       { kEventClassWindow, kEventWindowClose },
+       { kEventClassWindow, kEventWindowDrawContent },
+       { kEventClassWindow, kEventWindowResizeCompleted },
+       { kEventClassWindow, kEventWindowDragCompleted },
+       { kEventClassWindow, kEventWindowZoomed}
+    };
+    if (!gpOpenGLCaps)
+    {
+        gpOpenGLCaps = (pRecGLCap) NewPtrClear (sizeof (recGLCap));
+        FindMinimumOpenGLCapabilities (gpOpenGLCaps);
+    }
+
+    // Create a window. "MainWindow" is the name of the window object. This name is set in 
+    // InterfaceBuilder when the nib is created.
+    err = CreateWindowFromNib( sNibRef, CFSTR("MainWindow"), &window );
+    require_noerr( err, CantCreateWindow );
+    // We don't need the nib reference anymore.
+    DisposeNibReference(sNibRef);
+    
+    pWindowInfo = (recImage *) NewPtrClear (sizeof (recImage));
+    pWindowInfo->textureWidth = pWindowInfo->imageWidth = g_sizex;
+    pWindowInfo->textureHeight = pWindowInfo->imageHeight = g_sizey;
+    pWindowInfo->imageDepth = 32;
+    pWindowInfo->fTileTextures = true;
+    pWindowInfo->fOverlapTextures = false; // TODO: ???
+    pWindowInfo->maxTextureSize = gpOpenGLCaps->maxTextureSize;
+    pWindowInfo->fNPOTTextures = gpOpenGLCaps->f_ext_texture_rectangle;
+    pWindowInfo->fClientTextures = gpOpenGLCaps->f_ext_client_storage; // texture from client memory if available
+    pWindowInfo->fAGPTexturing = true; // if AGP texturing selected
+    pWindowInfo->pImageBuffer = (unsigned char*) g_pImg;
+    // set default parameters for this image
+    pWindowInfo->zoomX = 1.0f; // pixel 1 to 1 size
+    pWindowInfo->zoomY = 1.0f; // pixel 1 to 1 size
+    SetWRefCon (window, (long) pWindowInfo);
+    char buffer[256]; buffer[0] = snprintf(buffer+1, 255, "%s", g_video->title);
+    SetWTitle (window, (ConstStr255Param)buffer);
+    // Install a command handler on the window. We don't use this handler yet, but nearly all
+    // Carbon apps will need to handle commands, so this saves everyone a little typing.
+    InstallStandardEventHandler(GetWindowEventTarget(window));
+    InstallWindowEventHandler( window, GetWindowEventHandlerUPP(),
+                               GetEventTypeCount( kWindowEvents ), kWindowEvents, window, NULL );
+    if (noErr != BuildGLForWindow (window))
+    {
+        DisposeGLForWindow (window);
+        DisposeWindow (window);
+        return 0;
+    }
+
+    // Position new windows in a staggered arrangement on the main screen
+    RepositionWindow( window, NULL, kWindowCascadeOnMainScreen );
+    
+    // The window was created hidden, so show it
+    ShowWindow( window );
+    return window;
+  
+CantCreateWindow:
+    return 0;
+}
+
+
+//--------------------------------------------------------------------------------------------
+static OSStatus
+AppEventHandler( EventHandlerCallRef inCaller, EventRef inEvent, void* inRefcon )
+{
+    OSStatus    result = eventNotHandledErr;
+
+    return result;
+}
+
+//=======================================================================================================
+
+video::video()
+    : red_mask(0xff0000), red_shift(16), green_mask(0xff00),
+      green_shift(8), blue_mask(0xff), blue_shift(0), depth(24)
+{
+    assert(g_video == 0);
+    g_video = this; title = "Video"; updating = true; calc_fps = false;
+}
+
+bool video::init_window(int x, int y)
+{
+    g_sizex = x; g_sizey = y; g_window = 0;
+    g_pImg = new unsigned int[x*y];
+
+    // Check for graphics availability
+    if( CGGetOnlineDisplayList(0, NULL, NULL) ) {
+        running = true; // console mode
+        return false;
+    }
+
+    OSStatus                    err;
+    static const EventTypeSpec    kAppEvents[] =
+    {
+        { kEventClassCommand, kEventCommandProcess }
+    };
+
+    // Create a Nib reference, passing the name of the nib file (without the .nib extension).
+    // CreateNibReference only searches into the application bundle.
+    err = CreateNibReference( CFSTR("main"), &sNibRef );
+    require_noerr( err, ReturnLabel );
+
+    // Install our handler for common commands on the application target
+    // Register for standard event handlers
+    InstallStandardEventHandler(GetApplicationEventTarget()); // Doesn't work?
+    verify_noerr( InstallApplicationEventHandler( NewEventHandlerUPP( AppEventHandler ),
+                                    GetEventTypeCount( kAppEvents ), kAppEvents, 0, NULL ) );
+    
+    // Once the nib reference is created, set the menu bar. "MainMenu" is the name of the menu bar
+    // object. This name is set in InterfaceBuilder when the nib is created.
+    //err = SetMenuBarFromNib( sNibRef, CFSTR("MenuBar") );
+    //require_noerr( err, ReturnLabel );
+    InstallStandardEventHandler(GetMenuEventTarget(AcquireRootMenu()));
+
+    // Create a new window. A full-fledged application would do this from an AppleEvent handler for kAEOpenApplication.
+    g_window = HandleNew();
+
+ReturnLabel:
+    return running = g_window != 0;
+}
+
+bool video::init_console()
+{
+    running = true;
+    return true;
+}
+
+void video::terminate()
+{
+    g_video = 0; running = false;
+    if(g_pImg) { delete[] g_pImg; g_pImg = 0; }
+    if(g_window) {
+        DisposeGLForWindow (g_window);
+        DisposeWindow (g_window);
+        g_window = 0;
+    }
+}
+
+video::~video()
+{
+    if(g_video) terminate();
+}
+
+//! Count and display FPS count in titlebar
+bool video::next_frame()
+{
+       if(!running) return false;
+       if(!g_window) return running;
+    //! try acquire mutex if threaded code, returns on failure
+    if(threaded && pthread_mutex_trylock(&g_mutex))
+        return running;
+    g_fps++;
+    struct timezone tz; struct timeval now_time; gettimeofday(&now_time, &tz);
+    double sec = (now_time.tv_sec+1.0*now_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);
+    if(sec > 1) {
+        memcpy(&g_time, &now_time, sizeof(g_time));
+        if(calc_fps) {
+            double fps = g_fps; g_fps = 0;
+            char buffer[256]; buffer[0] = snprintf(buffer+1, 255, "%s%s: %d fps", title, updating?"":" (no updating)", int(fps/sec));
+            SetWTitle (g_window, (ConstStr255Param) buffer );
+        }
+      }
+
+    EventRef theEvent;
+    EventTargetRef theTarget;
+    OSStatus                    err;
+    // Run the event loop
+
+    theTarget = GetEventDispatcherTarget();
+    while( (err = ReceiveNextEvent(0, NULL, kEventDurationNoWait, true, &theEvent)) == noErr)
+    {
+        SendEventToEventTarget(theEvent, theTarget);
+        ReleaseEvent(theEvent);
+    }
+    if(err != eventLoopTimedOutErr) running = false;
+    if(updating) {
+        pRecImage pWindowInfo = (pRecImage) GetWRefCon (g_window); // get the gl info for the window
+        if(pWindowInfo) DrawGL(g_window);
+    }
+       if(threaded) pthread_mutex_unlock(&g_mutex);
+    return true;
+}
+
+//! Do standard loop
+void video::main_loop()
+{
+    struct timezone tz; gettimeofday(&g_time, &tz);
+    //RunApplicationEventLoop(); -- using another application loop model
+    on_process();
+}
+
+//! Change window title
+void video::show_title()
+{
+    char buffer[256]; buffer[0] = snprintf(buffer+1, 255, "%s", title);
+    SetWTitle (g_window, (ConstStr255Param) buffer );
+}
+
+///////////////////////////////////////////// public methods of video class ///////////////////////
+
+drawing_area::drawing_area(int x, int y, int sizex, int sizey)
+    : start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(24),
+    base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+{
+    assert(x < g_sizex); assert(y < g_sizey);
+    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
+
+    index = base_index; // current index
+}
+
+drawing_area::~drawing_area() {}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/video.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/video.h
new file mode 100644 (file)
index 0000000..f39db57
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __VIDEO_H__
+#define __VIDEO_H__
+
+#include <cassert>
+#if _WIN32 || _WIN64
+#include <windows.h>
+#else
+#include <unistd.h>
+#endif
+
+typedef unsigned int color_t;
+typedef unsigned char colorcomp_t;
+
+//! Sipmle proxy class for managing of different video systems
+class video
+{
+    //! colorspace information
+    char depth, red_shift, green_shift, blue_shift;
+    color_t red_mask, green_mask, blue_mask;
+    friend class drawing_area;
+
+public:
+    //! Constructor
+    video();
+    //! Destructor
+    ~video();
+    //! member to set window name
+    const char *title;
+    //! true is enable to show fps
+    bool calc_fps;
+    //! if true: on windows fork processing thread for on_process(), on non-windows note that next_frame() is called concurrently.
+    bool threaded;
+    //! true while running within main_loop()
+    bool running;
+    //! if true, do gui updating
+    bool updating;
+    //! initialize graphical video system
+    bool init_window(int sizex, int sizey);
+    //! initialize console. returns true if console is available
+    bool init_console();
+    //! terminate video system
+    void terminate();
+    //! Do standard event & processing loop. Use threaded = true to separate event/updating loop from frame processing
+    void main_loop();
+    //! Process next frame
+    bool next_frame();
+    //! Change window title
+    void show_title();
+    //! translate RGB components into packed type
+    inline color_t get_color(colorcomp_t red, colorcomp_t green, colorcomp_t blue) const;
+
+    //! Mouse events handler.
+    virtual void on_mouse(int x, int y, int key) { }
+    //! Mouse events handler.
+    virtual void on_key(int key) { }
+    //! Main processing loop. Redefine with your own
+    virtual void on_process() { while(next_frame()); }
+
+#ifdef _WINDOWS
+    //! Windows specific members
+    //! if VIDEO_WINMAIN isn't defined then set this just before init() by arguments of WinMain
+    static HINSTANCE win_hInstance; static int win_iCmdShow;
+    //! optionally call it just before init() to set own. Use ascii strings convention
+    void win_set_class(WNDCLASSEX &);
+    //! load and set accelerator table from resources
+    void win_load_accelerators(int idc);
+#endif
+};
+
+//! Drawing class
+class drawing_area
+{
+    const size_t base_index, max_index, index_stride;
+    const char pixel_depth;
+    unsigned int * const ptr32;
+    size_t index;
+public:
+    const int start_x, start_y, size_x, size_y;
+    //! constructor
+    drawing_area(int x, int y, int sizex, int sizey);
+    //! destructor
+    ~drawing_area();
+    //! set current position. local_x could be bigger then size_x
+    inline void set_pos(int local_x, int local_y);
+    //! put pixel in current position with incremental address calculating to next right pixel
+    inline void put_pixel(color_t color);
+    //! draw pixel at position by packed color
+    void set_pixel(int localx, int localy, color_t color)
+        { set_pos(localx, localy); put_pixel(color); }
+};
+
+inline color_t video::get_color(colorcomp_t red, colorcomp_t green, colorcomp_t blue) const
+{
+    if(red_shift == 16) // only for depth == 24 && red_shift > blue_shift
+        return (red<<16) | (green<<8) | blue;
+    else if(depth >= 24)
+        return (red<<red_shift) | (green<<green_shift) | (blue<<blue_shift);
+    else if(depth > 0) {
+        register char bs = blue_shift, rs = red_shift;
+        if(blue_shift < 0) blue >>= -bs, bs = 0;
+        else /*red_shift < 0*/ red >>= -rs, rs = 0;
+        return (red<<rs)&red_mask | (green<<green_shift)&green_mask | (blue<<bs)&blue_mask;
+    } else { // UYVY colorspace
+        register unsigned y, u, v;
+        y = red * 77 + green * 150 + blue * 29; // sum(77+150+29=256) * max(=255):  limit->2^16
+        u = (2048 + (blue << 3) - (y >> 5)) >> 4; // (limit->2^12)>>4
+        v = (2048 + (red << 3) - (y >> 5)) >> 4;
+        y = y >> 8;
+        return u | (y << 8) | (v << 16) | (y << 24);
+    }
+}
+
+inline void drawing_area::set_pos(int local_x, int local_y)
+{
+    index = base_index + local_x + local_y*index_stride;
+}
+
+inline void drawing_area::put_pixel(color_t color)
+{
+    assert(index < max_index);
+    if(pixel_depth > 16) ptr32[index++] = color;
+    else if(pixel_depth > 0)
+        ((unsigned short*)ptr32)[index++] = (unsigned short)color;
+    else { // UYVY colorspace
+        if(index&1) color >>= 16;
+        ((unsigned short*)ptr32)[index++] = (unsigned short)color;
+    }
+}
+
+#if defined(_WINDOWS) && (defined(VIDEO_WINMAIN) || defined(VIDEO_WINMAIN_ARGS) )
+#include <cstdlib>
+//! define WinMain for subsystem:windows.
+#ifdef VIDEO_WINMAIN_ARGS
+int main(int, char *[]);
+#else
+int main();
+#endif
+int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR szCmdLine, int iCmdShow)
+{
+    video::win_hInstance = hInstance;  video::win_iCmdShow = iCmdShow;
+#ifdef VIDEO_WINMAIN_ARGS
+    return main(__argc, __argv);
+#else
+    return main();
+#endif
+}
+#endif
+
+#endif// __VIDEO_H__
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/winvideo.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/winvideo.h
new file mode 100644 (file)
index 0000000..c89bbc6
--- /dev/null
@@ -0,0 +1,286 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/////// Common internal implementation of Windows-specific stuff //////////////
+///////                  Must be the first included header       //////////////
+
+#ifndef _CRT_SECURE_NO_DEPRECATE
+#define _CRT_SECURE_NO_DEPRECATE
+#endif
+// Check that the target Windows version has all API calls requried.
+#ifndef _WIN32_WINNT
+# define _WIN32_WINNT 0x0400
+#endif
+#if _WIN32_WINNT<0x0400
+# define YIELD_TO_THREAD() Sleep(0)
+#else
+# define YIELD_TO_THREAD() SwitchToThread()
+#endif
+#include "video.h"
+#include <fcntl.h>
+#include <io.h>
+#include <iostream>
+#include <fstream>
+
+#pragma comment(lib, "gdi32.lib")
+#pragma comment(lib, "user32.lib")
+
+// maximum mumber of lines the output console should have
+static const WORD MAX_CONSOLE_LINES = 500;
+const COLORREF              RGBKEY = RGB(8, 8, 16); // at least 8 for 16-bit palette
+HWND                        g_hAppWnd;           // The program's window handle
+HANDLE                      g_handles[2] = {0,0};// thread and wake up event
+unsigned int *              g_pImg = 0;          // drawing memory
+int                         g_sizex, g_sizey;
+static video *              g_video = 0;
+WNDPROC                     g_pUserProc = 0;
+HINSTANCE                   video::win_hInstance = 0;
+int                         video::win_iCmdShow = 0;
+static WNDCLASSEX *         gWndClass = 0;
+static HACCEL               hAccelTable = 0;
+static DWORD                g_msec = 0;
+static int g_fps = 0, g_updates = 0, g_skips = 0;
+
+bool DisplayError(LPSTR lpstrErr, HRESULT hres = 0); // always returns false
+LRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);
+
+//! Create window
+bool WinInit(HINSTANCE hInstance, int nCmdShow, WNDCLASSEX *uwc, const char *title, bool fixedsize)
+{
+    WNDCLASSEX wndclass;  // Our app's windows class
+    if(uwc) {
+        memcpy(&wndclass, uwc, sizeof(wndclass));
+        g_pUserProc = uwc->lpfnWndProc;
+    } else {
+        memset(&wndclass, 0, sizeof(wndclass));
+        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
+        wndclass.lpszClassName = title;
+    }
+    wndclass.cbSize = sizeof(wndclass);
+    wndclass.hInstance = hInstance;
+    wndclass.lpfnWndProc = InternalWndProc;
+    wndclass.style |= CS_HREDRAW | CS_VREDRAW;
+    wndclass.hbrBackground = CreateSolidBrush(RGBKEY);
+
+    if( !RegisterClassExA(&wndclass) ) return false;
+    int xaddend = GetSystemMetrics(fixedsize?SM_CXFIXEDFRAME:SM_CXFRAME)*2;
+    int yaddend = GetSystemMetrics(fixedsize?SM_CYFIXEDFRAME:SM_CYFRAME)*2 + GetSystemMetrics(SM_CYCAPTION);
+    if(wndclass.lpszMenuName) yaddend += GetSystemMetrics(SM_CYMENU);
+
+    // Setup the new window's physical parameters - and tell Windows to create it
+    g_hAppWnd = CreateWindowA(wndclass.lpszClassName,  // Window class name
+                             title,  // Window caption
+                             !fixedsize ? WS_OVERLAPPEDWINDOW :  // Window style
+                             WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,
+                             CW_USEDEFAULT,  // Initial x pos: use default placement
+                             0,              // Initial y pos: not used here
+                             g_sizex+xaddend,// Initial x size
+                             g_sizey+yaddend,// Initial y size
+                             NULL,      // parent window handle
+                             NULL,      // window menu handle
+                             hInstance, // program instance handle
+                             NULL);     // Creation parameters
+    return g_hAppWnd != NULL;
+}
+
+//! create console window with redirection
+static bool RedirectIOToConsole(void)
+{
+    int hConHandle; size_t lStdHandle;
+    CONSOLE_SCREEN_BUFFER_INFO coninfo;
+    FILE *fp;
+    // allocate a console for this app
+    AllocConsole();
+
+    // set the screen buffer to be big enough to let us scroll text
+    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
+    coninfo.dwSize.Y = MAX_CONSOLE_LINES;
+    SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);
+
+    // redirect unbuffered STDOUT to the console
+    lStdHandle = (size_t)GetStdHandle(STD_OUTPUT_HANDLE);
+    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
+    if(hConHandle <= 0) return false;
+    fp = _fdopen( hConHandle, "w" );
+    *stdout = *fp;
+    setvbuf( stdout, NULL, _IONBF, 0 );
+
+    // redirect unbuffered STDERR to the console
+    lStdHandle = (size_t)GetStdHandle(STD_ERROR_HANDLE);
+    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
+    if(hConHandle > 0) {
+        fp = _fdopen( hConHandle, "w" );
+        *stderr = *fp;
+        setvbuf( stderr, NULL, _IONBF, 0 );
+    }
+
+    // redirect unbuffered STDIN to the console
+    lStdHandle = (size_t)GetStdHandle(STD_INPUT_HANDLE);
+    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
+    if(hConHandle > 0) {
+        fp = _fdopen( hConHandle, "r" );
+        *stdin = *fp;
+        setvbuf( stdin, NULL, _IONBF, 0 );
+    }
+
+    // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog
+    // point to console as well
+    std::ios::sync_with_stdio();
+    return true;
+}
+
+
+video::video()
+    : red_mask(0xff0000), red_shift(16), green_mask(0xff00),
+      green_shift(8), blue_mask(0xff), blue_shift(0), depth(24)
+{
+    assert(g_video == 0);
+    g_video = this; title = "Video"; running = threaded = calc_fps = false; updating = true;
+}
+
+//! optionally call it just before init() to set own 
+void video::win_set_class(WNDCLASSEX &wcex)
+{
+    gWndClass = &wcex;
+}
+
+void video::win_load_accelerators(int idc)
+{
+    hAccelTable = LoadAccelerators(win_hInstance, MAKEINTRESOURCE(idc));
+}
+
+bool video::init_console()
+{
+    if(RedirectIOToConsole()) {
+        if(!g_pImg && g_sizex && g_sizey)
+            g_pImg = new unsigned int[g_sizex * g_sizey];
+        if(g_pImg) running = true;
+        return true;
+    }
+    return false;
+}
+
+video::~video()
+{
+    if(g_video) terminate();
+}
+
+DWORD WINAPI thread_video(LPVOID lpParameter)
+{
+    video *v = (video*)lpParameter;
+    v->on_process();
+    return 0;
+}
+
+static bool loop_once(video *v)
+{
+    // screen update notify
+    if(int updates = g_updates) {
+        g_updates = 0;
+        if(g_video->updating) { g_skips += updates-1; g_fps++; }
+        else g_skips += updates;
+        UpdateWindow(g_hAppWnd);
+    }
+    // update fps
+    DWORD msec = GetTickCount();
+    if(v->calc_fps && msec >= g_msec+1000) {
+        double sec = (msec - g_msec)/1000.0;
+        char buffer[256], n = _snprintf(buffer, 128, "%s: %d fps", v->title, int(double(g_fps + g_skips)/sec));
+        if(g_skips) _snprintf(buffer+n, 128, " - %d skipped = %d updates", int(g_skips/sec), int(g_fps/sec));
+        SetWindowTextA(g_hAppWnd, buffer);
+        g_msec = msec; g_skips = g_fps = 0;
+    }
+    // event processing, including painting
+    MSG msg;
+    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+    {
+        if( msg.message == WM_QUIT ) { v->running = false; return false; }
+        if( !hAccelTable || !TranslateAccelerator(msg.hwnd, hAccelTable, &msg) )
+        {
+            TranslateMessage(&msg);
+            DispatchMessage(&msg);
+        }
+        return true; // try again
+    }
+    return false;
+}
+
+//! Do standard event loop
+void video::main_loop()
+{
+    // let Windows draw and unroll the window
+    InvalidateRect(g_hAppWnd, 0, false);
+    g_msec = GetTickCount(); // let's stay for 0,5 sec
+    while(g_msec + 500 > GetTickCount()) { loop_once(this); Sleep(1); }
+    g_msec = GetTickCount();
+    // now, start main process
+    if(threaded) {
+        g_handles[0] = CreateThread (
+            NULL,             // LPSECURITY_ATTRIBUTES security_attrs
+            0,                // SIZE_T stacksize
+            (LPTHREAD_START_ROUTINE) thread_video,
+            this,               // argument
+            0, 0);
+        if(!g_handles[0]) { DisplayError("Can't create thread"); return; }
+        else // harmless race is possible here
+            g_handles[1] = CreateEvent(NULL, false, false, NULL);
+        while(running) {
+            while(loop_once(this));
+            YIELD_TO_THREAD(); // give time for processing when running on single CPU
+            DWORD r = MsgWaitForMultipleObjects(2, g_handles, false, INFINITE, QS_ALLINPUT^QS_MOUSEMOVE);
+            if(r == WAIT_OBJECT_0) break; // thread terminated
+        }
+        running = false;
+        if(WaitForSingleObject(g_handles[0], 300) == WAIT_TIMEOUT)
+            TerminateThread(g_handles[0], 0);
+        if(g_handles[0]) CloseHandle(g_handles[0]);
+        if(g_handles[1]) CloseHandle(g_handles[1]);
+        g_handles[0] = g_handles[1] = 0;
+    }
+    else on_process();
+}
+
+//! Refresh screen picture
+bool video::next_frame()
+{
+    if(!running) return false;
+    g_updates++; // Fast but inaccurate counter. The data race here is benign.
+    if(!threaded) while(loop_once(this));
+    else if(g_handles[1]) {
+        SetEvent(g_handles[1]);
+        YIELD_TO_THREAD();
+    }
+    return true;
+}
+
+//! Change window title
+void video::show_title()
+{
+    if(g_hAppWnd)
+        SetWindowTextA(g_hAppWnd, title);
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/xvideo.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/gui/xvideo.cpp
new file mode 100644 (file)
index 0000000..7fb39a4
--- /dev/null
@@ -0,0 +1,350 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Uncomment next line to disable shared memory features if you have not libXext
+// (http://www.xfree86.org/current/mit-shm.html)
+//#define X_NOSHMEM
+
+#include "video.h"
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/keysym.h>
+#include <sys/time.h>
+#include <signal.h>
+#include <pthread.h>
+
+#ifndef X_NOSHMEM
+#include <errno.h>
+#include <X11/extensions/XShm.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+
+static XShmSegmentInfo shmseginfo;
+static Pixmap pixmap = 0;
+#endif
+static char *display_name = NULL;
+static Display *dpy = NULL;
+static Screen *scrn;
+static Visual *vis;
+static Colormap cmap;
+static GC gc;
+static Window win, rootW;
+static int dispdepth = 0;
+static XGCValues xgcv;
+static XImage *ximage;
+static int x_error = 0;
+static int vidtype = 3;
+static int g_sizex, g_sizey;
+static video *g_video = 0;
+static unsigned int *g_pImg = 0;
+static int g_fps = 0;
+struct timeval g_time;
+static pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER;
+Atom _XA_WM_DELETE_WINDOW = 0;// like in Xatom.h
+
+///////////////////////////////////////////// public methods of video class ///////////////////////
+
+video::video()
+{
+    assert(g_video == 0);
+    g_video = this; title = "Video"; calc_fps = running = false; updating = true;
+}
+
+inline void mask2bits(unsigned int mask, unsigned int &save, char &shift)
+{
+    save  = mask; if(!mask) { shift = dispdepth/3; return; }
+    shift = 0; while(!(mask&1)) ++shift, mask >>= 1;
+    int bits = 0; while(mask&1) ++bits,  mask >>= 1;
+    shift += bits - 8;
+}
+
+int xerr_handler(Display*, XErrorEvent *error)
+{
+    x_error = error->error_code;
+    if(g_video) g_video->running = false;
+    return 0;
+}
+
+bool video::init_window(int xsize, int ysize)
+{
+    { //enclose local variables before fail label
+    g_sizex = xsize; g_sizey = ysize;
+
+    // Open the display
+    if (!dpy) {
+        dpy = XOpenDisplay(display_name);
+        if (!dpy) {
+            fprintf(stderr, "Can't open X11 display %s\n", XDisplayName(display_name));
+            goto fail;
+        }
+    }
+    int theScreen = DefaultScreen(dpy);
+    scrn = ScreenOfDisplay(dpy, theScreen);
+    dispdepth = DefaultDepth(dpy, theScreen);
+    XVisualInfo vinfo;
+    if (!( (dispdepth >= 15 && dispdepth <= 32 && XMatchVisualInfo(dpy, theScreen, dispdepth, TrueColor, &vinfo) )
+        || XMatchVisualInfo(dpy, theScreen, 24, TrueColor, &vinfo)
+        || XMatchVisualInfo(dpy, theScreen, 32, TrueColor, &vinfo)
+        || XMatchVisualInfo(dpy, theScreen, 16, TrueColor, &vinfo)
+        || XMatchVisualInfo(dpy, theScreen, 15, TrueColor, &vinfo)
+        )) {
+        fprintf(stderr, "Display has no appropriate True Color visual\n");
+        goto fail;
+    }
+    vis = vinfo.visual;
+    depth = dispdepth = vinfo.depth;
+    mask2bits(vinfo.red_mask, red_mask, red_shift);
+    mask2bits(vinfo.green_mask, green_mask, green_shift);
+    mask2bits(vinfo.blue_mask, blue_mask, blue_shift);
+    rootW = RootWindow(dpy, theScreen);
+    cmap = XCreateColormap(dpy, rootW, vis, AllocNone);
+    XSetWindowAttributes attrs;
+    attrs.backing_store = Always;
+    attrs.colormap = cmap;
+    attrs.event_mask = StructureNotifyMask|KeyPressMask|ButtonPressMask|ButtonReleaseMask;
+    attrs.background_pixel = BlackPixelOfScreen(scrn);
+    attrs.border_pixel = WhitePixelOfScreen(scrn);
+    win = XCreateWindow(dpy, rootW,
+        0, 0, xsize, ysize, 2,
+        dispdepth, InputOutput, vis,
+        CWBackingStore | CWColormap | CWEventMask |
+        CWBackPixel | CWBorderPixel,
+        &attrs);
+    if(!win) {
+        fprintf(stderr, "Can't create the window\n");
+        goto fail;
+    }
+    XSizeHints sh;
+    sh.flags = PSize | PMinSize | PMaxSize;
+    sh.width = sh.min_width = sh.max_width = xsize;
+    sh.height = sh.min_height = sh.max_height = ysize;
+    XSetStandardProperties( dpy, win, g_video->title, g_video->title, None, NULL, 0, &sh );
+    _XA_WM_DELETE_WINDOW = XInternAtom(dpy, "WM_DELETE_WINDOW", false);
+    XSetWMProtocols(dpy, win, &_XA_WM_DELETE_WINDOW, 1);
+    gc = XCreateGC(dpy, win, 0L, &xgcv);
+    XMapRaised(dpy, win);
+    XFlush(dpy);
+#ifdef X_FULLSYNC
+       XSynchronize(dpy, true);
+#endif
+    XSetErrorHandler(xerr_handler);
+
+    int imgbytes = xsize*ysize*(dispdepth<=16?2:4);
+    const char *vidstr;
+#ifndef X_NOSHMEM
+    int major, minor, pixmaps;
+    if(XShmQueryExtension(dpy) &&
+       XShmQueryVersion(dpy, &major, &minor, &pixmaps))
+    { // Shared memory
+        shmseginfo.shmid = shmget(IPC_PRIVATE, imgbytes, IPC_CREAT|0777);
+        if(shmseginfo.shmid < 0) {
+            fprintf(stderr, "Warning: Can't get shared memory: %s\n", strerror(errno));
+            goto generic;
+        }
+        g_pImg = (unsigned int*)(shmseginfo.shmaddr = (char*)shmat(shmseginfo.shmid, 0, 0));
+        if(g_pImg == (unsigned int*)-1) {
+            fprintf(stderr, "Warning: Can't attach to shared memory: %s\n", strerror(errno));
+            shmctl(shmseginfo.shmid, IPC_RMID, NULL);
+            goto generic;
+        }
+        shmseginfo.readOnly = false;
+        if(!XShmAttach(dpy, &shmseginfo) || x_error) {
+            char err[256]; XGetErrorText(dpy, x_error, err, 255);
+            fprintf(stderr, "Warning: Can't attach shared memory to display: %s (%d)\n", err, x_error);
+            shmdt(shmseginfo.shmaddr); shmctl(shmseginfo.shmid, IPC_RMID, NULL);
+            goto generic;
+        }
+
+#ifndef X_NOSHMPIX
+        if(pixmaps && XShmPixmapFormat(dpy) == ZPixmap)
+        { // Pixmaps
+            vidtype = 2; vidstr = "X11 shared memory pixmap";
+            pixmap = XShmCreatePixmap(dpy, win, (char*)g_pImg, &shmseginfo, xsize, ysize, dispdepth);
+            XSetWindowBackgroundPixmap(dpy, win, pixmap);
+        } else
+#endif//!X_NOSHMPIX
+        { // Standart
+            vidtype = 1; vidstr = "X11 shared memory";
+            ximage = XShmCreateImage(dpy, vis, dispdepth,
+                ZPixmap, 0, &shmseginfo, xsize, ysize);
+            if(!ximage) {
+                fprintf(stderr, "Can't create the shared image\n");
+                goto fail;
+            }
+            assert(ximage->bytes_per_line == xsize*(dispdepth<=16?2:4));
+            ximage->data = shmseginfo.shmaddr;
+        }
+    } else
+#endif
+    {
+generic:
+        vidtype = 0; vidstr = "generic X11";
+        g_pImg = new unsigned int[imgbytes/sizeof(int)];
+        ximage = XCreateImage(dpy, vis, dispdepth, ZPixmap, 0, (char*)g_pImg, xsize, ysize, 32, imgbytes/ysize);
+        if(!ximage) {
+            fprintf(stderr, "Can't create the image\n");
+            goto fail;
+        }
+    }
+    printf("Note: using %s with %s visual for %d-bit color depth\n", vidstr, vis==DefaultVisual(dpy, theScreen)?"default":"non-default", dispdepth);
+    running = true;
+    return true;
+    } // end of enclosing local varables
+fail:
+    terminate(); init_console();
+    return false;
+}
+
+bool video::init_console()
+{
+    if(!g_pImg && g_sizex && g_sizey) {
+        dispdepth = 24; red_shift = 16; vidtype = 3; // fake video
+        g_pImg = new unsigned int[g_sizex*g_sizey];
+        running = true;
+    }
+    return true;
+}
+
+void video::terminate()
+{
+    running = false;
+    if(dpy) {
+        vidtype = 3; // stop video
+        if(threaded) { pthread_mutex_lock(&g_mutex); pthread_mutex_unlock(&g_mutex); }
+        if(ximage) { XDestroyImage(ximage); ximage = 0; g_pImg = 0; } // it frees g_pImg for vidtype == 0
+#ifndef X_NOSHMEM
+        if(pixmap) XFreePixmap(dpy, pixmap);
+        if(shmseginfo.shmaddr) { XShmDetach(dpy, &shmseginfo); shmdt(shmseginfo.shmaddr); g_pImg = 0; }
+        if(shmseginfo.shmid >= 0) shmctl(shmseginfo.shmid, IPC_RMID, NULL);
+#endif
+        if(gc) XFreeGC(dpy, gc);
+        if(win) XDestroyWindow(dpy, win);
+        XCloseDisplay(dpy); dpy = 0;
+    }
+    if(g_pImg) { delete[] g_pImg; g_pImg = 0; } // if was allocated for console mode
+}
+
+video::~video()
+{
+    if(g_video) terminate();
+    g_video = 0;
+}
+
+//! Do standard event loop
+void video::main_loop()
+{
+    struct timezone tz; gettimeofday(&g_time, &tz);
+    on_process();
+}
+
+//! Check for pending events once
+bool video::next_frame()
+{
+       if(!running) return false;
+    //! try acquire mutex if threaded code, returns on failure
+    if(vidtype == 3 || threaded && pthread_mutex_trylock(&g_mutex))
+        return running;
+    //! Refresh screen picture
+    g_fps++;
+#ifndef X_NOSHMPIX
+    if(vidtype == 2 && updating) XClearWindow(dpy, win);
+#endif
+    while( XPending(dpy) ) {
+        XEvent report; XNextEvent(dpy, &report);
+        switch( report.type ) {
+            case ClientMessage:
+                if(report.xclient.format != 32 || report.xclient.data.l[0] != _XA_WM_DELETE_WINDOW) break;
+            case DestroyNotify:
+                running = false;
+            case KeyPress:
+                on_key( XLookupKeysym(&report.xkey, 0) ); break;
+            case ButtonPress:
+                on_mouse( report.xbutton.x, report.xbutton.y, report.xbutton.button ); break;
+            case ButtonRelease:
+                on_mouse( report.xbutton.x, report.xbutton.y, -report.xbutton.button ); break;
+        }
+    }
+    struct timezone tz; struct timeval now_time; gettimeofday(&now_time, &tz);
+    double sec = (now_time.tv_sec+1.0*now_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);
+    if(sec > 1) {
+        memcpy(&g_time, &now_time, sizeof(g_time));
+        if(calc_fps) {
+            double fps = g_fps; g_fps = 0;
+            char buffer[256]; snprintf(buffer, 256, "%s%s: %d fps", title, updating?"":" (no updating)", int(fps/sec));
+            XStoreName(dpy, win, buffer);
+        }
+#ifndef X_FULLSYNC
+        XSync(dpy, false); // It is often better then using XSynchronize(dpy, true)
+#endif//X_FULLSYNC
+       }
+       if(threaded) pthread_mutex_unlock(&g_mutex);
+    return true;
+}
+
+//! Change window title
+void video::show_title()
+{
+    if(vidtype < 3)
+        XStoreName(dpy, win, title);
+}
+
+drawing_area::drawing_area(int x, int y, int sizex, int sizey)
+    : start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(dispdepth),
+    base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+{
+    assert(x < g_sizex); assert(y < g_sizey);
+    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
+
+    index = base_index; // current index
+}
+
+drawing_area::~drawing_area()
+{
+    if(!g_video->updating) return;
+#ifndef X_NOSHMEM
+    switch(vidtype) {
+    case 0:
+#endif
+        pthread_mutex_lock(&g_mutex);
+        if(vidtype == 0) XPutImage(dpy, win, gc, ximage, start_x, start_y, start_x, start_y, size_x, size_y);
+        pthread_mutex_unlock(&g_mutex);
+#ifndef X_NOSHMEM
+        break;
+    case 1:
+        pthread_mutex_lock(&g_mutex);
+        if(vidtype == 1) XShmPutImage(dpy, win, gc, ximage, start_x, start_y, start_x, start_y, size_x, size_y, false);
+        pthread_mutex_unlock(&g_mutex);
+        break;
+    /*case 2: make it in next_frame(); break;*/
+    }
+#endif
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/common/index.html
new file mode 100644 (file)
index 0000000..59ec57b
--- /dev/null
@@ -0,0 +1,36 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains common code that is used in the Threading Building Blocks examples.
+
+<P>
+This code is not intended to be used directly.  It is incorporated automatically by the examples that need it.
+</P>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="gui">gui</A>
+<DD>GUI code for examples that have graphical user interfaces.  Currently supports:
+    <UL>
+    <LI>GDI+*, Direct Draw (Windows* systems)
+    <LI>OpenGL* (Mac OS* X systems)
+    <LI>X-windows (Linux* or Mac OS* X systems)
+    </UL>
+    See the examples that use the GUI
+    (<A HREF=../parallel_for/tachyon/index.html>tachyon</A> and <A HREF=../parallel_for/seismic/index.html>seismic</A>)
+    for more details.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/Makefile
new file mode 100644 (file)
index 0000000..b24370c
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=count_strings
+ARGS=
+
+# The C++ compiler
+#CXX=g++
+
+all:   release test
+
+release: *.cpp
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
+
+debug: *.cpp
+       $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+
+clean:
+       $(RM) $(PROG) *.o *.d
+
+test:
+       ./$(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/Makefile.windows
new file mode 100644 (file)
index 0000000..1fb0431
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Count_Strings
+ARGS=
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+release:
+       $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe 
+debug:
+       $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe 
+clean:
+       @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+       $(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/count_strings.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/count_strings.cpp
new file mode 100644 (file)
index 0000000..7db8433
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Workaround for ICC 11.0 not finding __sync_fetch_and_add_4 on some of the Linux platforms.
+#if __linux__ && defined(__INTEL_COMPILER)
+#define __sync_fetch_and_add(ptr,addend) _InterlockedExchangeAdd(const_cast<void*>(reinterpret_cast<volatile void*>(ptr)), addend)
+#endif
+
+#include <string>
+#include <cstring>
+#include <cctype>
+#include <cstdlib>
+#include <cstdio>
+#include "tbb/concurrent_hash_map.h"
+#include "tbb/blocked_range.h"
+#include "tbb/parallel_for.h"
+#include "tbb/tick_count.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tbb_allocator.h"
+
+
+//! String type with scalable allocator.
+/** On platforms with non-scalable default memory allocators, the example scales 
+    better if the string allocator is changed to tbb::tbb_allocator<char>. */
+typedef std::basic_string<char,std::char_traits<char>,tbb::tbb_allocator<char> > MyString;
+
+using namespace tbb;
+using namespace std;
+
+//! Set to true to counts.
+static bool Verbose = false;
+
+//! Working threads count
+static int NThread = 1;
+
+//! Problem size
+size_t N = 1000000;
+const int size_factor = 2;
+
+//! Indicates if the number of threads wasn't set explicitly
+static bool is_number_of_threads_set = false;
+//! A concurrent hash table that maps strings to ints.
+typedef concurrent_hash_map<MyString,int> StringTable;
+
+//! Function object for counting occurrences of strings.
+struct Tally {
+    StringTable& table;
+    Tally( StringTable& table_ ) : table(table_) {}
+    void operator()( const blocked_range<MyString*> range ) const {
+        for( MyString* p=range.begin(); p!=range.end(); ++p ) {
+            StringTable::accessor a;
+            table.insert( a, *p );
+            a->second += 1;
+        }
+    }
+};
+
+static MyString* Data;
+
+static void CountOccurrences(int nthreads) {
+    StringTable table;
+
+    tick_count t0 = tick_count::now();
+    parallel_for( blocked_range<MyString*>( Data, Data+N, 1000 ), Tally(table) );
+    tick_count t1 = tick_count::now();
+
+    int n = 0;
+    for( StringTable::iterator i=table.begin(); i!=table.end(); ++i ) {
+        if( Verbose && nthreads )
+            printf("%s %d\n",i->first.c_str(),i->second);
+        n += i->second;
+    }
+
+    if (is_number_of_threads_set) {
+        printf("threads = %d  total = %d  unique = %u  time = %g\n", nthreads, n, unsigned(table.size()), (t1-t0).seconds());
+    } else {
+        if ( nthreads == 1 ) {
+            printf("serial run   total = %d  unique = %u  time = %g\n", n, unsigned(table.size()), (t1-t0).seconds());
+        } else {
+            printf("parallel run total = %d  unique = %u  time = %g\n", n, unsigned(table.size()), (t1-t0).seconds());
+        }
+    }
+}
+
+/// Generator of random words
+
+struct Sound {
+    const char *chars;
+    int rates[3];// begining, middle, ending
+};
+Sound Vowels[] = {
+    {"e", {445,6220,1762}}, {"a", {704,5262,514}}, {"i", {402,5224,162}}, {"o", {248,3726,191}},
+    {"u", {155,1669,23}}, {"y", {4,400,989}}, {"io", {5,512,18}}, {"ia", {1,329,111}},
+    {"ea", {21,370,16}}, {"ou", {32,298,4}}, {"ie", {0,177,140}}, {"ee", {2,183,57}},
+    {"ai", {17,206,7}}, {"oo", {1,215,7}}, {"au", {40,111,2}}, {"ua", {0,102,4}},
+    {"ui", {0,104,1}}, {"ei", {6,94,3}}, {"ue", {0,67,28}}, {"ay", {1,42,52}},
+    {"ey", {1,14,80}}, {"oa", {5,84,3}}, {"oi", {2,81,1}}, {"eo", {1,71,5}},
+    {"iou", {0,61,0}}, {"oe", {2,46,9}}, {"eu", {12,43,0}}, {"iu", {0,45,0}},
+    {"ya", {12,19,5}}, {"ae", {7,18,10}}, {"oy", {0,10,13}}, {"ye", {8,7,7}},
+    {"ion", {0,0,20}}, {"ing", {0,0,20}}, {"ium", {0,0,10}}, {"er", {0,0,20}}
+};
+Sound Consonants[] = {
+    {"r", {483,1414,1110}}, {"n", {312,1548,1114}}, {"t", {363,1653,251}}, {"l", {424,1341,489}},
+    {"c", {734,735,260}}, {"m", {732,785,161}}, {"d", {558,612,389}}, {"s", {574,570,405}},
+    {"p", {519,361,98}}, {"b", {528,356,30}}, {"v", {197,598,16}}, {"ss", {3,191,567}},
+    {"g", {285,430,42}}, {"st", {142,323,180}}, {"h", {470,89,30}}, {"nt", {0,350,231}},
+    {"ng", {0,117,442}}, {"f", {319,194,19}}, {"ll", {1,414,83}}, {"w", {249,131,64}},
+    {"k", {154,179,47}}, {"nd", {0,279,92}}, {"bl", {62,235,0}}, {"z", {35,223,16}},
+    {"sh", {112,69,79}}, {"ch", {139,95,25}}, {"th", {70,143,39}}, {"tt", {0,219,19}},
+    {"tr", {131,104,0}}, {"pr", {186,41,0}}, {"nc", {0,223,2}}, {"j", {184,32,1}},
+    {"nn", {0,188,20}}, {"rt", {0,148,51}}, {"ct", {0,160,29}}, {"rr", {0,182,3}},
+    {"gr", {98,87,0}}, {"ck", {0,92,86}}, {"rd", {0,81,88}}, {"x", {8,102,48}},
+    {"ph", {47,101,10}}, {"br", {115,43,0}}, {"cr", {92,60,0}}, {"rm", {0,131,18}},
+    {"ns", {0,124,18}}, {"sp", {81,55,4}}, {"sm", {25,29,85}}, {"sc", {53,83,1}},
+    {"rn", {0,100,30}}, {"cl", {78,42,0}}, {"mm", {0,116,0}}, {"pp", {0,114,2}},
+    {"mp", {0,99,14}}, {"rs", {0,96,16}}, /*{"q", {52,57,1}},*/ {"rl", {0,97,7}},
+    {"rg", {0,81,15}}, {"pl", {56,39,0}}, {"sn", {32,62,1}}, {"str", {38,56,0}},
+    {"dr", {47,44,0}}, {"fl", {77,13,1}}, {"fr", {77,11,0}}, {"ld", {0,47,38}},
+    {"ff", {0,62,20}}, {"lt", {0,61,19}}, {"rb", {0,75,4}}, {"mb", {0,72,7}},
+    {"rc", {0,76,1}}, {"gg", {0,74,1}}, {"pt", {1,56,10}}, {"bb", {0,64,1}},
+    {"sl", {48,17,0}}, {"dd", {0,59,2}}, {"gn", {3,50,4}}, {"rk", {0,30,28}},
+    {"nk", {0,35,20}}, {"gl", {40,14,0}}, {"wh", {45,6,0}}, {"ntr", {0,50,0}},
+    {"rv", {0,47,1}}, {"ght", {0,19,29}}, {"sk", {23,17,5}}, {"nf", {0,46,0}},
+    {"cc", {0,45,0}}, {"ln", {0,41,0}}, {"sw", {36,4,0}}, {"rp", {0,36,4}},
+    {"dn", {0,38,0}}, {"ps", {14,19,5}}, {"nv", {0,38,0}}, {"tch", {0,21,16}},
+    {"nch", {0,26,11}}, {"lv", {0,35,0}}, {"wn", {0,14,21}}, {"rf", {0,32,3}},
+    {"lm", {0,30,5}}, {"dg", {0,34,0}}, {"ft", {0,18,15}}, {"scr", {23,10,0}},
+    {"rch", {0,24,6}}, {"rth", {0,23,7}}, {"rh", {13,15,0}}, {"mpl", {0,29,0}},
+    {"cs", {0,1,27}}, {"gh", {4,10,13}}, {"ls", {0,23,3}}, {"ndr", {0,25,0}},
+    {"tl", {0,23,1}}, {"ngl", {0,25,0}}, {"lk", {0,15,9}}, {"rw", {0,23,0}},
+    {"lb", {0,23,1}}, {"tw", {15,8,0}}, /*{"sq", {15,8,0}},*/ {"chr", {18,4,0}},
+    {"dl", {0,23,0}}, {"ctr", {0,22,0}}, {"nst", {0,21,0}}, {"lc", {0,22,0}},
+    {"sch", {16,4,0}}, {"ths", {0,1,20}}, {"nl", {0,21,0}}, {"lf", {0,15,6}},
+    {"ssn", {0,20,0}}, {"xt", {0,18,1}}, {"xp", {0,20,0}}, {"rst", {0,15,5}},
+    {"nh", {0,19,0}}, {"wr", {14,5,0}}
+};
+const int VowelsNumber = sizeof(Vowels)/sizeof(Sound);
+const int ConsonantsNumber = sizeof(Consonants)/sizeof(Sound);
+int VowelsRatesSum[3] = {0,0,0}, ConsonantsRatesSum[3] = {0,0,0};
+
+int CountRateSum(Sound sounds[], const int num, const int part)
+{
+    int sum = 0;
+    for(int i = 0; i < num; i++)
+        sum += sounds[i].rates[part];
+    return sum;
+}
+
+const char *GetLetters(int type, const int part)
+{
+    Sound *sounds; int rate, i = 0;
+    if(type & 1)
+        sounds = Vowels, rate = rand() % VowelsRatesSum[part];
+    else
+        sounds = Consonants, rate = rand() % ConsonantsRatesSum[part];
+    do {
+        rate -= sounds[i++].rates[part];
+    } while(rate > 0);
+    return sounds[--i].chars;
+}
+
+static void CreateData() {
+    for(int i = 0; i < 3; i++) {
+        ConsonantsRatesSum[i] = CountRateSum(Consonants, ConsonantsNumber, i);
+        VowelsRatesSum[i] = CountRateSum(Vowels, VowelsNumber, i);
+    }
+    for( int i=0; i<N; ++i ) {
+        int type = rand();
+        Data[i] = GetLetters(type++, 0);
+        for( int j = 0; j < type%size_factor; ++j )
+            Data[i] += GetLetters(type++, 1);
+        Data[i] += GetLetters(type, 2);
+    }
+    MyString planet = Data[12]; planet[0] = toupper(planet[0]);
+    MyString helloworld = Data[0]; helloworld[0] = toupper(helloworld[0]);
+    helloworld += ", "+Data[1]+" "+Data[2]+" "+Data[3]+" "+Data[4]+" "+Data[5];
+    printf("Message from planet '%s': %s!\nAnalyzing whole text...\n", planet.c_str(), helloworld.c_str());
+}
+
+/// Main Driver 
+
+static void ParseCommandLine( int argc, char* argv[] ) {
+    int i = 1;
+    if( i<argc && strcmp( argv[i], "verbose" )==0 ) {
+        Verbose = true;
+        ++i;
+    }
+    if( i<argc )
+        if( !isdigit(argv[i][0]) ) {
+            fprintf(stderr,"Usage: %s [verbose] [number-of-strings] [number-of-threads]\n",argv[0]);
+            exit(1);
+        } else {
+            N = strtol(argv[i++],0,0);
+        }
+    if( i<argc )
+        if( !isdigit(argv[i][0]) ) {
+            fprintf(stderr,"Usage: %s [verbose] [number-of-strings] [number-of-threads]\n",argv[0]);
+            exit(1);
+        } else {
+            NThread = strtol(argv[i++],0,0);
+            is_number_of_threads_set = true;
+        }
+}
+
+int main( int argc, char* argv[] ) {
+    srand(2);
+    ParseCommandLine( argc, argv );
+    Data = new MyString[N];
+    CreateData();
+    if (is_number_of_threads_set) {
+        task_scheduler_init init(NThread);
+        CountOccurrences(NThread);
+    } else { // Number of threads wasn't set explicitly. Run serial and parallel version
+        { // serial run
+            task_scheduler_init init_serial(1);
+            CountOccurrences(1);
+        }
+        { // parallel run (number of threads is selected automatically)
+            task_scheduler_init init_parallel;
+            CountOccurrences(0);
+        }
+    }
+    delete[] Data;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/index.html
new file mode 100644 (file)
index 0000000..2ba9f04
--- /dev/null
@@ -0,0 +1,53 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Example program that demonstrates template class concurrent_hash_map.
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="count_strings.cpp">count_strings.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>count_strings [verbose] [<I>N</I>] [<I>P</I>]</TT>
+<DD><I>N</I> is the number of strings and <I>P</I> is the number of threads to be used.  The "verbose" option enables printing
+    of extra information during execution.
+<DT>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+    (see the <A HREF=../../index.html#build>build directions</A>).
+    <BR>Run it with a small number of strings and the desired number of threads, e.g., <TT>count_strings 10000 2</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.sln
new file mode 100644 (file)
index 0000000..2424739
--- /dev/null
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "count_strings", "count_strings.vcproj", "{C931C7A2-074E-4150-9E7A-39A03250411C}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               Debug = Debug
+               Release = Release
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {C931C7A2-074E-4150-9E7A-39A03250411C}.Debug.ActiveCfg = Debug|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411C}.Debug.Build.0 = Debug|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411C}.Release.ActiveCfg = Release|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411C}.Release.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.suo
new file mode 100644 (file)
index 0000000..ac4c9d5
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.vcproj
new file mode 100644 (file)
index 0000000..931c2ea
--- /dev/null
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="count_strings"
+       ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411C}"
+       RootNamespace="count_strings"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\count_strings.cpp">
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc8/count_strings.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc8/count_strings.sln
new file mode 100644 (file)
index 0000000..73768d9
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "count_strings", "count_strings.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252C}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc8/count_strings.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc8/count_strings.suo
new file mode 100644 (file)
index 0000000..83be2c2
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc8/count_strings.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc8/count_strings.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc8/count_strings.vcproj
new file mode 100644 (file)
index 0000000..52f8719
--- /dev/null
@@ -0,0 +1,356 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="count_strings"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252C}"
+       RootNamespace="count_strings"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\count_strings.cpp"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc9/count_strings.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc9/count_strings.sln
new file mode 100644 (file)
index 0000000..86e5827
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "count_strings", "count_strings.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252C}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc9/count_strings.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc9/count_strings.suo
new file mode 100644 (file)
index 0000000..2aea0a3
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc9/count_strings.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc9/count_strings.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/vc9/count_strings.vcproj
new file mode 100644 (file)
index 0000000..28e518b
--- /dev/null
@@ -0,0 +1,353 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="count_strings"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252C}"
+       RootNamespace="count_strings"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\count_strings.cpp"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..9a29d3f
--- /dev/null
@@ -0,0 +1,296 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 42;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               A1F593A60B8F042A00073279 /* count_strings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* count_strings.cpp */; };
+               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+               8DD76F690486A84900D96B5E /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 12;
+                       dstPath = "";
+                       dstSubfolderSpec = 16;
+                       files = (
+                               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+               8DD76F6C0486A84900D96B5E /* count_strings */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = count_strings; sourceTree = BUILT_PRODUCTS_DIR; };
+               A1F593A50B8F042A00073279 /* count_strings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = count_strings.cpp; path = ../count_strings.cpp; sourceTree = SOURCE_ROOT; };
+               A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               8DD76F660486A84900D96B5E /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               08FB7794FE84155DC02AAC07 /* count_strings */ = {
+                       isa = PBXGroup;
+                       children = (
+                               08FB7795FE84155DC02AAC07 /* Source */,
+                               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+                               1AB674ADFE9D54B511CA2CBB /* Products */,
+                       );
+                       name = count_strings;
+                       sourceTree = "<group>";
+               };
+               08FB7795FE84155DC02AAC07 /* Source */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F593A50B8F042A00073279 /* count_strings.cpp */,
+                       );
+                       name = Source;
+                       sourceTree = "<group>";
+               };
+               1AB674ADFE9D54B511CA2CBB /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               8DD76F6C0486A84900D96B5E /* count_strings */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F593B30B8F06F900073279 /* libtbb.dylib */,
+                       );
+                       name = "External Frameworks and Libraries";
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+               8DD76F620486A84900D96B5E /* count_strings */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "count_strings" */;
+                       buildPhases = (
+                               8DD76F640486A84900D96B5E /* Sources */,
+                               8DD76F660486A84900D96B5E /* Frameworks */,
+                               8DD76F690486A84900D96B5E /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = count_strings;
+                       productInstallPath = "$(HOME)/bin";
+                       productName = count_strings;
+                       productReference = 8DD76F6C0486A84900D96B5E /* count_strings */;
+                       productType = "com.apple.product-type.tool";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               08FB7793FE84155DC02AAC07 /* Project object */ = {
+                       isa = PBXProject;
+                       buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "count_strings" */;
+                       hasScannedForEncodings = 1;
+                       mainGroup = 08FB7794FE84155DC02AAC07 /* count_strings */;
+                       projectDirPath = "";
+                       targets = (
+                               8DD76F620486A84900D96B5E /* count_strings */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+               8DD76F640486A84900D96B5E /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593A60B8F042A00073279 /* count_strings.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+               1DEB923208733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = count_strings;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug;
+               };
+               1DEB923308733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = count_strings;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               1DEB923608733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug;
+               };
+               1DEB923708733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release;
+               };
+               A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = count_strings;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug64;
+               };
+               A1F593C70B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = count_strings;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release64;
+               };
+               A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug64;
+               };
+               A1F593C90B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release64;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "count_strings" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923208733DC60010E9CD /* Debug */,
+                               A1F593C60B8F0E6E00073279 /* Debug64 */,
+                               1DEB923308733DC60010E9CD /* Release */,
+                               A1F593C70B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "count_strings" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923608733DC60010E9CD /* Debug */,
+                               A1F593C80B8F0E6E00073279 /* Debug64 */,
+                               1DEB923708733DC60010E9CD /* Release */,
+                               A1F593C90B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/concurrent_hash_map/index.html
new file mode 100644 (file)
index 0000000..6fef85e
--- /dev/null
@@ -0,0 +1,25 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of the template <code>concurrent_hash_map</code>.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="count_strings/index.html">count_strings</A>
+<DD>Concurrently inserts strings into a concurrent_hash_map.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/index.html
new file mode 100644 (file)
index 0000000..aba1d27
--- /dev/null
@@ -0,0 +1,174 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has example usages of Threading Building Blocks.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="GettingStarted/index.html">GettingStarted</A>
+<DD>Examples from the <A HREF="../doc/Getting_Started.pdf">Getting Started Guide</A>.
+<DT><A HREF="concurrent_hash_map/index.html">concurrent_hash_map</A>
+<DD>Examples using <CODE>concurrent_hash_map</CODE>.
+<DT><A HREF="parallel_do/index.html">parallel_do</A>
+<DD>Examples using <CODE>parallel_do</CODE>.
+<DT><A HREF="parallel_for/index.html">parallel_for</A>
+<DD>Examples using <CODE>parallel_for</CODE>.
+<DT><A HREF="parallel_reduce/index.html">parallel_reduce</A>
+<DD>Examples using <CODE>parallel_reduce</CODE>.
+<DT><A HREF="parallel_while/index.html">parallel_while</A>
+<DD>Examples using <CODE>parallel_while</CODE>.
+<DT><A HREF="pipeline/index.html">pipeline</A>
+<DD>Examples using <CODE>pipeline</CODE>.
+<DT><A HREF="task/index.html">task</A>
+<DD>Examples using raw <CODE>task</CODE> interface.
+<DT><A HREF="test_all/index.html">test_all</A>
+<DD>Examples that test all the parts of the package.
+<DT><A HREF="common/index.html">common</A>
+<DD>Common files for building various examples.  Not used directly.
+</DL>
+
+<A NAME=build><H2>To Build</H2></A>
+Build each example by using one of the following methods.  The specific directions for each
+method can be found below.
+<UL>
+<LI>Build by using a <A HREF=#build_1>Microsoft* Visual Studio* project (Windows* systems only)</A>.
+<LI>Build by using a <A HREF=#build_2>Xcode* IDE project (Mac OS* X systems only)</A>.
+<LI>Build by using a <A HREF=#build_3>Makefile (Windows*, Linux* or Mac OS* X systems)</A>.
+</UL>
+
+<P>
+Some of the following directions refer to a shell window; this refers
+to the command prompt environment/window normally used on your system.
+A shell might be a cmd.exe command prompt window (Windows* systems), or a
+sh, bash, csh, ksh, etc. (or compatible) shell window (Windows*, Linux* or Mac OS* X systems).
+</P>
+
+<A NAME=build_1><H4>To build by using a Microsoft* Visual Studio* project (Windows* systems):</H4></A>
+Perform the following steps:
+<OL>
+<LI>Identify the solution (*.sln) file for the example you wish to build and run.
+    <UL>
+    <LI>For Microsoft* Visual Studio* .NET 2003, the *.sln file is in the example's vc7.1 sub-directory.
+    <LI>For Microsoft* Visual Studio* 2005, the *.sln file is in the example's vc8 sub-directory.
+    </UL>
+<LI>Open the project by using one of the following methods:
+    <UL>
+    <LI>Navigate to the *.sln file from My Computer, by using Windows Explorer, or by using another file browser.
+       Double-click the *.sln file to invoke Microsoft* Visual Studio* and open the project.
+    <LI>Invoke Microsoft* Visual Studio* from the Start menu and use the "Open Project" dialog to navigate to
+       and open the project.
+    </UL>
+<LI>Press &lt;ctrl-F5&gt; to build and run the example.
+</OL>
+
+<A NAME=build_2><H4>To build by using a Xcode* IDE project (Mac OS* X systems):</H4></A>
+Perform the following steps:
+<OL>
+<LI>Identify the project (*.xcodeproj) file for the example you wish to build and run.
+    <UL>
+    <LI>The *.xcodeproj file is in the example's xcode sub-directory.
+    </UL>
+<LI>Open the project by using one of the following methods:
+    <UL>
+    <LI>Navigate to the *.xcodeproj file by using the Finder.
+       Double-click the *.xcodeproj file to invoke the Xcode* IDE and open the project.
+    <LI>Invoke the Xcode* IDE and use the "File &rArr; Open&hellip;" dialog to navigate to
+       and open the project.
+    </UL>
+<LI>Press &lt;Apple-R&gt;, or press the "Build and Go" button in the toolbox, to build and run the example.
+</OL>
+
+<A NAME=build_3><H4>To build by using a Makefile (Windows*, Linux* or Mac OS* X systems):</H4></A>
+Perform the following steps:
+<OL>
+<LI>Open a shell window.  For Windows* systems, make sure this shell window has the proper environment
+    defined for use with Microsoft* Visual Studio* (.NET 2003 or 2005); such a shell can be invoked
+    from the Start menu, under Visual Studio, Visual Studio Tools, Visual Studio Command Prompt.
+<LI>Set up the environment in this shell window for use with Threading Building Blocks.
+    <BR>See below for how to set up the environment for
+       <A HREF=#env_1>Windows*</A>, <A HREF=#env_23>Linux*</A> or <A HREF=#env_23>Mac OS* X</A> systems.
+<LI>Unless you installed Threading Building Blocks yourself, you may not have write permissions
+    to the directory containing the example.  In this case, make a copy of the example, and use the copy
+    for the following steps.
+<LI>In the shell window, navigate to the directory for the example
+    (or to the directory for the copy of the example if you made one in the previous step).
+<LI>Use one or more of the following commands to build and run the example.
+    Here, make refers to the make command normally used on your system: this could be
+    nmake, gmake, or make on Windows* systems, or make or gmake on Linux* or Mac OS* X systems.
+    <DL>
+    <DT><TT>make</TT>
+    <DD>Default build and run.  Equivalent to 'make release test'.
+    <DT><TT>make release</TT>
+    <DD>Compile and link against the release version of the Threading Building Blocks library.
+       The resulting executable is left in the directory for the example.
+    <DT><TT>make debug</TT>
+    <DD>Compile and link against the debug version of the Threading Building Blocks library.
+       The resulting executable is left in the directory for the example.
+    <DT><TT>make test</TT>
+    <DD>Run an executable previously produced by one of the above commands.
+    <DT><TT>make <B>[</B>(above options or targets)<B>]</B> CXX=<B>{</B>icl, icc<B>}</B></TT>
+    <DD>Build and run as above, but use Intel&reg; compilers instead of default, native compilers
+       (e.g., icl instead of cl.exe on Windows* systems, or icc instead of g++ on Linux* or Mac OS* X systems).
+    <DT><TT>make clean</TT>
+    <DD>Remove any executables or intermediate files produced by the above commands.
+    </DL>
+</OL>
+
+<A NAME=env_1><H4>To set up the environment (Windows* systems):</H4></A>
+It is <B>strongly</B> recommended that the environment be set up when installing Threading Building Blocks.
+Do this by selecting the appropriate check-box during the install.  However, if the environment is not set up
+during installation, or you wish to build for an alternate architecture or Microsoft* Visual Studio* version,
+it may be set up, for a given type of shell window, by using one of the following commands:
+<DL>
+<DT>For cmd.exe (command prompt):
+<DD><TT>&lt;<I>installdir</I>&gt;\{ia32,intel64}\{vc7.1,vc8}\bin\tbbvars.bat</TT>
+<DT>For sh, bash, ksh (or compatibles):
+<DD><TT>. &lt;<I>installdir</I>&gt;\{ia32,intel64}\{vc7.1,vc8}\bin\tbbvars.sh</TT>
+<DT>For csh (or compatibles):
+<DD><TT>source &lt;<I>installdir</I>&gt;\{ia32,intel64}\{vc7.1,vc8}\bin\tbbvars.csh</TT>
+<DT><I>Notes:</I>
+<DD><I><SL>
+    <LI>Choose one of {ia32,intel64} depending on the architecture to be used.
+    <LI>Choose one of {vc7.1,vc8} depending on whether Microsoft* Visual Studio* .NET 2003 or
+       Microsoft* Visual Studio* 2005 is to be used.
+    <LI>Environment setup need only be performed once per shell window to be used.
+    <LI>Always source tbbvars.sh or tbbvars.csh rather than executing them directly.
+    </SL></I>
+</DL>
+
+<A NAME=env_23><H4>To set up the environment (Linux* or Mac OS* X systems):</H4></A>
+The environment may be set up, for a given type of shell window, by using one of the following commands:
+<DL>
+<DT>For sh, bash, ksh (or compatibles):
+<DD>. &lt;<I>installdir</I>&gt;/bin/tbbvars.sh
+<DT>For csh (or compatibles):
+<DD>source &lt;<I>installdir</I>&gt;/tbbvars.csh
+<DT>For sh, bash, ksh (or compatibles), when using an alternate architecture or platform:
+<DD>. &lt;<I>installdir</I>&gt;/{ia32,intel64,ia64}/cc&lt;<I>gccversion</I>&gt;_libc&lt;<I>libcversion</I>&gt;_kernel&lt;<I>kernelversion</I>&gt;/bin/tbbvars.sh
+<DT>For csh (or compatibles), when using an alternate architecture or platform:
+<DD>source &lt;<I>installdir</I>&gt;/{ia32,intel64,ia64}/cc&lt;<I>gccversion</I>&gt;_libc&lt;<I>libcversion</I>&gt;_kernel&lt;<I>kernelversion</I>&gt;/bin/tbbvars.csh
+<DT><I>Notes:</I>
+<DD><I><SL>
+    <LI>Choose one of {ia32,intel64,ia64} depending on the architecture to be used.
+    <LI>Choose a cc&lt;<I>gccversion</I>&gt;_libc&lt;<I>libcversion</I>&gt;_kernel&lt;<I>kernelversion</I>&gt;
+       value, from among the available platforms installed with Threading Building Blocks
+       (for <A HREF=../ia32>ia32</A>, <A HREF=../intel64>intel64</A> or <A HREF=../ia64>ia64</A>),
+       depending on the platform to be used.
+    <LI>Environment setup need only be performed once per shell window to be used.
+    <LI>Always source tbbvars.sh or tbbvars.csh rather than executing them directly.
+    </SL></I>
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/index.html
new file mode 100644 (file)
index 0000000..7ec9d28
--- /dev/null
@@ -0,0 +1,25 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of the template <code>parallel_do</code>.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="parallel_preorder/index.html">parallel_preorder</A>
+<DD>Parallel preorder traversal of a graph.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Graph.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Graph.cpp
new file mode 100644 (file)
index 0000000..e642745
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <cstdio>
+#include <cstdlib>
+#include "Graph.h"
+
+using namespace std;
+
+void Graph::create_random_dag( size_t number_of_nodes ) {
+    my_vertex_set.resize(number_of_nodes);
+    for( size_t k=0; k<number_of_nodes; ++k ) {
+        Cell& c = my_vertex_set[k];
+        int op = int((rand()>>8)%5u);
+        if( op>int(k) ) op = int(k);
+        switch( op ) {
+            default:
+                c.op = OP_VALUE;
+                c.value = Cell::value_type((float)k);
+                break;
+            case 1:
+                c.op = OP_NEGATE;
+                break;
+            case 2:
+                c.op = OP_SUB;
+                break;
+            case 3: 
+                c.op = OP_ADD;
+                break;
+            case 4: 
+                c.op = OP_MUL;
+                break;
+        }
+        for( int j=0; j<ArityOfOp[c.op]; ++j ) {
+            Cell& input = my_vertex_set[rand()%k];
+            c.input[j] = &input;
+        }
+    }
+}
+
+void Graph::print() {
+    for( size_t k=0; k<my_vertex_set.size(); ++k ) {
+        printf("Cell %d:",int(k));
+        for( size_t j=0; j<my_vertex_set[k].successor.size(); ++j )
+            printf(" %d",int(my_vertex_set[k].successor[j] - &my_vertex_set[0]));
+        printf("\n");
+    }
+}
+
+void Graph::get_root_set( vector<Cell*>& root_set ) {
+    for( size_t k=0; k<my_vertex_set.size(); ++k ) {
+        my_vertex_set[k].successor.clear();
+    }
+    root_set.clear();
+    for( size_t k=0; k<my_vertex_set.size(); ++k ) {
+        Cell& c = my_vertex_set[k];
+        c.ref_count = ArityOfOp[c.op];
+        for( int j=0; j<ArityOfOp[c.op]; ++j ) {
+            c.input[j]->successor.push_back(&c);
+        }
+        if( ArityOfOp[c.op]==0 )
+            root_set.push_back(&my_vertex_set[k]);
+    }
+}
+
+void Cell::update() {
+    switch( op ) {
+        case OP_VALUE:
+            break;
+        case OP_NEGATE:
+            value = -(input[0]->value);
+            break;
+        case OP_ADD:
+            value = input[0]->value + input[1]->value;
+            break;
+        case OP_SUB:
+            value = input[0]->value - input[1]->value;
+            break;
+        case OP_MUL:
+            value = input[0]->value * input[1]->value;
+            break;
+    }
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Graph.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Graph.h
new file mode 100644 (file)
index 0000000..efab9a1
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "Matrix.h"
+#include "tbb/atomic.h"
+#include <vector>
+
+namespace TBB = tbb;
+
+enum OpKind {
+    // Use Cell's value
+    OP_VALUE,
+    // Unary negation
+    OP_NEGATE,
+    // Addition
+    OP_ADD,
+    // Subtraction
+    OP_SUB,
+    // Multiplication
+    OP_MUL
+};
+
+static const int ArityOfOp[] = {0,1,2,2,2};
+
+class Cell {
+public:
+    //! Operation for this cell
+    OpKind op;
+
+    //! Inputs to this cell
+    Cell* input[2];
+   
+    //! Type of value stored in a Cell
+    typedef Matrix value_type;
+
+    //! Value associated with this Cell
+    value_type value;
+
+    //! Set of cells that use this Cell as an input
+    std::vector<Cell*> successor;
+
+    //! Reference count of number of inputs that are not yet updated.
+    TBB::atomic<int> ref_count;
+
+    //! Update the Cell's value.
+    void update();
+
+    //! Default construtor
+    Cell() {}
+};
+
+//! A directed graph where the vertices are Cells.
+class Graph {
+    std::vector<Cell> my_vertex_set;
+public:
+    //! Create a random acyclic directed graph
+    void create_random_dag( size_t number_of_nodes );
+
+    //! Print the graph
+    void print();
+
+    //! Get set of cells that have no inputs.
+    void get_root_set( std::vector<Cell*>& root_set );
+};
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Makefile
new file mode 100644 (file)
index 0000000..c4bba0c
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=parallel_preorder
+ARGS=1:4
+
+# The C++ compiler
+#CXX=g++
+
+all:   release test
+
+release: *.cpp
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
+
+debug: *.cpp
+       $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+
+clean:
+       $(RM) $(PROG) *.o *.d
+
+test:
+       ./$(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Makefile.windows
new file mode 100644 (file)
index 0000000..0abd775
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Parallel_Preorder
+ARGS=1:4
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+release:
+       $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+debug:
+       $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+clean:
+       @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+       $(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Matrix.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/Matrix.h
new file mode 100644 (file)
index 0000000..b7b47e6
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+class Matrix {
+    static const int n = 10;
+    float array[n][n];
+public:
+    Matrix() {}
+    Matrix( float z ) {
+        for( int i=0; i<n; ++i )
+            for( int j=0; j<n; ++j )
+                array[i][j] = i==j ? z : 0;
+    }
+    friend Matrix operator-( const Matrix& x ) {
+        Matrix result;
+        for( int i=0; i<n; ++i )
+            for( int j=0; j<n; ++j )
+                result.array[i][j] = -x.array[i][j];
+        return result;
+    }
+    friend Matrix operator+( const Matrix& x, const Matrix& y ) {
+        Matrix result;
+        for( int i=0; i<n; ++i )
+            for( int j=0; j<n; ++j )
+                result.array[i][j] = x.array[i][j] + y.array[i][j];
+        return result;
+    }
+    friend Matrix operator-( const Matrix& x, const Matrix& y ) {
+        Matrix result;
+        for( int i=0; i<n; ++i )
+            for( int j=0; j<n; ++j )
+                result.array[i][j] = x.array[i][j] - y.array[i][j];
+        return result;
+    }
+    friend Matrix operator*( const Matrix& x, const Matrix& y ) {
+        Matrix result(0);
+        for( int i=0; i<n; ++i ) 
+            for( int k=0; k<n; ++k )
+                for( int j=0; j<n; ++j )
+                    result.array[i][j] += x.array[i][k] * y.array[k][j];
+        return result;
+    }
+};
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/index.html
new file mode 100644 (file)
index 0000000..09060a3
--- /dev/null
@@ -0,0 +1,94 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Example that uses parallel_do to do parallel preorder traversal of a sparse graph.
+<P>
+Each vertex in the graph is called a "cell".  
+Each cell has a value. 
+The value is a matrix. 
+Some of the cells have operators
+that compute the cell's value, using other cell's values as input.
+A cell that uses the value of cell x is called a successor of x.
+</P><P>
+The algorithm works as follows. 
+<OL>
+<LI> Compute the set of cells that have no inputs. This set is called <TT>root_set</TT>.
+<LI> Each cell has an associated field <TT>ref_count</TT> that is an atomic integer.
+     Initialize <TT>ref_count</TT> to the number of inputs for the Cell.
+<LI> Update each cell in <TT>root_set</TT>, by applying a <TT>parallel_do</TT> to a <TT>root_set</TT>
+<LI> After updating a cell, for each of its successors 
+<OL>
+<LI> Atomically decrement the successor's <TT>ref_count</TT>
+<LI> If the count became zero, add the cell to the set of cells to be updated,
+     by calling <TT>parallel_do_feeder_impl::add</TT>.
+</OL>
+</OL>
+</P><P>
+The times printed are for the traversal and update, 
+and do not include time for computing the root_set.
+</P>
+<B>NOTE: </B>It is important to understand that this example is unlikely to show speedup 
+if the cell values are changed to type "float".  The reason is twofold.
+<UL>
+<LI> The smaller value type causes each Cell to be significantly smaller than a cache line,
+     which leads to false sharing conflicts.
+<LI> The time to update the cells becomes very small, and consequently the overhead of
+     parallel_do swamps the useful work.
+</UL>
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="parallel_preorder.cpp">parallel_preorder.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Graph.cpp">Graph.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Graph.h">Graph.h</A>
+<DD>Source code for example.
+<DT><A HREF="Matrix.h">Matrix.h</A>
+<DD>Source code for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>parallel_preorder [<I>M</I>[:<I>N</I>] [<I>Rounds</I> [<I>'pause'</I>]]]</TT>
+<DD><I>M</I> and <I>N</I> are a range of numbers of threads to be used.
+<DD><I>Rounds</I> is the number of rounds the example runs internally. Default value 
+    is 50; reduce it to shorten example run time.
+<DD>If 'pause' is specified, the application will wait for a user to hit return before it exits.
+<DT>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+    (see the <A HREF=../../index.html#build>build directions</A>).
+    <BR>Run it with the desired number of threads and smaller number of rounds, e.g., <TT>parallel_preorder 4 5</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/parallel_preorder.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/parallel_preorder.cpp
new file mode 100644 (file)
index 0000000..e0e55fc
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/* Example program that shows how to use parallel_do to do parallel preorder 
+   traversal of a directed acyclic graph. */
+
+#include "tbb/parallel_do.h"
+#include "tbb/atomic.h"
+#include <vector>
+#include <algorithm>
+#include <cstring>
+#include <cstdio>
+#include "Graph.h"
+
+using namespace std;
+
+//! Number of trials. Can be changed from command line
+int ntrial = 50;
+
+class Body {
+public:
+    Body() {};
+
+    //------------------------------------------------------------------------
+    // Following signatures are required by parallel_do
+    //------------------------------------------------------------------------
+    typedef Cell* argument_type;
+
+    void operator()( Cell* c, tbb::parallel_do_feeder<Cell*>& feeder ) const {
+        c->update();
+        // Restore ref_count in preparation for subsequent traversal.
+        c->ref_count = ArityOfOp[c->op];
+        for( size_t k=0; k<c->successor.size(); ++k ) {
+            Cell* successor = c->successor[k];
+            if( 0 == --(successor->ref_count) ) {
+                feeder.add( successor );
+            }
+        }
+    }
+};   
+
+void ParallelPreorderTraversal( const vector<Cell*>& root_set ) {
+    tbb::parallel_do(root_set.begin(), root_set.end(),Body());
+}
+
+//------------------------------------------------------------------------
+// Test driver
+//------------------------------------------------------------------------
+
+#include <cctype>
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+
+//! A closed range of int.
+struct IntRange {
+    int low;
+    int high;
+    void set_from_string( const char* s );
+    IntRange( int low_, int high_ ) : low(low_), high(high_) {}
+};
+
+void IntRange::set_from_string( const char* s ) {
+    char* end;
+    high = low = strtol(s,&end,0);
+    switch( *end ) {
+    case ':': 
+        high = strtol(end+1,0,0); 
+        break;
+    case '\0':
+        break;
+    default:
+        printf("unexpected character = %c\n",*end);
+    }
+}
+
+//! Number of threads to use.
+static IntRange NThread(1,4);
+
+//! If true, then at end wait for user to hit return
+static bool PauseFlag = false;
+
+//! Displays usage message
+void Usage(char * argv0) {
+    fprintf(stderr, "Usage: %s [nthread [ntrials ['pause']]]\n", argv0);
+    fprintf(stderr, "where nthread is a non-negative integer, or range of the form low:high [%d:%d]\n", NThread.low, NThread.high);
+    fprintf(stderr, "ntrials is a positive integer. Default value is 50, reduce it (e.g. to 5) to shorten example run time\n");
+    fprintf(stderr, "The application waits for user to hit return if 'pause' is specified\n");
+}
+
+//! Parse the command line.
+static void ParseCommandLine( int argc, char* argv[] ) {
+    int i = 1;
+        if( i<argc && !isdigit(argv[i][0]) ) { 
+        // Command line is garbled.
+        Usage(argv[0]);
+        exit(1);
+    }
+    if( i<argc )
+        NThread.set_from_string(argv[i++]);
+    if( i<argc && !isdigit(argv[i][0]) ) { 
+        // Command line is garbled.
+        Usage(argv[0]);
+        exit(1);
+    }
+    if (i<argc) {
+        ntrial = strtol(argv[i++], 0, 0);
+    }
+    if (ntrial == 0) {
+        // Command line is garbled.
+        Usage(argv[0]);
+        exit(1);
+    }
+    if (i<argc && strcmp( argv[i], "pause" )==0 ) {
+        PauseFlag = true;
+    }
+}
+
+int main( int argc, char* argv[] ) {
+    ParseCommandLine(argc,argv);
+
+    // Start scheduler with given number of threads.
+    for( int p=NThread.low; p<=NThread.high; ++p ) {
+        tbb::task_scheduler_init init(p);
+        srand(2);
+        tbb::tick_count::interval_t interval;
+        size_t total_root_set_size = 0;
+        for( int trial=0; trial<ntrial; ++trial ) {
+            Graph g;
+            g.create_random_dag(1000);
+            vector<Cell*> root_set;
+            g.get_root_set(root_set);
+            total_root_set_size += root_set.size();
+
+            tbb::tick_count t0 = tbb::tick_count::now();
+            for( int i=0; i<10; ++i ) {
+                ParallelPreorderTraversal(root_set);
+            }
+            tbb::tick_count t1 = tbb::tick_count::now();
+
+            interval += t1-t0;
+        }
+        printf("%g seconds using %d threads (average of %g nodes in root_set)\n",interval.seconds(),p,(double)total_root_set_size/ntrial);
+    }
+
+    if (PauseFlag) {
+        printf ("Press return key to exit");
+        char c;
+        int n = scanf("%c", &c);
+        if( n!=1 ) {
+            fprintf(stderr,"Fatal error: unexpected end of input\n");
+            exit(1);
+        }
+    }
+
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.sln
new file mode 100644 (file)
index 0000000..1cda54a
--- /dev/null
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "parallel_preorder", "parallel_preorder.vcproj", "{519446A2-AF27-429B-A5DF-625B8F034021}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               Debug = Debug
+               Release = Release
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {519446A2-AF27-429B-A5DF-625B8F034021}.Debug.ActiveCfg = Debug|Win32
+               {519446A2-AF27-429B-A5DF-625B8F034021}.Debug.Build.0 = Debug|Win32
+               {519446A2-AF27-429B-A5DF-625B8F034021}.Release.ActiveCfg = Release|Win32
+               {519446A2-AF27-429B-A5DF-625B8F034021}.Release.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.suo
new file mode 100644 (file)
index 0000000..b1af83e
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.vcproj
new file mode 100644 (file)
index 0000000..5b7c292
--- /dev/null
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="parallel_preorder"
+       ProjectGUID="{519446A2-AF27-429B-A5DF-625B8F034021}"
+       RootNamespace="parallel_preorder"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\Graph.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\parallel_preorder.cpp">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+                       <File
+                               RelativePath="..\Graph.h">
+                       </File>
+                       <File
+                               RelativePath="..\Matrix.h">
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.sln
new file mode 100644 (file)
index 0000000..6b466e9
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "parallel_preorder", "parallel_preorder.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252B}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.suo
new file mode 100644 (file)
index 0000000..958de8b
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.vcproj
new file mode 100644 (file)
index 0000000..1141985
--- /dev/null
@@ -0,0 +1,374 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="parallel_preorder"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252B}"
+       RootNamespace="parallel_preorder"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\Graph.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\parallel_preorder.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+                       <File
+                               RelativePath="..\Graph.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Matrix.h"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.sln
new file mode 100644 (file)
index 0000000..178fea0
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "parallel_preorder", "parallel_preorder.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252B}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.suo
new file mode 100644 (file)
index 0000000..4721c27
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.vcproj
new file mode 100644 (file)
index 0000000..d9e48f5
--- /dev/null
@@ -0,0 +1,371 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="parallel_preorder"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252B}"
+       RootNamespace="parallel_preorder"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\Graph.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\parallel_preorder.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+                       <File
+                               RelativePath="..\Graph.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Matrix.h"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..c89f216
--- /dev/null
@@ -0,0 +1,304 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 42;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */; };
+               05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA40B8F55D500DE73AB /* Graph.cpp */; };
+               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+               8DD76F690486A84900D96B5E /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 12;
+                       dstPath = "";
+                       dstSubfolderSpec = 16;
+                       files = (
+                               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+               8DD76F6C0486A84900D96B5E /* parallel_preorder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = parallel_preorder; sourceTree = BUILT_PRODUCTS_DIR; };
+               05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parallel_preorder.cpp; path = ../parallel_preorder.cpp; sourceTree = SOURCE_ROOT; };
+               05593AA40B8F55D500DE73AB /* Graph.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Graph.cpp; path = ../Graph.cpp; sourceTree = SOURCE_ROOT; };
+               05593AA50B8F55D500DE73AB /* Graph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Graph.h; path = ../Graph.h; sourceTree = SOURCE_ROOT; };
+               05593AA60B8F55D500DE73AB /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Matrix.h; path = ../Matrix.h; sourceTree = SOURCE_ROOT; };
+               A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               8DD76F660486A84900D96B5E /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               08FB7794FE84155DC02AAC07 /* parallel_preorder */ = {
+                       isa = PBXGroup;
+                       children = (
+                               08FB7795FE84155DC02AAC07 /* Source */,
+                               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+                               1AB674ADFE9D54B511CA2CBB /* Products */,
+                       );
+                       name = parallel_preorder;
+                       sourceTree = "<group>";
+               };
+               08FB7795FE84155DC02AAC07 /* Source */ = {
+                       isa = PBXGroup;
+                       children = (
+                               05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */,
+                               05593AA40B8F55D500DE73AB /* Graph.cpp */,
+                               05593AA50B8F55D500DE73AB /* Graph.h */,
+                               05593AA60B8F55D500DE73AB /* Matrix.h */,
+                       );
+                       name = Source;
+                       sourceTree = "<group>";
+               };
+               1AB674ADFE9D54B511CA2CBB /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               8DD76F6C0486A84900D96B5E /* parallel_preorder */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F593B30B8F06F900073279 /* libtbb.dylib */,
+                       );
+                       name = "External Frameworks and Libraries";
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+               8DD76F620486A84900D96B5E /* parallel_preorder */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "parallel_preorder" */;
+                       buildPhases = (
+                               8DD76F640486A84900D96B5E /* Sources */,
+                               8DD76F660486A84900D96B5E /* Frameworks */,
+                               8DD76F690486A84900D96B5E /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = parallel_preorder;
+                       productInstallPath = "$(HOME)/bin";
+                       productName = parallel_preorder;
+                       productReference = 8DD76F6C0486A84900D96B5E /* parallel_preorder */;
+                       productType = "com.apple.product-type.tool";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               08FB7793FE84155DC02AAC07 /* Project object */ = {
+                       isa = PBXProject;
+                       buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "parallel_preorder" */;
+                       hasScannedForEncodings = 1;
+                       mainGroup = 08FB7794FE84155DC02AAC07 /* parallel_preorder */;
+                       projectDirPath = "";
+                       targets = (
+                               8DD76F620486A84900D96B5E /* parallel_preorder */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+               8DD76F640486A84900D96B5E /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */,
+                               05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+               1DEB923208733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = parallel_preorder;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug;
+               };
+               1DEB923308733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = parallel_preorder;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               1DEB923608733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug;
+               };
+               1DEB923708733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release;
+               };
+               A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = parallel_preorder;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug64;
+               };
+               A1F593C70B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = parallel_preorder;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release64;
+               };
+               A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug64;
+               };
+               A1F593C90B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release64;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "parallel_preorder" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923208733DC60010E9CD /* Debug */,
+                               A1F593C60B8F0E6E00073279 /* Debug64 */,
+                               1DEB923308733DC60010E9CD /* Release */,
+                               A1F593C70B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "parallel_preorder" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923608733DC60010E9CD /* Debug */,
+                               A1F593C80B8F0E6E00073279 /* Debug64 */,
+                               1DEB923708733DC60010E9CD /* Release */,
+                               A1F593C90B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/Makefile
new file mode 100644 (file)
index 0000000..c9d4125
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=game_of_life
+ARGS=2:4 -t 5
+
+all:   release test
+
+release: src/Evolution.cpp src/Update_state.cpp src/Game_of_life.cpp
+       $(CXX) -O2 -DNDEBUG -D_CONSOLE $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
+
+debug: src/Evolution.cpp src/Update_state.cpp src/Game_of_life.cpp
+       $(CXX) -O0 -D_CONSOLE -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+
+clean:
+       rm -f $(PROG) *.o *.d
+
+test:
+       ./$(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/Makefile.windows
new file mode 100644 (file)
index 0000000..e6d0e63
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=game_of_life
+ARGS=2:4 -t 5
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+release:
+       $(CXX) ./src/Evolution.cpp ./src/Game_of_life.cpp ./src/Update_state.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+debug:
+       $(CXX) ./src/Evolution.cpp ./src/Game_of_life.cpp ./src/Update_state.cpp /MDd /Od /Zi /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+clean:
+       @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+       $(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/index.html
new file mode 100644 (file)
index 0000000..0c950a6
--- /dev/null
@@ -0,0 +1,53 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+The "Game of life" example demonstrates interoperability of TBB and .NET. 
+<br>This program runs 2 simultaneous instances of the classic Conway's "Game of Life". 
+One of these instances uses serial calculations to update the board. The other one calculates in parallel with TBB.
+The visualization is written in managed C++ and uses .NET CLR.
+
+<H2>Source Files</H2>
+<DL>
+<DT><A HREF="src/Form1.h">Form1.h</A>, <A HREF="src/Board.h">Board.h</A>
+<DD>Header files for GUI classes.
+<DT><A HREF="src/Evolution.h">Evolution.h</A>, <A HREF="src/Evolution.cpp">Evolution.cpp</A>
+<DD>Contain class hierarchy to implement game evolution in serial and parallel.
+<DT><A HREF="src/Update_state.cpp">Update_state.cpp </A>
+<DD>Implements 2 approaches for calculating steps in the program: with the use of SSE intrinsics, and ordinary C++ code.
+<DT><A HREF="src/Game_of_life.cpp">Game_of_life.cpp </A>
+<DD>Contains program entry point and other source not related to logical structure of the example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="src">src</A>
+<DD>Contains source files mentioned above.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+<P></P>
+
+<H2>Usage</H2>
+<DL>
+For Windows* systems, Microsoft* Visual Studio* projects are provided for each of the above versions. 
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/AssemblyInfo.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/AssemblyInfo.cpp
new file mode 100644 (file)
index 0000000..bc5d63d
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+using namespace System;
+using namespace System::Reflection;
+using namespace System::Runtime::CompilerServices;
+using namespace System::Runtime::InteropServices;
+using namespace System::Security::Permissions;
+
+//
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+//
+[assembly:AssemblyTitleAttribute("Automata")];
+[assembly:AssemblyDescriptionAttribute("")];
+[assembly:AssemblyConfigurationAttribute("")];
+[assembly:AssemblyCompanyAttribute("")];
+[assembly:AssemblyProductAttribute("Automata")];
+[assembly:AssemblyCopyrightAttribute("Copyright (c)  2007")];
+[assembly:AssemblyTrademarkAttribute("")];
+[assembly:AssemblyCultureAttribute("")];
+
+//
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the value or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+
+[assembly:AssemblyVersionAttribute("1.0.*")];
+
+[assembly:ComVisible(false)];
+
+[assembly:CLSCompliantAttribute(true)];
+
+[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Board.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Board.h
new file mode 100644 (file)
index 0000000..65e980a
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __BOARD_H__ 
+#define __BOARD_H__
+
+#define WIN32_LEAN_AND_MEAN
+
+#ifndef _CONSOLE
+#include <windows.h>
+
+using namespace System;
+using namespace System::ComponentModel;
+using namespace System::Collections;
+using namespace System::Windows::Forms;
+using namespace System::Data;
+using namespace System::Drawing;
+#define LabelPtr Label^
+#define BoardPtr Board^
+#else
+#define LabelPtr int*
+#define BoardPtr Board*
+#endif
+
+struct Matrix 
+{
+    int width;
+    int height;
+    char* data;
+};
+
+#ifndef _CONSOLE
+public ref class Board : public System::Windows::Forms::UserControl
+#else
+class Board
+#endif
+    {
+    public:
+        Board(int width, int height, int squareSize, LabelPtr counter);        
+        virtual ~Board();
+        void seed(int s);
+        void seed(const BoardPtr s);
+#ifndef _CONSOLE
+    protected: 
+        virtual void OnPaint(PaintEventArgs^ e) override;        
+        void Board::draw(Graphics^ g);
+
+    private:
+        System::ComponentModel::Container ^components;
+
+#pragma region Windows Form Designer generated code
+        void InitializeComponent(void)
+        {
+            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
+        }
+#pragma endregion
+
+    private: delegate void drawDelegate(Int32);
+    public:
+        //! Called from the Evolution thread
+        void draw( Int32 nCurIteration )
+        {
+            if (this->InvokeRequired)
+            {
+                drawDelegate^ d = gcnew drawDelegate(this, &Board::draw);
+                IAsyncResult^ result = BeginInvoke(d, nCurIteration);
+                EndInvoke(result);
+                return;
+            }
+            m_counter->Text = nCurIteration.ToString();
+            Invalidate();
+        }
+#endif
+    public:
+        Matrix *m_matrix;    
+
+    private:
+#ifndef _CONSOLE
+        SolidBrush^ m_occupiedBrush;
+        SolidBrush^ m_freeBrush;
+        Graphics^ m_graphics;
+        Graphics^ m_mem_dc;
+        Bitmap^ m_bmp;
+#endif
+        int m_width;
+        int m_height;
+        int m_squareSize;
+        LabelPtr m_counter;
+    };
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Evolution.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Evolution.cpp
new file mode 100644 (file)
index 0000000..05faa03
--- /dev/null
@@ -0,0 +1,251 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    Evolution.cpp: implementation file for evolution classes; evolution 
+                  classes do looped evolution of patterns in a defined 
+                  2 dimensional space
+*/
+
+#include "Evolution.h"
+#include "Board.h"
+
+#ifdef USE_SSE
+#define GRAIN_SIZE 14
+#else
+#define GRAIN_SIZE 4000
+#endif
+#define TIME_SLICE 330
+
+/*
+    Evolution
+*/
+
+/**
+    Evolution::UpdateMatrix() - moves the calculated destination data 
+    to the source data block. No destination zeroing is required since it will 
+    be completely overwritten during the next calculation cycle.
+**/
+void Evolution::UpdateMatrix()
+{
+    memcpy(m_matrix->data, m_dest, m_size);
+}
+
+/*
+    SequentialEvolution
+*/
+
+//! SequentialEvolution::Run - begins looped evolution
+#ifndef _CONSOLE
+void SequentialEvolution::Run()
+{
+#else
+void SequentialEvolution::Run(double execution_time, int nthread)
+{
+    printf("Starting game (Sequential evolution)\n");
+#endif
+
+    m_nIteration = 0;
+    m_serial_time = 0;
+    tbb::tick_count t0 = tbb::tick_count::now();
+    while (!m_done)
+    {
+        if( !is_paused ) 
+        {
+            tbb::tick_count t = tbb::tick_count::now();
+            Step();
+            tbb::tick_count t1 = tbb::tick_count::now();
+            ++m_nIteration;
+            double  work_time = (t1-t0).seconds();
+#ifndef _CONSOLE
+            if ( work_time * 1000 < TIME_SLICE )
+                continue;
+            m_serial_time += work_time;
+            m_board->draw(m_nIteration);
+#else
+            m_serial_time += work_time;
+#endif
+        }
+        //! Let the parallel algorithm work uncontended almost the same time
+        //! as the serial one. See ParallelEvolution::Run() as well.
+#ifndef _CONSOLE
+        m_evt_start_parallel->Set();
+        m_evt_start_serial->WaitOne();
+        t0 = tbb::tick_count::now();
+#else
+        t0 = tbb::tick_count::now();
+        if(m_serial_time > execution_time)
+        {
+            printf("iterations count = %d time = %g\n", m_nIteration, m_serial_time);
+            break;
+        }
+#endif
+    }
+}
+
+//! SequentialEvolution::Step() - override of step method
+void SequentialEvolution::Step()
+{
+        if( !is_paused ) 
+    {
+#ifdef USE_SSE
+    UpdateState(m_matrix, m_matrix->data, 0, m_matrix->height);
+#else
+    UpdateState(m_matrix, m_dest, 0, (m_matrix->width * m_matrix->height)-1);
+    UpdateMatrix();
+#endif
+        }
+}
+
+/*
+    ParallelEvolution
+*/
+
+//! SequentialEvolution::Run - begins looped evolution
+#ifndef _CONSOLE
+void ParallelEvolution::Run()
+{
+#else
+void ParallelEvolution::Run(double execution_time, int nthread)
+{
+    if(nthread == tbb::task_scheduler_init::automatic)
+        printf("Starting game (Parallel evolution for automatic number of thread(s))\n");
+    else
+        printf("Starting game (Parallel evolution for %d thread(s))\n", nthread);
+#endif
+
+    m_nIteration = 0;
+    m_parallel_time = 0;
+
+#ifndef _CONSOLE
+    //! start task scheduler as necessary
+    if (m_pInit == NULL)
+    {
+        m_pInit = new tbb::task_scheduler_init();
+    }
+    m_evt_start_parallel->WaitOne();
+#else
+    tbb::task_scheduler_init init(nthread);
+#endif
+
+    double  work_time = m_serial_time;
+    tbb::tick_count t0 = tbb::tick_count::now();
+
+    while (!m_done)
+    {
+        if( !is_paused ) 
+        {
+            tbb::tick_count t = tbb::tick_count::now();
+            Step();
+            tbb::tick_count t1 = tbb::tick_count::now();
+            ++m_nIteration;
+            double real_work_time = (t1-t0).seconds();
+#ifndef _CONSOLE
+            if ( real_work_time < work_time )
+                continue;
+            m_parallel_time += real_work_time;
+            m_board->draw(m_nIteration); 
+#else
+            m_parallel_time += real_work_time;
+#endif
+        }
+        //! Let the serial algorithm work the same time as the parallel one.
+#ifndef _CONSOLE
+        m_evt_start_serial->Set();
+        m_evt_start_parallel->WaitOne();
+
+        work_time = m_serial_time - m_parallel_time;
+        t0 = tbb::tick_count::now();
+#else
+        t0 = tbb::tick_count::now();
+        if(m_parallel_time > execution_time)
+        {
+            printf("iterations count = %d time = %g\n", m_nIteration, m_parallel_time);
+            init.terminate();
+            break;
+        }
+#endif
+    }
+}
+
+/**
+    class tbb_parallel_task
+    
+    TBB requires a class for parallel loop implementations. The actual 
+    loop "chunks" are performed using the () operator of the class. 
+    The blocked_range contains the range to calculate. Please see the 
+    TBB documentation for more information.
+**/
+#ifndef _CONSOLE
+public class tbb_parallel_task
+#else
+class tbb_parallel_task
+#endif
+{
+public:
+    static void set_values (Matrix* source, char* dest)
+    {
+        m_source = source;
+        m_dest = dest;
+        return;
+    }
+
+    void operator()( const tbb::blocked_range<size_t>& r ) const 
+    {
+        int begin = (int)r.begin();            //! capture lower range number for this chunk
+        int end = (int)r.end();                //! capture upper range number for this chunk
+        UpdateState(m_source, m_dest, begin, end);
+    }
+
+    tbb_parallel_task () {}
+
+private:
+    static Matrix* m_source;
+    static char* m_dest;
+};
+
+Matrix* tbb_parallel_task::m_source;
+char* tbb_parallel_task::m_dest;
+
+//! ParallelEvolution::Step() - override of Step method
+void ParallelEvolution::Step()
+{
+    size_t begin = 0;                   //! beginning cell position
+#ifdef USE_SSE
+    size_t end = m_matrix->height;      //! ending cell position
+#else
+    size_t end = m_size-1;              //! ending cell position
+#endif
+
+    //! set matrix pointers
+    tbb_parallel_task::set_values(m_matrix, m_dest);
+
+    //! do calculation loop
+    parallel_for (tbb::blocked_range<size_t> (begin, end, GRAIN_SIZE), tbb_parallel_task());
+    UpdateMatrix();
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Evolution.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Evolution.h
new file mode 100644 (file)
index 0000000..e70606a
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/** 
+    Evolution.h: Header file for evolution classes; evolution classes do 
+    looped evolution of patterns in a defined 2 dimensional space 
+**/
+
+#ifndef __EVOLUTION_H__
+#define __EVOLUTION_H__
+
+#include "Board.h"
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#define WIN32_LEAN_AND_MEAN
+
+//! Threading Building Blocks includes
+#include "tbb/task_scheduler_init.h"
+#include "tbb/blocked_range.h"
+#include "tbb/parallel_for.h"
+#include "tbb/tick_count.h"
+
+#ifndef _CONSOLE
+#include <windows.h>
+using namespace System::Threading;
+#else
+typedef unsigned int Int32;
+#endif
+
+void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end);
+
+/**
+    class Evolution - base class for SequentialEvolution and ParallelEvolution
+**/
+#ifndef _CONSOLE
+public ref class Evolution abstract
+#else
+class Evolution
+#endif
+{
+public:
+    Evolution( Matrix *m,                //! beginning matrix including initial pattern
+               BoardPtr board              //! the board to update
+             ) : m_matrix(m), m_board(board), 
+                 m_size(m_matrix->height * m_matrix->width), m_done(false)
+    {
+        //! allocate memory for second matrix data block
+        m_dest = new char[m_size];
+        is_paused = false;
+#ifdef _CONSOLE
+        m_serial_time = 0;
+#endif
+    }
+
+    virtual ~Evolution()
+    {
+        delete[] m_dest;
+    }
+
+    //! Run() - begins looped evolution
+#ifndef _CONSOLE
+    virtual void Run() = 0;
+#else
+    virtual void Run(double execution_time, int nthread) = 0;
+#endif
+
+    //! Quit() - tell the thread to terminate
+    virtual void Quit() { m_done = true; }
+    
+    //! Step() - performs a single evolutionary generation computation on the game matrix
+    virtual void Step() = 0;
+
+    //! SetPause() - change condition of variable is_paused
+    virtual void SetPause(bool condition)
+    {
+        if ( condition == true )
+            is_paused = true;
+        else
+            is_paused = false;
+    }
+    
+protected:
+    /** 
+        UpdateMatrix() - moves the previous destination data to the source 
+        data block and zeros out destination.
+    **/
+    void UpdateMatrix();
+
+protected:
+    Matrix*         m_matrix;       //! Pointer to initial matrix
+    char*           m_dest;         //! Pointer to calculation destination data    
+    BoardPtr        m_board;        //! The game board to update
+    int             m_size;         //! size of the matrix data block
+    volatile bool   m_done;         //! a flag used to terminate the thread
+    Int32           m_nIteration;   //! current calculation cycle index
+    volatile bool   is_paused;      //! is needed to perform next iteration
+    
+    //! Calculation time of the sequential version (since the start), seconds.
+    /**
+        This member is updated by the sequential version and read by parallel,
+        so no synchronization is necessary.
+    **/
+#ifndef _CONSOLE
+    static volatile double m_serial_time = 0;
+
+    static System::Threading::AutoResetEvent    ^m_evt_start_serial = gcnew AutoResetEvent(false),
+                                                ^m_evt_start_parallel = gcnew AutoResetEvent(false);
+#else
+    double m_serial_time;
+#endif
+};
+
+/**
+    class SequentialEvolution - derived from Evolution - calculate life generations serially
+**/
+#ifndef _CONSOLE
+public ref class SequentialEvolution: public Evolution
+#else
+class SequentialEvolution: public Evolution
+#endif
+{
+public:
+    SequentialEvolution(Matrix *m, BoardPtr board)
+                       : Evolution(m, board)
+    {}
+#ifndef _CONSOLE        
+    virtual void Run() override;
+    virtual void Step() override;
+#else
+    virtual void Run(double execution_time, int nthread);
+    virtual void Step();
+#endif
+
+};
+
+/**
+    class ParallelEvolution - derived from Evolution - calculate life generations
+    in parallel using Intel's TBB package
+**/
+#ifndef _CONSOLE
+public ref class ParallelEvolution: public Evolution
+#else
+class ParallelEvolution: public Evolution
+#endif
+{
+public:
+
+    ParallelEvolution(Matrix *m, BoardPtr board)
+                     : Evolution(m, board),
+                       m_parallel_time(0)
+    {
+        // instantiate a task_scheduler_init object and save a pointer to it
+        m_pInit = NULL;
+    }
+    
+    ~ParallelEvolution()
+    {
+        //! delete task_scheduler_init object
+        if (m_pInit != NULL)
+            delete m_pInit;
+    }
+#ifndef _CONSOLE
+    virtual void Run() override;
+    virtual void Step() override;
+#else
+    virtual void Run(double execution_time, int nthread);
+    virtual void Step();
+#endif
+    
+
+private:
+    tbb::task_scheduler_init* m_pInit;
+
+    double m_parallel_time;
+};
+
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Form1.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Form1.h
new file mode 100644 (file)
index 0000000..972b78f
--- /dev/null
@@ -0,0 +1,314 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef _CONSOLE
+#ifndef __FORM1_H__
+#define __FORM1_H__
+
+#include <time.h>
+#include "Board.h"
+#include "Evolution.h"
+
+#define BOARD_SQUARE_SIZE 2
+
+    using namespace System;
+    using namespace System::ComponentModel;
+    using namespace System::Collections;
+    using namespace System::Windows::Forms;
+    using namespace System::Data;
+    using namespace System::Drawing;
+
+    public ref class Form1 : public System::Windows::Forms::Form
+    {
+    public:
+        Form1(void)
+        {
+            InitializeComponent();
+
+            FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog;
+            ClientSize = System::Drawing::Size(1206, 600+m_ribbonHeight+menuStrip1->Height);
+
+            int boardWidth = (ClientRectangle.Width/2-m_sepWidth/2)/BOARD_SQUARE_SIZE;
+            int boardHeight = (ClientRectangle.Height-menuStrip1->Height-m_ribbonHeight)/BOARD_SQUARE_SIZE;
+
+            m_board1 = gcnew Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, seqGen);
+            m_board2 = gcnew Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, parGen);
+            
+            Controls->Add(m_board1);
+            Controls->Add(m_board2);
+
+            m_board1->Location = System::Drawing::Point(2, m_ribbonHeight + menuStrip1->Height);
+            m_board2->Location = System::Drawing::Point(2 + boardWidth*BOARD_SQUARE_SIZE + m_sepWidth/2, m_ribbonHeight + menuStrip1->Height);
+
+            m_seq = gcnew SequentialEvolution(m_board1->m_matrix, m_board1);
+            m_par = gcnew ParallelEvolution(m_board2->m_matrix, m_board2);
+
+            m_seqThread = gcnew Thread(gcnew ThreadStart(m_seq, &SequentialEvolution::Run));
+            m_parThread = gcnew Thread(gcnew ThreadStart(m_par, &ParallelEvolution::Run));        
+
+            Thread::CurrentThread->Priority = ThreadPriority::AboveNormal;
+
+            m_suspend = true;
+        }
+    protected:
+        ~Form1()
+        {
+            if (components)
+            {
+                delete components;
+            }
+        }
+    private: System::Windows::Forms::MenuStrip^  menuStrip1;
+    private: System::Windows::Forms::ToolStripMenuItem^  fileToolStripMenuItem;
+    private: System::Windows::Forms::ToolStripMenuItem^  exitToolStripMenuItem;
+    private: System::Windows::Forms::ToolStripMenuItem^  gameToolStripMenuItem;
+    private: System::Windows::Forms::ToolStripMenuItem^  seedToolStripMenuItem;
+    private: System::Windows::Forms::ToolStripMenuItem^  runToolStripMenuItem;
+    private: System::Windows::Forms::ToolStripMenuItem^  pauseToolStripMenuItem;
+    private: Board^ m_board1;
+    private: Board^ m_board2;
+    private: System::Windows::Forms::Label^  Sequential;
+    private: System::Windows::Forms::Label^  label1;
+    private: static const int m_sepWidth = 5;
+    private: static const int m_ribbonHeight = 26;
+    private: SequentialEvolution^ m_seq;
+    private: ParallelEvolution^ m_par;
+    private: Thread^ m_seqThread;
+    private: Thread^ m_parThread;
+    private: System::Windows::Forms::Label^  seqGen;
+    private: System::Windows::Forms::Label^  parGen;
+    private: bool m_suspend;
+
+    private:
+        System::ComponentModel::Container ^components;
+
+#pragma region Windows Form Designer generated code
+        void InitializeComponent(void)
+        {
+            this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
+            this->fileToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+            this->exitToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+            this->gameToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+            this->seedToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+            this->runToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+            this->pauseToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+            this->Sequential = (gcnew System::Windows::Forms::Label());
+            this->label1 = (gcnew System::Windows::Forms::Label());
+            this->seqGen = (gcnew System::Windows::Forms::Label());
+            this->parGen = (gcnew System::Windows::Forms::Label());
+            this->menuStrip1->SuspendLayout();
+            this->SuspendLayout();
+            // 
+            // menuStrip1
+            // 
+            this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) 
+                {this->fileToolStripMenuItem, this->gameToolStripMenuItem});
+            this->menuStrip1->Location = System::Drawing::Point(0, 0);
+            this->menuStrip1->Name = L"menuStrip1";
+            this->menuStrip1->Padding = System::Windows::Forms::Padding(8, 2, 0, 2);
+            this->menuStrip1->Size = System::Drawing::Size(1600, 26);
+            this->menuStrip1->TabIndex = 0;
+            this->menuStrip1->Text = L"menuStrip1";
+            this->menuStrip1->ItemClicked += gcnew System::Windows::Forms::ToolStripItemClickedEventHandler(this, &Form1::menuStrip1_ItemClicked);
+            // 
+            // fileToolStripMenuItem
+            // 
+            this->fileToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(1) {this->exitToolStripMenuItem});
+            this->fileToolStripMenuItem->Name = L"fileToolStripMenuItem";
+            this->fileToolStripMenuItem->Size = System::Drawing::Size(40, 22);
+            this->fileToolStripMenuItem->Text = L"File";
+            // 
+            // exitToolStripMenuItem
+            // 
+            this->exitToolStripMenuItem->Name = L"exitToolStripMenuItem";
+            this->exitToolStripMenuItem->Size = System::Drawing::Size(99, 22);
+            this->exitToolStripMenuItem->Text = L"Exit";
+            this->exitToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnExit);
+            // 
+            // gameToolStripMenuItem
+            // 
+            this->gameToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(3) {this->seedToolStripMenuItem, 
+                this->runToolStripMenuItem, this->pauseToolStripMenuItem});
+            this->gameToolStripMenuItem->Name = L"gameToolStripMenuItem";
+            this->gameToolStripMenuItem->Size = System::Drawing::Size(59, 22);
+            this->gameToolStripMenuItem->Text = L"Game";
+            // 
+            // seedToolStripMenuItem
+            // 
+            this->seedToolStripMenuItem->Name = L"seedToolStripMenuItem";
+            this->seedToolStripMenuItem->Size = System::Drawing::Size(115, 22);
+            this->seedToolStripMenuItem->Text = L"Seed";
+            this->seedToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnSeed);
+            // 
+            // runToolStripMenuItem
+            // 
+            this->runToolStripMenuItem->Enabled = false;
+            this->runToolStripMenuItem->Name = L"runToolStripMenuItem";
+            this->runToolStripMenuItem->Size = System::Drawing::Size(115, 22);
+            this->runToolStripMenuItem->Text = L"Run";
+            this->runToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnRun);
+            // 
+            // pauseToolStripMenuItem
+            // 
+            this->pauseToolStripMenuItem->Enabled = false;
+            this->pauseToolStripMenuItem->Name = L"pauseToolStripMenuItem";
+            this->pauseToolStripMenuItem->Size = System::Drawing::Size(115, 22);
+            this->pauseToolStripMenuItem->Text = L"Pause";
+            this->pauseToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnPauseResume);
+            // 
+            // Sequential
+            // 
+            this->Sequential->AutoSize = true;
+            this->Sequential->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
+                static_cast<System::Byte>(0)));
+            this->Sequential->Location = System::Drawing::Point(12, 32);
+            this->Sequential->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
+            this->Sequential->Name = L"Sequential";
+            this->Sequential->Size = System::Drawing::Size(239, 18);
+            this->Sequential->TabIndex = 1;
+            this->Sequential->Text = L"Sequential Algorithm      generation:";
+            // 
+            // label1
+            // 
+            this->label1->AutoSize = true;
+            this->label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
+                static_cast<System::Byte>(0)));
+            this->label1->Location = System::Drawing::Point(813, 32);
+            this->label1->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
+            this->label1->Name = L"label1";
+            this->label1->Size = System::Drawing::Size(219, 18);
+            this->label1->TabIndex = 2;
+            this->label1->Text = L"Parallel Algorithm     generation: ";
+            // 
+            // seqGen
+            // 
+            this->seqGen->AutoSize = true;
+            this->seqGen->Location = System::Drawing::Point(289, 35);
+            this->seqGen->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
+            this->seqGen->Name = L"seqGen";
+            this->seqGen->Size = System::Drawing::Size(16, 17);
+            this->seqGen->TabIndex = 3;
+            this->seqGen->Text = L"0";
+            // 
+            // parGen
+            // 
+            this->parGen->AutoSize = true;
+            this->parGen->Location = System::Drawing::Point(1068, 35);
+            this->parGen->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
+            this->parGen->Name = L"parGen";
+            this->parGen->Size = System::Drawing::Size(16, 17);
+            this->parGen->TabIndex = 4;
+            this->parGen->Text = L"0";
+            // 
+            // Form1
+            // 
+            this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);
+            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
+            this->ClientSize = System::Drawing::Size(1600, 738);
+            this->Controls->Add(this->parGen);
+            this->Controls->Add(this->seqGen);
+            this->Controls->Add(this->label1);
+            this->Controls->Add(this->Sequential);
+            this->Controls->Add(this->menuStrip1);
+            this->MainMenuStrip = this->menuStrip1;
+            this->Margin = System::Windows::Forms::Padding(4);
+            this->MaximizeBox = false;
+            this->Name = L"Form1";
+            this->Text = L"Game of Life";
+            this->menuStrip1->ResumeLayout(false);
+            this->menuStrip1->PerformLayout();
+            this->ResumeLayout(false);
+            this->PerformLayout();
+
+        }
+#pragma endregion    
+    protected: 
+        void CloseApp ()
+        {
+            m_seq->Quit();
+            m_par->Quit();
+            //! Perform a very ungracious exit, should coordinate the threads
+            System::Environment::Exit(0);            
+        }
+    
+    protected: 
+        virtual void OnPaint(PaintEventArgs^ e) override
+        {
+        }
+
+        virtual void OnFormClosing(FormClosingEventArgs^ e) override
+        { 
+            CloseApp();
+        }
+    
+        void OnExit(System::Object^ sender, System::EventArgs^ e)
+        {                
+            CloseApp();
+        }
+
+        void OnSeed(System::Object^ sender, System::EventArgs^ e)
+        {
+            this->seedToolStripMenuItem->Enabled = false;
+            this->runToolStripMenuItem->Enabled = true;            
+            time_t now = time(NULL);
+            this->m_board1->seed((int)now);
+            this->m_board2->seed(this->m_board1);
+            this->Invalidate();
+        }
+
+        void OnRun(System::Object^ sender, System::EventArgs^ e)
+        {    
+            this->runToolStripMenuItem->Enabled = false;        
+            this->pauseToolStripMenuItem->Enabled = true;
+            m_seqThread->Start();
+            m_parThread->Start();    
+        }
+
+        void OnPauseResume(System::Object^ sender, System::EventArgs^ e)
+        {    
+            if (m_suspend)
+            {
+                m_seq->SetPause(true);
+                m_par->SetPause(true);
+                this->pauseToolStripMenuItem->Text = L"Resume";
+            }
+            else
+            {
+                m_seq->SetPause(false);
+                m_par->SetPause(false);            
+                this->pauseToolStripMenuItem->Text = L"Pause";
+            }
+            m_suspend = !m_suspend;
+        }
+
+    private: 
+        System::Void menuStrip1_ItemClicked(System::Object^  sender, System::Windows::Forms::ToolStripItemClickedEventArgs^  e) 
+        {}
+};
+#endif
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Game_of_life.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Game_of_life.cpp
new file mode 100644 (file)
index 0000000..367e629
--- /dev/null
@@ -0,0 +1,238 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/* 
+    Game_of_life.cpp : 
+                      main project file.
+*/
+#include "Board.h"
+#include "Form1.h"
+
+#define WIN32_LEAN_AND_MEAN
+
+#ifndef _CONSOLE
+#include <windows.h>
+#else
+#include <iostream>
+#include <sstream>
+#include <time.h>
+#include "Evolution.h"
+
+#define BOARD_SQUARE_SIZE 2
+
+int low;                            //! lower range limit of threads
+int high;                           //! high range limit of threads
+double execution_time;              //! time for game of life iterations
+#endif
+
+Board::Board(int width, int height, int squareSize, LabelPtr counter)
+: m_width(width), m_height(height), m_squareSize(squareSize), m_counter(counter)
+{
+#ifndef _CONSOLE
+    InitializeComponent();
+    DoubleBuffered = true;
+
+    this->Width = m_squareSize*width;
+    this->Height = m_squareSize*height;
+#endif
+    m_matrix = new Matrix();
+    m_matrix->width = width;
+    m_matrix->height = height;
+    m_matrix->data = new char[width*height];
+    memset(m_matrix->data, 0, width*height);
+#ifndef _CONSOLE
+    m_occupiedBrush = gcnew SolidBrush(Color::Black);
+    m_freeBrush = gcnew SolidBrush(Color::LightGray);
+    
+    m_graphics = CreateGraphics();
+    m_bmp = gcnew Bitmap(Width, Height);
+    m_mem_dc = Graphics::FromImage(m_bmp);
+#endif
+}
+
+Board::~Board()
+{
+#ifndef _CONSOLE
+    if (components)
+    {
+        delete components;
+    }
+#endif
+    delete[] m_matrix->data;
+    delete m_matrix;
+}
+
+void Board::seed(int s)
+{        
+    srand(s);
+    for (int j=0; j<m_height; j++)
+    {
+        for (int i=0; i<m_width; i++)
+        {        
+            int x = rand()/(int)(((unsigned)RAND_MAX + 1) / 100);
+            m_matrix->data[i+j*m_width] = x>75? 1: 0;               // 25% occupied
+        }
+    }
+#ifndef _CONSOLE
+    Invalidate();
+#endif
+}
+
+void Board::seed( const BoardPtr src )
+{        
+            memcpy(m_matrix->data, src->m_matrix->data, m_height*m_width);
+#ifndef _CONSOLE
+    Invalidate();
+#endif
+}
+
+#ifndef _CONSOLE
+void Board::draw(Graphics^ g)
+{
+    m_mem_dc->FillRectangle(m_freeBrush, Drawing::Rectangle(0, 0, m_width*m_squareSize, m_height*m_squareSize));
+    for (int j=0; j<m_height; j++)
+    {
+        for (int i=0; i<m_width; i++)
+        {    
+            if ( m_matrix->data[i+j*m_width] )
+            {
+                m_mem_dc->FillRectangle(m_occupiedBrush, Drawing::Rectangle(i*m_squareSize, j*m_squareSize, m_squareSize, m_squareSize));
+            }
+        }
+    }
+    g->DrawImage(m_bmp, 0, 0);
+}
+
+void Board::OnPaint(PaintEventArgs^ e)
+{
+    draw(e->Graphics);
+}
+
+[STAThreadAttribute]
+int main(array<System::String ^> ^args)
+{
+    // Enabling Windows XP visual effects before any controls are created
+    Application::EnableVisualStyles();
+    Application::SetCompatibleTextRenderingDefault(false); 
+
+    // Create the main window and run it
+    Application::Run(gcnew Form1());
+    return 0;
+}
+#else
+
+//! Print usage of this program
+void PrintUsage() 
+{
+    printf("Usage: gol [M[:N] -t execution_time]\nM and N are a range of numbers of threads to be used.\nexecution_time is a time (in sec) for execution game_of_life iterations\n");
+    printf("Default values:\nM:\t\tautomatic\nN:\t\tM\nexecution_time:\t10\n");
+}
+
+//! Parse command line
+bool ParseCommandLine(int argc, char * argv []) 
+{
+    char* s = argv[1];
+    char* end;
+    //! command line without parameters
+    if(argc == 1)
+    {
+        low = tbb::task_scheduler_init::automatic;
+        high = low;
+        execution_time = 5;
+        return true;
+    }
+    //! command line with parameters
+    if(argc != 4)
+    {
+        PrintUsage();
+        return false;
+    }
+    if(std::string("-t") != argv[argc-2])
+    //! process M[:N] parameter
+    high = strtol(s,&end,0);
+    low = strtol(s,&end,0);
+    switch( *end ) 
+    {
+        case ':': 
+            high = strtol(end+1,0,0); 
+            break;
+        case '\0':
+            break;
+        default:
+            PrintUsage();
+            return false;
+    }
+    if (high < low)
+    {
+        std::cout << "Set correct range. Current range: " << low << ":" << high << std::endl;
+        PrintUsage();
+        return false;
+
+    }
+    //! process execution_time parameter
+    execution_time = strtol(argv[argc-1],&end,0);
+    return true;
+}
+
+int main( int argc, char* argv[] ) 
+{
+    if(!ParseCommandLine( argc, argv ))
+        return 1;
+    SequentialEvolution* m_seq;
+    ParallelEvolution* m_par;
+    Board* m_board1;
+    Board* m_board2; 
+    int* count = NULL;
+   
+    int boardWidth = 300;
+    int boardHeight = 300;
+
+    m_board1 = new Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, count);
+    m_board2 = new Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, count);
+
+    time_t now = time(NULL);
+    printf("Generate Game of life board\n");
+    m_board1->seed((int)now);
+    m_board2->seed(m_board1);
+
+    m_seq = new SequentialEvolution(m_board1->m_matrix, m_board1);
+    m_seq->Run(execution_time, 1);
+    delete m_seq;
+
+    m_par = new ParallelEvolution(m_board2->m_matrix, m_board2);
+    for( int p = low; p <= high; ++p ) 
+    {
+        m_par->Run(execution_time, p);
+    }
+    delete m_par;
+
+    delete m_board1;
+    delete m_board2;
+    return 0;
+}
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Update_state.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/src/Update_state.cpp
new file mode 100644 (file)
index 0000000..64c8f4d
--- /dev/null
@@ -0,0 +1,410 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "Evolution.h"
+
+#ifdef USE_SSE 
+/* Update states with SSE */
+
+#include <xmmintrin.h>
+#include <emmintrin.h>
+
+inline void create_record( char * src, unsigned * dst, unsigned width)
+{
+    dst[0] |= src[width - 1];
+    for( unsigned a=0; a<31u; ++a )
+        dst[0] |= src[a]<<(a+1);
+    unsigned a;
+    for( a=31u; a<width; ++a )
+        dst[(a+1)/32u] |= src[a]<<((a+1)%32u);
+    dst[(a+1)/32u] |= src[0]<<((a+1)%32u);
+}
+
+inline void sum_offset( __m128i * X, __m128i * A, __m128i * B, __m128i * C, 
+                        unsigned size_sse_ar, unsigned shift )
+{
+    for(unsigned i=0; i<size_sse_ar; ++i) 
+    {
+        __m128i tmp = _mm_and_si128(A[i],X[shift + i]);    
+        A[i]=_mm_xor_si128(A[i],X[shift + i]);    
+        C[i]=_mm_or_si128(C[i],_mm_and_si128(B[i],tmp));
+        B[i]=_mm_xor_si128(B[i],tmp);
+    }
+}
+
+inline void shift_left2D( __m128i * X, unsigned height, unsigned size_sse_row )
+{
+    for( unsigned b=0; b<height; ++b ) 
+    {
+        unsigned ind = b*size_sse_row;
+        unsigned x0 = X[ind].m128i_u32[0] & 1;
+
+        X[ind] =_mm_or_si128( _mm_srli_epi16(X[ind],1), 
+            _mm_slli_epi16( _mm_srli_si128( X[ind], 2), 15) );
+    
+        unsigned x1 = X[ind + 1].m128i_u32[0] & 1;
+        X[ind+1] =_mm_or_si128( _mm_srli_epi16( X[ind+1],1), 
+            _mm_slli_epi16( _mm_srli_si128( X[ind+1], 2), 15) );
+        X[ind].m128i_u32[3] |= x1<<31;
+        
+        unsigned x2 = X[ind + 2].m128i_u32[0] & 1;
+        X[ind+2] =_mm_or_si128( _mm_srli_epi16( X[ind+2],1), 
+            _mm_slli_epi16( _mm_srli_si128( X[ind+2], 2), 15) );
+        X[ind+1].m128i_u32[3] |= x2<<31;
+        
+        unsigned* dst = (unsigned*)&X[ind];
+        dst[301/32u] |= x0<<(301%32u);
+   }
+}
+
+inline void shift_right2D( __m128i * X, unsigned height, unsigned size_sse_row )
+{
+    for( unsigned b=0; b<height; ++b ) 
+    {
+        unsigned ind = b*size_sse_row;
+
+        unsigned x0 = X[ind].m128i_u32[3]; x0>>=31;
+        X[ind] =_mm_or_si128( _mm_slli_epi16(X[ind],1), 
+            _mm_srli_epi16( _mm_slli_si128( X[ind], 2), 15) );
+            
+        unsigned x1 = X[ind + 1].m128i_u32[3]; x1>>=31;
+        X[ind + 1] =_mm_or_si128( _mm_slli_epi16(X[ind + 1],1),
+                _mm_srli_epi16( _mm_slli_si128( X[ind + 1], 2), 15) );
+        X[ind + 1].m128i_u32[0] |= x0;
+                
+        unsigned* dst = (unsigned*)&X[ind];
+        unsigned x2 = dst[301/32u] & (1<<(301%32u)); x2>>=(301%32u);
+        X[ind + 2] =_mm_or_si128( _mm_slli_epi16(X[ind + 2],1),
+            _mm_srli_epi16( _mm_slli_si128( X[ind + 2], 2), 15) );        
+        X[ind + 2].m128i_u32[0] |= x1;    
+        X[ind].m128i_u32[0] |= x2;
+   }
+}
+
+void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end)
+{
+    //300/128 + 1 =3, 3*300=900
+    unsigned size_sse_row = m_matrix->width/128 + 1; //3
+    unsigned size_sse_ar=size_sse_row * (end - begin); 
+    __m128i X[906], A[900], B[900], C[900];
+    char * mas  = m_matrix->data;
+    
+    for( unsigned i=0; i<size_sse_ar; ++i)
+    {
+        A[i].m128i_u32[0]=0;A[i].m128i_u32[1]=0;A[i].m128i_u32[2]=0;A[i].m128i_u32[3]=0;
+        B[i].m128i_u32[0]=0;B[i].m128i_u32[1]=0;B[i].m128i_u32[2]=0;B[i].m128i_u32[3]=0;
+        C[i].m128i_u32[0]=0;C[i].m128i_u32[1]=0;C[i].m128i_u32[2]=0;C[i].m128i_u32[3]=0;    
+    }
+
+    for( unsigned i=0; i<size_sse_ar+6; ++i)
+    {
+        X[i].m128i_u32[0]=0;X[i].m128i_u32[1]=0;X[i].m128i_u32[2]=0;X[i].m128i_u32[3]=0;
+    }
+
+    // create X[] with bounds
+    unsigned height = end - begin;
+    unsigned width = m_matrix->width;
+    for( unsigned b = 0 ; b < height; ++b ) 
+    {
+        char* src = &mas[(b + begin)*width];
+        unsigned* dst = (unsigned*)&X[(b+1)*size_sse_row];
+        create_record(src, dst, width);
+    }
+    // create high row in X[]
+    char * src;
+    if(begin == 0) 
+    {
+        src = &mas[(m_matrix->height-1)*width];
+    }
+    else 
+    {
+        src = &mas[(begin-1)*width];
+    }
+    unsigned* dst = (unsigned*)X;
+    create_record(src, dst, width);
+    
+    //create lower row in X[]
+    if(end == m_matrix->height ) 
+    {
+        src = mas;
+    }        
+    else 
+    {
+        src = &mas[end*width];
+    }
+    dst = (unsigned*)&X[(height+1)*size_sse_row];
+    create_record(src, dst, width);
+    
+    //sum( C, B, A, X+offset_for_upwards ); high-left friend
+    sum_offset(X,A,B,C,size_sse_ar, 0);
+    
+    //sum( C, B, A, X+offset_for_no_vertical_shift );
+    sum_offset(X,A,B,C,size_sse_ar, size_sse_row);
+    
+    //sum( C, B, A, X+offset_for_downwards );
+    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);
+
+    //shift_left( X ); (when view 2D) in our logic it is in right
+    height = end - begin + 2;
+    shift_left2D( X, height, size_sse_row);
+
+    //sum( C, B, A, X+offset_for_upwards ); high-left friend
+    sum_offset(X,A,B,C,size_sse_ar, 0);
+
+    //sum( C, B, A, X+offset_for_downwards );
+    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);
+
+    //shift_left( X ); (view in 2D) in our logic it is right shift
+    height = end - begin + 2;
+    shift_left2D( X, height, size_sse_row);
+    
+    //sum( C, B, A, X+offset_for_upwards ); high-right friend
+    sum_offset(X,A,B,C,size_sse_ar, 0);
+    
+    //sum( C, B, A, X+offset_for_no_vertical_shift ); right friend
+    sum_offset(X,A,B,C,size_sse_ar, size_sse_row);    
+    
+    //sum( C, B, A, X+offset_for_downwards ); right down friend
+    sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row);
+
+    //shift_right( X ); (when view in 2D) in our case it left shift.
+    height = end - begin + 2;
+    shift_right2D( X, height, size_sse_row);
+    
+    //X = (X|A)&B&~C (done bitwise over the arrays) 
+    unsigned shift = size_sse_row;
+    for(unsigned i=0; i<size_sse_ar; ++i) 
+    {
+        C[i].m128i_u32[0] = ~C[i].m128i_u32[0];
+        C[i].m128i_u32[1] = ~C[i].m128i_u32[1];
+        C[i].m128i_u32[2] = ~C[i].m128i_u32[2];
+        C[i].m128i_u32[3] = ~C[i].m128i_u32[3];
+        X[shift + i] = _mm_and_si128(_mm_and_si128(_mm_or_si128(X[shift + i],
+            A[i]),B[i]),C[i]);    
+    }
+
+    height = end - begin;
+    width=m_matrix->width;
+    for( unsigned b=0; b<height; ++b ) 
+    {
+        char* dst = &dest[(b+begin)*width];
+        unsigned* src = (unsigned*)&X[(b+1)*size_sse_row];
+        for( unsigned a=0; a<width; ++a )
+        {
+            unsigned c = src[a/32u] & 1<<(a%32u);
+            dst[a] = c>>(a%32u);
+        }
+    }
+}
+#else 
+/* end SSE block */
+
+// ----------------------------------------------------------------------
+// GetAdjacentCellState() - returns the state (value) of the specified 
+// adjacent cell of the current cell "cellNumber"
+char GetAdjacentCellState(
+                                char* source,      // pointer to source data block
+                                int x,             // logical width of field
+                                int y,             // logical height of field
+                                int cellNumber,    // number of cell position to examine
+                                int cp             // which adjacent position
+                               )
+{
+/* 
+cp 
+*-- cp=1 ... --- cp=8 (summary: -1-2-3-
+-x-          -x-                -4-x-5-
+---          --*                -6-7-8- )
+*/
+    char cellState = 0;        // return value
+
+    // set up boundary flags to trigger field-wrap logic
+    bool onTopRow = false;
+    bool onBottomRow = false;
+    bool onLeftColumn = false;
+    bool onRightColumn = false;
+
+    // check to see if cell is on top row
+    if (cellNumber < x)
+    {
+        onTopRow = true;
+    }
+    // check to see if cell is on bottom row
+    if ((x*y)-cellNumber <= x)
+    {
+        onBottomRow = true;
+    }
+    // check to see if cell is on left column
+    if (cellNumber%x == 0)
+    {
+        onLeftColumn = true;
+    }
+    // check to see if cell is on right column
+    if ((cellNumber+1)%x == 0)
+    {
+        onRightColumn = true;
+    }
+
+    switch (cp)
+    {
+        case 1:
+            if (onTopRow && onLeftColumn)
+            {
+                return *(source+((x*y)-1));
+            }
+            if (onTopRow && !onLeftColumn)
+            {
+                return *(source+(((x*y)-x)+(cellNumber-1)));
+            }
+            if (onLeftColumn && !onTopRow)
+            {
+                return *(source+(cellNumber-1));
+            }
+            return *((source+cellNumber)-(x+1));
+
+        case 2:
+            if (onTopRow)
+            {
+                return *(source+(((x*y)-x)+cellNumber));
+            }
+            return *((source+cellNumber)-x);
+
+        case 3:
+            if (onTopRow && onRightColumn)
+            {
+                return *(source+((x*y)-x));
+            }
+            if (onTopRow && !onRightColumn)
+            {
+                return *(source+(((x*y)-x)+(cellNumber+1)));
+            }
+            if (onRightColumn && !onTopRow)
+            {
+                return *(source+((cellNumber-(x*2))+1));
+            }
+            return *(source+(cellNumber-(x-1)));
+
+        case 4:
+            if (onRightColumn)
+            {
+                return *(source+(cellNumber-(x-1)));
+            }
+            return *(source+(cellNumber+1));
+
+        case 5:
+            if (onBottomRow && onRightColumn)
+            {
+                return *source;
+            }
+            if (onBottomRow && !onRightColumn)
+            {
+                return *(source+((cellNumber-((x*y)-x))+1));
+            }
+            if (onRightColumn && !onBottomRow)
+            {
+                return *(source+(cellNumber+1));
+            }
+            return *(source+(((cellNumber+x))+1));
+
+        case 6:
+            if (onBottomRow)
+            {
+                return *(source+(cellNumber-((x*y)-x)));
+            }
+            return *(source+(cellNumber+x));
+
+        case 7:
+            if (onBottomRow && onLeftColumn)
+            {
+                return *(source+(x-1));
+            }
+            if (onBottomRow && !onLeftColumn)
+            {
+                return *(source+(cellNumber-((x*y)-x)-1));
+            }
+            if (onLeftColumn && !onBottomRow)
+            {
+                return *(source+(cellNumber+((x*2)-1)));
+            }
+            return *(source+(cellNumber+(x-1)));
+
+        case 8:
+            if (onLeftColumn)
+            {
+                return *(source+(cellNumber+(x-1)));
+            }
+            return *(source+(cellNumber-1));
+    }
+    return cellState;
+}
+
+char CheckCell(Matrix * m_matrix, int cellNumber)
+{
+    char total = 0;
+    char* source = m_matrix->data;
+    //look around to find cell's with status "alive"
+    for(int i=1; i<9; i++)
+    {
+        total += GetAdjacentCellState(source, m_matrix->width, m_matrix->height, cellNumber, i);
+    }
+    // if the number of adjacent live cells is < 2 or > 3, the result is a dead 
+    // cell regardless of its current state. (A live cell dies of loneliness if it
+    // has less than 2 neighbors, and of overcrowding if it has more than 3; a new
+    // cell is born in an empty spot only if it has exactly 3 neighbors.
+    if (total < 2 || total > 3)
+    {
+        return 0;
+    }
+
+    // if we get here and the cell position holds a living cell, it stays alive
+    if (*(source+cellNumber))
+    {
+        return 1;
+    }
+
+    // we have an empty position. If there are only 2 neighbors, the position stays
+    // empty.
+    if (total == 2)
+    {
+        return 0;
+    }
+
+    // we have an empty position and exactly 3 neighbors. A cell is born.
+    return 1;
+}
+
+void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end)
+{
+        for (int i=begin; i<=end; i++)
+        {
+            *(dest+i) = CheckCell(m_matrix, i);
+        }
+}
+
+#endif 
+/* end non-SSE block */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/Game_of_life.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/Game_of_life.sln
new file mode 100644 (file)
index 0000000..8bc8825
--- /dev/null
@@ -0,0 +1,37 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game of Life", "Game_of_life.vcproj", "{731C7E2E-2766-41D9-96FC-0A3548973803}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug(console)|Win32 = Debug(console)|Win32
+               Debug(console)|x64 = Debug(console)|x64
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release(console)|Win32 = Release(console)|Win32
+               Release(console)|x64 = Release(console)|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|Win32.ActiveCfg = Debug(console)|Win32
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|Win32.Build.0 = Debug(console)|Win32
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|x64.ActiveCfg = Debug(console)|x64
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|x64.Build.0 = Debug(console)|x64
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|Win32.ActiveCfg = Debug|Win32
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|Win32.Build.0 = Debug|Win32
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|x64.ActiveCfg = Debug|x64
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|x64.Build.0 = Debug|x64
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|Win32.ActiveCfg = Release(console)|Win32
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|Win32.Build.0 = Release(console)|Win32
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|x64.ActiveCfg = Release(console)|x64
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|x64.Build.0 = Release(console)|x64
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Release|Win32.ActiveCfg = Release|Win32
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Release|Win32.Build.0 = Release|Win32
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Release|x64.ActiveCfg = Release|x64
+               {731C7E2E-2766-41D9-96FC-0A3548973803}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/Game_of_life.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/Game_of_life.vcproj
new file mode 100644 (file)
index 0000000..d60ac1b
--- /dev/null
@@ -0,0 +1,794 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="Game of Life"
+       ProjectGUID="{731C7E2E-2766-41D9-96FC-0A3548973803}"
+       RootNamespace="Game_of_life"
+       Keyword="ManagedCProj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       ManagedExtensions="1"
+                       WholeProgramOptimization="0"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;USE_SSE"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               GenerateXMLDocumentationFiles="false"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               IgnoreImportLibrary="false"
+                               AdditionalDependencies="tbb_debug.lib user32.lib $(NOINHERIT)"
+                               LinkIncremental="2"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib;"
+                               GenerateDebugInformation="true"
+                               AssemblyDebug="1"
+                               SubSystem="2"
+                               EntryPointSymbol="main"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       ManagedExtensions="1"
+                       WholeProgramOptimization="0"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               GenerateXMLDocumentationFiles="false"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="false"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               IgnoreImportLibrary="false"
+                               AdditionalDependencies="tbb_debug.lib user32.lib $(NOINHERIT)"
+                               LinkIncremental="2"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               AssemblyDebug="1"
+                               SubSystem="2"
+                               EntryPointSymbol="main"
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       ManagedExtensions="1"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalOptions="-S -03&#x0D;&#x0A;"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               IgnoreImportLibrary="false"
+                               AdditionalDependencies="tbb.lib user32.lib $(NOINHERIT)"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               EntryPointSymbol="main"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       ManagedExtensions="1"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalOptions="-S -03&#x0D;&#x0A;"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               IgnoreImportLibrary="false"
+                               AdditionalDependencies="tbb.lib user32.lib $(NOINHERIT)"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               EntryPointSymbol="main"
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug(console)|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       ManagedExtensions="0"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description=""
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE"
+                               ExceptionHandling="1"
+                               RuntimeLibrary="3"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib;"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
+                               SubSystem="1"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug(console)|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       ManagedExtensions="0"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description=""
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+                               ExceptionHandling="1"
+                               RuntimeLibrary="3"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib;"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release(console)|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       ManagedExtensions="0"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description=""
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE"
+                               RuntimeLibrary="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release(console)|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       ManagedExtensions="0"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description=""
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE"
+                               RuntimeLibrary="2"
+                               Detect64BitPortabilityProblems="false"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+               <AssemblyReference
+                       RelativePath="System.dll"
+                       AssemblyName="System, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
+               />
+               <AssemblyReference
+                       RelativePath="System.Data.dll"
+                       AssemblyName="System.Data, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86"
+               />
+               <AssemblyReference
+                       RelativePath="System.Drawing.dll"
+                       AssemblyName="System.Drawing, Version=2.0.0.0, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+               />
+               <AssemblyReference
+                       RelativePath="System.Windows.Forms.dll"
+                       AssemblyName="System.Windows.Forms, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
+               />
+               <AssemblyReference
+                       RelativePath="System.XML.dll"
+                       AssemblyName="System.Xml, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
+               />
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\src\AssemblyInfo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug(console)|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug(console)|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release(console)|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release(console)|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\src\Evolution.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\Game_of_life.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\Update_state.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+                       <File
+                               RelativePath="..\src\Board.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\Evolution.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\Form1.h"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+                       >
+                       <File
+                               RelativePath=".\app.ico"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\app.rc"
+                               >
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/app.ico b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/app.ico
new file mode 100644 (file)
index 0000000..3a5525f
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/app.ico differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/app.rc b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/app.rc
new file mode 100644 (file)
index 0000000..807aa89
--- /dev/null
@@ -0,0 +1,63 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon placed first or with lowest ID value becomes application icon
+
+LANGUAGE 9, 1
+#pragma code_page(1252)
+1           ICON         "app.ico"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE  
+BEGIN
+    "resource.h\0"
+    "\0"
+END
+
+2 TEXTINCLUDE  
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE  
+BEGIN
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/resource.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc8/resource.h
new file mode 100644 (file)
index 0000000..d5ac7c4
--- /dev/null
@@ -0,0 +1,3 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by app.rc
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/Game_of_life.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/Game_of_life.sln
new file mode 100644 (file)
index 0000000..1f92f6d
--- /dev/null
@@ -0,0 +1,37 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game_of_life", "Game_of_life.vcproj", "{56035D17-379A-4C67-A113-6E82CCDDBA50}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug(console)|Win32 = Debug(console)|Win32
+               Debug(console)|x64 = Debug(console)|x64
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release(console)|Win32 = Release(console)|Win32
+               Release(console)|x64 = Release(console)|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Debug(console)|Win32.ActiveCfg = Debug(console)|Win32
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Debug(console)|Win32.Build.0 = Debug(console)|Win32
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Debug(console)|x64.ActiveCfg = Debug(console)|x64
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Debug(console)|x64.Build.0 = Debug(console)|x64
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Debug|Win32.ActiveCfg = Debug|Win32
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Debug|Win32.Build.0 = Debug|Win32
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Debug|x64.ActiveCfg = Debug|x64
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Debug|x64.Build.0 = Debug|x64
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Release(console)|Win32.ActiveCfg = Release(console)|Win32
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Release(console)|Win32.Build.0 = Release(console)|Win32
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Release(console)|x64.ActiveCfg = Release(console)|x64
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Release(console)|x64.Build.0 = Release(console)|x64
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Release|Win32.ActiveCfg = Release|Win32
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Release|Win32.Build.0 = Release|Win32
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Release|x64.ActiveCfg = Release|x64
+               {56035D17-379A-4C67-A113-6E82CCDDBA50}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/Game_of_life.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/Game_of_life.vcproj
new file mode 100644 (file)
index 0000000..dd7d6c3
--- /dev/null
@@ -0,0 +1,755 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="Game_of_life"
+       ProjectGUID="{56035D17-379A-4C67-A113-6E82CCDDBA50}"
+       RootNamespace="Game_of_life"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       ManagedExtensions="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;"
+                               MinimalRebuild="false"
+                               BasicRuntimeChecks="0"
+                               RuntimeLibrary="3"
+                               WarningLevel="3"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               IgnoreImportLibrary="false"
+                               AdditionalDependencies="tbb_debug.lib user32.lib $(NOINHERIT)"
+                               LinkIncremental="2"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               AssemblyDebug="1"
+                               SubSystem="2"
+                               EntryPointSymbol="main"
+                               RandomizedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               EnableIntrinsicFunctions="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               WarningLevel="3"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug(console)|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE"
+                               RuntimeLibrary="3"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release(console)|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE"
+                               RuntimeLibrary="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               FixedBaseAddress="1"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       ManagedExtensions="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG;"
+                               MinimalRebuild="false"
+                               BasicRuntimeChecks="0"
+                               RuntimeLibrary="3"
+                               WarningLevel="3"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               IgnoreImportLibrary="false"
+                               AdditionalDependencies="tbb_debug.lib user32.lib $(NOINHERIT)"
+                               LinkIncremental="2"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               AssemblyDebug="1"
+                               SubSystem="2"
+                               EntryPointSymbol="main"
+                               RandomizedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               EnableIntrinsicFunctions="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG;"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               WarningLevel="3"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug(console)|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="3"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release(console)|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               FixedBaseAddress="1"
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+               <AssemblyReference
+                       RelativePath="System.dll"
+                       AssemblyName="System, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
+                       MinFrameworkVersion="131072"
+               />
+               <AssemblyReference
+                       RelativePath="System.Data.dll"
+                       AssemblyName="System.Data, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86"
+                       MinFrameworkVersion="131072"
+               />
+               <AssemblyReference
+                       RelativePath="System.Drawing.dll"
+                       AssemblyName="System.Drawing, Version=2.0.0.0, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+                       MinFrameworkVersion="131072"
+               />
+               <AssemblyReference
+                       RelativePath="System.Windows.Forms.dll"
+                       AssemblyName="System.Windows.Forms, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
+                       MinFrameworkVersion="131072"
+               />
+               <AssemblyReference
+                       RelativePath="System.XML.dll"
+                       AssemblyName="System.Xml, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
+                       MinFrameworkVersion="131072"
+               />
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\src\AssemblyInfo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug(console)|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release(console)|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug(console)|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release(console)|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\src\Evolution.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\Game_of_life.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\Update_state.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+                       <File
+                               RelativePath="..\src\Board.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\Evolution.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\Form1.h"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+                       >
+                       <File
+                               RelativePath=".\app.ico"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\app.rc"
+                               >
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/app.ico b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/app.ico
new file mode 100644 (file)
index 0000000..3a5525f
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/app.ico differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/app.rc b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/app.rc
new file mode 100644 (file)
index 0000000..807aa89
--- /dev/null
@@ -0,0 +1,63 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon placed first or with lowest ID value becomes application icon
+
+LANGUAGE 9, 1
+#pragma code_page(1252)
+1           ICON         "app.ico"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE  
+BEGIN
+    "resource.h\0"
+    "\0"
+END
+
+2 TEXTINCLUDE  
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE  
+BEGIN
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/resource.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/game_of_life.NET/vc9/resource.h
new file mode 100644 (file)
index 0000000..d5ac7c4
--- /dev/null
@@ -0,0 +1,3 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by app.rc
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/index.html
new file mode 100644 (file)
index 0000000..0c2b348
--- /dev/null
@@ -0,0 +1,31 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of the template <code>parallel_for</code>.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="seismic/index.html">seismic</A>
+<DD>Parallel seismic wave simulation.
+<DT><A HREF="tachyon/index.html">tachyon</A>
+<DD>Parallel 2-D raytracer/renderer.
+<DT><A HREF="polygon_overlay/index.html">polygon_overlay</A>
+<DD>Simple polygon overlay.
+<DT><A HREF="game_of_life.NET/index.html">game_of_life</A>
+<DD>Simple Game of life overlay.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/Makefile
new file mode 100644 (file)
index 0000000..7e50547
--- /dev/null
@@ -0,0 +1,68 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+NAME=pover
+ARGS=
+
+# The C++ compiler
+#CXX=g++
+
+include ../../common/gui/Makefile.gmake
+
+ifeq ($(UI),x)
+CXXFLAGS += -DX_FULLSYNC # TODO: is this necessary? -DUSE_SCALABLE_ALLOC=0 
+endif # X
+
+SRCFILES = ../../common/gui/$(UI)video.cpp pover_video.cpp polymain.cpp polyover.cpp
+
+all:   release test
+
+resources:
+ifeq ($(UI),mac)
+       mkdir -p $(APPRES)/English.lproj $(NAME).app/Contents/MacOS
+       $(PBXCP) xcode/English.lproj/main.nib $(APPRES)/English.lproj
+       $(PBXCP) xcode/Info.plist $(APPRES)
+endif
+
+release: $(SRCFILES) resources
+       $(CXX) -O3 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb -ltbbmalloc $(LIBS)
+
+debug:  $(SRCFILES) resources
+       $(CXX) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb_debug -ltbbmalloc_debug $(LIBS)
+
+clean:
+       $(RM) $(EXE) *.o *.d
+ifeq ($(UI),mac)
+       rm -rf $(NAME).app
+endif
+
+test:
+ifeq ($(UI),mac)
+       export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; ./$(EXE) $(ARGS)
+else
+       ./$(EXE) $(ARGS)
+endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/Makefile.windows
new file mode 100644 (file)
index 0000000..dc96cfd
--- /dev/null
@@ -0,0 +1,61 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Pover
+ARGS=
+
+# The C++ compiler options
+CXX = cl.exe
+
+# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw)
+#UI = con
+UI = gdi
+#UI = dd
+
+# Machine architecture, auto-detected from TBB_ARCH_PLATFORM by default
+# Use XARCH variable to change it. See index.html for more information
+ARCH0 = $(TBB_ARCH_PLATFORM)-
+ARCHA = $(ARCH0:\vc7.1-=)
+ARCHB = $(ARCHA:\vc8-=)
+ARCHC = $(ARCHB:\vc9-=)
+ARCH3 = $(ARCHC:ia32=x86)
+ARCH4 = $(ARCH3:intel64=AMD64)
+XARCH = $(ARCH4:-=x86)
+
+MAKEINC = ../../common/gui/Makefile.win
+
+all: release test
+release:
+       @$(MAKE) -f $(MAKEINC) UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb.lib tbbmalloc.lib $(LIBS)" XARCH=$(XARCH) RCNAME=pover SOURCE=*.cpp EXE=$(PROG).exe build_one
+debug:
+       @$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) /D TBB_USE_DEBUG" LFLAGS="$(LDFLAGS) tbb_debug.lib tbbmalloc_debug.lib $(LIBS)" XARCH=$(XARCH) RCNAME=pover SOURCE=*.cpp EXE=$(PROG).exe build_one
+clean:
+       @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest vc7.1\pover.res
+test:
+       $(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/index.html
new file mode 100644 (file)
index 0000000..0508310
--- /dev/null
@@ -0,0 +1,133 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Polygon Overlay example that demonstrates the use of parallel_for.
+<P>
+This example is a simple implementation of polygon overlay, as described in 
+<a href="http://citeseer.ist.psu.edu/cache/papers/cs/11981/ftp:zSzzSzftp.cs.vu.nlzSzpubzSzbalzSzcowichanzSzPolygonzSzreport.pdf/langendoen95parallelizing.pdf">
+       <i>Parallelizing the Polygon Overlay Problem Using Orca</i>, by H.F. Langendoen</a>.
+</P>
+The solution was implemented in three forms:
+<UL>
+       <LI>The naive serial solution.
+       <LI>The naive parallel solution, by splitting list of polygons from one map and intersecting 
+       each sub-list against the entire list of polygons from the second map.
+       <LI>A parallel solution where each map is split into submaps, with each resulting submap being
+       intersected against the corresponding submap from the other map.  This solution requires some
+       redundancy (some polygons are members of more than one submap).  To prevent multiple copies
+       of a polygon from being placed in the solution map, if both polygons are duplicated (that is,
+       if they both appear in more than one map), they are intersected but the result is not placed
+       in the solution map.
+</UL>
+The only optimization in each solution is that the area of the generated sub-polygons are subtracted from
+the original area of one of the source polygons.  When the remaining area is zero, the intersection process
+is halted.
+<P>
+<i>A word about the speedup of the submap case.</i>  One may get superlinear speedup in this case (for instance a 
+laptop with Intel&reg; Core(TM) Duo processor got a speedup of about 20 percent over serial.)  This results from two effects:
+</P>
+<UL>
+       <LI>the number of threads used, and
+       <LI>the fact that for each submap, the number of polygons is smaller than that for the other two cases.
+</UL>
+If there are, say, 400 polygons in each map, then on average the number of intersections calculated is 
+approximately 80,000 (400 * 200, where 200 is the average number of polygons examined before stopping.)  
+If the maps are split into 2 submaps, the time for each submap is about 200*100, or 20,000.  So even
+comparing the two sets of submaps serially should result in a speedup somewhere around 2.  This number 
+is affected by the number of redundant polygons being compared; this effect would eventually swamp the gain
+from comparing smaller numbers of polygons per submap.  And remember the submaps are created by intersecting each
+map with a rectangular polygon covering the submap being generated, which is additional work taking about N * O(400)
+in the case above, where N is the number of submaps generated, that can be done in parallel.
+<P>
+Running the default release pover while varying the number of submaps from 1 to 1000, the speedup on the submap 
+case for a 2-processor system looks like<br>
+<img src="speedup.gif" alt="Table of speedup for the algorithm"><br>
+</P>
+<P>
+One further optimization would be to sort one map, say <b>map1</b>, by maxY, and sort the other map (<b>map2</b>) 
+by minY.  For <b>p1</b> in <b>map1</b>, start testing for intersection at the first <b>p2</b> in <b>map2</b> 
+that intersected the last polygon tested in <b>map1</b>.  This would speed up the intersection process greatly, 
+but the optimization would apply to all the methods, and the sort would have to be accounted for in the timing.
+</P>
+<P>
+The source maps are generated pseudo-randomly in the manner described in the paper above.  That is, if
+we need N polygons, then N "boxes" are chosen at random, then one-at-a-time the areas are expanded in
+one of fours directions until the area hits an adjacent polygon.  When this process is finished, the
+resulting map is inspected and any remaining unoccupied "boxes" are made into additional polygons, as
+large as possible in each case.  So the actual number of polygons in each map will in general be larger
+than the number of polygons requested (sometimes by 10% or more.)
+</P>
+<P>
+One limitation of the program is that if the number of polygons in the source map is greater than the number of
+"boxes" (pixels in the GUI case), the maps cannot be generated.
+</P>
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="polyover.cpp">polyover.cpp</A>
+<DD>Source code for main program.
+<DT><A HREF="polyover.h">polyover.h</A>
+<DD>Global variables, classes and enums.
+<DT><A HREF="pover_video.cpp">pover_video.cpp</A>
+<DD>Source code for the GUI interface.
+<DT><A HREF="pover_video.h">pover_video.h</A>
+<DD>Defines for the GUI version.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Mac OS* Xcode* workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF="../../index.html#build">here</A>.  For the various UI options, see the <A HREF="../../common/index.html">common GUI code</A> build instructions.
+
+<P>
+For Windows* systems, Microsoft* Visual Studio* projects are provided for each of the above versions.
+</P>
+
+<H2>Usage</H2>
+Building via the above make commands, or via Visual Studio projects on Windows* systems, produces executable files
+named pover.exe.  To run these executables directly, use one or more of the following commands.
+<DL>
+<DT><TT>pover.exe</TT>
+<DD>Run this version (release or debug).
+<DT><TT>pover.exe n:m</TT>
+<DD>Run this version (release or debug) (m-n+1) times, with n threads to m threads inclusive.
+<DT>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:
+<DD>Build a <I>debug</I> version with the GUI turned off
+    (e.g., <TT>make UI=con debug</TT>; see also the build directions above).
+    <BR>Run it with a small dataset, e.g., <TT>pover.exe --polys 10 --size 5x5</TT>.
+</DL>
+
+<H2>Notes</H2>
+<UL>
+<LI>While running with the GUI display should yield reasonable performance in most cases, <I>running with no GUI
+    display is strongly recommended</I> in order to demonstrate the full performance and scalability of the example.
+<LI>If using the X-windows (X11) GUI on Mac OS* systems, X11 might not be installed on the system by default.
+    To install X11 on Mac OS* systems, use the operating system install disk, choose "Optional installs" and select X11 from
+    the "Applications" list.  Alternatively, if X11 is not available, build without the GUI (see build targets above).
+</UL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/polymain.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/polymain.cpp
new file mode 100644 (file)
index 0000000..02a7f16
--- /dev/null
@@ -0,0 +1,631 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Polygon overlay
+//
+// Don't want warnings about deprecated sscanf, getenv
+#ifndef _CRT_SECURE_NO_DEPRECATE
+#define _CRT_SECURE_NO_DEPRECATE
+#endif
+#define _MAIN_C_ 1
+#include <iostream>
+#include <iomanip>
+#include <algorithm>
+#include <cstring>
+
+#include "tbb/tick_count.h"
+#include "tbb/task_scheduler_init.h"
+#include "pover_global.h"
+#include "polyover.h"
+#include "pover_video.h"
+#include "polymain.h"
+
+using namespace std;
+
+#if _DEBUG
+const char *faceNames[] = { "North", "East", "South", "West" };
+#endif
+
+/** 
+**/
+int main( int argc, char **argv) {
+    pover_video poly;
+    poly.threaded = true;
+    gVideo = &poly;
+
+    if(!initializeVideo(argc, argv)) {
+        return 1;
+    }
+
+    gIsGraphicalVersion = poly.graphic_display();
+    if(argc > 1) {
+        if(!ParseCmdLine(argc, argv)) {
+            if(gIsGraphicalVersion) rt_sleep(10000);
+            // if graphical, we haven't opened the console window so all the error messages we
+            // so carefully wrote out disappeared into the ether.  :(
+            exit(1);
+        }
+    }
+
+    if(gCsvFilename != NULL) {
+#define BUFLEN 1000
+        std::string fname_buf = gCsvFilename;
+        fname_buf += ".csv";
+        gCsvFile.open(fname_buf.c_str());
+    }
+
+    // we have gMapXSize and gMapYSize determining the number of "squares"
+    // we have g_xwinsize and g_ywinsize the total size of the window
+    // we also have BORDER_SIZE the size of the border between maps
+    // we need to determine
+    //      g_polyBoxSize -- the number of pixels on each size of each square
+
+    if(gIsGraphicalVersion) {
+        int xpixelsPerMap = (g_xwinsize - 4*BORDER_SIZE) / 3;  // three maps, with borders between and outside
+        gMapXSize = xpixelsPerMap;   // make the boxes one per pixel
+        gPolyXBoxSize = xpixelsPerMap / gMapXSize;
+        int ypixelsPerMap = (g_ywinsize - 2*BORDER_SIZE);       // one map vertically
+        gMapYSize = ypixelsPerMap;   // one pixel per box, rather.
+
+        gPolyYBoxSize = ypixelsPerMap / gMapYSize;
+        if((gPolyXBoxSize == 0) || (gPolyYBoxSize == 0)) {
+            cout << "The display window is not large enough to show the maps" << std::endl;
+            int minxSize = 4*BORDER_SIZE + 3*gMapXSize;
+            int minySize = 2*BORDER_SIZE + gMapYSize;
+            cout << "  Should be at least " << minxSize << " x " << minySize << "." << std::endl;
+            return 1;
+        }
+        map2XLoc = 2*BORDER_SIZE + gMapXSize * gPolyXBoxSize;
+        maprXLoc = 3*BORDER_SIZE + 2 * gMapXSize * gPolyXBoxSize;
+
+    }
+    else {  // not gIsGraphicalVersion
+        // gMapXSize, gMapYSize, gNPolygons defined in pover_global.h
+    }
+
+    // create two polygon maps
+    SetRandomSeed(gMyRandomSeed);  // for repeatability
+
+    gVideo->main_loop();
+}
+
+void Usage(int argc, char **argv) {
+    char *cmdTail = strrchr(*argv, '\\');
+    if(cmdTail == NULL)  {
+        cmdTail = *argv;
+    }
+    else { 
+        cmdTail++;
+    }
+    cout << cmdTail << " [threads[:threads2]] [--polys npolys] [--size nnnxnnn] [--seed nnn]" << std::endl;
+    cout << "Create polygon maps and overlay them." << std::endl << std::endl;
+    cout << "Parameters:" << std::endl;
+    cout << "   threads[:threads2] - number of threads to run" << std::endl;
+    cout << "   --polys npolys - number of polygons in each map" << std::endl;
+    cout << "   --size nnnxnnn - size of each map (X x Y)" << std::endl;
+    cout << "   --seed nnn - initial value of random number generator" << std::endl;
+    cout << "   --csv filename - write timing data to CSV-format file" << std::endl;
+    cout << "   --grainsize n - set grainsize to n" << std::endl;
+    cout << "   --use_malloc - allocate polygons with malloc instead of scalable allocator" << std::endl;
+    cout << std::endl;
+    cout << "npolys must be smaller than the size of the map" << std::endl;
+    cout << std::endl;
+    exit(1);
+}
+
+bool ParseCmdLine(int argc, char **argv ) {
+    bool error_found = false;
+    bool nPolysSpecified = false;
+    bool nMapSizeSpecified = false;
+    bool nSeedSpecified = false;
+    bool csvSpecified = false;
+    bool grainsizeSpecified = false;
+    bool mallocSpecified = false;
+    int origArgc = argc;
+    char** origArgv = argv;
+    unsigned int newnPolygons = gNPolygons;
+    unsigned int newSeed = gMyRandomSeed;
+    unsigned int newX = gMapXSize;
+    unsigned int newY = gMapYSize;
+    unsigned int newGrainSize = gGrainSize;
+    argc--; argv++;
+    if(argc > 0 && isdigit((*argv)[0])) {
+        // first argument is one or two numbers, specifying how mny threads to run
+        char* end; gThreadsHigh = gThreadsLow = (int)strtol(argv[0],&end,0);
+        switch( *end) {
+            case ':': gThreadsHigh = (int)strtol(end+1,0,0); break;
+            case '\0': break;
+            default: cout << "Unexpected character in thread specifier: " << *end << std::endl; break;
+        }
+        if(gThreadsLow > gThreadsHigh) {
+            int t = gThreadsLow;
+            gThreadsLow = gThreadsHigh;
+            gThreadsHigh = t;
+        }
+        argv++; argc--;
+    }
+    while(argc > 0) {
+        // format 1: --size nnnxnnn, where nnn in {0 .. 9}+ -- size of map in "squares"
+        if(!strncmp("--size", *argv, (size_t)6)) {
+            if(nMapSizeSpecified) {
+                cout << " Error: map size multiply specified" << std::endl;
+                error_found = true;
+            }
+            else  {
+                argv++; argc--;
+                if(argc == 0) {
+                    error_found = true;
+                    cout << " Error: --size must have a value" << std::endl;
+                }
+                if(strchr(*argv, 'x') != strrchr(*argv,'x')) {
+                    // more than one 'x'
+                    cout << "Error: map size should be nnnxnnn (" << *argv << ")" << std::endl;
+                    error_found = true;
+                }
+                else {
+                    int rval;
+                    rval = sscanf(*argv, "%ux%u", &newX, &newY);
+                    if(rval != 2) {
+                        cout << "Error parsing map size (format should be nnnxnnn (" << *argv << ")" << std::endl;
+                        error_found = true;
+                    }
+                    if(newX == 0 || newY == 0) {
+                        cout << "Error: size of map should be greater than 0 (" << *argv << ")" << std::endl;
+                        error_found = true;
+                    }
+                }
+            }
+            argc--; argv++;
+        }
+        // format 2: --seed nnn -- initial random number seed
+        else if(!strncmp("--seed", *argv, (size_t)6)) {
+            argv++; argc--;
+            if(nSeedSpecified) {
+                cout << "Error: new seed multiply specified" << std::endl;
+                error_found = true;
+            }
+            else {
+                nSeedSpecified = true;
+                int rtval = sscanf(*argv, "%u", &newSeed);
+                if(rtval == 0) {
+                    cout << "Error: --seed should be an unsigned number (instead of " << *argv << ")" << std::endl;
+                    error_found = true;
+                }
+            }
+            argv++; argc--;
+        }
+        // format 3: --polys n[n] -- number of polygons in each map
+        else if(!strncmp("--polys", *argv, (size_t)7)) {
+            //unsigned int newnPolygons;
+            argv++; argc--;
+            if(nPolysSpecified) {
+                cout << "Error: number of polygons multiply-specified" << std::endl;
+                error_found = true;
+            }else {
+                int rtval = sscanf(*argv, "%u", &newnPolygons);
+                if(newnPolygons == 0) {
+                    cout << "Error: number of polygons must be greater than 0 (" << *argv << ")" << std::endl;
+                }
+            }
+            argv++; argc--;
+        }
+        // format 4: --csv <fileroot> -- name of CSV output file ("xxx" for "xxx.csv")
+        else if(!strncmp("--csv", *argv, (size_t)5)) {
+            argv++; argc--;
+            if(csvSpecified) {
+                cout << "Error: Multiple specification of CSV file" << std::endl;
+                error_found = true;
+            }
+            else {
+                gCsvFilename = *argv;
+                argv++; argc--;
+                csvSpecified = true;
+            }
+        }
+        else if(!strncmp("--grainsize", *argv, (size_t)11)) {
+            argv++; argc--;
+            if(grainsizeSpecified) {
+                cout << "Error: Multiple specification of grainsize" << std::endl;
+                error_found = true;
+            }
+            else {
+                int grval = sscanf(*argv, "%u", &newGrainSize);
+                grainsizeSpecified = true;
+                if(newGrainSize == 0) {
+                    cout << "Error: grainsize must be greater than 0" << std::endl;
+                    error_found = true;
+                }
+            }
+            argv++; argc--;
+        }
+        else if(!strncmp("--use_malloc", *argv, (size_t)12)) {
+            argv++; argc--;
+            if(mallocSpecified) {
+                cout << "Error: --use_malloc multiply-specified" << std::endl;
+                error_found = true;
+            }
+            else {
+                mallocSpecified = true;
+                gMBehavior = UseMalloc;
+            }
+        }
+        else {
+            cout << "Error: unrecognized argument: " << *argv << std::endl;
+            error_found = true;
+            argv++; argc--;
+        }
+    }
+    if(!error_found) {
+        if(newX * newY < newnPolygons) {
+            error_found = true;
+            cout << "Error: map size should not be smaller than the number of polygons (gNPolygons = " << newnPolygons << ", map size " << newX << "x" << newY << ")" << std::endl;
+        }
+    }
+    if(!error_found) {
+        gMapXSize = newX;
+        gMapYSize = newY;
+        gNPolygons = newnPolygons;
+        gMyRandomSeed = newSeed;
+        gGrainSize = (int)newGrainSize;
+    }
+    else {
+        Usage(origArgc, origArgv);
+    }
+    return !error_found;
+}
+
+// create a polygon map with at least gNPolygons polygons.
+// Usually more than gNPolygons polygons will be generated, because the
+// process of growing the polygons results in holes.
+bool GenerateMap(Polygon_map_t **newMap, int xSize, int ySize, int gNPolygons, colorcomp_t maxR, colorcomp_t maxG, colorcomp_t maxB) {
+    bool error_found = false;
+    int  *validPolys;
+    int  *validSide;
+    int maxSides;
+    RPolygon *newPoly;
+
+    if(xSize <= 0) {
+        cout << "xSize (" << xSize << ") should be > 0." << std::endl;
+        error_found = true;
+    }
+    if(ySize <= 0) {
+        cout << "ySize (" << ySize << ") should be > 0." << std::endl;
+        error_found = true;
+    }
+    if(gNPolygons > (xSize * ySize)) {
+        cout << "gNPolygons (" << gNPolygons << ") should be less than " << (xSize * ySize) << std::endl;
+        error_found = true;
+    }
+    if(error_found) return false;
+    // the whole map is [xSize x ySize] squares
+    // the way we create the map is to
+    //    1) pick nPolygon discrete squares on an [xSize x ySize] grid
+    //    2) while there are unused squares on the grid
+    //        3) pick a polygon with a side that has unused squares on a side
+    //        4) expand the polygon by 1 to occupy the unused squares
+    //
+    // Continue until every square on the grid is occupied by a polygon
+    int *tempMap;
+    tempMap = (int *)malloc(xSize * ySize * sizeof(int));
+    for(int i=0;i < xSize; i++) {
+        for(int j=0;j < ySize; j++) {
+            tempMap[i*ySize + j] = 0;
+        }
+    }
+
+    // *newMap = new vector<RPolygon>;
+    *newMap = new Polygon_map_t;
+    (*newMap)->reserve(gNPolygons + 1);  // how much bigger does this need to be on average?
+    newPoly = RPolygon::alloc_RPolygon(0,0,xSize-1, ySize-1);
+    (*newMap)->push_back(newPoly);
+    for(int i=0; i < gNPolygons; i++) {
+        int nX;
+        int nY;
+        do {    // look for an empty square.
+            nX = NextRan(xSize);
+            nY = NextRan(ySize);
+        } while(tempMap[nX * ySize + nY] != 0);
+        int nR = (maxR * NextRan(1000)) / 999;
+        int nG = (maxG * NextRan(1000)) / 999;
+        int nB = (maxB * NextRan(1000)) / 999;
+        newPoly = RPolygon::alloc_RPolygon(nX,nY,nX,nY,nR,nG,nB);
+        (*newMap)->push_back(newPoly);
+        tempMap[nX * ySize + nY] = i+1;     // index of this polygon + 1
+    }
+    // now have to grow polygons to fill the space.
+    validPolys = (int *)malloc(4*gNPolygons * sizeof(int));
+    validSide = (int *)malloc(4*gNPolygons * sizeof(int));
+    for(int i=0;i<gNPolygons;i++) {
+        validPolys[4*i] = validPolys[4*i + 1] = validPolys[4*i + 2] = validPolys[4*i + 3] = i + 1;
+        validSide[4*i] = NORTH_SIDE;
+        validSide[4*i+1] = EAST_SIDE;
+        validSide[4*i+2] = SOUTH_SIDE;
+        validSide[4*i+3] = WEST_SIDE;
+    }
+    maxSides = 4*gNPolygons;
+    while(maxSides > 0) {
+        int indx = NextRan(maxSides);
+        int polyIndx = validPolys[indx];
+        int checkSide = validSide[indx];
+        int xlow, xhigh, ylow, yhigh;
+        int xlnew, xhnew, ylnew, yhnew;
+        (**newMap)[polyIndx]->get(&xlow,&ylow,&xhigh,&yhigh);
+        xlnew = xlow;
+        xhnew = xhigh;
+        ylnew = ylow; 
+        yhnew = yhigh;
+        // can this polygon be expanded along the chosen side?
+        switch(checkSide) {
+        case NORTH_SIDE:
+            // y-1 from xlow to xhigh
+            ylow = yhigh = (ylow - 1);
+            ylnew--;
+            break;
+        case EAST_SIDE:
+            // x+1 from ylow to yhigh
+            xlow = xhigh = (xhigh + 1);
+            xhnew++;
+            break;
+        case SOUTH_SIDE:
+            // y+1 from xlow to xhigh
+            ylow = yhigh = (yhigh+1);
+            yhnew++;
+            break;
+        case WEST_SIDE:
+            // x-1 from ylow to yhigh
+            xlow = xhigh = (xlow - 1);
+            xlnew--;
+            break;
+        }
+        bool okay_to_extend = !(((xlow < 0) || (xlow >= xSize)) || ((ylow < 0) || (ylow >= ySize)));
+        for(int ii = xlow; (ii <= xhigh) && okay_to_extend; ii++) {
+            for(int jj=ylow; (jj <= yhigh) && okay_to_extend; jj++) {
+                okay_to_extend = tempMap[ii*ySize + jj] == 0;
+            }
+        }
+        if(okay_to_extend) {
+            (**newMap)[polyIndx]->set(xlnew,ylnew,xhnew,yhnew);
+            for(int ii = xlow; ii <= xhigh; ii++) {
+                for(int jj=ylow; jj <= yhigh && okay_to_extend; jj++) {
+                    tempMap[ii*ySize + jj] = polyIndx;
+                }
+            }
+        }
+        else {
+            // once we cannot expand along a side, we will never be able to; remove from the list.
+            for(int i=indx + 1; i < maxSides; i++) {
+                validPolys[i-1] = validPolys[i];
+                validSide[i-1] = validSide[i];
+            }
+            maxSides--;
+        }
+    }
+
+    // Once no polygons can be grown, look for unused squares, and fill them with polygons.
+    for(int j=0;j<ySize;j++) {
+        for(int i=0;i<xSize;i++) {
+            if(tempMap[i*ySize+j] == 0) {
+                // try to grow in the x direction, then the y direction
+                int ilen = i;
+                int jlen = j;
+                while(ilen < (xSize - 1) && tempMap[(ilen+1)*ySize + jlen] == 0) {
+                    ilen++;
+                }
+                bool yok = true;
+                while(yok && jlen < (ySize - 1)) {
+                    for(int ii = i; ii <= ilen && yok; ii++) {
+                        yok = (tempMap[ii*ySize + jlen + 1] == 0);
+                    }
+                    if(yok) {
+                        jlen++;
+                    }
+                }
+
+                // create new polygon and push it on our list.
+                int nR = (maxR * NextRan(1000)) / 999;
+                int nG = (maxG * NextRan(1000)) / 999;
+                int nB = (maxB * NextRan(1000)) / 999;
+                newPoly = RPolygon::alloc_RPolygon(i,j,ilen,jlen,nR,nG,nB);
+                (*newMap)->push_back(newPoly);
+                gNPolygons++;
+                for(int ii=i; ii<=ilen;ii++) {
+                    for(int jj=j;jj<=jlen;jj++) {
+                        tempMap[ii*ySize + jj] = gNPolygons;
+                    }
+                }
+            }
+        }
+    }
+
+#if _DEBUG
+    if(!gIsGraphicalVersion) {
+        cout << std::endl << "Final Map:" << std::endl;
+        for(int j=0; j < ySize; j++ ) {
+            cout << "Row " << setw(2) << j << ":";
+            for(int i=0;i<xSize;i++) {
+                int it = tempMap[i*ySize + j];
+                if(it<10) {
+                    cout << setw(2) << it;
+                }
+                else {
+                    char ct = (int)'a' + it - 10;
+                    cout << " " << ct;
+                }
+            }
+            cout << std::endl;
+        }
+    }
+#endif  // _DEBUG
+    free(tempMap);
+    free(validPolys);
+    free(validSide);
+    return true;
+}
+
+void CheckPolygonMap(Polygon_map_t *checkMap) {
+#define indx(i,j) (i*gMapYSize + j)
+#define rangeCheck(str,n,limit) if(((n)<0)||((n)>=limit)) {cout << "checkMap error: " << str << " out of range (" << n << ")" << std::endl;anError=true;}
+#define xRangeCheck(str,n) rangeCheck(str,n,gMapXSize)
+#define yRangeCheck(str,n) rangeCheck(str,n,gMapYSize)
+    // The first polygon is the whole map.
+    bool anError = false;
+    int *cArray;
+    if(checkMap->size() <= 0) {
+        cout << "checkMap error: no polygons in map" << std::endl;
+        return;
+    }
+    // mapXhigh and mapYhigh are inclusive, that is, if the map is 5x5, those values would be 4.
+    int mapXhigh, mapYhigh, mapLowX, mapLowY;
+    int gMapXSize, gMapYSize;
+    checkMap->at(0)->get(&mapLowX, &mapLowY, &mapXhigh, &mapYhigh);
+    if((mapLowX !=0) || (mapLowY != 0)) {
+        cout << "checkMap error: map origin not (0,0) (X=" << mapLowX << ", Y=" << mapLowY << ")" << std::endl;
+        anError = true;
+    }
+    if((mapXhigh < 0) || (mapYhigh < 0)) {
+        cout << "checkMap error: no area in map (X=" << mapXhigh << ", Y=" << mapYhigh << ")" << std::endl;
+        anError = true;
+    }
+    if(anError) return;
+    // bounds for array.
+    gMapXSize = mapXhigh + 1;
+    gMapYSize = mapYhigh + 1;
+    cArray = (int *)malloc(sizeof(int)*(gMapXSize*gMapYSize));
+
+    for(int i=0; i<gMapXSize; i++) {
+        for(int j=0; j< gMapYSize; j++) {
+            cArray[indx(i,j)] = 0;
+        }
+    }
+
+    int xlow, xhigh, ylow, yhigh;
+    for(int p=1; p < int(checkMap->size()) && !anError; p++) {
+        checkMap->at(p)->get(&xlow, &ylow, &xhigh, &yhigh);
+        xRangeCheck("xlow", xlow);
+        yRangeCheck("ylow", ylow);
+        xRangeCheck("xhigh", xhigh);
+        yRangeCheck("yhigh", yhigh);
+        if(xlow>xhigh) {
+            cout << "checkMap error: xlow > xhigh (" << xlow << "," << xhigh << ")" << std::endl;
+            anError = true;
+        }
+        if(ylow>yhigh) {
+            cout << "checkMap error: ylow > yhigh (" << ylow << "," << yhigh << ")" << std::endl;
+            anError = true;
+        }
+        for(int ii = xlow; ii <= xhigh; ii++) {
+            for(int jj = ylow; jj <= yhigh; jj++) {
+                if(cArray[indx(ii,jj)] != 0) {
+                    cout << "checkMap error: polygons " << cArray[indx(ii,jj)] << " and " << p << " intersect" << std::endl;
+                    anError = true;
+                }
+                cArray[indx(ii,jj)] = p;
+            }
+        }
+    }
+    for(int ii=0; ii < gMapXSize; ii++) {
+        for(int jj=0; jj < gMapYSize; jj++) {
+            if(cArray[indx(ii,jj)] == 0) {
+                cout << "checkMap error: block(" << ii << ", " << jj << ") not in any polygon" << std::endl;
+                anError = true;
+            }
+        }
+    }
+    free(cArray);
+}
+
+bool CompOnePolygon(RPolygon *p1, RPolygon *p2) {
+    int xl1, xh1, yl1, yh1;
+    int xl2, xh2, yl2, yh2;
+    p1->get(&xl1, &yl1, &xh1, &yh1);
+    p2->get(&xl2, &yl2, &xh2, &yh2);
+    if(yl1>yl2) return true;
+    if(yl1<yl2) return false;
+    return (xl1 > xl2);
+}
+
+bool PolygonsEqual(RPolygon *p1, RPolygon *p2) {
+    int xl1, xh1, yl1, yh1;
+    int xl2, xh2, yl2, yh2;
+    p1->get(&xl1, &yl1, &xh1, &yh1);
+    p2->get(&xl2, &yl2, &xh2, &yh2);
+    return ((xl1 == xl2) && (yl1==yl2) && (xh1 == xh2) && (yh1 == yh2));
+}
+
+bool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2) {
+    // create two new polygon maps, copy the pointers from the original to these.
+    // we have to skip the first polygon, which is the size of the whole map
+    Polygon_map_t *t1, *t2;
+    bool is_ok = true;
+    t1 = new Polygon_map_t;
+    t1->reserve(map1->size());
+    for(unsigned int i=1;i<map1->size(); i++) {
+        t1->push_back(map1->at(i));
+    }
+    t2 = new Polygon_map_t;
+    t2->reserve(map2->size());
+    for(unsigned int i=1;i<map2->size();i++) {
+        t2->push_back(map2->at(i));
+    }
+    // sort the two created maps by (xlow, ylow)
+    sort(t1->begin(), t1->end(), CompOnePolygon);
+    sort(t2->begin(), t2->end(), CompOnePolygon);
+    // compare each element of both maps.
+    if(t1->size() != t2->size()) {
+        cout << "Error: maps not the same size ( " << int(t1->size()) << " vs " << int(t2->size()) << ")." << std::endl;
+    }
+    int maxSize = (int)((t1->size() < t2->size()) ? t1->size() : t2->size());
+    for(int i=0; i < maxSize; i++) {
+        if(!PolygonsEqual(t1->at(i), t2->at(i))) {
+            cout << "Error: polygons unequal (" << *(t1->at(i)) << " vs " << (*t2->at(i)) << std::endl;
+            is_ok = false;
+        }
+    }
+    delete t1;
+    delete t2;
+    return is_ok;
+}
+
+void SetRandomSeed(int newSeed) {
+    srand((unsigned)newSeed);
+}
+
+int NextRan(int n) {
+    // assert(n > 1);
+    // if we are given 1, we will just return 0
+    //assert(n < RAND_MAX);
+    int rrand = rand() << 15 | rand();
+    if(rrand < 0) rrand = -rrand;
+    return rrand % n;
+}
+
+std::ostream& operator<<(std::ostream& s, const RPolygon &p) {
+    int xl, yl, xh, yh;
+    p.get(&xl, &yl, &xh, &yh);
+    return s << "[(" << xl << "," << yl << ")-(" << xh << "," << yh << ")] ";
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/polymain.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/polymain.h
new file mode 100644 (file)
index 0000000..47652b7
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "pover_global.h"  // for declaration of DEFINE and INIT
+
+DEFINE Polygon_map_t *gPolymap1 INIT(0);
+DEFINE Polygon_map_t *gPolymap2 INIT(0);
+DEFINE Polygon_map_t *gResultMap INIT(0);
+
+extern void Usage(int argc, char **argv);
+
+extern bool ParseCmdLine(int argc, char **argv );
+
+extern bool GenerateMap(Polygon_map_t **newMap, int xSize, int ySize, int gNPolygons, colorcomp_t maxR, colorcomp_t maxG, colorcomp_t maxB);
+
+extern bool PolygonsOverlap(RPolygon *p1, RPolygon *p2, int &xl, int &yl, int &xh, int &yh);
+
+extern void CheckPolygonMap(Polygon_map_t *checkMap);
+
+extern bool CompOnePolygon(RPolygon *p1, RPolygon *p2);
+
+extern bool PolygonsEqual(RPolygon *p1, RPolygon *p2);
+
+extern bool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2);
+
+extern void SetRandomSeed(int newSeed);
+
+extern int NextRan(int n);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/polyover.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/polyover.cpp
new file mode 100644 (file)
index 0000000..1ca3f9c
--- /dev/null
@@ -0,0 +1,408 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Polygon overlay
+//
+#include <iostream>
+#include <algorithm>
+#include <string.h>
+#include <cstdlib>
+#include <assert.h>
+#include "tbb/tick_count.h"
+#include "tbb/blocked_range.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/mutex.h"
+#include "tbb/spin_mutex.h"
+#include "polyover.h"
+#include "polymain.h"
+#include "pover_video.h"
+
+using namespace std;
+
+/*!
+* @brief intersects a polygon with a map, adding any results to output map
+*
+* @param[out] resultMap output map (must be allocated)
+* @param[in] polygon to be intersected
+* @param[in] map intersected against
+* @param[in] lock to use when adding output polygons to result map
+*
+*/
+void OverlayOnePolygonWithMap(Polygon_map_t *resultMap, RPolygon *myPoly, Polygon_map_t *map2, tbb::spin_mutex *rMutex) {
+    int r1, g1, b1, r2, g2, b2;
+    int myr=0;
+    int myg=0;
+    int myb=0;
+    int p1Area = myPoly->area();
+    for(unsigned int j=1; (j < map2->size()) && (p1Area > 0); j++) {
+        RPolygon *p2 = (*map2)[j];
+        RPolygon *pnew;
+        int newxMin, newxMax, newyMin, newyMax;
+        myPoly->getColor(&r1, &g1, &b1);
+        if(PolygonsOverlap(myPoly, p2, newxMin, newyMin, newxMax, newyMax)) {
+            p2->getColor(&r2, &g2, &b2);
+            myr = r1 + r2;
+            myg = g1 + g2;
+            myb = b1 + b2;
+            pnew = RPolygon::alloc_RPolygon(newxMin, newyMin, newxMax, newyMax, myr, myg, myb);
+            p1Area -= pnew->area(); // when all the area of the polygon is accounted for, we can quit.
+            if(rMutex) {
+                tbb::spin_mutex::scoped_lock lock(*rMutex);
+#if _DEBUG
+                pnew->print(int(resultMap->size()));
+#endif
+                resultMap->push_back(pnew);
+            }
+            else {
+#ifdef _DEBUG
+                pnew->print(int(resultMap->size()));
+#endif
+                resultMap->push_back(pnew);
+            }
+        }
+    }
+}
+
+/*!
+* @brief Serial version of polygon overlay
+* @param[out] output map
+* @param[in]  first map (map that individual polygons are taken from)
+* @param[in]  second map (map passed to OverlayOnePolygonWithMap)
+*/
+void SerialOverlayMaps(Polygon_map_t **resultMap, Polygon_map_t *map1, Polygon_map_t *map2) {
+    cout << "SerialOverlayMaps called" << std::endl;
+    *resultMap = new Polygon_map_t;
+
+    RPolygon *p0 = (*map1)[0];
+    int mapxSize, mapySize, ignore1, ignore2;
+    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);
+    (*resultMap)->reserve(mapxSize*mapySize); // can't be any bigger than this
+    // push the map size as the first polygon,
+    p0 = RPolygon::alloc_RPolygon(0,0,mapxSize, mapySize);
+    (*resultMap)->push_back(p0);
+    for(unsigned int i=1; i < map1->size(); i++) {
+        RPolygon *p1 = (*map1)[i];
+        OverlayOnePolygonWithMap(*resultMap, p1, map2, NULL);
+    }
+}
+
+/*!
+* @class ApplyOverlay
+* @brief Simple version of parallel overlay (make parallel on polygons in map1)
+*/
+class ApplyOverlay {
+    Polygon_map_t *m_map1, *m_map2, *m_resultMap;
+    tbb::spin_mutex *m_rMutex;
+public:
+    /*!
+    * @brief functor to apply
+    * @param[in] r range of polygons to intersect from map1
+    */
+    void operator()( const tbb::blocked_range<int> & r) const {
+        PRINT_DEBUG("From " << r.begin() << " to " << r.end());
+        for(int i=r.begin(); i != r.end(); i++) {
+            RPolygon *myPoly = (*m_map1)[i];
+            OverlayOnePolygonWithMap(m_resultMap, myPoly, m_map2, m_rMutex);
+        }
+    }
+    ApplyOverlay(Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2, tbb::spin_mutex *rmutex) :
+    m_resultMap(resultMap), m_map1(map1), m_map2(map2), m_rMutex(rmutex) {}
+};
+
+/*!
+* @brief apply the parallel algorithm
+* @param[out] result_map generated map
+* @param[in] polymap1 first map to be applied (algorithm is parallel on this map)
+* @param[in] polymap2 second map.
+*/
+void NaiveParallelOverlay(Polygon_map_t *&result_map, Polygon_map_t &polymap1, Polygon_map_t &polymap2) {
+// -----------------------------------
+    bool automatic_threadcount = false;
+
+    if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic) {
+        gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic;
+        automatic_threadcount = true;
+    }
+    result_map = new Polygon_map_t;
+
+    RPolygon *p0 = polymap1[0];
+    int mapxSize, mapySize, ignore1, ignore2;
+    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);
+    result_map->reserve(mapxSize*mapySize); // can't be any bigger than this
+    // push the map size as the first polygon,
+    tbb::spin_mutex *resultMutex = new tbb::spin_mutex();
+    int grain_size = gGrainSize;
+
+    for(int nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {
+        tbb::task_scheduler_init init(nthreads);
+        if(gIsGraphicalVersion) {
+            RPolygon *xp = RPolygon::alloc_RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space
+            RPolygon::free_RPolygon( xp );
+        }
+        // put size polygon in result map
+        p0 = RPolygon::alloc_RPolygon(0,0,mapxSize, mapySize);
+        result_map->push_back(p0);
+
+        tbb::tick_count t0 = tbb::tick_count::now();
+        tbb::parallel_for (tbb::blocked_range<int>(1,(int)(polymap1.size()),grain_size), ApplyOverlay(result_map, &polymap1, &polymap2, resultMutex));
+        tbb::tick_count t1 = tbb::tick_count::now();
+
+        double naiveParallelTime = (t1-t0).seconds() * 1000;
+        cout << "Naive parallel with spin lock and ";
+        if(automatic_threadcount) cout << "automatic";
+        else cout << nthreads;
+        cout << ((nthreads == 1) ? " thread" : " threads");
+        cout << " took " << naiveParallelTime << " msec : speedup over serial " << (gSerialTime / naiveParallelTime) << std::endl;
+        if(gCsvFile.is_open()) {
+            gCsvFile << "," << naiveParallelTime;
+        }
+#if _DEBUG
+        CheckPolygonMap(result_map);
+        ComparePolygonMaps(result_map, gResultMap);
+#endif
+        for(int i=0; i<int(result_map->size());i++) {
+            RPolygon::free_RPolygon(result_map->at(i));
+        }
+        result_map->clear();
+    }
+    delete resultMutex;
+    if(gCsvFile.is_open()) {
+        gCsvFile << std::endl;
+    }
+// -----------------------------------
+}
+
+/*!
+* @class ApplySplitOverlay
+* @brief parallel by columnar strip
+*/
+
+class ApplySplitOverlay {
+    Polygon_map_t *m_map1, *m_map2, *m_resultMap;
+    tbb::spin_mutex *m_rMutex;
+public:
+    /*!
+    * @brief functor for columnar parallel version
+    * @param[in] r range of map to be operated on
+    */
+    void operator()(const tbb::blocked_range<int> & r) const {
+#ifdef _DEBUG
+        // if we are debugging, serialize the method.  That way we can
+        // see what is happening in each strip without the interleaving
+        // confusing things.
+        tbb::spin_mutex::scoped_lock lock(*m_rMutex);
+        cout << unitbuf << "From " << r.begin() << " to " << r.end()-1 << std::endl;
+#endif
+        // instead of handing out subsets of polygons from map1 to intersect
+        // with the polygons in map2, we are handed a strip of the map from
+        // [(r.begin(),0)-(r.end()-1,yMapSize)].
+        //
+        // make a polygon with those values, and intersect with all the polygons
+        // in map1 and map2, creating flagged polygon lists fmap1 and fmap2.
+        // There are four possiblities:
+        //
+        //   1) a polygon is contained entirely within the strip.  We just
+        //      add the polygon to our flagged map.
+        //   2) the polygon will be partly contained in our strip, and partly
+        //      in the strip to our right (higher x values).  Add the polygon
+        //      to our flagged map.
+        //   3) the polygon is partly contained in our map, and partly in the
+        //      strip to our left.  Add the polygon to our map, but flag it as
+        //      a duplicate.
+        //   4) the polygons do not intersect. Don't add to flagged map.
+        //
+
+        // get yMapSize
+        int r1, g1, b1, r2, g2, b2;
+        int myr=-1;
+        int myg=-1;
+        int myb=-1;
+        int i1, i2, i3, yMapSize;
+        m_map1->at(0)->get(&i1, &i2, &i3, &yMapSize);
+        RPolygon *slicePolygon = RPolygon::alloc_RPolygon(r.begin(), 0, r.end() - 1, yMapSize);
+
+        Flagged_map_t *fmap1, *fmap2;
+        fmap1 = new std::vector<RPolygon_flagged>;
+        fmap1->reserve(m_map1->size());
+        fmap2 = new Flagged_map_t;
+        fmap2->reserve(m_map2->size());
+
+        PRINT_DEBUG(std::endl << "Map1 -------------------");
+        for(unsigned int i=1; i<m_map1->size(); i++) {
+            int xl, yl, xh, yh;
+            RPolygon *px = m_map1->at(i);
+            if(PolygonsOverlap(slicePolygon, px, xl, yl, xh, yh)) {
+                bool is_duplicate = false;
+                int pxl, pyl, pxh, pyh;
+                int indx = (int)(fmap1->size());
+                fmap1->resize(indx+1);
+                fmap1->at(indx).setp(px);
+                px->get(&pxl, &pyl, &pxh, &pyh);
+                if(pxl < xl) {
+                    is_duplicate = true;
+                }
+                //fmap1->at(indx).setp(px);
+                fmap1->at(indx).setDuplicate(is_duplicate);
+                PRINT_DEBUG(" Polygon " << *px << " is in map, is_duplicate=" << is_duplicate);
+
+            }
+        }
+
+        PRINT_DEBUG(std::endl << "Map2 -------------------");
+
+        for(unsigned int i=1; i<m_map2->size(); i++) {
+            int xl, yl, xh, yh;
+            RPolygon *px = m_map2->at(i);
+
+            if(PolygonsOverlap(slicePolygon, px, xl, yl, xh, yh)) {
+                bool is_duplicate = false;
+                int pxl, pyl, pxh, pyh;
+                int indx = (int)(fmap2->size());
+                fmap2->resize(indx+1);
+                fmap2->at(indx).setp(px);
+                px->get(&pxl, &pyl, &pxh, &pyh);
+                if(pxl < xl) {
+                    is_duplicate = true;
+                }
+                fmap2->at(indx).setDuplicate(is_duplicate);
+                PRINT_DEBUG(" Polygon " << *px << " is in map, is_duplicate=" << is_duplicate);
+            }
+        }
+
+        // When intersecting polygons from fmap1 and fmap2, if BOTH are flagged
+        // as duplicate, don't add the result to the output map.  We can still
+        // intersect them, because we are keeping track of how much of the polygon
+        // is left over from intersecting, and quitting when the polygon is
+        // used up.
+
+        for(unsigned int ii=0; ii < fmap1->size(); ii++) {
+            RPolygon *p1 = fmap1->at(ii).p();
+            bool is_dup = fmap1->at(ii).isDuplicate();
+            int parea = p1->area();
+            p1->getColor(&r1, &g1, &b1);
+            for(unsigned int jj=0;(jj < fmap2->size()) && (parea > 0); jj++) {
+                int xl, yl, xh, yh;
+                RPolygon *p2 = fmap2->at(jj).p();
+                if(PolygonsOverlap(p1, p2, xl, yl, xh, yh)) {
+                    if(!(is_dup && fmap2->at(jj).isDuplicate())) {
+                        p2->getColor(&r2, &g2, &b2);
+                        myr = r1 + r2;
+                        myg = g1 + g2;
+                        myb = b1 + b2;
+                        RPolygon *pnew = RPolygon::alloc_RPolygon(xl, yl, xh, yh, myr, myg, myb);
+#ifdef _DEBUG
+#else
+                        tbb::spin_mutex::scoped_lock lock(*m_rMutex);
+#endif
+                        (*m_resultMap).push_back(pnew);
+                    }
+                    parea -= (xh-xl+1)*(yh-yl+1);
+                }
+            }
+        }
+
+        delete fmap1;
+        delete fmap2;
+        RPolygon::free_RPolygon( slicePolygon );
+    }
+
+    ApplySplitOverlay(Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2, tbb::spin_mutex *rmutex) :
+    m_resultMap(resultMap), m_map1(map1), m_map2(map2), m_rMutex(rmutex) {}
+};
+
+
+/*!
+* @brief intersects two maps strip-wise
+*
+* @param[out] resultMap output map (must be allocated)
+* @param[in] polymap1 map to be intersected
+* @param[in] polymap2 map to be intersected
+*/
+void SplitParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2) {
+    int nthreads;
+    bool automatic_threadcount = false;
+    double domainSplitParallelTime;
+    tbb::tick_count t0, t1;
+    tbb::spin_mutex *resultMutex;
+    if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic ) {
+        gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic;
+        automatic_threadcount = true;
+    }
+    *result_map = new Polygon_map_t;
+
+    RPolygon *p0 = (*polymap1)[0];
+    int mapxSize, mapySize, ignore1, ignore2;
+    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);
+    (*result_map)->reserve(mapxSize*mapySize); // can't be any bigger than this
+    resultMutex = new tbb::spin_mutex();
+
+    int grain_size;
+#ifdef _DEBUG
+    grain_size = gMapXSize / 4;
+#else
+    grain_size = gGrainSize;
+#endif
+
+    for(nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {
+        tbb::task_scheduler_init init(nthreads);
+        if(gIsGraphicalVersion) {
+            RPolygon *xp = RPolygon::alloc_RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space
+            RPolygon::free_RPolygon( xp );
+        }
+        // push the map size as the first polygon,
+        p0 = RPolygon::alloc_RPolygon(0,0,mapxSize, mapySize);
+        (*result_map)->push_back(p0);
+        t0 = tbb::tick_count::now();
+        tbb::parallel_for (tbb::blocked_range<int>(0,(int)(mapxSize+1),grain_size), ApplySplitOverlay((*result_map), polymap1, polymap2, resultMutex));
+        t1 = tbb::tick_count::now();
+        domainSplitParallelTime = (t1-t0).seconds()*1000;
+        cout << "Splitting parallel with spin lock and ";
+        if(automatic_threadcount) cout << "automatic";
+        else cout << nthreads;
+        cout << ((nthreads == 1) ? " thread" : " threads");
+        cout << " took " << domainSplitParallelTime <<  " msec : speedup over serial " << (gSerialTime / domainSplitParallelTime) << std::endl;
+        if(gCsvFile.is_open()) {
+            gCsvFile << "," << domainSplitParallelTime;
+        }
+#if _DEBUG
+        CheckPolygonMap(*result_map);
+        ComparePolygonMaps(*result_map, gResultMap);
+#endif
+        for(int i=0; i<int((*result_map)->size());i++) {
+            RPolygon::free_RPolygon((*result_map)->at(i));
+        }
+        (*result_map)->clear();
+
+    }
+    delete resultMutex;
+    if(gCsvFile.is_open()) {
+        gCsvFile << std::endl;
+    }
+
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/polyover.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/polyover.h
new file mode 100644 (file)
index 0000000..3965712
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*!
+ * polyover.h : extern declarations for polyover.cpp
+*/
+#include "rpolygon.h"
+#include "tbb/mutex.h"
+#include "tbb/spin_mutex.h"
+
+extern void OverlayOnePolygonWithMap(Polygon_map_t *resultMap, RPolygon *myPoly, Polygon_map_t  *map2, tbb::spin_mutex *rMutex);
+
+extern void SerialOverlayMaps(Polygon_map_t **resultMap, Polygon_map_t *map1, Polygon_map_t *map2);
+
+// extern void NaiveParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2);
+extern void NaiveParallelOverlay(Polygon_map_t *&result_map, Polygon_map_t &polymap1, Polygon_map_t &polymap2);
+
+extern void SplitParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2);
+
+extern void CheckPolygonMap(Polygon_map_t *checkMap);
+extern bool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2);
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/pover_global.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/pover_global.h
new file mode 100644 (file)
index 0000000..35f4ddd
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+//
+// pover_global.h
+//
+#ifndef _POVER_GLOBAL_H_
+#define _POVER_GLOBAL_H_
+
+#ifdef _MAIN_C_
+#define DEFINE // nothing
+#define STATIC static
+#define INIT(n) = n
+#else // not in main file
+#define DEFINE extern
+#define STATIC  // nothing
+#define INIT(n) // nothing
+#endif  // _MAIN_C_
+
+#include <iostream>
+#include <fstream>
+
+#ifdef _WINDOWS
+#include <windows.h>
+#endif
+
+// this Polygon class only supports rectangles
+DEFINE int gDrawXOffset INIT(0);   // used for drawing polygons
+DEFINE int gDrawYOffset INIT(0);
+DEFINE int gPolyXBoxSize INIT(0);  // number of pixels orresponding to one "square" (x)
+DEFINE int gPolyYBoxSize INIT(0);  // number of pixels orresponding to one "square" (y)
+DEFINE bool gDoDraw INIT(false);       // render the boxes
+
+#define THREADS_UNSET 0
+DEFINE int gThreadsLow INIT(THREADS_UNSET);
+DEFINE int gThreadsHigh INIT(THREADS_UNSET);
+
+DEFINE std::ofstream gCsvFile;
+DEFINE double gSerialTime;
+DEFINE char *gCsvFilename INIT(NULL);
+
+#define BORDER_SIZE 10  // number of pixels between maps
+
+// The map size and the number of polygons depends on the version we are compiling.
+// If DEBUG then it is small; else it is large.
+
+#ifdef _DEBUG
+DEFINE int gNPolygons INIT(30);  // default number of polygons in map
+DEFINE int gMapXSize INIT(30);
+DEFINE int gMapYSize INIT(30);
+DEFINE int gGrainSize INIT(5);
+#else
+DEFINE int gNPolygons INIT(50000);    // default number of polygons in map
+DEFINE int gMapXSize INIT(1000);
+DEFINE int gMapYSize INIT(1000);
+DEFINE int gGrainSize INIT(20);
+#endif
+DEFINE int gMyRandomSeed INIT(2453185);
+
+DEFINE bool gIsGraphicalVersion INIT(false);
+
+typedef enum {
+    NORTH_SIDE,
+    EAST_SIDE,
+    SOUTH_SIDE,
+    WEST_SIDE
+} allSides;
+
+#if _DEBUG
+#define PRINT_DEBUG(x) (cout << x << std::endl)
+#else
+#define PRINT_DEBUG(x)
+#endif
+
+
+#endif // _POVER_GLOBAL_H_
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/pover_video.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/pover_video.cpp
new file mode 100644 (file)
index 0000000..cc1e159
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Support for GUI display for Polygon overlay demo
+
+#define VIDEO_WINMAIN_ARGS
+#include <iostream>
+#include "polyover.h"
+#include "polymain.h"
+#include "pover_video.h"
+#include "tbb/tick_count.h"
+#include "tbb/task_scheduler_init.h"
+#ifndef _WIN32
+#include <sys/time.h>
+#include <unistd.h>
+
+void rt_sleep(int msec) {
+    usleep(msec*1000);
+}
+
+#else //_WIN32
+
+#undef OLDUNIXTIME
+#undef STDTIME
+
+#include <windows.h>
+
+void rt_sleep(int msec) {
+    Sleep(msec);
+}
+
+#endif  /*  _WIN32  */
+
+using namespace std;
+
+bool g_next_frame() {
+    if(++n_next_frame_calls >= frame_skips) { // the data race here is benign
+        n_next_frame_calls = 0; 
+        return gVideo->next_frame();
+    } 
+    return gVideo->running;
+}
+
+bool g_last_frame() {
+    if(n_next_frame_calls) return gVideo->next_frame(); 
+    return gVideo->running;
+}
+
+bool initializeVideo(int argc, char **argv) {
+    //pover_video *l_video = new pover_video();
+    //gVideo = l_video;
+    gVideo->init_console();  // don't check return code.
+    gVideo->title = g_windowTitle;
+    g_useGraphics = gVideo->init_window(g_xwinsize, g_ywinsize);
+    return true;
+}
+
+void pover_video::on_process() {
+    tbb::tick_count t0, t1;
+    double naiveParallelTime, domainSplitParallelTime;
+    // create map1  These could be done in parallel, if the pseudorandom number generator were re-seeded.
+    GenerateMap(&gPolymap1, gMapXSize, gMapYSize, gNPolygons, /*red*/255, /*green*/0, /*blue*/127);
+    // create map2
+    GenerateMap(&gPolymap2, gMapXSize, gMapYSize, gNPolygons, /*red*/0, /*green*/255, /*blue*/127);
+        //
+        // Draw source maps
+    gDrawXOffset = map1XLoc;
+    gDrawYOffset = map1YLoc;
+        for(int i=0; i < int(gPolymap1->size()); i++) {
+            gPolymap1->at(i)->drawPoly();
+        }
+    gDrawXOffset = map2XLoc;
+    gDrawYOffset = map2YLoc;
+        for(int i=0; i < int(gPolymap2->size()) ;i++) {
+            gPolymap2->at(i)->drawPoly();
+        }
+        gDoDraw = true;
+
+    // run serial map generation
+    gDrawXOffset = maprXLoc;
+    gDrawYOffset = maprYLoc;
+    {
+        RPolygon *xp = RPolygon::alloc_RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space
+        RPolygon::free_RPolygon( xp );
+        t0 = tbb::tick_count::now();
+        SerialOverlayMaps(&gResultMap, gPolymap1, gPolymap2);
+        t1 = tbb::tick_count::now();
+        cout << "Serial overlay took " << (t1-t0).seconds()*1000 << " msec" << std::endl;
+        gSerialTime = (t1-t0).seconds()*1000;
+#if _DEBUG
+        CheckPolygonMap(gResultMap);
+        // keep the map for comparison purposes.
+#else
+        for(int i=0; i<int(gResultMap->size());i++) {
+            RPolygon::free_RPolygon(gResultMap->at(i));
+        }
+        delete gResultMap;
+#endif
+        if(gCsvFile.is_open()) {
+            gCsvFile << "Serial Time," << gSerialTime << std::endl;
+            gCsvFile << "Threads,";
+            if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic) {
+                gCsvFile << "Threads,Automatic";
+            }
+            else {
+                for(int i=gThreadsLow; i <= gThreadsHigh; i++) {
+                    gCsvFile << i;
+                    if(i < gThreadsHigh) gCsvFile << ",";
+                }
+            }
+            gCsvFile << std::endl;
+        }
+        if(gIsGraphicalVersion) rt_sleep(2000);
+    }
+    // run naive parallel map generation
+    {
+        Polygon_map_t *resultMap;
+        if(gCsvFile.is_open()) {
+            gCsvFile << "Naive Time";
+        }
+        NaiveParallelOverlay(resultMap, *gPolymap1, *gPolymap2);
+        delete resultMap;
+        if(gIsGraphicalVersion) rt_sleep(2000);
+    }
+    // run split map generation
+    {
+        Polygon_map_t *resultMap;
+        if(gCsvFile.is_open()) {
+            gCsvFile << "Split Time";
+        }
+        SplitParallelOverlay(&resultMap, gPolymap1, gPolymap2);
+        delete resultMap;
+        if(gIsGraphicalVersion) rt_sleep(10000);
+    }
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/pover_video.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/pover_video.h
new file mode 100644 (file)
index 0000000..d2fd8bb
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// support for GUI for polygon overlay demo
+//
+#ifndef _POVER_VIDEO_H_
+#define _POVER_VIDEO_H_
+#include "../../common/gui/video.h"
+
+#include "pover_global.h"  // for declaration of DEFINE and INIT
+
+DEFINE class video *gVideo INIT(0);
+
+DEFINE int n_next_frame_calls INIT(0);
+DEFINE int frame_skips INIT(10);
+extern bool g_next_frame();
+extern bool g_last_frame();
+
+class pover_video: public video {
+    void on_process();
+public:
+#ifdef _WINDOWS
+    bool graphic_display(){return video::win_hInstance != (HINSTANCE)NULL;}
+#else
+    bool graphic_display() { return true;} // fix this for Linux
+#endif
+    //void on_key(int key);
+};
+
+DEFINE int g_xwinsize INIT(1024);
+DEFINE int g_ywinsize INIT(768);
+
+DEFINE int map1XLoc INIT(10);
+DEFINE int map1YLoc INIT(10);
+DEFINE int map2XLoc INIT(270);
+DEFINE int map2YLoc INIT(10);
+DEFINE int maprXLoc INIT(530);
+DEFINE int maprYLoc INIT(10);
+
+DEFINE const char *g_windowTitle INIT("Polygon Overlay");
+DEFINE bool g_useGraphics INIT(true);
+
+extern bool initializeVideo(int argc, char **argv);
+
+extern void rt_sleep(int msec);
+
+#endif  // _POVER_VIDEO_H_
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/rpolygon.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/rpolygon.h
new file mode 100644 (file)
index 0000000..c1bb617
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// rpolygon.h
+//
+#ifndef _RPOLYGON_H_
+#define _RPOLYGON_H_
+#include <vector>
+#include <iostream>
+#include "pover_video.h"
+
+#include "tbb/scalable_allocator.h"
+
+using namespace std;
+
+using namespace tbb;
+
+class RPolygon;
+typedef scalable_allocator<RPolygon> RPolygon_allocator;
+DEFINE RPolygon_allocator rAlloc;
+
+enum MallocBehavior {
+    UseMalloc,
+    UseScalableAllocator,
+};
+
+DEFINE MallocBehavior gMBehavior INIT(UseScalableAllocator);
+
+class RPolygon {
+public:
+    RPolygon() {m_XMin = m_YMin = m_XMax = m_YMax = 0;
+        m_r = m_g = m_b = 0;
+    }
+    RPolygon(int xMin, int yMin, int xMax, int yMax, int r=-1, int g=-1, int b=-1) : m_XMin(xMin), m_YMin(yMin), m_XMax(xMax), m_YMax(yMax) {
+        if( r >= 0) {
+            m_r=(colorcomp_t)r; m_g=(colorcomp_t)g; m_b=(colorcomp_t)b;
+                        if(gDoDraw) drawPoly();
+        }
+    }
+
+    static RPolygon *alloc_RPolygon(int xMin, int yMin, int xMax, int yMax, int r=-1, int g=-1, int b=-1) {
+        switch(gMBehavior) {
+            case UseScalableAllocator: {
+                RPolygon *my_p = rAlloc.allocate(1);
+                my_p->set_nodraw(xMin,yMin,xMax,yMax);
+                my_p->setColor(r,g,b);
+                if( r >= 0 && gDoDraw) {
+                    my_p->drawPoly();
+                }
+                return my_p;
+            }
+            case UseMalloc: {
+                RPolygon *my_p = new RPolygon(xMin,yMin,xMax,yMax,r,g,b);
+                return my_p;
+            }
+        }
+        return NULL;
+    }
+
+    static void free_RPolygon(RPolygon *p) { 
+        switch(gMBehavior) {
+            case UseScalableAllocator: {
+                rAlloc.deallocate(p, 1);
+                break;
+            }
+            case UseMalloc: {
+                delete p;
+                break;
+            }
+        }
+    }
+
+    void set_nodraw(int xMin, int yMin, int xMax, int yMax) {m_XMin=xMin; m_YMin=yMin; m_XMax=xMax; m_YMax=yMax;}
+
+    RPolygon &intersect(RPolygon &otherPoly);
+    void set(int xMin, int yMin, int xMax, int yMax) {
+         set_nodraw(xMin,yMin,xMax,yMax);
+         if(gDoDraw) {
+            drawPoly();
+         }
+    }
+    void get(int *xMin, int *yMin, int *xMax, int *yMax) const {*xMin=m_XMin;*yMin=m_YMin;*xMax=m_XMax;*yMax=m_YMax;}
+    void setColor(colorcomp_t newr, colorcomp_t newg, colorcomp_t newb) {m_r = newr; m_g=newg; m_b=newb;}
+    void getColor(int *myr, int *myg, int *myb) {*myr=m_r; *myg=m_g; *myb=m_b;}
+    color_t myColor() {return gVideo->get_color(m_r, m_g, m_b);}
+    void drawPoly() {
+        if(gVideo->running) {
+            if(g_next_frame()) {    // Shouldn't call next_frame each time
+                drawing_area ldrawing(
+                    gDrawXOffset+m_XMin*gPolyXBoxSize,         //x
+                    gDrawYOffset+m_YMin*gPolyYBoxSize,         //y
+                    (m_XMax-m_XMin+1)*gPolyXBoxSize,           //sizex
+                    (m_YMax-m_YMin+1)*gPolyYBoxSize);          //sizey
+                for(int y=0; y<ldrawing.size_y; y++) {
+                    ldrawing.set_pos(0,y);
+                    color_t my_color = myColor();
+                    for(int x=0;x < ldrawing.size_x; x++) {
+                         ldrawing.put_pixel(my_color);
+                    }
+                }
+            }
+        }
+    }
+    int  area() {return ((m_XMax-m_XMin+1)*(m_YMax-m_YMin+1));}
+    void print(int i) { cout << "RPolygon " << i << " (" << m_XMin << ", " << m_YMin << ")-(" << m_XMax << ", " << m_YMax << ") " << endl; fflush(stdout);}
+private:
+    int m_XMin;
+    int m_YMin;
+    int m_XMax;
+    int m_YMax;
+    colorcomp_t m_r;
+    colorcomp_t m_g;
+    colorcomp_t m_b;
+};
+
+extern ostream& operator<<(ostream& s, const RPolygon &p);
+
+class RPolygon_flagged {
+    RPolygon *myPoly;
+    bool is_duplicate;
+public:
+    RPolygon_flagged() {myPoly = NULL; is_duplicate = false;}
+    bool isDuplicate() {return is_duplicate;}
+    void setDuplicate(bool newValue) {is_duplicate = newValue;}
+    RPolygon *p() {return myPoly;}
+    void setp(RPolygon *newp) {myPoly = newp;}
+};
+
+typedef class vector<RPolygon *> Polygon_map_t;
+typedef class vector<RPolygon_flagged> Flagged_map_t; // we'll make shallow copies
+
+inline bool PolygonsOverlap(RPolygon *p1, RPolygon *p2, int &xl, int &yl, int &xh, int &yh) {
+    int xl1, yl1, xh1, yh1, xl2, yl2, xh2, yh2;
+#if _DEBUG
+     rt_sleep(1);   // slow down the process so we can see it.
+#endif
+    p1->get(&xl1, &yl1, &xh1, &yh1);
+    p2->get(&xl2, &yl2, &xh2, &yh2);
+    if(xl1 > xh2) return false;
+    if(xh1 < xl2) return false;
+    if(yl1 > yh2) return false;
+    if(yh1 < yl2) return false;
+    xl = (xl1 < xl2) ? xl2 : xl1;
+    xh = (xh1 < xh2) ? xh1 : xh2;
+    yl = (yl1 < yl2) ? yl2 : yl1;
+    yh = (yh1 < yh2) ? yh1 : yh2;
+    return true;
+}
+
+#endif // _RPOLYGON_H_
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/speedup.gif b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/speedup.gif
new file mode 100644 (file)
index 0000000..04d6d87
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/speedup.gif differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/pover.rc b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/pover.rc
new file mode 100644 (file)
index 0000000..3eee795
--- /dev/null
@@ -0,0 +1,61 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+LANGUAGE 9, 1
+#pragma code_page(1252)
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE  
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE  
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE  
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/pover.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/pover.sln
new file mode 100644 (file)
index 0000000..8efff51
--- /dev/null
@@ -0,0 +1,35 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pover", "pover.vcproj", "{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               Debug = Debug
+               Debug GDI = Debug GDI
+               Debug DD = Debug DD
+               Release = Release
+               Release GDI = Release GDI
+               Release DD = Release DD
+       EndGlobalSection
+       GlobalSection(ProjectDependencies) = postSolution
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.Debug.ActiveCfg = Debug|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.Debug.Build.0 = Debug|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.Debug GDI.ActiveCfg = Debug GDI|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.Debug GDI.Build.0 = Debug GDI|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.Debug DD.ActiveCfg = Debug DD|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.Debug DD.Build.0 = Debug DD|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.Release.ActiveCfg = Release|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.Release.Build.0 = Release|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.Release GDI.ActiveCfg = Release GDI|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.Release GDI.Build.0 = Release GDI|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.Release DD.ActiveCfg = Release DD|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.Release DD.Build.0 = Release DD|Win32
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/pover.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/pover.suo
new file mode 100644 (file)
index 0000000..b2f2d28
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/pover.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/pover.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/pover.vcproj
new file mode 100644 (file)
index 0000000..2933b4f
--- /dev/null
@@ -0,0 +1,500 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="pover"
+       ProjectGUID="{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               GlobalOptimizations="TRUE"
+                               InlineFunctionExpansion="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;_CONSOLE"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="TRUE"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;
+copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;
+"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               GlobalOptimizations="TRUE"
+                               InlineFunctionExpansion="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;
+copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;
+"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release GDI|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               GlobalOptimizations="TRUE"
+                               InlineFunctionExpansion="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;
+copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;
+"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Debug GDI|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               GlobalOptimizations="FALSE"
+                               InlineFunctionExpansion="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_WINDOWS"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="TRUE"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;
+copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;
+"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Debug DD|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               GlobalOptimizations="FALSE"
+                               InlineFunctionExpansion="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_WINDOWS"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="TRUE"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;
+copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;
+"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release DD|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               GlobalOptimizations="TRUE"
+                               InlineFunctionExpansion="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;
+copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;
+"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\polymain.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\polyover.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\pover_video.cpp">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+                       <File
+                               RelativePath="..\polymain.h">
+                       </File>
+                       <File
+                               RelativePath="..\polyover.h">
+                       </File>
+                       <File
+                               RelativePath="..\pover_global.h">
+                       </File>
+                       <File
+                               RelativePath="..\pover_video.h">
+                       </File>
+                       <File
+                               RelativePath="..\rpolygon.h">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+               </Filter>
+               <Filter
+                       Name="Video Layer"
+                       Filter="">
+                       <File
+                               RelativePath="..\..\..\common\gui\convideo.cpp">
+                               <FileConfiguration
+                                       Name="Release GDI|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug GDI|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release DD|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug DD|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\gdivideo.cpp">
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug DD|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release DD|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\ddvideo.cpp">
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug GDI|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release GDI|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\video.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\winvideo.h">
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/resource.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc7.1/resource.h
new file mode 100644 (file)
index 0000000..e70b4ea
--- /dev/null
@@ -0,0 +1,14 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by pover.rc
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        101
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1001
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/pover.rc b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/pover.rc
new file mode 100644 (file)
index 0000000..3eee795
--- /dev/null
@@ -0,0 +1,61 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+LANGUAGE 9, 1
+#pragma code_page(1252)
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE  
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE  
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE  
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/pover.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/pover.sln
new file mode 100644 (file)
index 0000000..4168381
--- /dev/null
@@ -0,0 +1,37 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pover", "pover.vcproj", "{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               DD Debug|Win32 = DD Debug|Win32
+               DD Debug|x64 = DD Debug|x64
+               DD Release|Win32 = DD Release|Win32
+               DD Release|x64 = DD Release|x64
+               GDI Debug|Win32 = GDI Debug|Win32
+               GDI Debug|x64 = GDI Debug|x64
+               GDI Release|Win32 = GDI Release|Win32
+               GDI Release|x64 = GDI Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|Win32.Build.0 = DD Debug|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|x64.ActiveCfg = DD Debug|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|x64.Build.0 = DD Debug|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|Win32.ActiveCfg = DD Release|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|Win32.Build.0 = DD Release|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|x64.ActiveCfg = DD Release|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|x64.Build.0 = DD Release|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Debug|Win32.Build.0 = Debug|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Debug|x64.ActiveCfg = Debug|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Debug|x64.Build.0 = Debug|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Release|Win32.ActiveCfg = Release|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Release|Win32.Build.0 = Release|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Release|x64.ActiveCfg = Release|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/pover.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/pover.suo
new file mode 100644 (file)
index 0000000..5121ea0
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/pover.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/pover.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/pover.vcproj
new file mode 100644 (file)
index 0000000..795fa60
--- /dev/null
@@ -0,0 +1,832 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="pover"
+       ProjectGUID="{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}"
+       RootNamespace="pover"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc8\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot; &#x0D;&#x0A; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot; &#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot; &#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc8\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc8\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc8\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;h;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\polymain.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\polymain.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\polyover.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\polyover.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\pover_global.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\pover_video.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\pover_video.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\rpolygon.h"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+                       >
+               </Filter>
+               <Filter
+                       Name="Video Layer"
+                       >
+                       <File
+                               RelativePath="..\..\..\common\gui\ddvideo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\gdivideo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="DD Release|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Release|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\video.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\winvideo.h"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/resource.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc8/resource.h
new file mode 100644 (file)
index 0000000..e70b4ea
--- /dev/null
@@ -0,0 +1,14 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by pover.rc
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        101
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1001
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/pover.rc b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/pover.rc
new file mode 100644 (file)
index 0000000..3eee795
--- /dev/null
@@ -0,0 +1,61 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+LANGUAGE 9, 1
+#pragma code_page(1252)
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE  
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE  
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE  
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/pover.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/pover.sln
new file mode 100644 (file)
index 0000000..83b3887
--- /dev/null
@@ -0,0 +1,37 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pover", "pover.vcproj", "{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               DD Debug|Win32 = DD Debug|Win32
+               DD Debug|x64 = DD Debug|x64
+               DD Release|Win32 = DD Release|Win32
+               DD Release|x64 = DD Release|x64
+               GDI Debug|Win32 = GDI Debug|Win32
+               GDI Debug|x64 = GDI Debug|x64
+               GDI Release|Win32 = GDI Release|Win32
+               GDI Release|x64 = GDI Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|Win32.Build.0 = DD Debug|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|x64.ActiveCfg = DD Debug|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|x64.Build.0 = DD Debug|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|Win32.ActiveCfg = DD Release|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|Win32.Build.0 = DD Release|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|x64.ActiveCfg = DD Release|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|x64.Build.0 = DD Release|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Debug|Win32.Build.0 = Debug|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Debug|x64.ActiveCfg = Debug|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Debug|x64.Build.0 = Debug|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Release|Win32.ActiveCfg = Release|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Release|Win32.Build.0 = Release|Win32
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Release|x64.ActiveCfg = Release|x64
+               {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDI Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/pover.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/pover.suo
new file mode 100644 (file)
index 0000000..9b5cbe8
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/pover.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/pover.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/pover.vcproj
new file mode 100644 (file)
index 0000000..5793781
--- /dev/null
@@ -0,0 +1,825 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="pover"
+       ProjectGUID="{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}"
+       RootNamespace="pover"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc9\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc9\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc9\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc9\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;h;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\polymain.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\polymain.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\polyover.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\polyover.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\pover_global.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\pover_video.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\pover_video.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\rpolygon.h"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+                       >
+               </Filter>
+               <Filter
+                       Name="Video Layer"
+                       >
+                       <File
+                               RelativePath="..\..\..\common\gui\ddvideo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\gdivideo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="DD Release|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Release|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\video.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\winvideo.h"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/resource.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/vc9/resource.h
new file mode 100644 (file)
index 0000000..e70b4ea
--- /dev/null
@@ -0,0 +1,14 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by pover.rc
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        101
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1001
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/classes.nib b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/classes.nib
new file mode 100644 (file)
index 0000000..ea58db1
--- /dev/null
@@ -0,0 +1,4 @@
+{
+IBClasses = ();
+IBVersion = 1;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/info.nib b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/info.nib
new file mode 100644 (file)
index 0000000..97a70e1
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>IBDocumentLocation</key>
+       <string>662 774 356 240 0 0 1680 1028 </string>
+       <key>IBEditorPositions</key>
+       <dict>
+               <key>29</key>
+               <string>863 618 271 44 0 0 1680 1028 </string>
+       </dict>
+       <key>IBFramework Version</key>
+       <string>446.1</string>
+       <key>IBOldestOS</key>
+       <integer>3</integer>
+       <key>IBOpenObjects</key>
+       <array>
+               <integer>29</integer>
+               <integer>166</integer>
+       </array>
+       <key>IBSystem Version</key>
+       <string>8J2135a</string>
+       <key>targetFramework</key>
+       <string>IBCarbonFramework</string>
+</dict>
+</plist>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/objects.xib b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/objects.xib
new file mode 100644 (file)
index 0000000..99f4f8a
--- /dev/null
@@ -0,0 +1,183 @@
+<?xml version="1.0" standalone="yes"?>
+<object class="NSIBObjectData">
+  <string name="targetFramework">IBCarbonFramework</string>
+  <object name="rootObject" class="NSCustomObject" id="1">
+    <string name="customClass">NSApplication</string>
+  </object>
+  <array count="22" name="allObjects">
+    <object class="IBCarbonMenu" id="29">
+      <string name="title">main</string>
+      <array count="3" name="items">
+        <object class="IBCarbonMenuItem" id="210">
+          <boolean name="updateSingleItem">TRUE</boolean>
+          <string name="title">PolygonOverlay</string>
+          <object name="submenu" class="IBCarbonMenu" id="211">
+            <string name="title">Seismic Simulation</string>
+            <array count="7" name="items">
+              <object class="IBCarbonMenuItem" id="215">
+                <boolean name="checked">TRUE</boolean>
+                <boolean name="dynamic">TRUE</boolean>
+                <boolean name="autoDisable">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">Parallel</string>
+                <ostype name="command">para</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="214">
+                <boolean name="dynamic">TRUE</boolean>
+                <boolean name="autoDisable">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">Serial</string>
+                <ostype name="command">seri</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="216">
+                <boolean name="separator">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+              </object>
+              <object class="IBCarbonMenuItem" id="217">
+                <boolean name="checked">TRUE</boolean>
+                <boolean name="dynamic">TRUE</boolean>
+                <boolean name="autoDisable">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">Enable GUI</string>
+                <ostype name="command">egui</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="218">
+                <boolean name="dynamic">TRUE</boolean>
+                <boolean name="autoDisable">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">Disable GUI</string>
+                <ostype name="command">dgui</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="213">
+                <boolean name="separator">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+              </object>
+              <object class="IBCarbonMenuItem" id="212">
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">About PolygonOverlay</string>
+                <int name="keyEquivalentModifier">0</int>
+                <ostype name="command">abou</ostype>
+              </object>
+            </array>
+            <string name="name">_NSAppleMenu</string>
+          </object>
+        </object>
+        <object class="IBCarbonMenuItem" id="127">
+          <string name="title">File</string>
+          <object name="submenu" class="IBCarbonMenu" id="131">
+            <string name="title">File</string>
+            <array count="1" name="items">
+              <object class="IBCarbonMenuItem" id="200">
+                <string name="title">Close</string>
+                <string name="keyEquivalent">w</string>
+                <ostype name="command">clos</ostype>
+              </object>
+            </array>
+          </object>
+        </object>
+        <object class="IBCarbonMenuItem" id="192">
+          <string name="title">Window</string>
+          <object name="submenu" class="IBCarbonMenu" id="195">
+            <string name="title">Window</string>
+            <array count="5" name="items">
+              <object class="IBCarbonMenuItem" id="190">
+                <boolean name="dynamic">TRUE</boolean>
+                <string name="title">Minimize</string>
+                <string name="keyEquivalent">m</string>
+                <ostype name="command">mini</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="197">
+                <string name="title">Zoom</string>
+                <ostype name="command">zoom</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="194">
+                <boolean name="separator">TRUE</boolean>
+              </object>
+              <object class="IBCarbonMenuItem" id="196">
+                <boolean name="dynamic">TRUE</boolean>
+                <string name="title">Bring All to Front</string>
+                <ostype name="command">bfrt</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="193">
+                <boolean name="dynamic">TRUE</boolean>
+                <string name="title">Arrange in Front</string>
+                <int name="keyEquivalentModifier">1572864</int>
+                <ostype name="command">frnt</ostype>
+              </object>
+            </array>
+            <string name="name">_NSWindowsMenu</string>
+          </object>
+        </object>
+      </array>
+      <string name="name">_NSMainMenu</string>
+    </object>
+    <reference idRef="127"/>
+    <reference idRef="131"/>
+    <object class="IBCarbonWindow" id="166">
+      <string name="windowRect">338 353 698 833 </string>
+      <string name="title">PolygonOverlay</string>
+      <object name="rootControl" class="IBCarbonRootControl" id="167">
+        <string name="bounds">0 0 360 480 </string>
+        <string name="viewFrame">0 0 480 360 </string>
+      </object>
+      <boolean name="receiveUpdates">FALSE</boolean>
+      <boolean name="compositing">TRUE</boolean>
+      <int name="themeBrush">-1</int>
+      <boolean name="asyncDrag">TRUE</boolean>
+      <boolean name="doesNotCycle">TRUE</boolean>
+      <int name="WindowMinWidth">320</int>
+      <int name="WindowMinHeight">200</int>
+    </object>
+    <reference idRef="167"/>
+    <reference idRef="190"/>
+    <reference idRef="192"/>
+    <reference idRef="193"/>
+    <reference idRef="194"/>
+    <reference idRef="195"/>
+    <reference idRef="196"/>
+    <reference idRef="197"/>
+    <reference idRef="200"/>
+    <reference idRef="210"/>
+    <reference idRef="211"/>
+    <reference idRef="212"/>
+    <reference idRef="213"/>
+    <reference idRef="214"/>
+    <reference idRef="215"/>
+    <reference idRef="216"/>
+    <reference idRef="217"/>
+    <reference idRef="218"/>
+  </array>
+  <array count="22" name="allParents">
+    <reference idRef="1"/>
+    <reference idRef="29"/>
+    <reference idRef="127"/>
+    <reference idRef="1"/>
+    <reference idRef="166"/>
+    <reference idRef="195"/>
+    <reference idRef="29"/>
+    <reference idRef="195"/>
+    <reference idRef="195"/>
+    <reference idRef="192"/>
+    <reference idRef="195"/>
+    <reference idRef="195"/>
+    <reference idRef="131"/>
+    <reference idRef="29"/>
+    <reference idRef="210"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+  </array>
+  <dictionary count="3" name="nameTable">
+    <string>Files Owner</string>
+    <reference idRef="1"/>
+    <string>MainWindow</string>
+    <reference idRef="166"/>
+    <string>MenuBar</string>
+    <reference idRef="29"/>
+  </dictionary>
+  <unsigned_int name="nextObjectID">219</unsigned_int>
+</object>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/Info.plist b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/Info.plist
new file mode 100644 (file)
index 0000000..8ed9e6b
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>CFBundleDevelopmentRegion</key>
+       <string>English</string>
+       <key>CFBundleExecutable</key>
+       <string>${EXECUTABLE_NAME}</string>
+       <key>CFBundleIconFile</key>
+       <string></string>
+       <key>CFBundleIdentifier</key>
+       <string>com.intel.tbb.PolygonOverlay</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>${PRODUCT_NAME}</string>
+       <key>CFBundlePackageType</key>
+       <string>APPL</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string>1.0</string>
+       <key>CSResourcesFileMapped</key>
+       <true/>
+</dict>
+</plist>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.pch b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.pch
new file mode 100644 (file)
index 0000000..17ad8b0
--- /dev/null
@@ -0,0 +1,5 @@
+//
+// Prefix header for all source files of the 'PolygonOverlay' target in the 'PolygonOverlay' project.
+//
+
+#include <Carbon/Carbon.h>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..8e24947
--- /dev/null
@@ -0,0 +1,307 @@
+// !$*UTF8*$!\r
+{\r
+       archiveVersion = 1;\r
+       classes = {\r
+       };\r
+       objectVersion = 42;\r
+       objects = {\r
+\r
+/* Begin PBXBuildFile section */\r
+               6A6DAA960DA2C0B3008D95BD /* polymain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A6DAA8E0DA2C0B3008D95BD /* polymain.cpp */; };\r
+               6A6DAA980DA2C0B3008D95BD /* polyover.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A6DAA900DA2C0B3008D95BD /* polyover.cpp */; };\r
+               6A6DAA9B0DA2C0B3008D95BD /* pover_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A6DAA930DA2C0B3008D95BD /* pover_video.cpp */; };\r
+               8D0C4E8E0486CD37000505A6 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };\r
+               A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };\r
+               A126495E0B83936D0091D5AD /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };\r
+               A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };\r
+               A1976ADA0DF6A6910032C3EA /* libtbbmalloc.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */; };\r
+               A1976ADF0DF6A6E10032C3EA /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */; };\r
+               A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */; };\r
+               A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */; };\r
+               A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };\r
+               A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };\r
+               A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F591AA0B8DFC9600073279 /* macvideo.cpp */; };\r
+/* End PBXBuildFile section */\r
+\r
+/* Begin PBXCopyFilesBuildPhase section */\r
+               A18D2A370B861BB7007D8D2C /* CopyFiles */ = {\r
+                       isa = PBXCopyFilesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       dstPath = "";\r
+                       dstSubfolderSpec = 16;\r
+                       files = (\r
+                               A1976ADA0DF6A6910032C3EA /* libtbbmalloc.dylib in CopyFiles */,\r
+                               A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+/* End PBXCopyFilesBuildPhase section */\r
+\r
+/* Begin PBXFileReference section */\r
+               1870340FFE93FCAF11CA0CD7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = "<group>"; };\r
+               32DBCF6D0370B57F00C91783 /* PolygonOverlay.pch */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PolygonOverlay.pch; sourceTree = "<group>"; };\r
+               6A6DAA8E0DA2C0B3008D95BD /* polymain.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = polymain.cpp; path = ../polymain.cpp; sourceTree = SOURCE_ROOT; };\r
+               6A6DAA8F0DA2C0B3008D95BD /* polymain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = polymain.h; path = ../polymain.h; sourceTree = SOURCE_ROOT; };\r
+               6A6DAA900DA2C0B3008D95BD /* polyover.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = polyover.cpp; path = ../polyover.cpp; sourceTree = SOURCE_ROOT; };\r
+               6A6DAA910DA2C0B3008D95BD /* polyover.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = polyover.h; path = ../polyover.h; sourceTree = SOURCE_ROOT; };\r
+               6A6DAA920DA2C0B3008D95BD /* pover_global.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = pover_global.h; path = ../pover_global.h; sourceTree = SOURCE_ROOT; };\r
+               6A6DAA930DA2C0B3008D95BD /* pover_video.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pover_video.cpp; path = ../pover_video.cpp; sourceTree = SOURCE_ROOT; };\r
+               6A6DAA940DA2C0B3008D95BD /* pover_video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = pover_video.h; path = ../pover_video.h; sourceTree = SOURCE_ROOT; };\r
+               6A6DAA950DA2C0B3008D95BD /* rpolygon.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = rpolygon.h; path = ../rpolygon.h; sourceTree = SOURCE_ROOT; };\r
+               8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };\r
+               8D0C4E970486CD37000505A6 /* PolygonOverlay.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PolygonOverlay.app; sourceTree = BUILT_PRODUCTS_DIR; };\r
+               A18D2A330B861B99007D8D2C /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };\r
+               A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbbmalloc.dylib; sourceTree = "<absolute>"; };\r
+               A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };\r
+               A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };\r
+               A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };\r
+               A1F591AA0B8DFC9600073279 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F591AB0B8DFC9600073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../../../common/gui/video.h; sourceTree = SOURCE_ROOT; };\r
+/* End PBXFileReference section */\r
+\r
+/* Begin PBXFrameworksBuildPhase section */\r
+               8D0C4E910486CD37000505A6 /* Frameworks */ = {\r
+                       isa = PBXFrameworksBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */,\r
+                               A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */,\r
+                               A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */,\r
+                               A1976ADF0DF6A6E10032C3EA /* libtbbmalloc.dylib in Frameworks */,\r
+                               A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */,\r
+                               A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+/* End PBXFrameworksBuildPhase section */\r
+\r
+/* Begin PBXGroup section */\r
+               195DF8CFFE9D517E11CA2CBB /* Products */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               8D0C4E970486CD37000505A6 /* PolygonOverlay.app */,\r
+                       );\r
+                       name = Products;\r
+                       sourceTree = "<group>";\r
+               };\r
+               20286C29FDCF999611CA2CEA /* PolygonOverlay */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               20286C2AFDCF999611CA2CEA /* Sources */,\r
+                               20286C2CFDCF999611CA2CEA /* Resources */,\r
+                               20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,\r
+                               195DF8CFFE9D517E11CA2CBB /* Products */,\r
+                       );\r
+                       name = PolygonOverlay;\r
+                       sourceTree = "<group>";\r
+               };\r
+               20286C2AFDCF999611CA2CEA /* Sources */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               6A6DAA8E0DA2C0B3008D95BD /* polymain.cpp */,\r
+                               6A6DAA8F0DA2C0B3008D95BD /* polymain.h */,\r
+                               6A6DAA900DA2C0B3008D95BD /* polyover.cpp */,\r
+                               6A6DAA910DA2C0B3008D95BD /* polyover.h */,\r
+                               6A6DAA920DA2C0B3008D95BD /* pover_global.h */,\r
+                               6A6DAA930DA2C0B3008D95BD /* pover_video.cpp */,\r
+                               6A6DAA940DA2C0B3008D95BD /* pover_video.h */,\r
+                               6A6DAA950DA2C0B3008D95BD /* rpolygon.h */,\r
+                               A1F591AA0B8DFC9600073279 /* macvideo.cpp */,\r
+                               A1F591AB0B8DFC9600073279 /* video.h */,\r
+                               32DBCF6D0370B57F00C91783 /* PolygonOverlay.pch */,\r
+                       );\r
+                       name = Sources;\r
+                       sourceTree = "<group>";\r
+               };\r
+               20286C2CFDCF999611CA2CEA /* Resources */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               8D0C4E960486CD37000505A6 /* Info.plist */,\r
+                               02345980000FD03B11CA0E72 /* main.nib */,\r
+                       );\r
+                       name = Resources;\r
+                       sourceTree = "<group>";\r
+               };\r
+               20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */,\r
+                               A18D2A330B861B99007D8D2C /* libtbb.dylib */,\r
+                               A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */,\r
+                               A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */,\r
+                               A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */,\r
+                       );\r
+                       name = "External Frameworks and Libraries";\r
+                       sourceTree = "<group>";\r
+               };\r
+/* End PBXGroup section */\r
+\r
+/* Begin PBXNativeTarget section */\r
+               8D0C4E890486CD37000505A6 /* PolygonOverlay */ = {\r
+                       isa = PBXNativeTarget;\r
+                       buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "PolygonOverlay" */;\r
+                       buildPhases = (\r
+                               8D0C4E8C0486CD37000505A6 /* Resources */,\r
+                               8D0C4E8F0486CD37000505A6 /* Sources */,\r
+                               8D0C4E910486CD37000505A6 /* Frameworks */,\r
+                               A18D2A370B861BB7007D8D2C /* CopyFiles */,\r
+                       );\r
+                       buildRules = (\r
+                       );\r
+                       dependencies = (\r
+                       );\r
+                       name = PolygonOverlay;\r
+                       productInstallPath = "$(HOME)/Applications";\r
+                       productName = PolygonOverlay;\r
+                       productReference = 8D0C4E970486CD37000505A6 /* PolygonOverlay.app */;\r
+                       productType = "com.apple.product-type.application";\r
+               };\r
+/* End PBXNativeTarget section */\r
+\r
+/* Begin PBXProject section */\r
+               20286C28FDCF999611CA2CEA /* Project object */ = {\r
+                       isa = PBXProject;\r
+                       buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "PolygonOverlay" */;\r
+                       hasScannedForEncodings = 1;\r
+                       mainGroup = 20286C29FDCF999611CA2CEA /* PolygonOverlay */;\r
+                       projectDirPath = "";\r
+                       targets = (\r
+                               8D0C4E890486CD37000505A6 /* PolygonOverlay */,\r
+                       );\r
+               };\r
+/* End PBXProject section */\r
+\r
+/* Begin PBXResourcesBuildPhase section */\r
+               8D0C4E8C0486CD37000505A6 /* Resources */ = {\r
+                       isa = PBXResourcesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               8D0C4E8E0486CD37000505A6 /* main.nib in Resources */,\r
+                               A126495E0B83936D0091D5AD /* Info.plist in Resources */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+/* End PBXResourcesBuildPhase section */\r
+\r
+/* Begin PBXSourcesBuildPhase section */\r
+               8D0C4E8F0486CD37000505A6 /* Sources */ = {\r
+                       isa = PBXSourcesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */,\r
+                               6A6DAA960DA2C0B3008D95BD /* polymain.cpp in Sources */,\r
+                               6A6DAA980DA2C0B3008D95BD /* polyover.cpp in Sources */,\r
+                               6A6DAA9B0DA2C0B3008D95BD /* pover_video.cpp in Sources */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+/* End PBXSourcesBuildPhase section */\r
+\r
+/* Begin PBXVariantGroup section */\r
+               02345980000FD03B11CA0E72 /* main.nib */ = {\r
+                       isa = PBXVariantGroup;\r
+                       children = (\r
+                               1870340FFE93FCAF11CA0CD7 /* English */,\r
+                       );\r
+                       name = main.nib;\r
+                       sourceTree = "<group>";\r
+               };\r
+/* End PBXVariantGroup section */\r
+\r
+/* Begin XCBuildConfiguration section */\r
+               C0E91AC608A95435008D54AB /* Debug */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               COPY_PHASE_STRIP = NO;\r
+                               GCC_DYNAMIC_NO_PIC = NO;\r
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;\r
+                               GCC_MODEL_TUNING = "";\r
+                               GCC_OPTIMIZATION_LEVEL = 0;\r
+                               INSTALL_PATH = "$(HOME)/Applications";\r
+                               LIBRARY_SEARCH_PATHS = (\r
+                                       "$(inherited)",\r
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",\r
+                               );\r
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";\r
+                               PRODUCT_NAME = PolygonOverlay;\r
+                       };\r
+                       name = Debug;\r
+               };\r
+               C0E91AC708A95435008D54AB /* Release */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;\r
+                               GCC_MODEL_TUNING = "";\r
+                               INSTALL_PATH = "$(HOME)/Applications";\r
+                               LIBRARY_SEARCH_PATHS = (\r
+                                       "$(inherited)",\r
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",\r
+                               );\r
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";\r
+                               PRODUCT_NAME = PolygonOverlay;\r
+                       };\r
+                       name = Release;\r
+               };\r
+               C0E91ACA08A95435008D54AB /* Debug */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               ARCHS = i386;\r
+                               GCC_AUTO_VECTORIZATION = YES;\r
+                               GCC_ENABLE_CPP_RTTI = YES;\r
+                               GCC_ENABLE_SSE3_EXTENSIONS = YES;\r
+                               GCC_MODEL_TUNING = "";\r
+                               GCC_OPTIMIZATION_LEVEL = 0;\r
+                               GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;\r
+                               MACH_O_TYPE = mh_execute;\r
+                               MACOSX_DEPLOYMENT_TARGET = 10.4;\r
+                               PREBINDING = NO;\r
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\r
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;\r
+                               SYMROOT = "/tmp/tbb-$(USER)";\r
+                       };\r
+                       name = Debug;\r
+               };\r
+               C0E91ACB08A95435008D54AB /* Release */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               ARCHS = i386;\r
+                               GCC_AUTO_VECTORIZATION = YES;\r
+                               GCC_ENABLE_CPP_RTTI = YES;\r
+                               GCC_ENABLE_SSE3_EXTENSIONS = YES;\r
+                               GCC_MODEL_TUNING = "";\r
+                               GCC_OPTIMIZATION_LEVEL = 3;\r
+                               GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;\r
+                               MACH_O_TYPE = mh_execute;\r
+                               MACOSX_DEPLOYMENT_TARGET = 10.4;\r
+                               PREBINDING = NO;\r
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\r
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;\r
+                               SYMROOT = "/tmp/tbb-$(USER)";\r
+                       };\r
+                       name = Release;\r
+               };\r
+/* End XCBuildConfiguration section */\r
+\r
+/* Begin XCConfigurationList section */\r
+               C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "PolygonOverlay" */ = {\r
+                       isa = XCConfigurationList;\r
+                       buildConfigurations = (\r
+                               C0E91AC608A95435008D54AB /* Debug */,\r
+                               C0E91AC708A95435008D54AB /* Release */,\r
+                       );\r
+                       defaultConfigurationIsVisible = 0;\r
+                       defaultConfigurationName = Release;\r
+               };\r
+               C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "PolygonOverlay" */ = {\r
+                       isa = XCConfigurationList;\r
+                       buildConfigurations = (\r
+                               C0E91ACA08A95435008D54AB /* Debug */,\r
+                               C0E91ACB08A95435008D54AB /* Release */,\r
+                       );\r
+                       defaultConfigurationIsVisible = 0;\r
+                       defaultConfigurationName = Release;\r
+               };\r
+/* End XCConfigurationList section */\r
+       };\r
+       rootObject = 20286C28FDCF999611CA2CEA /* Project object */;\r
+}\r
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/Makefile
new file mode 100644 (file)
index 0000000..f860d85
--- /dev/null
@@ -0,0 +1,62 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+NAME=seismic
+ARGS=- 300
+
+# The C++ compiler
+#CXX=g++
+
+include ../../common/gui/Makefile.gmake
+
+all:   release test
+
+resources:
+ifeq ($(UI),mac)
+       mkdir -p $(APPRES)/English.lproj $(NAME).app/Contents/MacOS
+       $(PBXCP) xcode/English.lproj/main.nib $(APPRES)/English.lproj
+       $(PBXCP) xcode/Info.plist $(APPRES)
+endif
+
+release: ../../common/gui/$(UI)video.cpp SeismicSimulation.cpp resources
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $< SeismicSimulation.cpp -ltbb $(LIBS)
+
+debug: ../../common/gui/$(UI)video.cpp SeismicSimulation.cpp resources
+       $(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $< SeismicSimulation.cpp -ltbb_debug $(LIBS)
+
+clean:
+       $(RM) $(EXE) *.o *.d
+ifeq ($(UI),mac)
+       rm -rf $(NAME).app
+endif
+
+test:
+ifeq ($(UI),mac)
+       export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; ./$(EXE) $(ARGS)
+else
+       ./$(EXE) $(ARGS)
+endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/Makefile.windows
new file mode 100644 (file)
index 0000000..ca12d88
--- /dev/null
@@ -0,0 +1,61 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Seismic
+ARGS=- 300
+
+# The C++ compiler options
+CXX = cl.exe
+
+# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw)
+#UI = con
+UI = gdi
+#UI = dd
+
+# Machine architecture, auto-detected from TBB_ARCH_PLATFORM by default
+# Use XARCH variable to change it. See index.html for more information
+ARCH0 = $(TBB_ARCH_PLATFORM)-
+ARCHA = $(ARCH0:\vc7.1-=)
+ARCHB = $(ARCHA:\vc8-=)
+ARCHC = $(ARCHB:\vc9-=)
+ARCH3 = $(ARCHC:ia32=x86)
+ARCH4 = $(ARCH3:intel64=AMD64)
+XARCH = $(ARCH4:-=x86)
+
+MAKEINC = ../../common/gui/Makefile.win
+
+all: release test
+release:
+       @$(MAKE) -f $(MAKEINC) UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb.lib $(LIBS)" XARCH=$(XARCH) RCNAME=SeismicSimulation SOURCE=SeismicSimulation.cpp EXE=$(PROG).exe build_one
+debug:
+       @$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) /D TBB_USE_DEBUG" LFLAGS="$(LDFLAGS) tbb_debug.lib $(LIBS)" XARCH=$(XARCH) RCNAME=SeismicSimulation SOURCE=SeismicSimulation.cpp EXE=$(PROG).exe build_one
+clean:
+       @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest vc7.1\SeismicSimulation.res
+test:
+       $(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/SeismicSimulation.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/SeismicSimulation.cpp
new file mode 100644 (file)
index 0000000..38239aa
--- /dev/null
@@ -0,0 +1,439 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+//#define _CRT_SECURE_NO_DEPRECATE
+#define VIDEO_WINMAIN_ARGS
+#include "../../common/gui/video.h"
+#include <cstdlib>
+#include <cstdio>
+#include <cstring>
+#include <cctype>
+#include <cassert>
+#include <math.h>
+#include "tbb/task_scheduler_init.h"
+#include "tbb/blocked_range.h"
+#include "tbb/parallel_for.h"
+#include "tbb/tick_count.h"
+
+using namespace std;
+
+#ifdef _MSC_VER
+// warning C4068: unknown pragma
+#pragma warning(disable: 4068)
+#endif
+
+#define DEFAULT_NUMBER_OF_FRAMES 100
+int number_of_frames = -1;
+const size_t MAX_WIDTH = 1024;
+const size_t MAX_HEIGHT = 512;
+
+int UniverseHeight=MAX_HEIGHT;
+int UniverseWidth=MAX_WIDTH;
+
+typedef float value;
+
+//! Velocity at each grid point
+static value V[MAX_HEIGHT][MAX_WIDTH];
+
+//! Horizontal stress
+static value S[MAX_HEIGHT][MAX_WIDTH];
+
+//! Vertical stress
+static value T[MAX_HEIGHT][MAX_WIDTH];
+
+//! Coefficient related to modulus
+static value M[MAX_HEIGHT][MAX_WIDTH];
+
+//! Coefficient related to lightness
+static value L[MAX_HEIGHT][MAX_WIDTH];
+
+//! Damping coefficients
+static value D[MAX_HEIGHT][MAX_WIDTH];
+
+/** Affinity is an argument to parallel_for to hint that an iteration of a loop 
+    is best replayed on the same processor for each execution of the loop. 
+    It is a global object because it must remember where the iterations happened
+    in previous executions. */
+static tbb::affinity_partitioner Affinity;
+
+enum MaterialType {
+    WATER=0,
+    SANDSTONE=1,
+    SHALE=2
+};
+
+//! Values are MaterialType, cast to an unsigned char to save space.
+static unsigned char Material[MAX_HEIGHT][MAX_WIDTH];
+
+static const colorcomp_t MaterialColor[4][3] = { // BGR
+    {96,0,0},     // WATER
+    {0,48,48},    // SANDSTONE
+    {32,32,23}    // SHALE
+};
+
+static const int DamperSize = 32;
+
+static const int ColorMapSize = 1024;
+static color_t ColorMap[4][ColorMapSize];
+
+static int PulseTime = 100;
+static int PulseCounter;
+static int PulseX = UniverseWidth/3;
+static int PulseY = UniverseHeight/4;
+
+static bool InitIsParallel = true;
+const char *titles[2] = {"Seismic Simulation: Serial", "Seismic Simulation: Parallel"};
+//! It is used for console mode for test with different number of threads and also has
+//! meaning for gui: threads_low  - use sepatate event/updating loop thread (>0) or not (0).
+//!                  threads_high - initialization value for scheduler
+int threads_low = 0, threads_high = tbb::task_scheduler_init::automatic;
+
+static void UpdatePulse() {
+    if( PulseCounter>0 ) {
+        value t = (PulseCounter-PulseTime/2)*0.05f;
+        V[PulseY][PulseX] += 64*sqrt(M[PulseY][PulseX])*exp(-t*t);
+        --PulseCounter;
+    }
+}
+
+static void SerialUpdateStress() {
+    drawing_area drawing(0, 0, UniverseWidth, UniverseHeight);
+    for( int i=1; i<UniverseHeight-1; ++i ) {
+        drawing.set_pos(1, i);
+#pragma ivdep
+        for( int j=1; j<UniverseWidth-1; ++j ) {
+            S[i][j] += M[i][j]*(V[i][j+1]-V[i][j]);
+            T[i][j] += M[i][j]*(V[i+1][j]-V[i][j]);
+            int index = (int)(V[i][j]*(ColorMapSize/2)) + ColorMapSize/2;
+            if( index<0 ) index = 0;
+            if( index>=ColorMapSize ) index = ColorMapSize-1;
+            color_t* c = ColorMap[Material[i][j]];
+            drawing.put_pixel(c[index]);
+        }
+    }
+}
+
+struct UpdateStressBody {
+    void operator()( const tbb::blocked_range<int>& range ) const {
+        drawing_area drawing(0, range.begin(), UniverseWidth, range.end()-range.begin());
+        int i_end = range.end();
+        for( int y = 0, i=range.begin(); i!=i_end; ++i,y++ ) {
+            drawing.set_pos(1, y);
+#pragma ivdep
+            for( int j=1; j<UniverseWidth-1; ++j ) {
+                S[i][j] += M[i][j]*(V[i][j+1]-V[i][j]);
+                T[i][j] += M[i][j]*(V[i+1][j]-V[i][j]);
+                int index = (int)(V[i][j]*(ColorMapSize/2)) + ColorMapSize/2;
+                if( index<0 ) index = 0;
+                if( index>=ColorMapSize ) index = ColorMapSize-1;
+                color_t* c = ColorMap[Material[i][j]];
+                drawing.put_pixel(c[index]);
+            }
+        }
+    }
+};
+
+static void ParallelUpdateStress() {
+    tbb::parallel_for( tbb::blocked_range<int>( 1, UniverseHeight-1 ), // Index space for loop
+                       UpdateStressBody(),                             // Body of loop
+                       Affinity );                                     // Affinity hint
+}
+
+static void SerialUpdateVelocity() {
+    for( int i=1; i<UniverseHeight-1; ++i ) 
+#pragma ivdep
+        for( int j=1; j<UniverseWidth-1; ++j ) 
+            V[i][j] = D[i][j]*(V[i][j] + L[i][j]*(S[i][j] - S[i][j-1] + T[i][j] - T[i-1][j]));
+}
+
+struct UpdateVelocityBody {
+    void operator()( const tbb::blocked_range<int>& range ) const {
+        int i_end = range.end();
+        for( int i=range.begin(); i!=i_end; ++i ) 
+#pragma ivdep
+            for( int j=1; j<UniverseWidth-1; ++j ) 
+                V[i][j] = D[i][j]*(V[i][j] + L[i][j]*(S[i][j] - S[i][j-1] + T[i][j] - T[i-1][j]));
+    }
+};
+
+static void ParallelUpdateVelocity() {
+    tbb::parallel_for( tbb::blocked_range<int>( 1, UniverseHeight-1 ), // Index space for loop
+                       UpdateVelocityBody(),                           // Body of loop
+                       Affinity );                                     // Affinity hint
+}
+
+void SerialUpdateUniverse() {
+    UpdatePulse();
+    SerialUpdateStress();
+    SerialUpdateVelocity();
+}
+
+void ParallelUpdateUniverse() {
+    UpdatePulse();
+    ParallelUpdateStress();
+    ParallelUpdateVelocity();
+}
+
+class seismic_video : public video
+{
+    void on_mouse(int x, int y, int key) {
+        if(key == 1 && PulseCounter == 0) {
+            PulseCounter = PulseTime;
+            PulseX = x; PulseY = y;
+        }
+    }
+    void on_key(int key) {
+        key &= 0xff;
+        if(char(key) == ' ') InitIsParallel = !InitIsParallel;
+        else if(char(key) == 'p') InitIsParallel = true;
+        else if(char(key) == 's') InitIsParallel = false;
+        else if(char(key) == 'e') updating = true;
+        else if(char(key) == 'd') updating = false;
+        else if(key == 27) running = false;
+        title = InitIsParallel?titles[1]:titles[0];
+    }
+    void on_process() {
+        tbb::task_scheduler_init Init(threads_high);
+        do {
+            if( InitIsParallel )
+                ParallelUpdateUniverse();
+            else
+                SerialUpdateUniverse();
+            if( number_of_frames > 0 ) --number_of_frames;
+        } while(next_frame() && number_of_frames);
+    }
+} video;
+
+void InitializeUniverse() {
+    PulseCounter = PulseTime;
+    // Initialize V, S, and T to slightly non-zero values, in order to avoid denormal waves.
+    for( int i=0; i<UniverseHeight; ++i ) 
+#pragma ivdep
+        for( int j=0; j<UniverseWidth; ++j ) {
+            T[i][j] = S[i][j] = V[i][j] = value(1.0E-6);
+        }
+    for( int i=1; i<UniverseHeight-1; ++i ) {
+        for( int j=1; j<UniverseWidth-1; ++j ) {
+            float x = float(j-UniverseWidth/2)/(UniverseWidth/2);
+            value t = (value)i/UniverseHeight;
+            MaterialType m;
+            D[i][j] = 1.0;
+            // Coefficient values are fictitious, and chosen to visually exaggerate 
+            // physical effects such as Rayleigh waves.  The fabs/exp line generates
+            // a shale layer with a gentle upwards slope and an anticline.
+            if( t<0.3f ) {
+                m = WATER;
+                M[i][j] = 0.125;
+                L[i][j] = 0.125;
+            } else if( fabs(t-0.7+0.2*exp(-8*x*x)+0.025*x)<=0.1 ) {
+                m = SHALE;
+                M[i][j] = 0.5;
+                L[i][j] = 0.6;
+            } else {
+                m = SANDSTONE;
+                M[i][j] = 0.3;
+                L[i][j] = 0.4;
+            } 
+            Material[i][j] = m;
+        }
+    }
+    value scale = 2.0f/ColorMapSize;
+    for( int k=0; k<4; ++k ) {
+        for( int i=0; i<ColorMapSize; ++i ) {
+            colorcomp_t c[3];
+            value t = (i-ColorMapSize/2)*scale;
+            value r = t>0 ? t : 0;
+            value b = t<0 ? -t : 0;
+            value g = 0.5f*fabs(t);
+            memcpy(c, MaterialColor[k], sizeof(c));
+            c[2] = colorcomp_t(r*(255-c[2])+c[2]);
+            c[1] = colorcomp_t(g*(255-c[1])+c[1]);
+            c[0] = colorcomp_t(b*(255-c[0])+c[0]);
+            ColorMap[k][i] = video.get_color(c[2], c[1], c[0]);
+        }
+    }
+    // Set damping coefficients around border to reduce reflections from boundaries.
+    value d = 1.0;
+    for( int k=DamperSize-1; k>0; --k ) {
+        d *= 1-1.0f/(DamperSize*DamperSize);
+        for( int j=1; j<UniverseWidth-1; ++j ) {
+            D[k][j] *= d;
+            D[UniverseHeight-k][j] *= d;
+        }
+        for( int i=1; i<UniverseHeight-1; ++i ) {
+            D[i][k] *= d;
+            D[i][UniverseWidth-k] *= d;
+        }
+    }
+}
+
+//////////////////////////////// Interface ////////////////////////////////////
+#ifdef _WINDOWS
+#include "vc7.1/resource.h"
+#endif
+
+int main(int argc, char *argv[])
+{
+    // threads number init
+    if(argc > 1 && isdigit(argv[1][0])) {
+        char* end; threads_high = threads_low = (int)strtol(argv[1],&end,0);
+        switch( *end ) {
+            case ':': threads_high = (int)strtol(end+1,0,0); break;
+            case '\0': break;
+            default: printf("unexpected character = %c\n",*end);
+        }
+    }
+    if (argc > 2 && isdigit(argv[2][0])){
+        number_of_frames = (int)strtol(argv[2],0,0);
+    }
+    // video layer init
+    video.title = InitIsParallel?titles[1]:titles[0];
+#ifdef _WINDOWS
+    #define MAX_LOADSTRING 100
+    TCHAR szWindowClass[MAX_LOADSTRING];    // the main window class name
+    LoadStringA(video::win_hInstance, IDC_SEISMICSIMULATION, szWindowClass, MAX_LOADSTRING);
+    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
+    WNDCLASSEX wcex; memset(&wcex, 0, sizeof(wcex));
+    wcex.lpfnWndProc    = (WNDPROC)WndProc;
+    wcex.hIcon          = LoadIcon(video::win_hInstance, MAKEINTRESOURCE(IDI_SEISMICSIMULATION));
+    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
+    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
+    wcex.lpszMenuName   = LPCTSTR(IDC_SEISMICSIMULATION);
+    wcex.lpszClassName  = szWindowClass;
+    wcex.hIconSm        = LoadIcon(video::win_hInstance, MAKEINTRESOURCE(IDI_SMALL));
+    video.win_set_class(wcex); // ascii convention here
+    video.win_load_accelerators(IDC_SEISMICSIMULATION);
+#endif
+    if(video.init_window(UniverseWidth, UniverseHeight)) {
+        video.calc_fps = true;
+        video.threaded = threads_low > 0;
+        // video is ok, init universe
+        InitializeUniverse();
+        // main loop
+        video.main_loop();
+    }
+    else if(video.init_console()) {
+        // do console mode
+        if(number_of_frames <= 0) number_of_frames = DEFAULT_NUMBER_OF_FRAMES;
+        if(threads_high == tbb::task_scheduler_init::automatic) threads_high = 4;
+        if(threads_high < threads_low) threads_high = threads_low;
+        for( int p = threads_low; p <= threads_high; ++p ) {
+            InitializeUniverse();
+            tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
+            if( p > 0 )
+                init.initialize( p );
+            tbb::tick_count t0 = tbb::tick_count::now();
+            if( p > 0 )
+                for( int i=0; i<number_of_frames; ++i )
+                    ParallelUpdateUniverse();
+            else
+                for( int i=0; i<number_of_frames; ++i )
+                    SerialUpdateUniverse();
+            tbb::tick_count t1 = tbb::tick_count::now();
+            printf("%.1f frame per sec", number_of_frames/(t1-t0).seconds());
+            if( p > 0 ) 
+                printf(" with %d way parallelism\n",p);
+            else
+                printf(" with serial version\n"); 
+        }
+    }
+    video.terminate();
+    return 0;
+}
+
+#ifdef _WINDOWS
+//
+//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
+//
+//  PURPOSE:  Processes messages for the main window.
+//
+//  WM_COMMAND  - process the application menu
+//  WM_PAINT    - Paint the main window
+//  WM_DESTROY  - post a quit message and return
+//
+//
+LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+    switch (message)
+    {
+    case WM_INITDIALOG: return TRUE;
+    case WM_COMMAND:
+        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
+            EndDialog(hDlg, LOWORD(wParam));
+            return TRUE;
+        }
+        break;
+    }
+    return FALSE;
+}
+
+LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+    int wmId, wmEvent;
+    switch (message) {
+    case WM_COMMAND:
+        wmId    = LOWORD(wParam); 
+        wmEvent = HIWORD(wParam); 
+        // Parse the menu selections:
+        switch (wmId)
+        {
+        case IDM_ABOUT:
+            DialogBox(video::win_hInstance, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, (DLGPROC)About);
+            break;
+        case IDM_EXIT:
+            PostQuitMessage(0);
+            break;
+        case ID_FILE_PARALLEL:
+            if( !InitIsParallel ) {
+                InitIsParallel = true;
+                video.title = titles[1];
+            }
+            break;
+        case ID_FILE_SERIAL:
+            if( InitIsParallel ) {
+                InitIsParallel = false;
+                video.title = titles[0];
+            }
+            break;
+        case ID_FILE_ENABLEGUI:
+            video.updating = true;
+            break;
+        case ID_FILE_DISABLEGUI:
+            video.updating = false;
+            break;
+        default:
+            return DefWindowProc(hWnd, message, wParam, lParam);
+        }
+        break;
+    default:
+        return DefWindowProc(hWnd, message, wParam, lParam);
+    }
+    return 0;
+}
+
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/index.html
new file mode 100644 (file)
index 0000000..ec43cf3
--- /dev/null
@@ -0,0 +1,107 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Parallel seismic simulation that demonstrates use of parallel_for.
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="SeismicSimulation.cpp">SeismicSimulation.cpp</A>
+<DD>Source code that does wave propagation.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+The following additional options are supported:
+<DL>
+<DT><TT>make [(general targets: {release, debug} [test])] UI={con, gdi, dd, x, mac}</TT>
+<DD>Build and run as usual, but build with the specified GUI driver: console, GDI+*, Direct Draw*, X11, or OpenGL*
+       (see the description of the <A HREF=../../common/index.html>common GUI code</A>
+       for more information on available graphics support).
+    For Linux* and Mac OS* X systems, the best available driver is detected automatically by the Makefile.
+    For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=dd may offer superior
+       performance, but can only be used if the Microsoft* Direct Draw* SDK is installed on your system 
+       and if overlay is supported by your graphics card.
+    Use UI=con to build without the GUI for use in making performance measurements
+       <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
+<DT><TT>make [(above options or targets)] XARCH=x64</TT>
+<DD>Build and run as above, but also specify XARCH=x64
+    (or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary.
+<DT><TT>make [(above options or targets)] DDLIB_DIR=&lt;<I>specify path to library directory of Direct Draw* SDK here</I>&gt;</TT>
+<DD>If you experience ddraw.lib linking problems, specify the correct library directory via this option.
+<DT><TT>make [(above options or targets)] CXXFLAGS=-DX_FULLSYNC</TT>
+<DD>Build and run as above, but enable full X11 synchronization if you experience "tearing" of motion on slower video systems.
+</DL>
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>seismic [<I>M</I>[:<I>N</I>] [<I>F</I>]]</TT>
+<DD>For non-interactive mode, <I>M</I> and <I>N</I> are a range of numbers of threads to be used.
+    For interactive mode,  <I>N</I> is the number of threads to use while <I>M</I> indicates if
+    a separate thread will be used for the GUI (&gt;0) or not (0).  For example,
+    <TT>seismic&nbsp;1:3</TT> will use 3 threads for computation and a separate thread for
+    processing GUI events; this option may give better visible performance on a 4-processor
+    system when using GDI+ graphics.
+<DD><I>F</I> is the number of frames the example processes internally. Default value is 100;
+    reduce it to shorten example run time.
+<DT>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+    (see the <A HREF=../../index.html#build>build directions</A>).
+    <BR>Run it with the desired number of threads and smaller number of frames, e.g., <TT>seismic 4 5</TT>.
+</DL>
+
+<H2>Hot keys</H2>
+The following hot keys can be used in interactive execution mode when the example is compiled with the graphical
+user interface:
+<DL>
+<dt>&lt;left mouse button&gt;
+<dd>Starts new seismic wave in place specified by mouse cursor.
+<dt>&lt;space&gt;
+<dd>Toggles between parallel and serial execution modes.
+<dt>&lt;p&gt;
+<dd>Enables parallel execution mode.
+<dt>&lt;s&gt;
+<dd>Enables serial execution mode.
+<dt>&lt;e&gt;
+<dd>Enables screen updates.
+<dt>&lt;d&gt;
+<dd>Disables screen updates <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
+<dt>&lt;esc&gt;
+<dd>Stops execution.
+</DL>
+
+<H2>Notes</H2>
+<UL>
+<LI>While running with the GUI display turned on should yield reasonable performance in most cases, <I>running with the GUI
+    display turned off is strongly recommended</I> in order to demonstrate the full performance and scalability of the example.
+<LI>If using the X-windows (X11) GUI on Mac OS* X systems, X11 might not be installed on the system by default.
+    To install X11 on Mac OS* X systems, use the operating system install disk, choose "Optional installs" and select X11 from
+    the "Applications" list.  Alternatively, if X11 is not available, build without the GUI (see build targets above).
+</UL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.ico b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.ico
new file mode 100644 (file)
index 0000000..d551aa3
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.ico differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.rc b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.rc
new file mode 100644 (file)
index 0000000..67d1158
--- /dev/null
@@ -0,0 +1,146 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_SEISMICSIMULATION   ICON                    "SeismicSimulation.ico"
+IDI_SMALL               ICON                    "small.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDC_SEISMICSIMULATION MENU 
+BEGIN
+    POPUP "&File"
+    BEGIN
+        MENUITEM "&Parallel",                   ID_FILE_PARALLEL
+        MENUITEM "&Serial",                     ID_FILE_SERIAL
+        MENUITEM SEPARATOR
+        MENUITEM "&Enable GUI",                 ID_FILE_ENABLEGUI
+        MENUITEM "&Disable GUI",                ID_FILE_DISABLEGUI
+        MENUITEM SEPARATOR
+        MENUITEM "E&xit",                       IDM_EXIT
+    END
+    POPUP "&Help"
+    BEGIN
+        MENUITEM "&About ...",                  IDM_ABOUT
+    END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Accelerator
+//
+
+IDC_SEISMICSIMULATION ACCELERATORS 
+BEGIN
+    VK_OEM_2,       IDM_ABOUT,              VIRTKEY, ALT, NOINVERT
+    "P",            ID_FILE_PARALLEL,       VIRTKEY, ALT, NOINVERT
+    "S",            ID_FILE_SERIAL,         VIRTKEY, ALT, NOINVERT
+    "D",            ID_FILE_DISABLEGUI,     VIRTKEY, ALT, NOINVERT
+    "E",            ID_FILE_ENABLEGUI,      VIRTKEY, ALT, NOINVERT
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_ABOUTBOX DIALOG  22, 17, 230, 75
+STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "About"
+FONT 8, "System"
+BEGIN
+    ICON            IDI_SEISMICSIMULATION,IDC_MYICON,14,9,16,16
+    LTEXT           "SeismicSimulation Version 1.1",IDC_STATIC,49,10,119,8,
+                    SS_NOPREFIX
+    LTEXT           "Copyright (C) 2005-2008",IDC_STATIC,49,20,119,8
+    DEFPUSHBUTTON   "OK",IDOK,195,6,30,11,WS_GROUP
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE 
+BEGIN
+    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+    "#include ""windows.h""\r\n"
+    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE 
+BEGIN
+    IDS_APP_TITLE           "SeismicSimulation"
+    IDC_SEISMICSIMULATION   "SEISMICSIMULATION"
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.sln
new file mode 100644 (file)
index 0000000..e386444
--- /dev/null
@@ -0,0 +1,27 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SeismicSimulation", "SeismicSimulation.vcproj", "{4A021AFA-E254-4BCE-918D-377DF1C0CBEC}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               DD Debug = DD Debug
+               DD Release = DD Release
+               GDI Debug = GDI Debug
+               GDI Release = GDI Release
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.DD Debug.ActiveCfg = DD Debug|Win32
+               {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.DD Debug.Build.0 = DD Debug|Win32
+               {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.DD Release.ActiveCfg = DD Release|Win32
+               {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.DD Release.Build.0 = DD Release|Win32
+               {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.GDI Debug.ActiveCfg = Debug|Win32
+               {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.GDI Debug.Build.0 = Debug|Win32
+               {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.GDI Release.ActiveCfg = Release|Win32
+               {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.GDI Release.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.suo
new file mode 100644 (file)
index 0000000..c08d453
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/SeismicSimulation.vcproj
new file mode 100644 (file)
index 0000000..d0ff8ad
--- /dev/null
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="SeismicSimulation"
+       ProjectGUID="{4A021AFA-E254-4BCE-918D-377DF1C0CBEC}"
+       RootNamespace="SeismicSimulation"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               GlobalOptimizations="TRUE"
+                               InlineFunctionExpansion="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="TRUE"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               GlobalOptimizations="TRUE"
+                               InlineFunctionExpansion="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               GlobalOptimizations="TRUE"
+                               InlineFunctionExpansion="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               GlobalOptimizations="TRUE"
+                               InlineFunctionExpansion="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="TRUE"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\SeismicSimulation.cpp">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+                       <File
+                               RelativePath=".\Resource.h">
+                       </File>
+                       <File
+                               RelativePath=".\SeismicSimulation.ico">
+                       </File>
+                       <File
+                               RelativePath=".\SeismicSimulation.rc">
+                       </File>
+                       <File
+                               RelativePath=".\small.ico">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Video Layer"
+                       Filter="">
+                       <File
+                               RelativePath="..\..\..\common\gui\ddvideo.cpp">
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\gdivideo.cpp">
+                               <FileConfiguration
+                                       Name="DD Release|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\video.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\winvideo.h">
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/resource.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/resource.h
new file mode 100644 (file)
index 0000000..44453d7
--- /dev/null
@@ -0,0 +1,32 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by SeismicSimulation.rc
+//
+#define IDC_MYICON                      2
+#define IDD_SEISMICSIMULATION_DIALOG    102
+#define IDS_APP_TITLE                   103
+#define IDD_ABOUTBOX                    103
+#define IDM_ABOUT                       104
+#define IDM_EXIT                        105
+#define IDI_SEISMICSIMULATION           107
+#define IDI_SMALL                       108
+#define IDC_SEISMICSIMULATION           109
+#define IDR_MAINFRAME                   128
+#define ID_FILE_PARALLEL                32771
+#define ID_FILE_SERIAL                  32772
+#define IDM_PARALLEL                    32773
+#define ID_FILE_ENABLEGUI               32774
+#define ID_FILE_DISABLEGUI              32775
+#define IDC_STATIC                      -1
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC                     1
+#define _APS_NEXT_RESOURCE_VALUE        129
+#define _APS_NEXT_COMMAND_VALUE         32782
+#define _APS_NEXT_CONTROL_VALUE         1000
+#define _APS_NEXT_SYMED_VALUE           110
+#endif
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/small.ico b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/small.ico
new file mode 100644 (file)
index 0000000..d551aa3
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc7.1/small.ico differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.ico b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.ico
new file mode 100644 (file)
index 0000000..d551aa3
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.ico differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.rc b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.rc
new file mode 100644 (file)
index 0000000..c200334
--- /dev/null
@@ -0,0 +1,145 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_SEISMICSIMULATION   ICON                    "SeismicSimulation.ico"
+IDI_SMALL               ICON                    "small.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDC_SEISMICSIMULATION MENU 
+BEGIN
+    POPUP "&File"
+    BEGIN
+        MENUITEM "&Parallel",                   ID_FILE_PARALLEL
+        MENUITEM "&Serial",                     ID_FILE_SERIAL
+        MENUITEM SEPARATOR
+        MENUITEM "&Enable GUI",                 ID_FILE_ENABLEGUI
+        MENUITEM "&Disable GUI",                ID_FILE_DISABLEGUI
+        MENUITEM SEPARATOR
+        MENUITEM "E&xit",                       IDM_EXIT
+    END
+    POPUP "&Help"
+    BEGIN
+        MENUITEM "&About ...",                  IDM_ABOUT
+    END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Accelerator
+//
+
+IDC_SEISMICSIMULATION ACCELERATORS 
+BEGIN
+    VK_OEM_2,       IDM_ABOUT,              VIRTKEY, ALT, NOINVERT
+    "P",            ID_FILE_PARALLEL,       VIRTKEY, ALT, NOINVERT
+    "S",            ID_FILE_SERIAL,         VIRTKEY, ALT, NOINVERT
+    "D",            ID_FILE_DISABLEGUI,     VIRTKEY, ALT, NOINVERT
+    "E",            ID_FILE_ENABLEGUI,      VIRTKEY, ALT, NOINVERT
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_ABOUTBOX DIALOG  22, 17, 230, 75
+STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "About"
+FONT 8, "System"
+BEGIN
+    ICON            IDI_SEISMICSIMULATION,IDC_MYICON,14,9,16,16
+    LTEXT           "SeismicSimulation Version 1.1",IDC_STATIC,49,10,119,8,SS_NOPREFIX
+    LTEXT           "Copyright (C) 2005-2008",IDC_STATIC,49,20,119,8
+    DEFPUSHBUTTON   "OK",IDOK,195,6,30,11,WS_GROUP
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE 
+BEGIN
+    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+    "#include ""windows.h""\r\n"
+    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE 
+BEGIN
+    IDS_APP_TITLE           "SeismicSimulation"
+    IDC_SEISMICSIMULATION   "SEISMICSIMULATION"
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.sln
new file mode 100644 (file)
index 0000000..b000587
--- /dev/null
@@ -0,0 +1,37 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SeismicSimulation", "SeismicSimulation.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A2527}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               DD Debug|Win32 = DD Debug|Win32
+               DD Debug|x64 = DD Debug|x64
+               DD Release|Win32 = DD Release|Win32
+               DD Release|x64 = DD Release|x64
+               GDI Debug|Win32 = GDI Debug|Win32
+               GDI Debug|x64 = GDI Debug|x64
+               GDI Release|Win32 = GDI Release|Win32
+               GDI Release|x64 = GDI Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|Win32.Build.0 = DD Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|x64.ActiveCfg = DD Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|x64.Build.0 = DD Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|Win32.ActiveCfg = DD Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|Win32.Build.0 = DD Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|x64.ActiveCfg = DD Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|x64.Build.0 = DD Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.suo
new file mode 100644 (file)
index 0000000..48336f3
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/SeismicSimulation.vcproj
new file mode 100644 (file)
index 0000000..0fb0b34
--- /dev/null
@@ -0,0 +1,820 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="SeismicSimulation"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2527}"
+       RootNamespace="SeismicSimulation"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc8\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc8\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc8\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc8\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;h;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\SeismicSimulation.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+                       >
+                       <File
+                               RelativePath=".\resource.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\SeismicSimulation.ico"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\SeismicSimulation.rc"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\small.ico"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Video Layer"
+                       >
+                       <File
+                               RelativePath="..\..\..\common\gui\ddvideo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\gdivideo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="DD Release|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Release|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\video.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\winvideo.h"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/resource.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/resource.h
new file mode 100644 (file)
index 0000000..44453d7
--- /dev/null
@@ -0,0 +1,32 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by SeismicSimulation.rc
+//
+#define IDC_MYICON                      2
+#define IDD_SEISMICSIMULATION_DIALOG    102
+#define IDS_APP_TITLE                   103
+#define IDD_ABOUTBOX                    103
+#define IDM_ABOUT                       104
+#define IDM_EXIT                        105
+#define IDI_SEISMICSIMULATION           107
+#define IDI_SMALL                       108
+#define IDC_SEISMICSIMULATION           109
+#define IDR_MAINFRAME                   128
+#define ID_FILE_PARALLEL                32771
+#define ID_FILE_SERIAL                  32772
+#define IDM_PARALLEL                    32773
+#define ID_FILE_ENABLEGUI               32774
+#define ID_FILE_DISABLEGUI              32775
+#define IDC_STATIC                      -1
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC                     1
+#define _APS_NEXT_RESOURCE_VALUE        129
+#define _APS_NEXT_COMMAND_VALUE         32782
+#define _APS_NEXT_CONTROL_VALUE         1000
+#define _APS_NEXT_SYMED_VALUE           110
+#endif
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/small.ico b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/small.ico
new file mode 100644 (file)
index 0000000..d551aa3
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc8/small.ico differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.ico b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.ico
new file mode 100644 (file)
index 0000000..d551aa3
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.ico differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.rc b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.rc
new file mode 100644 (file)
index 0000000..c200334
--- /dev/null
@@ -0,0 +1,145 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_SEISMICSIMULATION   ICON                    "SeismicSimulation.ico"
+IDI_SMALL               ICON                    "small.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDC_SEISMICSIMULATION MENU 
+BEGIN
+    POPUP "&File"
+    BEGIN
+        MENUITEM "&Parallel",                   ID_FILE_PARALLEL
+        MENUITEM "&Serial",                     ID_FILE_SERIAL
+        MENUITEM SEPARATOR
+        MENUITEM "&Enable GUI",                 ID_FILE_ENABLEGUI
+        MENUITEM "&Disable GUI",                ID_FILE_DISABLEGUI
+        MENUITEM SEPARATOR
+        MENUITEM "E&xit",                       IDM_EXIT
+    END
+    POPUP "&Help"
+    BEGIN
+        MENUITEM "&About ...",                  IDM_ABOUT
+    END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Accelerator
+//
+
+IDC_SEISMICSIMULATION ACCELERATORS 
+BEGIN
+    VK_OEM_2,       IDM_ABOUT,              VIRTKEY, ALT, NOINVERT
+    "P",            ID_FILE_PARALLEL,       VIRTKEY, ALT, NOINVERT
+    "S",            ID_FILE_SERIAL,         VIRTKEY, ALT, NOINVERT
+    "D",            ID_FILE_DISABLEGUI,     VIRTKEY, ALT, NOINVERT
+    "E",            ID_FILE_ENABLEGUI,      VIRTKEY, ALT, NOINVERT
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_ABOUTBOX DIALOG  22, 17, 230, 75
+STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "About"
+FONT 8, "System"
+BEGIN
+    ICON            IDI_SEISMICSIMULATION,IDC_MYICON,14,9,16,16
+    LTEXT           "SeismicSimulation Version 1.1",IDC_STATIC,49,10,119,8,SS_NOPREFIX
+    LTEXT           "Copyright (C) 2005-2008",IDC_STATIC,49,20,119,8
+    DEFPUSHBUTTON   "OK",IDOK,195,6,30,11,WS_GROUP
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE 
+BEGIN
+    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+    "#include ""windows.h""\r\n"
+    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE 
+BEGIN
+    IDS_APP_TITLE           "SeismicSimulation"
+    IDC_SEISMICSIMULATION   "SEISMICSIMULATION"
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.sln
new file mode 100644 (file)
index 0000000..aa49134
--- /dev/null
@@ -0,0 +1,37 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SeismicSimulation", "SeismicSimulation.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A2527}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               DD Debug|Win32 = DD Debug|Win32
+               DD Debug|x64 = DD Debug|x64
+               DD Release|Win32 = DD Release|Win32
+               DD Release|x64 = DD Release|x64
+               GDI Debug|Win32 = GDI Debug|Win32
+               GDI Debug|x64 = GDI Debug|x64
+               GDI Release|Win32 = GDI Release|Win32
+               GDI Release|x64 = GDI Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|Win32.Build.0 = DD Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|x64.ActiveCfg = DD Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|x64.Build.0 = DD Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|Win32.ActiveCfg = DD Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|Win32.Build.0 = DD Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|x64.ActiveCfg = DD Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|x64.Build.0 = DD Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.suo
new file mode 100644 (file)
index 0000000..9fc65f4
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/SeismicSimulation.vcproj
new file mode 100644 (file)
index 0000000..fe43053
--- /dev/null
@@ -0,0 +1,813 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="SeismicSimulation"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2527}"
+       RootNamespace="SeismicSimulation"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc9\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc9\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot;&quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc9\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc9\lib&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="&quot;$(TBB22_INSTALL_DIR)\include&quot;;&quot;$(DXSDK_DIR)\include&quot;"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;h;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\SeismicSimulation.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+                       >
+                       <File
+                               RelativePath=".\resource.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\SeismicSimulation.ico"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\SeismicSimulation.rc"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\small.ico"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Video Layer"
+                       >
+                       <File
+                               RelativePath="..\..\..\common\gui\ddvideo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\gdivideo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="DD Release|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Release|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\video.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\winvideo.h"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/resource.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/resource.h
new file mode 100644 (file)
index 0000000..44453d7
--- /dev/null
@@ -0,0 +1,32 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by SeismicSimulation.rc
+//
+#define IDC_MYICON                      2
+#define IDD_SEISMICSIMULATION_DIALOG    102
+#define IDS_APP_TITLE                   103
+#define IDD_ABOUTBOX                    103
+#define IDM_ABOUT                       104
+#define IDM_EXIT                        105
+#define IDI_SEISMICSIMULATION           107
+#define IDI_SMALL                       108
+#define IDC_SEISMICSIMULATION           109
+#define IDR_MAINFRAME                   128
+#define ID_FILE_PARALLEL                32771
+#define ID_FILE_SERIAL                  32772
+#define IDM_PARALLEL                    32773
+#define ID_FILE_ENABLEGUI               32774
+#define ID_FILE_DISABLEGUI              32775
+#define IDC_STATIC                      -1
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC                     1
+#define _APS_NEXT_RESOURCE_VALUE        129
+#define _APS_NEXT_COMMAND_VALUE         32782
+#define _APS_NEXT_CONTROL_VALUE         1000
+#define _APS_NEXT_SYMED_VALUE           110
+#endif
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/small.ico b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/small.ico
new file mode 100644 (file)
index 0000000..d551aa3
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/vc9/small.ico differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/English.lproj/main.nib/classes.nib b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/English.lproj/main.nib/classes.nib
new file mode 100644 (file)
index 0000000..ea58db1
--- /dev/null
@@ -0,0 +1,4 @@
+{
+IBClasses = ();
+IBVersion = 1;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/English.lproj/main.nib/info.nib b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/English.lproj/main.nib/info.nib
new file mode 100644 (file)
index 0000000..642ec2d
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>IBDocumentLocation</key>
+       <string>662 774 356 240 0 0 1680 1028 </string>
+       <key>IBEditorPositions</key>
+       <dict>
+               <key>29</key>
+               <string>863 618 271 44 0 0 1680 1028 </string>
+       </dict>
+       <key>IBFramework Version</key>
+       <string>443.0</string>
+       <key>IBOldestOS</key>
+       <integer>3</integer>
+       <key>IBOpenObjects</key>
+       <array>
+               <integer>29</integer>
+               <integer>166</integer>
+       </array>
+       <key>IBSystem Version</key>
+       <string>8I1119</string>
+       <key>targetFramework</key>
+       <string>IBCarbonFramework</string>
+</dict>
+</plist>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/English.lproj/main.nib/objects.xib b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/English.lproj/main.nib/objects.xib
new file mode 100644 (file)
index 0000000..1d06d6c
--- /dev/null
@@ -0,0 +1,183 @@
+<?xml version="1.0" standalone="yes"?>
+<object class="NSIBObjectData">
+  <string name="targetFramework">IBCarbonFramework</string>
+  <object name="rootObject" class="NSCustomObject" id="1">
+    <string name="customClass">NSApplication</string>
+  </object>
+  <array count="22" name="allObjects">
+    <object class="IBCarbonMenu" id="29">
+      <string name="title">main</string>
+      <array count="3" name="items">
+        <object class="IBCarbonMenuItem" id="210">
+          <boolean name="updateSingleItem">TRUE</boolean>
+          <string name="title">Seismic Simulation</string>
+          <object name="submenu" class="IBCarbonMenu" id="211">
+            <string name="title">Seismic Simulation</string>
+            <array count="7" name="items">
+              <object class="IBCarbonMenuItem" id="215">
+                <boolean name="checked">TRUE</boolean>
+                <boolean name="dynamic">TRUE</boolean>
+                <boolean name="autoDisable">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">Parallel</string>
+                <ostype name="command">para</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="214">
+                <boolean name="dynamic">TRUE</boolean>
+                <boolean name="autoDisable">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">Serial</string>
+                <ostype name="command">seri</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="216">
+                <boolean name="separator">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+              </object>
+              <object class="IBCarbonMenuItem" id="217">
+                <boolean name="checked">TRUE</boolean>
+                <boolean name="dynamic">TRUE</boolean>
+                <boolean name="autoDisable">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">Enable GUI</string>
+                <ostype name="command">egui</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="218">
+                <boolean name="dynamic">TRUE</boolean>
+                <boolean name="autoDisable">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">Disable GUI</string>
+                <ostype name="command">dgui</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="213">
+                <boolean name="separator">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+              </object>
+              <object class="IBCarbonMenuItem" id="212">
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">About Seismic</string>
+                <int name="keyEquivalentModifier">0</int>
+                <ostype name="command">abou</ostype>
+              </object>
+            </array>
+            <string name="name">_NSAppleMenu</string>
+          </object>
+        </object>
+        <object class="IBCarbonMenuItem" id="127">
+          <string name="title">File</string>
+          <object name="submenu" class="IBCarbonMenu" id="131">
+            <string name="title">File</string>
+            <array count="1" name="items">
+              <object class="IBCarbonMenuItem" id="200">
+                <string name="title">Close</string>
+                <string name="keyEquivalent">w</string>
+                <ostype name="command">clos</ostype>
+              </object>
+            </array>
+          </object>
+        </object>
+        <object class="IBCarbonMenuItem" id="192">
+          <string name="title">Window</string>
+          <object name="submenu" class="IBCarbonMenu" id="195">
+            <string name="title">Window</string>
+            <array count="5" name="items">
+              <object class="IBCarbonMenuItem" id="190">
+                <boolean name="dynamic">TRUE</boolean>
+                <string name="title">Minimize</string>
+                <string name="keyEquivalent">m</string>
+                <ostype name="command">mini</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="197">
+                <string name="title">Zoom</string>
+                <ostype name="command">zoom</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="194">
+                <boolean name="separator">TRUE</boolean>
+              </object>
+              <object class="IBCarbonMenuItem" id="196">
+                <boolean name="dynamic">TRUE</boolean>
+                <string name="title">Bring All to Front</string>
+                <ostype name="command">bfrt</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="193">
+                <boolean name="dynamic">TRUE</boolean>
+                <string name="title">Arrange in Front</string>
+                <int name="keyEquivalentModifier">1572864</int>
+                <ostype name="command">frnt</ostype>
+              </object>
+            </array>
+            <string name="name">_NSWindowsMenu</string>
+          </object>
+        </object>
+      </array>
+      <string name="name">_NSMainMenu</string>
+    </object>
+    <reference idRef="127"/>
+    <reference idRef="131"/>
+    <object class="IBCarbonWindow" id="166">
+      <string name="windowRect">338 353 698 833 </string>
+      <string name="title">Seismic Simulation</string>
+      <object name="rootControl" class="IBCarbonRootControl" id="167">
+        <string name="bounds">0 0 360 480 </string>
+        <string name="viewFrame">0 0 480 360 </string>
+      </object>
+      <boolean name="receiveUpdates">FALSE</boolean>
+      <boolean name="compositing">TRUE</boolean>
+      <int name="themeBrush">-1</int>
+      <boolean name="asyncDrag">TRUE</boolean>
+      <boolean name="doesNotCycle">TRUE</boolean>
+      <int name="WindowMinWidth">320</int>
+      <int name="WindowMinHeight">200</int>
+    </object>
+    <reference idRef="167"/>
+    <reference idRef="190"/>
+    <reference idRef="192"/>
+    <reference idRef="193"/>
+    <reference idRef="194"/>
+    <reference idRef="195"/>
+    <reference idRef="196"/>
+    <reference idRef="197"/>
+    <reference idRef="200"/>
+    <reference idRef="210"/>
+    <reference idRef="211"/>
+    <reference idRef="212"/>
+    <reference idRef="213"/>
+    <reference idRef="214"/>
+    <reference idRef="215"/>
+    <reference idRef="216"/>
+    <reference idRef="217"/>
+    <reference idRef="218"/>
+  </array>
+  <array count="22" name="allParents">
+    <reference idRef="1"/>
+    <reference idRef="29"/>
+    <reference idRef="127"/>
+    <reference idRef="1"/>
+    <reference idRef="166"/>
+    <reference idRef="195"/>
+    <reference idRef="29"/>
+    <reference idRef="195"/>
+    <reference idRef="195"/>
+    <reference idRef="192"/>
+    <reference idRef="195"/>
+    <reference idRef="195"/>
+    <reference idRef="131"/>
+    <reference idRef="29"/>
+    <reference idRef="210"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+  </array>
+  <dictionary count="3" name="nameTable">
+    <string>Files Owner</string>
+    <reference idRef="1"/>
+    <string>MainWindow</string>
+    <reference idRef="166"/>
+    <string>MenuBar</string>
+    <reference idRef="29"/>
+  </dictionary>
+  <unsigned_int name="nextObjectID">219</unsigned_int>
+</object>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/Info.plist b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/Info.plist
new file mode 100644 (file)
index 0000000..d435fca
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>CFBundleDevelopmentRegion</key>
+       <string>English</string>
+       <key>CFBundleExecutable</key>
+       <string>${EXECUTABLE_NAME}</string>
+       <key>CFBundleIconFile</key>
+       <string></string>
+       <key>CFBundleIdentifier</key>
+       <string>com.intel.tbb.SeismicSimulation</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>${PRODUCT_NAME}</string>
+       <key>CFBundlePackageType</key>
+       <string>APPL</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string>1.0</string>
+       <key>CSResourcesFileMapped</key>
+       <true/>
+</dict>
+</plist>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/SeismicSimulation.pch b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/SeismicSimulation.pch
new file mode 100644 (file)
index 0000000..bacf499
--- /dev/null
@@ -0,0 +1,5 @@
+//
+// Prefix header for all source files of the 'SeismicSimulation' target in the 'SeismicSimulation' project.
+//
+
+#include <Carbon/Carbon.h>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..3ba4b1c
--- /dev/null
@@ -0,0 +1,283 @@
+// !$*UTF8*$!\r
+{\r
+       archiveVersion = 1;\r
+       classes = {\r
+       };\r
+       objectVersion = 42;\r
+       objects = {\r
+\r
+/* Begin PBXBuildFile section */\r
+               8D0C4E8E0486CD37000505A6 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };\r
+               A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };\r
+               A126495E0B83936D0091D5AD /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };\r
+               A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };\r
+               A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */; };\r
+               A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */; };\r
+               A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };\r
+               A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };\r
+               A1F591A90B8DFC7100073279 /* SeismicSimulation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F591A80B8DFC7100073279 /* SeismicSimulation.cpp */; };\r
+               A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F591AA0B8DFC9600073279 /* macvideo.cpp */; };\r
+/* End PBXBuildFile section */\r
+\r
+/* Begin PBXCopyFilesBuildPhase section */\r
+               A18D2A370B861BB7007D8D2C /* CopyFiles */ = {\r
+                       isa = PBXCopyFilesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       dstPath = "";\r
+                       dstSubfolderSpec = 16;\r
+                       files = (\r
+                               A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+/* End PBXCopyFilesBuildPhase section */\r
+\r
+/* Begin PBXFileReference section */\r
+               1870340FFE93FCAF11CA0CD7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = "<group>"; };\r
+               32DBCF6D0370B57F00C91783 /* SeismicSimulation.pch */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SeismicSimulation.pch; sourceTree = "<group>"; };\r
+               8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };\r
+               8D0C4E970486CD37000505A6 /* SeismicSimulation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SeismicSimulation.app; sourceTree = BUILT_PRODUCTS_DIR; };\r
+               A18D2A330B861B99007D8D2C /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };\r
+               A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };\r
+               A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };\r
+               A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };\r
+               A1F591A80B8DFC7100073279 /* SeismicSimulation.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SeismicSimulation.cpp; path = ../SeismicSimulation.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F591AA0B8DFC9600073279 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F591AB0B8DFC9600073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../../../common/gui/video.h; sourceTree = SOURCE_ROOT; };\r
+/* End PBXFileReference section */\r
+\r
+/* Begin PBXFrameworksBuildPhase section */\r
+               8D0C4E910486CD37000505A6 /* Frameworks */ = {\r
+                       isa = PBXFrameworksBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */,\r
+                               A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */,\r
+                               A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */,\r
+                               A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */,\r
+                               A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+/* End PBXFrameworksBuildPhase section */\r
+\r
+/* Begin PBXGroup section */\r
+               195DF8CFFE9D517E11CA2CBB /* Products */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               8D0C4E970486CD37000505A6 /* SeismicSimulation.app */,\r
+                       );\r
+                       name = Products;\r
+                       sourceTree = "<group>";\r
+               };\r
+               20286C29FDCF999611CA2CEA /* SeismicSimulation */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               20286C2AFDCF999611CA2CEA /* Sources */,\r
+                               20286C2CFDCF999611CA2CEA /* Resources */,\r
+                               20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,\r
+                               195DF8CFFE9D517E11CA2CBB /* Products */,\r
+                       );\r
+                       name = SeismicSimulation;\r
+                       sourceTree = "<group>";\r
+               };\r
+               20286C2AFDCF999611CA2CEA /* Sources */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               A1F591A80B8DFC7100073279 /* SeismicSimulation.cpp */,\r
+                               A1F591AA0B8DFC9600073279 /* macvideo.cpp */,\r
+                               A1F591AB0B8DFC9600073279 /* video.h */,\r
+                               32DBCF6D0370B57F00C91783 /* SeismicSimulation.pch */,\r
+                       );\r
+                       name = Sources;\r
+                       sourceTree = "<group>";\r
+               };\r
+               20286C2CFDCF999611CA2CEA /* Resources */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               8D0C4E960486CD37000505A6 /* Info.plist */,\r
+                               02345980000FD03B11CA0E72 /* main.nib */,\r
+                       );\r
+                       name = Resources;\r
+                       sourceTree = "<group>";\r
+               };\r
+               20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               A18D2A330B861B99007D8D2C /* libtbb.dylib */,\r
+                               A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */,\r
+                               A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */,\r
+                               A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */,\r
+                       );\r
+                       name = "External Frameworks and Libraries";\r
+                       sourceTree = "<group>";\r
+               };\r
+/* End PBXGroup section */\r
+\r
+/* Begin PBXNativeTarget section */\r
+               8D0C4E890486CD37000505A6 /* SeismicSimulation */ = {\r
+                       isa = PBXNativeTarget;\r
+                       buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "SeismicSimulation" */;\r
+                       buildPhases = (\r
+                               8D0C4E8C0486CD37000505A6 /* Resources */,\r
+                               8D0C4E8F0486CD37000505A6 /* Sources */,\r
+                               8D0C4E910486CD37000505A6 /* Frameworks */,\r
+                               A18D2A370B861BB7007D8D2C /* CopyFiles */,\r
+                       );\r
+                       buildRules = (\r
+                       );\r
+                       dependencies = (\r
+                       );\r
+                       name = SeismicSimulation;\r
+                       productInstallPath = "$(HOME)/Applications";\r
+                       productName = SeismicSimulation;\r
+                       productReference = 8D0C4E970486CD37000505A6 /* SeismicSimulation.app */;\r
+                       productType = "com.apple.product-type.application";\r
+               };\r
+/* End PBXNativeTarget section */\r
+\r
+/* Begin PBXProject section */\r
+               20286C28FDCF999611CA2CEA /* Project object */ = {\r
+                       isa = PBXProject;\r
+                       buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "SeismicSimulation" */;\r
+                       hasScannedForEncodings = 1;\r
+                       mainGroup = 20286C29FDCF999611CA2CEA /* SeismicSimulation */;\r
+                       projectDirPath = "";\r
+                       targets = (\r
+                               8D0C4E890486CD37000505A6 /* SeismicSimulation */,\r
+                       );\r
+               };\r
+/* End PBXProject section */\r
+\r
+/* Begin PBXResourcesBuildPhase section */\r
+               8D0C4E8C0486CD37000505A6 /* Resources */ = {\r
+                       isa = PBXResourcesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               8D0C4E8E0486CD37000505A6 /* main.nib in Resources */,\r
+                               A126495E0B83936D0091D5AD /* Info.plist in Resources */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+/* End PBXResourcesBuildPhase section */\r
+\r
+/* Begin PBXSourcesBuildPhase section */\r
+               8D0C4E8F0486CD37000505A6 /* Sources */ = {\r
+                       isa = PBXSourcesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               A1F591A90B8DFC7100073279 /* SeismicSimulation.cpp in Sources */,\r
+                               A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+/* End PBXSourcesBuildPhase section */\r
+\r
+/* Begin PBXVariantGroup section */\r
+               02345980000FD03B11CA0E72 /* main.nib */ = {\r
+                       isa = PBXVariantGroup;\r
+                       children = (\r
+                               1870340FFE93FCAF11CA0CD7 /* English */,\r
+                       );\r
+                       name = main.nib;\r
+                       sourceTree = "<group>";\r
+               };\r
+/* End PBXVariantGroup section */\r
+\r
+/* Begin XCBuildConfiguration section */\r
+               C0E91AC608A95435008D54AB /* Debug */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               COPY_PHASE_STRIP = NO;\r
+                               GCC_DYNAMIC_NO_PIC = NO;\r
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;\r
+                               GCC_MODEL_TUNING = "";\r
+                               GCC_OPTIMIZATION_LEVEL = 0;\r
+                               INSTALL_PATH = "$(HOME)/Applications";\r
+                               LIBRARY_SEARCH_PATHS = (\r
+                                       "$(inherited)",\r
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",\r
+                               );\r
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";\r
+                               PRODUCT_NAME = SeismicSimulation;\r
+                       };\r
+                       name = Debug;\r
+               };\r
+               C0E91AC708A95435008D54AB /* Release */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;\r
+                               GCC_MODEL_TUNING = "";\r
+                               INSTALL_PATH = "$(HOME)/Applications";\r
+                               LIBRARY_SEARCH_PATHS = (\r
+                                       "$(inherited)",\r
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",\r
+                               );\r
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";\r
+                               PRODUCT_NAME = SeismicSimulation;\r
+                       };\r
+                       name = Release;\r
+               };\r
+               C0E91ACA08A95435008D54AB /* Debug */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               ARCHS = i386;\r
+                               GCC_AUTO_VECTORIZATION = YES;\r
+                               GCC_ENABLE_CPP_RTTI = YES;\r
+                               GCC_ENABLE_SSE3_EXTENSIONS = YES;\r
+                               GCC_MODEL_TUNING = "";\r
+                               GCC_OPTIMIZATION_LEVEL = 0;\r
+                               GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;\r
+                               MACH_O_TYPE = mh_execute;\r
+                               MACOSX_DEPLOYMENT_TARGET = 10.4;\r
+                               PREBINDING = NO;\r
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\r
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;\r
+                               SYMROOT = "/tmp/tbb-$(USER)";\r
+                       };\r
+                       name = Debug;\r
+               };\r
+               C0E91ACB08A95435008D54AB /* Release */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               ARCHS = i386;\r
+                               GCC_AUTO_VECTORIZATION = YES;\r
+                               GCC_ENABLE_CPP_RTTI = YES;\r
+                               GCC_ENABLE_SSE3_EXTENSIONS = YES;\r
+                               GCC_MODEL_TUNING = "";\r
+                               GCC_OPTIMIZATION_LEVEL = 3;\r
+                               GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;\r
+                               MACH_O_TYPE = mh_execute;\r
+                               MACOSX_DEPLOYMENT_TARGET = 10.4;\r
+                               PREBINDING = NO;\r
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;\r
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;\r
+                               SYMROOT = "/tmp/tbb-$(USER)";\r
+                       };\r
+                       name = Release;\r
+               };\r
+/* End XCBuildConfiguration section */\r
+\r
+/* Begin XCConfigurationList section */\r
+               C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "SeismicSimulation" */ = {\r
+                       isa = XCConfigurationList;\r
+                       buildConfigurations = (\r
+                               C0E91AC608A95435008D54AB /* Debug */,\r
+                               C0E91AC708A95435008D54AB /* Release */,\r
+                       );\r
+                       defaultConfigurationIsVisible = 0;\r
+                       defaultConfigurationName = Release;\r
+               };\r
+               C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "SeismicSimulation" */ = {\r
+                       isa = XCConfigurationList;\r
+                       buildConfigurations = (\r
+                               C0E91ACA08A95435008D54AB /* Debug */,\r
+                               C0E91ACB08A95435008D54AB /* Release */,\r
+                       );\r
+                       defaultConfigurationIsVisible = 0;\r
+                       defaultConfigurationName = Release;\r
+               };\r
+/* End XCConfigurationList section */\r
+       };\r
+       rootObject = 20286C28FDCF999611CA2CEA /* Project object */;\r
+}\r
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/Makefile
new file mode 100644 (file)
index 0000000..0758fdb
--- /dev/null
@@ -0,0 +1,167 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# The original source for this example is
+# Copyright (c) 1994-2008 John E. Stone
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+# GNU Makefile that builds and runs example.
+NAME:=tachyon
+
+# The C++ compiler
+#CXX = g++
+
+# The default dataset
+export DATASET = balls
+# The default runtime arguments
+export ARGS =
+
+# define name suffix
+SUFFIX = .$(VERSION)
+
+LIBS ?= -lm
+
+include ../../common/gui/Makefile.gmake
+
+ifeq ($(UI),x)
+CXXFLAGS += -DX_FULLSYNC 
+ifneq (,$(findstring -lXext,$(LIBS)))
+CXXFLAGS += -DX_NOSHMPIX
+endif
+endif # X
+
+MYCXXFLAGS = $(CXXFLAGS)
+
+all: build run
+release: build
+debug: build_debug
+test: run
+
+build: build_serial build_tbb1d build_tbb
+build_debug: build_serial_debug build_tbb1d_debug build_tbb_debug
+run: run_serial run_tbb1d run_tbb
+
+serial: build_serial run_serial
+serial_debug: build_serial_debug run_serial
+tbb: build_tbb run_tbb
+tbb_debug: build_tbb_debug run_tbb
+tbb1d: build_tbb1d run_tbb1d
+tbb1d_debug: build_tbb1d_debug run_tbb1d
+
+build_serial:
+       $(MAKE) VERSION=serial build_one
+build_serial_debug:
+       $(MAKE) VERSION=serial ADD_DEBUG=1 build_one
+run_serial:
+       $(MAKE) VERSION=serial run_one
+
+build_tbb:
+       $(MAKE) VERSION=tbb ADD_TBB=1 build_one
+build_tbb_debug:
+       $(MAKE) VERSION=tbb ADD_TBB=1 ADD_DEBUG=1 build_one
+run_tbb:
+       $(MAKE) VERSION=tbb run_one
+
+build_tbb1d:
+       $(MAKE) VERSION=tbb1d ADD_TBB=1 build_one
+build_tbb1d_debug:
+       $(MAKE) VERSION=tbb1d ADD_TBB=1 ADD_DEBUG=1 build_one
+run_tbb1d:
+       $(MAKE) VERSION=tbb1d run_one
+
+
+#
+# Per-build Makefile rules (for recursive $(MAKE) calls from above)
+#
+
+SVERSION = $(VERSION)
+
+ifeq ($(ADD_DEBUG),1)
+MYCXXFLAGS += -O0 -g -D_DEBUG
+else
+MYCXXFLAGS += -O2
+endif
+
+
+ifeq ($(ADD_TBB),1)
+MYCXXFLAGS +=
+ifeq ($(ADD_DEBUG),1)
+MYCXXFLAGS += -DTBB_USE_DEBUG
+LIBS += -ltbb_debug
+else
+LIBS += -ltbb
+endif
+endif
+
+SOURCE = ../../common/gui/$(UI)video.cpp src/trace.$(SVERSION).cpp src/pthread.cpp src/video.cpp src/api.cpp src/apigeom.cpp src/apitrigeom.cpp src/bndbox.cpp src/box.cpp src/camera.cpp src/coordsys.cpp src/cylinder.cpp src/extvol.cpp src/getargs.cpp src/global.cpp src/grid.cpp src/imageio.cpp src/imap.cpp src/intersect.cpp src/jpeg.cpp src/light.cpp src/objbound.cpp src/parse.cpp src/plane.cpp src/ppm.cpp src/quadric.cpp src/render.cpp src/ring.cpp src/shade.cpp src/sphere.cpp src/texture.cpp src/tgafile.cpp src/trace_rest.cpp src/triangle.cpp src/ui.cpp src/util.cpp src/vector.cpp src/vol.cpp
+
+build_one:     $(EXE)
+
+run_one:
+ifeq ($(UI),mac)
+       export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; ./$(EXE) $(ARGS) dat/$(DATASET).dat
+else
+       ./$(EXE) $(ARGS) dat/$(DATASET).dat
+endif
+
+$(EXE): $(SOURCE)
+ifeq ($(UI),mac)
+       mkdir -p $(APPRES)/English.lproj $(NAME).$(VERSION).app/Contents/MacOS
+       $(PBXCP) xcode/English.lproj/main.nib $(APPRES)/English.lproj
+       $(PBXCP) xcode/Info.plist $(APPRES)
+endif
+       $(CXX) $(MYCXXFLAGS) -o $@ $(SOURCE) $(LIBS)
+       $(RM) *.o
+
+clean: VERSION = *
+clean:
+       $(RM) $(EXE) *.o *.d
+ifeq ($(UI),mac)
+       rm -rf $(NAME).*
+endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/Makefile.windows
new file mode 100644 (file)
index 0000000..38cf165
--- /dev/null
@@ -0,0 +1,131 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# The original source for this example is
+# Copyright (c) 1994-2008 John E. Stone
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+# Common Makefile that builds and runs example.
+
+# The C++ compiler
+CXX = cl.exe
+
+# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw)
+#UI = con
+UI = gdi
+#UI = dd
+
+# Machine architecture, auto-detected from TBB_ARCH_PLATFORM by default
+# Use XARCH variable to change it. See index.html for more information
+ARCH0 = $(TBB_ARCH_PLATFORM)-
+ARCHA = $(ARCH0:\vc7.1-=)
+ARCHB = $(ARCHA:\vc8-=)
+ARCHC = $(ARCHB:\vc9-=)
+ARCH3 = $(ARCHC:ia32=x86)
+ARCH4 = $(ARCH3:intel64=AMD64)
+XARCH = $(ARCH4:-=x86)
+
+# The default dataset
+DATASET = balls
+# The default runtime arguments
+ARGS =
+
+# Add these for tbb/tbb1d release builds
+CXXFLAGS_TBB_NDEBUG = $(CXXFLAGS)
+LIBS_TBB_NDEBUG = tbb.lib $(LIBS)
+
+# Add these for tbb/tbb1d debug builds
+CXXFLAGS_TBB_DEBUG = $(CXXFLAGS) /D TBB_USE_DEBUG
+LIBS_TBB_DEBUG =  tbb_debug.lib $(LIBS)
+
+
+MAKEINC = ../../common/gui/Makefile.win
+SOURCE = src/pthread.cpp src/video.cpp src/api.cpp src/apigeom.cpp src/apitrigeom.cpp src/bndbox.cpp src/box.cpp src/camera.cpp src/coordsys.cpp src/cylinder.cpp src/extvol.cpp src/getargs.cpp src/global.cpp src/grid.cpp src/imageio.cpp src/imap.cpp src/intersect.cpp src/jpeg.cpp src/light.cpp src/objbound.cpp src/parse.cpp src/plane.cpp src/ppm.cpp src/quadric.cpp src/render.cpp src/ring.cpp src/shade.cpp src/sphere.cpp src/texture.cpp src/tgafile.cpp src/trace_rest.cpp src/triangle.cpp src/ui.cpp src/util.cpp src/vector.cpp src/vol.cpp
+
+# Targets
+all: build run
+release: build
+debug: build_debug
+test: run
+
+build: build_serial build_tbb1d build_tbb
+build_debug: build_serial_debug build_tbb1d_debug build_tbb_debug
+run: run_serial run_tbb1d run_tbb
+
+serial: build_serial run_serial
+serial_debug: build_serial_debug run_serial
+tbb: build_tbb run_tbb
+tbb_debug: build_tbb_debug run_tbb
+tbb1d: build_tbb1d run_tbb1d
+tbb1d_debug: build_tbb1d_debug run_tbb1d
+
+build_serial:
+       @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.serial.cpp $(SOURCE)" EXE=tachyon.serial.exe RCNAME=gui UI=$(UI) CXX="$(CXX)" CXXFLAGS=$(CXXFLAGS) XARCH=$(XARCH) build_one
+build_serial_debug:
+       @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.serial.cpp $(SOURCE)" EXE=tachyon.serial.exe RCNAME=gui UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS=$(CXXFLAGS) XARCH=$(XARCH) build_one
+run_serial:
+       -.\tachyon.serial.exe $(ARGS) dat\$(DATASET).dat
+
+build_tbb:
+       @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.tbb.cpp $(SOURCE)" EXE=tachyon.tbb.exe RCNAME=gui UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS_TBB_NDEBUG)" LFLAGS="$(LIBS_TBB_NDEBUG)" XARCH=$(XARCH) build_one
+build_tbb_debug:
+       @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.tbb.cpp $(SOURCE)" EXE=tachyon.tbb.exe RCNAME=gui UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS_TBB_DEBUG)" LFLAGS="$(LIBS_TBB_DEBUG)" XARCH=$(XARCH) build_one
+run_tbb:
+       -.\tachyon.tbb.exe $(ARGS) dat\$(DATASET).dat
+
+build_tbb1d:
+       @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.tbb1d.cpp $(SOURCE)" EXE=tachyon.tbb1d.exe RCNAME=gui UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS_TBB_NDEBUG)" LFLAGS="$(LIBS_TBB_NDEBUG)" XARCH=$(XARCH) build_one
+build_tbb1d_debug:
+       @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.tbb1d.cpp $(SOURCE)" EXE=tachyon.tbb1d.exe RCNAME=gui UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS_TBB_DEBUG)" LFLAGS="$(LIBS_TBB_DEBUG)" XARCH=$(XARCH) build_one
+run_tbb1d:
+       -.\tachyon.tbb1d.exe $(ARGS) dat\$(DATASET).dat
+
+
+clean:
+       @cmd.exe /C del tachyon.* *.manifest *.obj vc7.1\gui.res *.?db
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/820spheres.dat b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/820spheres.dat
new file mode 100644 (file)
index 0000000..5d5a430
--- /dev/null
@@ -0,0 +1,1671 @@
+BEGIN_SCENE
+  OUTFILE /dev/null
+  RESOLUTION 512 512
+  VERBOSE 0
+CAMERA
+  ZOOM 1.0
+  ASPECTRATIO 1.0
+  ANTIALIASING 0
+  RAYDEPTH 12
+  CENTER 0.0 0.0 2.0
+  VIEWDIR 0 0 -1 
+  UPDIR 0 1 0
+END_CAMERA 
+LIGHT CENTER 4 3 2 RAD 0.2 COLOR 0.5 0.5 0.5
+LIGHT CENTER 1 -4 4 RAD 0.2 COLOR 0.5 0.5 0.5
+LIGHT CENTER -3 1 5 RAD 0.2 COLOR 0.5 0.5 0.5
+
+TEXDEF txt001 AMBIENT 0.2  DIFFUSE 0.8  SPECULAR 0  OPACITY 1 
+ COLOR 1 0.75 0.33 
+ TEXFUNC 0 
+
+TEXDEF txt002 AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
+  COLOR 1.0 1.0 1.0 TEXFUNC 0
+
+ SPHERE CENTER 0 0 0 RAD 0.5 
+   txt002 
+ SPHERE CENTER 0.272166 0.272166 0.544331 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.420314 0.420314 0.618405 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.470715 0.470715 0.598245 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.461623 0.409245 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.409245 0.461623 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.429405 0.481784 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.367935 0.472692 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.379004 0.431383 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.481784 0.429405 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.431383 0.379004 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.472692 0.367935 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.461844 0.304709 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.492085 0.33495 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.424345 0.305171 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.435193 0.368397 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.529584 0.334488 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.472692 0.367935 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.499343 0.304247 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.518736 0.271262 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.488495 0.241021 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.450996 0.241483 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.304709 0.461844 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.33495 0.492085 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.368397 0.435193 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.305171 0.424345 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.271262 0.518736 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.241483 0.450996 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.241021 0.488495 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.334488 0.529584 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.304247 0.499343 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.367935 0.472692 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.230635 0.38777 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.2506 0.446614 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.301839 0.407906 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.253236 0.449775 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.179397 0.426478 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.182032 0.429639 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.159431 0.367634 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.227999 0.384609 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.208034 0.325765 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.279238 0.345901 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.115031 0.4293 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.102505 0.502308 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.160392 0.474661 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.160392 0.474661 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0571437 0.456947 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.115031 0.4293 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0696698 0.383939 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0571437 0.456947 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0696698 0.383939 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.115031 0.4293 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.082487 0.239622 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0438957 0.258053 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.117687 0.252557 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0863845 0.308551 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.00869528 0.245118 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0511841 0.295616 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0472866 0.226687 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0399982 0.189123 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0785895 0.170692 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.11379 0.183628 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.38777 0.230635 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.446614 0.2506 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.449775 0.253236 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.407906 0.301839 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.384609 0.227999 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.345901 0.279238 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.325765 0.208034 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.426478 0.179397 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.367634 0.159431 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.429639 0.182032 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.239622 0.082487 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.258053 0.0438957 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.308551 0.0863845 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.252557 0.117687 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.189123 0.0399982 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.183628 0.11379 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.170692 0.0785895 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.245118 0.00869528 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.226687 0.0472866 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.295616 0.0511841 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.4293 0.115031 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.502308 0.102505 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.474661 0.160392 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.474661 0.160392 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.456947 0.0571437 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.4293 0.115031 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.383939 0.0696698 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.456947 0.0571437 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.383939 0.0696698 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.4293 0.115031 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.643951 0.172546 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.802608 0.281471 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.824035 0.30566 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.787796 0.241352 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.752156 0.305221 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.838847 0.34578 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.766968 0.345341 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.817421 0.321591 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.874487 0.28191 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.853061 0.257721 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.838248 0.217602 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.643951 0.172546 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.61371 0.202787 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.5724 0.191718 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.624779 0.244096 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.68526 0.183615 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.696329 0.224924 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.715501 0.153374 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.632882 0.131237 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.663122 0.100996 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.591572 0.120168 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.594141 0.358439 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.619127 0.408291 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.638217 0.337042 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.547576 0.389119 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.566667 0.317871 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.57505 0.429687 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.550064 0.379835 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.621614 0.399007 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.802608 0.281471 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.858698 0.329459 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.845371 0.280879 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.798572 0.337088 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.815936 0.330051 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.75581 0.33768 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.759846 0.282063 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.862735 0.273842 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.806645 0.225855 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.849407 0.225263 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.594141 0.358439 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.613592 0.428945 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.621614 0.399007 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.542042 0.409774 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.550064 0.379835 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.586119 0.388377 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.566667 0.317871 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.638217 0.337042 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.643951 0.172546 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.674191 0.202787 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.715501 0.191718 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.663122 0.244096 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.602641 0.183615 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.591572 0.224924 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.5724 0.153374 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.655019 0.131237 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.624779 0.100996 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.696329 0.120168 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.852418 0.0955788 2.30268e-16 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.922609 0.11107 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.867231 0.135698 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.877966 0.164775 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.907797 0.0709499 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.863153 0.124655 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.837606 0.0554592 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.897062 0.0418734 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.826871 0.0263827 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.841683 0.0665023 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.69376 -0.0133465 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.740325 -0.0440268 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.721234 0.0272215 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.668775 -0.0631985 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.649684 0.00804971 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.712851 -0.0845947 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.666287 -0.0539145 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.737837 -0.0347427 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.69376 -0.0133465 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.745859 -0.0646815 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.737837 -0.0347427 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.674309 -0.0838533 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.666287 -0.0539145 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.701782 -0.0432853 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.649684 0.00804971 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.721234 0.0272215 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.172546 0.643951 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.281471 0.802608 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.30566 0.824035 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.305221 0.752156 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.241352 0.787796 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.28191 0.874487 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.217602 0.838248 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.257721 0.853061 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.34578 0.838847 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.321591 0.817421 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.345341 0.766968 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.358439 0.594141 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.408291 0.619127 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.337042 0.638217 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.429687 0.57505 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.399007 0.621614 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.379835 0.550064 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.389119 0.547576 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.317871 0.566667 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.172546 0.643951 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.142305 0.674191 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.100996 0.663122 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.153374 0.715501 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.213855 0.655019 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.224924 0.696329 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.244096 0.624779 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.161477 0.602641 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.191718 0.5724 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.120168 0.591572 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0955788 0.852418 1.31582e-16 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.11107 0.922609 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.164775 0.877966 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.135698 0.867231 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0418734 0.897062 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0665023 0.841683 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0263827 0.826871 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0709499 0.907797 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0554592 0.837606 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.124655 0.863153 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0133465 0.69376 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.0646815 0.745859 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0347427 0.737837 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0432853 0.701782 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0272215 0.721234 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.00804971 0.649684 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0838533 0.674309 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0539145 0.666287 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0133465 0.69376 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.0440268 0.740325 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0272215 0.721234 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0845947 0.712851 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0347427 0.737837 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0539145 0.666287 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0631985 0.668775 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.00804971 0.649684 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.281471 0.802608 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.329459 0.858698 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.337088 0.798572 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.280879 0.845371 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.273842 0.862735 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.225263 0.849407 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.225855 0.806645 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.330051 0.815936 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.282063 0.759846 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.33768 0.75581 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.172546 0.643951 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.202787 0.674191 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.244096 0.663122 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.191718 0.715501 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.131237 0.655019 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.120168 0.696329 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.100996 0.624779 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.183615 0.602641 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.153374 0.5724 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.224924 0.591572 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.358439 0.594141 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.428945 0.613592 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.399007 0.621614 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.388377 0.586119 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.337042 0.638217 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.317871 0.566667 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.409774 0.542042 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.379835 0.550064 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.371785 0.0996195 0.544331 RAD 0.166667 
+   txt002 
+ SPHERE CENTER -0.393621 0.220501 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.368601 0.279642 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.321889 0.238665 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.372464 0.281062 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.440333 0.261479 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.444196 0.262898 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.465353 0.202338 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.389758 0.219082 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.414778 0.15994 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.343046 0.178104 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.191247 0.166275 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.130089 0.20793 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.154295 0.172673 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.192135 0.230419 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.167041 0.201532 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.229087 0.224021 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.228199 0.159877 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.129201 0.143787 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.190359 0.102131 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.153407 0.108529 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.31427 0.31427 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.277961 0.367156 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.252306 0.297666 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.31427 0.31427 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.339925 0.383759 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.376234 0.330873 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.376234 0.330873 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.277961 0.367156 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.31427 0.31427 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.252306 0.297666 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.574159 0.153845 0.618405 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.612768 0.202534 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.543919 0.184086 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.554987 0.225396 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.643008 0.172294 0.598245 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.585228 0.195155 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.6044 0.123605 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.631939 0.130984 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.593331 0.0822954 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.56309 0.112536 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.494808 0.247614 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.494287 0.313607 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.452978 0.302539 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.434629 0.269833 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.536117 0.258683 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.476459 0.214908 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.536638 0.19269 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.554467 0.291389 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.554987 0.225396 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.513157 0.28032 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.552323 0.0329639 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.625877 0.0248832 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.584567 0.0138144 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.593331 0.0822954 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.593633 0.0440327 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.561087 0.101445 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.520079 0.0521134 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.584869 -0.0244483 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.511316 -0.0163676 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.54356 -0.0355172 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.451136 0.0058509 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.447081 0.0051487 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.386138 0.0172804 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.439178 0.0688765 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.512079 -0.00628079 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.504176 0.0574471 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.516134 -0.00557859 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.459039 -0.0578769 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.463094 -0.0571747 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.398096 -0.0457452 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.4293 -0.115031 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.424299 -0.178985 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.367336 -0.131634 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.4293 -0.115031 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.486264 -0.162382 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.491265 -0.0984274 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.491265 -0.0984274 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.424299 -0.178985 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.4293 -0.115031 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.367336 -0.131634 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.248762 -0.0483751 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.183785 -0.0599222 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.187119 -0.0172857 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.215921 0.00673113 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.245428 -0.0910116 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.277564 -0.0243582 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.310405 -0.0794645 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.216626 -0.115028 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.281603 -0.103481 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.21996 -0.0723919 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.471405 0.471405 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER -0.508983 0.690426 1.25414e-16 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.484794 0.755941 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.436283 0.7029 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.478434 0.695668 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.557494 0.743468 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.551134 0.683194 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.581682 0.677953 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.515343 0.7507 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.539531 0.685185 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.466832 0.697658 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.335322 0.607487 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.283164 0.659645 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.286452 0.603979 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.33883 0.656357 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.332034 0.663153 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.384191 0.610996 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.279656 0.610775 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.331813 0.558618 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.335322 0.607487 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.313405 0.629404 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.331813 0.558618 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.384191 0.610996 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.316914 0.678274 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.33883 0.656357 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.264535 0.625895 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.286452 0.603979 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.645066 0.554344 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.681385 0.616373 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.649723 0.609912 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.607573 0.617144 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.676727 0.560805 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.602915 0.561576 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.640408 0.498776 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.718878 0.553573 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.682558 0.491544 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.687216 0.547112 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.471405 0.471405 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.501645 0.501645 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.542955 0.490576 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.490576 0.542955 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.430095 0.482473 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.419026 0.523783 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.399854 0.452233 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.482473 0.430095 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.452233 0.399854 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.523783 0.419026 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.607487 0.335322 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.659645 0.283164 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.603979 0.286452 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.656357 0.33883 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.663153 0.332034 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.610996 0.384191 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.610775 0.279656 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.558618 0.331813 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.645066 0.554344 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.668521 0.610229 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.598918 0.585648 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.619787 0.622977 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.714669 0.578925 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.665934 0.591673 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.691213 0.52304 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.6938 0.541596 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.670344 0.48571 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.624197 0.517014 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.607487 0.335322 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.629404 0.313405 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.558618 0.331813 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.610996 0.384191 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.678274 0.316914 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.656357 0.33883 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.625895 0.264535 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.603979 0.286452 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.471405 0.471405 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.441164 0.501645 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.399854 0.490576 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.452233 0.542955 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.512714 0.482473 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.523783 0.523783 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.542955 0.452233 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.460336 0.430095 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.490576 0.399854 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.419026 0.419026 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.643951 -0.172546 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER -0.835815 -0.157543 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.871646 -0.122136 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.799077 -0.135649 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.82339 -0.0854653 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.908384 -0.14403 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.860128 -0.107359 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.872552 -0.179437 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.884071 -0.194213 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.84824 -0.229621 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.811502 -0.207727 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.643951 -0.172546 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.61371 -0.142305 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.5724 -0.153374 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.624779 -0.100996 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.68526 -0.161477 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.696329 -0.120168 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.715501 -0.191718 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.632882 -0.213855 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.663122 -0.244096 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.591572 -0.224924 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.69376 0.0133465 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.674309 0.0838533 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.666287 0.0539145 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.745859 0.0646815 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.737837 0.0347427 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.701782 0.0432853 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.721234 -0.0272215 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.649684 -0.00804971 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.835815 -0.157543 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.899353 -0.119969 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.868703 -0.130205 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.836885 -0.0844101 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.866465 -0.147308 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.803997 -0.111748 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.802927 -0.184881 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.898283 -0.193102 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.834745 -0.230676 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.867633 -0.203337 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.69376 0.0133465 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.668775 0.0631985 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.649684 -0.00804971 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.740325 0.0440268 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.721234 -0.0272215 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.712851 0.0845947 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.737837 0.0347427 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.666287 0.0539145 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.643951 -0.172546 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.674191 -0.142305 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.715501 -0.153374 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.663122 -0.100996 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.602641 -0.161477 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.591572 -0.120168 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.5724 -0.191718 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.655019 -0.213855 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.624779 -0.244096 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.696329 -0.224924 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.786005 -0.343435 1.25414e-16 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.82165 -0.392454 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.753118 -0.370774 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.80984 -0.323622 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.854538 -0.365116 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.842728 -0.296284 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.818893 -0.316097 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.797815 -0.412267 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.76217 -0.363249 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.729282 -0.390587 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.594141 -0.358439 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.542042 -0.409774 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.550064 -0.379835 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.613592 -0.428945 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.621614 -0.399007 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.586119 -0.388377 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.638217 -0.337042 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.566667 -0.317871 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.594141 -0.358439 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.547576 -0.389119 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.566667 -0.317871 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.619127 -0.408291 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.638217 -0.337042 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.57505 -0.429687 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.621614 -0.399007 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.550064 -0.379835 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0996195 -0.371785 0.544331 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.220501 -0.393621 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.279642 -0.368601 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.281062 -0.372464 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.238665 -0.321889 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.219082 -0.389758 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.178104 -0.343046 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.15994 -0.414778 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.261479 -0.440333 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.202338 -0.465353 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.262898 -0.444196 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.31427 -0.31427 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.367156 -0.277961 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.31427 -0.31427 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.297666 -0.252306 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.367156 -0.277961 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.297666 -0.252306 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.31427 -0.31427 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.383759 -0.339925 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.330873 -0.376234 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.330873 -0.376234 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.166275 -0.191247 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.20793 -0.130089 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.230419 -0.192135 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.172673 -0.154295 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.143787 -0.129201 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.108529 -0.153407 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.102131 -0.190359 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.201532 -0.167041 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.159877 -0.228199 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.224021 -0.229087 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0058509 -0.451136 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0051487 -0.447081 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0688765 -0.439178 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0172804 -0.386138 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0578769 -0.459039 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0457452 -0.398096 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0571747 -0.463094 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00628079 -0.512079 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00557859 -0.516134 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0574471 -0.504176 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0483751 -0.248762 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.0599222 -0.183785 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.00673113 -0.215921 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0172857 -0.187119 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.115028 -0.216626 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0723919 -0.21996 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.103481 -0.281603 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0910116 -0.245428 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0794645 -0.310405 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0243582 -0.277564 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.115031 -0.4293 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.178985 -0.424299 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.115031 -0.4293 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.131634 -0.367336 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.178985 -0.424299 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.131634 -0.367336 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.115031 -0.4293 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.162382 -0.486264 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0984274 -0.491265 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0984274 -0.491265 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.153845 -0.574159 0.618405 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.202534 -0.612768 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.225396 -0.554987 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.184086 -0.543919 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.130984 -0.631939 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.112536 -0.56309 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0822954 -0.593331 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.172294 -0.643008 0.598245 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.123605 -0.6044 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.195155 -0.585228 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0329639 -0.552323 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0248832 -0.625877 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0822954 -0.593331 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0138144 -0.584567 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0244483 -0.584869 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0355172 -0.54356 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0163676 -0.511316 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0440327 -0.593633 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0521134 -0.520079 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.101445 -0.561087 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.247614 -0.494808 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.313607 -0.494287 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.269833 -0.434629 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.302539 -0.452978 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.291389 -0.554467 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.28032 -0.513157 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.225396 -0.554987 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.258683 -0.536117 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.19269 -0.536638 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.214908 -0.476459 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.172546 -0.643951 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER -0.157543 -0.835815 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.122136 -0.871646 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0854653 -0.82339 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.135649 -0.799077 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.194213 -0.884071 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.207727 -0.811502 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.229621 -0.84824 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.14403 -0.908384 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.179437 -0.872552 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.107359 -0.860128 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0133465 -0.69376 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0838533 -0.674309 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0539145 -0.666287 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0432853 -0.701782 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00804971 -0.649684 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0272215 -0.721234 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0646815 -0.745859 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0347427 -0.737837 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.172546 -0.643951 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.142305 -0.61371 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.100996 -0.624779 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.153374 -0.5724 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.213855 -0.632882 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.224924 -0.591572 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.244096 -0.663122 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.161477 -0.68526 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.191718 -0.715501 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.120168 -0.696329 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.343435 -0.786005 1.25414e-16 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.392454 -0.82165 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.323622 -0.80984 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.370774 -0.753118 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.412267 -0.797815 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.390587 -0.729282 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.363249 -0.76217 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.365116 -0.854538 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.316097 -0.818893 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.296284 -0.842728 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.358439 -0.594141 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.389119 -0.547576 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.317871 -0.566667 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.429687 -0.57505 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.379835 -0.550064 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.399007 -0.621614 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.408291 -0.619127 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.337042 -0.638217 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.358439 -0.594141 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.409774 -0.542042 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.379835 -0.550064 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.388377 -0.586119 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.317871 -0.566667 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.337042 -0.638217 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.428945 -0.613592 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.399007 -0.621614 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.157543 -0.835815 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.119969 -0.899353 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0844101 -0.836885 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.130205 -0.868703 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.193102 -0.898283 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.203337 -0.867633 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.230676 -0.834745 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.147308 -0.866465 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.184881 -0.802927 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.111748 -0.803997 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.172546 -0.643951 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.202787 -0.61371 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.244096 -0.624779 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.191718 -0.5724 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.131237 -0.632882 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.120168 -0.591572 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.100996 -0.663122 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.183615 -0.68526 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.153374 -0.715501 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.224924 -0.696329 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0133465 -0.69376 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0631985 -0.668775 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00804971 -0.649684 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0845947 -0.712851 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0539145 -0.666287 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0347427 -0.737837 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0440268 -0.740325 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0272215 -0.721234 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.471405 -0.471405 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.690426 -0.508983 2.241e-16 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.755941 -0.484794 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.695668 -0.478434 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.7029 -0.436283 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.7507 -0.515343 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.697658 -0.466832 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.685185 -0.539531 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.743468 -0.557494 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.677953 -0.581682 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.683194 -0.551134 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.607487 -0.335322 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.629404 -0.313405 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.610996 -0.384191 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.558618 -0.331813 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.625895 -0.264535 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.603979 -0.286452 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.678274 -0.316914 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.656357 -0.33883 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.607487 -0.335322 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.659645 -0.283164 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.656357 -0.33883 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.603979 -0.286452 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.610775 -0.279656 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.558618 -0.331813 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.663153 -0.332034 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.610996 -0.384191 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.554344 -0.645066 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.610229 -0.668521 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.622977 -0.619787 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.585648 -0.598918 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.541596 -0.6938 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.517014 -0.624197 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.48571 -0.670344 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.578925 -0.714669 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.52304 -0.691213 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.591673 -0.665934 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.471405 -0.471405 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.501645 -0.441164 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.542955 -0.452233 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.490576 -0.399854 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.430095 -0.460336 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.419026 -0.419026 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.399854 -0.490576 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.482473 -0.512714 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.452233 -0.542955 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.523783 -0.523783 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.335322 -0.607487 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.313405 -0.629404 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.384191 -0.610996 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.331813 -0.558618 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.264535 -0.625895 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.286452 -0.603979 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.316914 -0.678274 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.33883 -0.656357 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.554344 -0.645066 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.616373 -0.681385 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.617144 -0.607573 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.609912 -0.649723 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.553573 -0.718878 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.547112 -0.687216 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.491544 -0.682558 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.560805 -0.676727 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.498776 -0.640408 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.561576 -0.602915 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.335322 -0.607487 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.283164 -0.659645 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.33883 -0.656357 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.286452 -0.603979 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.279656 -0.610775 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.331813 -0.558618 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.332034 -0.663153 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.384191 -0.610996 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.471405 -0.471405 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.441164 -0.441164 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.399854 -0.452233 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.452233 -0.399854 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.512714 -0.460336 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.523783 -0.419026 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.542955 -0.490576 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.460336 -0.512714 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.490576 -0.542955 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.419026 -0.523783 -0.222222 RAD 0.0185185 
+   txt002 
+
+END_SCENE
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/balls.dat b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/balls.dat
new file mode 100644 (file)
index 0000000..0d4bbb1
--- /dev/null
@@ -0,0 +1,14804 @@
+BEGIN_SCENE
+  OUTFILE /dev/null
+  RESOLUTION 512 512 
+  VERBOSE 0
+
+CAMERA
+  ZOOM 1.20711
+ASPECTRATIO 1.0
+  ANTIALIASING 0
+  RAYDEPTH 5
+  CENTER 2.1 1.3 1.7
+  VIEWDIR -0.700389 -0.433574 -0.566982
+  UPDIR -0.482085 -0.298433 0.82373
+
+END_CAMERA 
+
+BACKGROUND 0.078 0.361 0.753 
+
+LIGHT CENTER 4 3 2 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 1 -4 4 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER -3 1 5 RAD 0.002 COLOR 0.5 0.5 0.5
+
+TEXDEF txt001 AMBIENT 0.2  DIFFUSE 0.8  SPECULAR 0  OPACITY 1 
+PHONG PLASTIC 0 PHONG_SIZE 100000
+ COLOR 1 0.75 0.33 
+ TEXFUNC 0 
+
+TRI 
+  V0 12 12 -0.5   V1 -12 -12 -0.5   V2 12 -12 -0.5 
+   txt001 
+TRI 
+  V0 12 12 -0.5   V1 -12 12 -0.5   V2 -12 -12 -0.5 
+   txt001 
+TEXDEF txt002 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+PHONG PLASTIC 0.5 PHONG_SIZE 45.2776
+ COLOR 1 0.9 0.7 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0 0 RAD 0.5 
+   txt002 
+ SPHERE CENTER 0.272166 0.272166 0.544331 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.420314 0.420314 0.618405 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.470715 0.470715 0.598245 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.481689 0.481689 0.57904 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475329 0.45787 0.577669 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.45787 0.475329 0.577669 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.477074 0.494534 0.599616 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.453255 0.488174 0.598245 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4661 0.48356 0.618821 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.494534 0.477074 0.599616 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.48356 0.4661 0.618821 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.488174 0.453255 0.598245 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.461623 0.409245 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.47044 0.419664 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447954 0.425689 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.468014 0.433095 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.484109 0.40322 0.549693 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.481683 0.416651 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475292 0.392801 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.464049 0.395814 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.455233 0.385395 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.441563 0.401839 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.409245 0.461623 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.419664 0.47044 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.433095 0.468014 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.425689 0.447954 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.395814 0.464049 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.401839 0.441563 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.385395 0.455233 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40322 0.484109 0.549693 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.392801 0.475292 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.416651 0.481683 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429405 0.481784 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.441197 0.503434 0.660098 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452601 0.483752 0.650495 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.434161 0.494577 0.63815 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.418001 0.501466 0.668328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410965 0.492609 0.64638 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.406209 0.479816 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436441 0.490641 0.680674 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.42465 0.46899 0.679302 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447846 0.470958 0.671072 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367935 0.472692 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.36376 0.497028 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.383056 0.487812 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.383056 0.487812 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.34864 0.481907 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367935 0.472692 0.593714 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.352815 0.457572 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.34864 0.481907 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.352815 0.457572 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367935 0.472692 0.643096 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379004 0.431383 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.376578 0.444814 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399064 0.438789 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.385395 0.455233 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356518 0.437408 0.687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.365335 0.447826 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.358944 0.423976 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.370187 0.420964 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.372614 0.407532 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.392673 0.414939 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.481784 0.429405 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.503434 0.441197 0.660098 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.494577 0.434161 0.63815 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.483752 0.452601 0.650495 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490641 0.436441 0.680674 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.470958 0.447846 0.671072 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46899 0.42465 0.679302 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.501466 0.418001 0.668328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.479816 0.406209 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.492609 0.410965 0.64638 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.431383 0.379004 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.444814 0.376578 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.455233 0.385395 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.438789 0.399064 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.420964 0.370187 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.414939 0.392673 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.407532 0.372614 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.437408 0.356518 0.687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.423976 0.358944 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447826 0.365335 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472692 0.367935 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.497028 0.36376 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.487812 0.383056 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.487812 0.383056 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.481907 0.34864 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472692 0.367935 0.643096 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.457572 0.352815 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.481907 0.34864 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.457572 0.352815 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472692 0.367935 0.593714 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.461844 0.304709 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.492085 0.33495 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.492085 0.33495 0.348047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.488469 0.313874 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.471009 0.331334 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495701 0.356025 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.474625 0.352409 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495701 0.356025 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.51316 0.338566 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.51316 0.338566 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.509544 0.31749 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.424345 0.305171 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.40568 0.315605 0.356995 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.403931 0.312107 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.419383 0.329161 0.372427 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.426095 0.30867 0.344961 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.439797 0.322225 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.444759 0.298235 0.357307 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410643 0.291616 0.353908 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429307 0.281181 0.366254 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.408893 0.288117 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.435193 0.368397 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.440864 0.389015 0.394032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.457301 0.37895 0.409464 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.451857 0.367697 0.388171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.418755 0.378463 0.390945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429748 0.357145 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.413085 0.357845 0.403291 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4242 0.389715 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.418529 0.369098 0.424584 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.440637 0.37965 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.529584 0.334488 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.546497 0.347572 0.424272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.532117 0.331508 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522481 0.352406 0.421186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.543964 0.350552 0.448652 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.519948 0.355387 0.445566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.52705 0.337468 0.460998 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5536 0.329654 0.439705 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.536686 0.31657 0.45205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.53922 0.313589 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472692 0.367935 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.48474 0.389488 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495668 0.369235 0.46131 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.477004 0.379669 0.448964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.461764 0.388188 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.454027 0.37837 0.457911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.449715 0.366636 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.480429 0.377754 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46838 0.356202 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.491357 0.357501 0.482603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.499343 0.304247 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.518259 0.314219 0.509445 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.519922 0.310678 0.485065 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.504895 0.328108 0.494013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.49768 0.307788 0.521479 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.484316 0.321677 0.506047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.478764 0.297816 0.509133 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.512708 0.290358 0.512531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.493791 0.280387 0.500186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.51437 0.286818 0.488152 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.518736 0.271262 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.539811 0.274878 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.520873 0.290418 0.384149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.533373 0.290264 0.405442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.537674 0.255722 0.402668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.531235 0.271108 0.420874 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.516598 0.252106 0.415013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.525174 0.255876 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.504099 0.25226 0.39372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.506236 0.271416 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.488495 0.241021 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.50716 0.230587 0.472408 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.51153 0.24936 0.456976 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.499694 0.253381 0.478269 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.484125 0.222248 0.475494 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.476659 0.245042 0.481355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46546 0.232683 0.463149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495961 0.218227 0.454201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.477296 0.228661 0.441856 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.500331 0.237 0.438769 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.450996 0.241483 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.455172 0.217147 0.396183 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472226 0.232599 0.40513 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.45115 0.228983 0.417476 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.433942 0.226031 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429921 0.237867 0.408529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429767 0.250367 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.455018 0.229647 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.450842 0.253983 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472072 0.245099 0.383837 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.304709 0.461844 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.33495 0.492085 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.33495 0.492085 0.348047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.331334 0.471009 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.313874 0.488469 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338566 0.51316 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31749 0.509544 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338566 0.51316 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356025 0.495701 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356025 0.495701 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.352409 0.474625 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.368397 0.435193 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.389015 0.440864 0.394032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367697 0.451857 0.388171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37895 0.457301 0.409464 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.389715 0.4242 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37965 0.440637 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369098 0.418529 0.424584 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.378463 0.418755 0.390945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.357845 0.413085 0.403291 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.357145 0.429748 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.305171 0.424345 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.315605 0.40568 0.356995 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.329161 0.419383 0.372427 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.312107 0.403931 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.291616 0.410643 0.353908 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.288117 0.408893 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281181 0.429307 0.366254 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30867 0.426095 0.344961 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298235 0.444759 0.357307 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.322225 0.439797 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271262 0.518736 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.274878 0.539811 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290264 0.533373 0.405442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290418 0.520873 0.384149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.255876 0.525174 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271416 0.506236 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.25226 0.504099 0.39372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.255722 0.537674 0.402668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.252106 0.516598 0.415013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271108 0.531235 0.420874 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241483 0.450996 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.217147 0.455172 0.396183 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228983 0.45115 0.417476 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.232599 0.472226 0.40513 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.229647 0.455018 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.245099 0.472072 0.383837 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.253983 0.450842 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.226031 0.433942 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250367 0.429767 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.237867 0.429921 0.408529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241021 0.488495 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.230587 0.50716 0.472408 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.253381 0.499694 0.478269 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.24936 0.51153 0.456976 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.218227 0.495961 0.454201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.237 0.500331 0.438769 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228661 0.477296 0.441856 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.222248 0.484125 0.475494 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.232683 0.46546 0.463149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.245042 0.476659 0.481355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334488 0.529584 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.347572 0.546497 0.424272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.352406 0.522481 0.421186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.331508 0.532117 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.329654 0.5536 0.439705 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.313589 0.53922 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31657 0.536686 0.45205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.350552 0.543964 0.448652 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337468 0.52705 0.460998 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355387 0.519948 0.445566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.304247 0.499343 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.314219 0.518259 0.509445 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.328108 0.504895 0.494013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.310678 0.519922 0.485065 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290358 0.512708 0.512531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.286818 0.51437 0.488152 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.280387 0.493791 0.500186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307788 0.49768 0.521479 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.297816 0.478764 0.509133 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321677 0.484316 0.506047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367935 0.472692 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.389488 0.48474 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379669 0.477004 0.448964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369235 0.495668 0.46131 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.377754 0.480429 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.357501 0.491357 0.482603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356202 0.46838 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388188 0.461764 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.366636 0.449715 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37837 0.454027 0.457911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.230635 0.38777 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.2506 0.446614 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.264242 0.467193 0.770086 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.272442 0.447086 0.758332 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.253384 0.459832 0.749168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2424 0.46672 0.781591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.231541 0.459359 0.760673 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228758 0.446141 0.781342 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.261459 0.453974 0.790755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247817 0.433396 0.790506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.269659 0.433868 0.779001 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301839 0.407906 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.319874 0.420236 0.72141 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.303021 0.407886 0.708251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.296625 0.428474 0.720288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318692 0.420256 0.746073 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.295442 0.428494 0.744951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.300656 0.407926 0.757577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.325088 0.399668 0.734036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307053 0.387338 0.745541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.308235 0.387318 0.720878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.253236 0.449775 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.263032 0.459076 0.675209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.270029 0.436804 0.683251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247378 0.440021 0.673964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.246239 0.472047 0.687835 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.230585 0.452992 0.68659 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236443 0.462746 0.708504 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.26889 0.468829 0.697123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.259094 0.459528 0.717791 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275887 0.446557 0.705165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179397 0.426478 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.174744 0.447688 0.778193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.197172 0.437457 0.779597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.1895 0.447523 0.758396 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.156968 0.436708 0.765035 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.171724 0.436544 0.745238 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161621 0.415499 0.753281 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.164641 0.426642 0.786236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.169293 0.405432 0.774481 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.187069 0.416412 0.787639 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.182032 0.429639 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.177682 0.45215 0.683315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.190087 0.449636 0.704516 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.200611 0.44299 0.683192 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.169628 0.432153 0.671279 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.192556 0.422992 0.671155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.173978 0.409641 0.680442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159104 0.438799 0.692603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.163454 0.416288 0.701767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.171508 0.436286 0.713804 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159431 0.367634 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.13761 0.368692 0.737623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.158434 0.366998 0.750781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153102 0.387887 0.738744 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.138607 0.369329 0.71296 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.154099 0.388523 0.714081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.160429 0.36827 0.701455 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.14394 0.34844 0.724997 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165761 0.347381 0.713492 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.164764 0.346745 0.738155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.227999 0.384609 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.237348 0.393812 0.824394 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.251829 0.390976 0.804597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.234368 0.408432 0.804721 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.213518 0.387445 0.823273 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.210538 0.402066 0.8036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.204169 0.378242 0.802355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23098 0.369989 0.823149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.221631 0.360786 0.802231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.245461 0.367152 0.803352 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.208034 0.325765 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.209548 0.312342 0.783824 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.229235 0.324887 0.775781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.209827 0.337 0.785069 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.188347 0.31322 0.771198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.188626 0.337878 0.772443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.186834 0.326643 0.750529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.207755 0.301107 0.76191 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.206242 0.31453 0.741241 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.227442 0.313652 0.753867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.279238 0.345901 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.302145 0.344931 0.775717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.297823 0.356827 0.754517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.289691 0.366251 0.775841 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.28356 0.334005 0.787754 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271106 0.355325 0.787878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.260653 0.334975 0.77859 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.291692 0.324581 0.766429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268785 0.325551 0.757266 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.28737 0.336477 0.745229 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.115031 0.4293 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.102505 0.502308 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.110567 0.524146 0.536101 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.126738 0.506465 0.542066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.112687 0.504055 0.521905 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0863343 0.519988 0.538366 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0884544 0.499897 0.524171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0782715 0.49815 0.546597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100385 0.522399 0.558526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0923218 0.500561 0.566757 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.116555 0.504718 0.564491 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.160392 0.474661 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.177777 0.492047 0.579103 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.176681 0.473492 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159222 0.490951 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161488 0.493217 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.142932 0.492121 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.144102 0.475831 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.178947 0.475757 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161561 0.458371 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.177851 0.457202 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.160392 0.474661 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.167697 0.481967 0.484868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161561 0.458371 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.144102 0.475831 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.166528 0.498257 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.142932 0.492121 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159222 0.490951 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183987 0.480797 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.176681 0.473492 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.177851 0.457202 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0571437 0.456947 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0450372 0.477623 0.501329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.055591 0.475469 0.523547 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0696413 0.47788 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0465898 0.4591 0.485076 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.071194 0.459357 0.487134 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0586963 0.438424 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325396 0.45669 0.505236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0446461 0.436013 0.511201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0430934 0.454536 0.527454 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.115031 0.4293 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.10495 0.439381 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0911807 0.435691 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.10864 0.45315 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.128801 0.43299 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13249 0.44676 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.138881 0.42291 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.111341 0.415531 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.121421 0.40545 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0975713 0.411841 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0696698 0.383939 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.052284 0.366554 0.509559 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0708393 0.36765 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0533799 0.385109 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0511144 0.382844 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0522103 0.401399 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0685002 0.400229 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0685739 0.365384 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0859596 0.38277 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0871292 0.36648 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0571437 0.456947 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0493251 0.475575 0.595564 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0725262 0.467381 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.06557 0.479825 0.577461 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0339426 0.465141 0.57931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0501875 0.46939 0.561208 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0417612 0.446512 0.565115 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0408988 0.452697 0.599471 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0487174 0.434069 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0640999 0.444504 0.601529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0696698 0.383939 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0623642 0.376634 0.603794 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0859596 0.38277 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0685002 0.400229 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0460743 0.377803 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0522103 0.401399 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0533799 0.385109 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0635337 0.360344 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0708393 0.36765 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0871292 0.36648 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.115031 0.4293 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.125111 0.439381 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.138881 0.435691 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.121421 0.45315 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.101261 0.43299 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0975713 0.44676 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0911807 0.42291 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.11872 0.415531 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.10864 0.40545 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13249 0.411841 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.082487 0.239622 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0438957 0.258053 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0426858 0.273525 0.735128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.064638 0.265928 0.726759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0510334 0.281546 0.713318 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0219434 0.26565 0.724292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.030291 0.273671 0.702483 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0231533 0.250178 0.705088 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0355481 0.250032 0.737733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.036758 0.23456 0.718528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0575003 0.242434 0.729364 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.117687 0.252557 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.135677 0.265544 0.730157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.138361 0.25778 0.706872 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.12224 0.275732 0.71212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.115003 0.26032 0.742607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.101567 0.270508 0.72457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.097014 0.247334 0.731771 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.131123 0.242369 0.737359 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.113134 0.229382 0.726523 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.133808 0.234605 0.714074 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0863845 0.308551 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0971427 0.330622 0.67968 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.109956 0.310023 0.675083 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.091905 0.317013 0.659755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0735708 0.329151 0.686881 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0683331 0.315541 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0628126 0.30708 0.689486 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0916222 0.322161 0.702209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.080864 0.30009 0.704814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.104436 0.301561 0.697613 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00869528 0.245118 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0110117 0.257416 0.660413 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00823377 0.253319 0.675329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0102865 0.269325 0.656641 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0105502 0.249215 0.637128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.010748 0.261124 0.633356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00915679 0.236916 0.628759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0126029 0.233209 0.655816 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00710408 0.22091 0.647447 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00664257 0.229111 0.670732 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0511841 0.295616 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0555846 0.315856 0.604965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0705987 0.309941 0.623653 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0705297 0.296292 0.603077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.03617 0.301531 0.599717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0511152 0.281968 0.597829 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0317696 0.281291 0.613157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.036239 0.31518 0.620293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0318385 0.29494 0.633733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.051253 0.309265 0.638981 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0472866 0.226687 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.025169 0.224935 0.580727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0281502 0.217281 0.604012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0288111 0.241399 0.598764 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0443054 0.234341 0.568278 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0479475 0.250805 0.586315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.066423 0.236092 0.579113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0436445 0.210223 0.573526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0657621 0.211974 0.584361 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0466257 0.202569 0.596811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0399982 0.189123 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0335228 0.179527 0.71089 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0567332 0.187058 0.707118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0385291 0.203632 0.709006 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0167878 0.181593 0.692853 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.021794 0.205698 0.690969 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0232631 0.191189 0.671044 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0349919 0.165018 0.690965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0414672 0.174615 0.669156 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0582023 0.172549 0.687193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0785895 0.170692 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0867911 0.147549 0.631205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.101845 0.166573 0.635801 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.083121 0.161663 0.65113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0635354 0.151669 0.624003 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0598652 0.165782 0.643928 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0553337 0.174812 0.621398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0822597 0.156579 0.608675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.074058 0.179722 0.60607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0973138 0.175603 0.613272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.11379 0.183628 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.133336 0.176775 0.705919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.136161 0.192663 0.687231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.124499 0.199753 0.707807 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.110965 0.167739 0.711167 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.102127 0.190718 0.713055 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0914184 0.174592 0.697727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.122627 0.160649 0.690591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.103081 0.167502 0.677151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.125452 0.176537 0.671903 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.38777 0.230635 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.446614 0.2506 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.467193 0.264242 0.770086 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.459832 0.253384 0.749168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447086 0.272442 0.758332 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.453974 0.261459 0.790755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.433868 0.269659 0.779001 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.433396 0.247817 0.790506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46672 0.2424 0.781591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.446141 0.228758 0.781342 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.459359 0.231541 0.760673 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.449775 0.253236 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.459076 0.263032 0.675209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.440021 0.247378 0.673964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436804 0.270029 0.683251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.468829 0.26889 0.697123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.446557 0.275887 0.705165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.459528 0.259094 0.717791 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472047 0.246239 0.687835 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.462746 0.236443 0.708504 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452992 0.230585 0.68659 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.407906 0.301839 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.420236 0.319874 0.72141 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.428474 0.296625 0.720288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.407886 0.303021 0.708251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399668 0.325088 0.734036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387318 0.308235 0.720878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387338 0.307053 0.745541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.420256 0.318692 0.746073 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.407926 0.300656 0.757577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.428494 0.295442 0.744951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.384609 0.227999 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.393812 0.237348 0.824394 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.408432 0.234368 0.804721 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.390976 0.251829 0.804597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369989 0.23098 0.823149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367152 0.245461 0.803352 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.360786 0.221631 0.802231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387445 0.213518 0.823273 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.378242 0.204169 0.802355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.402066 0.210538 0.8036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345901 0.279238 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.344931 0.302145 0.775717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.366251 0.289691 0.775841 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356827 0.297823 0.754517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324581 0.291692 0.766429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.336477 0.28737 0.745229 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.325551 0.268785 0.757266 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334005 0.28356 0.787754 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334975 0.260653 0.77859 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355325 0.271106 0.787878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.325765 0.208034 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.312342 0.209548 0.783824 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337 0.209827 0.785069 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324887 0.229235 0.775781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301107 0.207755 0.76191 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.313652 0.227442 0.753867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31453 0.206242 0.741241 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31322 0.188347 0.771198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.326643 0.186834 0.750529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337878 0.188626 0.772443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.426478 0.179397 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.447688 0.174744 0.778193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447523 0.1895 0.758396 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.437457 0.197172 0.779597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.426642 0.164641 0.786236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.416412 0.187069 0.787639 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.405432 0.169293 0.774481 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436708 0.156968 0.765035 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.415499 0.161621 0.753281 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436544 0.171724 0.745238 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367634 0.159431 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.368692 0.13761 0.737623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387887 0.153102 0.738744 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.366998 0.158434 0.750781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.34844 0.14394 0.724997 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.346745 0.164764 0.738155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.347381 0.165761 0.713492 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369329 0.138607 0.71296 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.36827 0.160429 0.701455 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388523 0.154099 0.714081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429639 0.182032 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.45215 0.177682 0.683315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.44299 0.200611 0.683192 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.449636 0.190087 0.704516 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.438799 0.159104 0.692603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436286 0.171508 0.713804 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.416288 0.163454 0.701767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.432153 0.169628 0.671279 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.409641 0.173978 0.680442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.422992 0.192556 0.671155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.239622 0.082487 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.258053 0.0438957 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.273525 0.0426858 0.735128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281546 0.0510334 0.713318 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.265928 0.064638 0.726759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250032 0.0355481 0.737733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.242434 0.0575003 0.729364 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23456 0.036758 0.718528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.26565 0.0219434 0.724292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250178 0.0231533 0.705088 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273671 0.030291 0.702483 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.308551 0.0863845 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.330622 0.0971427 0.67968 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317013 0.091905 0.659755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.310023 0.109956 0.675083 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.322161 0.0916222 0.702209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301561 0.104436 0.697613 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30009 0.080864 0.704814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.329151 0.0735708 0.686881 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30708 0.0628126 0.689486 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.315541 0.0683331 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.252557 0.117687 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.265544 0.135677 0.730157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275732 0.12224 0.71212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.25778 0.138361 0.706872 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.242369 0.131123 0.737359 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.234605 0.133808 0.714074 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.229382 0.113134 0.726523 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.26032 0.115003 0.742607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247334 0.097014 0.731771 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.270508 0.101567 0.72457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.189123 0.0399982 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.179527 0.0335228 0.71089 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.203632 0.0385291 0.709006 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.187058 0.0567332 0.707118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165018 0.0349919 0.690965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172549 0.0582023 0.687193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.174615 0.0414672 0.669156 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.181593 0.0167878 0.692853 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191189 0.0232631 0.671044 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.205698 0.021794 0.690969 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183628 0.11379 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.176775 0.133336 0.705919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.199753 0.124499 0.707807 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.192663 0.136161 0.687231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.160649 0.122627 0.690591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.176537 0.125452 0.671903 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167502 0.103081 0.677151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167739 0.110965 0.711167 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.174592 0.0914184 0.697727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.190718 0.102127 0.713055 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.170692 0.0785895 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.147549 0.0867911 0.631205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161663 0.083121 0.65113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.166573 0.101845 0.635801 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.156579 0.0822597 0.608675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.175603 0.0973138 0.613272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179722 0.074058 0.60607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.151669 0.0635354 0.624003 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.174812 0.0553337 0.621398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165782 0.0598652 0.643928 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.245118 0.00869528 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.257416 -0.0110117 0.660413 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.269325 0.0102865 0.656641 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.253319 0.00823377 0.675329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.233209 -0.0126029 0.655816 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.229111 0.00664257 0.670732 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.22091 0.00710408 0.647447 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.249215 -0.0105502 0.637128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236916 0.00915679 0.628759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.261124 0.010748 0.633356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.226687 0.0472866 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.224935 0.025169 0.580727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241399 0.0288111 0.598764 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.217281 0.0281502 0.604012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.210223 0.0436445 0.573526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.202569 0.0466257 0.596811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.211974 0.0657621 0.584361 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.234341 0.0443054 0.568278 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236092 0.066423 0.579113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250805 0.0479475 0.586315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.295616 0.0511841 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.315856 0.0555846 0.604965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.296292 0.0705297 0.603077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.309941 0.0705987 0.623653 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31518 0.036239 0.620293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.309265 0.051253 0.638981 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29494 0.0318385 0.633733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301531 0.03617 0.599717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281291 0.0317696 0.613157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281968 0.0511152 0.597829 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4293 0.115031 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.502308 0.102505 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.524146 0.110567 0.536101 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.504055 0.112687 0.521905 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.506465 0.126738 0.542066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522399 0.100385 0.558526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.504718 0.116555 0.564491 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.500561 0.0923218 0.566757 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.519988 0.0863343 0.538366 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.49815 0.0782715 0.546597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.499897 0.0884544 0.524171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.474661 0.160392 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.481967 0.167697 0.484868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475831 0.144102 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.458371 0.161561 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.480797 0.183987 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.457202 0.177851 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.473492 0.176681 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.498257 0.166528 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490951 0.159222 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.492121 0.142932 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.474661 0.160392 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.492047 0.177777 0.579103 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490951 0.159222 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.473492 0.176681 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475757 0.178947 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.457202 0.177851 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.458371 0.161561 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.493217 0.161488 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475831 0.144102 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.492121 0.142932 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.456947 0.0571437 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.475575 0.0493251 0.595564 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.479825 0.06557 0.577461 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.467381 0.0725262 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452697 0.0408988 0.599471 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.444504 0.0640999 0.601529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.434069 0.0487174 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.465141 0.0339426 0.57931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.446512 0.0417612 0.565115 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46939 0.0501875 0.561208 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4293 0.115031 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.439381 0.125111 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.45315 0.121421 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.435691 0.138881 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.415531 0.11872 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.411841 0.13249 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40545 0.10864 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.43299 0.101261 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.42291 0.0911807 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.44676 0.0975713 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.383939 0.0696698 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.376634 0.0623642 0.603794 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.400229 0.0685002 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.38277 0.0859596 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.360344 0.0635337 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.36648 0.0871292 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.36765 0.0708393 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.377803 0.0460743 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.385109 0.0533799 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.401399 0.0522103 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.456947 0.0571437 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.477623 0.0450372 0.501329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.47788 0.0696413 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475469 0.055591 0.523547 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.45669 0.0325396 0.505236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.454536 0.0430934 0.527454 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436013 0.0446461 0.511201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4591 0.0465898 0.485076 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.438424 0.0586963 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.459357 0.071194 0.487134 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.383939 0.0696698 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.366554 0.052284 0.509559 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.385109 0.0533799 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.36765 0.0708393 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.365384 0.0685739 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.36648 0.0871292 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.38277 0.0859596 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.382844 0.0511144 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.400229 0.0685002 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.401399 0.0522103 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4293 0.115031 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.41922 0.125111 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40545 0.121421 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.42291 0.138881 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.44307 0.11872 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.44676 0.13249 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.45315 0.10864 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.425611 0.101261 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.435691 0.0911807 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.411841 0.0975713 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.643951 0.172546 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.802608 0.281471 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.824035 0.30566 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.822021 0.302088 -0.202114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.821938 0.282758 -0.186751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.802598 0.298094 -0.187402 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.824119 0.32499 -0.193128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.804695 0.320997 -0.178416 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.826132 0.328563 -0.16878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.843459 0.309654 -0.192477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.845472 0.313227 -0.168128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.843375 0.290324 -0.177114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.787796 0.241352 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.785699 0.218449 -0.180578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.802677 0.22345 -0.163362 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.778718 0.223304 -0.157397 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.770818 0.236351 -0.188808 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.763837 0.241205 -0.165627 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.772915 0.259253 -0.179823 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.794777 0.236497 -0.194773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.796874 0.2594 -0.185788 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.811756 0.241498 -0.177557 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.752156 0.305221 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.741263 0.325175 -0.169507 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.747715 0.32493 -0.145675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.765112 0.325981 -0.163165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.745704 0.305466 -0.183703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.769553 0.306272 -0.17736 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.756597 0.285513 -0.174066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.728307 0.304415 -0.166213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.7392 0.284462 -0.156576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.734759 0.304171 -0.142381 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.838847 0.34578 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.851488 0.360404 -0.132647 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.853509 0.335865 -0.1345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.832518 0.347059 -0.141116 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.836826 0.370319 -0.115431 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.817857 0.356973 -0.1239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.824185 0.355695 -0.100068 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.857816 0.359125 -0.108814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.845176 0.344501 -0.0934517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.859838 0.334587 -0.110668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.766968 0.345341 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.768944 0.369945 -0.10004 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.788341 0.356172 -0.093424 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.780624 0.356171 -0.116879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.747572 0.359113 -0.106005 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759252 0.34534 -0.122844 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.745596 0.33451 -0.105354 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.755289 0.359115 -0.0825505 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.753313 0.334511 -0.0818993 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.774685 0.345342 -0.0759343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.817421 0.321591 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.83071 0.340361 -0.0416443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.840365 0.325527 -0.0588603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.822249 0.341208 -0.0648253 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.807766 0.336425 -0.0334138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.799305 0.337272 -0.0565949 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.794477 0.317654 -0.0423994 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.825882 0.320744 -0.0274488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.812593 0.301973 -0.0364345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.835537 0.30591 -0.0446649 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.874487 0.28191 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.891539 0.292033 -0.143718 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.868678 0.28812 -0.152187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.872763 0.305711 -0.135349 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.897348 0.285824 -0.120537 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.878572 0.299501 -0.112168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.880296 0.275701 -0.105825 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.893263 0.268233 -0.137375 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.876212 0.25811 -0.122663 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.870402 0.264319 -0.145845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.853061 0.257721 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.87538 0.26204 -0.0527151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.87108 0.266856 -0.0765474 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.860805 0.280934 -0.0590577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.857361 0.252905 -0.0385197 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.842785 0.271799 -0.0448623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.835041 0.248586 -0.0481565 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.867636 0.238827 -0.0560094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.845317 0.234508 -0.0656463 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.863337 0.243643 -0.0798417 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.838248 0.217602 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.860225 0.206363 -0.122182 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.858689 0.230102 -0.128798 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.854636 0.223536 -0.105343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.839784 0.193863 -0.116217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.834196 0.211035 -0.0993785 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.817808 0.205101 -0.116868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.843837 0.200429 -0.139672 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.821861 0.211667 -0.140323 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.842301 0.224168 -0.146288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.643951 0.172546 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.61371 0.202787 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.61556 0.221097 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.621702 0.225035 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.635958 0.210779 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607567 0.198849 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627965 0.188531 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605717 0.180539 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.593312 0.213105 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.591462 0.194794 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.599454 0.217042 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5724 0.191718 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.556122 0.208861 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.575596 0.203643 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.578791 0.215568 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.552927 0.196936 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.575596 0.203643 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569205 0.179793 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.549732 0.185011 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.56601 0.167868 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569205 0.179793 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624779 0.244096 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.631486 0.266765 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.648629 0.250487 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.636704 0.247291 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607636 0.260374 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.612854 0.240901 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.600929 0.237705 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.619561 0.26357 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.612854 0.240901 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.636704 0.247291 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.68526 0.183615 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.684921 0.190903 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665787 0.178397 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669989 0.201661 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.704395 0.196121 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.689462 0.206879 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.704733 0.188833 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.700193 0.172858 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.700531 0.165569 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.681058 0.160351 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.696329 0.224924 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.710584 0.23918 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.705059 0.216195 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.687599 0.233654 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.701855 0.24791 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.678869 0.242384 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.687599 0.233654 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.719314 0.23045 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.705059 0.216195 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.713788 0.207465 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.715501 0.153374 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.738169 0.160081 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.718696 0.165299 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721891 0.177224 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.734974 0.148156 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.718696 0.165299 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.712305 0.141449 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.731779 0.136231 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.70911 0.129524 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.712305 0.141449 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.632882 0.131237 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.634145 0.108412 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.650927 0.115965 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627664 0.111763 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616099 0.123683 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.609618 0.127034 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.614836 0.146508 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639363 0.127886 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.6381 0.15071 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.656145 0.135439 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663122 0.100996 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.680265 0.0847178 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.686972 0.107387 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675047 0.104191 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.656415 0.0783272 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.651197 0.0978007 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639272 0.0946054 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.66834 0.0815225 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.651197 0.0978007 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675047 0.104191 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.591572 0.120168 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.577317 0.105912 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.600302 0.111438 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.582843 0.128897 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.568587 0.114642 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.574113 0.137627 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.582843 0.128897 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.586046 0.0971825 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.600302 0.111438 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.609032 0.102708 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.594141 0.358439 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.619127 0.408291 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.625955 0.411883 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.630791 0.390369 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607547 0.396287 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.61429 0.429805 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.595882 0.414208 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607462 0.426212 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.637535 0.423887 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.630706 0.420295 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.642371 0.402373 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.68332 0.389713 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.660156 0.398265 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.68332 0.389713 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.660156 0.398265 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.688854 0.369058 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671225 0.356956 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671225 0.356956 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.638217 0.337042 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.652948 0.344865 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.632683 0.357697 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.651954 0.357326 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.658482 0.324211 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.657489 0.336672 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.643752 0.316388 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639211 0.324581 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624481 0.316758 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.618946 0.337413 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.547576 0.389119 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.541008 0.410169 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.548718 0.410472 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.564748 0.405866 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539866 0.388816 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.563607 0.384513 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.546435 0.367766 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523836 0.393422 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.530405 0.372372 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.531546 0.393725 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.566667 0.317871 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.555534 0.296626 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.572202 0.297216 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.550163 0.307914 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.549999 0.31728 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.544629 0.328569 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.561133 0.338525 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.572037 0.306582 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.583171 0.327827 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.588706 0.307172 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.501272 0.340934 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.517056 0.359921 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.501272 0.340934 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.517056 0.359921 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.506807 0.320279 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.528125 0.318612 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.528125 0.318612 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.57505 0.429687 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.58161 0.452905 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5989 0.436077 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.586467 0.434777 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.55776 0.446515 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.562617 0.428387 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5512 0.423296 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570193 0.447815 -0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.563633 0.424596 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.587483 0.430987 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.550064 0.379835 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.547099 0.396248 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569716 0.388263 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.557504 0.403175 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.527447 0.387819 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.537852 0.394747 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.530412 0.371406 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539659 0.372907 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542624 0.356494 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.562276 0.364922 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.621614 0.399007 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.637209 0.41723 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.642848 0.401533 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624734 0.418027 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.615976 0.414703 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.603501 0.4155 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.600381 0.39648 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.634089 0.39821 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.618494 0.379986 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639728 0.382513 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.802608 0.281471 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.858698 0.329459 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.872345 0.34259 0.0890951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.86421 0.32016 0.0827387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.848329 0.338969 0.0846485 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.866833 0.351888 0.111295 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.842817 0.348268 0.106848 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.853186 0.338757 0.127138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.882715 0.333079 0.109385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.869068 0.319948 0.125228 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.87458 0.310649 0.103028 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.845371 0.280879 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.849036 0.291048 0.0284303 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.826067 0.287867 0.0369125 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.840755 0.304882 0.0471312 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.868341 0.28406 0.0421477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.86006 0.297894 0.0608487 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.864676 0.273891 0.0643473 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.853652 0.267046 0.0319289 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.849987 0.256877 0.0541285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.830683 0.263865 0.0404111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.798572 0.337088 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.808673 0.346884 0.0420622 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.82298 0.335792 0.0588533 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.807762 0.322361 0.044793 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.784265 0.34818 0.0455609 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.783355 0.323657 0.0482916 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.774164 0.338384 0.0658506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.799483 0.361611 0.0596212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.789382 0.351815 0.079911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.81379 0.350519 0.0764123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.815936 0.330051 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.828769 0.350165 0.171776 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.838905 0.333232 0.156937 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.820583 0.347547 0.148628 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.805799 0.346984 0.180258 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.797614 0.344366 0.157111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.792966 0.32687 0.173902 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.824121 0.332668 0.188567 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.811288 0.312554 0.182211 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.834258 0.315735 0.173728 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.75581 0.33768 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.753851 0.362219 0.124743 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.774086 0.350765 0.133052 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76987 0.352319 0.108773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.735575 0.349134 0.114524 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.751594 0.339233 0.0985541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.737534 0.324595 0.112614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.739791 0.347581 0.138803 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.74175 0.323042 0.136894 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.760026 0.336127 0.147112 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759846 0.282063 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.756464 0.29233 0.193792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.779336 0.288514 0.18531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.765125 0.305929 0.175091 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.736973 0.285879 0.180075 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.745634 0.299478 0.161374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.740355 0.275612 0.157875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.751185 0.268464 0.190293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.754567 0.258198 0.168094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.774058 0.264649 0.181811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.862735 0.273842 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.885497 0.282313 0.158144 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.876946 0.281455 0.134996 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.867718 0.29787 0.150967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.871286 0.274699 0.176845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.853506 0.290257 0.169668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.848523 0.266228 0.172398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.880514 0.258284 0.160875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.857752 0.249813 0.156428 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.871963 0.257427 0.137727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.806645 0.225855 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.818054 0.21762 0.18016 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.83061 0.230661 0.163369 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.813612 0.241754 0.177429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.794089 0.212813 0.176661 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.789647 0.236948 0.173931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.78268 0.221048 0.156372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.811087 0.20172 0.162601 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.799677 0.209955 0.142311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.823642 0.214761 0.14581 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.849407 0.225263 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.873186 0.21889 0.0974792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.865588 0.240865 0.0891702 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.866351 0.236437 0.113449 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.857005 0.203288 0.107698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.850171 0.220835 0.123668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.833227 0.20966 0.109608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.856242 0.207715 0.0834188 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.832464 0.214088 0.0853287 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.848644 0.22969 0.0751099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.594141 0.358439 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.613592 0.428945 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.626191 0.448155 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.634643 0.42519 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.614455 0.43276 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.60514 0.45191 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.593404 0.436515 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.592541 0.4327 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.625328 0.44434 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.612729 0.42513 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.63378 0.421375 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.68332 0.389713 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.660156 0.398265 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.68332 0.389713 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.660156 0.398265 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.688854 0.369058 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671225 0.356956 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671225 0.356956 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.621614 0.399007 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.625435 0.399844 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627149 0.378352 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.60511 0.38905 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.619901 0.420499 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.599576 0.409705 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.61608 0.419661 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.641939 0.409801 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.638118 0.408963 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.643653 0.388308 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542042 0.409774 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.53788 0.433888 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.558395 0.423551 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.55574 0.426423 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.521526 0.42011 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539387 0.412646 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.525689 0.395996 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.524182 0.417238 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.528344 0.393124 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.544697 0.406901 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.550064 0.379835 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.540802 0.399304 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.54453 0.400489 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.563801 0.400119 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.546337 0.37865 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569335 0.379464 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555599 0.35918 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.527065 0.37902 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.536327 0.359551 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.530793 0.380205 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.501272 0.340934 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.517056 0.359921 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.501272 0.340934 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.517056 0.359921 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.506807 0.320279 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.528125 0.318612 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.528125 0.318612 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.586119 0.388377 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.594185 0.405974 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.609969 0.394768 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.593017 0.410332 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570335 0.399584 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569167 0.403942 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.562269 0.381987 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.587286 0.384019 0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.57922 0.366422 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.60307 0.372813 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.566667 0.317871 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.567308 0.314012 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.587901 0.320398 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569787 0.336891 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.546074 0.311485 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.548554 0.334364 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.545434 0.315344 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.564188 0.294991 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.563547 0.29885 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.584781 0.301377 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.638217 0.337042 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.659244 0.341809 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.65787 0.345471 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.645657 0.360383 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639592 0.33338 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626005 0.351955 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.618565 0.328614 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.651804 0.318468 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.630777 0.313702 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.65043 0.32213 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.643951 0.172546 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.674191 0.202787 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.690652 0.219248 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.695267 0.206403 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.677807 0.223862 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669577 0.215632 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.656732 0.220246 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.653116 0.199171 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.687036 0.198172 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.670575 0.181711 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.691651 0.185327 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.715501 0.191718 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.733129 0.203821 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.715501 0.191718 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.709966 0.212373 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.733129 0.203821 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.709966 0.212373 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.715501 0.191718 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.738664 0.183166 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721035 0.171063 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721035 0.171063 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663122 0.244096 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.675225 0.261725 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.683777 0.238562 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663122 0.244096 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.65457 0.267259 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.642468 0.249631 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.642468 0.249631 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675225 0.261725 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663122 0.244096 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.683777 0.238562 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.602641 0.183615 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.600215 0.197046 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.622701 0.191021 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.609032 0.207465 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.580155 0.18964 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.588972 0.200059 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.582581 0.176209 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.593824 0.173196 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.596251 0.159765 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.61631 0.167171 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.591572 0.224924 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.587397 0.24926 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.606693 0.240045 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.606693 0.240045 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.572277 0.23414 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.591572 0.224924 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.576452 0.209804 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.572277 0.23414 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.576452 0.209804 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.591572 0.224924 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5724 0.153374 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.551082 0.155041 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5724 0.153374 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.566866 0.174029 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.551082 0.155041 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.566866 0.174029 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5724 0.153374 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.556617 0.134387 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.577935 0.13272 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.577935 0.13272 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.655019 0.131237 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.668451 0.12881 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.678869 0.137627 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.662426 0.151296 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644601 0.12242 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.638576 0.144906 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.631169 0.124846 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.661044 0.108751 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.647613 0.111177 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671463 0.117567 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624779 0.100996 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.626446 0.0796777 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.645433 0.0954616 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624779 0.100996 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605791 0.0852121 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.604124 0.10653 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.604124 0.10653 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626446 0.0796777 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624779 0.100996 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.645433 0.0954616 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.696329 0.120168 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.720665 0.115992 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.711449 0.135288 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.711449 0.135288 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.705544 0.100872 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.696329 0.120168 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.681209 0.105047 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.705544 0.100872 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.681209 0.105047 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.696329 0.120168 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.852418 0.0955788 1.89979e-16 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.922609 0.11107 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.937225 0.122151 -0.0344251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.916553 0.11086 -0.0418311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.915202 0.131874 -0.0289382 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.943281 0.12236 -0.0104889 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.921258 0.132084 -0.00500196 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.928665 0.111279 0.00604126 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.944632 0.101346 -0.0233819 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.930016 0.0902645 -0.00685171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.92396 0.090055 -0.0307879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.867231 0.135698 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.873196 0.134634 -0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.882112 0.117797 -0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.858152 0.11765 -0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.858315 0.152536 -0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.843271 0.135552 -0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.852349 0.1536 -0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.882275 0.152682 -0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.876309 0.153747 -0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.89119 0.135845 -0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.877966 0.164775 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.890926 0.182656 -0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.897331 0.159019 -0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.876622 0.167676 -0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.871561 0.188412 0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.857256 0.173431 -0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.8586 0.17053 0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.89227 0.179755 0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.87931 0.161874 0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.898675 0.156118 0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.907797 0.0709499 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.930963 0.0752104 0.0499923 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.924191 0.0806562 0.0268805 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.915684 0.0941344 0.0457385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.914568 0.0655041 0.065698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.899289 0.0844281 0.0614442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.891402 0.0612436 0.058292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.923076 0.0520258 0.0468401 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.89991 0.0477654 0.0394341 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.916304 0.0574717 0.0237283 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.863153 0.124655 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.875744 0.141535 0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.88655 0.129819 0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.868763 0.146389 0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.852347 0.136371 0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.845366 0.141225 0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.839756 0.119492 0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.870135 0.119801 0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.857544 0.102922 0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.880941 0.108085 0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.837606 0.0554592 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.842832 0.0523913 0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.86055 0.0593957 0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.842434 0.0750766 0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.819888 0.0484547 0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.81949 0.07114 0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.814662 0.0515226 0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.838004 0.0327739 0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.832778 0.0358417 0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.855722 0.0397783 0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.897062 0.0418734 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.920407 0.0359958 -0.0301783 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.912106 0.0588574 -0.0344321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.915603 0.0511067 -0.0112511 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.905363 0.0190117 -0.0204376 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.900559 0.0341227 -0.00151032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.882018 0.0248894 -0.0149506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.901866 0.0267625 -0.0436186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.878521 0.0326401 -0.0381316 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.893565 0.0496241 -0.0478724 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.826871 0.0263827 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.825102 0.00436945 0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.84533 0.018173 0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.823964 0.025051 0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.806642 0.0125791 -0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.805505 0.0332607 0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.808411 0.0345923 -0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.828008 0.00570109 -0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.829777 0.0277143 -0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.848237 0.0195047 -0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.841683 0.0665023 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.840284 0.0454909 -0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.856111 0.0473735 -0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.831823 0.0463379 -0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.825856 0.0646197 -0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.817395 0.0654667 -0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.827255 0.0856311 -0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.850144 0.0656554 -0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.851543 0.0866667 -0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.865971 0.0675379 -0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.69376 -0.0133465 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.740325 -0.0440268 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.762259 -0.0417568 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759495 -0.0345526 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.748937 -0.0216407 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.743089 -0.051231 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.729767 -0.0311149 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721155 -0.053501 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.753646 -0.0641429 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.731712 -0.0664129 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.750882 -0.0569387 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.782939 0.0179281 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759776 0.02648 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.782939 0.0179281 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759776 0.02648 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.788473 -0.00272662 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.770845 -0.0148294 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.770845 -0.0148294 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721234 0.0272215 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.736829 0.0454452 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.742467 0.0297485 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.724354 0.046242 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.715595 0.0429182 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.70312 0.043715 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.7 0.0246945 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.733709 0.0264247 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.718114 0.00820099 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.739347 0.010728 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.668775 -0.0631985 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.669983 -0.0708196 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.690113 -0.0618185 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671462 -0.0467378 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.648644 -0.0721997 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.650123 -0.0481178 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.647436 -0.0645786 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.667296 -0.0872804 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.666087 -0.0796593 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.687426 -0.0782793 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.649684 0.00804971 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.646718 0.0244627 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669336 0.016478 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.657124 0.0313903 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627066 0.0160343 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.637471 0.022962 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.630031 -0.000378614 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639278 0.00112207 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.642244 -0.0152909 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.661896 -0.00686255 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.600892 -0.0308513 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616676 -0.0118635 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.600892 -0.0308513 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616676 -0.0118635 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.606426 -0.051506 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627745 -0.053173 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627745 -0.053173 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.712851 -0.0845947 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.730141 -0.101422 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.736701 -0.0782041 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.725284 -0.0832945 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.706291 -0.107813 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.701434 -0.0896851 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.689001 -0.0909853 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.717709 -0.102723 0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.700418 -0.0858949 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.724268 -0.0795043 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.666287 -0.0539145 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.655153 -0.0751594 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671821 -0.0745692 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.649783 -0.0638711 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.649619 -0.0545047 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644249 -0.0432164 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.660752 -0.0332597 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671657 -0.0652028 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.682791 -0.0439578 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.688325 -0.0646126 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.737837 -0.0347427 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.752567 -0.0269197 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.732303 -0.014088 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.751574 -0.0144587 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.758102 -0.0475745 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.757108 -0.0351134 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.743371 -0.0553974 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.73883 -0.0472037 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.7241 -0.0550267 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.718566 -0.0343719 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.69376 -0.0133465 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.745859 -0.0646815 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.770032 -0.0684873 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759394 -0.0481266 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.762305 -0.0507391 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.756497 -0.0850422 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.74877 -0.067294 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.732325 -0.0812364 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.753586 -0.0824297 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.729413 -0.0786239 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.742948 -0.062069 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.782939 0.0179281 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759776 0.02648 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.782939 0.0179281 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759776 0.02648 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.788473 -0.00272662 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.770845 -0.0148294 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.770845 -0.0148294 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.737837 -0.0347427 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.758864 -0.0299763 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.757489 -0.0263144 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.745277 -0.0114021 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.739212 -0.0384047 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.725625 -0.0198304 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.718185 -0.043171 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.751424 -0.0533169 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.730397 -0.0580833 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.750049 -0.0496549 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674309 -0.0838533 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.675276 -0.106805 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.694308 -0.091423 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.673094 -0.0875713 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.655278 -0.0992356 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.653095 -0.0800016 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.65431 -0.0762835 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.676491 -0.103087 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675524 -0.0801352 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.695522 -0.0877049 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.666287 -0.0539145 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.666927 -0.0577732 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.68752 -0.0513875 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669407 -0.034894 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.645694 -0.0603001 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.648173 -0.0374209 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.645053 -0.0564414 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663807 -0.0767937 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663167 -0.072935 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.6844 -0.070408 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.600892 -0.0308513 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616676 -0.0118635 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.600892 -0.0308513 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616676 -0.0118635 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.606426 -0.051506 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627745 -0.053173 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627745 -0.053173 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.701782 -0.0432853 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.717566 -0.0544915 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.725632 -0.0368947 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.718734 -0.0588496 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.693716 -0.0608821 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.694884 -0.0652402 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.677932 -0.0496759 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.700615 -0.0389272 -0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.684831 -0.027721 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.708681 -0.0213304 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.649684 0.00804971 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.640422 0.0275193 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644149 0.0287044 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.66342 0.0283337 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.645956 0.00686453 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.668955 0.00767898 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.655218 -0.012605 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626685 0.00723527 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.635947 -0.0122343 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.630413 0.00842045 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721234 0.0272215 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.725055 0.0280589 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.726768 0.00656677 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.70473 0.0172649 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.71952 0.0487136 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.699195 0.0379196 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.715699 0.0478762 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.741558 0.0380155 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.737738 0.0371781 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.743272 0.0165234 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172546 0.643951 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.281471 0.802608 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.30566 0.824035 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.302088 0.822021 -0.202114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298094 0.802598 -0.187402 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282758 0.821938 -0.186751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.309654 0.843459 -0.192477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290324 0.843375 -0.177114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.313227 0.845472 -0.168128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32499 0.824119 -0.193128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.328563 0.826132 -0.16878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.320997 0.804695 -0.178416 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.305221 0.752156 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.325175 0.741263 -0.169507 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.325981 0.765112 -0.163165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32493 0.747715 -0.145675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.304415 0.728307 -0.166213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.304171 0.734759 -0.142381 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.284462 0.7392 -0.156576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.305466 0.745704 -0.183703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.285513 0.756597 -0.174066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.306272 0.769553 -0.17736 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241352 0.787796 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.218449 0.785699 -0.180578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.223304 0.778718 -0.157397 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.22345 0.802677 -0.163362 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236497 0.794777 -0.194773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241498 0.811756 -0.177557 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2594 0.796874 -0.185788 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236351 0.770818 -0.188808 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.259253 0.772915 -0.179823 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241205 0.763837 -0.165627 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.28191 0.874487 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.292033 0.891539 -0.143718 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.305711 0.872763 -0.135349 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.28812 0.868678 -0.152187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268233 0.893263 -0.137375 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.264319 0.870402 -0.145845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.25811 0.876212 -0.122663 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.285824 0.897348 -0.120537 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275701 0.880296 -0.105825 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.299501 0.878572 -0.112168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.217602 0.838248 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.206363 0.860225 -0.122182 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.223536 0.854636 -0.105343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.230102 0.858689 -0.128798 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.200429 0.843837 -0.139672 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.224168 0.842301 -0.146288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.211667 0.821861 -0.140323 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.193863 0.839784 -0.116217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.205101 0.817808 -0.116868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.211035 0.834196 -0.0993785 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.257721 0.853061 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.26204 0.87538 -0.0527151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.280934 0.860805 -0.0590577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.266856 0.87108 -0.0765474 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.238827 0.867636 -0.0560094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.243643 0.863337 -0.0798417 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.234508 0.845317 -0.0656463 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.252905 0.857361 -0.0385197 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.248586 0.835041 -0.0481565 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271799 0.842785 -0.0448623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.34578 0.838847 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.360404 0.851488 -0.132647 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.347059 0.832518 -0.141116 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.335865 0.853509 -0.1345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359125 0.857816 -0.108814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334587 0.859838 -0.110668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.344501 0.845176 -0.0934517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.370319 0.836826 -0.115431 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355695 0.824185 -0.100068 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356973 0.817857 -0.1239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321591 0.817421 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.340361 0.83071 -0.0416443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.341208 0.822249 -0.0648253 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.325527 0.840365 -0.0588603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.320744 0.825882 -0.0274488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30591 0.835537 -0.0446649 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301973 0.812593 -0.0364345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.336425 0.807766 -0.0334138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317654 0.794477 -0.0423994 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337272 0.799305 -0.0565949 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345341 0.766968 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.369945 0.768944 -0.10004 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356171 0.780624 -0.116879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356172 0.788341 -0.093424 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359115 0.755289 -0.0825505 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345342 0.774685 -0.0759343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334511 0.753313 -0.0818993 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359113 0.747572 -0.106005 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33451 0.745596 -0.105354 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.34534 0.759252 -0.122844 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.358439 0.594141 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.408291 0.619127 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.411883 0.625955 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396287 0.607547 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.390369 0.630791 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.423887 0.637535 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.402373 0.642371 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.420295 0.630706 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429805 0.61429 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.426212 0.607462 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.414208 0.595882 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337042 0.638217 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.344865 0.652948 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.357326 0.651954 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.357697 0.632683 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324581 0.639211 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337413 0.618946 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316758 0.624481 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324211 0.658482 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316388 0.643752 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.336672 0.657489 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.389713 0.68332 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.398265 0.660156 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369058 0.688854 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356956 0.671225 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356956 0.671225 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.389713 0.68332 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.398265 0.660156 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429687 0.57505 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.452905 0.58161 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.434777 0.586467 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436077 0.5989 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447815 0.570193 -0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.430987 0.587483 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.424596 0.563633 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.446515 0.55776 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.423296 0.5512 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.428387 0.562617 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399007 0.621614 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.41723 0.637209 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.418027 0.624734 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.401533 0.642848 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.39821 0.634089 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.382513 0.639728 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379986 0.618494 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.414703 0.615976 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.39648 0.600381 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4155 0.603501 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379835 0.550064 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.396248 0.547099 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.403175 0.557504 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388263 0.569716 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.372907 0.539659 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.364922 0.562276 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356494 0.542624 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387819 0.527447 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.371406 0.530412 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.394747 0.537852 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.389119 0.547576 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.410169 0.541008 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.405866 0.564748 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410472 0.548718 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.393422 0.523836 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.393725 0.531546 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.372372 0.530405 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388816 0.539866 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367766 0.546435 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.384513 0.563607 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.340934 0.501272 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359921 0.517056 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.320279 0.506807 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318612 0.528125 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318612 0.528125 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.340934 0.501272 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359921 0.517056 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317871 0.566667 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.296626 0.555534 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307914 0.550163 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.297216 0.572202 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.306582 0.572037 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307172 0.588706 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.327827 0.583171 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31728 0.549999 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338525 0.561133 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.328569 0.544629 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172546 0.643951 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.142305 0.674191 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.144155 0.692502 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.150298 0.696439 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.164554 0.682184 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.136163 0.670254 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.156561 0.659936 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.134313 0.651943 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.121907 0.684509 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.120057 0.666199 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.12805 0.688447 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100996 0.663122 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0847178 0.680265 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.104191 0.675047 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.107387 0.686972 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0815225 0.66834 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.104191 0.675047 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0978007 0.651197 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0783272 0.656415 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0946054 0.639272 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0978007 0.651197 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153374 0.715501 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.160081 0.738169 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.177224 0.721891 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165299 0.718696 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.136231 0.731779 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.141449 0.712305 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.129524 0.70911 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.148156 0.734974 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.141449 0.712305 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165299 0.718696 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.213855 0.655019 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.213517 0.662308 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.194382 0.649801 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.198584 0.673065 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23299 0.667526 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.218058 0.678283 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.233329 0.660237 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228788 0.644262 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.229127 0.636974 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.209653 0.631756 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.224924 0.696329 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.23918 0.710584 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.233654 0.687599 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.216195 0.705059 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23045 0.719314 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.207465 0.713788 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.216195 0.705059 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.24791 0.701855 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.233654 0.687599 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.242384 0.678869 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.244096 0.624779 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.266765 0.631486 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247291 0.636704 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250487 0.648629 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.26357 0.619561 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247291 0.636704 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.240901 0.612854 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.260374 0.607636 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.237705 0.600929 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.240901 0.612854 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161477 0.602641 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.162741 0.579817 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179523 0.58737 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.156259 0.583168 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.144695 0.595088 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.138214 0.598439 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.143431 0.617912 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167958 0.59929 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.166695 0.622115 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.184741 0.606843 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191718 0.5724 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.208861 0.556122 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.215568 0.578791 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.203643 0.575596 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.185011 0.549732 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179793 0.569205 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167868 0.56601 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.196936 0.552927 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179793 0.569205 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.203643 0.575596 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.120168 0.591572 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.105912 0.577317 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.128897 0.582843 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.111438 0.600302 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0971825 0.586046 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.102708 0.609032 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.111438 0.600302 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.114642 0.568587 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.128897 0.582843 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.137627 0.574113 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0955788 0.852418 9.1293e-17 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.11107 0.922609 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.122151 0.937225 -0.0344251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.131874 0.915202 -0.0289382 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.11086 0.916553 -0.0418311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.101346 0.944632 -0.0233819 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.090055 0.92396 -0.0307879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0902645 0.930016 -0.00685171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.12236 0.943281 -0.0104889 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.111279 0.928665 0.00604126 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.132084 0.921258 -0.00500196 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.164775 0.877966 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.182656 0.890926 -0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167676 0.876622 -0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159019 0.897331 -0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179755 0.89227 0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.156118 0.898675 0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161874 0.87931 0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.188412 0.871561 0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.17053 0.8586 0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.173431 0.857256 -0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.135698 0.867231 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.134634 0.873196 -0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.11765 0.858152 -0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.117797 0.882112 -0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.152682 0.882275 -0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.135845 0.89119 -0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153747 0.876309 -0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.152536 0.858315 -0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.1536 0.852349 -0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.135552 0.843271 -0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0418734 0.897062 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0359958 0.920407 -0.0301783 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0511067 0.915603 -0.0112511 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0588574 0.912106 -0.0344321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0267625 0.901866 -0.0436186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0496241 0.893565 -0.0478724 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0326401 0.878521 -0.0381316 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0190117 0.905363 -0.0204376 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0248894 0.882018 -0.0149506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0341227 0.900559 -0.00151032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0665023 0.841683 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0454909 0.840284 -0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0463379 0.831823 -0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0473735 0.856111 -0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0656554 0.850144 -0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0675379 0.865971 -0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0866667 0.851543 -0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0646197 0.825856 -0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0856311 0.827255 -0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0654667 0.817395 -0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0263827 0.826871 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.00436945 0.825102 0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.025051 0.823964 0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.018173 0.84533 0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00570109 0.828008 -0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0195047 0.848237 -0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0277143 0.829777 -0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0125791 0.806642 -0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0345923 0.808411 -0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0332607 0.805505 0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0709499 0.907797 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0752104 0.930963 0.0499923 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0941344 0.915684 0.0457385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0806562 0.924191 0.0268805 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0520258 0.923076 0.0468401 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0574717 0.916304 0.0237283 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0477654 0.89991 0.0394341 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0655041 0.914568 0.065698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0612436 0.891402 0.058292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0844281 0.899289 0.0614442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0554592 0.837606 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0523913 0.842832 0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0750766 0.842434 0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0593957 0.86055 0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0327739 0.838004 0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0397783 0.855722 0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0358417 0.832778 0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0484547 0.819888 0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0515226 0.814662 0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.07114 0.81949 0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.124655 0.863153 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.141535 0.875744 0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.146389 0.868763 0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.129819 0.88655 0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.119801 0.870135 0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.108085 0.880941 0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.102922 0.857544 0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.136371 0.852347 0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.119492 0.839756 0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.141225 0.845366 0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0133465 0.69376 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.0646815 0.745859 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0684873 0.770032 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0507391 0.762305 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0481266 0.759394 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0824297 0.753586 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.062069 0.742948 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0786239 0.729413 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0850422 0.756497 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0812364 0.732325 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.067294 0.74877 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0347427 0.737837 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0299763 0.758864 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0114021 0.745277 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0263144 0.757489 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0533169 0.751424 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0496549 0.750049 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0580833 0.730397 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0384047 0.739212 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.043171 0.718185 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0198304 0.725625 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0179281 0.782939 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.02648 0.759776 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00272662 0.788473 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0148294 0.770845 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0148294 0.770845 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0179281 0.782939 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.02648 0.759776 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0432853 0.701782 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0544915 0.717566 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0588496 0.718734 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0368947 0.725632 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0389272 0.700615 -0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0213304 0.708681 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.027721 0.684831 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0608821 0.693716 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0496759 0.677932 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0652402 0.694884 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0272215 0.721234 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0280589 0.725055 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0172649 0.70473 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00656677 0.726768 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0380155 0.741558 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0165234 0.743272 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0371781 0.737738 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0487136 0.71952 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0478762 0.715699 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0379196 0.699195 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00804971 0.649684 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0275193 0.640422 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0283337 0.66342 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0287044 0.644149 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00723527 0.626685 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00842045 0.630413 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0122343 0.635947 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00686453 0.645956 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.012605 0.655218 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00767898 0.668955 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0838533 0.674309 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.106805 0.675276 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0875713 0.673094 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.091423 0.694308 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.103087 0.676491 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0877049 0.695522 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0801352 0.675524 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0992356 0.655278 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0762835 0.65431 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0800016 0.653095 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0308513 0.600892 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0118635 0.616676 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.051506 0.606426 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.053173 0.627745 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.053173 0.627745 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0308513 0.600892 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0118635 0.616676 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0539145 0.666287 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0577732 0.666927 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.034894 0.669407 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0513875 0.68752 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0767937 0.663807 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.070408 0.6844 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.072935 0.663167 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0603001 0.645694 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0564414 0.645053 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0374209 0.648173 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0133465 0.69376 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.0440268 0.740325 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0417568 0.762259 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0216407 0.748937 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0345526 0.759495 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0641429 0.753646 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0569387 0.750882 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0664129 0.731712 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.051231 0.743089 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.053501 0.721155 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0311149 0.729767 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0272215 0.721234 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0454452 0.736829 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.046242 0.724354 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0297485 0.742467 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0264247 0.733709 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.010728 0.739347 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00820099 0.718114 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0429182 0.715595 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0246945 0.7 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.043715 0.70312 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0179281 0.782939 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.02648 0.759776 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00272662 0.788473 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0148294 0.770845 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0148294 0.770845 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0179281 0.782939 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.02648 0.759776 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0845947 0.712851 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.101422 0.730141 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0832945 0.725284 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0782041 0.736701 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.102723 0.717709 0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0795043 0.724268 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0858949 0.700418 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107813 0.706291 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0909853 0.689001 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0896851 0.701434 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0347427 0.737837 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0269197 0.752567 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0144587 0.751574 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.014088 0.732303 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0472037 0.73883 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0343719 0.718566 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0550267 0.7241 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0475745 0.758102 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0553974 0.743371 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0351134 0.757108 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0539145 0.666287 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0751594 0.655153 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0638711 0.649783 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0745692 0.671821 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0652028 0.671657 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0646126 0.688325 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0439578 0.682791 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0545047 0.649619 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0332597 0.660752 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0432164 0.644249 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0631985 0.668775 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0708196 0.669983 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0467378 0.671462 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0618185 0.690113 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0872804 0.667296 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0782793 0.687426 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0796593 0.666087 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0721997 0.648644 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0645786 0.647436 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0481178 0.650123 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0308513 0.600892 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0118635 0.616676 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.051506 0.606426 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.053173 0.627745 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.053173 0.627745 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0308513 0.600892 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0118635 0.616676 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00804971 0.649684 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0244627 0.646718 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0313903 0.657124 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.016478 0.669336 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00112207 0.639278 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00686255 0.661896 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0152909 0.642244 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0160343 0.627066 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.000378614 0.630031 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.022962 0.637471 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281471 0.802608 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.329459 0.858698 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.34259 0.872345 0.0890951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338969 0.848329 0.0846485 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32016 0.86421 0.0827387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.333079 0.882715 0.109385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.310649 0.87458 0.103028 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.319948 0.869068 0.125228 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.351888 0.866833 0.111295 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338757 0.853186 0.127138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.348268 0.842817 0.106848 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337088 0.798572 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.346884 0.808673 0.0420622 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.322361 0.807762 0.044793 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.335792 0.82298 0.0588533 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.361611 0.799483 0.0596212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.350519 0.81379 0.0764123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.351815 0.789382 0.079911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.34818 0.784265 0.0455609 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338384 0.774164 0.0658506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.323657 0.783355 0.0482916 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.280879 0.845371 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.291048 0.849036 0.0284303 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.304882 0.840755 0.0471312 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.287867 0.826067 0.0369125 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267046 0.853652 0.0319289 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263865 0.830683 0.0404111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.256877 0.849987 0.0541285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.28406 0.868341 0.0421477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273891 0.864676 0.0643473 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.297894 0.86006 0.0608487 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273842 0.862735 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.282313 0.885497 0.158144 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29787 0.867718 0.150967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281455 0.876946 0.134996 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.258284 0.880514 0.160875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.257427 0.871963 0.137727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.249813 0.857752 0.156428 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.274699 0.871286 0.176845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.266228 0.848523 0.172398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290257 0.853506 0.169668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225263 0.849407 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.21889 0.873186 0.0974792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236437 0.866351 0.113449 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.240865 0.865588 0.0891702 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.207715 0.856242 0.0834188 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.22969 0.848644 0.0751099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.214088 0.832464 0.0853287 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.203288 0.857005 0.107698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.20966 0.833227 0.109608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.220835 0.850171 0.123668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225855 0.806645 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.21762 0.818054 0.18016 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241754 0.813612 0.177429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.230661 0.83061 0.163369 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.20172 0.811087 0.162601 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.214761 0.823642 0.14581 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.209955 0.799677 0.142311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.212813 0.794089 0.176661 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.221048 0.78268 0.156372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236948 0.789647 0.173931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.330051 0.815936 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.350165 0.828769 0.171776 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.347547 0.820583 0.148628 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.333232 0.838905 0.156937 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.332668 0.824121 0.188567 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.315735 0.834258 0.173728 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.312554 0.811288 0.182211 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.346984 0.805799 0.180258 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32687 0.792966 0.173902 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.344366 0.797614 0.157111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282063 0.759846 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.29233 0.756464 0.193792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.305929 0.765125 0.175091 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.288514 0.779336 0.18531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268464 0.751185 0.190293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.264649 0.774058 0.181811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.258198 0.754567 0.168094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.285879 0.736973 0.180075 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275612 0.740355 0.157875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.299478 0.745634 0.161374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33768 0.75581 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.362219 0.753851 0.124743 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.352319 0.76987 0.108773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.350765 0.774086 0.133052 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.347581 0.739791 0.138803 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.336127 0.760026 0.147112 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.323042 0.74175 0.136894 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.349134 0.735575 0.114524 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324595 0.737534 0.112614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339233 0.751594 0.0985541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172546 0.643951 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.202787 0.674191 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.219248 0.690652 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.223862 0.677807 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.206403 0.695267 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.198172 0.687036 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.185327 0.691651 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.181711 0.670575 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.215632 0.669577 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.199171 0.653116 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.220246 0.656732 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.244096 0.663122 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.261725 0.675225 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.244096 0.663122 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.238562 0.683777 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.261725 0.675225 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.238562 0.683777 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.244096 0.663122 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267259 0.65457 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.249631 0.642468 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.249631 0.642468 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191718 0.715501 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.203821 0.733129 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.212373 0.709966 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191718 0.715501 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183166 0.738664 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.171063 0.721035 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.171063 0.721035 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.203821 0.733129 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191718 0.715501 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.212373 0.709966 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.131237 0.655019 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.12881 0.668451 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.151296 0.662426 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.137627 0.678869 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.108751 0.661044 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.117567 0.671463 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.111177 0.647613 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.12242 0.644601 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.124846 0.631169 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.144906 0.638576 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.120168 0.696329 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.115992 0.720665 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.135288 0.711449 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.135288 0.711449 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100872 0.705544 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.120168 0.696329 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.105047 0.681209 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100872 0.705544 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.105047 0.681209 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.120168 0.696329 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100996 0.624779 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0796777 0.626446 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100996 0.624779 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0954616 0.645433 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0796777 0.626446 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0954616 0.645433 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100996 0.624779 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0852121 0.605791 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.10653 0.604124 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.10653 0.604124 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183615 0.602641 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.197046 0.600215 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.207465 0.609032 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191021 0.622701 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.173196 0.593824 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167171 0.61631 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159765 0.596251 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.18964 0.580155 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.176209 0.582581 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.200059 0.588972 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153374 0.5724 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.155041 0.551082 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.174029 0.566866 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153374 0.5724 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.134387 0.556617 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13272 0.577935 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13272 0.577935 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.155041 0.551082 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153374 0.5724 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.174029 0.566866 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.224924 0.591572 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.24926 0.587397 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.240045 0.606693 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.240045 0.606693 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23414 0.572277 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.224924 0.591572 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.209804 0.576452 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23414 0.572277 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.209804 0.576452 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.224924 0.591572 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.358439 0.594141 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.428945 0.613592 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.448155 0.626191 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.43276 0.614455 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.42519 0.634643 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.44434 0.625328 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.421375 0.63378 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.42513 0.612729 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.45191 0.60514 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4327 0.592541 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436515 0.593404 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399007 0.621614 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.399844 0.625435 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.38905 0.60511 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.378352 0.627149 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.409801 0.641939 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388308 0.643653 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.408963 0.638118 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.420499 0.619901 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.419661 0.61608 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.409705 0.599576 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.389713 0.68332 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.398265 0.660156 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369058 0.688854 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356956 0.671225 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356956 0.671225 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.389713 0.68332 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.398265 0.660156 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388377 0.586119 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.405974 0.594185 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410332 0.593017 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.394768 0.609969 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.384019 0.587286 0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.372813 0.60307 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.366422 0.57922 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399584 0.570335 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.381987 0.562269 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.403942 0.569167 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337042 0.638217 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.341809 0.659244 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.360383 0.645657 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345471 0.65787 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318468 0.651804 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32213 0.65043 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.313702 0.630777 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33338 0.639592 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.328614 0.618565 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.351955 0.626005 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317871 0.566667 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.314012 0.567308 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.336891 0.569787 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.320398 0.587901 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.294991 0.564188 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301377 0.584781 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29885 0.563547 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.311485 0.546074 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.315344 0.545434 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334364 0.548554 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.409774 0.542042 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.433888 0.53788 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.426423 0.55574 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.423551 0.558395 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.417238 0.524182 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.406901 0.544697 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.393124 0.528344 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.42011 0.521526 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.395996 0.525689 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.412646 0.539387 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.340934 0.501272 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359921 0.517056 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.320279 0.506807 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318612 0.528125 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318612 0.528125 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.340934 0.501272 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359921 0.517056 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379835 0.550064 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.399304 0.540802 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.400119 0.563801 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.400489 0.54453 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37902 0.527065 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.380205 0.530793 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359551 0.536327 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37865 0.546337 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.35918 0.555599 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379464 0.569335 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.371785 0.0996195 0.544331 RAD 0.166667 
+   txt002 
+ SPHERE CENTER -0.393621 0.220501 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.368601 0.279642 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.354293 0.299716 0.765035 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.347717 0.279022 0.753281 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.366989 0.292196 0.745238 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.375177 0.300337 0.778193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.387873 0.292817 0.758396 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389485 0.280263 0.779597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.355904 0.287162 0.786236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.370213 0.267088 0.787639 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.349329 0.266468 0.774481 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.321889 0.238665 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.304702 0.250544 0.71296 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.32307 0.238717 0.701455 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327715 0.259421 0.714081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.30352 0.250492 0.737623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.326533 0.259369 0.738744 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.320707 0.238612 0.750781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.298875 0.229788 0.724997 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316063 0.217908 0.738155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.317244 0.21796 0.713492 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.372464 0.281062 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.362978 0.289441 0.671279 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.35549 0.267771 0.680442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.378255 0.270044 0.671155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.379952 0.302733 0.683315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.395229 0.283335 0.683192 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389438 0.294353 0.704516 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.357187 0.30046 0.692603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.366673 0.29208 0.713804 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.349699 0.278789 0.701767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.440333 0.261479 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.443285 0.282991 0.781591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.421181 0.271991 0.781342 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4302 0.282046 0.760673 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.462437 0.27248 0.770086 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.449353 0.271534 0.749168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.459485 0.250967 0.758332 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.453417 0.262424 0.790755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.450466 0.240911 0.779001 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431313 0.251423 0.790506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.444196 0.262898 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.449273 0.285685 0.687835 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436139 0.282528 0.708504 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.426189 0.27701 0.68659 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.45733 0.266055 0.675209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434246 0.257381 0.673964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452254 0.243269 0.683251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.46728 0.271573 0.697123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.462204 0.248787 0.705165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.454146 0.268416 0.717791 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.465353 0.202338 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.486123 0.204606 0.746073 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.464339 0.202946 0.757577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.470107 0.223366 0.744951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.487137 0.203998 0.72141 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.471122 0.222757 0.720288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.466367 0.201729 0.708251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.481368 0.183578 0.734036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.460599 0.18131 0.720878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.459584 0.181918 0.745541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389758 0.219082 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.378635 0.228779 0.823273 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.365937 0.225483 0.802355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.383364 0.24293 0.8036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.402455 0.222377 0.824394 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.407185 0.236529 0.804721 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.413578 0.21268 0.804597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.385029 0.20493 0.823149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396152 0.195233 0.803352 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.372331 0.201634 0.802231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.414778 0.15994 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.412573 0.147477 0.787754 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39322 0.15977 0.77859 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.412448 0.172167 0.787878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434131 0.147647 0.775717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434006 0.172338 0.775841 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436336 0.16011 0.754517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.414903 0.13525 0.766429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.417108 0.147713 0.745229 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39555 0.147543 0.757266 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.343046 0.178104 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.319723 0.177083 0.771198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.325124 0.189464 0.750529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.332294 0.198298 0.772443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337645 0.165722 0.783824 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.350216 0.186938 0.785069 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.360967 0.166743 0.775781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.330475 0.156889 0.76191 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.353797 0.157909 0.753867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.335876 0.16927 0.741241 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.191247 0.166275 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.130089 0.20793 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.115471 0.221102 0.637128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.126388 0.200597 0.628759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13987 0.220766 0.633356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.119172 0.228435 0.660413 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.143571 0.228099 0.656641 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13379 0.215264 0.675329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10569 0.208266 0.655816 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120308 0.195095 0.670732 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.116607 0.187762 0.647447 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.154295 0.172673 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.15554 0.180792 0.568278 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.17557 0.171251 0.579113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.166926 0.19323 0.586315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.134265 0.182215 0.580727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.145651 0.194652 0.598764 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.133019 0.174096 0.604012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.142909 0.160236 0.573526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.141663 0.152117 0.596811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.162939 0.150694 0.584361 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.192135 0.230419 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.18209 0.243049 0.599717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.168159 0.227721 0.613157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.185251 0.218634 0.597829 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.206066 0.245747 0.604965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.209227 0.221332 0.603077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216111 0.233117 0.623653 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.188974 0.254834 0.620293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.199019 0.242204 0.638981 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.175043 0.239506 0.633733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.167041 0.201532 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.151829 0.219088 0.724292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.14514 0.205084 0.705088 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.163068 0.221861 0.702483 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.173729 0.215537 0.735128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.184969 0.218309 0.713318 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.188942 0.197981 0.726759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.155801 0.19876 0.737733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171014 0.181204 0.729364 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.149113 0.184756 0.718528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.229087 0.224021 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.22829 0.248268 0.686881 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207937 0.234532 0.689486 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216949 0.2391 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.249439 0.237756 0.67968 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238098 0.228589 0.659755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.250236 0.213509 0.675083 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.240428 0.233189 0.702209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.241225 0.208942 0.697613 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.220075 0.219453 0.704814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.228199 0.159877 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.229756 0.167942 0.742607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207683 0.16569 0.731771 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.223214 0.183484 0.72457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.250271 0.162129 0.730157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.243729 0.177671 0.71212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.248714 0.154064 0.706872 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.234741 0.144336 0.737359 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.233184 0.13627 0.714074 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.212668 0.142084 0.726523 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.129201 0.143787 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.105335 0.14887 0.692853 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115741 0.153943 0.671044 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.121723 0.167242 0.690969 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.118795 0.138714 0.71089 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135183 0.157086 0.709006 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.142661 0.13363 0.707118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.112813 0.125414 0.690965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.136679 0.120331 0.687193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.123219 0.130487 0.669156 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.190359 0.102131 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.179968 0.0897843 0.711167 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.166467 0.105492 0.697727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.183804 0.114103 0.713055 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.20386 0.0864233 0.705919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207696 0.110742 0.707807 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.214251 0.0987702 0.687231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.186523 0.0778128 0.690591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.196914 0.0901597 0.671903 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.173022 0.0935207 0.677151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153407 0.108529 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.130858 0.0995811 0.624003 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135326 0.123725 0.621398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.134736 0.113639 0.643928 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.148938 0.0843858 0.631205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.152816 0.0984435 0.65113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171487 0.0933338 0.635801 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.149528 0.0944715 0.608675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172078 0.10342 0.613272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153997 0.118615 0.60607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.31427 0.31427 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.277961 0.367156 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.269898 0.374298 0.485076 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.270045 0.350338 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.291334 0.362218 0.487134 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.277815 0.391115 0.501329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.299251 0.379036 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.285878 0.383973 0.523547 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.256525 0.379235 0.505236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.264588 0.372093 0.527454 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.256671 0.355276 0.511201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.252306 0.297666 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.235688 0.305995 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.259438 0.312359 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.245915 0.321516 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.228556 0.291303 0.509559 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238783 0.306824 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.245173 0.282974 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.242079 0.282145 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.258696 0.273816 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.265828 0.288509 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.31427 0.31427 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.32435 0.32435 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.33812 0.32066 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.32066 0.33812 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3005 0.317959 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.29681 0.331729 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.29042 0.307879 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.317959 0.3005 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307879 0.29042 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.331729 0.29681 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339925 0.383759 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.334762 0.407156 0.538366 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.31686 0.392275 0.546597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.326552 0.388696 0.524171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.357827 0.39864 0.536101 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.349618 0.380181 0.521905 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362991 0.375243 0.542066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.348135 0.402218 0.558526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.353299 0.378821 0.564491 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.330233 0.387337 0.566757 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376234 0.330873 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.393346 0.348239 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.383366 0.345565 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.369843 0.354723 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.386213 0.333547 0.484868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362711 0.340031 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.369102 0.316181 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399736 0.324389 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.382624 0.307023 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389757 0.321715 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376234 0.330873 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.386461 0.346394 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362711 0.340031 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.369843 0.354723 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399983 0.337237 0.579103 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.383366 0.345565 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389757 0.321715 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.392851 0.322544 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.382624 0.307023 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.369102 0.316181 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.277961 0.367156 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.261966 0.385852 0.57931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.259422 0.36581 0.565115 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.278159 0.38141 0.561208 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.280504 0.387198 0.595564 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.296698 0.382755 0.577461 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.2965 0.368501 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.261768 0.371598 0.599471 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.277764 0.352901 0.601529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.259225 0.351556 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.31427 0.31427 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.304189 0.32435 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.29042 0.32066 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307879 0.33812 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.328039 0.317959 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.331729 0.331729 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.33812 0.307879 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.31058 0.3005 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.32066 0.29042 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.29681 0.29681 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.252306 0.297666 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.228803 0.30415 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238783 0.306824 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.245915 0.321516 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.242326 0.294992 0.603794 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.259438 0.312359 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.265828 0.288509 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.235194 0.2803 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.258696 0.273816 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.245173 0.282974 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.574159 0.153845 0.618405 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.612768 0.202534 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.612732 0.225282 0.668328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591695 0.212428 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.60221 0.22113 0.64638 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.633805 0.215388 0.660098 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.623283 0.211236 0.63815 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.63384 0.192641 0.650495 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62329 0.206686 0.680674 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.623325 0.183939 0.671072 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.602253 0.193832 0.679302 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.543919 0.184086 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.527458 0.200547 0.687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522843 0.187702 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.540303 0.205161 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.548533 0.196931 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.561378 0.201546 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.564994 0.18047 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.531074 0.179472 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.547535 0.163011 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.526459 0.166627 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554987 0.225396 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.542885 0.243024 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534333 0.219861 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554987 0.225396 0.593714 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.563539 0.248559 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575642 0.23093 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575642 0.23093 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542885 0.243024 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554987 0.225396 0.643096 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534333 0.219861 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643008 0.172294 0.598245 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.660425 0.189742 0.599616 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645434 0.185725 0.618821 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.636618 0.196144 0.598245 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.657999 0.17631 0.57904 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.634191 0.182712 0.577669 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.640582 0.158862 0.577669 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666816 0.165892 0.599616 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649399 0.148444 0.598245 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.651825 0.161875 0.618821 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.585228 0.195155 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.574809 0.203972 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.561378 0.201546 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.568784 0.181486 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.598659 0.197581 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.592634 0.175095 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.609078 0.188764 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591253 0.217641 0.549693 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.601672 0.208824 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.577822 0.215215 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.6044 0.123605 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.620861 0.107144 0.549693 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.608016 0.102529 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625475 0.119989 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.617245 0.128219 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.621859 0.141064 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600784 0.14468 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.599785 0.11076 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.583324 0.127221 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58694 0.106145 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631939 0.130984 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.643128 0.132649 0.680674 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.618482 0.133263 0.679302 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631785 0.152367 0.671072 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.656585 0.130371 0.660098 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645242 0.150088 0.650495 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645397 0.128706 0.63815 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643283 0.111266 0.668328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.632094 0.109601 0.64638 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.618637 0.11188 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593331 0.0822954 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.591664 0.0609772 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.572676 0.076761 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593331 0.0822954 0.643096 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.612319 0.0665116 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613986 0.0878298 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613986 0.0878298 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591664 0.0609772 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593331 0.0822954 0.593714 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.572676 0.076761 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.56309 0.112536 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.549659 0.11011 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.53924 0.118927 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555684 0.132596 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.573509 0.103719 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.579534 0.126205 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58694 0.106145 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.557065 0.09005 0.687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.570497 0.0924762 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.546646 0.0988668 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.494808 0.247614 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.494287 0.313607 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.484182 0.326876 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.470513 0.310432 0.39372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.488171 0.302705 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507957 0.330051 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.511946 0.305881 0.384149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.518062 0.316783 0.405442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.490299 0.337778 0.402668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.500404 0.324509 0.420874 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.476629 0.321334 0.415013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452978 0.302539 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.436971 0.320401 0.454201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436675 0.29902 0.441856 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.455413 0.3148 0.438769 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.453274 0.32392 0.472408 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.471717 0.318318 0.456976 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.469281 0.306057 0.478269 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434535 0.30814 0.475494 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.450543 0.290278 0.481355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434239 0.286759 0.463149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434629 0.269833 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.426389 0.279233 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.445377 0.263449 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.448298 0.286276 0.383837 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.415641 0.285616 0.396183 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.43755 0.29266 0.40513 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.42388 0.276216 0.417476 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.41272 0.262789 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.420959 0.253389 0.408529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431707 0.247006 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536117 0.258683 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.549787 0.275127 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.549787 0.275127 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.529727 0.282533 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536117 0.258683 0.348047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.516058 0.266089 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522448 0.242239 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.556177 0.251277 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542508 0.234833 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.556177 0.251277 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.476459 0.214908 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.457868 0.209819 0.353908 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.458164 0.2312 0.366254 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.453963 0.210053 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.476163 0.193527 0.356995 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.472258 0.193761 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.494753 0.198616 0.372427 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.480363 0.214674 0.344961 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.498954 0.219763 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.480659 0.236055 0.357307 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536638 0.19269 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.549603 0.17251 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528912 0.177908 0.424584 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.549105 0.191778 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.557329 0.187292 0.394032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.556831 0.20656 0.409464 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.544363 0.207471 0.388171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.537136 0.173421 0.390945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.524171 0.193601 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.516445 0.178819 0.403291 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554467 0.291389 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.562288 0.314604 0.439705 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542501 0.306499 0.45205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.541186 0.310183 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.574255 0.299494 0.424272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.553152 0.295073 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.566433 0.276279 0.421186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575569 0.29581 0.448652 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.567748 0.272595 0.445566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555781 0.287705 0.460998 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554987 0.225396 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.567359 0.227186 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.54267 0.227528 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555283 0.246777 0.482603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.579676 0.225054 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.567601 0.244644 0.46131 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.567305 0.223263 0.448964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.567063 0.205805 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554691 0.204014 0.457911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542374 0.206147 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.513157 0.28032 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.507811 0.298839 0.512531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.489718 0.287442 0.500186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.505577 0.302049 0.488152 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.531251 0.291716 0.509445 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.529016 0.294927 0.485065 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536597 0.273198 0.494013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.515392 0.27711 0.521479 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.520738 0.258591 0.506047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.497299 0.265714 0.509133 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.552323 0.0329639 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.625877 0.0248832 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.646362 0.0316054 0.448652 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625173 0.0287309 0.460998 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627981 0.0478 0.445566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.647066 0.0277577 0.424272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.628685 0.0439523 0.421186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62658 0.0210355 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644258 0.00868865 0.439705 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.623773 0.00196644 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.623069 0.00581415 0.45205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.584567 0.0138144 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.584898 0.0177119 0.521479 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.56353 0.0185345 0.509133 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.580268 0.0364224 0.506047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.605935 0.0129918 0.509445 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.601305 0.0317022 0.494013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.605605 0.00909422 0.485065 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.589197 -0.00489609 0.512531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.588867 -0.00879364 0.488152 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.567829 -0.00407348 0.500186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593331 0.0822954 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.593994 0.105299 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.572783 0.0926585 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582384 0.100664 0.457911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.614541 0.0949359 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.602932 0.090301 0.448964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613879 0.0719323 0.46131 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604941 0.0869303 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604278 0.0639267 0.482603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58373 0.0742898 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593633 0.0440327 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.607302 0.0604766 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.607302 0.0604766 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587242 0.0678827 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593633 0.0440327 0.348047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.573573 0.0514389 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.579964 0.0275889 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613693 0.0366265 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600023 0.0201827 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613693 0.0366265 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.561087 0.101445 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.551884 0.118381 0.390945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536664 0.103361 0.403291 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.550745 0.0944221 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.576307 0.116465 0.394032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575168 0.0925065 0.388171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58551 0.0995293 0.409464 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.562225 0.125404 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.571428 0.108468 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.547006 0.110383 0.424584 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.520079 0.0521134 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.523344 0.0542684 0.344961 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534291 0.0358996 0.357307 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.541988 0.0591566 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.509132 0.0704822 0.356995 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.527777 0.0753703 0.372427 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.505868 0.0683272 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.501435 0.0472252 0.353908 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.49817 0.0450702 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.512382 0.0288565 0.366254 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.584869 -0.0244483 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.5935 -0.0473753 0.402668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.57344 -0.0399691 0.415013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.595617 -0.0308315 0.420874 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604929 -0.0318545 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.607046 -0.0153107 0.405442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.596298 -0.00892756 0.384149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582752 -0.0409921 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.574121 -0.0180651 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.562692 -0.0335859 0.39372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.511316 -0.0163676 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.48882 -0.0212225 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.497372 0.00194055 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.491256 -0.00896145 0.408529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.502764 -0.0395307 0.396183 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.505199 -0.0272696 0.417476 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.525259 -0.0346758 0.40513 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.50888 -0.0286287 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.531375 -0.0237738 0.383837 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.517432 -0.00546563 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.54356 -0.0355172 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.530389 -0.0495897 0.475494 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.519442 -0.031221 0.463149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.53532 -0.0261165 0.481355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554507 -0.0538859 0.472408 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.559438 -0.0304127 0.478269 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.567678 -0.0398133 0.456976 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.538628 -0.0589904 0.454201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.551799 -0.0449178 0.438769 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.527681 -0.0406217 0.441856 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.451136 0.0058509 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.447081 0.0051487 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.435909 0.01504 0.823149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.423265 0.0115452 0.802231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.440694 0.0289993 0.803352 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.459725 0.00864346 0.824394 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.46451 0.0226028 0.804597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.470897 -0.0012478 0.804721 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.442297 -0.00881065 0.823273 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.453468 -0.0187019 0.8036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.429652 -0.0123054 0.802355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.386138 0.0172804 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.364644 0.0293677 0.76191 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.375512 0.0213457 0.741241 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.385352 0.0401449 0.753867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37527 0.0253024 0.783824 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.395978 0.0360796 0.775781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396764 0.0132151 0.785069 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.36543 0.0065032 0.771198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.386924 -0.00558411 0.772443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376298 -0.00151881 0.750529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.439178 0.0688765 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.426942 0.0903221 0.766429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.416328 0.0699989 0.757266 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.435083 0.0806307 0.745229 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.449792 0.0891998 0.775717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.457933 0.0795084 0.754517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.462029 0.0677542 0.775841 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431037 0.078568 0.787754 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.443274 0.0571224 0.787878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.420423 0.0582447 0.77859 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.512079 -0.00628079 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.523883 -0.000557006 0.790755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.49924 -0.00208214 0.790506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.51057 0.0165974 0.779001 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536722 -0.00475566 0.770086 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523409 0.0123987 0.758332 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.524918 -0.0104794 0.749168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.525392 -0.0234352 0.781591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.513588 -0.029159 0.760673 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.500749 -0.0249603 0.781342 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504176 0.0574471 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.508666 0.0817008 0.734036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.488971 0.0722467 0.745541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.489545 0.0732807 0.720878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523872 0.0669012 0.72141 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504751 0.058481 0.708251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.519382 0.0426474 0.720288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523298 0.0658672 0.746073 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.518808 0.0416134 0.744951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.503602 0.0564131 0.757577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.516134 -0.00557859 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.540463 -0.00154892 0.697123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.52751 -0.00538221 0.717791 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.524673 0.0156462 0.705165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.529087 -0.00174531 0.675209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.513298 0.0154498 0.683251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504759 -0.00577498 0.673964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.531924 -0.0227737 0.687835 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507596 -0.0268034 0.68659 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.518971 -0.026607 0.708504 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.459039 -0.0578769 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.451803 -0.0707378 0.786236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.435761 -0.0561039 0.774481 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.454158 -0.0461991 0.787639 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.475081 -0.0725109 0.778193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.477435 -0.0479721 0.779597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.482316 -0.05965 0.758396 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.456685 -0.0824157 0.765035 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.46392 -0.0695548 0.745238 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.440643 -0.0677817 0.753281 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.463094 -0.0571747 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.459563 -0.081612 0.692603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.442243 -0.0665888 0.701767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.463589 -0.0696122 0.713804 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.480415 -0.0721979 0.683315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.48444 -0.0601982 0.704516 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.483946 -0.0477607 0.683192 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.459069 -0.0691745 0.671279 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4626 -0.0447373 0.671155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.441749 -0.0541513 0.680442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398096 -0.0457452 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.373728 -0.0495643 0.724997 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.383722 -0.030137 0.713492 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.382672 -0.0306825 0.738155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.388102 -0.0651725 0.737623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.397047 -0.0462908 0.750781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.41247 -0.0613535 0.738744 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389151 -0.064627 0.71296 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.41352 -0.060808 0.714081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399146 -0.0451997 0.701455 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4293 -0.115031 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.424299 -0.178985 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.412497 -0.190929 0.599471 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.400273 -0.174844 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.417001 -0.16674 0.601529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436523 -0.195071 0.595564 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.441027 -0.170881 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.448325 -0.183127 0.577461 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419795 -0.203175 0.57931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431597 -0.191231 0.561208 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.407571 -0.18709 0.565115 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.367336 -0.131634 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.343834 -0.12515 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.353814 -0.122476 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.360946 -0.107784 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.357357 -0.134308 0.603794 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.374468 -0.116942 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.380859 -0.140792 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.350225 -0.149 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.373727 -0.155484 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.360204 -0.146326 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4293 -0.115031 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.41922 -0.10495 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40545 -0.10864 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.42291 -0.0911807 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.44307 -0.111341 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.44676 -0.0975713 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.45315 -0.121421 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.425611 -0.128801 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.435691 -0.138881 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.411841 -0.13249 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.486264 -0.162382 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.502603 -0.174264 0.558526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.479659 -0.170327 0.566757 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.495376 -0.15142 0.564491 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.509207 -0.166319 0.536101 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.501981 -0.143475 0.542066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.492868 -0.154437 0.521905 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.49349 -0.185226 0.538366 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.477151 -0.173345 0.524171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.470546 -0.18129 0.546597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.491265 -0.0984274 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.501491 -0.082906 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.477742 -0.0892696 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.484874 -0.0745774 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.515014 -0.0920638 0.579103 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.498397 -0.0837352 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504787 -0.107585 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507882 -0.106756 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.497655 -0.122277 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.484132 -0.11312 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.491265 -0.0984274 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.508376 -0.0810612 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.498397 -0.0837352 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.484874 -0.0745774 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.501244 -0.0957534 0.484868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.477742 -0.0892696 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.484132 -0.11312 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.514767 -0.104911 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.497655 -0.122277 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504787 -0.107585 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.424299 -0.178985 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.411775 -0.200165 0.505236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399922 -0.179342 0.511201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.415187 -0.189948 0.527454 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436152 -0.199808 0.501329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.439564 -0.189591 0.523547 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.448677 -0.178629 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.420888 -0.189202 0.485076 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.433412 -0.168023 0.487134 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409035 -0.168379 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4293 -0.115031 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.439381 -0.10495 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.45315 -0.10864 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.435691 -0.0911807 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.415531 -0.111341 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.411841 -0.0975713 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40545 -0.121421 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.43299 -0.128801 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.42291 -0.138881 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.44676 -0.13249 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.367336 -0.131634 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.350719 -0.123305 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.374468 -0.116942 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.360946 -0.107784 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.343587 -0.137998 0.509559 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.353814 -0.122476 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.360204 -0.146326 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.357109 -0.147155 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.373727 -0.155484 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.380859 -0.140792 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.248762 -0.0483751 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.183785 -0.0599222 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.160406 -0.0522053 0.690965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171954 -0.0513956 0.669156 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.178533 -0.0358698 0.687193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172236 -0.0607319 0.71089 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.190363 -0.0443964 0.707118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.195615 -0.0684488 0.709006 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.165658 -0.0762577 0.692853 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.189036 -0.0839747 0.690969 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.177206 -0.075448 0.671044 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.187119 -0.0172857 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.176731 -0.00705049 0.608675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.192673 -0.025725 0.60607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.200733 -0.00352517 0.613272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171177 0.00138875 0.631205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.195179 0.00491406 0.635801 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.181564 -0.00884647 0.65113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.163117 -0.020811 0.624003 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.173504 -0.0310463 0.643928 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.179058 -0.0394855 0.621398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.215921 0.00673113 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.20044 0.0258737 0.690591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.196602 0.00551963 0.677151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.215612 0.0203763 0.671903 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.21976 0.0270852 0.705919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.234932 0.0215878 0.687231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.235241 0.00794264 0.707807 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.200749 0.0122285 0.711167 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.21623 -0.00691403 0.713055 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.196911 -0.00812553 0.697727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.245428 -0.0910116 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.234308 -0.0942304 0.737733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.221514 -0.0854464 0.718528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238704 -0.0714204 0.729364 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.258223 -0.0997955 0.735128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.262619 -0.0769856 0.726759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.269343 -0.0965768 0.713318 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.241032 -0.113822 0.724292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.252152 -0.110603 0.702483 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.228237 -0.105038 0.705088 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.277564 -0.0243582 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.275459 -0.0076281 0.737359 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.255218 -0.0167139 0.726523 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.270078 -0.00142185 0.714074 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.297806 -0.0152725 0.730157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.292425 -0.00906621 0.706872 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.299911 -0.0320026 0.71212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282946 -0.0305645 0.742607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.285051 -0.0472946 0.72457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.262704 -0.0396503 0.731771 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.310405 -0.0794645 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.324811 -0.0817333 0.702209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.300317 -0.0800146 0.704814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.313378 -0.0603366 0.697613 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.334899 -0.0811832 0.67968 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.323466 -0.0597864 0.675083 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.320493 -0.0789143 0.659755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.321838 -0.100861 0.686881 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307433 -0.0985923 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.297345 -0.0991425 0.689486 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216626 -0.115028 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.195663 -0.127519 0.655816 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.194866 -0.104303 0.647447 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.201738 -0.108803 0.670732 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.217423 -0.138245 0.660413 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.223497 -0.119529 0.675329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238386 -0.125754 0.656641 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.210551 -0.133744 0.637128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.231514 -0.121254 0.633356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.209754 -0.110528 0.628759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.281603 -0.103481 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.291073 -0.126206 0.620293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.271345 -0.119897 0.633733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.293457 -0.110246 0.638981 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.301332 -0.10979 0.604965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.303716 -0.0938302 0.623653 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.291862 -0.0870656 0.603077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.279219 -0.119442 0.599717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.269749 -0.0967168 0.597829 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.25949 -0.113132 0.613157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.21996 -0.0723919 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.20388 -0.0673141 0.573526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216456 -0.0490355 0.584361 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.198742 -0.0609052 0.596811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207384 -0.0906706 0.580727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.202246 -0.0842617 0.604012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.223463 -0.0957484 0.598764 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.225098 -0.0788008 0.568278 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.241177 -0.0838786 0.586315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.237674 -0.0605222 0.579113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.471405 0.471405 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER -0.508983 0.690426 8.51251e-17 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.484794 0.755941 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.47411 0.767658 -0.0436186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.467528 0.744501 -0.0381316 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.489758 0.749038 -0.0478724 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.491377 0.779098 -0.0301783 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507025 0.760478 -0.0344321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.502061 0.767382 -0.0112511 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.469146 0.774562 -0.0204376 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.47983 0.762845 -0.00151032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.462564 0.751405 -0.0149506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436283 0.7029 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.418941 0.714226 -0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.43889 0.704751 -0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.44101 0.724842 -0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.416335 0.712374 0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.438403 0.722991 0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.433677 0.701048 0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.414215 0.692283 -0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431557 0.680957 0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434163 0.682808 -0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.478434 0.695668 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.481931 0.703418 -0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.500827 0.694124 -0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.491475 0.716184 -0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.459538 0.704962 -0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.469082 0.717727 -0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.456041 0.697211 -0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.46889 0.682902 -0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.465393 0.675152 -0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.487786 0.673608 -0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.557494 0.743468 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.560084 0.767402 -0.0233819 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.543179 0.760285 -0.00685171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.53997 0.755145 -0.0307879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.574398 0.750585 -0.0344251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554284 0.738328 -0.0418311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.571808 0.726651 -0.0289382 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.577608 0.755725 -0.0104889 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575017 0.731791 -0.00500196 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.560703 0.748608 0.00604126 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.551134 0.683194 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.573364 0.687731 -0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.571303 0.682033 -0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.56324 0.703871 -0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.553195 0.688893 -0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.543071 0.705033 -0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.530964 0.684356 -0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.561258 0.667055 -0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539027 0.662518 -0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.559196 0.661356 -0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.581682 0.677953 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.601808 0.682851 0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.579842 0.680568 0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58454 0.700216 0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.603648 0.680237 -0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58638 0.697602 -0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.583522 0.675339 -0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.59895 0.660588 0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.578824 0.65569 -0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.576984 0.658304 0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.515343 0.7507 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.506594 0.773394 0.0468401 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.491321 0.755462 0.0394341 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507924 0.764807 0.0237283 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.530616 0.768632 0.0499923 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.531946 0.760045 0.0268805 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539365 0.745938 0.0457385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.514012 0.759287 0.065698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522762 0.736593 0.0614442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.49874 0.741355 0.058292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539531 0.685185 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.538818 0.693658 0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.517905 0.691194 0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534075 0.708875 0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.560445 0.687649 0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555702 0.702866 0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.561158 0.679176 0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.544274 0.669969 0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.544988 0.661495 0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523361 0.667505 0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.466832 0.697658 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.447385 0.709346 0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.447429 0.703286 0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.46231 0.721188 0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.466788 0.703718 0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.481713 0.71556 0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.486235 0.692031 0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.451907 0.685816 0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.471354 0.674129 0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.451951 0.679757 0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.335322 0.607487 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.283164 0.659645 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.269894 0.672915 0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.275822 0.649528 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.293281 0.666987 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.277236 0.683032 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.300624 0.677104 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.290507 0.669762 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.259777 0.665573 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.273047 0.652302 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.265705 0.642185 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.286452 0.603979 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.279361 0.614273 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.303327 0.613293 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.288206 0.628413 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.262487 0.604959 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.271332 0.619099 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.269578 0.594664 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.277607 0.589839 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.284698 0.579544 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.301572 0.588858 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.33883 0.656357 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.328536 0.663448 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.314396 0.654603 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.329516 0.639482 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.35297 0.665202 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.353951 0.641237 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.363265 0.658111 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.33785 0.680322 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.348145 0.673232 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.32371 0.671477 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.332034 0.663153 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.321274 0.684748 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.308341 0.666888 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.326131 0.678752 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.344967 0.681014 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.349824 0.675018 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.355727 0.659419 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327177 0.669149 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337937 0.647554 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.314244 0.651289 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.391875 0.684201 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37258 0.674986 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37258 0.674986 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406996 0.669081 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40282 0.644745 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406996 0.669081 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40282 0.644745 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.384191 0.610996 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.389739 0.622198 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.366159 0.617804 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.378964 0.63493 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.407771 0.61539 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396997 0.628121 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.402224 0.604188 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.394966 0.598265 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389418 0.587062 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.371386 0.593871 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.279656 0.610775 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.258061 0.621535 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.264057 0.616678 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.275921 0.634468 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.27366 0.615632 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.29152 0.628565 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.295255 0.604872 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.261795 0.597842 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.28339 0.587082 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.267791 0.592985 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.331813 0.558618 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.320611 0.55307 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.30788 0.563845 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.325005 0.57665 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.344544 0.547843 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.348938 0.571423 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.355747 0.553391 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327419 0.535038 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.338621 0.540585 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.314688 0.545813 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.258608 0.550934 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.267823 0.570229 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.267823 0.570229 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.273728 0.535813 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.298064 0.539989 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.273728 0.535813 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.298064 0.539989 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.335322 0.607487 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.313405 0.629404 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.316595 0.626214 -0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.318408 0.606941 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.335868 0.624401 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.311592 0.648676 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.330864 0.646863 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.308402 0.651867 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.294133 0.631217 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.290942 0.634407 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.295946 0.611945 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.331813 0.558618 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.319608 0.539107 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307378 0.556863 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.322499 0.541743 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.344043 0.540862 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.346933 0.543497 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356248 0.560372 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.328923 0.555982 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.341128 0.575492 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316693 0.573738 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.384191 0.610996 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.403702 0.623201 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.401066 0.62031 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.385946 0.635431 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.386827 0.613886 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.369071 0.626116 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.367317 0.601681 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.401947 0.598766 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.382437 0.586561 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399312 0.595876 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316914 0.678274 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.305407 0.69384 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.296616 0.671002 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.317721 0.674446 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.325704 0.701111 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.338018 0.681717 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337211 0.685545 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3046 0.697667 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316107 0.682101 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.295809 0.67483 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.391875 0.684201 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37258 0.674986 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37258 0.674986 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406996 0.669081 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40282 0.644745 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406996 0.669081 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40282 0.644745 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.33883 0.656357 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.329538 0.677411 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.314897 0.661584 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.332022 0.674389 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.353472 0.672184 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.355956 0.669162 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362764 0.65113 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.336346 0.659378 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.345639 0.638325 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.321705 0.643552 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.264535 0.625895 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.248969 0.637402 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.268363 0.625088 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.271807 0.646193 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.245142 0.638209 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.267979 0.647 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.260708 0.626702 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.241698 0.617105 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.257264 0.605598 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.261092 0.604791 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.286452 0.603979 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.265398 0.613271 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.26842 0.610787 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.281225 0.627912 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.283431 0.606463 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.299257 0.621104 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.304484 0.59717 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.270625 0.589337 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.291679 0.580045 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.273647 0.586853 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.258608 0.550934 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.267823 0.570229 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.267823 0.570229 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.273728 0.535813 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.298064 0.539989 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.273728 0.535813 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.298064 0.539989 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645066 0.554344 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.681385 0.616373 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.678928 0.639472 -0.137375 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.661636 0.629767 -0.122663 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.664108 0.621631 -0.145845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.698678 0.626079 -0.143718 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.683858 0.608237 -0.152187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.701135 0.602979 -0.135349 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.696205 0.634214 -0.120537 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.698662 0.611115 -0.112168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678912 0.624508 -0.105825 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649723 0.609912 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.640648 0.631982 -0.0560094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625749 0.614812 -0.0656463 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.64267 0.62585 -0.0798417 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.664623 0.627081 -0.0527151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666645 0.620949 -0.0765474 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673698 0.605012 -0.0590577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.647702 0.616044 -0.0385197 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.656777 0.593974 -0.0448623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.632802 0.598874 -0.0481565 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.607573 0.617144 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.595495 0.63057 -0.139672 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.594239 0.605919 -0.140323 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.615286 0.617371 -0.146288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.608828 0.641795 -0.122182 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.628619 0.628595 -0.128798 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.620906 0.628369 -0.105343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587782 0.630343 -0.116217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.59986 0.616917 -0.0993785 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.586526 0.605692 -0.116868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.676727 0.560805 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.689897 0.57563 -0.192477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.693998 0.575587 -0.168128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673115 0.585222 -0.177114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.672626 0.560848 -0.202114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.655844 0.57044 -0.186751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659456 0.546023 -0.187402 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.693509 0.551213 -0.193128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680339 0.536388 -0.178416 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.69761 0.55117 -0.16878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.602915 0.561576 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.602201 0.570049 -0.194773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.623084 0.560414 -0.185788 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.615021 0.582252 -0.177557 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582032 0.571211 -0.180578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.594852 0.583414 -0.163362 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582745 0.562738 -0.157397 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.590095 0.549372 -0.188808 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.590808 0.540899 -0.165627 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610978 0.539737 -0.179823 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.640408 0.498776 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.627785 0.478525 -0.166213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.615951 0.497935 -0.156576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.630799 0.484234 -0.142381 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.652241 0.479365 -0.169507 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.655255 0.485075 -0.145675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.664864 0.499616 -0.163165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.637394 0.493066 -0.183703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.650016 0.513317 -0.17736 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62556 0.512476 -0.174066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718878 0.553573 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.73992 0.563328 -0.108814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.720935 0.559693 -0.0934517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.719679 0.577348 -0.110668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.737863 0.557208 -0.132647 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.717623 0.571228 -0.1345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.716821 0.547453 -0.141116 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.739118 0.539553 -0.115431 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718076 0.529798 -0.1239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.720133 0.535918 -0.100068 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682558 0.491544 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.688647 0.474542 -0.0825505 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666351 0.485132 -0.0818993 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.686417 0.498226 -0.0759343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.704854 0.480953 -0.10004 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.702624 0.504637 -0.093424 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.698765 0.497955 -0.116879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.684788 0.46786 -0.106005 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678699 0.484862 -0.122844 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.662492 0.47845 -0.105354 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.687216 0.547112 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.690713 0.554862 -0.0274488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.667813 0.552739 -0.0364345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682694 0.570641 -0.0446649 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.710116 0.549235 -0.0416443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.702097 0.565014 -0.0588603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.706619 0.541484 -0.0648253 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.695235 0.531333 -0.0334138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.691738 0.523582 -0.0565949 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.672335 0.52921 -0.0423994 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.471405 0.471405 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.501645 0.501645 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.499795 0.519956 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.493653 0.523893 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.479397 0.509638 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507788 0.497708 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.48739 0.48739 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.509638 0.479397 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522043 0.511963 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523893 0.493653 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.515901 0.515901 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542955 0.490576 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.559233 0.507719 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539759 0.502501 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536564 0.514426 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.562428 0.495794 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539759 0.502501 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.54615 0.478651 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.565623 0.483869 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.549345 0.466726 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.54615 0.478651 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.490576 0.542955 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.483869 0.565623 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.466726 0.549345 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.478651 0.54615 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507719 0.559233 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.502501 0.539759 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.514426 0.536564 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.495794 0.562428 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.502501 0.539759 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.478651 0.54615 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.430095 0.482473 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.430434 0.489762 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.449569 0.477255 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.445366 0.500519 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.41096 0.49498 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.425893 0.505737 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.410622 0.487691 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.415162 0.471716 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.414824 0.464428 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434297 0.45921 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419026 0.523783 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.404771 0.538038 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.410297 0.515053 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.427756 0.532513 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4135 0.546768 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436486 0.541242 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.427756 0.532513 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396041 0.529309 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.410297 0.515053 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.401567 0.506323 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399854 0.452233 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.377186 0.45894 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396659 0.464158 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.393464 0.476083 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.380381 0.447015 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396659 0.464158 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40305 0.440308 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.383576 0.43509 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406245 0.428383 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40305 0.440308 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.482473 0.430095 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.48121 0.407271 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.464428 0.414824 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.487691 0.410622 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.499256 0.422542 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.505737 0.425893 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.500519 0.445366 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.475992 0.426744 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.477255 0.449569 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.45921 0.434297 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452233 0.399854 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.43509 0.383576 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.428383 0.406245 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.440308 0.40305 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.45894 0.377186 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.464158 0.396659 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.476083 0.393464 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.447015 0.380381 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.464158 0.396659 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.440308 0.40305 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523783 0.419026 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.538038 0.404771 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.515053 0.410297 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.532513 0.427756 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.546768 0.4135 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.541242 0.436486 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.532513 0.427756 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.529309 0.396041 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.515053 0.410297 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.506323 0.401567 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.607487 0.335322 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.659645 0.283164 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.672915 0.269894 -0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649528 0.275822 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666987 0.293281 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.683032 0.277236 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.677104 0.300624 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669762 0.290507 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665573 0.259777 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.652302 0.273047 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.642185 0.265705 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.603979 0.286452 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.592776 0.280905 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.580045 0.291679 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.59717 0.304484 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.61671 0.275678 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.621104 0.299257 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627912 0.281225 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.599585 0.262872 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610787 0.26842 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.586853 0.273647 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.656357 0.33883 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.661904 0.350033 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.638325 0.345639 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.65113 0.362764 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679937 0.343224 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669162 0.355956 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674389 0.332022 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.667131 0.326099 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.661584 0.314897 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643552 0.321705 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.663153 0.332034 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.685865 0.340177 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679339 0.33606 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669651 0.355123 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669679 0.336151 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.653465 0.351097 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.646968 0.328008 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679367 0.317089 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.656656 0.308945 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.672841 0.312971 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.664041 0.412036 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644745 0.40282 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644745 0.40282 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679161 0.396915 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674986 0.37258 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679161 0.396915 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674986 0.37258 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610996 0.384191 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.600701 0.391282 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.586561 0.382437 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.601681 0.367317 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625136 0.393037 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.626116 0.369071 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.635431 0.385946 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610016 0.408157 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62031 0.401066 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.595876 0.399312 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610775 0.279656 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.602632 0.256944 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587686 0.273158 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.606749 0.26347 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62572 0.263442 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.629838 0.269968 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.633864 0.286153 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.606658 0.27313 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.614801 0.295841 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591712 0.289344 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.558618 0.331813 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.551527 0.342108 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575492 0.341128 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.560372 0.356248 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534652 0.332793 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.543497 0.346933 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.541743 0.322499 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.549772 0.317673 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.556863 0.307378 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.573738 0.316693 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.530773 0.278768 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539989 0.298064 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539989 0.298064 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.545894 0.263648 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.570229 0.267823 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.545894 0.263648 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.570229 0.267823 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645066 0.554344 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.668521 0.610229 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.663938 0.633406 0.160875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.64522 0.617928 0.156428 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.65892 0.626429 0.137727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.687239 0.625707 0.158144 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682221 0.61873 0.134996 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.691822 0.602531 0.150967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673539 0.617206 0.176845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678123 0.59403 0.169668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.654822 0.601728 0.172398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.598918 0.585648 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.580238 0.601562 0.162601 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.581665 0.587563 0.142311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.59781 0.605914 0.14581 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.597491 0.599646 0.18016 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.615063 0.603999 0.163369 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616171 0.583732 0.177429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.581346 0.581295 0.176661 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600026 0.565381 0.173931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582773 0.567297 0.156372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.619787 0.622977 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.608008 0.63767 0.0834188 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.601637 0.613891 0.0853287 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.623239 0.620102 0.0751099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.626157 0.646756 0.0974792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.641389 0.629188 0.0891702 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.637936 0.632063 0.113449 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604555 0.640545 0.107698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616334 0.625852 0.123668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.598184 0.616766 0.109608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.714669 0.578925 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.729812 0.597914 0.109385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.711617 0.592661 0.125228 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.70632 0.602084 0.103028 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.732864 0.584178 0.0890951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.709372 0.588348 0.0827387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.71772 0.565189 0.0846485 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.738161 0.574755 0.111295 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.723017 0.555767 0.106848 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.719965 0.569503 0.127138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665934 0.591673 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.658095 0.605761 0.0319289 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.647455 0.607672 0.0541285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643855 0.58746 0.0404111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.676573 0.589763 0.0284303 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.662334 0.571461 0.0369125 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.684413 0.575674 0.0471312 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680174 0.609975 0.0421477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.688013 0.595887 0.0608487 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669535 0.611885 0.0643473 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.691213 0.52304 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.712906 0.511567 0.0596212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.699372 0.507717 0.079911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.710453 0.529503 0.0764123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.704747 0.526889 0.0420622 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.702295 0.544826 0.0588533 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.683054 0.538362 0.044793 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.693665 0.505104 0.0455609 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671972 0.516576 0.0482916 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680131 0.501254 0.0658506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.6938 0.541596 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.70016 0.547376 0.188567 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.676324 0.546319 0.182211 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.690564 0.564621 0.173728 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.717636 0.542652 0.171776 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.70804 0.559898 0.156937 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.711276 0.536873 0.148628 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.703396 0.524351 0.180258 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.697037 0.518571 0.157111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679561 0.523294 0.173902 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.670344 0.48571 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.67091 0.466887 0.138803 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.650637 0.480853 0.136894 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671107 0.490138 0.147112 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.690617 0.471745 0.124743 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.690815 0.494995 0.133052 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.690052 0.490567 0.108773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.670147 0.46246 0.114524 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669581 0.481283 0.0985541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649874 0.476425 0.112614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624197 0.517014 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.60809 0.516313 0.190293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.60089 0.524375 0.168094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616221 0.538029 0.181811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631397 0.508952 0.193792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.639529 0.530668 0.18531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.647504 0.509653 0.175091 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616065 0.495298 0.180075 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.632172 0.495999 0.161374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.608865 0.50336 0.157875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.607487 0.335322 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.629404 0.313405 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.626214 0.316595 0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.606941 0.318408 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624401 0.335868 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.648676 0.311592 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.646863 0.330864 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.651867 0.308402 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631217 0.294133 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.634407 0.290942 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.611945 0.295946 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.558618 0.331813 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.537564 0.341105 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.540585 0.338621 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.553391 0.355747 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555596 0.334297 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.571423 0.348938 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.57665 0.325005 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542791 0.317172 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.563845 0.30788 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.545813 0.314688 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610996 0.384191 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.601704 0.405245 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587062 0.389418 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604188 0.402224 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625637 0.400018 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.628121 0.396997 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.63493 0.378964 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.608512 0.387213 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.617804 0.366159 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593871 0.371386 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678274 0.316914 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.697473 0.31938 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674538 0.318074 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.681812 0.338182 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.701209 0.31822 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.685547 0.337022 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682009 0.315754 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.693935 0.298112 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674736 0.295646 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671 0.296805 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.664041 0.412036 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644745 0.40282 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644745 0.40282 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679161 0.396915 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674986 0.37258 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679161 0.396915 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674986 0.37258 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.656357 0.33883 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.675867 0.351035 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673232 0.348145 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.658111 0.363265 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.658993 0.341721 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.641237 0.353951 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.639482 0.329516 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674113 0.3266 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.654603 0.314396 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671477 0.32371 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625895 0.264535 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.623429 0.245336 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604627 0.260997 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624736 0.268271 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644697 0.248874 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.646004 0.271809 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.647163 0.268073 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624589 0.2416 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627055 0.2608 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.605787 0.257262 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.603979 0.286452 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.591774 0.266942 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.579544 0.284698 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.594664 0.269578 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616209 0.268696 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.619099 0.271332 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.628413 0.288206 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.601088 0.283817 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613293 0.303327 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.588858 0.301572 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.530773 0.278768 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539989 0.298064 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539989 0.298064 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.545894 0.263648 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.570229 0.267823 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.545894 0.263648 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.570229 0.267823 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.471405 0.471405 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.441164 0.501645 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.424703 0.518106 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.420089 0.505261 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.437548 0.522721 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.445778 0.51449 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.458623 0.519105 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.462239 0.498029 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.428319 0.497031 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.44478 0.48057 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.423704 0.484186 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399854 0.490576 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.382226 0.502679 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399854 0.490576 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.405389 0.511231 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.382226 0.502679 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.405389 0.511231 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399854 0.490576 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376691 0.482024 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39432 0.469922 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39432 0.469922 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452233 0.542955 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.44013 0.560583 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431578 0.53742 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452233 0.542955 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.460785 0.566118 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.472887 0.548489 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.472887 0.548489 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.44013 0.560583 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452233 0.542955 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431578 0.53742 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.512714 0.482473 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.51514 0.495905 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.492654 0.48988 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.506323 0.506323 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5352 0.488498 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.526383 0.498917 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.532774 0.475067 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.521531 0.472055 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.519105 0.458623 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.499045 0.46603 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523783 0.523783 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.527958 0.548119 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.508662 0.538903 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.508662 0.538903 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.543078 0.532998 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523783 0.523783 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.538903 0.508662 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.543078 0.532998 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.538903 0.508662 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523783 0.523783 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542955 0.452233 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.564273 0.4539 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542955 0.452233 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.548489 0.472887 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.564273 0.4539 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.548489 0.472887 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542955 0.452233 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.558738 0.433245 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.53742 0.431578 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.53742 0.431578 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.460336 0.430095 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.446904 0.427669 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436486 0.436486 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.45293 0.450155 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.470754 0.421278 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.47678 0.443764 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.484186 0.423704 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.454311 0.407609 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.467742 0.410035 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.443892 0.416426 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.490576 0.399854 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.488909 0.378536 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.469922 0.39432 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.490576 0.399854 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.509564 0.384071 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.511231 0.405389 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.511231 0.405389 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.488909 0.378536 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.490576 0.399854 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.469922 0.39432 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419026 0.419026 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.39469 0.414851 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.403906 0.434147 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.403906 0.434147 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409811 0.399731 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419026 0.419026 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434147 0.403906 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409811 0.399731 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434147 0.403906 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419026 0.419026 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643951 -0.172546 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER -0.835815 -0.157543 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.871646 -0.122136 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.871334 -0.102403 0.180258 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.850164 -0.113406 0.173902 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.862937 -0.100577 0.157111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.892817 -0.111133 0.171776 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.884419 -0.109307 0.148628 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.893129 -0.130866 0.156937 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.880044 -0.123961 0.188567 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.880356 -0.143694 0.173728 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.858873 -0.134964 0.182211 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.799077 -0.135649 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.781177 -0.120908 0.180075 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.778973 -0.13149 0.157875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.795477 -0.113462 0.161374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.801282 -0.125067 0.193792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.815582 -0.11762 0.175091 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.819182 -0.139808 0.18531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.784778 -0.143095 0.190293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.802678 -0.157836 0.181811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.782573 -0.153678 0.168094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.82339 -0.0854653 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.811594 -0.0654286 0.114524 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.80102 -0.0876595 0.112614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.820516 -0.0820122 0.0985541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.833964 -0.0632344 0.124743 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.842886 -0.079818 0.108773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.845761 -0.083271 0.133052 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.814468 -0.0688817 0.138803 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.826265 -0.0889183 0.147112 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.803895 -0.0911125 0.136894 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.908384 -0.14403 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.926643 -0.128672 0.111295 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.90826 -0.133221 0.127138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.904034 -0.1198 0.106848 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.926768 -0.139481 0.0890951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.904159 -0.130608 0.0846485 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.908508 -0.154838 0.0827387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.930993 -0.152902 0.109385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.912733 -0.16826 0.103028 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.912609 -0.157451 0.125228 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.860128 -0.107359 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.853284 -0.0905999 0.0455609 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.839638 -0.0940331 0.0658506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.840233 -0.111382 0.0482916 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.873773 -0.103926 0.0420622 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.860723 -0.124708 0.044793 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.880618 -0.120685 0.0588533 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.873178 -0.086577 0.0596212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.880022 -0.103336 0.0764123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.859532 -0.0900102 0.079911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.872552 -0.179437 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.894035 -0.188167 0.0421477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.885777 -0.195141 0.0643473 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.89378 -0.172046 0.0608487 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.880811 -0.172463 0.0284303 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.880556 -0.156342 0.0471312 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.859328 -0.163733 0.0369125 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.872807 -0.195558 0.0319289 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.851325 -0.186828 0.0404111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.864549 -0.202532 0.0541285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.884071 -0.194213 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.891905 -0.197746 0.176845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.867957 -0.193701 0.172398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.884286 -0.175383 0.169668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.908019 -0.198259 0.158144 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.900401 -0.175896 0.150967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.900186 -0.194726 0.134996 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.89169 -0.216576 0.160875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.883856 -0.213043 0.137727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.867741 -0.212531 0.156428 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.84824 -0.229621 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.843832 -0.25245 0.107698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.826426 -0.235043 0.109608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.846687 -0.233837 0.123668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.865646 -0.247028 0.0974792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.868501 -0.228415 0.113449 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.870053 -0.224198 0.0891702 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.845385 -0.248234 0.0834188 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.849792 -0.225404 0.0751099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.827978 -0.230827 0.0853287 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.811502 -0.207727 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.794108 -0.212743 0.176661 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.788345 -0.199907 0.156372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.802328 -0.189621 0.173931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.817265 -0.220563 0.18016 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.825486 -0.197441 0.177429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.83466 -0.215547 0.163369 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.803282 -0.230849 0.162601 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.820676 -0.225832 0.14581 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.797518 -0.218012 0.142311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643951 -0.172546 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.61371 -0.142305 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.597249 -0.125845 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.592635 -0.138689 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610094 -0.12123 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.618324 -0.12946 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631169 -0.124846 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.634785 -0.145921 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600865 -0.14692 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.617326 -0.163381 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.596251 -0.159765 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5724 -0.153374 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.554772 -0.141271 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5724 -0.153374 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.577935 -0.13272 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554772 -0.141271 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.577935 -0.13272 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5724 -0.153374 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.549237 -0.161926 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.566866 -0.174029 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.566866 -0.174029 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624779 -0.100996 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.612676 -0.0833673 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604124 -0.10653 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624779 -0.100996 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.633331 -0.0778329 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645433 -0.0954616 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645433 -0.0954616 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.612676 -0.0833673 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624779 -0.100996 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604124 -0.10653 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.68526 -0.161477 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.687686 -0.148046 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.6652 -0.154071 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678869 -0.137627 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.707746 -0.155452 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.698929 -0.145033 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.70532 -0.168883 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.694077 -0.171896 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.691651 -0.185327 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671591 -0.177921 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.696329 -0.120168 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.700504 -0.095832 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.681209 -0.105047 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.681209 -0.105047 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715624 -0.110952 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.696329 -0.120168 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.711449 -0.135288 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715624 -0.110952 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.711449 -0.135288 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.696329 -0.120168 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715501 -0.191718 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.736819 -0.190051 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715501 -0.191718 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.721035 -0.171063 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.736819 -0.190051 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.721035 -0.171063 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715501 -0.191718 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.731284 -0.210706 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.709966 -0.212373 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.709966 -0.212373 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.632882 -0.213855 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.61945 -0.216282 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.609032 -0.207465 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625476 -0.193796 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.6433 -0.222672 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649326 -0.200186 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.656732 -0.220246 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.626857 -0.236341 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.640288 -0.233915 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616438 -0.227525 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.663122 -0.244096 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.661455 -0.265414 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.642468 -0.249631 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.663122 -0.244096 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.68211 -0.25988 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.683777 -0.238562 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.683777 -0.238562 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.661455 -0.265414 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.663122 -0.244096 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.642468 -0.249631 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591572 -0.224924 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.567237 -0.2291 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.576452 -0.209804 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.576452 -0.209804 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582357 -0.24422 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591572 -0.224924 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.606693 -0.240045 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582357 -0.24422 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.606693 -0.240045 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591572 -0.224924 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.69376 0.0133465 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.674309 0.0838533 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.66171 0.103063 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.653258 0.0800983 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673446 0.0876683 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682761 0.106818 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.694497 0.0914233 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.69536 0.0876083 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.662574 0.0992478 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.675172 0.0800382 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.654121 0.0762832 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.604582 0.0446211 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627745 0.053173 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604582 0.0446211 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627745 0.053173 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.599047 0.0239663 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616676 0.0118635 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616676 0.0118635 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666287 0.0539145 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.662466 0.0547519 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660752 0.0332597 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682791 0.0439578 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.668 0.0754066 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.688325 0.0646126 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671821 0.0745692 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645962 0.0647085 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649783 0.0638711 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644249 0.0432164 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.745859 0.0646815 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.750021 0.0887955 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.729506 0.078459 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.732161 0.0813312 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.766375 0.075018 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.748514 0.0675537 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.762212 0.050904 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.763719 0.0721458 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.759557 0.0480318 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.743204 0.0618093 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.737837 0.0347427 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.747099 0.0542122 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.743371 0.0553974 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.7241 0.0550267 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.741565 0.0335575 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718566 0.0343719 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.732303 0.014088 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.760836 0.0339282 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.751574 0.0144587 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.757108 0.0351134 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.786629 -0.00415829 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.770845 0.0148294 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.786629 -0.00415829 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.770845 0.0148294 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.781094 -0.024813 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.759776 -0.02648 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.759776 -0.02648 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.701782 0.0432853 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.693716 0.0608821 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.677932 0.0496759 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.694884 0.0652402 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.717566 0.0544915 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718734 0.0588496 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.725632 0.0368947 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.700615 0.0389272 0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.708681 0.0213304 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.684831 0.027721 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.721234 -0.0272215 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.720593 -0.0310802 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.7 -0.0246945 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718114 -0.00820099 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.741827 -0.0336072 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.739347 -0.010728 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.742467 -0.0297485 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.723713 -0.0501007 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.724354 -0.046242 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.70312 -0.043715 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649684 -0.00804971 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.628657 -0.00328338 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.630031 0.000378614 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.642244 0.0152909 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.648309 -0.0117117 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.661896 0.00686255 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669336 -0.016478 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.636097 -0.026624 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.657124 -0.0313903 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.637471 -0.022962 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.835815 -0.157543 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.899353 -0.119969 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.909872 -0.0977075 -0.115431 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.891613 -0.104052 -0.100068 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.886771 -0.0997803 -0.1239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.917612 -0.113625 -0.132647 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.894512 -0.115698 -0.141116 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.907093 -0.135886 -0.1345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.922453 -0.117896 -0.108814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.911935 -0.140158 -0.110668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.904194 -0.124241 -0.0934517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.868703 -0.130205 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.867758 -0.11253 -0.0334138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.846864 -0.122142 -0.0423994 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.860854 -0.107566 -0.0565949 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.889596 -0.120593 -0.0416443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.882692 -0.115629 -0.0648253 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.890541 -0.138267 -0.0588603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.875606 -0.135168 -0.0274488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.876551 -0.152843 -0.0446649 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.854713 -0.14478 -0.0364345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.836885 -0.0844101 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.826973 -0.0627848 -0.106005 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.81296 -0.083104 -0.105354 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.830202 -0.0805529 -0.122844 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.850898 -0.0640908 -0.10004 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.854126 -0.0818589 -0.116879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.860809 -0.0857161 -0.093424 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.833656 -0.0666419 -0.0825505 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.843568 -0.0882673 -0.0759343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.819643 -0.0869612 -0.0818993 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.866465 -0.147308 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.876203 -0.130609 -0.193128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.879733 -0.128522 -0.16878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.857385 -0.124356 -0.178416 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.862935 -0.149395 -0.202114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.844117 -0.143141 -0.187402 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.853198 -0.166093 -0.186751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.885283 -0.153561 -0.192477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.875546 -0.170259 -0.177114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.888813 -0.151474 -0.168128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.803997 -0.111748 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.798532 -0.108311 -0.183703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.797989 -0.131037 -0.174066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.819589 -0.119537 -0.17736 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.80454 -0.0890219 -0.169507 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.825597 -0.100248 -0.163165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.810005 -0.0924597 -0.145675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.78294 -0.100522 -0.166213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.788405 -0.10396 -0.142381 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.782397 -0.123249 -0.156576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.802927 -0.184881 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.785723 -0.180723 -0.188808 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.798991 -0.161937 -0.179823 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.782104 -0.173028 -0.165627 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.78966 -0.203667 -0.180578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.786041 -0.195972 -0.157397 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.806864 -0.207825 -0.163362 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.806546 -0.192576 -0.194773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.82375 -0.196734 -0.177557 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.819813 -0.17379 -0.185788 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.898283 -0.193102 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.920038 -0.201143 -0.120537 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.900209 -0.201384 -0.105825 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.910616 -0.17991 -0.112168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.918112 -0.192861 -0.143718 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.90869 -0.171628 -0.135349 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.896357 -0.18482 -0.152187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.907705 -0.214335 -0.137375 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.88595 -0.206294 -0.145845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.887876 -0.214576 -0.122663 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.834745 -0.230676 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.824206 -0.252002 -0.116217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.810793 -0.231282 -0.116868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.827952 -0.234336 -0.0993785 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.848158 -0.251396 -0.122182 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.851905 -0.23373 -0.105343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.858698 -0.23007 -0.128798 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.830999 -0.248342 -0.139672 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.841538 -0.227016 -0.146288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.817586 -0.227621 -0.140323 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.867633 -0.203337 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.868948 -0.209658 -0.0385197 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.84746 -0.202239 -0.0481565 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.865773 -0.186008 -0.0448623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.889121 -0.210757 -0.0527151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.885946 -0.187106 -0.0590577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.887806 -0.204436 -0.0765474 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.870808 -0.226988 -0.0560094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.869493 -0.220667 -0.0798417 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.84932 -0.219569 -0.0656463 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.69376 0.0133465 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.668775 0.0631985 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.661946 0.0667914 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.65711 0.0452771 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680354 0.0511945 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673611 0.0847128 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.692019 0.069116 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680439 0.08112 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.650366 0.0787954 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.657195 0.0752026 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.64553 0.0572811 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.604582 0.0446211 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627745 0.053173 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604582 0.0446211 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627745 0.053173 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.599047 0.0239663 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616676 0.0118635 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616676 0.0118635 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649684 -0.00804971 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.634953 -0.000226782 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.655218 0.012605 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.635947 0.0122343 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.629419 -0.0208815 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.630413 -0.00842045 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644149 -0.0287044 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.64869 -0.0205108 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.66342 -0.0283337 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.668955 -0.00767898 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.740325 0.0440268 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.746894 0.0650768 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.739183 0.0653796 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.723153 0.0607735 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.748035 0.0437239 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.724295 0.0394207 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.741466 0.0226739 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.764065 0.04833 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.757496 0.02728 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.756355 0.0486329 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.721234 -0.0272215 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.732368 -0.0484665 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715699 -0.0478762 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.737738 -0.0371781 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.737902 -0.0278118 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.743272 -0.0165234 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.726768 -0.00656677 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715864 -0.0385099 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.70473 -0.0172649 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.699195 -0.0379196 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.786629 -0.00415829 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.770845 0.0148294 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.786629 -0.00415829 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.770845 0.0148294 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.781094 -0.024813 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.759776 -0.02648 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.759776 -0.02648 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.712851 0.0845947 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.706291 0.107813 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.689001 0.0909853 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.701434 0.0896851 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.730141 0.101422 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.725284 0.0832945 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.736701 0.0782041 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.717709 0.102723 -0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.724268 0.0795043 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.700418 0.0858949 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.737837 0.0347427 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.740802 0.0511556 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718185 0.043171 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.730397 0.0580833 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.760455 0.0427273 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.750049 0.0496549 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.757489 0.0263144 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.748242 0.027815 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.745277 0.0114021 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.725625 0.0198304 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666287 0.0539145 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.650692 0.0721382 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645053 0.0564414 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.663167 0.072935 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671925 0.0696112 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.6844 0.070408 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.68752 0.0513875 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.653812 0.0531177 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669407 0.034894 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.648173 0.0374209 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643951 -0.172546 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.674191 -0.142305 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.672341 -0.123995 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666199 -0.120057 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.651943 -0.134313 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680334 -0.146243 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659936 -0.156561 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682184 -0.164554 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.69459 -0.131987 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.696439 -0.150298 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.688447 -0.12805 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715501 -0.153374 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.731779 -0.136231 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.712305 -0.141449 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.70911 -0.129524 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.734974 -0.148156 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.712305 -0.141449 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718696 -0.165299 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.738169 -0.160081 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.721891 -0.177224 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718696 -0.165299 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.663122 -0.100996 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.656415 -0.0783272 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.639272 -0.0946054 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.651197 -0.0978007 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680265 -0.0847178 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.675047 -0.104191 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.686972 -0.107387 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.66834 -0.0815225 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.675047 -0.104191 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.651197 -0.0978007 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.602641 -0.161477 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.60298 -0.154189 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.622115 -0.166695 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.617912 -0.143431 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.583506 -0.148971 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.598439 -0.138214 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.583168 -0.156259 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587708 -0.172234 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58737 -0.179523 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.606843 -0.184741 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591572 -0.120168 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.577317 -0.105912 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582843 -0.128897 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600302 -0.111438 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.586046 -0.0971825 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.609032 -0.102708 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600302 -0.111438 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.568587 -0.114642 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582843 -0.128897 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.574113 -0.137627 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5724 -0.191718 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.549732 -0.185011 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.569205 -0.179793 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.56601 -0.167868 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.552927 -0.196936 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.569205 -0.179793 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575596 -0.203643 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.556122 -0.208861 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.578791 -0.215568 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575596 -0.203643 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.655019 -0.213855 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.653756 -0.23668 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.636974 -0.229127 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660237 -0.233329 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671802 -0.221409 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678283 -0.218058 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673065 -0.198584 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.648538 -0.217207 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649801 -0.194382 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631756 -0.209653 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624779 -0.244096 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.607636 -0.260374 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600929 -0.237705 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.612854 -0.240901 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631486 -0.266765 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.636704 -0.247291 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.648629 -0.250487 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.619561 -0.26357 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.636704 -0.247291 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.612854 -0.240901 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.696329 -0.224924 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.710584 -0.23918 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.687599 -0.233654 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.705059 -0.216195 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.719314 -0.23045 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.713788 -0.207465 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.705059 -0.216195 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.701855 -0.24791 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.687599 -0.233654 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678869 -0.242384 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.786005 -0.343435 8.51251e-17 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.82165 -0.392454 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.824791 -0.400556 0.065698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.802599 -0.392663 0.058292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.821021 -0.376528 0.0614442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.843843 -0.400347 0.0499923 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.840073 -0.376319 0.0457385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.840701 -0.392245 0.0268805 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.82542 -0.416482 0.0468401 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.822279 -0.40838 0.0237283 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.803228 -0.408589 0.0394341 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.753118 -0.370774 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.734271 -0.367981 0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.731279 -0.362711 0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.745269 -0.348136 0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.756109 -0.376044 0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.767107 -0.356199 0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.774956 -0.378837 0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.74212 -0.390619 0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.760966 -0.393412 0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.739128 -0.385349 0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.80984 -0.323622 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.80634 -0.308073 0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.786996 -0.316395 0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.802721 -0.300378 0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.829184 -0.315299 0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.825565 -0.307605 0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.832685 -0.330849 0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.813459 -0.331317 0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.81696 -0.346866 0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.794116 -0.339639 0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.854538 -0.365116 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.878086 -0.365674 -0.0104889 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.859887 -0.367962 0.00604126 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.863875 -0.346241 -0.00500196 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.872736 -0.362827 -0.0344251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.858526 -0.343394 -0.0289382 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.849188 -0.362269 -0.0418311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.868748 -0.384548 -0.0233819 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.8452 -0.38399 -0.0307879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.85055 -0.386837 -0.00685171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.842728 -0.296284 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.848999 -0.272611 0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.828835 -0.281616 0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.829121 -0.278432 -0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.862893 -0.287278 -0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.843015 -0.293099 -0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.856621 -0.310951 -0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.862606 -0.290462 0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.856335 -0.314135 0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.842441 -0.299468 0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.818893 -0.316097 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.819591 -0.297057 -0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.814956 -0.293153 -0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.79807 -0.304244 -0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.823527 -0.320001 -0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.802007 -0.327188 -0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.822829 -0.339041 -0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.840413 -0.30891 -0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.839716 -0.32795 -0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.835779 -0.305006 -0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.797815 -0.412267 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.793573 -0.436217 -0.0204376 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.776294 -0.419454 -0.0149506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.796968 -0.420728 -0.00151032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.815094 -0.42903 -0.0301783 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.818489 -0.413542 -0.0112511 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.819335 -0.405081 -0.0344321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.79442 -0.427756 -0.0436186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.798662 -0.403807 -0.0478724 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.777141 -0.410993 -0.0381316 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76217 -0.363249 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.747522 -0.356966 -0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.759239 -0.339469 -0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.740618 -0.352002 -0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.750453 -0.380746 -0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.743549 -0.375782 -0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.765101 -0.387029 -0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.769074 -0.368213 -0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.783722 -0.374496 -0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.780791 -0.350716 -0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.729282 -0.390587 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.704862 -0.392427 -0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.717401 -0.374248 -0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.714218 -0.373948 0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.716744 -0.408767 0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.726099 -0.390287 0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.741164 -0.406927 0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.719927 -0.409067 -0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.744347 -0.407227 -0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.732465 -0.390887 -0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.594141 -0.358439 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.542042 -0.409774 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.517869 -0.413579 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528508 -0.393219 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.525596 -0.395831 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.531404 -0.430134 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539131 -0.412386 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555577 -0.426328 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534315 -0.427522 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.558488 -0.423716 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.544953 -0.407161 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.504962 -0.327164 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528125 -0.318612 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504962 -0.327164 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528125 -0.318612 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.499428 -0.347819 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.517056 -0.359921 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.517056 -0.359921 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.550064 -0.379835 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.529037 -0.375068 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.530412 -0.371406 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542624 -0.356494 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.548689 -0.383497 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.562276 -0.364922 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.569716 -0.388263 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536477 -0.398409 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.557504 -0.403175 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.537852 -0.394747 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613592 -0.428945 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.612625 -0.451897 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593593 -0.436515 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.614807 -0.432663 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.632624 -0.444328 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.634806 -0.425094 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.633591 -0.421376 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.61141 -0.448179 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.612377 -0.425227 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.592379 -0.432797 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.621614 -0.399007 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.620974 -0.402865 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600381 -0.39648 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.618494 -0.379986 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.642207 -0.405392 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.639728 -0.382513 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.642848 -0.401533 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624094 -0.421886 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624734 -0.418027 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.603501 -0.4155 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.687009 -0.375943 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671225 -0.356956 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.687009 -0.375943 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671225 -0.356956 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.681475 -0.396598 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660156 -0.398265 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660156 -0.398265 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.586119 -0.388377 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.570335 -0.399584 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.562269 -0.381987 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.569167 -0.403942 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.594185 -0.405974 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593017 -0.410332 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.609969 -0.394768 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587286 -0.384019 -0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.60307 -0.372813 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.57922 -0.366422 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.638217 -0.337042 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.64748 -0.317573 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643752 -0.316388 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624481 -0.316758 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.641945 -0.338228 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.618946 -0.337413 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.632683 -0.357697 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.661216 -0.337857 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.651954 -0.357326 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.657489 -0.336672 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.566667 -0.317871 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.562847 -0.317033 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.561133 -0.338525 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.583171 -0.327827 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.568381 -0.296378 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.588706 -0.307172 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.572202 -0.297216 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.546343 -0.307077 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.550163 -0.307914 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.544629 -0.328569 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.594141 -0.358439 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.547576 -0.389119 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.525642 -0.386849 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528407 -0.379645 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.538964 -0.366733 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.544812 -0.396323 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.558134 -0.376207 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.566746 -0.398593 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534255 -0.409235 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.556189 -0.411505 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.537019 -0.402031 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.504962 -0.327164 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528125 -0.318612 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504962 -0.327164 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528125 -0.318612 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.499428 -0.347819 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.517056 -0.359921 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.517056 -0.359921 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.566667 -0.317871 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.551072 -0.299647 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.545434 -0.315344 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.563547 -0.29885 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.572306 -0.302174 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.584781 -0.301377 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587901 -0.320398 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554192 -0.318667 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.569787 -0.336891 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.548554 -0.334364 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.619127 -0.408291 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.617918 -0.415912 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.597788 -0.406911 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616439 -0.39183 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.639257 -0.417292 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.637778 -0.39321 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.640465 -0.409671 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.620605 -0.432372 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.621814 -0.424751 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600475 -0.423371 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.638217 -0.337042 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.641183 -0.320629 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.618565 -0.328614 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.630777 -0.313702 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660835 -0.329058 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.65043 -0.32213 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.65787 -0.345471 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.648623 -0.34397 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645657 -0.360383 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.626005 -0.351955 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.687009 -0.375943 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671225 -0.356956 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.687009 -0.375943 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671225 -0.356956 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.681475 -0.396598 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660156 -0.398265 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660156 -0.398265 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.57505 -0.429687 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.55776 -0.446515 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5512 -0.423296 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.562617 -0.428387 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58161 -0.452905 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.586467 -0.434777 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5989 -0.436077 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.570193 -0.447815 0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587483 -0.430987 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.563633 -0.424596 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.621614 -0.399007 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.632748 -0.420252 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.61608 -0.419661 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.638118 -0.408963 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.638282 -0.399597 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643653 -0.388308 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627149 -0.378352 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616244 -0.410295 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.60511 -0.38905 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.599576 -0.409705 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.550064 -0.379835 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.535334 -0.372012 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555599 -0.35918 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536327 -0.359551 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.529799 -0.392667 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.530793 -0.380205 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.54453 -0.400489 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.549071 -0.392296 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.563801 -0.400119 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.569335 -0.379464 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0996195 -0.371785 0.544331 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.220501 -0.393621 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.279642 -0.368601 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.299716 -0.354293 0.765035 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.292196 -0.366989 0.745238 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.279022 -0.347717 0.753281 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.287162 -0.355904 0.786236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.266468 -0.349329 0.774481 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267088 -0.370213 0.787639 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.300337 -0.375177 0.778193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.280263 -0.389485 0.779597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.292817 -0.387873 0.758396 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281062 -0.372464 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.289441 -0.362978 0.671279 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.270044 -0.378255 0.671155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267771 -0.35549 0.680442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30046 -0.357187 0.692603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.278789 -0.349699 0.701767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29208 -0.366673 0.713804 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.302733 -0.379952 0.683315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.294353 -0.389438 0.704516 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.283335 -0.395229 0.683192 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.238665 -0.321889 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.250544 -0.304702 0.71296 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.259421 -0.327715 0.714081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.238717 -0.32307 0.701455 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.229788 -0.298875 0.724997 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.21796 -0.317244 0.713492 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.217908 -0.316063 0.738155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250492 -0.30352 0.737623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.238612 -0.320707 0.750781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.259369 -0.326533 0.738744 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.219082 -0.389758 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.228779 -0.378635 0.823273 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.24293 -0.383364 0.8036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225483 -0.365937 0.802355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.20493 -0.385029 0.823149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.201634 -0.372331 0.802231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.195233 -0.396152 0.803352 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.222377 -0.402455 0.824394 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.21268 -0.413578 0.804597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236529 -0.407185 0.804721 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.178104 -0.343046 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.177083 -0.319723 0.771198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.198298 -0.332294 0.772443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.189464 -0.325124 0.750529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.156889 -0.330475 0.76191 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.16927 -0.335876 0.741241 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.157909 -0.353797 0.753867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165722 -0.337645 0.783824 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.166743 -0.360967 0.775781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.186938 -0.350216 0.785069 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.15994 -0.414778 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.147477 -0.412573 0.787754 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172167 -0.412448 0.787878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.15977 -0.39322 0.77859 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13525 -0.414903 0.766429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.147543 -0.39555 0.757266 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.147713 -0.417108 0.745229 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.147647 -0.434131 0.775717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.16011 -0.436336 0.754517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172338 -0.434006 0.775841 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.261479 -0.440333 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.282991 -0.443285 0.781591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282046 -0.4302 0.760673 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271991 -0.421181 0.781342 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.262424 -0.453417 0.790755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.251423 -0.431313 0.790506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.240911 -0.450466 0.779001 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.27248 -0.462437 0.770086 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250967 -0.459485 0.758332 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271534 -0.449353 0.749168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.202338 -0.465353 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.204606 -0.486123 0.746073 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.223366 -0.470107 0.744951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.202946 -0.464339 0.757577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183578 -0.481368 0.734036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.181918 -0.459584 0.745541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.18131 -0.460599 0.720878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.203998 -0.487137 0.72141 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.201729 -0.466367 0.708251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.222757 -0.471122 0.720288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.262898 -0.444196 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.285685 -0.449273 0.687835 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.27701 -0.426189 0.68659 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282528 -0.436139 0.708504 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271573 -0.46728 0.697123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268416 -0.454146 0.717791 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.248787 -0.462204 0.705165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.266055 -0.45733 0.675209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.243269 -0.452254 0.683251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.257381 -0.434246 0.673964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31427 -0.31427 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.367156 -0.277961 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.374298 -0.269898 0.485076 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.362218 -0.291334 0.487134 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.350338 -0.270045 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379235 -0.256525 0.505236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355276 -0.256671 0.511201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.372093 -0.264588 0.527454 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.391115 -0.277815 0.501329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.383973 -0.285878 0.523547 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379036 -0.299251 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31427 -0.31427 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.304189 -0.304189 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29042 -0.307879 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307879 -0.29042 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.328039 -0.31058 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.331729 -0.29681 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33812 -0.32066 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31058 -0.328039 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32066 -0.33812 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29681 -0.331729 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.297666 -0.252306 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.305995 -0.235688 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321516 -0.245915 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.312359 -0.259438 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282145 -0.242079 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.288509 -0.265828 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273816 -0.258696 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.291303 -0.228556 0.509559 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282974 -0.245173 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.306824 -0.238783 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367156 -0.277961 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.385852 -0.261966 0.57931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.38141 -0.278159 0.561208 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.36581 -0.259422 0.565115 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.371598 -0.261768 0.599471 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.351556 -0.259225 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.352901 -0.277764 0.601529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387198 -0.280504 0.595564 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.368501 -0.2965 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.382755 -0.296698 0.577461 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.297666 -0.252306 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.30415 -0.228803 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321516 -0.245915 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.306824 -0.238783 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2803 -0.235194 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282974 -0.245173 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273816 -0.258696 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.294992 -0.242326 0.603794 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.288509 -0.265828 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.312359 -0.259438 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31427 -0.31427 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.32435 -0.304189 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33812 -0.307879 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32066 -0.29042 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3005 -0.31058 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29681 -0.29681 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29042 -0.32066 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317959 -0.328039 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307879 -0.33812 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.331729 -0.331729 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.383759 -0.339925 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.407156 -0.334762 0.538366 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388696 -0.326552 0.524171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.392275 -0.31686 0.546597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.402218 -0.348135 0.558526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387337 -0.330233 0.566757 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.378821 -0.353299 0.564491 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.39864 -0.357827 0.536101 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.375243 -0.362991 0.542066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.380181 -0.349618 0.521905 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.330873 -0.376234 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.346394 -0.386461 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.354723 -0.369843 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.340031 -0.362711 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.322544 -0.392851 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316181 -0.369102 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307023 -0.382624 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337237 -0.399983 0.579103 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321715 -0.389757 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345565 -0.383366 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.330873 -0.376234 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.348239 -0.393346 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.354723 -0.369843 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345565 -0.383366 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324389 -0.399736 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321715 -0.389757 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307023 -0.382624 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.333547 -0.386213 0.484868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316181 -0.369102 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.340031 -0.362711 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.166275 -0.191247 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.20793 -0.130089 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.221102 -0.115471 0.637128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.220766 -0.13987 0.633356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.200597 -0.126388 0.628759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.208266 -0.10569 0.655816 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.187762 -0.116607 0.647447 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.195095 -0.120308 0.670732 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228435 -0.119172 0.660413 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.215264 -0.13379 0.675329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228099 -0.143571 0.656641 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.230419 -0.192135 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.243049 -0.18209 0.599717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.218634 -0.185251 0.597829 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.227721 -0.168159 0.613157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.254834 -0.188974 0.620293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.239506 -0.175043 0.633733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.242204 -0.199019 0.638981 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.245747 -0.206066 0.604965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.233117 -0.216111 0.623653 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.221332 -0.209227 0.603077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172673 -0.154295 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.180792 -0.15554 0.568278 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.19323 -0.166926 0.586315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.171251 -0.17557 0.579113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.160236 -0.142909 0.573526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.150694 -0.162939 0.584361 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.152117 -0.141663 0.596811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.182215 -0.134265 0.580727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.174096 -0.133019 0.604012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.194652 -0.145651 0.598764 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.143787 -0.129201 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.14887 -0.105335 0.692853 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167242 -0.121723 0.690969 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153943 -0.115741 0.671044 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.125414 -0.112813 0.690965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.130487 -0.123219 0.669156 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.120331 -0.136679 0.687193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.138714 -0.118795 0.71089 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13363 -0.142661 0.707118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.157086 -0.135183 0.709006 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.108529 -0.153407 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0995811 -0.130858 0.624003 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.113639 -0.134736 0.643928 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.123725 -0.135326 0.621398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0944715 -0.149528 0.608675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.118615 -0.153997 0.60607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.10342 -0.172078 0.613272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0843858 -0.148938 0.631205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0933338 -0.171487 0.635801 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0984435 -0.152816 0.65113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.102131 -0.190359 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0897843 -0.179968 0.711167 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.114103 -0.183804 0.713055 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.105492 -0.166467 0.697727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0778128 -0.186523 0.690591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0935207 -0.173022 0.677151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0901597 -0.196914 0.671903 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0864233 -0.20386 0.705919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0987702 -0.214251 0.687231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.110742 -0.207696 0.707807 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.201532 -0.167041 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.219088 -0.151829 0.724292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.221861 -0.163068 0.702483 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.205084 -0.14514 0.705088 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.19876 -0.155801 0.737733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.184756 -0.149113 0.718528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.181204 -0.171014 0.729364 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.215537 -0.173729 0.735128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.197981 -0.188942 0.726759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.218309 -0.184969 0.713318 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159877 -0.228199 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.167942 -0.229756 0.742607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183484 -0.223214 0.72457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.16569 -0.207683 0.731771 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.144336 -0.234741 0.737359 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.142084 -0.212668 0.726523 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13627 -0.233184 0.714074 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.162129 -0.250271 0.730157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.154064 -0.248714 0.706872 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.177671 -0.243729 0.71212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.224021 -0.229087 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.248268 -0.22829 0.686881 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2391 -0.216949 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.234532 -0.207937 0.689486 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.233189 -0.240428 0.702209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.219453 -0.220075 0.704814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.208942 -0.241225 0.697613 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.237756 -0.249439 0.67968 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.213509 -0.250236 0.675083 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228589 -0.238098 0.659755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058509 -0.451136 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0051487 -0.447081 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.01504 -0.435909 0.823149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0289993 -0.440694 0.803352 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0115452 -0.423265 0.802231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00881065 -0.442297 0.823273 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0123054 -0.429652 0.802355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0187019 -0.453468 0.8036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00864346 -0.459725 0.824394 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0012478 -0.470897 0.804721 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0226028 -0.46451 0.804597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0688765 -0.439178 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0903221 -0.426942 0.766429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0806307 -0.435083 0.745229 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0699989 -0.416328 0.757266 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.078568 -0.431037 0.787754 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0582447 -0.420423 0.77859 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0571224 -0.443274 0.787878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0891998 -0.449792 0.775717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0677542 -0.462029 0.775841 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0795084 -0.457933 0.754517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0172804 -0.386138 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0293677 -0.364644 0.76191 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0401449 -0.385352 0.753867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0213457 -0.375512 0.741241 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0065032 -0.36543 0.771198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00151881 -0.376298 0.750529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00558411 -0.386924 0.772443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0253024 -0.37527 0.783824 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0132151 -0.396764 0.785069 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0360796 -0.395978 0.775781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0578769 -0.459039 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0707378 -0.451803 0.786236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0461991 -0.454158 0.787639 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0561039 -0.435761 0.774481 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0824157 -0.456685 0.765035 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0677817 -0.440643 0.753281 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0695548 -0.46392 0.745238 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0725109 -0.475081 0.778193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.05965 -0.482316 0.758396 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0479721 -0.477435 0.779597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0457452 -0.398096 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0495643 -0.373728 0.724997 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0306825 -0.382672 0.738155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.030137 -0.383722 0.713492 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.064627 -0.389151 0.71296 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0451997 -0.399146 0.701455 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.060808 -0.41352 0.714081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0651725 -0.388102 0.737623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0613535 -0.41247 0.738744 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0462908 -0.397047 0.750781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0571747 -0.463094 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.081612 -0.459563 0.692603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0696122 -0.463589 0.713804 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0665888 -0.442243 0.701767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0691745 -0.459069 0.671279 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0541513 -0.441749 0.680442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0447373 -0.4626 0.671155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0721979 -0.480415 0.683315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0477607 -0.483946 0.683192 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0601982 -0.48444 0.704516 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00628079 -0.512079 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.000557006 -0.523883 0.790755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0165974 -0.51057 0.779001 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00208214 -0.49924 0.790506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0234352 -0.525392 0.781591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0249603 -0.500749 0.781342 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.029159 -0.513588 0.760673 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00475566 -0.536722 0.770086 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0104794 -0.524918 0.749168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0123987 -0.523409 0.758332 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00557859 -0.516134 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00154892 -0.540463 0.697123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0156462 -0.524673 0.705165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00538221 -0.52751 0.717791 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0227737 -0.531924 0.687835 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.026607 -0.518971 0.708504 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0268034 -0.507596 0.68659 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00174531 -0.529087 0.675209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00577498 -0.504759 0.673964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0154498 -0.513298 0.683251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0574471 -0.504176 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0817008 -0.508666 0.734036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0732807 -0.489545 0.720878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0722467 -0.488971 0.745541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0658672 -0.523298 0.746073 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0564131 -0.503602 0.757577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0416134 -0.518808 0.744951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0669012 -0.523872 0.72141 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0426474 -0.519382 0.720288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.058481 -0.504751 0.708251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0483751 -0.248762 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.0599222 -0.183785 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0522053 -0.160406 0.690965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0358698 -0.178533 0.687193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0513956 -0.171954 0.669156 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0762577 -0.165658 0.692853 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.075448 -0.177206 0.671044 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0839747 -0.189036 0.690969 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0607319 -0.172236 0.71089 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0684488 -0.195615 0.709006 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0443964 -0.190363 0.707118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00673113 -0.215921 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0258737 -0.20044 0.690591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0203763 -0.215612 0.671903 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00551963 -0.196602 0.677151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0122285 -0.200749 0.711167 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00812553 -0.196911 0.697727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00691403 -0.21623 0.713055 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0270852 -0.21976 0.705919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00794264 -0.235241 0.707807 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0215878 -0.234932 0.687231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0172857 -0.187119 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00705049 -0.176731 0.608675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00352517 -0.200733 0.613272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.025725 -0.192673 0.60607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.020811 -0.163117 0.624003 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0394855 -0.179058 0.621398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0310463 -0.173504 0.643928 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00138875 -0.171177 0.631205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00884647 -0.181564 0.65113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00491406 -0.195179 0.635801 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115028 -0.216626 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.127519 -0.195663 0.655816 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.108803 -0.201738 0.670732 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.104303 -0.194866 0.647447 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.133744 -0.210551 0.637128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.110528 -0.209754 0.628759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.121254 -0.231514 0.633356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.138245 -0.217423 0.660413 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.125754 -0.238386 0.656641 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.119529 -0.223497 0.675329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0723919 -0.21996 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0673141 -0.20388 0.573526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0609052 -0.198742 0.596811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0490355 -0.216456 0.584361 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0788008 -0.225098 0.568278 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0605222 -0.237674 0.579113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0838786 -0.241177 0.586315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0906706 -0.207384 0.580727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0957484 -0.223463 0.598764 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0842617 -0.202246 0.604012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.103481 -0.281603 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.126206 -0.291073 0.620293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.110246 -0.293457 0.638981 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.119897 -0.271345 0.633733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.119442 -0.279219 0.599717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.113132 -0.25949 0.613157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0967168 -0.269749 0.597829 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10979 -0.301332 0.604965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0870656 -0.291862 0.603077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0938302 -0.303716 0.623653 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0910116 -0.245428 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0942304 -0.234308 0.737733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0714204 -0.238704 0.729364 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0854464 -0.221514 0.718528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.113822 -0.241032 0.724292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.105038 -0.228237 0.705088 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.110603 -0.252152 0.702483 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0997955 -0.258223 0.735128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0965768 -0.269343 0.713318 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0769856 -0.262619 0.726759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0794645 -0.310405 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0817333 -0.324811 0.702209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0603366 -0.313378 0.697613 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0800146 -0.300317 0.704814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100861 -0.321838 0.686881 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0991425 -0.297345 0.689486 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0985923 -0.307433 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0811832 -0.334899 0.67968 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0789143 -0.320493 0.659755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0597864 -0.323466 0.675083 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0243582 -0.277564 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0076281 -0.275459 0.737359 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00142185 -0.270078 0.714074 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0167139 -0.255218 0.726523 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0305645 -0.282946 0.742607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0396503 -0.262704 0.731771 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0472946 -0.285051 0.72457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0152725 -0.297806 0.730157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0320026 -0.299911 0.71212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00906621 -0.292425 0.706872 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115031 -0.4293 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.178985 -0.424299 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.190929 -0.412497 0.599471 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.16674 -0.417001 0.601529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.174844 -0.400273 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.203175 -0.419795 0.57931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.18709 -0.407571 0.565115 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.191231 -0.431597 0.561208 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.195071 -0.436523 0.595564 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.183127 -0.448325 0.577461 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.170881 -0.441027 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115031 -0.4293 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.10495 -0.41922 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0911807 -0.42291 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10864 -0.40545 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.128801 -0.425611 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13249 -0.411841 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.138881 -0.435691 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111341 -0.44307 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.121421 -0.45315 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0975713 -0.44676 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.131634 -0.367336 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.12515 -0.343834 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107784 -0.360946 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.122476 -0.353814 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.149 -0.350225 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.146326 -0.360204 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.155484 -0.373727 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.134308 -0.357357 0.603794 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.140792 -0.380859 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.116942 -0.374468 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.178985 -0.424299 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.200165 -0.411775 0.505236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.189948 -0.415187 0.527454 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.179342 -0.399922 0.511201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.189202 -0.420888 0.485076 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.168379 -0.409035 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.168023 -0.433412 0.487134 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.199808 -0.436152 0.501329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.178629 -0.448677 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.189591 -0.439564 0.523547 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.131634 -0.367336 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.123305 -0.350719 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107784 -0.360946 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.116942 -0.374468 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.147155 -0.357109 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.140792 -0.380859 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.155484 -0.373727 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.137998 -0.343587 0.509559 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.146326 -0.360204 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.122476 -0.353814 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115031 -0.4293 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.125111 -0.41922 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.138881 -0.42291 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.121421 -0.40545 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.101261 -0.425611 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0975713 -0.411841 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0911807 -0.435691 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.11872 -0.44307 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10864 -0.45315 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13249 -0.44676 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.162382 -0.486264 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.174264 -0.502603 0.558526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.15142 -0.495376 0.564491 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.170327 -0.479659 0.566757 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.185226 -0.49349 0.538366 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.18129 -0.470546 0.546597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.173345 -0.477151 0.524171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.166319 -0.509207 0.536101 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.154437 -0.492868 0.521905 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.143475 -0.501981 0.542066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0984274 -0.491265 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0810612 -0.508376 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0745774 -0.484874 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0837352 -0.498397 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.104911 -0.514767 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107585 -0.504787 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.122277 -0.497655 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0957534 -0.501244 0.484868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.11312 -0.484132 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0892696 -0.477742 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0984274 -0.491265 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.082906 -0.501491 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0745774 -0.484874 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0892696 -0.477742 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.106756 -0.507882 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.11312 -0.484132 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.122277 -0.497655 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0920638 -0.515014 0.579103 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107585 -0.504787 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0837352 -0.498397 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153845 -0.574159 0.618405 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.202534 -0.612768 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.225282 -0.612732 0.668328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.22113 -0.60221 0.64638 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.212428 -0.591695 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.206686 -0.62329 0.680674 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.193832 -0.602253 0.679302 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183939 -0.623325 0.671072 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.215388 -0.633805 0.660098 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.192641 -0.63384 0.650495 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.211236 -0.623283 0.63815 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225396 -0.554987 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.243024 -0.542885 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225396 -0.554987 0.593714 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.219861 -0.534333 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.243024 -0.542885 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.219861 -0.534333 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225396 -0.554987 0.643096 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.248559 -0.563539 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23093 -0.575642 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23093 -0.575642 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.184086 -0.543919 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.200547 -0.527458 0.687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.205161 -0.540303 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.187702 -0.522843 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179472 -0.531074 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.166627 -0.526459 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.163011 -0.547535 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.196931 -0.548533 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.18047 -0.564994 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.201546 -0.561378 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.130984 -0.631939 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.132649 -0.643128 0.680674 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.152367 -0.631785 0.671072 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.133263 -0.618482 0.679302 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.111266 -0.643283 0.668328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.11188 -0.618637 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.109601 -0.632094 0.64638 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.130371 -0.656585 0.660098 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.128706 -0.645397 0.63815 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.150088 -0.645242 0.650495 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.112536 -0.56309 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.11011 -0.549659 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.132596 -0.555684 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.118927 -0.53924 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.09005 -0.557065 0.687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0988668 -0.546646 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0924762 -0.570497 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.103719 -0.573509 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.106145 -0.58694 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.126205 -0.579534 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0822954 -0.593331 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0609772 -0.591664 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0822954 -0.593331 0.643096 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.076761 -0.572676 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0609772 -0.591664 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.076761 -0.572676 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0822954 -0.593331 0.593714 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0665116 -0.612319 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0878298 -0.613986 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0878298 -0.613986 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172294 -0.643008 0.598245 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.189742 -0.660425 0.599616 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.196144 -0.636618 0.598245 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.185725 -0.645434 0.618821 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165892 -0.666816 0.599616 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161875 -0.651825 0.618821 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.148444 -0.649399 0.598245 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.17631 -0.657999 0.57904 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.158862 -0.640582 0.577669 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.182712 -0.634191 0.577669 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.123605 -0.6044 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.107144 -0.620861 0.549693 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.119989 -0.625475 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.102529 -0.608016 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.11076 -0.599785 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.106145 -0.58694 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.127221 -0.583324 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.128219 -0.617245 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.14468 -0.600784 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.141064 -0.621859 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.195155 -0.585228 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.203972 -0.574809 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.181486 -0.568784 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.201546 -0.561378 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.217641 -0.591253 0.549693 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.215215 -0.577822 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.208824 -0.601672 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.197581 -0.598659 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.188764 -0.609078 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.175095 -0.592634 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0329639 -0.552323 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0248832 -0.625877 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0316054 -0.646362 0.448652 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0478 -0.627981 0.445566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0287309 -0.625173 0.460998 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00868865 -0.644258 0.439705 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00581415 -0.623069 0.45205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00196644 -0.623773 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0277577 -0.647066 0.424272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0210355 -0.62658 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0439523 -0.628685 0.421186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0822954 -0.593331 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.105299 -0.593994 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100664 -0.582384 0.457911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0926585 -0.572783 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0869303 -0.604941 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0742898 -0.58373 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0639267 -0.604278 0.482603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0949359 -0.614541 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0719323 -0.613879 0.46131 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.090301 -0.602932 0.448964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0138144 -0.584567 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0177119 -0.584898 0.521479 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0364224 -0.580268 0.506047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0185345 -0.56353 0.509133 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00489609 -0.589197 0.512531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00407348 -0.567829 0.500186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00879364 -0.588867 0.488152 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0129918 -0.605935 0.509445 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00909422 -0.605605 0.485065 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0317022 -0.601305 0.494013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0244483 -0.584869 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0473753 -0.5935 0.402668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0308315 -0.595617 0.420874 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0399691 -0.57344 0.415013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0409921 -0.582752 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0335859 -0.562692 0.39372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0180651 -0.574121 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0318545 -0.604929 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00892756 -0.596298 0.384149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0153107 -0.607046 0.405442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0355172 -0.54356 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0495897 -0.530389 0.475494 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0261165 -0.53532 0.481355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.031221 -0.519442 0.463149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0589904 -0.538628 0.454201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0406217 -0.527681 0.441856 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0449178 -0.551799 0.438769 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0538859 -0.554507 0.472408 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0398133 -0.567678 0.456976 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0304127 -0.559438 0.478269 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0163676 -0.511316 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0212225 -0.48882 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00896145 -0.491256 0.408529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00194055 -0.497372 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0286287 -0.50888 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00546563 -0.517432 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0237738 -0.531375 0.383837 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0395307 -0.502764 0.396183 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0346758 -0.525259 0.40513 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0272696 -0.505199 0.417476 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0440327 -0.593633 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0604766 -0.607302 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0678827 -0.587242 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0604766 -0.607302 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0366265 -0.613693 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0366265 -0.613693 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0201827 -0.600023 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0440327 -0.593633 0.348047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0275889 -0.579964 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0514389 -0.573573 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0521134 -0.520079 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0542684 -0.523344 0.344961 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0591566 -0.541988 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0358996 -0.534291 0.357307 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0472252 -0.501435 0.353908 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0288565 -0.512382 0.366254 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0450702 -0.49817 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0704822 -0.509132 0.356995 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0683272 -0.505868 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0753703 -0.527777 0.372427 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.101445 -0.561087 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.118381 -0.551884 0.390945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0944221 -0.550745 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.103361 -0.536664 0.403291 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.125404 -0.562225 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.110383 -0.547006 0.424584 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.108468 -0.571428 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.116465 -0.576307 0.394032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0995293 -0.58551 0.409464 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0925065 -0.575168 0.388171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247614 -0.494808 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.313607 -0.494287 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.326876 -0.484182 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.302705 -0.488171 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.310432 -0.470513 0.39372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337778 -0.490299 0.402668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321334 -0.476629 0.415013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324509 -0.500404 0.420874 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.330051 -0.507957 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316783 -0.518062 0.405442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.305881 -0.511946 0.384149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.269833 -0.434629 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.279233 -0.426389 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.286276 -0.448298 0.383837 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263449 -0.445377 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.262789 -0.41272 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247006 -0.431707 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.253389 -0.420959 0.408529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.285616 -0.415641 0.396183 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.276216 -0.42388 0.417476 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29266 -0.43755 0.40513 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.302539 -0.452978 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.320401 -0.436971 0.454201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3148 -0.455413 0.438769 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29902 -0.436675 0.441856 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30814 -0.434535 0.475494 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.286759 -0.434239 0.463149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290278 -0.450543 0.481355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32392 -0.453274 0.472408 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.306057 -0.469281 0.478269 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318318 -0.471717 0.456976 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.291389 -0.554467 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.314604 -0.562288 0.439705 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.310183 -0.541186 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.306499 -0.542501 0.45205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29581 -0.575569 0.448652 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.287705 -0.555781 0.460998 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.272595 -0.567748 0.445566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.299494 -0.574255 0.424272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.276279 -0.566433 0.421186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.295073 -0.553152 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.28032 -0.513157 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.298839 -0.507811 0.512531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.302049 -0.505577 0.488152 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.287442 -0.489718 0.500186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.27711 -0.515392 0.521479 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.265714 -0.497299 0.509133 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.258591 -0.520738 0.506047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.291716 -0.531251 0.509445 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273198 -0.536597 0.494013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.294927 -0.529016 0.485065 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225396 -0.554987 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.227186 -0.567359 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.246777 -0.555283 0.482603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.227528 -0.54267 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.205805 -0.567063 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.206147 -0.542374 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.204014 -0.554691 0.457911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225054 -0.579676 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.223263 -0.567305 0.448964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.244644 -0.567601 0.46131 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.258683 -0.536117 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.275127 -0.549787 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282533 -0.529727 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275127 -0.549787 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.251277 -0.556177 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.251277 -0.556177 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.234833 -0.542508 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.258683 -0.536117 0.348047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.242239 -0.522448 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.266089 -0.516058 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.19269 -0.536638 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.17251 -0.549603 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191778 -0.549105 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.177908 -0.528912 0.424584 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.173421 -0.537136 0.390945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.178819 -0.516445 0.403291 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.193601 -0.524171 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.187292 -0.557329 0.394032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.207471 -0.544363 0.388171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.20656 -0.556831 0.409464 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.214908 -0.476459 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.209819 -0.457868 0.353908 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.210053 -0.453963 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2312 -0.458164 0.366254 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.214674 -0.480363 0.344961 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236055 -0.480659 0.357307 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.219763 -0.498954 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.193527 -0.476163 0.356995 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.198616 -0.494753 0.372427 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.193761 -0.472258 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172546 -0.643951 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER -0.157543 -0.835815 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.122136 -0.871646 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.102403 -0.871334 0.180258 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100577 -0.862937 0.157111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.113406 -0.850164 0.173902 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.123961 -0.880044 0.188567 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.134964 -0.858873 0.182211 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.143694 -0.880356 0.173728 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111133 -0.892817 0.171776 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.130866 -0.893129 0.156937 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.109307 -0.884419 0.148628 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0854653 -0.82339 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0654286 -0.811594 0.114524 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0820122 -0.820516 0.0985541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0876595 -0.80102 0.112614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0688817 -0.814468 0.138803 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0911125 -0.803895 0.136894 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0889183 -0.826265 0.147112 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0632344 -0.833964 0.124743 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.083271 -0.845761 0.133052 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.079818 -0.842886 0.108773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135649 -0.799077 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.120908 -0.781177 0.180075 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.113462 -0.795477 0.161374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13149 -0.778973 0.157875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.143095 -0.784778 0.190293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153678 -0.782573 0.168094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.157836 -0.802678 0.181811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.125067 -0.801282 0.193792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.139808 -0.819182 0.18531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.11762 -0.815582 0.175091 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.194213 -0.884071 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.197746 -0.891905 0.176845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.175383 -0.884286 0.169668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.193701 -0.867957 0.172398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216576 -0.89169 0.160875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.212531 -0.867741 0.156428 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.213043 -0.883856 0.137727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.198259 -0.908019 0.158144 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.194726 -0.900186 0.134996 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.175896 -0.900401 0.150967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207727 -0.811502 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.212743 -0.794108 0.176661 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.189621 -0.802328 0.173931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.199907 -0.788345 0.156372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.230849 -0.803282 0.162601 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.218012 -0.797518 0.142311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.225832 -0.820676 0.14581 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.220563 -0.817265 0.18016 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.215547 -0.83466 0.163369 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.197441 -0.825486 0.177429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.229621 -0.84824 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.25245 -0.843832 0.107698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.233837 -0.846687 0.123668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.235043 -0.826426 0.109608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.248234 -0.845385 0.0834188 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.230827 -0.827978 0.0853287 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.225404 -0.849792 0.0751099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.247028 -0.865646 0.0974792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.224198 -0.870053 0.0891702 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.228415 -0.868501 0.113449 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.14403 -0.908384 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.128672 -0.926643 0.111295 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.1198 -0.904034 0.106848 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.133221 -0.90826 0.127138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.152902 -0.930993 0.109385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.157451 -0.912609 0.125228 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.16826 -0.912733 0.103028 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.139481 -0.926768 0.0890951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.154838 -0.908508 0.0827387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.130608 -0.904159 0.0846485 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.179437 -0.872552 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.188167 -0.894035 0.0421477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172046 -0.89378 0.0608487 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.195141 -0.885777 0.0643473 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.195558 -0.872807 0.0319289 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.202532 -0.864549 0.0541285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.186828 -0.851325 0.0404111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172463 -0.880811 0.0284303 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.163733 -0.859328 0.0369125 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.156342 -0.880556 0.0471312 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107359 -0.860128 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0905999 -0.853284 0.0455609 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111382 -0.840233 0.0482916 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0940331 -0.839638 0.0658506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.086577 -0.873178 0.0596212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0900102 -0.859532 0.079911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.103336 -0.880022 0.0764123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.103926 -0.873773 0.0420622 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120685 -0.880618 0.0588533 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.124708 -0.860723 0.044793 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0133465 -0.69376 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0838533 -0.674309 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.103063 -0.66171 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0876683 -0.673446 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0800983 -0.653258 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0992478 -0.662574 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0762832 -0.654121 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0800382 -0.675172 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.106818 -0.682761 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0876083 -0.69536 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0914233 -0.694497 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0539145 -0.666287 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0547519 -0.662466 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0439578 -0.682791 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0332597 -0.660752 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0647085 -0.645962 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0432164 -0.644249 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0638711 -0.649783 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0754066 -0.668 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0745692 -0.671821 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0646126 -0.688325 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0446211 -0.604582 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.053173 -0.627745 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0239663 -0.599047 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0118635 -0.616676 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0118635 -0.616676 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0446211 -0.604582 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.053173 -0.627745 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0432853 -0.701782 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0608821 -0.693716 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0652402 -0.694884 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0496759 -0.677932 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0389272 -0.700615 0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.027721 -0.684831 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0213304 -0.708681 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0544915 -0.717566 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0368947 -0.725632 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0588496 -0.718734 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00804971 -0.649684 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00328338 -0.628657 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0152909 -0.642244 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.000378614 -0.630031 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.026624 -0.636097 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.022962 -0.637471 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0313903 -0.657124 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0117117 -0.648309 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.016478 -0.669336 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00686255 -0.661896 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0272215 -0.721234 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0310802 -0.720593 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00820099 -0.718114 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0246945 -0.7 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0501007 -0.723713 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.043715 -0.70312 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.046242 -0.724354 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0336072 -0.741827 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0297485 -0.742467 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.010728 -0.739347 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0646815 -0.745859 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0887955 -0.750021 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0813312 -0.732161 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.078459 -0.729506 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0721458 -0.763719 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0618093 -0.743204 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0480318 -0.759557 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.075018 -0.766375 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.050904 -0.762212 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0675537 -0.748514 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00415829 -0.786629 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0148294 -0.770845 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.024813 -0.781094 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.02648 -0.759776 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.02648 -0.759776 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00415829 -0.786629 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0148294 -0.770845 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0347427 -0.737837 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0542122 -0.747099 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0550267 -0.7241 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0553974 -0.743371 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0339282 -0.760836 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0351134 -0.757108 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0144587 -0.751574 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0335575 -0.741565 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.014088 -0.732303 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0343719 -0.718566 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172546 -0.643951 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.142305 -0.61371 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.125845 -0.597249 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.12123 -0.610094 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.138689 -0.592635 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.14692 -0.600865 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.159765 -0.596251 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.163381 -0.617326 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.12946 -0.618324 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.145921 -0.634785 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.124846 -0.631169 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100996 -0.624779 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0833673 -0.612676 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100996 -0.624779 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10653 -0.604124 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0833673 -0.612676 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10653 -0.604124 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100996 -0.624779 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0778329 -0.633331 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0954616 -0.645433 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0954616 -0.645433 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153374 -0.5724 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.141271 -0.554772 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13272 -0.577935 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153374 -0.5724 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.161926 -0.549237 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.174029 -0.566866 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.174029 -0.566866 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.141271 -0.554772 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153374 -0.5724 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13272 -0.577935 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.213855 -0.632882 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.216282 -0.61945 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.193796 -0.625476 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207465 -0.609032 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.236341 -0.626857 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.227525 -0.616438 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.233915 -0.640288 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.222672 -0.6433 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.220246 -0.656732 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.200186 -0.649326 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.224924 -0.591572 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.2291 -0.567237 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.209804 -0.576452 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.209804 -0.576452 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.24422 -0.582357 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.224924 -0.591572 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.240045 -0.606693 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.24422 -0.582357 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.240045 -0.606693 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.224924 -0.591572 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.244096 -0.663122 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.265414 -0.661455 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.244096 -0.663122 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.249631 -0.642468 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.265414 -0.661455 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.249631 -0.642468 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.244096 -0.663122 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.25988 -0.68211 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238562 -0.683777 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238562 -0.683777 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.161477 -0.68526 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.148046 -0.687686 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.137627 -0.678869 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.154071 -0.6652 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171896 -0.694077 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.177921 -0.671591 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.185327 -0.691651 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.155452 -0.707746 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.168883 -0.70532 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.145033 -0.698929 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.191718 -0.715501 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.190051 -0.736819 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171063 -0.721035 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.191718 -0.715501 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.210706 -0.731284 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.212373 -0.709966 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.212373 -0.709966 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.190051 -0.736819 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.191718 -0.715501 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171063 -0.721035 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120168 -0.696329 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.095832 -0.700504 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.105047 -0.681209 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.105047 -0.681209 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.110952 -0.715624 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120168 -0.696329 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135288 -0.711449 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.110952 -0.715624 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135288 -0.711449 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120168 -0.696329 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.343435 -0.786005 8.51251e-17 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.392454 -0.82165 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.400556 -0.824791 0.065698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376528 -0.821021 0.0614442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.392663 -0.802599 0.058292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.416482 -0.82542 0.0468401 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.408589 -0.803228 0.0394341 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40838 -0.822279 0.0237283 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.400347 -0.843843 0.0499923 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.392245 -0.840701 0.0268805 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376319 -0.840073 0.0457385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.323622 -0.80984 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.308073 -0.80634 0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.300378 -0.802721 0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316395 -0.786996 0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.331317 -0.813459 0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339639 -0.794116 0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.346866 -0.81696 0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.315299 -0.829184 0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.330849 -0.832685 0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307605 -0.825565 0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.370774 -0.753118 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.367981 -0.734271 0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.348136 -0.745269 0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362711 -0.731279 0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.390619 -0.74212 0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.385349 -0.739128 0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.393412 -0.760966 0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376044 -0.756109 0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.378837 -0.774956 0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356199 -0.767107 0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.412267 -0.797815 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.436217 -0.793573 -0.0204376 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.420728 -0.796968 -0.00151032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419454 -0.776294 -0.0149506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.427756 -0.79442 -0.0436186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.410993 -0.777141 -0.0381316 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.403807 -0.798662 -0.0478724 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.42903 -0.815094 -0.0301783 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.405081 -0.819335 -0.0344321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.413542 -0.818489 -0.0112511 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.390587 -0.729282 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.392427 -0.704862 -0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.373948 -0.714218 0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.374248 -0.717401 -0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409067 -0.719927 -0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.390887 -0.732465 -0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.407227 -0.744347 -0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.408767 -0.716744 0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406927 -0.741164 0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.390287 -0.726099 0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.363249 -0.76217 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.356966 -0.747522 -0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.352002 -0.740618 -0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339469 -0.759239 -0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.368213 -0.769074 -0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.350716 -0.780791 -0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.374496 -0.783722 -0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.380746 -0.750453 -0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.387029 -0.765101 -0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.375782 -0.743549 -0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.365116 -0.854538 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.365674 -0.878086 -0.0104889 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.346241 -0.863875 -0.00500196 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.367962 -0.859887 0.00604126 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.384548 -0.868748 -0.0233819 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.386837 -0.85055 -0.00685171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.38399 -0.8452 -0.0307879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362827 -0.872736 -0.0344251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362269 -0.849188 -0.0418311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.343394 -0.858526 -0.0289382 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316097 -0.818893 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.297057 -0.819591 -0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.304244 -0.79807 -0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.293153 -0.814956 -0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.30891 -0.840413 -0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.305006 -0.835779 -0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.32795 -0.839716 -0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.320001 -0.823527 -0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339041 -0.822829 -0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327188 -0.802007 -0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.296284 -0.842728 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.272611 -0.848999 0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.278432 -0.829121 -0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.281616 -0.828835 0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.290462 -0.862606 0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.299468 -0.842441 0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.314135 -0.856335 0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.287278 -0.862893 -0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.310951 -0.856621 -0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.293099 -0.843015 -0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.358439 -0.594141 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.389119 -0.547576 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.386849 -0.525642 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.366733 -0.538964 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.379645 -0.528407 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409235 -0.534255 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.402031 -0.537019 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.411505 -0.556189 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396323 -0.544812 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398593 -0.566746 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376207 -0.558134 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.317871 -0.566667 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.299647 -0.551072 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.29885 -0.563547 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.315344 -0.545434 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.318667 -0.554192 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.334364 -0.548554 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.336891 -0.569787 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.302174 -0.572306 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.320398 -0.587901 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.301377 -0.584781 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.327164 -0.504962 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.318612 -0.528125 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.347819 -0.499428 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.359921 -0.517056 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.359921 -0.517056 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327164 -0.504962 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.318612 -0.528125 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.429687 -0.57505 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.446515 -0.55776 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.428387 -0.562617 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.423296 -0.5512 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.447815 -0.570193 0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.424596 -0.563633 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.430987 -0.587483 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452905 -0.58161 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436077 -0.5989 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434777 -0.586467 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.379835 -0.550064 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.372012 -0.535334 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.359551 -0.536327 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.35918 -0.555599 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.392296 -0.549071 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.379464 -0.569335 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.400119 -0.563801 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.392667 -0.529799 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.400489 -0.54453 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.380205 -0.530793 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399007 -0.621614 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.420252 -0.632748 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.408963 -0.638118 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419661 -0.61608 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.410295 -0.616244 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409705 -0.599576 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.38905 -0.60511 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399597 -0.638282 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.378352 -0.627149 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.388308 -0.643653 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.408291 -0.619127 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.415912 -0.617918 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39183 -0.616439 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406911 -0.597788 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.432372 -0.620605 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.423371 -0.600475 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.424751 -0.621814 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.417292 -0.639257 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409671 -0.640465 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39321 -0.637778 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.375943 -0.687009 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356956 -0.671225 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396598 -0.681475 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398265 -0.660156 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398265 -0.660156 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.375943 -0.687009 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356956 -0.671225 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337042 -0.638217 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.320629 -0.641183 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.313702 -0.630777 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.328614 -0.618565 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.34397 -0.648623 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.351955 -0.626005 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.360383 -0.645657 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.329058 -0.660835 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.345471 -0.65787 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.32213 -0.65043 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.358439 -0.594141 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.409774 -0.542042 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.413579 -0.517869 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.395831 -0.525596 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.393219 -0.528508 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.427522 -0.534315 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.407161 -0.544953 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.423716 -0.558488 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.430134 -0.531404 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.426328 -0.555577 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.412386 -0.539131 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.379835 -0.550064 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.375068 -0.529037 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356494 -0.542624 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.371406 -0.530412 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398409 -0.536477 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.394747 -0.537852 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.403175 -0.557504 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.383497 -0.548689 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.388263 -0.569716 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.364922 -0.562276 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.327164 -0.504962 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.318612 -0.528125 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.347819 -0.499428 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.359921 -0.517056 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.359921 -0.517056 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327164 -0.504962 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.318612 -0.528125 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.388377 -0.586119 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.399584 -0.570335 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.403942 -0.569167 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.381987 -0.562269 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.384019 -0.587286 -0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.366422 -0.57922 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.372813 -0.60307 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.405974 -0.594185 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.394768 -0.609969 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.410332 -0.593017 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.317871 -0.566667 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.317033 -0.562847 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327827 -0.583171 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.338525 -0.561133 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307077 -0.546343 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.328569 -0.544629 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307914 -0.550163 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.296378 -0.568381 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.297216 -0.572202 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307172 -0.588706 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337042 -0.638217 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.317573 -0.64748 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316758 -0.624481 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316388 -0.643752 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337857 -0.661216 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.336672 -0.657489 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.357326 -0.651954 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.338228 -0.641945 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.357697 -0.632683 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337413 -0.618946 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.428945 -0.613592 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.451897 -0.612625 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.432663 -0.614807 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436515 -0.593593 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.448179 -0.61141 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.432797 -0.592379 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.425227 -0.612377 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.444328 -0.632624 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.421376 -0.633591 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.425094 -0.634806 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.375943 -0.687009 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356956 -0.671225 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396598 -0.681475 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398265 -0.660156 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398265 -0.660156 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.375943 -0.687009 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356956 -0.671225 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399007 -0.621614 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.402865 -0.620974 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.379986 -0.618494 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39648 -0.600381 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.421886 -0.624094 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4155 -0.603501 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.418027 -0.624734 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.405392 -0.642207 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.401533 -0.642848 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.382513 -0.639728 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.157543 -0.835815 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.119969 -0.899353 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0977075 -0.909872 -0.115431 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0997803 -0.886771 -0.1239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.104052 -0.891613 -0.100068 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.117896 -0.922453 -0.108814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.124241 -0.904194 -0.0934517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.140158 -0.911935 -0.110668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.113625 -0.917612 -0.132647 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135886 -0.907093 -0.1345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115698 -0.894512 -0.141116 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0844101 -0.836885 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0627848 -0.826973 -0.106005 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0805529 -0.830202 -0.122844 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.083104 -0.81296 -0.105354 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0666419 -0.833656 -0.0825505 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0869612 -0.819643 -0.0818993 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0882673 -0.843568 -0.0759343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0640908 -0.850898 -0.10004 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0857161 -0.860809 -0.093424 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0818589 -0.854126 -0.116879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.130205 -0.868703 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.11253 -0.867758 -0.0334138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107566 -0.860854 -0.0565949 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.122142 -0.846864 -0.0423994 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135168 -0.875606 -0.0274488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.14478 -0.854713 -0.0364345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.152843 -0.876551 -0.0446649 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120593 -0.889596 -0.0416443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.138267 -0.890541 -0.0588603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115629 -0.882692 -0.0648253 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.193102 -0.898283 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.201143 -0.920038 -0.120537 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.17991 -0.910616 -0.112168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.201384 -0.900209 -0.105825 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.214335 -0.907705 -0.137375 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.214576 -0.887876 -0.122663 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.206294 -0.88595 -0.145845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.192861 -0.918112 -0.143718 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.18482 -0.896357 -0.152187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171628 -0.90869 -0.135349 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.203337 -0.867633 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.209658 -0.868948 -0.0385197 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.186008 -0.865773 -0.0448623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.202239 -0.84746 -0.0481565 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.226988 -0.870808 -0.0560094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.219569 -0.84932 -0.0656463 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.220667 -0.869493 -0.0798417 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.210757 -0.889121 -0.0527151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.204436 -0.887806 -0.0765474 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.187106 -0.885946 -0.0590577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.230676 -0.834745 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.252002 -0.824206 -0.116217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.234336 -0.827952 -0.0993785 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.231282 -0.810793 -0.116868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.248342 -0.830999 -0.139672 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.227621 -0.817586 -0.140323 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.227016 -0.841538 -0.146288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.251396 -0.848158 -0.122182 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.23007 -0.858698 -0.128798 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.23373 -0.851905 -0.105343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.147308 -0.866465 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.130609 -0.876203 -0.193128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.124356 -0.857385 -0.178416 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.128522 -0.879733 -0.16878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153561 -0.885283 -0.192477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.151474 -0.888813 -0.168128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.170259 -0.875546 -0.177114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.149395 -0.862935 -0.202114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.166093 -0.853198 -0.186751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.143141 -0.844117 -0.187402 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.184881 -0.802927 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.180723 -0.785723 -0.188808 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.173028 -0.782104 -0.165627 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.161937 -0.798991 -0.179823 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.192576 -0.806546 -0.194773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.17379 -0.819813 -0.185788 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.196734 -0.82375 -0.177557 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.203667 -0.78966 -0.180578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207825 -0.806864 -0.163362 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.195972 -0.786041 -0.157397 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111748 -0.803997 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.108311 -0.798532 -0.183703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.119537 -0.819589 -0.17736 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.131037 -0.797989 -0.174066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100522 -0.78294 -0.166213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.123249 -0.782397 -0.156576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10396 -0.788405 -0.142381 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0890219 -0.80454 -0.169507 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0924597 -0.810005 -0.145675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100248 -0.825597 -0.163165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172546 -0.643951 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.202787 -0.61371 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.200937 -0.595399 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.194794 -0.591462 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.180539 -0.605717 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.208929 -0.617647 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.188531 -0.627965 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.210779 -0.635958 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.223185 -0.603392 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.225035 -0.621702 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.217042 -0.599454 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.244096 -0.624779 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.260374 -0.607636 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.240901 -0.612854 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.237705 -0.600929 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.26357 -0.619561 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.240901 -0.612854 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.247291 -0.636704 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.266765 -0.631486 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.250487 -0.648629 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.247291 -0.636704 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.191718 -0.5724 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.185011 -0.549732 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.167868 -0.56601 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.179793 -0.569205 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.208861 -0.556122 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.203643 -0.575596 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.215568 -0.578791 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.196936 -0.552927 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.203643 -0.575596 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.179793 -0.569205 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.131237 -0.632882 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.131575 -0.625593 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.15071 -0.6381 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.146508 -0.614836 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.112102 -0.620375 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.127034 -0.609618 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111763 -0.627664 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.116304 -0.643639 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115965 -0.650927 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135439 -0.656145 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120168 -0.591572 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.105912 -0.577317 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111438 -0.600302 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.128897 -0.582843 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.114642 -0.568587 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.137627 -0.574113 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.128897 -0.582843 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0971825 -0.586046 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111438 -0.600302 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.102708 -0.609032 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100996 -0.663122 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0783272 -0.656415 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0978007 -0.651197 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0946054 -0.639272 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0815225 -0.66834 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0978007 -0.651197 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.104191 -0.675047 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0847178 -0.680265 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107387 -0.686972 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.104191 -0.675047 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.183615 -0.68526 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.182351 -0.708085 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.165569 -0.700531 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.188833 -0.704733 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.200397 -0.692813 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.206879 -0.689462 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.201661 -0.669989 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.177134 -0.688611 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.178397 -0.665787 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.160351 -0.681058 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153374 -0.715501 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.136231 -0.731779 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.129524 -0.70911 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.141449 -0.712305 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.160081 -0.738169 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.165299 -0.718696 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.177224 -0.721891 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.148156 -0.734974 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.165299 -0.718696 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.141449 -0.712305 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.224924 -0.696329 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.23918 -0.710584 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216195 -0.705059 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.233654 -0.687599 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.24791 -0.701855 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.242384 -0.678869 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.233654 -0.687599 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.23045 -0.719314 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216195 -0.705059 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207465 -0.713788 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0133465 -0.69376 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0631985 -0.668775 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0667914 -0.661946 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0511945 -0.680354 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0452771 -0.65711 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0787954 -0.650366 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0572811 -0.64553 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0752026 -0.657195 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0847128 -0.673611 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.08112 -0.680439 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.069116 -0.692019 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00804971 -0.649684 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.000226782 -0.634953 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0122343 -0.635947 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.012605 -0.655218 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0205108 -0.64869 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00767898 -0.668955 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0283337 -0.66342 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0208815 -0.629419 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0287044 -0.644149 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00842045 -0.630413 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0446211 -0.604582 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.053173 -0.627745 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0239663 -0.599047 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0118635 -0.616676 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0118635 -0.616676 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0446211 -0.604582 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.053173 -0.627745 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0845947 -0.712851 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.107813 -0.706291 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0896851 -0.701434 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0909853 -0.689001 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.102723 -0.717709 -0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0858949 -0.700418 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0795043 -0.724268 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.101422 -0.730141 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0782041 -0.736701 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0832945 -0.725284 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0539145 -0.666287 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0721382 -0.650692 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.072935 -0.663167 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0564414 -0.645053 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0531177 -0.653812 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0374209 -0.648173 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.034894 -0.669407 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0696112 -0.671925 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0513875 -0.68752 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.070408 -0.6844 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0347427 -0.737837 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0511556 -0.740802 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0580833 -0.730397 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.043171 -0.718185 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.027815 -0.748242 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0198304 -0.725625 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0114021 -0.745277 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0427273 -0.760455 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0263144 -0.757489 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0496549 -0.750049 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0440268 -0.740325 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0650768 -0.746894 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0607735 -0.723153 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0653796 -0.739183 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.04833 -0.764065 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0486329 -0.756355 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.02728 -0.757496 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0437239 -0.748035 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0226739 -0.741466 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0394207 -0.724295 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00415829 -0.786629 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0148294 -0.770845 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.024813 -0.781094 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.02648 -0.759776 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.02648 -0.759776 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00415829 -0.786629 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0148294 -0.770845 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0272215 -0.721234 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0484665 -0.732368 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0371781 -0.737738 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0478762 -0.715699 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0385099 -0.715864 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0379196 -0.699195 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0172649 -0.70473 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0278118 -0.737902 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00656677 -0.726768 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0165234 -0.743272 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.471405 -0.471405 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.690426 -0.508983 1.83812e-16 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.755941 -0.484794 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.767658 -0.47411 -0.0436186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.749038 -0.489758 -0.0478724 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.744501 -0.467528 -0.0381316 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.774562 -0.469146 -0.0204376 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.751405 -0.462564 -0.0149506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.762845 -0.47983 -0.00151032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.779098 -0.491377 -0.0301783 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.767382 -0.502061 -0.0112511 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.760478 -0.507025 -0.0344321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.695668 -0.478434 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.703418 -0.481931 -0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.716184 -0.491475 -0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.694124 -0.500827 -0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.682902 -0.46889 -0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.673608 -0.487786 -0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675152 -0.465393 -0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.704962 -0.459538 -0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.697211 -0.456041 -0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.717727 -0.469082 -0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.7029 -0.436283 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.714226 -0.418941 -0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.724842 -0.44101 -0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.704751 -0.43889 -0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.692283 -0.414215 -0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.682808 -0.434163 -0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.680957 -0.431557 0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.712374 -0.416335 0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.701048 -0.433677 0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.722991 -0.438403 0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.7507 -0.515343 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.773394 -0.506594 0.0468401 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.764807 -0.507924 0.0237283 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.755462 -0.491321 0.0394341 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759287 -0.514012 0.065698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.741355 -0.49874 0.058292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.736593 -0.522762 0.0614442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.768632 -0.530616 0.0499923 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.745938 -0.539365 0.0457385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.760045 -0.531946 0.0268805 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.697658 -0.466832 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.709346 -0.447385 0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721188 -0.46231 0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.703286 -0.447429 0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.685816 -0.451907 0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.679757 -0.451951 0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674129 -0.471354 0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.703718 -0.466788 0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.692031 -0.486235 0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.71556 -0.481713 0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.685185 -0.539531 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.693658 -0.538818 0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.708875 -0.534075 0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.691194 -0.517905 0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669969 -0.544274 0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.667505 -0.523361 0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.661495 -0.544988 0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.687649 -0.560445 0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.679176 -0.561158 0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.702866 -0.555702 0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.743468 -0.557494 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.767402 -0.560084 -0.0233819 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.755145 -0.53997 -0.0307879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.760285 -0.543179 -0.00685171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.755725 -0.577608 -0.0104889 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.748608 -0.560703 0.00604126 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.731791 -0.575017 -0.00500196 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.750585 -0.574398 -0.0344251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.726651 -0.571808 -0.0289382 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.738328 -0.554284 -0.0418311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.677953 -0.581682 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.682851 -0.601808 0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.700216 -0.58454 0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.680568 -0.579842 0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.660588 -0.59895 0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.658304 -0.576984 0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.65569 -0.578824 -0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.680237 -0.603648 -0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675339 -0.583522 -0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.697602 -0.58638 -0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.683194 -0.551134 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.687731 -0.573364 -0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.703871 -0.56324 -0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.682033 -0.571303 -0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.667055 -0.561258 -0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.661356 -0.559196 -0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.662518 -0.539027 -0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.688893 -0.553195 -0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.684356 -0.530964 -0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.705033 -0.543071 -0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607487 -0.335322 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.629404 -0.313405 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.626214 -0.316595 -0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624401 -0.335868 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.606941 -0.318408 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.631217 -0.294133 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.611945 -0.295946 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.634407 -0.290942 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.648676 -0.311592 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.651867 -0.308402 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.646863 -0.330864 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.610996 -0.384191 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.623201 -0.403702 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.635431 -0.385946 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62031 -0.401066 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.598766 -0.401947 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.595876 -0.399312 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.586561 -0.382437 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.613886 -0.386827 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.601681 -0.367317 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626116 -0.369071 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.558618 -0.331813 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.539107 -0.319608 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.541743 -0.322499 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.556863 -0.307378 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555982 -0.328923 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.573738 -0.316693 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.575492 -0.341128 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.540862 -0.344043 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.560372 -0.356248 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.543497 -0.346933 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.625895 -0.264535 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.637402 -0.248969 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.646193 -0.271807 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.625088 -0.268363 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.617105 -0.241698 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.604791 -0.261092 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605598 -0.257264 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.638209 -0.245142 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626702 -0.260708 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.647 -0.267979 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.550934 -0.258608 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570229 -0.267823 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570229 -0.267823 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.535813 -0.273728 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539989 -0.298064 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.535813 -0.273728 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539989 -0.298064 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.603979 -0.286452 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.613271 -0.265398 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627912 -0.281225 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.610787 -0.26842 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.589337 -0.270625 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.586853 -0.273647 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.580045 -0.291679 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.606463 -0.283431 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.59717 -0.304484 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.621104 -0.299257 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.678274 -0.316914 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.69384 -0.305407 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674446 -0.317721 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671002 -0.296616 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.697667 -0.3046 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.67483 -0.295809 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.682101 -0.316107 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.701111 -0.325704 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.685545 -0.337211 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.681717 -0.338018 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.656357 -0.33883 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.677411 -0.329538 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674389 -0.332022 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.661584 -0.314897 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659378 -0.336346 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.643552 -0.321705 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.638325 -0.345639 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.672184 -0.353472 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.65113 -0.362764 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669162 -0.355956 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.684201 -0.391875 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674986 -0.37258 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674986 -0.37258 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669081 -0.406996 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644745 -0.40282 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669081 -0.406996 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644745 -0.40282 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607487 -0.335322 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.659645 -0.283164 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.672915 -0.269894 0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.666987 -0.293281 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.649528 -0.275822 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665573 -0.259777 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.642185 -0.265705 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.652302 -0.273047 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.683032 -0.277236 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669762 -0.290507 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.677104 -0.300624 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.656357 -0.33883 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.663448 -0.328536 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639482 -0.329516 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.654603 -0.314396 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.680322 -0.33785 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671477 -0.32371 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.673232 -0.348145 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665202 -0.35297 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.658111 -0.363265 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.641237 -0.353951 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.603979 -0.286452 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.614273 -0.279361 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.628413 -0.288206 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.613293 -0.303327 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.589839 -0.277607 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.588858 -0.301572 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.579544 -0.284698 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.604959 -0.262487 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.594664 -0.269578 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.619099 -0.271332 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.610775 -0.279656 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.621535 -0.258061 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.634468 -0.275921 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616678 -0.264057 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.597842 -0.261795 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.592985 -0.267791 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.587082 -0.28339 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.615632 -0.27366 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.604872 -0.295255 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.628565 -0.29152 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.550934 -0.258608 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570229 -0.267823 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570229 -0.267823 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.535813 -0.273728 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539989 -0.298064 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.535813 -0.273728 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539989 -0.298064 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.558618 -0.331813 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.55307 -0.320611 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.57665 -0.325005 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.563845 -0.30788 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.535038 -0.327419 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.545813 -0.314688 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.540585 -0.338621 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.547843 -0.344544 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.553391 -0.355747 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.571423 -0.348938 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663153 -0.332034 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.684748 -0.321274 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.678752 -0.326131 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.666888 -0.308341 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669149 -0.327177 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.651289 -0.314244 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.647554 -0.337937 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.681014 -0.344967 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659419 -0.355727 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675018 -0.349824 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.610996 -0.384191 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.622198 -0.389739 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.63493 -0.378964 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.617804 -0.366159 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.598265 -0.394966 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.593871 -0.371386 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.587062 -0.389418 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.61539 -0.407771 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.604188 -0.402224 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.628121 -0.396997 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.684201 -0.391875 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674986 -0.37258 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674986 -0.37258 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669081 -0.406996 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644745 -0.40282 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669081 -0.406996 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644745 -0.40282 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.554344 -0.645066 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.610229 -0.668521 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.633406 -0.663938 0.160875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626429 -0.65892 0.137727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.617928 -0.64522 0.156428 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.617206 -0.673539 0.176845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.601728 -0.654822 0.172398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.59403 -0.678123 0.169668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.625707 -0.687239 0.158144 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.602531 -0.691822 0.150967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.61873 -0.682221 0.134996 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.622977 -0.619787 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.63767 -0.608008 0.0834188 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.620102 -0.623239 0.0751099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.613891 -0.601637 0.0853287 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.640545 -0.604555 0.107698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616766 -0.598184 0.109608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.625852 -0.616334 0.123668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.646756 -0.626157 0.0974792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.632063 -0.637936 0.113449 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.629188 -0.641389 0.0891702 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.585648 -0.598918 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.601562 -0.580238 0.162601 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605914 -0.59781 0.14581 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.587563 -0.581665 0.142311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.581295 -0.581346 0.176661 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.567297 -0.582773 0.156372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.565381 -0.600026 0.173931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.599646 -0.597491 0.18016 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.583732 -0.616171 0.177429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.603999 -0.615063 0.163369 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.541596 -0.6938 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.547376 -0.70016 0.188567 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.564621 -0.690564 0.173728 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.546319 -0.676324 0.182211 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.524351 -0.703396 0.180258 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523294 -0.679561 0.173902 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.518571 -0.697037 0.157111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542652 -0.717636 0.171776 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.536873 -0.711276 0.148628 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.559898 -0.70804 0.156937 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.517014 -0.624197 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.516313 -0.60809 0.190293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.538029 -0.616221 0.181811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.524375 -0.60089 0.168094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495298 -0.616065 0.180075 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.50336 -0.608865 0.157875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495999 -0.632172 0.161374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.508952 -0.631397 0.193792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.509653 -0.647504 0.175091 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.530668 -0.639529 0.18531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.48571 -0.670344 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.466887 -0.67091 0.138803 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490138 -0.671107 0.147112 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.480853 -0.650637 0.136894 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46246 -0.670147 0.114524 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.476425 -0.649874 0.112614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.481283 -0.669581 0.0985541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.471745 -0.690617 0.124743 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490567 -0.690052 0.108773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.494995 -0.690815 0.133052 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.578925 -0.714669 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.597914 -0.729812 0.109385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.602084 -0.70632 0.103028 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.592661 -0.711617 0.125228 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.574755 -0.738161 0.111295 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569503 -0.719965 0.127138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555767 -0.723017 0.106848 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.584178 -0.732864 0.0890951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.565189 -0.71772 0.0846485 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.588348 -0.709372 0.0827387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.52304 -0.691213 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.511567 -0.712906 0.0596212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.529503 -0.710453 0.0764123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.507717 -0.699372 0.079911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.505104 -0.693665 0.0455609 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.501254 -0.680131 0.0658506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.516576 -0.671972 0.0482916 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.526889 -0.704747 0.0420622 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.538362 -0.683054 0.044793 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.544826 -0.702295 0.0588533 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.591673 -0.665934 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.605761 -0.658095 0.0319289 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.58746 -0.643855 0.0404111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607672 -0.647455 0.0541285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.609975 -0.680174 0.0421477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.611885 -0.669535 0.0643473 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.595887 -0.688013 0.0608487 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.589763 -0.676573 0.0284303 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.575674 -0.684413 0.0471312 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.571461 -0.662334 0.0369125 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.471405 -0.471405 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.501645 -0.441164 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.518106 -0.424703 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522721 -0.437548 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.505261 -0.420089 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.497031 -0.428319 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.484186 -0.423704 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.48057 -0.44478 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.51449 -0.445778 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.498029 -0.462239 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.519105 -0.458623 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542955 -0.452233 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.560583 -0.44013 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542955 -0.452233 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.53742 -0.431578 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.560583 -0.44013 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.53742 -0.431578 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542955 -0.452233 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.566118 -0.460785 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.548489 -0.472887 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.548489 -0.472887 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490576 -0.399854 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.502679 -0.382226 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.511231 -0.405389 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490576 -0.399854 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.482024 -0.376691 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.469922 -0.39432 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.469922 -0.39432 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.502679 -0.382226 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490576 -0.399854 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.511231 -0.405389 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.430095 -0.460336 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.427669 -0.446904 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.450155 -0.45293 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436486 -0.436486 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.407609 -0.454311 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.416426 -0.443892 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410035 -0.467742 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.421278 -0.470754 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.423704 -0.484186 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.443764 -0.47678 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.419026 -0.419026 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.414851 -0.39469 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.434147 -0.403906 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.434147 -0.403906 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399731 -0.409811 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.419026 -0.419026 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.403906 -0.434147 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399731 -0.409811 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.403906 -0.434147 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.419026 -0.419026 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399854 -0.490576 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.378536 -0.488909 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399854 -0.490576 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.39432 -0.469922 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.378536 -0.488909 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.39432 -0.469922 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399854 -0.490576 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.384071 -0.509564 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.405389 -0.511231 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.405389 -0.511231 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.482473 -0.512714 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.495905 -0.51514 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.506323 -0.506323 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.48988 -0.492654 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472055 -0.521531 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46603 -0.499045 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.458623 -0.519105 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.488498 -0.5352 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475067 -0.532774 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.498917 -0.526383 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452233 -0.542955 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.4539 -0.564273 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472887 -0.548489 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452233 -0.542955 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.433245 -0.558738 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.431578 -0.53742 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.431578 -0.53742 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4539 -0.564273 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452233 -0.542955 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472887 -0.548489 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523783 -0.523783 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.548119 -0.527958 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.538903 -0.508662 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.538903 -0.508662 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.532998 -0.543078 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523783 -0.523783 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.508662 -0.538903 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.532998 -0.543078 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.508662 -0.538903 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523783 -0.523783 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.335322 -0.607487 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.313405 -0.629404 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.316595 -0.626214 0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.335868 -0.624401 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318408 -0.606941 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.294133 -0.631217 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.295946 -0.611945 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290942 -0.634407 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.311592 -0.648676 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.308402 -0.651867 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.330864 -0.646863 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.384191 -0.610996 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.405245 -0.601704 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.402224 -0.604188 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.389418 -0.587062 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387213 -0.608512 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.371386 -0.593871 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.366159 -0.617804 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.400018 -0.625637 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.378964 -0.63493 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396997 -0.628121 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.331813 -0.558618 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.341105 -0.537564 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355747 -0.553391 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338621 -0.540585 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317172 -0.542791 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.314688 -0.545813 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30788 -0.563845 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334297 -0.555596 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.325005 -0.57665 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.348938 -0.571423 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.264535 -0.625895 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.245336 -0.623429 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268271 -0.624736 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.260997 -0.604627 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2416 -0.624589 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.257262 -0.605787 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2608 -0.627055 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.248874 -0.644697 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268073 -0.647163 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271809 -0.646004 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.278768 -0.530773 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298064 -0.539989 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298064 -0.539989 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263648 -0.545894 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267823 -0.570229 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263648 -0.545894 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267823 -0.570229 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.286452 -0.603979 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.266942 -0.591774 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.269578 -0.594664 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.284698 -0.579544 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.283817 -0.601088 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301572 -0.588858 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.303327 -0.613293 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268696 -0.616209 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.288206 -0.628413 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271332 -0.619099 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316914 -0.678274 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.31938 -0.697473 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338182 -0.681812 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318074 -0.674538 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298112 -0.693935 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.296805 -0.671 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.295646 -0.674736 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31822 -0.701209 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.315754 -0.682009 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337022 -0.685547 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33883 -0.656357 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.351035 -0.675867 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.363265 -0.658111 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.348145 -0.673232 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3266 -0.674113 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32371 -0.671477 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.314396 -0.654603 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.341721 -0.658993 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.329516 -0.639482 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.353951 -0.641237 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.412036 -0.664041 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40282 -0.644745 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40282 -0.644745 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396915 -0.679161 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37258 -0.674986 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396915 -0.679161 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37258 -0.674986 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.554344 -0.645066 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.616373 -0.681385 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.639472 -0.678928 -0.137375 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.621631 -0.664108 -0.145845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.629767 -0.661636 -0.122663 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.634214 -0.696205 -0.120537 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624508 -0.678912 -0.105825 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.611115 -0.698662 -0.112168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626079 -0.698678 -0.143718 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.602979 -0.701135 -0.135349 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.608237 -0.683858 -0.152187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.617144 -0.607573 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.63057 -0.595495 -0.139672 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.617371 -0.615286 -0.146288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605919 -0.594239 -0.140323 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.630343 -0.587782 -0.116217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605692 -0.586526 -0.116868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616917 -0.59986 -0.0993785 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.641795 -0.608828 -0.122182 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.628369 -0.620906 -0.105343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.628595 -0.628619 -0.128798 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.609912 -0.649723 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.631982 -0.640648 -0.0560094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62585 -0.64267 -0.0798417 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.614812 -0.625749 -0.0656463 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616044 -0.647702 -0.0385197 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.598874 -0.632802 -0.0481565 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.593974 -0.656777 -0.0448623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627081 -0.664623 -0.0527151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605012 -0.673698 -0.0590577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.620949 -0.666645 -0.0765474 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.553573 -0.718878 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.563328 -0.73992 -0.108814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.577348 -0.719679 -0.110668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.559693 -0.720935 -0.0934517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539553 -0.739118 -0.115431 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.535918 -0.720133 -0.100068 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.529798 -0.718076 -0.1239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.557208 -0.737863 -0.132647 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.547453 -0.716821 -0.141116 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.571228 -0.717623 -0.1345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.547112 -0.687216 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.554862 -0.690713 -0.0274488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570641 -0.682694 -0.0446649 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.552739 -0.667813 -0.0364345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.531333 -0.695235 -0.0334138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.52921 -0.672335 -0.0423994 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523582 -0.691738 -0.0565949 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.549235 -0.710116 -0.0416443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.541484 -0.706619 -0.0648253 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.565014 -0.702097 -0.0588603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.491544 -0.682558 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.474542 -0.688647 -0.0825505 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.498226 -0.686417 -0.0759343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.485132 -0.666351 -0.0818993 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46786 -0.684788 -0.106005 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.47845 -0.662492 -0.105354 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.484862 -0.678699 -0.122844 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.480953 -0.704854 -0.10004 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.497955 -0.698765 -0.116879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.504637 -0.702624 -0.093424 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.560805 -0.676727 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.57563 -0.689897 -0.192477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.585222 -0.673115 -0.177114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.575587 -0.693998 -0.168128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.551213 -0.693509 -0.193128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.55117 -0.69761 -0.16878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.536388 -0.680339 -0.178416 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.560848 -0.672626 -0.202114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.546023 -0.659456 -0.187402 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.57044 -0.655844 -0.186751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.498776 -0.640408 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.478525 -0.627785 -0.166213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.484234 -0.630799 -0.142381 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.497935 -0.615951 -0.156576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.493066 -0.637394 -0.183703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.512476 -0.62556 -0.174066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.513317 -0.650016 -0.17736 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.479365 -0.652241 -0.169507 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.499616 -0.664864 -0.163165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.485075 -0.655255 -0.145675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.561576 -0.602915 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.570049 -0.602201 -0.194773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.582252 -0.615021 -0.177557 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.560414 -0.623084 -0.185788 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.549372 -0.590095 -0.188808 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539737 -0.610978 -0.179823 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.540899 -0.590808 -0.165627 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.571211 -0.582032 -0.180578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.562738 -0.582745 -0.157397 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.583414 -0.594852 -0.163362 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.335322 -0.607487 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.283164 -0.659645 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.269894 -0.672915 -0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.293281 -0.666987 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275822 -0.649528 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.259777 -0.665573 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.265705 -0.642185 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273047 -0.652302 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.277236 -0.683032 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290507 -0.669762 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.300624 -0.677104 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33883 -0.656357 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.350033 -0.661904 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.362764 -0.65113 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345639 -0.638325 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.326099 -0.667131 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321705 -0.643552 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.314897 -0.661584 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.343224 -0.679937 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.332022 -0.674389 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355956 -0.669162 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.286452 -0.603979 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.280905 -0.592776 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.304484 -0.59717 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.291679 -0.580045 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.262872 -0.599585 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273647 -0.586853 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.26842 -0.610787 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275678 -0.61671 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281225 -0.627912 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.299257 -0.621104 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.279656 -0.610775 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.256944 -0.602632 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.26347 -0.606749 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273158 -0.587686 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.27313 -0.606658 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.289344 -0.591712 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.295841 -0.614801 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263442 -0.62572 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.286153 -0.633864 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.269968 -0.629838 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.278768 -0.530773 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298064 -0.539989 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298064 -0.539989 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263648 -0.545894 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267823 -0.570229 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263648 -0.545894 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267823 -0.570229 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.331813 -0.558618 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.342108 -0.551527 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356248 -0.560372 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.341128 -0.575492 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317673 -0.549772 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316693 -0.573738 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307378 -0.556863 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.332793 -0.534652 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.322499 -0.541743 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.346933 -0.543497 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.332034 -0.663153 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.340177 -0.685865 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355123 -0.669651 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33606 -0.679339 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317089 -0.679367 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.312971 -0.672841 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.308945 -0.656656 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.336151 -0.669679 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.328008 -0.646968 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.351097 -0.653465 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.384191 -0.610996 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.391282 -0.600701 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367317 -0.601681 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.382437 -0.586561 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.408157 -0.610016 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399312 -0.595876 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.401066 -0.62031 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.393037 -0.625136 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.385946 -0.635431 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369071 -0.626116 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.412036 -0.664041 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40282 -0.644745 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40282 -0.644745 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396915 -0.679161 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37258 -0.674986 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396915 -0.679161 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37258 -0.674986 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.471405 -0.471405 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.441164 -0.441164 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.443014 -0.422853 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.449156 -0.418916 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.463412 -0.433171 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.435021 -0.445101 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.455419 -0.455419 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.433171 -0.463412 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.420766 -0.430846 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.418916 -0.449156 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.426908 -0.426908 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399854 -0.452233 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.383576 -0.43509 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40305 -0.440308 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.406245 -0.428383 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.380381 -0.447015 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40305 -0.440308 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396659 -0.464158 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.377186 -0.45894 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.393464 -0.476083 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396659 -0.464158 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452233 -0.399854 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.45894 -0.377186 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.476083 -0.393464 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.464158 -0.396659 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.43509 -0.383576 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.440308 -0.40305 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.428383 -0.406245 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447015 -0.380381 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.440308 -0.40305 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.464158 -0.396659 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.512714 -0.460336 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.512375 -0.453047 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.493241 -0.465554 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.497443 -0.44229 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.531849 -0.447829 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.516916 -0.437072 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.532187 -0.455118 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.527647 -0.471093 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.527985 -0.478381 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.508512 -0.483599 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523783 -0.419026 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.538038 -0.404771 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.532513 -0.427756 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.515053 -0.410297 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.529309 -0.396041 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.506323 -0.401567 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.515053 -0.410297 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.546768 -0.4135 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.532513 -0.427756 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.541242 -0.436486 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542955 -0.490576 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.565623 -0.483869 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.54615 -0.478651 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.549345 -0.466726 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.562428 -0.495794 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.54615 -0.478651 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539759 -0.502501 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.559233 -0.507719 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.536564 -0.514426 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539759 -0.502501 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.460336 -0.512714 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.461599 -0.535539 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.478381 -0.527985 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.455118 -0.532187 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.443553 -0.520267 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.437072 -0.516916 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.44229 -0.497443 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.466817 -0.516065 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.465554 -0.493241 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.483599 -0.508512 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490576 -0.542955 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.507719 -0.559233 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.514426 -0.536564 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.502501 -0.539759 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.483869 -0.565623 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.478651 -0.54615 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.466726 -0.549345 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495794 -0.562428 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.478651 -0.54615 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.502501 -0.539759 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.419026 -0.523783 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.404771 -0.538038 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.427756 -0.532513 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410297 -0.515053 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396041 -0.529309 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.401567 -0.506323 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410297 -0.515053 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4135 -0.546768 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.427756 -0.532513 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436486 -0.541242 -0.222222 RAD 0.00617284 
+   txt002 
+
+END_SCENE
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/balls3.dat b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/balls3.dat
new file mode 100644 (file)
index 0000000..2837425
--- /dev/null
@@ -0,0 +1,14804 @@
+BEGIN_SCENE
+  OUTFILE /dev/null
+  RESOLUTION 1024 768 
+  VERBOSE 0
+
+CAMERA
+  ZOOM 1.20711
+ASPECTRATIO 1.0
+  ANTIALIASING 0
+  RAYDEPTH 5
+  CENTER 2.1 1.3 1.7
+  VIEWDIR -0.700389 -0.433574 -0.566982
+  UPDIR -0.482085 -0.298433 0.82373
+
+END_CAMERA 
+
+BACKGROUND 0.078 0.361 0.753 
+
+LIGHT CENTER 4 3 2 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 1 -4 4 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER -3 1 5 RAD 0.002 COLOR 0.5 0.5 0.5
+
+TEXDEF txt001 AMBIENT 0.2  DIFFUSE 0.8  SPECULAR 0  OPACITY 1 
+PHONG PLASTIC 0 PHONG_SIZE 100000
+ COLOR 1 0.75 0.33 
+ TEXFUNC 0 
+
+TRI 
+  V0 12 12 -0.5   V1 -12 -12 -0.5   V2 12 -12 -0.5 
+   txt001 
+TRI 
+  V0 12 12 -0.5   V1 -12 12 -0.5   V2 -12 -12 -0.5 
+   txt001 
+TEXDEF txt002 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+PHONG PLASTIC 0.5 PHONG_SIZE 45.2776
+ COLOR 1 0.9 0.7 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0 0 RAD 0.5 
+   txt002 
+ SPHERE CENTER 0.272166 0.272166 0.544331 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.420314 0.420314 0.618405 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.470715 0.470715 0.598245 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.481689 0.481689 0.57904 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475329 0.45787 0.577669 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.45787 0.475329 0.577669 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.477074 0.494534 0.599616 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.453255 0.488174 0.598245 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4661 0.48356 0.618821 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.494534 0.477074 0.599616 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.48356 0.4661 0.618821 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.488174 0.453255 0.598245 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.461623 0.409245 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.47044 0.419664 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447954 0.425689 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.468014 0.433095 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.484109 0.40322 0.549693 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.481683 0.416651 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475292 0.392801 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.464049 0.395814 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.455233 0.385395 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.441563 0.401839 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.409245 0.461623 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.419664 0.47044 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.433095 0.468014 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.425689 0.447954 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.395814 0.464049 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.401839 0.441563 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.385395 0.455233 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40322 0.484109 0.549693 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.392801 0.475292 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.416651 0.481683 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429405 0.481784 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.441197 0.503434 0.660098 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452601 0.483752 0.650495 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.434161 0.494577 0.63815 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.418001 0.501466 0.668328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410965 0.492609 0.64638 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.406209 0.479816 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436441 0.490641 0.680674 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.42465 0.46899 0.679302 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447846 0.470958 0.671072 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367935 0.472692 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.36376 0.497028 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.383056 0.487812 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.383056 0.487812 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.34864 0.481907 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367935 0.472692 0.593714 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.352815 0.457572 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.34864 0.481907 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.352815 0.457572 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367935 0.472692 0.643096 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379004 0.431383 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.376578 0.444814 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399064 0.438789 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.385395 0.455233 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356518 0.437408 0.687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.365335 0.447826 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.358944 0.423976 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.370187 0.420964 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.372614 0.407532 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.392673 0.414939 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.481784 0.429405 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.503434 0.441197 0.660098 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.494577 0.434161 0.63815 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.483752 0.452601 0.650495 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490641 0.436441 0.680674 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.470958 0.447846 0.671072 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46899 0.42465 0.679302 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.501466 0.418001 0.668328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.479816 0.406209 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.492609 0.410965 0.64638 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.431383 0.379004 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.444814 0.376578 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.455233 0.385395 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.438789 0.399064 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.420964 0.370187 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.414939 0.392673 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.407532 0.372614 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.437408 0.356518 0.687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.423976 0.358944 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447826 0.365335 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472692 0.367935 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.497028 0.36376 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.487812 0.383056 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.487812 0.383056 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.481907 0.34864 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472692 0.367935 0.643096 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.457572 0.352815 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.481907 0.34864 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.457572 0.352815 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472692 0.367935 0.593714 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.461844 0.304709 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.492085 0.33495 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.492085 0.33495 0.348047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.488469 0.313874 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.471009 0.331334 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495701 0.356025 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.474625 0.352409 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495701 0.356025 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.51316 0.338566 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.51316 0.338566 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.509544 0.31749 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.424345 0.305171 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.40568 0.315605 0.356995 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.403931 0.312107 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.419383 0.329161 0.372427 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.426095 0.30867 0.344961 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.439797 0.322225 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.444759 0.298235 0.357307 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410643 0.291616 0.353908 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429307 0.281181 0.366254 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.408893 0.288117 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.435193 0.368397 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.440864 0.389015 0.394032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.457301 0.37895 0.409464 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.451857 0.367697 0.388171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.418755 0.378463 0.390945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429748 0.357145 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.413085 0.357845 0.403291 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4242 0.389715 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.418529 0.369098 0.424584 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.440637 0.37965 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.529584 0.334488 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.546497 0.347572 0.424272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.532117 0.331508 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522481 0.352406 0.421186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.543964 0.350552 0.448652 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.519948 0.355387 0.445566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.52705 0.337468 0.460998 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5536 0.329654 0.439705 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.536686 0.31657 0.45205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.53922 0.313589 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472692 0.367935 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.48474 0.389488 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495668 0.369235 0.46131 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.477004 0.379669 0.448964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.461764 0.388188 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.454027 0.37837 0.457911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.449715 0.366636 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.480429 0.377754 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46838 0.356202 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.491357 0.357501 0.482603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.499343 0.304247 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.518259 0.314219 0.509445 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.519922 0.310678 0.485065 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.504895 0.328108 0.494013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.49768 0.307788 0.521479 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.484316 0.321677 0.506047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.478764 0.297816 0.509133 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.512708 0.290358 0.512531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.493791 0.280387 0.500186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.51437 0.286818 0.488152 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.518736 0.271262 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.539811 0.274878 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.520873 0.290418 0.384149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.533373 0.290264 0.405442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.537674 0.255722 0.402668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.531235 0.271108 0.420874 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.516598 0.252106 0.415013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.525174 0.255876 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.504099 0.25226 0.39372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.506236 0.271416 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.488495 0.241021 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.50716 0.230587 0.472408 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.51153 0.24936 0.456976 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.499694 0.253381 0.478269 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.484125 0.222248 0.475494 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.476659 0.245042 0.481355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46546 0.232683 0.463149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495961 0.218227 0.454201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.477296 0.228661 0.441856 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.500331 0.237 0.438769 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.450996 0.241483 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.455172 0.217147 0.396183 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472226 0.232599 0.40513 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.45115 0.228983 0.417476 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.433942 0.226031 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429921 0.237867 0.408529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429767 0.250367 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.455018 0.229647 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.450842 0.253983 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472072 0.245099 0.383837 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.304709 0.461844 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.33495 0.492085 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.33495 0.492085 0.348047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.331334 0.471009 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.313874 0.488469 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338566 0.51316 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31749 0.509544 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338566 0.51316 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356025 0.495701 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356025 0.495701 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.352409 0.474625 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.368397 0.435193 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.389015 0.440864 0.394032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367697 0.451857 0.388171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37895 0.457301 0.409464 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.389715 0.4242 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37965 0.440637 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369098 0.418529 0.424584 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.378463 0.418755 0.390945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.357845 0.413085 0.403291 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.357145 0.429748 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.305171 0.424345 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.315605 0.40568 0.356995 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.329161 0.419383 0.372427 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.312107 0.403931 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.291616 0.410643 0.353908 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.288117 0.408893 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281181 0.429307 0.366254 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30867 0.426095 0.344961 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298235 0.444759 0.357307 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.322225 0.439797 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271262 0.518736 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.274878 0.539811 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290264 0.533373 0.405442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290418 0.520873 0.384149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.255876 0.525174 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271416 0.506236 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.25226 0.504099 0.39372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.255722 0.537674 0.402668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.252106 0.516598 0.415013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271108 0.531235 0.420874 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241483 0.450996 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.217147 0.455172 0.396183 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228983 0.45115 0.417476 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.232599 0.472226 0.40513 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.229647 0.455018 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.245099 0.472072 0.383837 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.253983 0.450842 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.226031 0.433942 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250367 0.429767 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.237867 0.429921 0.408529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241021 0.488495 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.230587 0.50716 0.472408 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.253381 0.499694 0.478269 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.24936 0.51153 0.456976 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.218227 0.495961 0.454201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.237 0.500331 0.438769 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228661 0.477296 0.441856 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.222248 0.484125 0.475494 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.232683 0.46546 0.463149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.245042 0.476659 0.481355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334488 0.529584 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.347572 0.546497 0.424272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.352406 0.522481 0.421186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.331508 0.532117 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.329654 0.5536 0.439705 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.313589 0.53922 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31657 0.536686 0.45205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.350552 0.543964 0.448652 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337468 0.52705 0.460998 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355387 0.519948 0.445566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.304247 0.499343 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.314219 0.518259 0.509445 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.328108 0.504895 0.494013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.310678 0.519922 0.485065 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290358 0.512708 0.512531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.286818 0.51437 0.488152 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.280387 0.493791 0.500186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307788 0.49768 0.521479 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.297816 0.478764 0.509133 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321677 0.484316 0.506047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367935 0.472692 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.389488 0.48474 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379669 0.477004 0.448964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369235 0.495668 0.46131 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.377754 0.480429 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.357501 0.491357 0.482603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356202 0.46838 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388188 0.461764 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.366636 0.449715 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37837 0.454027 0.457911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.230635 0.38777 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.2506 0.446614 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.264242 0.467193 0.770086 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.272442 0.447086 0.758332 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.253384 0.459832 0.749168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2424 0.46672 0.781591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.231541 0.459359 0.760673 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228758 0.446141 0.781342 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.261459 0.453974 0.790755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247817 0.433396 0.790506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.269659 0.433868 0.779001 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301839 0.407906 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.319874 0.420236 0.72141 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.303021 0.407886 0.708251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.296625 0.428474 0.720288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318692 0.420256 0.746073 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.295442 0.428494 0.744951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.300656 0.407926 0.757577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.325088 0.399668 0.734036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307053 0.387338 0.745541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.308235 0.387318 0.720878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.253236 0.449775 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.263032 0.459076 0.675209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.270029 0.436804 0.683251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247378 0.440021 0.673964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.246239 0.472047 0.687835 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.230585 0.452992 0.68659 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236443 0.462746 0.708504 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.26889 0.468829 0.697123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.259094 0.459528 0.717791 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275887 0.446557 0.705165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179397 0.426478 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.174744 0.447688 0.778193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.197172 0.437457 0.779597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.1895 0.447523 0.758396 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.156968 0.436708 0.765035 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.171724 0.436544 0.745238 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161621 0.415499 0.753281 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.164641 0.426642 0.786236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.169293 0.405432 0.774481 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.187069 0.416412 0.787639 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.182032 0.429639 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.177682 0.45215 0.683315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.190087 0.449636 0.704516 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.200611 0.44299 0.683192 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.169628 0.432153 0.671279 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.192556 0.422992 0.671155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.173978 0.409641 0.680442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159104 0.438799 0.692603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.163454 0.416288 0.701767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.171508 0.436286 0.713804 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159431 0.367634 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.13761 0.368692 0.737623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.158434 0.366998 0.750781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153102 0.387887 0.738744 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.138607 0.369329 0.71296 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.154099 0.388523 0.714081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.160429 0.36827 0.701455 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.14394 0.34844 0.724997 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165761 0.347381 0.713492 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.164764 0.346745 0.738155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.227999 0.384609 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.237348 0.393812 0.824394 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.251829 0.390976 0.804597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.234368 0.408432 0.804721 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.213518 0.387445 0.823273 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.210538 0.402066 0.8036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.204169 0.378242 0.802355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23098 0.369989 0.823149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.221631 0.360786 0.802231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.245461 0.367152 0.803352 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.208034 0.325765 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.209548 0.312342 0.783824 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.229235 0.324887 0.775781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.209827 0.337 0.785069 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.188347 0.31322 0.771198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.188626 0.337878 0.772443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.186834 0.326643 0.750529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.207755 0.301107 0.76191 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.206242 0.31453 0.741241 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.227442 0.313652 0.753867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.279238 0.345901 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.302145 0.344931 0.775717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.297823 0.356827 0.754517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.289691 0.366251 0.775841 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.28356 0.334005 0.787754 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271106 0.355325 0.787878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.260653 0.334975 0.77859 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.291692 0.324581 0.766429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268785 0.325551 0.757266 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.28737 0.336477 0.745229 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.115031 0.4293 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.102505 0.502308 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.110567 0.524146 0.536101 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.126738 0.506465 0.542066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.112687 0.504055 0.521905 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0863343 0.519988 0.538366 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0884544 0.499897 0.524171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0782715 0.49815 0.546597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100385 0.522399 0.558526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0923218 0.500561 0.566757 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.116555 0.504718 0.564491 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.160392 0.474661 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.177777 0.492047 0.579103 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.176681 0.473492 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159222 0.490951 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161488 0.493217 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.142932 0.492121 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.144102 0.475831 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.178947 0.475757 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161561 0.458371 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.177851 0.457202 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.160392 0.474661 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.167697 0.481967 0.484868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161561 0.458371 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.144102 0.475831 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.166528 0.498257 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.142932 0.492121 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159222 0.490951 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183987 0.480797 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.176681 0.473492 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.177851 0.457202 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0571437 0.456947 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0450372 0.477623 0.501329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.055591 0.475469 0.523547 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0696413 0.47788 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0465898 0.4591 0.485076 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.071194 0.459357 0.487134 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0586963 0.438424 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325396 0.45669 0.505236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0446461 0.436013 0.511201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0430934 0.454536 0.527454 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.115031 0.4293 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.10495 0.439381 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0911807 0.435691 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.10864 0.45315 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.128801 0.43299 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13249 0.44676 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.138881 0.42291 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.111341 0.415531 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.121421 0.40545 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0975713 0.411841 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0696698 0.383939 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.052284 0.366554 0.509559 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0708393 0.36765 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0533799 0.385109 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0511144 0.382844 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0522103 0.401399 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0685002 0.400229 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0685739 0.365384 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0859596 0.38277 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0871292 0.36648 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0571437 0.456947 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0493251 0.475575 0.595564 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0725262 0.467381 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.06557 0.479825 0.577461 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0339426 0.465141 0.57931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0501875 0.46939 0.561208 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0417612 0.446512 0.565115 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0408988 0.452697 0.599471 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0487174 0.434069 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0640999 0.444504 0.601529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0696698 0.383939 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0623642 0.376634 0.603794 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0859596 0.38277 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0685002 0.400229 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0460743 0.377803 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0522103 0.401399 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0533799 0.385109 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0635337 0.360344 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0708393 0.36765 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0871292 0.36648 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.115031 0.4293 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.125111 0.439381 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.138881 0.435691 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.121421 0.45315 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.101261 0.43299 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0975713 0.44676 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0911807 0.42291 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.11872 0.415531 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.10864 0.40545 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13249 0.411841 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.082487 0.239622 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0438957 0.258053 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0426858 0.273525 0.735128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.064638 0.265928 0.726759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0510334 0.281546 0.713318 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0219434 0.26565 0.724292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.030291 0.273671 0.702483 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0231533 0.250178 0.705088 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0355481 0.250032 0.737733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.036758 0.23456 0.718528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0575003 0.242434 0.729364 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.117687 0.252557 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.135677 0.265544 0.730157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.138361 0.25778 0.706872 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.12224 0.275732 0.71212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.115003 0.26032 0.742607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.101567 0.270508 0.72457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.097014 0.247334 0.731771 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.131123 0.242369 0.737359 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.113134 0.229382 0.726523 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.133808 0.234605 0.714074 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0863845 0.308551 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0971427 0.330622 0.67968 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.109956 0.310023 0.675083 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.091905 0.317013 0.659755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0735708 0.329151 0.686881 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0683331 0.315541 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0628126 0.30708 0.689486 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0916222 0.322161 0.702209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.080864 0.30009 0.704814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.104436 0.301561 0.697613 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00869528 0.245118 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0110117 0.257416 0.660413 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00823377 0.253319 0.675329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0102865 0.269325 0.656641 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0105502 0.249215 0.637128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.010748 0.261124 0.633356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00915679 0.236916 0.628759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0126029 0.233209 0.655816 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00710408 0.22091 0.647447 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00664257 0.229111 0.670732 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0511841 0.295616 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0555846 0.315856 0.604965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0705987 0.309941 0.623653 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0705297 0.296292 0.603077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.03617 0.301531 0.599717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0511152 0.281968 0.597829 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0317696 0.281291 0.613157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.036239 0.31518 0.620293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0318385 0.29494 0.633733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.051253 0.309265 0.638981 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0472866 0.226687 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.025169 0.224935 0.580727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0281502 0.217281 0.604012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0288111 0.241399 0.598764 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0443054 0.234341 0.568278 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0479475 0.250805 0.586315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.066423 0.236092 0.579113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0436445 0.210223 0.573526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0657621 0.211974 0.584361 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0466257 0.202569 0.596811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0399982 0.189123 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0335228 0.179527 0.71089 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0567332 0.187058 0.707118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0385291 0.203632 0.709006 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0167878 0.181593 0.692853 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.021794 0.205698 0.690969 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0232631 0.191189 0.671044 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0349919 0.165018 0.690965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0414672 0.174615 0.669156 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0582023 0.172549 0.687193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0785895 0.170692 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0867911 0.147549 0.631205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.101845 0.166573 0.635801 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.083121 0.161663 0.65113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0635354 0.151669 0.624003 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0598652 0.165782 0.643928 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0553337 0.174812 0.621398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0822597 0.156579 0.608675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.074058 0.179722 0.60607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0973138 0.175603 0.613272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.11379 0.183628 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.133336 0.176775 0.705919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.136161 0.192663 0.687231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.124499 0.199753 0.707807 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.110965 0.167739 0.711167 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.102127 0.190718 0.713055 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0914184 0.174592 0.697727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.122627 0.160649 0.690591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.103081 0.167502 0.677151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.125452 0.176537 0.671903 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.38777 0.230635 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.446614 0.2506 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.467193 0.264242 0.770086 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.459832 0.253384 0.749168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447086 0.272442 0.758332 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.453974 0.261459 0.790755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.433868 0.269659 0.779001 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.433396 0.247817 0.790506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46672 0.2424 0.781591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.446141 0.228758 0.781342 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.459359 0.231541 0.760673 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.449775 0.253236 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.459076 0.263032 0.675209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.440021 0.247378 0.673964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436804 0.270029 0.683251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.468829 0.26889 0.697123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.446557 0.275887 0.705165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.459528 0.259094 0.717791 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472047 0.246239 0.687835 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.462746 0.236443 0.708504 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452992 0.230585 0.68659 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.407906 0.301839 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.420236 0.319874 0.72141 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.428474 0.296625 0.720288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.407886 0.303021 0.708251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399668 0.325088 0.734036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387318 0.308235 0.720878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387338 0.307053 0.745541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.420256 0.318692 0.746073 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.407926 0.300656 0.757577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.428494 0.295442 0.744951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.384609 0.227999 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.393812 0.237348 0.824394 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.408432 0.234368 0.804721 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.390976 0.251829 0.804597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369989 0.23098 0.823149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367152 0.245461 0.803352 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.360786 0.221631 0.802231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387445 0.213518 0.823273 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.378242 0.204169 0.802355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.402066 0.210538 0.8036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345901 0.279238 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.344931 0.302145 0.775717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.366251 0.289691 0.775841 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356827 0.297823 0.754517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324581 0.291692 0.766429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.336477 0.28737 0.745229 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.325551 0.268785 0.757266 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334005 0.28356 0.787754 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334975 0.260653 0.77859 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355325 0.271106 0.787878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.325765 0.208034 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.312342 0.209548 0.783824 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337 0.209827 0.785069 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324887 0.229235 0.775781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301107 0.207755 0.76191 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.313652 0.227442 0.753867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31453 0.206242 0.741241 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31322 0.188347 0.771198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.326643 0.186834 0.750529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337878 0.188626 0.772443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.426478 0.179397 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.447688 0.174744 0.778193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447523 0.1895 0.758396 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.437457 0.197172 0.779597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.426642 0.164641 0.786236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.416412 0.187069 0.787639 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.405432 0.169293 0.774481 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436708 0.156968 0.765035 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.415499 0.161621 0.753281 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436544 0.171724 0.745238 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367634 0.159431 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.368692 0.13761 0.737623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387887 0.153102 0.738744 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.366998 0.158434 0.750781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.34844 0.14394 0.724997 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.346745 0.164764 0.738155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.347381 0.165761 0.713492 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369329 0.138607 0.71296 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.36827 0.160429 0.701455 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388523 0.154099 0.714081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429639 0.182032 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.45215 0.177682 0.683315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.44299 0.200611 0.683192 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.449636 0.190087 0.704516 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.438799 0.159104 0.692603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436286 0.171508 0.713804 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.416288 0.163454 0.701767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.432153 0.169628 0.671279 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.409641 0.173978 0.680442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.422992 0.192556 0.671155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.239622 0.082487 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.258053 0.0438957 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.273525 0.0426858 0.735128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281546 0.0510334 0.713318 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.265928 0.064638 0.726759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250032 0.0355481 0.737733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.242434 0.0575003 0.729364 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23456 0.036758 0.718528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.26565 0.0219434 0.724292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250178 0.0231533 0.705088 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273671 0.030291 0.702483 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.308551 0.0863845 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.330622 0.0971427 0.67968 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317013 0.091905 0.659755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.310023 0.109956 0.675083 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.322161 0.0916222 0.702209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301561 0.104436 0.697613 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30009 0.080864 0.704814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.329151 0.0735708 0.686881 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30708 0.0628126 0.689486 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.315541 0.0683331 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.252557 0.117687 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.265544 0.135677 0.730157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275732 0.12224 0.71212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.25778 0.138361 0.706872 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.242369 0.131123 0.737359 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.234605 0.133808 0.714074 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.229382 0.113134 0.726523 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.26032 0.115003 0.742607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247334 0.097014 0.731771 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.270508 0.101567 0.72457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.189123 0.0399982 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.179527 0.0335228 0.71089 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.203632 0.0385291 0.709006 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.187058 0.0567332 0.707118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165018 0.0349919 0.690965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172549 0.0582023 0.687193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.174615 0.0414672 0.669156 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.181593 0.0167878 0.692853 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191189 0.0232631 0.671044 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.205698 0.021794 0.690969 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183628 0.11379 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.176775 0.133336 0.705919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.199753 0.124499 0.707807 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.192663 0.136161 0.687231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.160649 0.122627 0.690591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.176537 0.125452 0.671903 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167502 0.103081 0.677151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167739 0.110965 0.711167 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.174592 0.0914184 0.697727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.190718 0.102127 0.713055 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.170692 0.0785895 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.147549 0.0867911 0.631205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161663 0.083121 0.65113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.166573 0.101845 0.635801 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.156579 0.0822597 0.608675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.175603 0.0973138 0.613272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179722 0.074058 0.60607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.151669 0.0635354 0.624003 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.174812 0.0553337 0.621398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165782 0.0598652 0.643928 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.245118 0.00869528 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.257416 -0.0110117 0.660413 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.269325 0.0102865 0.656641 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.253319 0.00823377 0.675329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.233209 -0.0126029 0.655816 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.229111 0.00664257 0.670732 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.22091 0.00710408 0.647447 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.249215 -0.0105502 0.637128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236916 0.00915679 0.628759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.261124 0.010748 0.633356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.226687 0.0472866 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.224935 0.025169 0.580727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241399 0.0288111 0.598764 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.217281 0.0281502 0.604012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.210223 0.0436445 0.573526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.202569 0.0466257 0.596811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.211974 0.0657621 0.584361 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.234341 0.0443054 0.568278 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236092 0.066423 0.579113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250805 0.0479475 0.586315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.295616 0.0511841 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.315856 0.0555846 0.604965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.296292 0.0705297 0.603077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.309941 0.0705987 0.623653 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31518 0.036239 0.620293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.309265 0.051253 0.638981 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29494 0.0318385 0.633733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301531 0.03617 0.599717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281291 0.0317696 0.613157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281968 0.0511152 0.597829 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4293 0.115031 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.502308 0.102505 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.524146 0.110567 0.536101 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.504055 0.112687 0.521905 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.506465 0.126738 0.542066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522399 0.100385 0.558526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.504718 0.116555 0.564491 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.500561 0.0923218 0.566757 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.519988 0.0863343 0.538366 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.49815 0.0782715 0.546597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.499897 0.0884544 0.524171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.474661 0.160392 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.481967 0.167697 0.484868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475831 0.144102 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.458371 0.161561 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.480797 0.183987 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.457202 0.177851 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.473492 0.176681 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.498257 0.166528 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490951 0.159222 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.492121 0.142932 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.474661 0.160392 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.492047 0.177777 0.579103 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490951 0.159222 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.473492 0.176681 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475757 0.178947 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.457202 0.177851 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.458371 0.161561 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.493217 0.161488 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475831 0.144102 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.492121 0.142932 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.456947 0.0571437 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.475575 0.0493251 0.595564 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.479825 0.06557 0.577461 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.467381 0.0725262 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452697 0.0408988 0.599471 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.444504 0.0640999 0.601529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.434069 0.0487174 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.465141 0.0339426 0.57931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.446512 0.0417612 0.565115 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46939 0.0501875 0.561208 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4293 0.115031 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.439381 0.125111 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.45315 0.121421 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.435691 0.138881 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.415531 0.11872 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.411841 0.13249 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40545 0.10864 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.43299 0.101261 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.42291 0.0911807 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.44676 0.0975713 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.383939 0.0696698 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.376634 0.0623642 0.603794 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.400229 0.0685002 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.38277 0.0859596 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.360344 0.0635337 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.36648 0.0871292 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.36765 0.0708393 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.377803 0.0460743 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.385109 0.0533799 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.401399 0.0522103 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.456947 0.0571437 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.477623 0.0450372 0.501329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.47788 0.0696413 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475469 0.055591 0.523547 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.45669 0.0325396 0.505236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.454536 0.0430934 0.527454 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436013 0.0446461 0.511201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4591 0.0465898 0.485076 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.438424 0.0586963 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.459357 0.071194 0.487134 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.383939 0.0696698 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.366554 0.052284 0.509559 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.385109 0.0533799 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.36765 0.0708393 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.365384 0.0685739 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.36648 0.0871292 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.38277 0.0859596 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.382844 0.0511144 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.400229 0.0685002 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.401399 0.0522103 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4293 0.115031 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.41922 0.125111 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40545 0.121421 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.42291 0.138881 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.44307 0.11872 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.44676 0.13249 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.45315 0.10864 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.425611 0.101261 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.435691 0.0911807 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.411841 0.0975713 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.643951 0.172546 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.802608 0.281471 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.824035 0.30566 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.822021 0.302088 -0.202114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.821938 0.282758 -0.186751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.802598 0.298094 -0.187402 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.824119 0.32499 -0.193128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.804695 0.320997 -0.178416 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.826132 0.328563 -0.16878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.843459 0.309654 -0.192477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.845472 0.313227 -0.168128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.843375 0.290324 -0.177114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.787796 0.241352 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.785699 0.218449 -0.180578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.802677 0.22345 -0.163362 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.778718 0.223304 -0.157397 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.770818 0.236351 -0.188808 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.763837 0.241205 -0.165627 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.772915 0.259253 -0.179823 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.794777 0.236497 -0.194773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.796874 0.2594 -0.185788 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.811756 0.241498 -0.177557 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.752156 0.305221 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.741263 0.325175 -0.169507 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.747715 0.32493 -0.145675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.765112 0.325981 -0.163165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.745704 0.305466 -0.183703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.769553 0.306272 -0.17736 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.756597 0.285513 -0.174066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.728307 0.304415 -0.166213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.7392 0.284462 -0.156576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.734759 0.304171 -0.142381 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.838847 0.34578 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.851488 0.360404 -0.132647 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.853509 0.335865 -0.1345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.832518 0.347059 -0.141116 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.836826 0.370319 -0.115431 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.817857 0.356973 -0.1239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.824185 0.355695 -0.100068 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.857816 0.359125 -0.108814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.845176 0.344501 -0.0934517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.859838 0.334587 -0.110668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.766968 0.345341 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.768944 0.369945 -0.10004 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.788341 0.356172 -0.093424 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.780624 0.356171 -0.116879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.747572 0.359113 -0.106005 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759252 0.34534 -0.122844 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.745596 0.33451 -0.105354 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.755289 0.359115 -0.0825505 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.753313 0.334511 -0.0818993 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.774685 0.345342 -0.0759343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.817421 0.321591 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.83071 0.340361 -0.0416443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.840365 0.325527 -0.0588603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.822249 0.341208 -0.0648253 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.807766 0.336425 -0.0334138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.799305 0.337272 -0.0565949 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.794477 0.317654 -0.0423994 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.825882 0.320744 -0.0274488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.812593 0.301973 -0.0364345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.835537 0.30591 -0.0446649 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.874487 0.28191 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.891539 0.292033 -0.143718 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.868678 0.28812 -0.152187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.872763 0.305711 -0.135349 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.897348 0.285824 -0.120537 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.878572 0.299501 -0.112168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.880296 0.275701 -0.105825 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.893263 0.268233 -0.137375 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.876212 0.25811 -0.122663 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.870402 0.264319 -0.145845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.853061 0.257721 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.87538 0.26204 -0.0527151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.87108 0.266856 -0.0765474 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.860805 0.280934 -0.0590577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.857361 0.252905 -0.0385197 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.842785 0.271799 -0.0448623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.835041 0.248586 -0.0481565 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.867636 0.238827 -0.0560094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.845317 0.234508 -0.0656463 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.863337 0.243643 -0.0798417 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.838248 0.217602 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.860225 0.206363 -0.122182 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.858689 0.230102 -0.128798 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.854636 0.223536 -0.105343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.839784 0.193863 -0.116217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.834196 0.211035 -0.0993785 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.817808 0.205101 -0.116868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.843837 0.200429 -0.139672 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.821861 0.211667 -0.140323 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.842301 0.224168 -0.146288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.643951 0.172546 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.61371 0.202787 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.61556 0.221097 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.621702 0.225035 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.635958 0.210779 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607567 0.198849 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627965 0.188531 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605717 0.180539 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.593312 0.213105 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.591462 0.194794 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.599454 0.217042 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5724 0.191718 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.556122 0.208861 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.575596 0.203643 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.578791 0.215568 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.552927 0.196936 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.575596 0.203643 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569205 0.179793 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.549732 0.185011 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.56601 0.167868 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569205 0.179793 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624779 0.244096 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.631486 0.266765 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.648629 0.250487 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.636704 0.247291 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607636 0.260374 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.612854 0.240901 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.600929 0.237705 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.619561 0.26357 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.612854 0.240901 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.636704 0.247291 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.68526 0.183615 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.684921 0.190903 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665787 0.178397 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669989 0.201661 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.704395 0.196121 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.689462 0.206879 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.704733 0.188833 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.700193 0.172858 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.700531 0.165569 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.681058 0.160351 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.696329 0.224924 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.710584 0.23918 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.705059 0.216195 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.687599 0.233654 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.701855 0.24791 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.678869 0.242384 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.687599 0.233654 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.719314 0.23045 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.705059 0.216195 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.713788 0.207465 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.715501 0.153374 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.738169 0.160081 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.718696 0.165299 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721891 0.177224 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.734974 0.148156 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.718696 0.165299 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.712305 0.141449 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.731779 0.136231 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.70911 0.129524 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.712305 0.141449 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.632882 0.131237 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.634145 0.108412 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.650927 0.115965 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627664 0.111763 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616099 0.123683 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.609618 0.127034 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.614836 0.146508 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639363 0.127886 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.6381 0.15071 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.656145 0.135439 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663122 0.100996 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.680265 0.0847178 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.686972 0.107387 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675047 0.104191 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.656415 0.0783272 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.651197 0.0978007 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639272 0.0946054 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.66834 0.0815225 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.651197 0.0978007 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675047 0.104191 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.591572 0.120168 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.577317 0.105912 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.600302 0.111438 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.582843 0.128897 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.568587 0.114642 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.574113 0.137627 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.582843 0.128897 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.586046 0.0971825 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.600302 0.111438 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.609032 0.102708 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.594141 0.358439 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.619127 0.408291 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.625955 0.411883 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.630791 0.390369 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607547 0.396287 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.61429 0.429805 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.595882 0.414208 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607462 0.426212 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.637535 0.423887 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.630706 0.420295 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.642371 0.402373 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.68332 0.389713 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.660156 0.398265 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.68332 0.389713 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.660156 0.398265 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.688854 0.369058 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671225 0.356956 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671225 0.356956 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.638217 0.337042 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.652948 0.344865 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.632683 0.357697 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.651954 0.357326 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.658482 0.324211 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.657489 0.336672 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.643752 0.316388 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639211 0.324581 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624481 0.316758 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.618946 0.337413 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.547576 0.389119 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.541008 0.410169 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.548718 0.410472 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.564748 0.405866 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539866 0.388816 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.563607 0.384513 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.546435 0.367766 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523836 0.393422 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.530405 0.372372 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.531546 0.393725 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.566667 0.317871 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.555534 0.296626 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.572202 0.297216 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.550163 0.307914 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.549999 0.31728 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.544629 0.328569 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.561133 0.338525 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.572037 0.306582 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.583171 0.327827 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.588706 0.307172 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.501272 0.340934 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.517056 0.359921 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.501272 0.340934 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.517056 0.359921 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.506807 0.320279 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.528125 0.318612 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.528125 0.318612 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.57505 0.429687 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.58161 0.452905 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5989 0.436077 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.586467 0.434777 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.55776 0.446515 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.562617 0.428387 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5512 0.423296 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570193 0.447815 -0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.563633 0.424596 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.587483 0.430987 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.550064 0.379835 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.547099 0.396248 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569716 0.388263 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.557504 0.403175 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.527447 0.387819 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.537852 0.394747 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.530412 0.371406 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539659 0.372907 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542624 0.356494 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.562276 0.364922 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.621614 0.399007 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.637209 0.41723 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.642848 0.401533 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624734 0.418027 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.615976 0.414703 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.603501 0.4155 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.600381 0.39648 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.634089 0.39821 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.618494 0.379986 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639728 0.382513 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.802608 0.281471 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.858698 0.329459 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.872345 0.34259 0.0890951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.86421 0.32016 0.0827387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.848329 0.338969 0.0846485 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.866833 0.351888 0.111295 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.842817 0.348268 0.106848 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.853186 0.338757 0.127138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.882715 0.333079 0.109385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.869068 0.319948 0.125228 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.87458 0.310649 0.103028 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.845371 0.280879 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.849036 0.291048 0.0284303 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.826067 0.287867 0.0369125 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.840755 0.304882 0.0471312 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.868341 0.28406 0.0421477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.86006 0.297894 0.0608487 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.864676 0.273891 0.0643473 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.853652 0.267046 0.0319289 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.849987 0.256877 0.0541285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.830683 0.263865 0.0404111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.798572 0.337088 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.808673 0.346884 0.0420622 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.82298 0.335792 0.0588533 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.807762 0.322361 0.044793 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.784265 0.34818 0.0455609 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.783355 0.323657 0.0482916 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.774164 0.338384 0.0658506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.799483 0.361611 0.0596212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.789382 0.351815 0.079911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.81379 0.350519 0.0764123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.815936 0.330051 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.828769 0.350165 0.171776 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.838905 0.333232 0.156937 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.820583 0.347547 0.148628 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.805799 0.346984 0.180258 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.797614 0.344366 0.157111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.792966 0.32687 0.173902 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.824121 0.332668 0.188567 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.811288 0.312554 0.182211 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.834258 0.315735 0.173728 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.75581 0.33768 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.753851 0.362219 0.124743 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.774086 0.350765 0.133052 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76987 0.352319 0.108773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.735575 0.349134 0.114524 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.751594 0.339233 0.0985541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.737534 0.324595 0.112614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.739791 0.347581 0.138803 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.74175 0.323042 0.136894 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.760026 0.336127 0.147112 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759846 0.282063 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.756464 0.29233 0.193792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.779336 0.288514 0.18531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.765125 0.305929 0.175091 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.736973 0.285879 0.180075 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.745634 0.299478 0.161374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.740355 0.275612 0.157875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.751185 0.268464 0.190293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.754567 0.258198 0.168094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.774058 0.264649 0.181811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.862735 0.273842 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.885497 0.282313 0.158144 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.876946 0.281455 0.134996 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.867718 0.29787 0.150967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.871286 0.274699 0.176845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.853506 0.290257 0.169668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.848523 0.266228 0.172398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.880514 0.258284 0.160875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.857752 0.249813 0.156428 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.871963 0.257427 0.137727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.806645 0.225855 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.818054 0.21762 0.18016 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.83061 0.230661 0.163369 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.813612 0.241754 0.177429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.794089 0.212813 0.176661 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.789647 0.236948 0.173931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.78268 0.221048 0.156372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.811087 0.20172 0.162601 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.799677 0.209955 0.142311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.823642 0.214761 0.14581 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.849407 0.225263 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.873186 0.21889 0.0974792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.865588 0.240865 0.0891702 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.866351 0.236437 0.113449 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.857005 0.203288 0.107698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.850171 0.220835 0.123668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.833227 0.20966 0.109608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.856242 0.207715 0.0834188 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.832464 0.214088 0.0853287 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.848644 0.22969 0.0751099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.594141 0.358439 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.613592 0.428945 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.626191 0.448155 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.634643 0.42519 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.614455 0.43276 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.60514 0.45191 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.593404 0.436515 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.592541 0.4327 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.625328 0.44434 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.612729 0.42513 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.63378 0.421375 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.68332 0.389713 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.660156 0.398265 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.68332 0.389713 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.660156 0.398265 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665691 0.37761 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.688854 0.369058 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671225 0.356956 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671225 0.356956 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.621614 0.399007 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.625435 0.399844 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627149 0.378352 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.60511 0.38905 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.619901 0.420499 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.599576 0.409705 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.61608 0.419661 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.641939 0.409801 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.638118 0.408963 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.643653 0.388308 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542042 0.409774 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.53788 0.433888 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.558395 0.423551 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.55574 0.426423 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.521526 0.42011 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539387 0.412646 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.525689 0.395996 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.524182 0.417238 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.528344 0.393124 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.544697 0.406901 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.550064 0.379835 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.540802 0.399304 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.54453 0.400489 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.563801 0.400119 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.546337 0.37865 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569335 0.379464 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555599 0.35918 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.527065 0.37902 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.536327 0.359551 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.530793 0.380205 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.501272 0.340934 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.517056 0.359921 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.501272 0.340934 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.517056 0.359921 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522591 0.339267 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.506807 0.320279 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.528125 0.318612 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.528125 0.318612 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.586119 0.388377 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.594185 0.405974 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.609969 0.394768 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.593017 0.410332 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570335 0.399584 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569167 0.403942 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.562269 0.381987 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.587286 0.384019 0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.57922 0.366422 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.60307 0.372813 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.566667 0.317871 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.567308 0.314012 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.587901 0.320398 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569787 0.336891 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.546074 0.311485 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.548554 0.334364 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.545434 0.315344 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.564188 0.294991 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.563547 0.29885 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.584781 0.301377 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.638217 0.337042 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.659244 0.341809 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.65787 0.345471 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.645657 0.360383 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639592 0.33338 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626005 0.351955 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.618565 0.328614 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.651804 0.318468 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.630777 0.313702 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.65043 0.32213 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.643951 0.172546 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.674191 0.202787 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.690652 0.219248 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.695267 0.206403 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.677807 0.223862 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669577 0.215632 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.656732 0.220246 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.653116 0.199171 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.687036 0.198172 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.670575 0.181711 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.691651 0.185327 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.715501 0.191718 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.733129 0.203821 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.715501 0.191718 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.709966 0.212373 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.733129 0.203821 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.709966 0.212373 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.715501 0.191718 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.738664 0.183166 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721035 0.171063 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721035 0.171063 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663122 0.244096 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.675225 0.261725 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.683777 0.238562 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663122 0.244096 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.65457 0.267259 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.642468 0.249631 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.642468 0.249631 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675225 0.261725 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663122 0.244096 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.683777 0.238562 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.602641 0.183615 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.600215 0.197046 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.622701 0.191021 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.609032 0.207465 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.580155 0.18964 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.588972 0.200059 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.582581 0.176209 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.593824 0.173196 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.596251 0.159765 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.61631 0.167171 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.591572 0.224924 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.587397 0.24926 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.606693 0.240045 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.606693 0.240045 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.572277 0.23414 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.591572 0.224924 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.576452 0.209804 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.572277 0.23414 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.576452 0.209804 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.591572 0.224924 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5724 0.153374 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.551082 0.155041 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5724 0.153374 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.566866 0.174029 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.551082 0.155041 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.566866 0.174029 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.5724 0.153374 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.556617 0.134387 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.577935 0.13272 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.577935 0.13272 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.655019 0.131237 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.668451 0.12881 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.678869 0.137627 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.662426 0.151296 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644601 0.12242 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.638576 0.144906 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.631169 0.124846 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.661044 0.108751 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.647613 0.111177 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671463 0.117567 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624779 0.100996 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.626446 0.0796777 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.645433 0.0954616 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624779 0.100996 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605791 0.0852121 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.604124 0.10653 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.604124 0.10653 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626446 0.0796777 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624779 0.100996 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.645433 0.0954616 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.696329 0.120168 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.720665 0.115992 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.711449 0.135288 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.711449 0.135288 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.705544 0.100872 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.696329 0.120168 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.681209 0.105047 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.705544 0.100872 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.681209 0.105047 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.696329 0.120168 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.852418 0.0955788 1.89979e-16 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.922609 0.11107 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.937225 0.122151 -0.0344251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.916553 0.11086 -0.0418311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.915202 0.131874 -0.0289382 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.943281 0.12236 -0.0104889 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.921258 0.132084 -0.00500196 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.928665 0.111279 0.00604126 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.944632 0.101346 -0.0233819 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.930016 0.0902645 -0.00685171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.92396 0.090055 -0.0307879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.867231 0.135698 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.873196 0.134634 -0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.882112 0.117797 -0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.858152 0.11765 -0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.858315 0.152536 -0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.843271 0.135552 -0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.852349 0.1536 -0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.882275 0.152682 -0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.876309 0.153747 -0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.89119 0.135845 -0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.877966 0.164775 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.890926 0.182656 -0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.897331 0.159019 -0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.876622 0.167676 -0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.871561 0.188412 0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.857256 0.173431 -0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.8586 0.17053 0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.89227 0.179755 0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.87931 0.161874 0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.898675 0.156118 0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.907797 0.0709499 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.930963 0.0752104 0.0499923 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.924191 0.0806562 0.0268805 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.915684 0.0941344 0.0457385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.914568 0.0655041 0.065698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.899289 0.0844281 0.0614442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.891402 0.0612436 0.058292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.923076 0.0520258 0.0468401 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.89991 0.0477654 0.0394341 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.916304 0.0574717 0.0237283 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.863153 0.124655 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.875744 0.141535 0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.88655 0.129819 0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.868763 0.146389 0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.852347 0.136371 0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.845366 0.141225 0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.839756 0.119492 0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.870135 0.119801 0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.857544 0.102922 0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.880941 0.108085 0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.837606 0.0554592 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.842832 0.0523913 0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.86055 0.0593957 0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.842434 0.0750766 0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.819888 0.0484547 0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.81949 0.07114 0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.814662 0.0515226 0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.838004 0.0327739 0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.832778 0.0358417 0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.855722 0.0397783 0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.897062 0.0418734 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.920407 0.0359958 -0.0301783 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.912106 0.0588574 -0.0344321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.915603 0.0511067 -0.0112511 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.905363 0.0190117 -0.0204376 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.900559 0.0341227 -0.00151032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.882018 0.0248894 -0.0149506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.901866 0.0267625 -0.0436186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.878521 0.0326401 -0.0381316 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.893565 0.0496241 -0.0478724 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.826871 0.0263827 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.825102 0.00436945 0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.84533 0.018173 0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.823964 0.025051 0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.806642 0.0125791 -0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.805505 0.0332607 0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.808411 0.0345923 -0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.828008 0.00570109 -0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.829777 0.0277143 -0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.848237 0.0195047 -0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.841683 0.0665023 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.840284 0.0454909 -0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.856111 0.0473735 -0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.831823 0.0463379 -0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.825856 0.0646197 -0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.817395 0.0654667 -0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.827255 0.0856311 -0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.850144 0.0656554 -0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.851543 0.0866667 -0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.865971 0.0675379 -0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.69376 -0.0133465 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.740325 -0.0440268 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.762259 -0.0417568 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759495 -0.0345526 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.748937 -0.0216407 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.743089 -0.051231 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.729767 -0.0311149 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721155 -0.053501 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.753646 -0.0641429 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.731712 -0.0664129 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.750882 -0.0569387 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.782939 0.0179281 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759776 0.02648 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.782939 0.0179281 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759776 0.02648 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.788473 -0.00272662 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.770845 -0.0148294 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.770845 -0.0148294 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721234 0.0272215 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.736829 0.0454452 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.742467 0.0297485 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.724354 0.046242 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.715595 0.0429182 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.70312 0.043715 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.7 0.0246945 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.733709 0.0264247 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.718114 0.00820099 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.739347 0.010728 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.668775 -0.0631985 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.669983 -0.0708196 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.690113 -0.0618185 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671462 -0.0467378 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.648644 -0.0721997 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.650123 -0.0481178 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.647436 -0.0645786 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.667296 -0.0872804 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.666087 -0.0796593 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.687426 -0.0782793 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.649684 0.00804971 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.646718 0.0244627 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669336 0.016478 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.657124 0.0313903 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627066 0.0160343 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.637471 0.022962 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.630031 -0.000378614 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639278 0.00112207 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.642244 -0.0152909 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.661896 -0.00686255 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.600892 -0.0308513 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616676 -0.0118635 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.600892 -0.0308513 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616676 -0.0118635 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.606426 -0.051506 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627745 -0.053173 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627745 -0.053173 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.712851 -0.0845947 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.730141 -0.101422 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.736701 -0.0782041 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.725284 -0.0832945 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.706291 -0.107813 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.701434 -0.0896851 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.689001 -0.0909853 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.717709 -0.102723 0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.700418 -0.0858949 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.724268 -0.0795043 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.666287 -0.0539145 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.655153 -0.0751594 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671821 -0.0745692 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.649783 -0.0638711 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.649619 -0.0545047 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644249 -0.0432164 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.660752 -0.0332597 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671657 -0.0652028 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.682791 -0.0439578 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.688325 -0.0646126 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.737837 -0.0347427 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.752567 -0.0269197 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.732303 -0.014088 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.751574 -0.0144587 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.758102 -0.0475745 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.757108 -0.0351134 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.743371 -0.0553974 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.73883 -0.0472037 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.7241 -0.0550267 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.718566 -0.0343719 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.69376 -0.0133465 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.745859 -0.0646815 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.770032 -0.0684873 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759394 -0.0481266 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.762305 -0.0507391 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.756497 -0.0850422 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.74877 -0.067294 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.732325 -0.0812364 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.753586 -0.0824297 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.729413 -0.0786239 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.742948 -0.062069 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.782939 0.0179281 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759776 0.02648 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.782939 0.0179281 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759776 0.02648 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.76531 0.0058253 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.788473 -0.00272662 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.770845 -0.0148294 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.770845 -0.0148294 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.737837 -0.0347427 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.758864 -0.0299763 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.757489 -0.0263144 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.745277 -0.0114021 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.739212 -0.0384047 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.725625 -0.0198304 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.718185 -0.043171 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.751424 -0.0533169 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.730397 -0.0580833 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.750049 -0.0496549 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674309 -0.0838533 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.675276 -0.106805 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.694308 -0.091423 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.673094 -0.0875713 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.655278 -0.0992356 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.653095 -0.0800016 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.65431 -0.0762835 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.676491 -0.103087 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675524 -0.0801352 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.695522 -0.0877049 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.666287 -0.0539145 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.666927 -0.0577732 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.68752 -0.0513875 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669407 -0.034894 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.645694 -0.0603001 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.648173 -0.0374209 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.645053 -0.0564414 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663807 -0.0767937 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663167 -0.072935 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.6844 -0.070408 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.600892 -0.0308513 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616676 -0.0118635 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.600892 -0.0308513 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616676 -0.0118635 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62221 -0.0325183 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.606426 -0.051506 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627745 -0.053173 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627745 -0.053173 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.701782 -0.0432853 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.717566 -0.0544915 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.725632 -0.0368947 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.718734 -0.0588496 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.693716 -0.0608821 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.694884 -0.0652402 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.677932 -0.0496759 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.700615 -0.0389272 -0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.684831 -0.027721 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.708681 -0.0213304 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.649684 0.00804971 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.640422 0.0275193 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644149 0.0287044 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.66342 0.0283337 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.645956 0.00686453 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.668955 0.00767898 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.655218 -0.012605 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626685 0.00723527 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.635947 -0.0122343 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.630413 0.00842045 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721234 0.0272215 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.725055 0.0280589 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.726768 0.00656677 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.70473 0.0172649 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.71952 0.0487136 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.699195 0.0379196 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.715699 0.0478762 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.741558 0.0380155 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.737738 0.0371781 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.743272 0.0165234 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172546 0.643951 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.281471 0.802608 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.30566 0.824035 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.302088 0.822021 -0.202114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298094 0.802598 -0.187402 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282758 0.821938 -0.186751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.309654 0.843459 -0.192477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290324 0.843375 -0.177114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.313227 0.845472 -0.168128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32499 0.824119 -0.193128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.328563 0.826132 -0.16878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.320997 0.804695 -0.178416 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.305221 0.752156 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.325175 0.741263 -0.169507 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.325981 0.765112 -0.163165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32493 0.747715 -0.145675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.304415 0.728307 -0.166213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.304171 0.734759 -0.142381 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.284462 0.7392 -0.156576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.305466 0.745704 -0.183703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.285513 0.756597 -0.174066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.306272 0.769553 -0.17736 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241352 0.787796 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.218449 0.785699 -0.180578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.223304 0.778718 -0.157397 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.22345 0.802677 -0.163362 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236497 0.794777 -0.194773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241498 0.811756 -0.177557 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2594 0.796874 -0.185788 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236351 0.770818 -0.188808 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.259253 0.772915 -0.179823 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241205 0.763837 -0.165627 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.28191 0.874487 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.292033 0.891539 -0.143718 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.305711 0.872763 -0.135349 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.28812 0.868678 -0.152187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268233 0.893263 -0.137375 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.264319 0.870402 -0.145845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.25811 0.876212 -0.122663 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.285824 0.897348 -0.120537 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275701 0.880296 -0.105825 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.299501 0.878572 -0.112168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.217602 0.838248 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.206363 0.860225 -0.122182 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.223536 0.854636 -0.105343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.230102 0.858689 -0.128798 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.200429 0.843837 -0.139672 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.224168 0.842301 -0.146288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.211667 0.821861 -0.140323 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.193863 0.839784 -0.116217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.205101 0.817808 -0.116868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.211035 0.834196 -0.0993785 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.257721 0.853061 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.26204 0.87538 -0.0527151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.280934 0.860805 -0.0590577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.266856 0.87108 -0.0765474 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.238827 0.867636 -0.0560094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.243643 0.863337 -0.0798417 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.234508 0.845317 -0.0656463 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.252905 0.857361 -0.0385197 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.248586 0.835041 -0.0481565 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271799 0.842785 -0.0448623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.34578 0.838847 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.360404 0.851488 -0.132647 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.347059 0.832518 -0.141116 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.335865 0.853509 -0.1345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359125 0.857816 -0.108814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334587 0.859838 -0.110668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.344501 0.845176 -0.0934517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.370319 0.836826 -0.115431 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355695 0.824185 -0.100068 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356973 0.817857 -0.1239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321591 0.817421 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.340361 0.83071 -0.0416443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.341208 0.822249 -0.0648253 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.325527 0.840365 -0.0588603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.320744 0.825882 -0.0274488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30591 0.835537 -0.0446649 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301973 0.812593 -0.0364345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.336425 0.807766 -0.0334138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317654 0.794477 -0.0423994 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337272 0.799305 -0.0565949 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345341 0.766968 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.369945 0.768944 -0.10004 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356171 0.780624 -0.116879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356172 0.788341 -0.093424 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359115 0.755289 -0.0825505 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345342 0.774685 -0.0759343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334511 0.753313 -0.0818993 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359113 0.747572 -0.106005 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33451 0.745596 -0.105354 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.34534 0.759252 -0.122844 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.358439 0.594141 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.408291 0.619127 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.411883 0.625955 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396287 0.607547 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.390369 0.630791 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.423887 0.637535 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.402373 0.642371 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.420295 0.630706 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429805 0.61429 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.426212 0.607462 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.414208 0.595882 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337042 0.638217 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.344865 0.652948 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.357326 0.651954 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.357697 0.632683 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324581 0.639211 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337413 0.618946 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316758 0.624481 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324211 0.658482 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316388 0.643752 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.336672 0.657489 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.389713 0.68332 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.398265 0.660156 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369058 0.688854 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356956 0.671225 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356956 0.671225 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.389713 0.68332 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.398265 0.660156 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.429687 0.57505 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.452905 0.58161 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.434777 0.586467 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436077 0.5989 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447815 0.570193 -0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.430987 0.587483 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.424596 0.563633 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.446515 0.55776 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.423296 0.5512 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.428387 0.562617 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399007 0.621614 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.41723 0.637209 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.418027 0.624734 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.401533 0.642848 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.39821 0.634089 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.382513 0.639728 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379986 0.618494 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.414703 0.615976 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.39648 0.600381 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4155 0.603501 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379835 0.550064 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.396248 0.547099 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.403175 0.557504 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388263 0.569716 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.372907 0.539659 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.364922 0.562276 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356494 0.542624 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387819 0.527447 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.371406 0.530412 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.394747 0.537852 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.389119 0.547576 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.410169 0.541008 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.405866 0.564748 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410472 0.548718 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.393422 0.523836 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.393725 0.531546 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.372372 0.530405 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388816 0.539866 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367766 0.546435 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.384513 0.563607 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.340934 0.501272 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359921 0.517056 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.320279 0.506807 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318612 0.528125 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318612 0.528125 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.340934 0.501272 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359921 0.517056 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317871 0.566667 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.296626 0.555534 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307914 0.550163 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.297216 0.572202 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.306582 0.572037 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307172 0.588706 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.327827 0.583171 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31728 0.549999 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338525 0.561133 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.328569 0.544629 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172546 0.643951 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.142305 0.674191 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.144155 0.692502 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.150298 0.696439 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.164554 0.682184 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.136163 0.670254 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.156561 0.659936 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.134313 0.651943 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.121907 0.684509 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.120057 0.666199 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.12805 0.688447 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100996 0.663122 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0847178 0.680265 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.104191 0.675047 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.107387 0.686972 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0815225 0.66834 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.104191 0.675047 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0978007 0.651197 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0783272 0.656415 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0946054 0.639272 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0978007 0.651197 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153374 0.715501 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.160081 0.738169 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.177224 0.721891 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165299 0.718696 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.136231 0.731779 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.141449 0.712305 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.129524 0.70911 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.148156 0.734974 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.141449 0.712305 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165299 0.718696 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.213855 0.655019 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.213517 0.662308 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.194382 0.649801 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.198584 0.673065 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23299 0.667526 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.218058 0.678283 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.233329 0.660237 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228788 0.644262 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.229127 0.636974 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.209653 0.631756 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.224924 0.696329 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.23918 0.710584 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.233654 0.687599 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.216195 0.705059 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23045 0.719314 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.207465 0.713788 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.216195 0.705059 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.24791 0.701855 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.233654 0.687599 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.242384 0.678869 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.244096 0.624779 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.266765 0.631486 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247291 0.636704 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250487 0.648629 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.26357 0.619561 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247291 0.636704 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.240901 0.612854 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.260374 0.607636 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.237705 0.600929 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.240901 0.612854 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161477 0.602641 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.162741 0.579817 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179523 0.58737 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.156259 0.583168 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.144695 0.595088 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.138214 0.598439 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.143431 0.617912 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167958 0.59929 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.166695 0.622115 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.184741 0.606843 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191718 0.5724 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.208861 0.556122 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.215568 0.578791 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.203643 0.575596 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.185011 0.549732 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179793 0.569205 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167868 0.56601 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.196936 0.552927 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179793 0.569205 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.203643 0.575596 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.120168 0.591572 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.105912 0.577317 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.128897 0.582843 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.111438 0.600302 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0971825 0.586046 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.102708 0.609032 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.111438 0.600302 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.114642 0.568587 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.128897 0.582843 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.137627 0.574113 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0955788 0.852418 9.1293e-17 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.11107 0.922609 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.122151 0.937225 -0.0344251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.131874 0.915202 -0.0289382 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.11086 0.916553 -0.0418311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.101346 0.944632 -0.0233819 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.090055 0.92396 -0.0307879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0902645 0.930016 -0.00685171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.12236 0.943281 -0.0104889 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.111279 0.928665 0.00604126 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.132084 0.921258 -0.00500196 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.164775 0.877966 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.182656 0.890926 -0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167676 0.876622 -0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159019 0.897331 -0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179755 0.89227 0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.156118 0.898675 0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161874 0.87931 0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.188412 0.871561 0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.17053 0.8586 0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.173431 0.857256 -0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.135698 0.867231 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.134634 0.873196 -0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.11765 0.858152 -0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.117797 0.882112 -0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.152682 0.882275 -0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.135845 0.89119 -0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153747 0.876309 -0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.152536 0.858315 -0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.1536 0.852349 -0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.135552 0.843271 -0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0418734 0.897062 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0359958 0.920407 -0.0301783 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0511067 0.915603 -0.0112511 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0588574 0.912106 -0.0344321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0267625 0.901866 -0.0436186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0496241 0.893565 -0.0478724 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0326401 0.878521 -0.0381316 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0190117 0.905363 -0.0204376 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0248894 0.882018 -0.0149506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0341227 0.900559 -0.00151032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0665023 0.841683 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0454909 0.840284 -0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0463379 0.831823 -0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0473735 0.856111 -0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0656554 0.850144 -0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0675379 0.865971 -0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0866667 0.851543 -0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0646197 0.825856 -0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0856311 0.827255 -0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0654667 0.817395 -0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0263827 0.826871 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.00436945 0.825102 0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.025051 0.823964 0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.018173 0.84533 0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00570109 0.828008 -0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0195047 0.848237 -0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0277143 0.829777 -0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0125791 0.806642 -0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0345923 0.808411 -0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0332607 0.805505 0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0709499 0.907797 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0752104 0.930963 0.0499923 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0941344 0.915684 0.0457385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0806562 0.924191 0.0268805 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0520258 0.923076 0.0468401 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0574717 0.916304 0.0237283 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0477654 0.89991 0.0394341 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0655041 0.914568 0.065698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0612436 0.891402 0.058292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0844281 0.899289 0.0614442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0554592 0.837606 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0523913 0.842832 0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0750766 0.842434 0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0593957 0.86055 0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0327739 0.838004 0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0397783 0.855722 0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0358417 0.832778 0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0484547 0.819888 0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0515226 0.814662 0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.07114 0.81949 0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.124655 0.863153 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.141535 0.875744 0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.146389 0.868763 0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.129819 0.88655 0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.119801 0.870135 0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.108085 0.880941 0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.102922 0.857544 0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.136371 0.852347 0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.119492 0.839756 0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.141225 0.845366 0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0133465 0.69376 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.0646815 0.745859 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0684873 0.770032 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0507391 0.762305 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0481266 0.759394 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0824297 0.753586 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.062069 0.742948 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0786239 0.729413 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0850422 0.756497 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0812364 0.732325 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.067294 0.74877 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0347427 0.737837 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0299763 0.758864 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0114021 0.745277 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0263144 0.757489 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0533169 0.751424 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0496549 0.750049 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0580833 0.730397 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0384047 0.739212 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.043171 0.718185 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0198304 0.725625 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0179281 0.782939 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.02648 0.759776 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00272662 0.788473 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0148294 0.770845 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0148294 0.770845 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0179281 0.782939 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.02648 0.759776 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0432853 0.701782 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0544915 0.717566 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0588496 0.718734 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0368947 0.725632 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0389272 0.700615 -0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0213304 0.708681 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.027721 0.684831 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0608821 0.693716 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0496759 0.677932 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0652402 0.694884 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0272215 0.721234 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0280589 0.725055 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0172649 0.70473 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00656677 0.726768 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0380155 0.741558 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0165234 0.743272 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0371781 0.737738 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0487136 0.71952 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0478762 0.715699 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0379196 0.699195 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00804971 0.649684 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0275193 0.640422 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0283337 0.66342 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0287044 0.644149 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00723527 0.626685 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00842045 0.630413 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0122343 0.635947 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00686453 0.645956 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.012605 0.655218 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00767898 0.668955 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0838533 0.674309 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.106805 0.675276 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0875713 0.673094 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.091423 0.694308 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.103087 0.676491 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0877049 0.695522 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0801352 0.675524 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0992356 0.655278 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0762835 0.65431 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0800016 0.653095 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0308513 0.600892 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0118635 0.616676 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.051506 0.606426 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.053173 0.627745 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.053173 0.627745 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0308513 0.600892 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0118635 0.616676 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0539145 0.666287 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0577732 0.666927 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.034894 0.669407 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0513875 0.68752 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0767937 0.663807 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.070408 0.6844 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.072935 0.663167 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0603001 0.645694 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0564414 0.645053 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0374209 0.648173 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0133465 0.69376 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.0440268 0.740325 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0417568 0.762259 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0216407 0.748937 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0345526 0.759495 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0641429 0.753646 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0569387 0.750882 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0664129 0.731712 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.051231 0.743089 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.053501 0.721155 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0311149 0.729767 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0272215 0.721234 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0454452 0.736829 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.046242 0.724354 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0297485 0.742467 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0264247 0.733709 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.010728 0.739347 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00820099 0.718114 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0429182 0.715595 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0246945 0.7 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.043715 0.70312 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0179281 0.782939 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.02648 0.759776 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00272662 0.788473 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0148294 0.770845 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0148294 0.770845 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0179281 0.782939 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058253 0.76531 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.02648 0.759776 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0845947 0.712851 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.101422 0.730141 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0832945 0.725284 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0782041 0.736701 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.102723 0.717709 0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0795043 0.724268 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0858949 0.700418 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107813 0.706291 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0909853 0.689001 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0896851 0.701434 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0347427 0.737837 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0269197 0.752567 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0144587 0.751574 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.014088 0.732303 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0472037 0.73883 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0343719 0.718566 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0550267 0.7241 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0475745 0.758102 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0553974 0.743371 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0351134 0.757108 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0539145 0.666287 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0751594 0.655153 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0638711 0.649783 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0745692 0.671821 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0652028 0.671657 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0646126 0.688325 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0439578 0.682791 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0545047 0.649619 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0332597 0.660752 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0432164 0.644249 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0631985 0.668775 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0708196 0.669983 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0467378 0.671462 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0618185 0.690113 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0872804 0.667296 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0782793 0.687426 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0796593 0.666087 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0721997 0.648644 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0645786 0.647436 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0481178 0.650123 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0308513 0.600892 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0118635 0.616676 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.051506 0.606426 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.053173 0.627745 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.053173 0.627745 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0308513 0.600892 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0325183 0.62221 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0118635 0.616676 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00804971 0.649684 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0244627 0.646718 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0313903 0.657124 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.016478 0.669336 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00112207 0.639278 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00686255 0.661896 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0152909 0.642244 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0160343 0.627066 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.000378614 0.630031 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.022962 0.637471 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281471 0.802608 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.329459 0.858698 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.34259 0.872345 0.0890951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338969 0.848329 0.0846485 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32016 0.86421 0.0827387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.333079 0.882715 0.109385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.310649 0.87458 0.103028 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.319948 0.869068 0.125228 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.351888 0.866833 0.111295 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338757 0.853186 0.127138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.348268 0.842817 0.106848 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337088 0.798572 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.346884 0.808673 0.0420622 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.322361 0.807762 0.044793 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.335792 0.82298 0.0588533 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.361611 0.799483 0.0596212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.350519 0.81379 0.0764123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.351815 0.789382 0.079911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.34818 0.784265 0.0455609 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338384 0.774164 0.0658506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.323657 0.783355 0.0482916 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.280879 0.845371 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.291048 0.849036 0.0284303 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.304882 0.840755 0.0471312 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.287867 0.826067 0.0369125 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267046 0.853652 0.0319289 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263865 0.830683 0.0404111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.256877 0.849987 0.0541285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.28406 0.868341 0.0421477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273891 0.864676 0.0643473 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.297894 0.86006 0.0608487 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273842 0.862735 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.282313 0.885497 0.158144 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29787 0.867718 0.150967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281455 0.876946 0.134996 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.258284 0.880514 0.160875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.257427 0.871963 0.137727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.249813 0.857752 0.156428 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.274699 0.871286 0.176845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.266228 0.848523 0.172398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290257 0.853506 0.169668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225263 0.849407 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.21889 0.873186 0.0974792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236437 0.866351 0.113449 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.240865 0.865588 0.0891702 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.207715 0.856242 0.0834188 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.22969 0.848644 0.0751099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.214088 0.832464 0.0853287 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.203288 0.857005 0.107698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.20966 0.833227 0.109608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.220835 0.850171 0.123668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225855 0.806645 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.21762 0.818054 0.18016 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.241754 0.813612 0.177429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.230661 0.83061 0.163369 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.20172 0.811087 0.162601 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.214761 0.823642 0.14581 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.209955 0.799677 0.142311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.212813 0.794089 0.176661 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.221048 0.78268 0.156372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236948 0.789647 0.173931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.330051 0.815936 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.350165 0.828769 0.171776 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.347547 0.820583 0.148628 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.333232 0.838905 0.156937 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.332668 0.824121 0.188567 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.315735 0.834258 0.173728 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.312554 0.811288 0.182211 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.346984 0.805799 0.180258 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32687 0.792966 0.173902 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.344366 0.797614 0.157111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282063 0.759846 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.29233 0.756464 0.193792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.305929 0.765125 0.175091 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.288514 0.779336 0.18531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268464 0.751185 0.190293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.264649 0.774058 0.181811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.258198 0.754567 0.168094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.285879 0.736973 0.180075 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275612 0.740355 0.157875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.299478 0.745634 0.161374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33768 0.75581 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.362219 0.753851 0.124743 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.352319 0.76987 0.108773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.350765 0.774086 0.133052 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.347581 0.739791 0.138803 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.336127 0.760026 0.147112 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.323042 0.74175 0.136894 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.349134 0.735575 0.114524 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324595 0.737534 0.112614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339233 0.751594 0.0985541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172546 0.643951 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.202787 0.674191 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.219248 0.690652 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.223862 0.677807 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.206403 0.695267 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.198172 0.687036 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.185327 0.691651 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.181711 0.670575 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.215632 0.669577 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.199171 0.653116 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.220246 0.656732 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.244096 0.663122 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.261725 0.675225 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.244096 0.663122 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.238562 0.683777 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.261725 0.675225 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.238562 0.683777 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.244096 0.663122 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267259 0.65457 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.249631 0.642468 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.249631 0.642468 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191718 0.715501 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.203821 0.733129 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.212373 0.709966 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191718 0.715501 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183166 0.738664 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.171063 0.721035 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.171063 0.721035 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.203821 0.733129 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191718 0.715501 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.212373 0.709966 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.131237 0.655019 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.12881 0.668451 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.151296 0.662426 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.137627 0.678869 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.108751 0.661044 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.117567 0.671463 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.111177 0.647613 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.12242 0.644601 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.124846 0.631169 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.144906 0.638576 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.120168 0.696329 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.115992 0.720665 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.135288 0.711449 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.135288 0.711449 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100872 0.705544 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.120168 0.696329 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.105047 0.681209 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100872 0.705544 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.105047 0.681209 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.120168 0.696329 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100996 0.624779 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0796777 0.626446 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100996 0.624779 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0954616 0.645433 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0796777 0.626446 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0954616 0.645433 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100996 0.624779 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0852121 0.605791 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.10653 0.604124 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.10653 0.604124 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183615 0.602641 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.197046 0.600215 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.207465 0.609032 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191021 0.622701 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.173196 0.593824 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167171 0.61631 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159765 0.596251 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.18964 0.580155 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.176209 0.582581 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.200059 0.588972 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153374 0.5724 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.155041 0.551082 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.174029 0.566866 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153374 0.5724 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.134387 0.556617 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13272 0.577935 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13272 0.577935 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.155041 0.551082 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153374 0.5724 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.174029 0.566866 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.224924 0.591572 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.24926 0.587397 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.240045 0.606693 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.240045 0.606693 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23414 0.572277 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.224924 0.591572 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.209804 0.576452 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23414 0.572277 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.209804 0.576452 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.224924 0.591572 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.358439 0.594141 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.428945 0.613592 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.448155 0.626191 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.43276 0.614455 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.42519 0.634643 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.44434 0.625328 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.421375 0.63378 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.42513 0.612729 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.45191 0.60514 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4327 0.592541 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436515 0.593404 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399007 0.621614 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.399844 0.625435 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.38905 0.60511 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.378352 0.627149 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.409801 0.641939 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388308 0.643653 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.408963 0.638118 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.420499 0.619901 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.419661 0.61608 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.409705 0.599576 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.389713 0.68332 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.398265 0.660156 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369058 0.688854 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356956 0.671225 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356956 0.671225 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.389713 0.68332 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37761 0.665691 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.398265 0.660156 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388377 0.586119 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.405974 0.594185 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410332 0.593017 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.394768 0.609969 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.384019 0.587286 0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.372813 0.60307 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.366422 0.57922 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399584 0.570335 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.381987 0.562269 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.403942 0.569167 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337042 0.638217 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.341809 0.659244 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.360383 0.645657 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345471 0.65787 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318468 0.651804 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32213 0.65043 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.313702 0.630777 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33338 0.639592 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.328614 0.618565 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.351955 0.626005 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317871 0.566667 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.314012 0.567308 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.336891 0.569787 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.320398 0.587901 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.294991 0.564188 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301377 0.584781 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29885 0.563547 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.311485 0.546074 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.315344 0.545434 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334364 0.548554 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.409774 0.542042 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.433888 0.53788 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.426423 0.55574 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.423551 0.558395 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.417238 0.524182 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.406901 0.544697 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.393124 0.528344 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.42011 0.521526 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.395996 0.525689 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.412646 0.539387 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.340934 0.501272 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359921 0.517056 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.320279 0.506807 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318612 0.528125 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318612 0.528125 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.340934 0.501272 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.339267 0.522591 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359921 0.517056 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379835 0.550064 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.399304 0.540802 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.400119 0.563801 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.400489 0.54453 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37902 0.527065 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.380205 0.530793 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.359551 0.536327 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37865 0.546337 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.35918 0.555599 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379464 0.569335 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.371785 0.0996195 0.544331 RAD 0.166667 
+   txt002 
+ SPHERE CENTER -0.393621 0.220501 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.368601 0.279642 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.354293 0.299716 0.765035 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.347717 0.279022 0.753281 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.366989 0.292196 0.745238 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.375177 0.300337 0.778193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.387873 0.292817 0.758396 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389485 0.280263 0.779597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.355904 0.287162 0.786236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.370213 0.267088 0.787639 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.349329 0.266468 0.774481 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.321889 0.238665 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.304702 0.250544 0.71296 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.32307 0.238717 0.701455 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327715 0.259421 0.714081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.30352 0.250492 0.737623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.326533 0.259369 0.738744 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.320707 0.238612 0.750781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.298875 0.229788 0.724997 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316063 0.217908 0.738155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.317244 0.21796 0.713492 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.372464 0.281062 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.362978 0.289441 0.671279 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.35549 0.267771 0.680442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.378255 0.270044 0.671155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.379952 0.302733 0.683315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.395229 0.283335 0.683192 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389438 0.294353 0.704516 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.357187 0.30046 0.692603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.366673 0.29208 0.713804 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.349699 0.278789 0.701767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.440333 0.261479 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.443285 0.282991 0.781591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.421181 0.271991 0.781342 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4302 0.282046 0.760673 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.462437 0.27248 0.770086 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.449353 0.271534 0.749168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.459485 0.250967 0.758332 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.453417 0.262424 0.790755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.450466 0.240911 0.779001 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431313 0.251423 0.790506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.444196 0.262898 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.449273 0.285685 0.687835 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436139 0.282528 0.708504 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.426189 0.27701 0.68659 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.45733 0.266055 0.675209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434246 0.257381 0.673964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452254 0.243269 0.683251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.46728 0.271573 0.697123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.462204 0.248787 0.705165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.454146 0.268416 0.717791 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.465353 0.202338 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.486123 0.204606 0.746073 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.464339 0.202946 0.757577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.470107 0.223366 0.744951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.487137 0.203998 0.72141 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.471122 0.222757 0.720288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.466367 0.201729 0.708251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.481368 0.183578 0.734036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.460599 0.18131 0.720878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.459584 0.181918 0.745541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389758 0.219082 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.378635 0.228779 0.823273 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.365937 0.225483 0.802355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.383364 0.24293 0.8036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.402455 0.222377 0.824394 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.407185 0.236529 0.804721 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.413578 0.21268 0.804597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.385029 0.20493 0.823149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396152 0.195233 0.803352 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.372331 0.201634 0.802231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.414778 0.15994 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.412573 0.147477 0.787754 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39322 0.15977 0.77859 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.412448 0.172167 0.787878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434131 0.147647 0.775717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434006 0.172338 0.775841 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436336 0.16011 0.754517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.414903 0.13525 0.766429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.417108 0.147713 0.745229 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39555 0.147543 0.757266 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.343046 0.178104 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.319723 0.177083 0.771198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.325124 0.189464 0.750529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.332294 0.198298 0.772443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337645 0.165722 0.783824 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.350216 0.186938 0.785069 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.360967 0.166743 0.775781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.330475 0.156889 0.76191 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.353797 0.157909 0.753867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.335876 0.16927 0.741241 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.191247 0.166275 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.130089 0.20793 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.115471 0.221102 0.637128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.126388 0.200597 0.628759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13987 0.220766 0.633356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.119172 0.228435 0.660413 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.143571 0.228099 0.656641 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13379 0.215264 0.675329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10569 0.208266 0.655816 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120308 0.195095 0.670732 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.116607 0.187762 0.647447 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.154295 0.172673 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.15554 0.180792 0.568278 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.17557 0.171251 0.579113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.166926 0.19323 0.586315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.134265 0.182215 0.580727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.145651 0.194652 0.598764 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.133019 0.174096 0.604012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.142909 0.160236 0.573526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.141663 0.152117 0.596811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.162939 0.150694 0.584361 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.192135 0.230419 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.18209 0.243049 0.599717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.168159 0.227721 0.613157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.185251 0.218634 0.597829 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.206066 0.245747 0.604965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.209227 0.221332 0.603077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216111 0.233117 0.623653 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.188974 0.254834 0.620293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.199019 0.242204 0.638981 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.175043 0.239506 0.633733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.167041 0.201532 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.151829 0.219088 0.724292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.14514 0.205084 0.705088 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.163068 0.221861 0.702483 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.173729 0.215537 0.735128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.184969 0.218309 0.713318 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.188942 0.197981 0.726759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.155801 0.19876 0.737733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171014 0.181204 0.729364 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.149113 0.184756 0.718528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.229087 0.224021 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.22829 0.248268 0.686881 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207937 0.234532 0.689486 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216949 0.2391 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.249439 0.237756 0.67968 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238098 0.228589 0.659755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.250236 0.213509 0.675083 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.240428 0.233189 0.702209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.241225 0.208942 0.697613 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.220075 0.219453 0.704814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.228199 0.159877 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.229756 0.167942 0.742607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207683 0.16569 0.731771 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.223214 0.183484 0.72457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.250271 0.162129 0.730157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.243729 0.177671 0.71212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.248714 0.154064 0.706872 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.234741 0.144336 0.737359 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.233184 0.13627 0.714074 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.212668 0.142084 0.726523 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.129201 0.143787 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.105335 0.14887 0.692853 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115741 0.153943 0.671044 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.121723 0.167242 0.690969 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.118795 0.138714 0.71089 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135183 0.157086 0.709006 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.142661 0.13363 0.707118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.112813 0.125414 0.690965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.136679 0.120331 0.687193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.123219 0.130487 0.669156 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.190359 0.102131 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.179968 0.0897843 0.711167 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.166467 0.105492 0.697727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.183804 0.114103 0.713055 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.20386 0.0864233 0.705919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207696 0.110742 0.707807 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.214251 0.0987702 0.687231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.186523 0.0778128 0.690591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.196914 0.0901597 0.671903 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.173022 0.0935207 0.677151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153407 0.108529 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.130858 0.0995811 0.624003 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135326 0.123725 0.621398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.134736 0.113639 0.643928 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.148938 0.0843858 0.631205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.152816 0.0984435 0.65113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171487 0.0933338 0.635801 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.149528 0.0944715 0.608675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172078 0.10342 0.613272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153997 0.118615 0.60607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.31427 0.31427 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.277961 0.367156 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.269898 0.374298 0.485076 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.270045 0.350338 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.291334 0.362218 0.487134 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.277815 0.391115 0.501329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.299251 0.379036 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.285878 0.383973 0.523547 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.256525 0.379235 0.505236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.264588 0.372093 0.527454 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.256671 0.355276 0.511201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.252306 0.297666 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.235688 0.305995 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.259438 0.312359 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.245915 0.321516 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.228556 0.291303 0.509559 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238783 0.306824 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.245173 0.282974 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.242079 0.282145 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.258696 0.273816 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.265828 0.288509 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.31427 0.31427 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.32435 0.32435 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.33812 0.32066 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.32066 0.33812 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3005 0.317959 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.29681 0.331729 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.29042 0.307879 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.317959 0.3005 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307879 0.29042 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.331729 0.29681 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339925 0.383759 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.334762 0.407156 0.538366 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.31686 0.392275 0.546597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.326552 0.388696 0.524171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.357827 0.39864 0.536101 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.349618 0.380181 0.521905 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362991 0.375243 0.542066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.348135 0.402218 0.558526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.353299 0.378821 0.564491 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.330233 0.387337 0.566757 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376234 0.330873 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.393346 0.348239 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.383366 0.345565 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.369843 0.354723 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.386213 0.333547 0.484868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362711 0.340031 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.369102 0.316181 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399736 0.324389 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.382624 0.307023 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389757 0.321715 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376234 0.330873 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.386461 0.346394 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362711 0.340031 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.369843 0.354723 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399983 0.337237 0.579103 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.383366 0.345565 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389757 0.321715 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.392851 0.322544 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.382624 0.307023 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.369102 0.316181 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.277961 0.367156 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.261966 0.385852 0.57931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.259422 0.36581 0.565115 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.278159 0.38141 0.561208 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.280504 0.387198 0.595564 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.296698 0.382755 0.577461 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.2965 0.368501 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.261768 0.371598 0.599471 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.277764 0.352901 0.601529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.259225 0.351556 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.31427 0.31427 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.304189 0.32435 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.29042 0.32066 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307879 0.33812 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.328039 0.317959 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.331729 0.331729 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.33812 0.307879 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.31058 0.3005 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.32066 0.29042 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.29681 0.29681 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.252306 0.297666 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.228803 0.30415 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238783 0.306824 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.245915 0.321516 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.242326 0.294992 0.603794 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.259438 0.312359 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.265828 0.288509 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.235194 0.2803 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.258696 0.273816 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.245173 0.282974 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.574159 0.153845 0.618405 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.612768 0.202534 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.612732 0.225282 0.668328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591695 0.212428 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.60221 0.22113 0.64638 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.633805 0.215388 0.660098 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.623283 0.211236 0.63815 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.63384 0.192641 0.650495 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62329 0.206686 0.680674 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.623325 0.183939 0.671072 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.602253 0.193832 0.679302 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.543919 0.184086 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.527458 0.200547 0.687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522843 0.187702 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.540303 0.205161 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.548533 0.196931 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.561378 0.201546 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.564994 0.18047 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.531074 0.179472 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.547535 0.163011 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.526459 0.166627 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554987 0.225396 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.542885 0.243024 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534333 0.219861 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554987 0.225396 0.593714 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.563539 0.248559 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575642 0.23093 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575642 0.23093 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542885 0.243024 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554987 0.225396 0.643096 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534333 0.219861 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643008 0.172294 0.598245 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.660425 0.189742 0.599616 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645434 0.185725 0.618821 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.636618 0.196144 0.598245 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.657999 0.17631 0.57904 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.634191 0.182712 0.577669 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.640582 0.158862 0.577669 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666816 0.165892 0.599616 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649399 0.148444 0.598245 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.651825 0.161875 0.618821 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.585228 0.195155 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.574809 0.203972 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.561378 0.201546 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.568784 0.181486 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.598659 0.197581 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.592634 0.175095 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.609078 0.188764 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591253 0.217641 0.549693 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.601672 0.208824 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.577822 0.215215 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.6044 0.123605 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.620861 0.107144 0.549693 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.608016 0.102529 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625475 0.119989 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.617245 0.128219 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.621859 0.141064 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600784 0.14468 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.599785 0.11076 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.583324 0.127221 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58694 0.106145 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631939 0.130984 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.643128 0.132649 0.680674 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.618482 0.133263 0.679302 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631785 0.152367 0.671072 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.656585 0.130371 0.660098 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645242 0.150088 0.650495 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645397 0.128706 0.63815 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643283 0.111266 0.668328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.632094 0.109601 0.64638 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.618637 0.11188 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593331 0.0822954 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.591664 0.0609772 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.572676 0.076761 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593331 0.0822954 0.643096 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.612319 0.0665116 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613986 0.0878298 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613986 0.0878298 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591664 0.0609772 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593331 0.0822954 0.593714 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.572676 0.076761 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.56309 0.112536 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.549659 0.11011 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.53924 0.118927 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555684 0.132596 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.573509 0.103719 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.579534 0.126205 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58694 0.106145 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.557065 0.09005 0.687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.570497 0.0924762 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.546646 0.0988668 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.494808 0.247614 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.494287 0.313607 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.484182 0.326876 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.470513 0.310432 0.39372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.488171 0.302705 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507957 0.330051 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.511946 0.305881 0.384149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.518062 0.316783 0.405442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.490299 0.337778 0.402668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.500404 0.324509 0.420874 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.476629 0.321334 0.415013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452978 0.302539 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.436971 0.320401 0.454201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436675 0.29902 0.441856 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.455413 0.3148 0.438769 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.453274 0.32392 0.472408 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.471717 0.318318 0.456976 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.469281 0.306057 0.478269 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434535 0.30814 0.475494 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.450543 0.290278 0.481355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434239 0.286759 0.463149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434629 0.269833 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.426389 0.279233 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.445377 0.263449 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.448298 0.286276 0.383837 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.415641 0.285616 0.396183 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.43755 0.29266 0.40513 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.42388 0.276216 0.417476 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.41272 0.262789 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.420959 0.253389 0.408529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431707 0.247006 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536117 0.258683 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.549787 0.275127 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.549787 0.275127 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.529727 0.282533 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536117 0.258683 0.348047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.516058 0.266089 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522448 0.242239 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.556177 0.251277 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542508 0.234833 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.556177 0.251277 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.476459 0.214908 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.457868 0.209819 0.353908 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.458164 0.2312 0.366254 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.453963 0.210053 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.476163 0.193527 0.356995 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.472258 0.193761 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.494753 0.198616 0.372427 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.480363 0.214674 0.344961 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.498954 0.219763 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.480659 0.236055 0.357307 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536638 0.19269 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.549603 0.17251 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528912 0.177908 0.424584 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.549105 0.191778 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.557329 0.187292 0.394032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.556831 0.20656 0.409464 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.544363 0.207471 0.388171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.537136 0.173421 0.390945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.524171 0.193601 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.516445 0.178819 0.403291 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554467 0.291389 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.562288 0.314604 0.439705 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542501 0.306499 0.45205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.541186 0.310183 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.574255 0.299494 0.424272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.553152 0.295073 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.566433 0.276279 0.421186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575569 0.29581 0.448652 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.567748 0.272595 0.445566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555781 0.287705 0.460998 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554987 0.225396 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.567359 0.227186 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.54267 0.227528 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555283 0.246777 0.482603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.579676 0.225054 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.567601 0.244644 0.46131 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.567305 0.223263 0.448964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.567063 0.205805 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554691 0.204014 0.457911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542374 0.206147 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.513157 0.28032 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.507811 0.298839 0.512531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.489718 0.287442 0.500186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.505577 0.302049 0.488152 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.531251 0.291716 0.509445 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.529016 0.294927 0.485065 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536597 0.273198 0.494013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.515392 0.27711 0.521479 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.520738 0.258591 0.506047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.497299 0.265714 0.509133 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.552323 0.0329639 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.625877 0.0248832 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.646362 0.0316054 0.448652 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625173 0.0287309 0.460998 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627981 0.0478 0.445566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.647066 0.0277577 0.424272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.628685 0.0439523 0.421186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62658 0.0210355 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644258 0.00868865 0.439705 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.623773 0.00196644 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.623069 0.00581415 0.45205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.584567 0.0138144 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.584898 0.0177119 0.521479 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.56353 0.0185345 0.509133 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.580268 0.0364224 0.506047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.605935 0.0129918 0.509445 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.601305 0.0317022 0.494013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.605605 0.00909422 0.485065 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.589197 -0.00489609 0.512531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.588867 -0.00879364 0.488152 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.567829 -0.00407348 0.500186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593331 0.0822954 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.593994 0.105299 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.572783 0.0926585 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582384 0.100664 0.457911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.614541 0.0949359 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.602932 0.090301 0.448964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613879 0.0719323 0.46131 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604941 0.0869303 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604278 0.0639267 0.482603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58373 0.0742898 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593633 0.0440327 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.607302 0.0604766 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.607302 0.0604766 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587242 0.0678827 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593633 0.0440327 0.348047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.573573 0.0514389 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.579964 0.0275889 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613693 0.0366265 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600023 0.0201827 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613693 0.0366265 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.561087 0.101445 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.551884 0.118381 0.390945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536664 0.103361 0.403291 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.550745 0.0944221 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.576307 0.116465 0.394032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575168 0.0925065 0.388171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58551 0.0995293 0.409464 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.562225 0.125404 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.571428 0.108468 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.547006 0.110383 0.424584 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.520079 0.0521134 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.523344 0.0542684 0.344961 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534291 0.0358996 0.357307 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.541988 0.0591566 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.509132 0.0704822 0.356995 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.527777 0.0753703 0.372427 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.505868 0.0683272 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.501435 0.0472252 0.353908 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.49817 0.0450702 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.512382 0.0288565 0.366254 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.584869 -0.0244483 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.5935 -0.0473753 0.402668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.57344 -0.0399691 0.415013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.595617 -0.0308315 0.420874 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604929 -0.0318545 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.607046 -0.0153107 0.405442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.596298 -0.00892756 0.384149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582752 -0.0409921 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.574121 -0.0180651 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.562692 -0.0335859 0.39372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.511316 -0.0163676 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.48882 -0.0212225 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.497372 0.00194055 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.491256 -0.00896145 0.408529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.502764 -0.0395307 0.396183 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.505199 -0.0272696 0.417476 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.525259 -0.0346758 0.40513 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.50888 -0.0286287 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.531375 -0.0237738 0.383837 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.517432 -0.00546563 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.54356 -0.0355172 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.530389 -0.0495897 0.475494 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.519442 -0.031221 0.463149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.53532 -0.0261165 0.481355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554507 -0.0538859 0.472408 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.559438 -0.0304127 0.478269 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.567678 -0.0398133 0.456976 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.538628 -0.0589904 0.454201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.551799 -0.0449178 0.438769 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.527681 -0.0406217 0.441856 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.451136 0.0058509 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.447081 0.0051487 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.435909 0.01504 0.823149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.423265 0.0115452 0.802231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.440694 0.0289993 0.803352 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.459725 0.00864346 0.824394 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.46451 0.0226028 0.804597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.470897 -0.0012478 0.804721 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.442297 -0.00881065 0.823273 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.453468 -0.0187019 0.8036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.429652 -0.0123054 0.802355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.386138 0.0172804 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.364644 0.0293677 0.76191 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.375512 0.0213457 0.741241 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.385352 0.0401449 0.753867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37527 0.0253024 0.783824 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.395978 0.0360796 0.775781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396764 0.0132151 0.785069 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.36543 0.0065032 0.771198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.386924 -0.00558411 0.772443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376298 -0.00151881 0.750529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.439178 0.0688765 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.426942 0.0903221 0.766429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.416328 0.0699989 0.757266 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.435083 0.0806307 0.745229 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.449792 0.0891998 0.775717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.457933 0.0795084 0.754517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.462029 0.0677542 0.775841 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431037 0.078568 0.787754 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.443274 0.0571224 0.787878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.420423 0.0582447 0.77859 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.512079 -0.00628079 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.523883 -0.000557006 0.790755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.49924 -0.00208214 0.790506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.51057 0.0165974 0.779001 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536722 -0.00475566 0.770086 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523409 0.0123987 0.758332 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.524918 -0.0104794 0.749168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.525392 -0.0234352 0.781591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.513588 -0.029159 0.760673 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.500749 -0.0249603 0.781342 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504176 0.0574471 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.508666 0.0817008 0.734036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.488971 0.0722467 0.745541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.489545 0.0732807 0.720878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523872 0.0669012 0.72141 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504751 0.058481 0.708251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.519382 0.0426474 0.720288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523298 0.0658672 0.746073 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.518808 0.0416134 0.744951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.503602 0.0564131 0.757577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.516134 -0.00557859 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.540463 -0.00154892 0.697123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.52751 -0.00538221 0.717791 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.524673 0.0156462 0.705165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.529087 -0.00174531 0.675209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.513298 0.0154498 0.683251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504759 -0.00577498 0.673964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.531924 -0.0227737 0.687835 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507596 -0.0268034 0.68659 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.518971 -0.026607 0.708504 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.459039 -0.0578769 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.451803 -0.0707378 0.786236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.435761 -0.0561039 0.774481 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.454158 -0.0461991 0.787639 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.475081 -0.0725109 0.778193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.477435 -0.0479721 0.779597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.482316 -0.05965 0.758396 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.456685 -0.0824157 0.765035 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.46392 -0.0695548 0.745238 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.440643 -0.0677817 0.753281 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.463094 -0.0571747 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.459563 -0.081612 0.692603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.442243 -0.0665888 0.701767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.463589 -0.0696122 0.713804 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.480415 -0.0721979 0.683315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.48444 -0.0601982 0.704516 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.483946 -0.0477607 0.683192 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.459069 -0.0691745 0.671279 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4626 -0.0447373 0.671155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.441749 -0.0541513 0.680442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398096 -0.0457452 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.373728 -0.0495643 0.724997 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.383722 -0.030137 0.713492 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.382672 -0.0306825 0.738155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.388102 -0.0651725 0.737623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.397047 -0.0462908 0.750781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.41247 -0.0613535 0.738744 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389151 -0.064627 0.71296 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.41352 -0.060808 0.714081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399146 -0.0451997 0.701455 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4293 -0.115031 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.424299 -0.178985 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.412497 -0.190929 0.599471 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.400273 -0.174844 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.417001 -0.16674 0.601529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436523 -0.195071 0.595564 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.441027 -0.170881 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.448325 -0.183127 0.577461 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419795 -0.203175 0.57931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431597 -0.191231 0.561208 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.407571 -0.18709 0.565115 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.367336 -0.131634 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.343834 -0.12515 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.353814 -0.122476 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.360946 -0.107784 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.357357 -0.134308 0.603794 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.374468 -0.116942 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.380859 -0.140792 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.350225 -0.149 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.373727 -0.155484 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.360204 -0.146326 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4293 -0.115031 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.41922 -0.10495 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40545 -0.10864 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.42291 -0.0911807 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.44307 -0.111341 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.44676 -0.0975713 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.45315 -0.121421 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.425611 -0.128801 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.435691 -0.138881 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.411841 -0.13249 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.486264 -0.162382 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.502603 -0.174264 0.558526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.479659 -0.170327 0.566757 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.495376 -0.15142 0.564491 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.509207 -0.166319 0.536101 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.501981 -0.143475 0.542066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.492868 -0.154437 0.521905 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.49349 -0.185226 0.538366 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.477151 -0.173345 0.524171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.470546 -0.18129 0.546597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.491265 -0.0984274 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.501491 -0.082906 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.477742 -0.0892696 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.484874 -0.0745774 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.515014 -0.0920638 0.579103 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.498397 -0.0837352 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504787 -0.107585 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507882 -0.106756 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.497655 -0.122277 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.484132 -0.11312 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.491265 -0.0984274 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.508376 -0.0810612 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.498397 -0.0837352 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.484874 -0.0745774 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.501244 -0.0957534 0.484868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.477742 -0.0892696 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.484132 -0.11312 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.514767 -0.104911 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.497655 -0.122277 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504787 -0.107585 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.424299 -0.178985 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.411775 -0.200165 0.505236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399922 -0.179342 0.511201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.415187 -0.189948 0.527454 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436152 -0.199808 0.501329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.439564 -0.189591 0.523547 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.448677 -0.178629 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.420888 -0.189202 0.485076 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.433412 -0.168023 0.487134 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409035 -0.168379 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4293 -0.115031 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.439381 -0.10495 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.45315 -0.10864 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.435691 -0.0911807 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.415531 -0.111341 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.411841 -0.0975713 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40545 -0.121421 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.43299 -0.128801 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.42291 -0.138881 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.44676 -0.13249 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.367336 -0.131634 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.350719 -0.123305 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.374468 -0.116942 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.360946 -0.107784 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.343587 -0.137998 0.509559 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.353814 -0.122476 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.360204 -0.146326 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.357109 -0.147155 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.373727 -0.155484 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.380859 -0.140792 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.248762 -0.0483751 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.183785 -0.0599222 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.160406 -0.0522053 0.690965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171954 -0.0513956 0.669156 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.178533 -0.0358698 0.687193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172236 -0.0607319 0.71089 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.190363 -0.0443964 0.707118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.195615 -0.0684488 0.709006 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.165658 -0.0762577 0.692853 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.189036 -0.0839747 0.690969 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.177206 -0.075448 0.671044 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.187119 -0.0172857 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.176731 -0.00705049 0.608675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.192673 -0.025725 0.60607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.200733 -0.00352517 0.613272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171177 0.00138875 0.631205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.195179 0.00491406 0.635801 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.181564 -0.00884647 0.65113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.163117 -0.020811 0.624003 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.173504 -0.0310463 0.643928 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.179058 -0.0394855 0.621398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.215921 0.00673113 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.20044 0.0258737 0.690591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.196602 0.00551963 0.677151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.215612 0.0203763 0.671903 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.21976 0.0270852 0.705919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.234932 0.0215878 0.687231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.235241 0.00794264 0.707807 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.200749 0.0122285 0.711167 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.21623 -0.00691403 0.713055 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.196911 -0.00812553 0.697727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.245428 -0.0910116 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.234308 -0.0942304 0.737733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.221514 -0.0854464 0.718528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238704 -0.0714204 0.729364 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.258223 -0.0997955 0.735128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.262619 -0.0769856 0.726759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.269343 -0.0965768 0.713318 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.241032 -0.113822 0.724292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.252152 -0.110603 0.702483 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.228237 -0.105038 0.705088 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.277564 -0.0243582 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.275459 -0.0076281 0.737359 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.255218 -0.0167139 0.726523 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.270078 -0.00142185 0.714074 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.297806 -0.0152725 0.730157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.292425 -0.00906621 0.706872 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.299911 -0.0320026 0.71212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282946 -0.0305645 0.742607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.285051 -0.0472946 0.72457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.262704 -0.0396503 0.731771 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.310405 -0.0794645 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.324811 -0.0817333 0.702209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.300317 -0.0800146 0.704814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.313378 -0.0603366 0.697613 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.334899 -0.0811832 0.67968 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.323466 -0.0597864 0.675083 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.320493 -0.0789143 0.659755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.321838 -0.100861 0.686881 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307433 -0.0985923 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.297345 -0.0991425 0.689486 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216626 -0.115028 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.195663 -0.127519 0.655816 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.194866 -0.104303 0.647447 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.201738 -0.108803 0.670732 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.217423 -0.138245 0.660413 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.223497 -0.119529 0.675329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238386 -0.125754 0.656641 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.210551 -0.133744 0.637128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.231514 -0.121254 0.633356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.209754 -0.110528 0.628759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.281603 -0.103481 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.291073 -0.126206 0.620293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.271345 -0.119897 0.633733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.293457 -0.110246 0.638981 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.301332 -0.10979 0.604965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.303716 -0.0938302 0.623653 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.291862 -0.0870656 0.603077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.279219 -0.119442 0.599717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.269749 -0.0967168 0.597829 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.25949 -0.113132 0.613157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.21996 -0.0723919 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.20388 -0.0673141 0.573526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216456 -0.0490355 0.584361 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.198742 -0.0609052 0.596811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207384 -0.0906706 0.580727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.202246 -0.0842617 0.604012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.223463 -0.0957484 0.598764 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.225098 -0.0788008 0.568278 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.241177 -0.0838786 0.586315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.237674 -0.0605222 0.579113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.471405 0.471405 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER -0.508983 0.690426 8.51251e-17 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.484794 0.755941 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.47411 0.767658 -0.0436186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.467528 0.744501 -0.0381316 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.489758 0.749038 -0.0478724 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.491377 0.779098 -0.0301783 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507025 0.760478 -0.0344321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.502061 0.767382 -0.0112511 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.469146 0.774562 -0.0204376 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.47983 0.762845 -0.00151032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.462564 0.751405 -0.0149506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436283 0.7029 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.418941 0.714226 -0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.43889 0.704751 -0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.44101 0.724842 -0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.416335 0.712374 0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.438403 0.722991 0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.433677 0.701048 0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.414215 0.692283 -0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431557 0.680957 0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434163 0.682808 -0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.478434 0.695668 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.481931 0.703418 -0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.500827 0.694124 -0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.491475 0.716184 -0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.459538 0.704962 -0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.469082 0.717727 -0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.456041 0.697211 -0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.46889 0.682902 -0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.465393 0.675152 -0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.487786 0.673608 -0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.557494 0.743468 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.560084 0.767402 -0.0233819 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.543179 0.760285 -0.00685171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.53997 0.755145 -0.0307879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.574398 0.750585 -0.0344251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554284 0.738328 -0.0418311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.571808 0.726651 -0.0289382 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.577608 0.755725 -0.0104889 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575017 0.731791 -0.00500196 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.560703 0.748608 0.00604126 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.551134 0.683194 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.573364 0.687731 -0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.571303 0.682033 -0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.56324 0.703871 -0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.553195 0.688893 -0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.543071 0.705033 -0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.530964 0.684356 -0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.561258 0.667055 -0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539027 0.662518 -0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.559196 0.661356 -0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.581682 0.677953 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.601808 0.682851 0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.579842 0.680568 0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58454 0.700216 0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.603648 0.680237 -0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58638 0.697602 -0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.583522 0.675339 -0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.59895 0.660588 0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.578824 0.65569 -0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.576984 0.658304 0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.515343 0.7507 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.506594 0.773394 0.0468401 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.491321 0.755462 0.0394341 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507924 0.764807 0.0237283 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.530616 0.768632 0.0499923 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.531946 0.760045 0.0268805 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539365 0.745938 0.0457385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.514012 0.759287 0.065698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522762 0.736593 0.0614442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.49874 0.741355 0.058292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539531 0.685185 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.538818 0.693658 0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.517905 0.691194 0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534075 0.708875 0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.560445 0.687649 0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555702 0.702866 0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.561158 0.679176 0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.544274 0.669969 0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.544988 0.661495 0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523361 0.667505 0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.466832 0.697658 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.447385 0.709346 0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.447429 0.703286 0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.46231 0.721188 0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.466788 0.703718 0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.481713 0.71556 0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.486235 0.692031 0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.451907 0.685816 0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.471354 0.674129 0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.451951 0.679757 0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.335322 0.607487 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.283164 0.659645 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.269894 0.672915 0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.275822 0.649528 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.293281 0.666987 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.277236 0.683032 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.300624 0.677104 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.290507 0.669762 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.259777 0.665573 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.273047 0.652302 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.265705 0.642185 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.286452 0.603979 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.279361 0.614273 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.303327 0.613293 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.288206 0.628413 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.262487 0.604959 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.271332 0.619099 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.269578 0.594664 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.277607 0.589839 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.284698 0.579544 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.301572 0.588858 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.33883 0.656357 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.328536 0.663448 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.314396 0.654603 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.329516 0.639482 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.35297 0.665202 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.353951 0.641237 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.363265 0.658111 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.33785 0.680322 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.348145 0.673232 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.32371 0.671477 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.332034 0.663153 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.321274 0.684748 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.308341 0.666888 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.326131 0.678752 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.344967 0.681014 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.349824 0.675018 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.355727 0.659419 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327177 0.669149 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337937 0.647554 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.314244 0.651289 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.391875 0.684201 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37258 0.674986 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37258 0.674986 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406996 0.669081 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40282 0.644745 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406996 0.669081 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40282 0.644745 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.384191 0.610996 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.389739 0.622198 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.366159 0.617804 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.378964 0.63493 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.407771 0.61539 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396997 0.628121 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.402224 0.604188 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.394966 0.598265 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.389418 0.587062 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.371386 0.593871 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.279656 0.610775 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.258061 0.621535 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.264057 0.616678 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.275921 0.634468 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.27366 0.615632 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.29152 0.628565 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.295255 0.604872 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.261795 0.597842 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.28339 0.587082 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.267791 0.592985 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.331813 0.558618 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.320611 0.55307 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.30788 0.563845 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.325005 0.57665 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.344544 0.547843 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.348938 0.571423 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.355747 0.553391 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327419 0.535038 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.338621 0.540585 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.314688 0.545813 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.258608 0.550934 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.267823 0.570229 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.267823 0.570229 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.273728 0.535813 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.298064 0.539989 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.273728 0.535813 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.298064 0.539989 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.335322 0.607487 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.313405 0.629404 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.316595 0.626214 -0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.318408 0.606941 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.335868 0.624401 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.311592 0.648676 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.330864 0.646863 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.308402 0.651867 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.294133 0.631217 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.290942 0.634407 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.295946 0.611945 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.331813 0.558618 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.319608 0.539107 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307378 0.556863 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.322499 0.541743 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.344043 0.540862 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.346933 0.543497 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356248 0.560372 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.328923 0.555982 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.341128 0.575492 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316693 0.573738 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.384191 0.610996 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.403702 0.623201 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.401066 0.62031 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.385946 0.635431 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.386827 0.613886 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.369071 0.626116 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.367317 0.601681 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.401947 0.598766 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.382437 0.586561 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399312 0.595876 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316914 0.678274 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.305407 0.69384 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.296616 0.671002 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.317721 0.674446 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.325704 0.701111 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.338018 0.681717 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337211 0.685545 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3046 0.697667 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316107 0.682101 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.295809 0.67483 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.391875 0.684201 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37258 0.674986 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37258 0.674986 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406996 0.669081 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40282 0.644745 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406996 0.669081 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40282 0.644745 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.3877 0.659866 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.33883 0.656357 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.329538 0.677411 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.314897 0.661584 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.332022 0.674389 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.353472 0.672184 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.355956 0.669162 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362764 0.65113 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.336346 0.659378 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.345639 0.638325 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.321705 0.643552 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.264535 0.625895 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.248969 0.637402 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.268363 0.625088 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.271807 0.646193 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.245142 0.638209 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.267979 0.647 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.260708 0.626702 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.241698 0.617105 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.257264 0.605598 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.261092 0.604791 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.286452 0.603979 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.265398 0.613271 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.26842 0.610787 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.281225 0.627912 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.283431 0.606463 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.299257 0.621104 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.304484 0.59717 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.270625 0.589337 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.291679 0.580045 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.273647 0.586853 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.258608 0.550934 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.267823 0.570229 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.267823 0.570229 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.273728 0.535813 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.298064 0.539989 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.273728 0.535813 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.298064 0.539989 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.282943 0.555109 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645066 0.554344 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.681385 0.616373 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.678928 0.639472 -0.137375 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.661636 0.629767 -0.122663 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.664108 0.621631 -0.145845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.698678 0.626079 -0.143718 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.683858 0.608237 -0.152187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.701135 0.602979 -0.135349 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.696205 0.634214 -0.120537 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.698662 0.611115 -0.112168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678912 0.624508 -0.105825 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649723 0.609912 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.640648 0.631982 -0.0560094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625749 0.614812 -0.0656463 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.64267 0.62585 -0.0798417 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.664623 0.627081 -0.0527151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666645 0.620949 -0.0765474 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673698 0.605012 -0.0590577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.647702 0.616044 -0.0385197 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.656777 0.593974 -0.0448623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.632802 0.598874 -0.0481565 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.607573 0.617144 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.595495 0.63057 -0.139672 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.594239 0.605919 -0.140323 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.615286 0.617371 -0.146288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.608828 0.641795 -0.122182 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.628619 0.628595 -0.128798 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.620906 0.628369 -0.105343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587782 0.630343 -0.116217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.59986 0.616917 -0.0993785 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.586526 0.605692 -0.116868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.676727 0.560805 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.689897 0.57563 -0.192477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.693998 0.575587 -0.168128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673115 0.585222 -0.177114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.672626 0.560848 -0.202114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.655844 0.57044 -0.186751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659456 0.546023 -0.187402 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.693509 0.551213 -0.193128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680339 0.536388 -0.178416 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.69761 0.55117 -0.16878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.602915 0.561576 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.602201 0.570049 -0.194773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.623084 0.560414 -0.185788 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.615021 0.582252 -0.177557 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582032 0.571211 -0.180578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.594852 0.583414 -0.163362 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582745 0.562738 -0.157397 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.590095 0.549372 -0.188808 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.590808 0.540899 -0.165627 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610978 0.539737 -0.179823 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.640408 0.498776 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.627785 0.478525 -0.166213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.615951 0.497935 -0.156576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.630799 0.484234 -0.142381 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.652241 0.479365 -0.169507 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.655255 0.485075 -0.145675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.664864 0.499616 -0.163165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.637394 0.493066 -0.183703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.650016 0.513317 -0.17736 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62556 0.512476 -0.174066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718878 0.553573 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.73992 0.563328 -0.108814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.720935 0.559693 -0.0934517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.719679 0.577348 -0.110668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.737863 0.557208 -0.132647 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.717623 0.571228 -0.1345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.716821 0.547453 -0.141116 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.739118 0.539553 -0.115431 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718076 0.529798 -0.1239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.720133 0.535918 -0.100068 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682558 0.491544 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.688647 0.474542 -0.0825505 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666351 0.485132 -0.0818993 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.686417 0.498226 -0.0759343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.704854 0.480953 -0.10004 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.702624 0.504637 -0.093424 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.698765 0.497955 -0.116879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.684788 0.46786 -0.106005 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678699 0.484862 -0.122844 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.662492 0.47845 -0.105354 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.687216 0.547112 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.690713 0.554862 -0.0274488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.667813 0.552739 -0.0364345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682694 0.570641 -0.0446649 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.710116 0.549235 -0.0416443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.702097 0.565014 -0.0588603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.706619 0.541484 -0.0648253 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.695235 0.531333 -0.0334138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.691738 0.523582 -0.0565949 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.672335 0.52921 -0.0423994 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.471405 0.471405 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.501645 0.501645 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.499795 0.519956 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.493653 0.523893 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.479397 0.509638 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507788 0.497708 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.48739 0.48739 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.509638 0.479397 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522043 0.511963 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523893 0.493653 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.515901 0.515901 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542955 0.490576 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.559233 0.507719 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539759 0.502501 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536564 0.514426 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.562428 0.495794 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539759 0.502501 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.54615 0.478651 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.565623 0.483869 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.549345 0.466726 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.54615 0.478651 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.490576 0.542955 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.483869 0.565623 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.466726 0.549345 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.478651 0.54615 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.507719 0.559233 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.502501 0.539759 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.514426 0.536564 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.495794 0.562428 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.502501 0.539759 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.478651 0.54615 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.430095 0.482473 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.430434 0.489762 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.449569 0.477255 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.445366 0.500519 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.41096 0.49498 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.425893 0.505737 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.410622 0.487691 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.415162 0.471716 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.414824 0.464428 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434297 0.45921 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419026 0.523783 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.404771 0.538038 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.410297 0.515053 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.427756 0.532513 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4135 0.546768 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436486 0.541242 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.427756 0.532513 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396041 0.529309 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.410297 0.515053 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.401567 0.506323 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399854 0.452233 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.377186 0.45894 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396659 0.464158 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.393464 0.476083 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.380381 0.447015 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396659 0.464158 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40305 0.440308 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.383576 0.43509 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406245 0.428383 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40305 0.440308 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.482473 0.430095 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.48121 0.407271 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.464428 0.414824 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.487691 0.410622 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.499256 0.422542 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.505737 0.425893 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.500519 0.445366 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.475992 0.426744 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.477255 0.449569 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.45921 0.434297 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452233 0.399854 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.43509 0.383576 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.428383 0.406245 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.440308 0.40305 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.45894 0.377186 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.464158 0.396659 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.476083 0.393464 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.447015 0.380381 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.464158 0.396659 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.440308 0.40305 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523783 0.419026 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.538038 0.404771 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.515053 0.410297 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.532513 0.427756 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.546768 0.4135 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.541242 0.436486 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.532513 0.427756 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.529309 0.396041 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.515053 0.410297 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.506323 0.401567 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.607487 0.335322 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.659645 0.283164 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.672915 0.269894 -0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649528 0.275822 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666987 0.293281 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.683032 0.277236 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.677104 0.300624 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669762 0.290507 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665573 0.259777 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.652302 0.273047 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.642185 0.265705 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.603979 0.286452 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.592776 0.280905 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.580045 0.291679 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.59717 0.304484 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.61671 0.275678 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.621104 0.299257 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627912 0.281225 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.599585 0.262872 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610787 0.26842 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.586853 0.273647 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.656357 0.33883 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.661904 0.350033 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.638325 0.345639 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.65113 0.362764 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679937 0.343224 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669162 0.355956 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674389 0.332022 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.667131 0.326099 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.661584 0.314897 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643552 0.321705 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.663153 0.332034 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.685865 0.340177 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679339 0.33606 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669651 0.355123 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669679 0.336151 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.653465 0.351097 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.646968 0.328008 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679367 0.317089 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.656656 0.308945 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.672841 0.312971 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.664041 0.412036 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644745 0.40282 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644745 0.40282 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679161 0.396915 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674986 0.37258 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679161 0.396915 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674986 0.37258 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610996 0.384191 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.600701 0.391282 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.586561 0.382437 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.601681 0.367317 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625136 0.393037 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.626116 0.369071 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.635431 0.385946 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610016 0.408157 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62031 0.401066 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.595876 0.399312 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610775 0.279656 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.602632 0.256944 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587686 0.273158 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.606749 0.26347 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62572 0.263442 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.629838 0.269968 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.633864 0.286153 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.606658 0.27313 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.614801 0.295841 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591712 0.289344 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.558618 0.331813 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.551527 0.342108 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575492 0.341128 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.560372 0.356248 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534652 0.332793 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.543497 0.346933 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.541743 0.322499 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.549772 0.317673 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.556863 0.307378 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.573738 0.316693 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.530773 0.278768 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539989 0.298064 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539989 0.298064 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.545894 0.263648 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.570229 0.267823 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.545894 0.263648 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.570229 0.267823 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645066 0.554344 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.668521 0.610229 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.663938 0.633406 0.160875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.64522 0.617928 0.156428 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.65892 0.626429 0.137727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.687239 0.625707 0.158144 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682221 0.61873 0.134996 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.691822 0.602531 0.150967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673539 0.617206 0.176845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678123 0.59403 0.169668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.654822 0.601728 0.172398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.598918 0.585648 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.580238 0.601562 0.162601 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.581665 0.587563 0.142311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.59781 0.605914 0.14581 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.597491 0.599646 0.18016 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.615063 0.603999 0.163369 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616171 0.583732 0.177429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.581346 0.581295 0.176661 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600026 0.565381 0.173931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582773 0.567297 0.156372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.619787 0.622977 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.608008 0.63767 0.0834188 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.601637 0.613891 0.0853287 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.623239 0.620102 0.0751099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.626157 0.646756 0.0974792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.641389 0.629188 0.0891702 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.637936 0.632063 0.113449 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604555 0.640545 0.107698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616334 0.625852 0.123668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.598184 0.616766 0.109608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.714669 0.578925 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.729812 0.597914 0.109385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.711617 0.592661 0.125228 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.70632 0.602084 0.103028 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.732864 0.584178 0.0890951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.709372 0.588348 0.0827387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.71772 0.565189 0.0846485 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.738161 0.574755 0.111295 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.723017 0.555767 0.106848 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.719965 0.569503 0.127138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665934 0.591673 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.658095 0.605761 0.0319289 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.647455 0.607672 0.0541285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643855 0.58746 0.0404111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.676573 0.589763 0.0284303 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.662334 0.571461 0.0369125 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.684413 0.575674 0.0471312 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680174 0.609975 0.0421477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.688013 0.595887 0.0608487 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669535 0.611885 0.0643473 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.691213 0.52304 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.712906 0.511567 0.0596212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.699372 0.507717 0.079911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.710453 0.529503 0.0764123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.704747 0.526889 0.0420622 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.702295 0.544826 0.0588533 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.683054 0.538362 0.044793 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.693665 0.505104 0.0455609 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671972 0.516576 0.0482916 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680131 0.501254 0.0658506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.6938 0.541596 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.70016 0.547376 0.188567 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.676324 0.546319 0.182211 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.690564 0.564621 0.173728 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.717636 0.542652 0.171776 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.70804 0.559898 0.156937 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.711276 0.536873 0.148628 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.703396 0.524351 0.180258 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.697037 0.518571 0.157111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679561 0.523294 0.173902 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.670344 0.48571 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.67091 0.466887 0.138803 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.650637 0.480853 0.136894 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671107 0.490138 0.147112 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.690617 0.471745 0.124743 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.690815 0.494995 0.133052 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.690052 0.490567 0.108773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.670147 0.46246 0.114524 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669581 0.481283 0.0985541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649874 0.476425 0.112614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624197 0.517014 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.60809 0.516313 0.190293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.60089 0.524375 0.168094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616221 0.538029 0.181811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631397 0.508952 0.193792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.639529 0.530668 0.18531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.647504 0.509653 0.175091 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616065 0.495298 0.180075 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.632172 0.495999 0.161374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.608865 0.50336 0.157875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.607487 0.335322 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.629404 0.313405 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.626214 0.316595 0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.606941 0.318408 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624401 0.335868 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.648676 0.311592 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.646863 0.330864 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.651867 0.308402 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631217 0.294133 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.634407 0.290942 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.611945 0.295946 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.558618 0.331813 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.537564 0.341105 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.540585 0.338621 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.553391 0.355747 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555596 0.334297 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.571423 0.348938 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.57665 0.325005 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542791 0.317172 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.563845 0.30788 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.545813 0.314688 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610996 0.384191 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.601704 0.405245 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587062 0.389418 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604188 0.402224 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625637 0.400018 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.628121 0.396997 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.63493 0.378964 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.608512 0.387213 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.617804 0.366159 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593871 0.371386 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678274 0.316914 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.697473 0.31938 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674538 0.318074 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.681812 0.338182 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.701209 0.31822 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.685547 0.337022 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682009 0.315754 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.693935 0.298112 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674736 0.295646 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671 0.296805 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.664041 0.412036 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644745 0.40282 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644745 0.40282 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679161 0.396915 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674986 0.37258 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.679161 0.396915 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674986 0.37258 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659866 0.3877 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.656357 0.33883 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.675867 0.351035 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673232 0.348145 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.658111 0.363265 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.658993 0.341721 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.641237 0.353951 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.639482 0.329516 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.674113 0.3266 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.654603 0.314396 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671477 0.32371 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625895 0.264535 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.623429 0.245336 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604627 0.260997 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624736 0.268271 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644697 0.248874 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.646004 0.271809 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.647163 0.268073 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624589 0.2416 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627055 0.2608 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.605787 0.257262 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.603979 0.286452 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.591774 0.266942 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.579544 0.284698 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.594664 0.269578 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616209 0.268696 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.619099 0.271332 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.628413 0.288206 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.601088 0.283817 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613293 0.303327 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.588858 0.301572 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.530773 0.278768 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539989 0.298064 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539989 0.298064 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.545894 0.263648 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.570229 0.267823 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.545894 0.263648 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.570229 0.267823 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555109 0.282943 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.471405 0.471405 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.441164 0.501645 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.424703 0.518106 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.420089 0.505261 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.437548 0.522721 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.445778 0.51449 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.458623 0.519105 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.462239 0.498029 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.428319 0.497031 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.44478 0.48057 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.423704 0.484186 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399854 0.490576 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.382226 0.502679 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399854 0.490576 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.405389 0.511231 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.382226 0.502679 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.405389 0.511231 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399854 0.490576 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376691 0.482024 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39432 0.469922 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39432 0.469922 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452233 0.542955 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.44013 0.560583 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431578 0.53742 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452233 0.542955 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.460785 0.566118 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.472887 0.548489 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.472887 0.548489 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.44013 0.560583 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452233 0.542955 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.431578 0.53742 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.512714 0.482473 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.51514 0.495905 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.492654 0.48988 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.506323 0.506323 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5352 0.488498 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.526383 0.498917 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.532774 0.475067 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.521531 0.472055 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.519105 0.458623 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.499045 0.46603 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523783 0.523783 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.527958 0.548119 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.508662 0.538903 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.508662 0.538903 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.543078 0.532998 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523783 0.523783 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.538903 0.508662 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.543078 0.532998 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.538903 0.508662 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.523783 0.523783 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542955 0.452233 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.564273 0.4539 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542955 0.452233 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.548489 0.472887 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.564273 0.4539 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.548489 0.472887 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542955 0.452233 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.558738 0.433245 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.53742 0.431578 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.53742 0.431578 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.460336 0.430095 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.446904 0.427669 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436486 0.436486 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.45293 0.450155 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.470754 0.421278 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.47678 0.443764 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.484186 0.423704 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.454311 0.407609 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.467742 0.410035 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.443892 0.416426 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.490576 0.399854 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.488909 0.378536 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.469922 0.39432 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.490576 0.399854 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.509564 0.384071 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.511231 0.405389 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.511231 0.405389 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.488909 0.378536 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.490576 0.399854 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.469922 0.39432 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419026 0.419026 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.39469 0.414851 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.403906 0.434147 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.403906 0.434147 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409811 0.399731 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419026 0.419026 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434147 0.403906 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409811 0.399731 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434147 0.403906 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419026 0.419026 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643951 -0.172546 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER -0.835815 -0.157543 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.871646 -0.122136 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.871334 -0.102403 0.180258 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.850164 -0.113406 0.173902 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.862937 -0.100577 0.157111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.892817 -0.111133 0.171776 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.884419 -0.109307 0.148628 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.893129 -0.130866 0.156937 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.880044 -0.123961 0.188567 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.880356 -0.143694 0.173728 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.858873 -0.134964 0.182211 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.799077 -0.135649 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.781177 -0.120908 0.180075 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.778973 -0.13149 0.157875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.795477 -0.113462 0.161374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.801282 -0.125067 0.193792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.815582 -0.11762 0.175091 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.819182 -0.139808 0.18531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.784778 -0.143095 0.190293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.802678 -0.157836 0.181811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.782573 -0.153678 0.168094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.82339 -0.0854653 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.811594 -0.0654286 0.114524 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.80102 -0.0876595 0.112614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.820516 -0.0820122 0.0985541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.833964 -0.0632344 0.124743 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.842886 -0.079818 0.108773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.845761 -0.083271 0.133052 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.814468 -0.0688817 0.138803 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.826265 -0.0889183 0.147112 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.803895 -0.0911125 0.136894 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.908384 -0.14403 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.926643 -0.128672 0.111295 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.90826 -0.133221 0.127138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.904034 -0.1198 0.106848 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.926768 -0.139481 0.0890951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.904159 -0.130608 0.0846485 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.908508 -0.154838 0.0827387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.930993 -0.152902 0.109385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.912733 -0.16826 0.103028 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.912609 -0.157451 0.125228 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.860128 -0.107359 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.853284 -0.0905999 0.0455609 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.839638 -0.0940331 0.0658506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.840233 -0.111382 0.0482916 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.873773 -0.103926 0.0420622 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.860723 -0.124708 0.044793 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.880618 -0.120685 0.0588533 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.873178 -0.086577 0.0596212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.880022 -0.103336 0.0764123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.859532 -0.0900102 0.079911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.872552 -0.179437 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.894035 -0.188167 0.0421477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.885777 -0.195141 0.0643473 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.89378 -0.172046 0.0608487 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.880811 -0.172463 0.0284303 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.880556 -0.156342 0.0471312 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.859328 -0.163733 0.0369125 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.872807 -0.195558 0.0319289 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.851325 -0.186828 0.0404111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.864549 -0.202532 0.0541285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.884071 -0.194213 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.891905 -0.197746 0.176845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.867957 -0.193701 0.172398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.884286 -0.175383 0.169668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.908019 -0.198259 0.158144 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.900401 -0.175896 0.150967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.900186 -0.194726 0.134996 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.89169 -0.216576 0.160875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.883856 -0.213043 0.137727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.867741 -0.212531 0.156428 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.84824 -0.229621 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.843832 -0.25245 0.107698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.826426 -0.235043 0.109608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.846687 -0.233837 0.123668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.865646 -0.247028 0.0974792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.868501 -0.228415 0.113449 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.870053 -0.224198 0.0891702 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.845385 -0.248234 0.0834188 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.849792 -0.225404 0.0751099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.827978 -0.230827 0.0853287 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.811502 -0.207727 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.794108 -0.212743 0.176661 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.788345 -0.199907 0.156372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.802328 -0.189621 0.173931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.817265 -0.220563 0.18016 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.825486 -0.197441 0.177429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.83466 -0.215547 0.163369 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.803282 -0.230849 0.162601 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.820676 -0.225832 0.14581 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.797518 -0.218012 0.142311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643951 -0.172546 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.61371 -0.142305 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.597249 -0.125845 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.592635 -0.138689 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.610094 -0.12123 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.618324 -0.12946 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631169 -0.124846 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.634785 -0.145921 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600865 -0.14692 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.617326 -0.163381 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.596251 -0.159765 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5724 -0.153374 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.554772 -0.141271 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5724 -0.153374 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.577935 -0.13272 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554772 -0.141271 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.577935 -0.13272 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5724 -0.153374 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.549237 -0.161926 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.566866 -0.174029 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.566866 -0.174029 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624779 -0.100996 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.612676 -0.0833673 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604124 -0.10653 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624779 -0.100996 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.633331 -0.0778329 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645433 -0.0954616 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645433 -0.0954616 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.612676 -0.0833673 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624779 -0.100996 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604124 -0.10653 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.68526 -0.161477 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.687686 -0.148046 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.6652 -0.154071 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678869 -0.137627 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.707746 -0.155452 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.698929 -0.145033 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.70532 -0.168883 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.694077 -0.171896 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.691651 -0.185327 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671591 -0.177921 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.696329 -0.120168 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.700504 -0.095832 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.681209 -0.105047 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.681209 -0.105047 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715624 -0.110952 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.696329 -0.120168 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.711449 -0.135288 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715624 -0.110952 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.711449 -0.135288 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.696329 -0.120168 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715501 -0.191718 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.736819 -0.190051 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715501 -0.191718 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.721035 -0.171063 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.736819 -0.190051 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.721035 -0.171063 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715501 -0.191718 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.731284 -0.210706 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.709966 -0.212373 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.709966 -0.212373 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.632882 -0.213855 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.61945 -0.216282 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.609032 -0.207465 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.625476 -0.193796 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.6433 -0.222672 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649326 -0.200186 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.656732 -0.220246 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.626857 -0.236341 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.640288 -0.233915 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616438 -0.227525 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.663122 -0.244096 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.661455 -0.265414 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.642468 -0.249631 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.663122 -0.244096 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.68211 -0.25988 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.683777 -0.238562 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.683777 -0.238562 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.661455 -0.265414 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.663122 -0.244096 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.642468 -0.249631 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591572 -0.224924 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.567237 -0.2291 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.576452 -0.209804 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.576452 -0.209804 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582357 -0.24422 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591572 -0.224924 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.606693 -0.240045 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582357 -0.24422 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.606693 -0.240045 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591572 -0.224924 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.69376 0.0133465 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.674309 0.0838533 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.66171 0.103063 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.653258 0.0800983 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673446 0.0876683 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682761 0.106818 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.694497 0.0914233 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.69536 0.0876083 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.662574 0.0992478 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.675172 0.0800382 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.654121 0.0762832 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.604582 0.0446211 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627745 0.053173 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604582 0.0446211 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627745 0.053173 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.599047 0.0239663 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616676 0.0118635 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616676 0.0118635 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666287 0.0539145 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.662466 0.0547519 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660752 0.0332597 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682791 0.0439578 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.668 0.0754066 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.688325 0.0646126 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671821 0.0745692 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645962 0.0647085 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649783 0.0638711 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644249 0.0432164 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.745859 0.0646815 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.750021 0.0887955 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.729506 0.078459 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.732161 0.0813312 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.766375 0.075018 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.748514 0.0675537 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.762212 0.050904 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.763719 0.0721458 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.759557 0.0480318 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.743204 0.0618093 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.737837 0.0347427 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.747099 0.0542122 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.743371 0.0553974 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.7241 0.0550267 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.741565 0.0335575 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718566 0.0343719 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.732303 0.014088 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.760836 0.0339282 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.751574 0.0144587 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.757108 0.0351134 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.786629 -0.00415829 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.770845 0.0148294 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.786629 -0.00415829 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.770845 0.0148294 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.781094 -0.024813 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.759776 -0.02648 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.759776 -0.02648 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.701782 0.0432853 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.693716 0.0608821 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.677932 0.0496759 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.694884 0.0652402 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.717566 0.0544915 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718734 0.0588496 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.725632 0.0368947 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.700615 0.0389272 0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.708681 0.0213304 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.684831 0.027721 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.721234 -0.0272215 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.720593 -0.0310802 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.7 -0.0246945 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718114 -0.00820099 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.741827 -0.0336072 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.739347 -0.010728 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.742467 -0.0297485 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.723713 -0.0501007 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.724354 -0.046242 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.70312 -0.043715 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649684 -0.00804971 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.628657 -0.00328338 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.630031 0.000378614 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.642244 0.0152909 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.648309 -0.0117117 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.661896 0.00686255 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669336 -0.016478 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.636097 -0.026624 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.657124 -0.0313903 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.637471 -0.022962 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.835815 -0.157543 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.899353 -0.119969 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.909872 -0.0977075 -0.115431 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.891613 -0.104052 -0.100068 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.886771 -0.0997803 -0.1239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.917612 -0.113625 -0.132647 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.894512 -0.115698 -0.141116 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.907093 -0.135886 -0.1345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.922453 -0.117896 -0.108814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.911935 -0.140158 -0.110668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.904194 -0.124241 -0.0934517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.868703 -0.130205 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.867758 -0.11253 -0.0334138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.846864 -0.122142 -0.0423994 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.860854 -0.107566 -0.0565949 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.889596 -0.120593 -0.0416443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.882692 -0.115629 -0.0648253 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.890541 -0.138267 -0.0588603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.875606 -0.135168 -0.0274488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.876551 -0.152843 -0.0446649 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.854713 -0.14478 -0.0364345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.836885 -0.0844101 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.826973 -0.0627848 -0.106005 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.81296 -0.083104 -0.105354 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.830202 -0.0805529 -0.122844 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.850898 -0.0640908 -0.10004 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.854126 -0.0818589 -0.116879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.860809 -0.0857161 -0.093424 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.833656 -0.0666419 -0.0825505 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.843568 -0.0882673 -0.0759343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.819643 -0.0869612 -0.0818993 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.866465 -0.147308 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.876203 -0.130609 -0.193128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.879733 -0.128522 -0.16878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.857385 -0.124356 -0.178416 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.862935 -0.149395 -0.202114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.844117 -0.143141 -0.187402 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.853198 -0.166093 -0.186751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.885283 -0.153561 -0.192477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.875546 -0.170259 -0.177114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.888813 -0.151474 -0.168128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.803997 -0.111748 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.798532 -0.108311 -0.183703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.797989 -0.131037 -0.174066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.819589 -0.119537 -0.17736 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.80454 -0.0890219 -0.169507 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.825597 -0.100248 -0.163165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.810005 -0.0924597 -0.145675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.78294 -0.100522 -0.166213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.788405 -0.10396 -0.142381 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.782397 -0.123249 -0.156576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.802927 -0.184881 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.785723 -0.180723 -0.188808 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.798991 -0.161937 -0.179823 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.782104 -0.173028 -0.165627 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.78966 -0.203667 -0.180578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.786041 -0.195972 -0.157397 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.806864 -0.207825 -0.163362 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.806546 -0.192576 -0.194773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.82375 -0.196734 -0.177557 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.819813 -0.17379 -0.185788 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.898283 -0.193102 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.920038 -0.201143 -0.120537 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.900209 -0.201384 -0.105825 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.910616 -0.17991 -0.112168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.918112 -0.192861 -0.143718 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.90869 -0.171628 -0.135349 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.896357 -0.18482 -0.152187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.907705 -0.214335 -0.137375 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.88595 -0.206294 -0.145845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.887876 -0.214576 -0.122663 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.834745 -0.230676 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.824206 -0.252002 -0.116217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.810793 -0.231282 -0.116868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.827952 -0.234336 -0.0993785 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.848158 -0.251396 -0.122182 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.851905 -0.23373 -0.105343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.858698 -0.23007 -0.128798 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.830999 -0.248342 -0.139672 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.841538 -0.227016 -0.146288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.817586 -0.227621 -0.140323 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.867633 -0.203337 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.868948 -0.209658 -0.0385197 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.84746 -0.202239 -0.0481565 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.865773 -0.186008 -0.0448623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.889121 -0.210757 -0.0527151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.885946 -0.187106 -0.0590577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.887806 -0.204436 -0.0765474 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.870808 -0.226988 -0.0560094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.869493 -0.220667 -0.0798417 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.84932 -0.219569 -0.0656463 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.69376 0.0133465 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.668775 0.0631985 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.661946 0.0667914 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.65711 0.0452771 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680354 0.0511945 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673611 0.0847128 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.692019 0.069116 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680439 0.08112 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.650366 0.0787954 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.657195 0.0752026 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.64553 0.0572811 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.604582 0.0446211 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627745 0.053173 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.604582 0.0446211 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627745 0.053173 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.62221 0.0325183 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.599047 0.0239663 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616676 0.0118635 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616676 0.0118635 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649684 -0.00804971 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.634953 -0.000226782 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.655218 0.012605 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.635947 0.0122343 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.629419 -0.0208815 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.630413 -0.00842045 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.644149 -0.0287044 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.64869 -0.0205108 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.66342 -0.0283337 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.668955 -0.00767898 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.740325 0.0440268 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.746894 0.0650768 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.739183 0.0653796 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.723153 0.0607735 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.748035 0.0437239 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.724295 0.0394207 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.741466 0.0226739 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.764065 0.04833 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.757496 0.02728 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.756355 0.0486329 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.721234 -0.0272215 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.732368 -0.0484665 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715699 -0.0478762 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.737738 -0.0371781 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.737902 -0.0278118 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.743272 -0.0165234 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.726768 -0.00656677 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715864 -0.0385099 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.70473 -0.0172649 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.699195 -0.0379196 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.786629 -0.00415829 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.770845 0.0148294 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.786629 -0.00415829 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.770845 0.0148294 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76531 -0.0058253 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.781094 -0.024813 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.759776 -0.02648 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.759776 -0.02648 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.712851 0.0845947 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.706291 0.107813 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.689001 0.0909853 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.701434 0.0896851 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.730141 0.101422 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.725284 0.0832945 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.736701 0.0782041 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.717709 0.102723 -0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.724268 0.0795043 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.700418 0.0858949 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.737837 0.0347427 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.740802 0.0511556 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718185 0.043171 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.730397 0.0580833 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.760455 0.0427273 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.750049 0.0496549 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.757489 0.0263144 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.748242 0.027815 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.745277 0.0114021 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.725625 0.0198304 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666287 0.0539145 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.650692 0.0721382 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645053 0.0564414 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.663167 0.072935 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671925 0.0696112 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.6844 0.070408 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.68752 0.0513875 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.653812 0.0531177 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.669407 0.034894 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.648173 0.0374209 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643951 -0.172546 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.674191 -0.142305 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.672341 -0.123995 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.666199 -0.120057 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.651943 -0.134313 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680334 -0.146243 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.659936 -0.156561 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.682184 -0.164554 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.69459 -0.131987 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.696439 -0.150298 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.688447 -0.12805 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.715501 -0.153374 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.731779 -0.136231 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.712305 -0.141449 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.70911 -0.129524 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.734974 -0.148156 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.712305 -0.141449 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718696 -0.165299 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.738169 -0.160081 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.721891 -0.177224 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.718696 -0.165299 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.663122 -0.100996 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.656415 -0.0783272 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.639272 -0.0946054 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.651197 -0.0978007 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.680265 -0.0847178 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.675047 -0.104191 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.686972 -0.107387 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.66834 -0.0815225 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.675047 -0.104191 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.651197 -0.0978007 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.602641 -0.161477 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.60298 -0.154189 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.622115 -0.166695 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.617912 -0.143431 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.583506 -0.148971 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.598439 -0.138214 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.583168 -0.156259 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587708 -0.172234 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58737 -0.179523 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.606843 -0.184741 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.591572 -0.120168 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.577317 -0.105912 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582843 -0.128897 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600302 -0.111438 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.586046 -0.0971825 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.609032 -0.102708 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600302 -0.111438 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.568587 -0.114642 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.582843 -0.128897 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.574113 -0.137627 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5724 -0.191718 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.549732 -0.185011 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.569205 -0.179793 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.56601 -0.167868 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.552927 -0.196936 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.569205 -0.179793 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575596 -0.203643 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.556122 -0.208861 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.578791 -0.215568 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.575596 -0.203643 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.655019 -0.213855 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.653756 -0.23668 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.636974 -0.229127 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660237 -0.233329 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671802 -0.221409 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678283 -0.218058 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.673065 -0.198584 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.648538 -0.217207 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.649801 -0.194382 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631756 -0.209653 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624779 -0.244096 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.607636 -0.260374 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600929 -0.237705 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.612854 -0.240901 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.631486 -0.266765 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.636704 -0.247291 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.648629 -0.250487 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.619561 -0.26357 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.636704 -0.247291 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.612854 -0.240901 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.696329 -0.224924 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.710584 -0.23918 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.687599 -0.233654 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.705059 -0.216195 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.719314 -0.23045 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.713788 -0.207465 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.705059 -0.216195 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.701855 -0.24791 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.687599 -0.233654 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.678869 -0.242384 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.786005 -0.343435 8.51251e-17 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.82165 -0.392454 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.824791 -0.400556 0.065698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.802599 -0.392663 0.058292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.821021 -0.376528 0.0614442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.843843 -0.400347 0.0499923 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.840073 -0.376319 0.0457385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.840701 -0.392245 0.0268805 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.82542 -0.416482 0.0468401 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.822279 -0.40838 0.0237283 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.803228 -0.408589 0.0394341 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.753118 -0.370774 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.734271 -0.367981 0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.731279 -0.362711 0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.745269 -0.348136 0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.756109 -0.376044 0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.767107 -0.356199 0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.774956 -0.378837 0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.74212 -0.390619 0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.760966 -0.393412 0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.739128 -0.385349 0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.80984 -0.323622 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.80634 -0.308073 0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.786996 -0.316395 0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.802721 -0.300378 0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.829184 -0.315299 0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.825565 -0.307605 0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.832685 -0.330849 0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.813459 -0.331317 0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.81696 -0.346866 0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.794116 -0.339639 0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.854538 -0.365116 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.878086 -0.365674 -0.0104889 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.859887 -0.367962 0.00604126 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.863875 -0.346241 -0.00500196 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.872736 -0.362827 -0.0344251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.858526 -0.343394 -0.0289382 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.849188 -0.362269 -0.0418311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.868748 -0.384548 -0.0233819 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.8452 -0.38399 -0.0307879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.85055 -0.386837 -0.00685171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.842728 -0.296284 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.848999 -0.272611 0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.828835 -0.281616 0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.829121 -0.278432 -0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.862893 -0.287278 -0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.843015 -0.293099 -0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.856621 -0.310951 -0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.862606 -0.290462 0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.856335 -0.314135 0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.842441 -0.299468 0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.818893 -0.316097 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.819591 -0.297057 -0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.814956 -0.293153 -0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.79807 -0.304244 -0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.823527 -0.320001 -0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.802007 -0.327188 -0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.822829 -0.339041 -0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.840413 -0.30891 -0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.839716 -0.32795 -0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.835779 -0.305006 -0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.797815 -0.412267 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.793573 -0.436217 -0.0204376 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.776294 -0.419454 -0.0149506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.796968 -0.420728 -0.00151032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.815094 -0.42903 -0.0301783 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.818489 -0.413542 -0.0112511 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.819335 -0.405081 -0.0344321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.79442 -0.427756 -0.0436186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.798662 -0.403807 -0.0478724 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.777141 -0.410993 -0.0381316 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.76217 -0.363249 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.747522 -0.356966 -0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.759239 -0.339469 -0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.740618 -0.352002 -0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.750453 -0.380746 -0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.743549 -0.375782 -0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.765101 -0.387029 -0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.769074 -0.368213 -0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.783722 -0.374496 -0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.780791 -0.350716 -0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.729282 -0.390587 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.704862 -0.392427 -0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.717401 -0.374248 -0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.714218 -0.373948 0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.716744 -0.408767 0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.726099 -0.390287 0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.741164 -0.406927 0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.719927 -0.409067 -0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.744347 -0.407227 -0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.732465 -0.390887 -0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.594141 -0.358439 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.542042 -0.409774 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.517869 -0.413579 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528508 -0.393219 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.525596 -0.395831 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.531404 -0.430134 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.539131 -0.412386 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555577 -0.426328 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534315 -0.427522 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.558488 -0.423716 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.544953 -0.407161 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.504962 -0.327164 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528125 -0.318612 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504962 -0.327164 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528125 -0.318612 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.499428 -0.347819 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.517056 -0.359921 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.517056 -0.359921 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.550064 -0.379835 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.529037 -0.375068 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.530412 -0.371406 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.542624 -0.356494 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.548689 -0.383497 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.562276 -0.364922 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.569716 -0.388263 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536477 -0.398409 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.557504 -0.403175 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.537852 -0.394747 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.613592 -0.428945 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.612625 -0.451897 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593593 -0.436515 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.614807 -0.432663 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.632624 -0.444328 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.634806 -0.425094 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.633591 -0.421376 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.61141 -0.448179 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.612377 -0.425227 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.592379 -0.432797 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.621614 -0.399007 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.620974 -0.402865 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600381 -0.39648 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.618494 -0.379986 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.642207 -0.405392 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.639728 -0.382513 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.642848 -0.401533 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624094 -0.421886 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624734 -0.418027 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.603501 -0.4155 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.687009 -0.375943 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671225 -0.356956 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.687009 -0.375943 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671225 -0.356956 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.681475 -0.396598 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660156 -0.398265 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660156 -0.398265 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.586119 -0.388377 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.570335 -0.399584 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.562269 -0.381987 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.569167 -0.403942 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.594185 -0.405974 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.593017 -0.410332 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.609969 -0.394768 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587286 -0.384019 -0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.60307 -0.372813 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.57922 -0.366422 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.638217 -0.337042 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.64748 -0.317573 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643752 -0.316388 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.624481 -0.316758 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.641945 -0.338228 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.618946 -0.337413 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.632683 -0.357697 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.661216 -0.337857 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.651954 -0.357326 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.657489 -0.336672 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.566667 -0.317871 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.562847 -0.317033 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.561133 -0.338525 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.583171 -0.327827 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.568381 -0.296378 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.588706 -0.307172 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.572202 -0.297216 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.546343 -0.307077 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.550163 -0.307914 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.544629 -0.328569 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.594141 -0.358439 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.547576 -0.389119 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.525642 -0.386849 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528407 -0.379645 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.538964 -0.366733 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.544812 -0.396323 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.558134 -0.376207 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.566746 -0.398593 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.534255 -0.409235 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.556189 -0.411505 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.537019 -0.402031 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.504962 -0.327164 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528125 -0.318612 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.504962 -0.327164 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.528125 -0.318612 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.522591 -0.339267 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.499428 -0.347819 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.517056 -0.359921 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.517056 -0.359921 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.566667 -0.317871 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.551072 -0.299647 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.545434 -0.315344 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.563547 -0.29885 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.572306 -0.302174 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.584781 -0.301377 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587901 -0.320398 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.554192 -0.318667 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.569787 -0.336891 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.548554 -0.334364 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.619127 -0.408291 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.617918 -0.415912 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.597788 -0.406911 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616439 -0.39183 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.639257 -0.417292 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.637778 -0.39321 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.640465 -0.409671 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.620605 -0.432372 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.621814 -0.424751 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.600475 -0.423371 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.638217 -0.337042 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.641183 -0.320629 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.618565 -0.328614 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.630777 -0.313702 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660835 -0.329058 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.65043 -0.32213 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.65787 -0.345471 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.648623 -0.34397 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.645657 -0.360383 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.626005 -0.351955 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.687009 -0.375943 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671225 -0.356956 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.687009 -0.375943 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.671225 -0.356956 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.665691 -0.37761 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.681475 -0.396598 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660156 -0.398265 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.660156 -0.398265 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.57505 -0.429687 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.55776 -0.446515 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5512 -0.423296 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.562617 -0.428387 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.58161 -0.452905 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.586467 -0.434777 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.5989 -0.436077 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.570193 -0.447815 0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.587483 -0.430987 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.563633 -0.424596 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.621614 -0.399007 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.632748 -0.420252 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.61608 -0.419661 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.638118 -0.408963 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.638282 -0.399597 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.643653 -0.388308 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.627149 -0.378352 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.616244 -0.410295 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.60511 -0.38905 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.599576 -0.409705 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.550064 -0.379835 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.535334 -0.372012 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.555599 -0.35918 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.536327 -0.359551 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.529799 -0.392667 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.530793 -0.380205 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.54453 -0.400489 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.549071 -0.392296 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.563801 -0.400119 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.569335 -0.379464 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0996195 -0.371785 0.544331 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.220501 -0.393621 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.279642 -0.368601 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.299716 -0.354293 0.765035 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.292196 -0.366989 0.745238 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.279022 -0.347717 0.753281 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.287162 -0.355904 0.786236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.266468 -0.349329 0.774481 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267088 -0.370213 0.787639 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.300337 -0.375177 0.778193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.280263 -0.389485 0.779597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.292817 -0.387873 0.758396 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281062 -0.372464 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.289441 -0.362978 0.671279 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.270044 -0.378255 0.671155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267771 -0.35549 0.680442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30046 -0.357187 0.692603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.278789 -0.349699 0.701767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29208 -0.366673 0.713804 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.302733 -0.379952 0.683315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.294353 -0.389438 0.704516 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.283335 -0.395229 0.683192 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.238665 -0.321889 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.250544 -0.304702 0.71296 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.259421 -0.327715 0.714081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.238717 -0.32307 0.701455 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.229788 -0.298875 0.724997 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.21796 -0.317244 0.713492 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.217908 -0.316063 0.738155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250492 -0.30352 0.737623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.238612 -0.320707 0.750781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.259369 -0.326533 0.738744 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.219082 -0.389758 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.228779 -0.378635 0.823273 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.24293 -0.383364 0.8036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225483 -0.365937 0.802355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.20493 -0.385029 0.823149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.201634 -0.372331 0.802231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.195233 -0.396152 0.803352 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.222377 -0.402455 0.824394 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.21268 -0.413578 0.804597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236529 -0.407185 0.804721 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.178104 -0.343046 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.177083 -0.319723 0.771198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.198298 -0.332294 0.772443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.189464 -0.325124 0.750529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.156889 -0.330475 0.76191 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.16927 -0.335876 0.741241 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.157909 -0.353797 0.753867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165722 -0.337645 0.783824 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.166743 -0.360967 0.775781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.186938 -0.350216 0.785069 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.15994 -0.414778 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.147477 -0.412573 0.787754 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172167 -0.412448 0.787878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.15977 -0.39322 0.77859 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13525 -0.414903 0.766429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.147543 -0.39555 0.757266 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.147713 -0.417108 0.745229 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.147647 -0.434131 0.775717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.16011 -0.436336 0.754517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172338 -0.434006 0.775841 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.261479 -0.440333 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.282991 -0.443285 0.781591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282046 -0.4302 0.760673 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271991 -0.421181 0.781342 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.262424 -0.453417 0.790755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.251423 -0.431313 0.790506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.240911 -0.450466 0.779001 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.27248 -0.462437 0.770086 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.250967 -0.459485 0.758332 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271534 -0.449353 0.749168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.202338 -0.465353 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.204606 -0.486123 0.746073 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.223366 -0.470107 0.744951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.202946 -0.464339 0.757577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183578 -0.481368 0.734036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.181918 -0.459584 0.745541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.18131 -0.460599 0.720878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.203998 -0.487137 0.72141 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.201729 -0.466367 0.708251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.222757 -0.471122 0.720288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.262898 -0.444196 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.285685 -0.449273 0.687835 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.27701 -0.426189 0.68659 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282528 -0.436139 0.708504 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271573 -0.46728 0.697123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268416 -0.454146 0.717791 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.248787 -0.462204 0.705165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.266055 -0.45733 0.675209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.243269 -0.452254 0.683251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.257381 -0.434246 0.673964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31427 -0.31427 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.367156 -0.277961 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.374298 -0.269898 0.485076 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.362218 -0.291334 0.487134 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.350338 -0.270045 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379235 -0.256525 0.505236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355276 -0.256671 0.511201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.372093 -0.264588 0.527454 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.391115 -0.277815 0.501329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.383973 -0.285878 0.523547 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.379036 -0.299251 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31427 -0.31427 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.304189 -0.304189 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29042 -0.307879 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307879 -0.29042 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.328039 -0.31058 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.331729 -0.29681 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33812 -0.32066 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31058 -0.328039 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32066 -0.33812 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29681 -0.331729 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.297666 -0.252306 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.305995 -0.235688 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321516 -0.245915 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.312359 -0.259438 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282145 -0.242079 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.288509 -0.265828 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273816 -0.258696 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.291303 -0.228556 0.509559 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282974 -0.245173 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.306824 -0.238783 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367156 -0.277961 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.385852 -0.261966 0.57931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.38141 -0.278159 0.561208 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.36581 -0.259422 0.565115 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.371598 -0.261768 0.599471 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.351556 -0.259225 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.352901 -0.277764 0.601529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387198 -0.280504 0.595564 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.368501 -0.2965 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.382755 -0.296698 0.577461 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.297666 -0.252306 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.30415 -0.228803 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321516 -0.245915 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.306824 -0.238783 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2803 -0.235194 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282974 -0.245173 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273816 -0.258696 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.294992 -0.242326 0.603794 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.288509 -0.265828 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.312359 -0.259438 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31427 -0.31427 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.32435 -0.304189 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33812 -0.307879 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32066 -0.29042 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3005 -0.31058 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29681 -0.29681 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29042 -0.32066 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317959 -0.328039 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307879 -0.33812 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.331729 -0.331729 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.383759 -0.339925 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.407156 -0.334762 0.538366 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.388696 -0.326552 0.524171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.392275 -0.31686 0.546597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.402218 -0.348135 0.558526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387337 -0.330233 0.566757 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.378821 -0.353299 0.564491 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.39864 -0.357827 0.536101 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.375243 -0.362991 0.542066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.380181 -0.349618 0.521905 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.330873 -0.376234 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.346394 -0.386461 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.354723 -0.369843 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.340031 -0.362711 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.322544 -0.392851 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316181 -0.369102 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307023 -0.382624 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337237 -0.399983 0.579103 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321715 -0.389757 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345565 -0.383366 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.330873 -0.376234 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.348239 -0.393346 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.354723 -0.369843 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345565 -0.383366 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324389 -0.399736 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321715 -0.389757 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307023 -0.382624 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.333547 -0.386213 0.484868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316181 -0.369102 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.340031 -0.362711 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.166275 -0.191247 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.20793 -0.130089 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.221102 -0.115471 0.637128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.220766 -0.13987 0.633356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.200597 -0.126388 0.628759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.208266 -0.10569 0.655816 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.187762 -0.116607 0.647447 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.195095 -0.120308 0.670732 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228435 -0.119172 0.660413 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.215264 -0.13379 0.675329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228099 -0.143571 0.656641 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.230419 -0.192135 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.243049 -0.18209 0.599717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.218634 -0.185251 0.597829 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.227721 -0.168159 0.613157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.254834 -0.188974 0.620293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.239506 -0.175043 0.633733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.242204 -0.199019 0.638981 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.245747 -0.206066 0.604965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.233117 -0.216111 0.623653 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.221332 -0.209227 0.603077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172673 -0.154295 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.180792 -0.15554 0.568278 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.19323 -0.166926 0.586315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.171251 -0.17557 0.579113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.160236 -0.142909 0.573526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.150694 -0.162939 0.584361 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.152117 -0.141663 0.596811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.182215 -0.134265 0.580727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.174096 -0.133019 0.604012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.194652 -0.145651 0.598764 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.143787 -0.129201 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.14887 -0.105335 0.692853 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.167242 -0.121723 0.690969 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153943 -0.115741 0.671044 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.125414 -0.112813 0.690965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.130487 -0.123219 0.669156 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.120331 -0.136679 0.687193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.138714 -0.118795 0.71089 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13363 -0.142661 0.707118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.157086 -0.135183 0.709006 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.108529 -0.153407 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0995811 -0.130858 0.624003 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.113639 -0.134736 0.643928 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.123725 -0.135326 0.621398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0944715 -0.149528 0.608675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.118615 -0.153997 0.60607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.10342 -0.172078 0.613272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0843858 -0.148938 0.631205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0933338 -0.171487 0.635801 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0984435 -0.152816 0.65113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.102131 -0.190359 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0897843 -0.179968 0.711167 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.114103 -0.183804 0.713055 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.105492 -0.166467 0.697727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0778128 -0.186523 0.690591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0935207 -0.173022 0.677151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0901597 -0.196914 0.671903 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0864233 -0.20386 0.705919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0987702 -0.214251 0.687231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.110742 -0.207696 0.707807 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.201532 -0.167041 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.219088 -0.151829 0.724292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.221861 -0.163068 0.702483 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.205084 -0.14514 0.705088 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.19876 -0.155801 0.737733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.184756 -0.149113 0.718528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.181204 -0.171014 0.729364 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.215537 -0.173729 0.735128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.197981 -0.188942 0.726759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.218309 -0.184969 0.713318 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.159877 -0.228199 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.167942 -0.229756 0.742607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183484 -0.223214 0.72457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.16569 -0.207683 0.731771 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.144336 -0.234741 0.737359 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.142084 -0.212668 0.726523 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.13627 -0.233184 0.714074 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.162129 -0.250271 0.730157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.154064 -0.248714 0.706872 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.177671 -0.243729 0.71212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.224021 -0.229087 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.248268 -0.22829 0.686881 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2391 -0.216949 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.234532 -0.207937 0.689486 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.233189 -0.240428 0.702209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.219453 -0.220075 0.704814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.208942 -0.241225 0.697613 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.237756 -0.249439 0.67968 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.213509 -0.250236 0.675083 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.228589 -0.238098 0.659755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0058509 -0.451136 0.729516 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0051487 -0.447081 0.803476 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.01504 -0.435909 0.823149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0289993 -0.440694 0.803352 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0115452 -0.423265 0.802231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00881065 -0.442297 0.823273 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0123054 -0.429652 0.802355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0187019 -0.453468 0.8036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00864346 -0.459725 0.824394 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0012478 -0.470897 0.804721 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0226028 -0.46451 0.804597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0688765 -0.439178 0.766553 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0903221 -0.426942 0.766429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0806307 -0.435083 0.745229 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0699989 -0.416328 0.757266 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.078568 -0.431037 0.787754 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0582447 -0.420423 0.77859 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0571224 -0.443274 0.787878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0891998 -0.449792 0.775717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0677542 -0.462029 0.775841 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0795084 -0.457933 0.754517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0172804 -0.386138 0.763155 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0293677 -0.364644 0.76191 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0401449 -0.385352 0.753867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0213457 -0.375512 0.741241 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0065032 -0.36543 0.771198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00151881 -0.376298 0.750529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00558411 -0.386924 0.772443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0253024 -0.37527 0.783824 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0132151 -0.396764 0.785069 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0360796 -0.395978 0.775781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0578769 -0.459039 0.766439 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0707378 -0.451803 0.786236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0461991 -0.454158 0.787639 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0561039 -0.435761 0.774481 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0824157 -0.456685 0.765035 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0677817 -0.440643 0.753281 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0695548 -0.46392 0.745238 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0725109 -0.475081 0.778193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.05965 -0.482316 0.758396 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0479721 -0.477435 0.779597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0457452 -0.398096 0.726118 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0495643 -0.373728 0.724997 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0306825 -0.382672 0.738155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.030137 -0.383722 0.713492 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.064627 -0.389151 0.71296 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0451997 -0.399146 0.701455 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.060808 -0.41352 0.714081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0651725 -0.388102 0.737623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0613535 -0.41247 0.738744 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0462908 -0.397047 0.750781 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0571747 -0.463094 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.081612 -0.459563 0.692603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0696122 -0.463589 0.713804 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0665888 -0.442243 0.701767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0691745 -0.459069 0.671279 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0541513 -0.441749 0.680442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0447373 -0.4626 0.671155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0721979 -0.480415 0.683315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0477607 -0.483946 0.683192 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0601982 -0.48444 0.704516 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00628079 -0.512079 0.769837 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.000557006 -0.523883 0.790755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0165974 -0.51057 0.779001 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00208214 -0.49924 0.790506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0234352 -0.525392 0.781591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0249603 -0.500749 0.781342 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.029159 -0.513588 0.760673 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00475566 -0.536722 0.770086 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0104794 -0.524918 0.749168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0123987 -0.523409 0.758332 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00557859 -0.516134 0.695877 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00154892 -0.540463 0.697123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0156462 -0.524673 0.705165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00538221 -0.52751 0.717791 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0227737 -0.531924 0.687835 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.026607 -0.518971 0.708504 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0268034 -0.507596 0.68659 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00174531 -0.529087 0.675209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00577498 -0.504759 0.673964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0154498 -0.513298 0.683251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0574471 -0.504176 0.732914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0817008 -0.508666 0.734036 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0732807 -0.489545 0.720878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0722467 -0.488971 0.745541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0658672 -0.523298 0.746073 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0564131 -0.503602 0.757577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0416134 -0.518808 0.744951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0669012 -0.523872 0.72141 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0426474 -0.519382 0.720288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.058481 -0.504751 0.708251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0483751 -0.248762 0.655442 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.0599222 -0.183785 0.689081 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0522053 -0.160406 0.690965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0358698 -0.178533 0.687193 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0513956 -0.171954 0.669156 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0762577 -0.165658 0.692853 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.075448 -0.177206 0.671044 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0839747 -0.189036 0.690969 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0607319 -0.172236 0.71089 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0684488 -0.195615 0.709006 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0443964 -0.190363 0.707118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00673113 -0.215921 0.692479 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0258737 -0.20044 0.690591 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0203763 -0.215612 0.671903 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00551963 -0.196602 0.677151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0122285 -0.200749 0.711167 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00812553 -0.196911 0.697727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00691403 -0.21623 0.713055 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0270852 -0.21976 0.705919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00794264 -0.235241 0.707807 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0215878 -0.234932 0.687231 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0172857 -0.187119 0.6286 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00705049 -0.176731 0.608675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00352517 -0.200733 0.613272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.025725 -0.192673 0.60607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.020811 -0.163117 0.624003 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0394855 -0.179058 0.621398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0310463 -0.173504 0.643928 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00138875 -0.171177 0.631205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00884647 -0.181564 0.65113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00491406 -0.195179 0.635801 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115028 -0.216626 0.652044 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.127519 -0.195663 0.655816 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.108803 -0.201738 0.670732 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.104303 -0.194866 0.647447 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.133744 -0.210551 0.637128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.110528 -0.209754 0.628759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.121254 -0.231514 0.633356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.138245 -0.217423 0.660413 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.125754 -0.238386 0.656641 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.119529 -0.223497 0.675329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0723919 -0.21996 0.591563 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0673141 -0.20388 0.573526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0609052 -0.198742 0.596811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0490355 -0.216456 0.584361 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0788008 -0.225098 0.568278 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0605222 -0.237674 0.579113 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0838786 -0.241177 0.586315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0906706 -0.207384 0.580727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0957484 -0.223463 0.598764 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0842617 -0.202246 0.604012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.103481 -0.281603 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.126206 -0.291073 0.620293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.110246 -0.293457 0.638981 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.119897 -0.271345 0.633733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.119442 -0.279219 0.599717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.113132 -0.25949 0.613157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0967168 -0.269749 0.597829 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10979 -0.301332 0.604965 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0870656 -0.291862 0.603077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0938302 -0.303716 0.623653 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0910116 -0.245428 0.715923 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0942304 -0.234308 0.737733 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0714204 -0.238704 0.729364 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0854464 -0.221514 0.718528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.113822 -0.241032 0.724292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.105038 -0.228237 0.705088 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.110603 -0.252152 0.702483 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0997955 -0.258223 0.735128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0965768 -0.269343 0.713318 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0769856 -0.262619 0.726759 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0794645 -0.310405 0.682285 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0817333 -0.324811 0.702209 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0603366 -0.313378 0.697613 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0800146 -0.300317 0.704814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100861 -0.321838 0.686881 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0991425 -0.297345 0.689486 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0985923 -0.307433 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0811832 -0.334899 0.67968 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0789143 -0.320493 0.659755 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0597864 -0.323466 0.675083 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0243582 -0.277564 0.719322 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0076281 -0.275459 0.737359 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00142185 -0.270078 0.714074 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0167139 -0.255218 0.726523 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0305645 -0.282946 0.742607 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0396503 -0.262704 0.731771 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0472946 -0.285051 0.72457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0152725 -0.297806 0.730157 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0320026 -0.299911 0.71212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00906621 -0.292425 0.706872 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115031 -0.4293 0.544331 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.178985 -0.424299 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.190929 -0.412497 0.599471 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.16674 -0.417001 0.601529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.174844 -0.400273 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.203175 -0.419795 0.57931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.18709 -0.407571 0.565115 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.191231 -0.431597 0.561208 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.195071 -0.436523 0.595564 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.183127 -0.448325 0.577461 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.170881 -0.441027 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115031 -0.4293 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.10495 -0.41922 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0911807 -0.42291 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10864 -0.40545 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.128801 -0.425611 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13249 -0.411841 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.138881 -0.435691 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111341 -0.44307 0.638566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.121421 -0.45315 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0975713 -0.44676 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.131634 -0.367336 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.12515 -0.343834 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107784 -0.360946 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.122476 -0.353814 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.149 -0.350225 0.585275 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.146326 -0.360204 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.155484 -0.373727 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.134308 -0.357357 0.603794 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.140792 -0.380859 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.116942 -0.374468 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.178985 -0.424299 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.200165 -0.411775 0.505236 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.189948 -0.415187 0.527454 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.179342 -0.399922 0.511201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.189202 -0.420888 0.485076 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.168379 -0.409035 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.168023 -0.433412 0.487134 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.199808 -0.436152 0.501329 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.178629 -0.448677 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.189591 -0.439564 0.523547 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.131634 -0.367336 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.123305 -0.350719 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107784 -0.360946 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.116942 -0.374468 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.147155 -0.357109 0.491041 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.140792 -0.380859 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.155484 -0.373727 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.137998 -0.343587 0.509559 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.146326 -0.360204 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.122476 -0.353814 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115031 -0.4293 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.125111 -0.41922 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.138881 -0.42291 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.121421 -0.40545 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.101261 -0.425611 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0975713 -0.411841 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0911807 -0.435691 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.11872 -0.44307 0.450097 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10864 -0.45315 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13249 -0.44676 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.162382 -0.486264 0.544331 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.174264 -0.502603 0.558526 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.15142 -0.495376 0.564491 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.170327 -0.479659 0.566757 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.185226 -0.49349 0.538366 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.18129 -0.470546 0.546597 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.173345 -0.477151 0.524171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.166319 -0.509207 0.536101 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.154437 -0.492868 0.521905 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.143475 -0.501981 0.542066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0984274 -0.491265 0.507294 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0810612 -0.508376 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0745774 -0.484874 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0837352 -0.498397 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.104911 -0.514767 0.503387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107585 -0.504787 0.525813 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.122277 -0.497655 0.507294 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0957534 -0.501244 0.484868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.11312 -0.484132 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0892696 -0.477742 0.488775 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0984274 -0.491265 0.581368 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.082906 -0.501491 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0745774 -0.484874 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0892696 -0.477742 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.106756 -0.507882 0.597621 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.11312 -0.484132 0.599887 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.122277 -0.497655 0.581368 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0920638 -0.515014 0.579103 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107585 -0.504787 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0837352 -0.498397 0.56285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.153845 -0.574159 0.618405 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.202534 -0.612768 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.225282 -0.612732 0.668328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.22113 -0.60221 0.64638 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.212428 -0.591695 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.206686 -0.62329 0.680674 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.193832 -0.602253 0.679302 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.183939 -0.623325 0.671072 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.215388 -0.633805 0.660098 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.192641 -0.63384 0.650495 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.211236 -0.623283 0.63815 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225396 -0.554987 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.243024 -0.542885 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225396 -0.554987 0.593714 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.219861 -0.534333 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.243024 -0.542885 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.219861 -0.534333 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225396 -0.554987 0.643096 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.248559 -0.563539 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23093 -0.575642 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.23093 -0.575642 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.184086 -0.543919 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.200547 -0.527458 0.687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.205161 -0.540303 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.187702 -0.522843 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.179472 -0.531074 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.166627 -0.526459 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.163011 -0.547535 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.196931 -0.548533 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.18047 -0.564994 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.201546 -0.561378 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.130984 -0.631939 0.658726 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.132649 -0.643128 0.680674 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.152367 -0.631785 0.671072 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.133263 -0.618482 0.679302 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.111266 -0.643283 0.668328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.11188 -0.618637 0.666956 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.109601 -0.632094 0.64638 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.130371 -0.656585 0.660098 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.128706 -0.645397 0.63815 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.150088 -0.645242 0.650495 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.112536 -0.56309 0.678886 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.11011 -0.549659 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.132596 -0.555684 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.118927 -0.53924 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.09005 -0.557065 0.687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0988668 -0.546646 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0924762 -0.570497 0.666541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.103719 -0.573509 0.699462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.106145 -0.58694 0.678886 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.126205 -0.579534 0.691232 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0822954 -0.593331 0.618405 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0609772 -0.591664 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0822954 -0.593331 0.643096 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.076761 -0.572676 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0609772 -0.591664 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.076761 -0.572676 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0822954 -0.593331 0.593714 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0665116 -0.612319 0.618405 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0878298 -0.613986 0.606059 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0878298 -0.613986 0.630751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.172294 -0.643008 0.598245 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.189742 -0.660425 0.599616 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.196144 -0.636618 0.598245 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.185725 -0.645434 0.618821 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.165892 -0.666816 0.599616 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.161875 -0.651825 0.618821 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.148444 -0.649399 0.598245 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.17631 -0.657999 0.57904 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.158862 -0.640582 0.577669 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.182712 -0.634191 0.577669 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.123605 -0.6044 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.107144 -0.620861 0.549693 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.119989 -0.625475 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.102529 -0.608016 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.11076 -0.599785 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.106145 -0.58694 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.127221 -0.583324 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.128219 -0.617245 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.14468 -0.600784 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.141064 -0.621859 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.195155 -0.585228 0.557924 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.203972 -0.574809 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.181486 -0.568784 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.201546 -0.561378 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.217641 -0.591253 0.549693 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.215215 -0.577822 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.208824 -0.601672 0.57027 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.197581 -0.598659 0.537348 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.188764 -0.609078 0.557924 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.175095 -0.592634 0.545578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0329639 -0.552323 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0248832 -0.625877 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0316054 -0.646362 0.448652 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0478 -0.627981 0.445566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0287309 -0.625173 0.460998 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00868865 -0.644258 0.439705 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00581415 -0.623069 0.45205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00196644 -0.623773 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0277577 -0.647066 0.424272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0210355 -0.62658 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0439523 -0.628685 0.421186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0822954 -0.593331 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.105299 -0.593994 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.100664 -0.582384 0.457911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0926585 -0.572783 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0869303 -0.604941 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0742898 -0.58373 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0639267 -0.604278 0.482603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0949359 -0.614541 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0719323 -0.613879 0.46131 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.090301 -0.602932 0.448964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0138144 -0.584567 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0177119 -0.584898 0.521479 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0364224 -0.580268 0.506047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0185345 -0.56353 0.509133 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00489609 -0.589197 0.512531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00407348 -0.567829 0.500186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00879364 -0.588867 0.488152 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0129918 -0.605935 0.509445 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00909422 -0.605605 0.485065 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0317022 -0.601305 0.494013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0244483 -0.584869 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0473753 -0.5935 0.402668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0308315 -0.595617 0.420874 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0399691 -0.57344 0.415013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0409921 -0.582752 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0335859 -0.562692 0.39372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0180651 -0.574121 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0318545 -0.604929 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00892756 -0.596298 0.384149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0153107 -0.607046 0.405442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0355172 -0.54356 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0495897 -0.530389 0.475494 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0261165 -0.53532 0.481355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.031221 -0.519442 0.463149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0589904 -0.538628 0.454201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0406217 -0.527681 0.441856 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0449178 -0.551799 0.438769 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0538859 -0.554507 0.472408 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0398133 -0.567678 0.456976 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0304127 -0.559438 0.478269 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0163676 -0.511316 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0212225 -0.48882 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00896145 -0.491256 0.408529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00194055 -0.497372 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0286287 -0.50888 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00546563 -0.517432 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0237738 -0.531375 0.383837 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0395307 -0.502764 0.396183 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0346758 -0.525259 0.40513 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0272696 -0.505199 0.417476 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0440327 -0.593633 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0604766 -0.607302 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0678827 -0.587242 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0604766 -0.607302 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0366265 -0.613693 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0366265 -0.613693 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0201827 -0.600023 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0440327 -0.593633 0.348047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0275889 -0.579964 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0514389 -0.573573 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0521134 -0.520079 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0542684 -0.523344 0.344961 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0591566 -0.541988 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0358996 -0.534291 0.357307 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0472252 -0.501435 0.353908 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0288565 -0.512382 0.366254 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0450702 -0.49817 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0704822 -0.509132 0.356995 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0683272 -0.505868 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0753703 -0.527777 0.372427 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.101445 -0.561087 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.118381 -0.551884 0.390945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0944221 -0.550745 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.103361 -0.536664 0.403291 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.125404 -0.562225 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.110383 -0.547006 0.424584 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.108468 -0.571428 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.116465 -0.576307 0.394032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0995293 -0.58551 0.409464 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0925065 -0.575168 0.388171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247614 -0.494808 0.43322 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.313607 -0.494287 0.399581 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.326876 -0.484182 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.302705 -0.488171 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.310432 -0.470513 0.39372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337778 -0.490299 0.402668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321334 -0.476629 0.415013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.324509 -0.500404 0.420874 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.330051 -0.507957 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316783 -0.518062 0.405442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.305881 -0.511946 0.384149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.269833 -0.434629 0.396183 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.279233 -0.426389 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.286276 -0.448298 0.383837 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263449 -0.445377 0.37489 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.262789 -0.41272 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.247006 -0.431707 0.387235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.253389 -0.420959 0.408529 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.285616 -0.415641 0.396183 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.276216 -0.42388 0.417476 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29266 -0.43755 0.40513 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.302539 -0.452978 0.460062 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.320401 -0.436971 0.454201 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3148 -0.455413 0.438769 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29902 -0.436675 0.441856 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30814 -0.434535 0.475494 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.286759 -0.434239 0.463149 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290278 -0.450543 0.481355 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32392 -0.453274 0.472408 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.306057 -0.469281 0.478269 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318318 -0.471717 0.456976 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.291389 -0.554467 0.436618 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.314604 -0.562288 0.439705 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.310183 -0.541186 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.306499 -0.542501 0.45205 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.29581 -0.575569 0.448652 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.287705 -0.555781 0.460998 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.272595 -0.567748 0.445566 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.299494 -0.574255 0.424272 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.276279 -0.566433 0.421186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.295073 -0.553152 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.28032 -0.513157 0.497099 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.298839 -0.507811 0.512531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.302049 -0.505577 0.488152 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.287442 -0.489718 0.500186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.27711 -0.515392 0.521479 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.265714 -0.497299 0.509133 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.258591 -0.520738 0.506047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.291716 -0.531251 0.509445 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273198 -0.536597 0.494013 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.294927 -0.529016 0.485065 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225396 -0.554987 0.470257 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.227186 -0.567359 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.246777 -0.555283 0.482603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.227528 -0.54267 0.49155 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.205805 -0.567063 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.206147 -0.542374 0.479204 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.204014 -0.554691 0.457911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.225054 -0.579676 0.470257 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.223263 -0.567305 0.448964 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.244644 -0.567601 0.46131 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.258683 -0.536117 0.372739 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.275127 -0.549787 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282533 -0.529727 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275127 -0.549787 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.251277 -0.556177 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.251277 -0.556177 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.234833 -0.542508 0.372739 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.258683 -0.536117 0.348047 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.242239 -0.522448 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.266089 -0.516058 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.19269 -0.536638 0.406378 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.17251 -0.549603 0.412239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.191778 -0.549105 0.427671 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.177908 -0.528912 0.424584 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.173421 -0.537136 0.390945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.178819 -0.516445 0.403291 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.193601 -0.524171 0.385084 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.187292 -0.557329 0.394032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.207471 -0.544363 0.388171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.20656 -0.556831 0.409464 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.214908 -0.476459 0.369341 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.209819 -0.457868 0.353908 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.210053 -0.453963 0.378288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2312 -0.458164 0.366254 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.214674 -0.480363 0.344961 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.236055 -0.480659 0.357307 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.219763 -0.498954 0.360393 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.193527 -0.476163 0.356995 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.198616 -0.494753 0.372427 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.193761 -0.472258 0.381374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172546 -0.643951 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER -0.157543 -0.835815 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.122136 -0.871646 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.102403 -0.871334 0.180258 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100577 -0.862937 0.157111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.113406 -0.850164 0.173902 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.123961 -0.880044 0.188567 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.134964 -0.858873 0.182211 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.143694 -0.880356 0.173728 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111133 -0.892817 0.171776 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.130866 -0.893129 0.156937 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.109307 -0.884419 0.148628 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0854653 -0.82339 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0654286 -0.811594 0.114524 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0820122 -0.820516 0.0985541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0876595 -0.80102 0.112614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0688817 -0.814468 0.138803 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0911125 -0.803895 0.136894 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0889183 -0.826265 0.147112 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0632344 -0.833964 0.124743 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.083271 -0.845761 0.133052 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.079818 -0.842886 0.108773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135649 -0.799077 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.120908 -0.781177 0.180075 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.113462 -0.795477 0.161374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13149 -0.778973 0.157875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.143095 -0.784778 0.190293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153678 -0.782573 0.168094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.157836 -0.802678 0.181811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.125067 -0.801282 0.193792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.139808 -0.819182 0.18531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.11762 -0.815582 0.175091 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.194213 -0.884071 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.197746 -0.891905 0.176845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.175383 -0.884286 0.169668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.193701 -0.867957 0.172398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216576 -0.89169 0.160875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.212531 -0.867741 0.156428 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.213043 -0.883856 0.137727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.198259 -0.908019 0.158144 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.194726 -0.900186 0.134996 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.175896 -0.900401 0.150967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207727 -0.811502 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.212743 -0.794108 0.176661 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.189621 -0.802328 0.173931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.199907 -0.788345 0.156372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.230849 -0.803282 0.162601 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.218012 -0.797518 0.142311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.225832 -0.820676 0.14581 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.220563 -0.817265 0.18016 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.215547 -0.83466 0.163369 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.197441 -0.825486 0.177429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.229621 -0.84824 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.25245 -0.843832 0.107698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.233837 -0.846687 0.123668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.235043 -0.826426 0.109608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.248234 -0.845385 0.0834188 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.230827 -0.827978 0.0853287 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.225404 -0.849792 0.0751099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.247028 -0.865646 0.0974792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.224198 -0.870053 0.0891702 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.228415 -0.868501 0.113449 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.14403 -0.908384 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.128672 -0.926643 0.111295 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.1198 -0.904034 0.106848 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.133221 -0.90826 0.127138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.152902 -0.930993 0.109385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.157451 -0.912609 0.125228 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.16826 -0.912733 0.103028 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.139481 -0.926768 0.0890951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.154838 -0.908508 0.0827387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.130608 -0.904159 0.0846485 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.179437 -0.872552 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.188167 -0.894035 0.0421477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172046 -0.89378 0.0608487 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.195141 -0.885777 0.0643473 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.195558 -0.872807 0.0319289 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.202532 -0.864549 0.0541285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.186828 -0.851325 0.0404111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172463 -0.880811 0.0284303 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.163733 -0.859328 0.0369125 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.156342 -0.880556 0.0471312 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107359 -0.860128 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0905999 -0.853284 0.0455609 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111382 -0.840233 0.0482916 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0940331 -0.839638 0.0658506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.086577 -0.873178 0.0596212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0900102 -0.859532 0.079911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.103336 -0.880022 0.0764123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.103926 -0.873773 0.0420622 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120685 -0.880618 0.0588533 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.124708 -0.860723 0.044793 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0133465 -0.69376 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0838533 -0.674309 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.103063 -0.66171 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0876683 -0.673446 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0800983 -0.653258 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0992478 -0.662574 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0762832 -0.654121 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0800382 -0.675172 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.106818 -0.682761 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0876083 -0.69536 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0914233 -0.694497 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0539145 -0.666287 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0547519 -0.662466 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0439578 -0.682791 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0332597 -0.660752 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0647085 -0.645962 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0432164 -0.644249 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0638711 -0.649783 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0754066 -0.668 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0745692 -0.671821 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0646126 -0.688325 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0446211 -0.604582 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.053173 -0.627745 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0239663 -0.599047 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0118635 -0.616676 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0118635 -0.616676 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0446211 -0.604582 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.053173 -0.627745 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0432853 -0.701782 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0608821 -0.693716 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0652402 -0.694884 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0496759 -0.677932 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0389272 -0.700615 0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.027721 -0.684831 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0213304 -0.708681 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0544915 -0.717566 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0368947 -0.725632 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0588496 -0.718734 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00804971 -0.649684 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00328338 -0.628657 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0152909 -0.642244 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.000378614 -0.630031 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.026624 -0.636097 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.022962 -0.637471 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0313903 -0.657124 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0117117 -0.648309 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.016478 -0.669336 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.00686255 -0.661896 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0272215 -0.721234 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0310802 -0.720593 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00820099 -0.718114 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0246945 -0.7 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0501007 -0.723713 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.043715 -0.70312 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.046242 -0.724354 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0336072 -0.741827 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0297485 -0.742467 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.010728 -0.739347 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0646815 -0.745859 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0887955 -0.750021 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0813312 -0.732161 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.078459 -0.729506 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0721458 -0.763719 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0618093 -0.743204 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0480318 -0.759557 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.075018 -0.766375 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.050904 -0.762212 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0675537 -0.748514 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00415829 -0.786629 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0148294 -0.770845 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.024813 -0.781094 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.02648 -0.759776 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.02648 -0.759776 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00415829 -0.786629 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0148294 -0.770845 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0347427 -0.737837 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0542122 -0.747099 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0550267 -0.7241 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0553974 -0.743371 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0339282 -0.760836 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0351134 -0.757108 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0144587 -0.751574 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0335575 -0.741565 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.014088 -0.732303 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0343719 -0.718566 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172546 -0.643951 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.142305 -0.61371 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.125845 -0.597249 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.12123 -0.610094 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.138689 -0.592635 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.14692 -0.600865 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.159765 -0.596251 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.163381 -0.617326 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.12946 -0.618324 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.145921 -0.634785 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.124846 -0.631169 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100996 -0.624779 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0833673 -0.612676 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100996 -0.624779 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10653 -0.604124 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0833673 -0.612676 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10653 -0.604124 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100996 -0.624779 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0778329 -0.633331 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0954616 -0.645433 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0954616 -0.645433 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153374 -0.5724 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.141271 -0.554772 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13272 -0.577935 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153374 -0.5724 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.161926 -0.549237 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.174029 -0.566866 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.174029 -0.566866 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.141271 -0.554772 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153374 -0.5724 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.13272 -0.577935 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.213855 -0.632882 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.216282 -0.61945 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.193796 -0.625476 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207465 -0.609032 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.236341 -0.626857 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.227525 -0.616438 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.233915 -0.640288 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.222672 -0.6433 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.220246 -0.656732 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.200186 -0.649326 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.224924 -0.591572 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.2291 -0.567237 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.209804 -0.576452 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.209804 -0.576452 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.24422 -0.582357 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.224924 -0.591572 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.240045 -0.606693 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.24422 -0.582357 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.240045 -0.606693 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.224924 -0.591572 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.244096 -0.663122 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.265414 -0.661455 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.244096 -0.663122 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.249631 -0.642468 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.265414 -0.661455 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.249631 -0.642468 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.244096 -0.663122 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.25988 -0.68211 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238562 -0.683777 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.238562 -0.683777 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.161477 -0.68526 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.148046 -0.687686 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.137627 -0.678869 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.154071 -0.6652 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171896 -0.694077 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.177921 -0.671591 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.185327 -0.691651 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.155452 -0.707746 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.168883 -0.70532 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.145033 -0.698929 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.191718 -0.715501 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.190051 -0.736819 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171063 -0.721035 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.191718 -0.715501 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.210706 -0.731284 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.212373 -0.709966 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.212373 -0.709966 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.190051 -0.736819 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.191718 -0.715501 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171063 -0.721035 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120168 -0.696329 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.095832 -0.700504 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.105047 -0.681209 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.105047 -0.681209 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.110952 -0.715624 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120168 -0.696329 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135288 -0.711449 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.110952 -0.715624 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135288 -0.711449 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120168 -0.696329 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.343435 -0.786005 8.51251e-17 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.392454 -0.82165 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.400556 -0.824791 0.065698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376528 -0.821021 0.0614442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.392663 -0.802599 0.058292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.416482 -0.82542 0.0468401 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.408589 -0.803228 0.0394341 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.40838 -0.822279 0.0237283 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.400347 -0.843843 0.0499923 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.392245 -0.840701 0.0268805 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376319 -0.840073 0.0457385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.323622 -0.80984 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.308073 -0.80634 0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.300378 -0.802721 0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316395 -0.786996 0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.331317 -0.813459 0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339639 -0.794116 0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.346866 -0.81696 0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.315299 -0.829184 0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.330849 -0.832685 0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307605 -0.825565 0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.370774 -0.753118 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.367981 -0.734271 0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.348136 -0.745269 0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362711 -0.731279 0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.390619 -0.74212 0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.385349 -0.739128 0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.393412 -0.760966 0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376044 -0.756109 0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.378837 -0.774956 0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356199 -0.767107 0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.412267 -0.797815 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.436217 -0.793573 -0.0204376 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.420728 -0.796968 -0.00151032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419454 -0.776294 -0.0149506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.427756 -0.79442 -0.0436186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.410993 -0.777141 -0.0381316 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.403807 -0.798662 -0.0478724 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.42903 -0.815094 -0.0301783 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.405081 -0.819335 -0.0344321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.413542 -0.818489 -0.0112511 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.390587 -0.729282 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.392427 -0.704862 -0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.373948 -0.714218 0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.374248 -0.717401 -0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409067 -0.719927 -0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.390887 -0.732465 -0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.407227 -0.744347 -0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.408767 -0.716744 0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406927 -0.741164 0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.390287 -0.726099 0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.363249 -0.76217 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.356966 -0.747522 -0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.352002 -0.740618 -0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339469 -0.759239 -0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.368213 -0.769074 -0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.350716 -0.780791 -0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.374496 -0.783722 -0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.380746 -0.750453 -0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.387029 -0.765101 -0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.375782 -0.743549 -0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.365116 -0.854538 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.365674 -0.878086 -0.0104889 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.346241 -0.863875 -0.00500196 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.367962 -0.859887 0.00604126 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.384548 -0.868748 -0.0233819 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.386837 -0.85055 -0.00685171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.38399 -0.8452 -0.0307879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362827 -0.872736 -0.0344251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.362269 -0.849188 -0.0418311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.343394 -0.858526 -0.0289382 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316097 -0.818893 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.297057 -0.819591 -0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.304244 -0.79807 -0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.293153 -0.814956 -0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.30891 -0.840413 -0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.305006 -0.835779 -0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.32795 -0.839716 -0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.320001 -0.823527 -0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339041 -0.822829 -0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327188 -0.802007 -0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.296284 -0.842728 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.272611 -0.848999 0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.278432 -0.829121 -0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.281616 -0.828835 0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.290462 -0.862606 0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.299468 -0.842441 0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.314135 -0.856335 0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.287278 -0.862893 -0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.310951 -0.856621 -0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.293099 -0.843015 -0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.358439 -0.594141 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.389119 -0.547576 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.386849 -0.525642 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.366733 -0.538964 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.379645 -0.528407 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409235 -0.534255 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.402031 -0.537019 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.411505 -0.556189 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396323 -0.544812 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398593 -0.566746 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.376207 -0.558134 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.317871 -0.566667 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.299647 -0.551072 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.29885 -0.563547 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.315344 -0.545434 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.318667 -0.554192 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.334364 -0.548554 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.336891 -0.569787 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.302174 -0.572306 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.320398 -0.587901 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.301377 -0.584781 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.327164 -0.504962 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.318612 -0.528125 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.347819 -0.499428 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.359921 -0.517056 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.359921 -0.517056 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327164 -0.504962 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.318612 -0.528125 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.429687 -0.57505 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.446515 -0.55776 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.428387 -0.562617 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.423296 -0.5512 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.447815 -0.570193 0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.424596 -0.563633 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.430987 -0.587483 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.452905 -0.58161 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436077 -0.5989 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.434777 -0.586467 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.379835 -0.550064 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.372012 -0.535334 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.359551 -0.536327 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.35918 -0.555599 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.392296 -0.549071 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.379464 -0.569335 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.400119 -0.563801 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.392667 -0.529799 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.400489 -0.54453 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.380205 -0.530793 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399007 -0.621614 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.420252 -0.632748 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.408963 -0.638118 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.419661 -0.61608 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.410295 -0.616244 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409705 -0.599576 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.38905 -0.60511 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399597 -0.638282 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.378352 -0.627149 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.388308 -0.643653 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.408291 -0.619127 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.415912 -0.617918 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39183 -0.616439 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.406911 -0.597788 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.432372 -0.620605 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.423371 -0.600475 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.424751 -0.621814 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.417292 -0.639257 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.409671 -0.640465 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39321 -0.637778 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.375943 -0.687009 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356956 -0.671225 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396598 -0.681475 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398265 -0.660156 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398265 -0.660156 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.375943 -0.687009 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356956 -0.671225 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337042 -0.638217 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.320629 -0.641183 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.313702 -0.630777 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.328614 -0.618565 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.34397 -0.648623 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.351955 -0.626005 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.360383 -0.645657 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.329058 -0.660835 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.345471 -0.65787 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.32213 -0.65043 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.358439 -0.594141 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.409774 -0.542042 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.413579 -0.517869 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.395831 -0.525596 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.393219 -0.528508 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.427522 -0.534315 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.407161 -0.544953 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.423716 -0.558488 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.430134 -0.531404 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.426328 -0.555577 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.412386 -0.539131 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.379835 -0.550064 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.375068 -0.529037 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356494 -0.542624 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.371406 -0.530412 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398409 -0.536477 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.394747 -0.537852 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.403175 -0.557504 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.383497 -0.548689 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.388263 -0.569716 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.364922 -0.562276 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.327164 -0.504962 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.318612 -0.528125 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.347819 -0.499428 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.359921 -0.517056 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.359921 -0.517056 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327164 -0.504962 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.339267 -0.522591 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.318612 -0.528125 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.388377 -0.586119 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.399584 -0.570335 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.403942 -0.569167 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.381987 -0.562269 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.384019 -0.587286 -0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.366422 -0.57922 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.372813 -0.60307 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.405974 -0.594185 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.394768 -0.609969 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.410332 -0.593017 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.317871 -0.566667 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.317033 -0.562847 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.327827 -0.583171 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.338525 -0.561133 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307077 -0.546343 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.328569 -0.544629 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307914 -0.550163 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.296378 -0.568381 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.297216 -0.572202 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.307172 -0.588706 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337042 -0.638217 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.317573 -0.64748 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316758 -0.624481 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.316388 -0.643752 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337857 -0.661216 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.336672 -0.657489 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.357326 -0.651954 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.338228 -0.641945 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.357697 -0.632683 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.337413 -0.618946 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.428945 -0.613592 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.451897 -0.612625 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.432663 -0.614807 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.436515 -0.593593 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.448179 -0.61141 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.432797 -0.592379 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.425227 -0.612377 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.444328 -0.632624 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.421376 -0.633591 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.425094 -0.634806 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.375943 -0.687009 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356956 -0.671225 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.396598 -0.681475 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398265 -0.660156 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.398265 -0.660156 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.375943 -0.687009 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.37761 -0.665691 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.356956 -0.671225 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.399007 -0.621614 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.402865 -0.620974 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.379986 -0.618494 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.39648 -0.600381 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.421886 -0.624094 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.4155 -0.603501 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.418027 -0.624734 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.405392 -0.642207 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.401533 -0.642848 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.382513 -0.639728 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.157543 -0.835815 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.119969 -0.899353 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0977075 -0.909872 -0.115431 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0997803 -0.886771 -0.1239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.104052 -0.891613 -0.100068 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.117896 -0.922453 -0.108814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.124241 -0.904194 -0.0934517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.140158 -0.911935 -0.110668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.113625 -0.917612 -0.132647 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135886 -0.907093 -0.1345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115698 -0.894512 -0.141116 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0844101 -0.836885 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0627848 -0.826973 -0.106005 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0805529 -0.830202 -0.122844 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.083104 -0.81296 -0.105354 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0666419 -0.833656 -0.0825505 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0869612 -0.819643 -0.0818993 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0882673 -0.843568 -0.0759343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0640908 -0.850898 -0.10004 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0857161 -0.860809 -0.093424 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0818589 -0.854126 -0.116879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.130205 -0.868703 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.11253 -0.867758 -0.0334138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107566 -0.860854 -0.0565949 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.122142 -0.846864 -0.0423994 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135168 -0.875606 -0.0274488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.14478 -0.854713 -0.0364345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.152843 -0.876551 -0.0446649 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120593 -0.889596 -0.0416443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.138267 -0.890541 -0.0588603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115629 -0.882692 -0.0648253 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.193102 -0.898283 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.201143 -0.920038 -0.120537 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.17991 -0.910616 -0.112168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.201384 -0.900209 -0.105825 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.214335 -0.907705 -0.137375 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.214576 -0.887876 -0.122663 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.206294 -0.88595 -0.145845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.192861 -0.918112 -0.143718 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.18482 -0.896357 -0.152187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.171628 -0.90869 -0.135349 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.203337 -0.867633 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.209658 -0.868948 -0.0385197 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.186008 -0.865773 -0.0448623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.202239 -0.84746 -0.0481565 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.226988 -0.870808 -0.0560094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.219569 -0.84932 -0.0656463 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.220667 -0.869493 -0.0798417 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.210757 -0.889121 -0.0527151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.204436 -0.887806 -0.0765474 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.187106 -0.885946 -0.0590577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.230676 -0.834745 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.252002 -0.824206 -0.116217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.234336 -0.827952 -0.0993785 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.231282 -0.810793 -0.116868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.248342 -0.830999 -0.139672 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.227621 -0.817586 -0.140323 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.227016 -0.841538 -0.146288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.251396 -0.848158 -0.122182 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.23007 -0.858698 -0.128798 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.23373 -0.851905 -0.105343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.147308 -0.866465 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.130609 -0.876203 -0.193128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.124356 -0.857385 -0.178416 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.128522 -0.879733 -0.16878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153561 -0.885283 -0.192477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.151474 -0.888813 -0.168128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.170259 -0.875546 -0.177114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.149395 -0.862935 -0.202114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.166093 -0.853198 -0.186751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.143141 -0.844117 -0.187402 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.184881 -0.802927 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.180723 -0.785723 -0.188808 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.173028 -0.782104 -0.165627 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.161937 -0.798991 -0.179823 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.192576 -0.806546 -0.194773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.17379 -0.819813 -0.185788 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.196734 -0.82375 -0.177557 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.203667 -0.78966 -0.180578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207825 -0.806864 -0.163362 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.195972 -0.786041 -0.157397 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111748 -0.803997 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.108311 -0.798532 -0.183703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.119537 -0.819589 -0.17736 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.131037 -0.797989 -0.174066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100522 -0.78294 -0.166213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.123249 -0.782397 -0.156576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.10396 -0.788405 -0.142381 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0890219 -0.80454 -0.169507 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0924597 -0.810005 -0.145675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100248 -0.825597 -0.163165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.172546 -0.643951 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER -0.202787 -0.61371 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.200937 -0.595399 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.194794 -0.591462 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.180539 -0.605717 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.208929 -0.617647 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.188531 -0.627965 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.210779 -0.635958 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.223185 -0.603392 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.225035 -0.621702 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.217042 -0.599454 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.244096 -0.624779 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.260374 -0.607636 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.240901 -0.612854 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.237705 -0.600929 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.26357 -0.619561 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.240901 -0.612854 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.247291 -0.636704 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.266765 -0.631486 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.250487 -0.648629 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.247291 -0.636704 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.191718 -0.5724 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.185011 -0.549732 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.167868 -0.56601 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.179793 -0.569205 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.208861 -0.556122 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.203643 -0.575596 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.215568 -0.578791 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.196936 -0.552927 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.203643 -0.575596 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.179793 -0.569205 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.131237 -0.632882 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.131575 -0.625593 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.15071 -0.6381 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.146508 -0.614836 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.112102 -0.620375 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.127034 -0.609618 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111763 -0.627664 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.116304 -0.643639 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.115965 -0.650927 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.135439 -0.656145 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.120168 -0.591572 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.105912 -0.577317 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111438 -0.600302 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.128897 -0.582843 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.114642 -0.568587 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.137627 -0.574113 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.128897 -0.582843 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0971825 -0.586046 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.111438 -0.600302 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.102708 -0.609032 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.100996 -0.663122 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0783272 -0.656415 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0978007 -0.651197 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0946054 -0.639272 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0815225 -0.66834 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0978007 -0.651197 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.104191 -0.675047 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0847178 -0.680265 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.107387 -0.686972 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.104191 -0.675047 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.183615 -0.68526 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.182351 -0.708085 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.165569 -0.700531 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.188833 -0.704733 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.200397 -0.692813 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.206879 -0.689462 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.201661 -0.669989 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.177134 -0.688611 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.178397 -0.665787 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.160351 -0.681058 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.153374 -0.715501 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.136231 -0.731779 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.129524 -0.70911 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.141449 -0.712305 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.160081 -0.738169 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.165299 -0.718696 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.177224 -0.721891 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.148156 -0.734974 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.165299 -0.718696 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.141449 -0.712305 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.224924 -0.696329 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.23918 -0.710584 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216195 -0.705059 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.233654 -0.687599 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.24791 -0.701855 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.242384 -0.678869 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.233654 -0.687599 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.23045 -0.719314 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.216195 -0.705059 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.207465 -0.713788 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0133465 -0.69376 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.0631985 -0.668775 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0667914 -0.661946 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0511945 -0.680354 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0452771 -0.65711 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0787954 -0.650366 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0572811 -0.64553 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0752026 -0.657195 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0847128 -0.673611 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.08112 -0.680439 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.069116 -0.692019 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00804971 -0.649684 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.000226782 -0.634953 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0122343 -0.635947 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.012605 -0.655218 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0205108 -0.64869 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00767898 -0.668955 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0283337 -0.66342 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0208815 -0.629419 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0287044 -0.644149 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00842045 -0.630413 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0446211 -0.604582 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.053173 -0.627745 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0239663 -0.599047 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0118635 -0.616676 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0118635 -0.616676 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0446211 -0.604582 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0325183 -0.62221 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.053173 -0.627745 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0845947 -0.712851 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.107813 -0.706291 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0896851 -0.701434 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0909853 -0.689001 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.102723 -0.717709 -0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0858949 -0.700418 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0795043 -0.724268 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.101422 -0.730141 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0782041 -0.736701 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0832945 -0.725284 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0539145 -0.666287 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0721382 -0.650692 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.072935 -0.663167 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0564414 -0.645053 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0531177 -0.653812 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0374209 -0.648173 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.034894 -0.669407 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0696112 -0.671925 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0513875 -0.68752 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.070408 -0.6844 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0347427 -0.737837 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0511556 -0.740802 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0580833 -0.730397 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.043171 -0.718185 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.027815 -0.748242 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0198304 -0.725625 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0114021 -0.745277 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0427273 -0.760455 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0263144 -0.757489 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0496549 -0.750049 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0440268 -0.740325 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.0650768 -0.746894 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0607735 -0.723153 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0653796 -0.739183 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.04833 -0.764065 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0486329 -0.756355 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.02728 -0.757496 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0437239 -0.748035 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0226739 -0.741466 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0394207 -0.724295 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.00415829 -0.786629 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0148294 -0.770845 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.024813 -0.781094 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.02648 -0.759776 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.02648 -0.759776 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00415829 -0.786629 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0058253 -0.76531 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.0148294 -0.770845 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0272215 -0.721234 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER -0.0484665 -0.732368 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0371781 -0.737738 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0478762 -0.715699 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0385099 -0.715864 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0379196 -0.699195 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0172649 -0.70473 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0278118 -0.737902 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.00656677 -0.726768 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER -0.0165234 -0.743272 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.471405 -0.471405 1.11022e-16 RAD 0.166667 
+   txt002 
+ SPHERE CENTER 0.690426 -0.508983 1.83812e-16 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.755941 -0.484794 -0.0246914 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.767658 -0.47411 -0.0436186 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.749038 -0.489758 -0.0478724 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.744501 -0.467528 -0.0381316 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.774562 -0.469146 -0.0204376 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.751405 -0.462564 -0.0149506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.762845 -0.47983 -0.00151032 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.779098 -0.491377 -0.0301783 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.767382 -0.502061 -0.0112511 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.760478 -0.507025 -0.0344321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.695668 -0.478434 -0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.703418 -0.481931 -0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.716184 -0.491475 -0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.694124 -0.500827 -0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.682902 -0.46889 -0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.673608 -0.487786 -0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675152 -0.465393 -0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.704962 -0.459538 -0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.697211 -0.456041 -0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.717727 -0.469082 -0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.7029 -0.436283 -0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.714226 -0.418941 -0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.724842 -0.44101 -0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.704751 -0.43889 -0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.692283 -0.414215 -0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.682808 -0.434163 -0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.680957 -0.431557 0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.712374 -0.416335 0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.701048 -0.433677 0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.722991 -0.438403 0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.7507 -0.515343 0.0425863 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.773394 -0.506594 0.0468401 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.764807 -0.507924 0.0237283 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.755462 -0.491321 0.0394341 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.759287 -0.514012 0.065698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.741355 -0.49874 0.058292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.736593 -0.522762 0.0614442 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.768632 -0.530616 0.0499923 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.745938 -0.539365 0.0457385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.760045 -0.531946 0.0268805 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.697658 -0.466832 0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.709346 -0.447385 0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.721188 -0.46231 0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.703286 -0.447429 0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.685816 -0.451907 0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.679757 -0.451951 0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674129 -0.471354 0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.703718 -0.466788 0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.692031 -0.486235 0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.71556 -0.481713 0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.685185 -0.539531 0.0672777 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.693658 -0.538818 0.0904587 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.708875 -0.534075 0.0716007 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.691194 -0.517905 0.0775657 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669969 -0.544274 0.0861356 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.667505 -0.523361 0.0732426 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.661495 -0.544988 0.0629546 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.687649 -0.560445 0.0801706 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.679176 -0.561158 0.0569896 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.702866 -0.555702 0.0613127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.743468 -0.557494 -0.0178949 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.767402 -0.560084 -0.0233819 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.755145 -0.53997 -0.0307879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.760285 -0.543179 -0.00685171 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.755725 -0.577608 -0.0104889 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.748608 -0.560703 0.00604126 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.731791 -0.575017 -0.00500196 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.750585 -0.574398 -0.0344251 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.726651 -0.571808 -0.0289382 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.738328 -0.554284 -0.0418311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.677953 -0.581682 0.00679642 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.682851 -0.601808 0.0202367 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.700216 -0.58454 0.0170845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.680568 -0.579842 0.0312799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.660588 -0.59895 0.00994863 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.658304 -0.576984 0.0209919 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.65569 -0.578824 -0.00349164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.680237 -0.603648 -0.0042468 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675339 -0.583522 -0.0176871 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.697602 -0.58638 -0.00739901 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.683194 -0.551134 -0.0604812 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.687731 -0.573364 -0.070222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.703871 -0.56324 -0.0545162 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.682033 -0.571303 -0.0462858 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.667055 -0.561258 -0.076187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.661356 -0.559196 -0.0522508 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.662518 -0.539027 -0.0664462 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.688893 -0.553195 -0.0844174 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.684356 -0.530964 -0.0746767 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.705033 -0.543071 -0.0687117 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607487 -0.335322 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.629404 -0.313405 -0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.626214 -0.316595 -0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624401 -0.335868 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.606941 -0.318408 -0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.631217 -0.294133 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.611945 -0.295946 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.634407 -0.290942 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.648676 -0.311592 -0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.651867 -0.308402 -0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.646863 -0.330864 -0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.610996 -0.384191 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.623201 -0.403702 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.635431 -0.385946 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62031 -0.401066 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.598766 -0.401947 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.595876 -0.399312 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.586561 -0.382437 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.613886 -0.386827 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.601681 -0.367317 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626116 -0.369071 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.558618 -0.331813 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.539107 -0.319608 -0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.541743 -0.322499 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.556863 -0.307378 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555982 -0.328923 -0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.573738 -0.316693 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.575492 -0.341128 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.540862 -0.344043 -0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.560372 -0.356248 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.543497 -0.346933 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.625895 -0.264535 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.637402 -0.248969 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.646193 -0.271807 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.625088 -0.268363 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.617105 -0.241698 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.604791 -0.261092 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605598 -0.257264 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.638209 -0.245142 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626702 -0.260708 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.647 -0.267979 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.550934 -0.258608 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570229 -0.267823 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570229 -0.267823 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.535813 -0.273728 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539989 -0.298064 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.535813 -0.273728 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539989 -0.298064 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.603979 -0.286452 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.613271 -0.265398 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627912 -0.281225 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.610787 -0.26842 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.589337 -0.270625 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.586853 -0.273647 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.580045 -0.291679 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.606463 -0.283431 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.59717 -0.304484 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.621104 -0.299257 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.678274 -0.316914 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.69384 -0.305407 -0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674446 -0.317721 -0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671002 -0.296616 -0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.697667 -0.3046 -0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.67483 -0.295809 -0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.682101 -0.316107 -0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.701111 -0.325704 -0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.685545 -0.337211 -0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.681717 -0.338018 -0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.656357 -0.33883 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.677411 -0.329538 -0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674389 -0.332022 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.661584 -0.314897 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659378 -0.336346 -0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.643552 -0.321705 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.638325 -0.345639 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.672184 -0.353472 -0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.65113 -0.362764 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669162 -0.355956 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.684201 -0.391875 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674986 -0.37258 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674986 -0.37258 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669081 -0.406996 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644745 -0.40282 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669081 -0.406996 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644745 -0.40282 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607487 -0.335322 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.659645 -0.283164 0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.672915 -0.269894 0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.666987 -0.293281 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.649528 -0.275822 0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665573 -0.259777 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.642185 -0.265705 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.652302 -0.273047 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.683032 -0.277236 0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669762 -0.290507 0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.677104 -0.300624 0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.656357 -0.33883 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.663448 -0.328536 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.639482 -0.329516 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.654603 -0.314396 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.680322 -0.33785 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.671477 -0.32371 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.673232 -0.348145 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.665202 -0.35297 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.658111 -0.363265 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.641237 -0.353951 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.603979 -0.286452 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.614273 -0.279361 0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.628413 -0.288206 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.613293 -0.303327 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.589839 -0.277607 0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.588858 -0.301572 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.579544 -0.284698 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.604959 -0.262487 0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.594664 -0.269578 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.619099 -0.271332 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.610775 -0.279656 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.621535 -0.258061 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.634468 -0.275921 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616678 -0.264057 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.597842 -0.261795 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.592985 -0.267791 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.587082 -0.28339 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.615632 -0.27366 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.604872 -0.295255 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.628565 -0.29152 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.550934 -0.258608 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570229 -0.267823 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570229 -0.267823 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.535813 -0.273728 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539989 -0.298064 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.535813 -0.273728 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539989 -0.298064 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555109 -0.282943 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.558618 -0.331813 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.55307 -0.320611 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.57665 -0.325005 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.563845 -0.30788 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.535038 -0.327419 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.545813 -0.314688 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.540585 -0.338621 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.547843 -0.344544 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.553391 -0.355747 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.571423 -0.348938 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.663153 -0.332034 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.684748 -0.321274 0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.678752 -0.326131 0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.666888 -0.308341 0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669149 -0.327177 0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.651289 -0.314244 0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.647554 -0.337937 0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.681014 -0.344967 0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659419 -0.355727 0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.675018 -0.349824 0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.610996 -0.384191 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.622198 -0.389739 0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.63493 -0.378964 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.617804 -0.366159 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.598265 -0.394966 0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.593871 -0.371386 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.587062 -0.389418 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.61539 -0.407771 0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.604188 -0.402224 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.628121 -0.396997 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.684201 -0.391875 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674986 -0.37258 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.674986 -0.37258 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669081 -0.406996 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644745 -0.40282 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.669081 -0.406996 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.644745 -0.40282 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.659866 -0.3877 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.554344 -0.645066 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.610229 -0.668521 0.153697 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.633406 -0.663938 0.160875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626429 -0.65892 0.137727 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.617928 -0.64522 0.156428 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.617206 -0.673539 0.176845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.601728 -0.654822 0.172398 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.59403 -0.678123 0.169668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.625707 -0.687239 0.158144 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.602531 -0.691822 0.150967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.61873 -0.682221 0.134996 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.622977 -0.619787 0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.63767 -0.608008 0.0834188 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.620102 -0.623239 0.0751099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.613891 -0.601637 0.0853287 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.640545 -0.604555 0.107698 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616766 -0.598184 0.109608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.625852 -0.616334 0.123668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.646756 -0.626157 0.0974792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.632063 -0.637936 0.113449 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.629188 -0.641389 0.0891702 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.585648 -0.598918 0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.601562 -0.580238 0.162601 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605914 -0.59781 0.14581 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.587563 -0.581665 0.142311 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.581295 -0.581346 0.176661 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.567297 -0.582773 0.156372 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.565381 -0.600026 0.173931 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.599646 -0.597491 0.18016 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.583732 -0.616171 0.177429 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.603999 -0.615063 0.163369 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.541596 -0.6938 0.165419 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.547376 -0.70016 0.188567 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.564621 -0.690564 0.173728 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.546319 -0.676324 0.182211 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.524351 -0.703396 0.180258 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523294 -0.679561 0.173902 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.518571 -0.697037 0.157111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542652 -0.717636 0.171776 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.536873 -0.711276 0.148628 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.559898 -0.70804 0.156937 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.517014 -0.624197 0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.516313 -0.60809 0.190293 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.538029 -0.616221 0.181811 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.524375 -0.60089 0.168094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495298 -0.616065 0.180075 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.50336 -0.608865 0.157875 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495999 -0.632172 0.161374 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.508952 -0.631397 0.193792 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.509653 -0.647504 0.175091 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.530668 -0.639529 0.18531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.48571 -0.670344 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.466887 -0.67091 0.138803 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490138 -0.671107 0.147112 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.480853 -0.650637 0.136894 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46246 -0.670147 0.114524 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.476425 -0.649874 0.112614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.481283 -0.669581 0.0985541 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.471745 -0.690617 0.124743 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490567 -0.690052 0.108773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.494995 -0.690815 0.133052 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.578925 -0.714669 0.104938 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.597914 -0.729812 0.109385 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.602084 -0.70632 0.103028 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.592661 -0.711617 0.125228 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.574755 -0.738161 0.111295 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.569503 -0.719965 0.127138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.555767 -0.723017 0.106848 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.584178 -0.732864 0.0890951 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.565189 -0.71772 0.0846485 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.588348 -0.709372 0.0827387 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.52304 -0.691213 0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.511567 -0.712906 0.0596212 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.529503 -0.710453 0.0764123 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.507717 -0.699372 0.079911 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.505104 -0.693665 0.0455609 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.501254 -0.680131 0.0658506 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.516576 -0.671972 0.0482916 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.526889 -0.704747 0.0420622 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.538362 -0.683054 0.044793 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.544826 -0.702295 0.0588533 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.591673 -0.665934 0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.605761 -0.658095 0.0319289 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.58746 -0.643855 0.0404111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.607672 -0.647455 0.0541285 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.609975 -0.680174 0.0421477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.611885 -0.669535 0.0643473 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.595887 -0.688013 0.0608487 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.589763 -0.676573 0.0284303 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.575674 -0.684413 0.0471312 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.571461 -0.662334 0.0369125 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.471405 -0.471405 0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.501645 -0.441164 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.518106 -0.424703 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.522721 -0.437548 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.505261 -0.420089 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.497031 -0.428319 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.484186 -0.423704 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.48057 -0.44478 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.51449 -0.445778 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.498029 -0.462239 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.519105 -0.458623 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542955 -0.452233 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.560583 -0.44013 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542955 -0.452233 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.53742 -0.431578 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.560583 -0.44013 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.53742 -0.431578 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542955 -0.452233 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.566118 -0.460785 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.548489 -0.472887 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.548489 -0.472887 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490576 -0.399854 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.502679 -0.382226 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.511231 -0.405389 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490576 -0.399854 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.482024 -0.376691 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.469922 -0.39432 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.469922 -0.39432 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.502679 -0.382226 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490576 -0.399854 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.511231 -0.405389 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.430095 -0.460336 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.427669 -0.446904 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.450155 -0.45293 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436486 -0.436486 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.407609 -0.454311 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.416426 -0.443892 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410035 -0.467742 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.421278 -0.470754 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.423704 -0.484186 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.443764 -0.47678 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.419026 -0.419026 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.414851 -0.39469 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.434147 -0.403906 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.434147 -0.403906 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399731 -0.409811 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.419026 -0.419026 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.403906 -0.434147 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399731 -0.409811 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.403906 -0.434147 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.419026 -0.419026 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399854 -0.490576 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.378536 -0.488909 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399854 -0.490576 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.39432 -0.469922 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.378536 -0.488909 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.39432 -0.469922 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399854 -0.490576 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.384071 -0.509564 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.405389 -0.511231 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.405389 -0.511231 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.482473 -0.512714 0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.495905 -0.51514 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.506323 -0.506323 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.48988 -0.492654 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472055 -0.521531 0.30328 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46603 -0.499045 0.295049 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.458623 -0.519105 0.282703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.488498 -0.5352 0.290934 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.475067 -0.532774 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.498917 -0.526383 0.270358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452233 -0.542955 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.4539 -0.564273 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472887 -0.548489 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452233 -0.542955 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.433245 -0.558738 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.431578 -0.53742 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.431578 -0.53742 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4539 -0.564273 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452233 -0.542955 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.472887 -0.548489 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523783 -0.523783 0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.548119 -0.527958 0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.538903 -0.508662 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.538903 -0.508662 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.532998 -0.543078 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523783 -0.523783 0.246914 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.508662 -0.538903 0.234568 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.532998 -0.543078 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.508662 -0.538903 0.209877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523783 -0.523783 0.197531 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.335322 -0.607487 0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.313405 -0.629404 0.178389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.316595 -0.626214 0.202664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.335868 -0.624401 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318408 -0.606941 0.187336 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.294133 -0.631217 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.295946 -0.611945 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290942 -0.634407 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.311592 -0.648676 0.193717 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.308402 -0.651867 0.169441 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.330864 -0.646863 0.178389 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.384191 -0.610996 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.405245 -0.601704 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.402224 -0.604188 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.389418 -0.587062 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.387213 -0.608512 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.371386 -0.593871 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.366159 -0.617804 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.400018 -0.625637 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.378964 -0.63493 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396997 -0.628121 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.331813 -0.558618 0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.341105 -0.537564 0.175614 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355747 -0.553391 0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338621 -0.540585 0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317172 -0.542791 0.178701 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.314688 -0.545813 0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.30788 -0.563845 0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.334297 -0.555596 0.191046 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.325005 -0.57665 0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.348938 -0.571423 0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.264535 -0.625895 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.245336 -0.623429 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268271 -0.624736 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.260997 -0.604627 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2416 -0.624589 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.257262 -0.605787 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.2608 -0.627055 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.248874 -0.644697 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268073 -0.647163 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271809 -0.646004 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.278768 -0.530773 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298064 -0.539989 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298064 -0.539989 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263648 -0.545894 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267823 -0.570229 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263648 -0.545894 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267823 -0.570229 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.286452 -0.603979 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.266942 -0.591774 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.269578 -0.594664 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.284698 -0.579544 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.283817 -0.601088 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.301572 -0.588858 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.303327 -0.613293 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.268696 -0.616209 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.288206 -0.628413 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.271332 -0.619099 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316914 -0.678274 0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.31938 -0.697473 0.138161 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.338182 -0.681812 0.134867 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.318074 -0.674538 0.147213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298112 -0.693935 0.126127 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.296805 -0.671 0.135179 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.295646 -0.674736 0.110799 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.31822 -0.701209 0.113782 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.315754 -0.682009 0.0984536 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.337022 -0.685547 0.110488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33883 -0.656357 0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.351035 -0.675867 0.0466081 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.363265 -0.658111 0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.348145 -0.673232 0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3266 -0.674113 0.0435217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.32371 -0.671477 0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.314396 -0.654603 0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.341721 -0.658993 0.031176 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.329516 -0.639482 0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.353951 -0.641237 0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.412036 -0.664041 0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40282 -0.644745 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40282 -0.644745 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396915 -0.679161 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37258 -0.674986 0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396915 -0.679161 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37258 -0.674986 0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.554344 -0.645066 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.616373 -0.681385 -0.129006 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.639472 -0.678928 -0.137375 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.621631 -0.664108 -0.145845 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.629767 -0.661636 -0.122663 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.634214 -0.696205 -0.120537 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.624508 -0.678912 -0.105825 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.611115 -0.698662 -0.112168 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.626079 -0.698678 -0.143718 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.602979 -0.701135 -0.135349 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.608237 -0.683858 -0.152187 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.617144 -0.607573 -0.122833 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.63057 -0.595495 -0.139672 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.617371 -0.615286 -0.146288 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605919 -0.594239 -0.140323 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.630343 -0.587782 -0.116217 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605692 -0.586526 -0.116868 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616917 -0.59986 -0.0993785 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.641795 -0.608828 -0.122182 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.628369 -0.620906 -0.105343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.628595 -0.628619 -0.128798 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.609912 -0.649723 -0.062352 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.631982 -0.640648 -0.0560094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.62585 -0.64267 -0.0798417 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.614812 -0.625749 -0.0656463 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.616044 -0.647702 -0.0385197 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.598874 -0.632802 -0.0481565 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.593974 -0.656777 -0.0448623 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.627081 -0.664623 -0.0527151 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.605012 -0.673698 -0.0590577 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.620949 -0.666645 -0.0765474 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.553573 -0.718878 -0.117284 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.563328 -0.73992 -0.108814 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.577348 -0.719679 -0.110668 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.559693 -0.720935 -0.0934517 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539553 -0.739118 -0.115431 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.535918 -0.720133 -0.100068 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.529798 -0.718076 -0.1239 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.557208 -0.737863 -0.132647 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.547453 -0.716821 -0.141116 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.571228 -0.717623 -0.1345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.547112 -0.687216 -0.0506299 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.554862 -0.690713 -0.0274488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.570641 -0.682694 -0.0446649 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.552739 -0.667813 -0.0364345 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.531333 -0.695235 -0.0334138 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.52921 -0.672335 -0.0423994 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523582 -0.691738 -0.0565949 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.549235 -0.710116 -0.0416443 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.541484 -0.706619 -0.0648253 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.565014 -0.702097 -0.0588603 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.491544 -0.682558 -0.099389 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.474542 -0.688647 -0.0825505 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.498226 -0.686417 -0.0759343 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.485132 -0.666351 -0.0818993 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.46786 -0.684788 -0.106005 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.47845 -0.662492 -0.105354 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.484862 -0.678699 -0.122844 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.480953 -0.704854 -0.10004 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.497955 -0.698765 -0.116879 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.504637 -0.702624 -0.093424 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.560805 -0.676727 -0.177765 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.57563 -0.689897 -0.192477 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.585222 -0.673115 -0.177114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.575587 -0.693998 -0.168128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.551213 -0.693509 -0.193128 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.55117 -0.69761 -0.16878 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.536388 -0.680339 -0.178416 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.560848 -0.672626 -0.202114 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.546023 -0.659456 -0.187402 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.57044 -0.655844 -0.186751 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.498776 -0.640408 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.478525 -0.627785 -0.166213 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.484234 -0.630799 -0.142381 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.497935 -0.615951 -0.156576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.493066 -0.637394 -0.183703 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.512476 -0.62556 -0.174066 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.513317 -0.650016 -0.17736 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.479365 -0.652241 -0.169507 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.499616 -0.664864 -0.163165 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.485075 -0.655255 -0.145675 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.561576 -0.602915 -0.171592 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.570049 -0.602201 -0.194773 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.582252 -0.615021 -0.177557 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.560414 -0.623084 -0.185788 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.549372 -0.590095 -0.188808 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539737 -0.610978 -0.179823 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.540899 -0.590808 -0.165627 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.571211 -0.582032 -0.180578 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.562738 -0.582745 -0.157397 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.583414 -0.594852 -0.163362 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.335322 -0.607487 -0.111111 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.283164 -0.659645 -0.104315 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.269894 -0.672915 -0.0882695 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.293281 -0.666987 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275822 -0.649528 -0.0830215 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.259777 -0.665573 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.265705 -0.642185 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273047 -0.652302 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.277236 -0.683032 -0.109563 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.290507 -0.669762 -0.125608 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.300624 -0.677104 -0.104315 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33883 -0.656357 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.350033 -0.661904 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.362764 -0.65113 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.345639 -0.638325 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.326099 -0.667131 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.321705 -0.643552 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.314897 -0.661584 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.343224 -0.679937 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.332022 -0.674389 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355956 -0.669162 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.286452 -0.603979 -0.0555556 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.280905 -0.592776 -0.0342624 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.304484 -0.59717 -0.0401235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.291679 -0.580045 -0.0524691 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.262872 -0.599585 -0.0496945 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273647 -0.586853 -0.0679012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.26842 -0.610787 -0.0709877 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.275678 -0.61671 -0.0373488 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.281225 -0.627912 -0.058642 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.299257 -0.621104 -0.0432099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.279656 -0.610775 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.256944 -0.602632 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.26347 -0.606749 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.273158 -0.587686 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.27313 -0.606658 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.289344 -0.591712 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.295841 -0.614801 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263442 -0.62572 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.286153 -0.633864 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.269968 -0.629838 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.278768 -0.530773 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298064 -0.539989 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.298064 -0.539989 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263648 -0.545894 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267823 -0.570229 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.263648 -0.545894 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.267823 -0.570229 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.282943 -0.555109 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.331813 -0.558618 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.342108 -0.551527 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.356248 -0.560372 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.341128 -0.575492 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317673 -0.549772 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.316693 -0.573738 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.307378 -0.556863 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.332793 -0.534652 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.322499 -0.541743 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.346933 -0.543497 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.332034 -0.663153 -0.15987 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.340177 -0.685865 -0.165118 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.355123 -0.669651 -0.154009 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.33606 -0.679339 -0.141664 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.317089 -0.679367 -0.170979 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.312971 -0.672841 -0.147525 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.308945 -0.656656 -0.165731 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.336151 -0.669679 -0.183325 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.328008 -0.646968 -0.178077 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.351097 -0.653465 -0.172216 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.384191 -0.610996 -0.166667 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.391282 -0.600701 -0.18796 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.367317 -0.601681 -0.182099 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.382437 -0.586561 -0.169753 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.408157 -0.610016 -0.172528 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399312 -0.595876 -0.154321 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.401066 -0.62031 -0.151235 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.393037 -0.625136 -0.184873 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.385946 -0.635431 -0.16358 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.369071 -0.626116 -0.179012 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 -0.111111 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.412036 -0.664041 -0.111111 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40282 -0.644745 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40282 -0.644745 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396915 -0.679161 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 -0.0864198 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37258 -0.674986 -0.0987654 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396915 -0.679161 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.37258 -0.674986 -0.123457 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.3877 -0.659866 -0.135802 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.471405 -0.471405 -0.222222 RAD 0.0555556 
+   txt002 
+ SPHERE CENTER 0.441164 -0.441164 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.443014 -0.422853 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.449156 -0.418916 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.463412 -0.433171 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.435021 -0.445101 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.455419 -0.455419 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.433171 -0.463412 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.420766 -0.430846 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.418916 -0.449156 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.426908 -0.426908 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.399854 -0.452233 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.383576 -0.43509 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40305 -0.440308 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.406245 -0.428383 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.380381 -0.447015 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.40305 -0.440308 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396659 -0.464158 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.377186 -0.45894 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.393464 -0.476083 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396659 -0.464158 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.452233 -0.399854 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.45894 -0.377186 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.476083 -0.393464 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.464158 -0.396659 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.43509 -0.383576 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.440308 -0.40305 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.428383 -0.406245 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.447015 -0.380381 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.440308 -0.40305 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.464158 -0.396659 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.512714 -0.460336 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.512375 -0.453047 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.493241 -0.465554 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.497443 -0.44229 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.531849 -0.447829 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.516916 -0.437072 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.532187 -0.455118 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.527647 -0.471093 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.527985 -0.478381 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.508512 -0.483599 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.523783 -0.419026 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.538038 -0.404771 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.532513 -0.427756 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.515053 -0.410297 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.529309 -0.396041 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.506323 -0.401567 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.515053 -0.410297 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.546768 -0.4135 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.532513 -0.427756 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.541242 -0.436486 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.542955 -0.490576 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.565623 -0.483869 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.54615 -0.478651 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.549345 -0.466726 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.562428 -0.495794 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.54615 -0.478651 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539759 -0.502501 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.559233 -0.507719 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.536564 -0.514426 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.539759 -0.502501 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.460336 -0.512714 -0.282703 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.461599 -0.535539 -0.292037 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.478381 -0.527985 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.455118 -0.532187 -0.268448 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.443553 -0.520267 -0.299164 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.437072 -0.516916 -0.275576 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.44229 -0.497443 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.466817 -0.516065 -0.306292 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.465554 -0.493241 -0.296959 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.483599 -0.508512 -0.289831 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.490576 -0.542955 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.507719 -0.559233 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.514426 -0.536564 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.502501 -0.539759 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.483869 -0.565623 -0.215094 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.478651 -0.54615 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.466726 -0.549345 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.495794 -0.562428 -0.236478 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.478651 -0.54615 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.502501 -0.539759 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.419026 -0.523783 -0.222222 RAD 0.0185185 
+   txt002 
+ SPHERE CENTER 0.404771 -0.538038 -0.207967 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.427756 -0.532513 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410297 -0.515053 -0.200839 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.396041 -0.529309 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.401567 -0.506323 -0.222222 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.410297 -0.515053 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.4135 -0.546768 -0.22935 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.427756 -0.532513 -0.243606 RAD 0.00617284 
+   txt002 
+ SPHERE CENTER 0.436486 -0.541242 -0.222222 RAD 0.00617284 
+   txt002 
+
+END_SCENE
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/lattice.dat b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/lattice.dat
new file mode 100644 (file)
index 0000000..fc40ed8
--- /dev/null
@@ -0,0 +1,18012 @@
+BEGIN_SCENE
+  OUTFILE /dev/null
+  RESOLUTION 512 512 
+  VERBOSE 0
+
+CAMERA
+  ZOOM 1.0
+  ASPECTRATIO 1.0
+  ANTIALIASING 0
+  RAYDEPTH 8
+  CENTER 0.5625 1 0.9375
+  VIEWDIR 0 -0.707107 -0.707107
+  UPDIR 0.272166 0.680414 -0.680414
+
+END_CAMERA 
+
+LIGHT CENTER 2 0.5 0.5 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER -1 0.5 0.5 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 0.5 2 0.5 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 0.5 -1 0.5 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 0.5 0.5 2 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 0.5 0.5 -1 RAD 0.002 COLOR 0.5 0.5 0.5
+
+TEXDEF txt001 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0 0 RAD 0.03125 
+   txt001 
+TEXDEF txt002 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0 0 APEX 0.109531 0 0 RAD 0.0078125
+   txt002 
+TEXDEF txt003 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.0154687 0 APEX 0 0.109531 0 RAD 0.0078125
+   txt003 
+TEXDEF txt004 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0 0.0154687 APEX 0 0 0.109531 RAD 0.0078125
+   txt004 
+TEXDEF txt005 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0 0.125 RAD 0.03125 
+   txt005 
+TEXDEF txt006 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0 0.125 APEX 0.109531 0 0.125 RAD 0.0078125
+   txt006 
+TEXDEF txt007 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.0154687 0.125 APEX 0 0.109531 0.125 RAD 0.0078125
+   txt007 
+TEXDEF txt008 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0 0.140469 APEX 0 0 0.234531 RAD 0.0078125
+   txt008 
+TEXDEF txt009 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0 0.25 RAD 0.03125 
+   txt009 
+TEXDEF txt010 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0 0.25 APEX 0.109531 0 0.25 RAD 0.0078125
+   txt010 
+TEXDEF txt011 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.0154687 0.25 APEX 0 0.109531 0.25 RAD 0.0078125
+   txt011 
+TEXDEF txt012 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0 0.265469 APEX 0 0 0.359531 RAD 0.0078125
+   txt012 
+TEXDEF txt013 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0 0.375 RAD 0.03125 
+   txt013 
+TEXDEF txt014 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0 0.375 APEX 0.109531 0 0.375 RAD 0.0078125
+   txt014 
+TEXDEF txt015 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.0154687 0.375 APEX 0 0.109531 0.375 RAD 0.0078125
+   txt015 
+TEXDEF txt016 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0 0.390469 APEX 0 0 0.484531 RAD 0.0078125
+   txt016 
+TEXDEF txt017 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0 0.5 RAD 0.03125 
+   txt017 
+TEXDEF txt018 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0 0.5 APEX 0.109531 0 0.5 RAD 0.0078125
+   txt018 
+TEXDEF txt019 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.0154687 0.5 APEX 0 0.109531 0.5 RAD 0.0078125
+   txt019 
+TEXDEF txt020 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0 0.515469 APEX 0 0 0.609531 RAD 0.0078125
+   txt020 
+TEXDEF txt021 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0 0.625 RAD 0.03125 
+   txt021 
+TEXDEF txt022 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0 0.625 APEX 0.109531 0 0.625 RAD 0.0078125
+   txt022 
+TEXDEF txt023 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.0154687 0.625 APEX 0 0.109531 0.625 RAD 0.0078125
+   txt023 
+TEXDEF txt024 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0 0.640469 APEX 0 0 0.734531 RAD 0.0078125
+   txt024 
+TEXDEF txt025 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0 0.75 RAD 0.03125 
+   txt025 
+TEXDEF txt026 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0 0.75 APEX 0.109531 0 0.75 RAD 0.0078125
+   txt026 
+TEXDEF txt027 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.0154687 0.75 APEX 0 0.109531 0.75 RAD 0.0078125
+   txt027 
+TEXDEF txt028 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0 0.765469 APEX 0 0 0.859531 RAD 0.0078125
+   txt028 
+TEXDEF txt029 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0 0.875 RAD 0.03125 
+   txt029 
+TEXDEF txt030 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0 0.875 APEX 0.109531 0 0.875 RAD 0.0078125
+   txt030 
+TEXDEF txt031 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.0154687 0.875 APEX 0 0.109531 0.875 RAD 0.0078125
+   txt031 
+TEXDEF txt032 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0 0.890469 APEX 0 0 0.984531 RAD 0.0078125
+   txt032 
+TEXDEF txt033 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0 1 RAD 0.03125 
+   txt033 
+TEXDEF txt034 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0 1 APEX 0.109531 0 1 RAD 0.0078125
+   txt034 
+TEXDEF txt035 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.0154687 1 APEX 0 0.109531 1 RAD 0.0078125
+   txt035 
+TEXDEF txt036 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.125 0 RAD 0.03125 
+   txt036 
+TEXDEF txt037 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.125 0 APEX 0.109531 0.125 0 RAD 0.0078125
+   txt037 
+TEXDEF txt038 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.140469 0 APEX 0 0.234531 0 RAD 0.0078125
+   txt038 
+TEXDEF txt039 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.125 0.0154687 APEX 0 0.125 0.109531 RAD 0.0078125
+   txt039 
+TEXDEF txt040 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.125 0.125 RAD 0.03125 
+   txt040 
+TEXDEF txt041 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.125 APEX 0.109531 0.125 0.125 RAD 0.0078125
+   txt041 
+TEXDEF txt042 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.140469 0.125 APEX 0 0.234531 0.125 RAD 0.0078125
+   txt042 
+TEXDEF txt043 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.125 0.140469 APEX 0 0.125 0.234531 RAD 0.0078125
+   txt043 
+TEXDEF txt044 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.125 0.25 RAD 0.03125 
+   txt044 
+TEXDEF txt045 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.25 APEX 0.109531 0.125 0.25 RAD 0.0078125
+   txt045 
+TEXDEF txt046 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.140469 0.25 APEX 0 0.234531 0.25 RAD 0.0078125
+   txt046 
+TEXDEF txt047 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.125 0.265469 APEX 0 0.125 0.359531 RAD 0.0078125
+   txt047 
+TEXDEF txt048 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.125 0.375 RAD 0.03125 
+   txt048 
+TEXDEF txt049 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.375 APEX 0.109531 0.125 0.375 RAD 0.0078125
+   txt049 
+TEXDEF txt050 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.140469 0.375 APEX 0 0.234531 0.375 RAD 0.0078125
+   txt050 
+TEXDEF txt051 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.125 0.390469 APEX 0 0.125 0.484531 RAD 0.0078125
+   txt051 
+TEXDEF txt052 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.125 0.5 RAD 0.03125 
+   txt052 
+TEXDEF txt053 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.5 APEX 0.109531 0.125 0.5 RAD 0.0078125
+   txt053 
+TEXDEF txt054 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.140469 0.5 APEX 0 0.234531 0.5 RAD 0.0078125
+   txt054 
+TEXDEF txt055 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.125 0.515469 APEX 0 0.125 0.609531 RAD 0.0078125
+   txt055 
+TEXDEF txt056 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.125 0.625 RAD 0.03125 
+   txt056 
+TEXDEF txt057 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.625 APEX 0.109531 0.125 0.625 RAD 0.0078125
+   txt057 
+TEXDEF txt058 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.140469 0.625 APEX 0 0.234531 0.625 RAD 0.0078125
+   txt058 
+TEXDEF txt059 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.125 0.640469 APEX 0 0.125 0.734531 RAD 0.0078125
+   txt059 
+TEXDEF txt060 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.125 0.75 RAD 0.03125 
+   txt060 
+TEXDEF txt061 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.75 APEX 0.109531 0.125 0.75 RAD 0.0078125
+   txt061 
+TEXDEF txt062 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.140469 0.75 APEX 0 0.234531 0.75 RAD 0.0078125
+   txt062 
+TEXDEF txt063 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.125 0.765469 APEX 0 0.125 0.859531 RAD 0.0078125
+   txt063 
+TEXDEF txt064 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.125 0.875 RAD 0.03125 
+   txt064 
+TEXDEF txt065 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.875 APEX 0.109531 0.125 0.875 RAD 0.0078125
+   txt065 
+TEXDEF txt066 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.140469 0.875 APEX 0 0.234531 0.875 RAD 0.0078125
+   txt066 
+TEXDEF txt067 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.125 0.890469 APEX 0 0.125 0.984531 RAD 0.0078125
+   txt067 
+TEXDEF txt068 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.125 1 RAD 0.03125 
+   txt068 
+TEXDEF txt069 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.125 1 APEX 0.109531 0.125 1 RAD 0.0078125
+   txt069 
+TEXDEF txt070 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.140469 1 APEX 0 0.234531 1 RAD 0.0078125
+   txt070 
+TEXDEF txt071 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.25 0 RAD 0.03125 
+   txt071 
+TEXDEF txt072 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.25 0 APEX 0.109531 0.25 0 RAD 0.0078125
+   txt072 
+TEXDEF txt073 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.265469 0 APEX 0 0.359531 0 RAD 0.0078125
+   txt073 
+TEXDEF txt074 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.25 0.0154687 APEX 0 0.25 0.109531 RAD 0.0078125
+   txt074 
+TEXDEF txt075 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.25 0.125 RAD 0.03125 
+   txt075 
+TEXDEF txt076 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.125 APEX 0.109531 0.25 0.125 RAD 0.0078125
+   txt076 
+TEXDEF txt077 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.265469 0.125 APEX 0 0.359531 0.125 RAD 0.0078125
+   txt077 
+TEXDEF txt078 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.25 0.140469 APEX 0 0.25 0.234531 RAD 0.0078125
+   txt078 
+TEXDEF txt079 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.25 0.25 RAD 0.03125 
+   txt079 
+TEXDEF txt080 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.25 APEX 0.109531 0.25 0.25 RAD 0.0078125
+   txt080 
+TEXDEF txt081 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.265469 0.25 APEX 0 0.359531 0.25 RAD 0.0078125
+   txt081 
+TEXDEF txt082 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.25 0.265469 APEX 0 0.25 0.359531 RAD 0.0078125
+   txt082 
+TEXDEF txt083 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.25 0.375 RAD 0.03125 
+   txt083 
+TEXDEF txt084 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.375 APEX 0.109531 0.25 0.375 RAD 0.0078125
+   txt084 
+TEXDEF txt085 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.265469 0.375 APEX 0 0.359531 0.375 RAD 0.0078125
+   txt085 
+TEXDEF txt086 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.25 0.390469 APEX 0 0.25 0.484531 RAD 0.0078125
+   txt086 
+TEXDEF txt087 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.25 0.5 RAD 0.03125 
+   txt087 
+TEXDEF txt088 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.5 APEX 0.109531 0.25 0.5 RAD 0.0078125
+   txt088 
+TEXDEF txt089 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.265469 0.5 APEX 0 0.359531 0.5 RAD 0.0078125
+   txt089 
+TEXDEF txt090 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.25 0.515469 APEX 0 0.25 0.609531 RAD 0.0078125
+   txt090 
+TEXDEF txt091 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.25 0.625 RAD 0.03125 
+   txt091 
+TEXDEF txt092 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.625 APEX 0.109531 0.25 0.625 RAD 0.0078125
+   txt092 
+TEXDEF txt093 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.265469 0.625 APEX 0 0.359531 0.625 RAD 0.0078125
+   txt093 
+TEXDEF txt094 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.25 0.640469 APEX 0 0.25 0.734531 RAD 0.0078125
+   txt094 
+TEXDEF txt095 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.25 0.75 RAD 0.03125 
+   txt095 
+TEXDEF txt096 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.75 APEX 0.109531 0.25 0.75 RAD 0.0078125
+   txt096 
+TEXDEF txt097 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.265469 0.75 APEX 0 0.359531 0.75 RAD 0.0078125
+   txt097 
+TEXDEF txt098 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.25 0.765469 APEX 0 0.25 0.859531 RAD 0.0078125
+   txt098 
+TEXDEF txt099 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.25 0.875 RAD 0.03125 
+   txt099 
+TEXDEF txt100 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.875 APEX 0.109531 0.25 0.875 RAD 0.0078125
+   txt100 
+TEXDEF txt101 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.265469 0.875 APEX 0 0.359531 0.875 RAD 0.0078125
+   txt101 
+TEXDEF txt102 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.25 0.890469 APEX 0 0.25 0.984531 RAD 0.0078125
+   txt102 
+TEXDEF txt103 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.25 1 RAD 0.03125 
+   txt103 
+TEXDEF txt104 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.25 1 APEX 0.109531 0.25 1 RAD 0.0078125
+   txt104 
+TEXDEF txt105 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.265469 1 APEX 0 0.359531 1 RAD 0.0078125
+   txt105 
+TEXDEF txt106 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.375 0 RAD 0.03125 
+   txt106 
+TEXDEF txt107 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.375 0 APEX 0.109531 0.375 0 RAD 0.0078125
+   txt107 
+TEXDEF txt108 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.390469 0 APEX 0 0.484531 0 RAD 0.0078125
+   txt108 
+TEXDEF txt109 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.375 0.0154687 APEX 0 0.375 0.109531 RAD 0.0078125
+   txt109 
+TEXDEF txt110 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.375 0.125 RAD 0.03125 
+   txt110 
+TEXDEF txt111 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.125 APEX 0.109531 0.375 0.125 RAD 0.0078125
+   txt111 
+TEXDEF txt112 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.390469 0.125 APEX 0 0.484531 0.125 RAD 0.0078125
+   txt112 
+TEXDEF txt113 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.375 0.140469 APEX 0 0.375 0.234531 RAD 0.0078125
+   txt113 
+TEXDEF txt114 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.375 0.25 RAD 0.03125 
+   txt114 
+TEXDEF txt115 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.25 APEX 0.109531 0.375 0.25 RAD 0.0078125
+   txt115 
+TEXDEF txt116 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.390469 0.25 APEX 0 0.484531 0.25 RAD 0.0078125
+   txt116 
+TEXDEF txt117 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.375 0.265469 APEX 0 0.375 0.359531 RAD 0.0078125
+   txt117 
+TEXDEF txt118 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.375 0.375 RAD 0.03125 
+   txt118 
+TEXDEF txt119 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.375 APEX 0.109531 0.375 0.375 RAD 0.0078125
+   txt119 
+TEXDEF txt120 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.390469 0.375 APEX 0 0.484531 0.375 RAD 0.0078125
+   txt120 
+TEXDEF txt121 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.375 0.390469 APEX 0 0.375 0.484531 RAD 0.0078125
+   txt121 
+TEXDEF txt122 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.375 0.5 RAD 0.03125 
+   txt122 
+TEXDEF txt123 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.5 APEX 0.109531 0.375 0.5 RAD 0.0078125
+   txt123 
+TEXDEF txt124 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.390469 0.5 APEX 0 0.484531 0.5 RAD 0.0078125
+   txt124 
+TEXDEF txt125 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.375 0.515469 APEX 0 0.375 0.609531 RAD 0.0078125
+   txt125 
+TEXDEF txt126 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.375 0.625 RAD 0.03125 
+   txt126 
+TEXDEF txt127 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.625 APEX 0.109531 0.375 0.625 RAD 0.0078125
+   txt127 
+TEXDEF txt128 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.390469 0.625 APEX 0 0.484531 0.625 RAD 0.0078125
+   txt128 
+TEXDEF txt129 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.375 0.640469 APEX 0 0.375 0.734531 RAD 0.0078125
+   txt129 
+TEXDEF txt130 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.375 0.75 RAD 0.03125 
+   txt130 
+TEXDEF txt131 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.75 APEX 0.109531 0.375 0.75 RAD 0.0078125
+   txt131 
+TEXDEF txt132 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.390469 0.75 APEX 0 0.484531 0.75 RAD 0.0078125
+   txt132 
+TEXDEF txt133 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.375 0.765469 APEX 0 0.375 0.859531 RAD 0.0078125
+   txt133 
+TEXDEF txt134 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.375 0.875 RAD 0.03125 
+   txt134 
+TEXDEF txt135 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.875 APEX 0.109531 0.375 0.875 RAD 0.0078125
+   txt135 
+TEXDEF txt136 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.390469 0.875 APEX 0 0.484531 0.875 RAD 0.0078125
+   txt136 
+TEXDEF txt137 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.375 0.890469 APEX 0 0.375 0.984531 RAD 0.0078125
+   txt137 
+TEXDEF txt138 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.375 1 RAD 0.03125 
+   txt138 
+TEXDEF txt139 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.375 1 APEX 0.109531 0.375 1 RAD 0.0078125
+   txt139 
+TEXDEF txt140 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.390469 1 APEX 0 0.484531 1 RAD 0.0078125
+   txt140 
+TEXDEF txt141 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.5 0 RAD 0.03125 
+   txt141 
+TEXDEF txt142 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.5 0 APEX 0.109531 0.5 0 RAD 0.0078125
+   txt142 
+TEXDEF txt143 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.515469 0 APEX 0 0.609531 0 RAD 0.0078125
+   txt143 
+TEXDEF txt144 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.5 0.0154687 APEX 0 0.5 0.109531 RAD 0.0078125
+   txt144 
+TEXDEF txt145 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.5 0.125 RAD 0.03125 
+   txt145 
+TEXDEF txt146 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.125 APEX 0.109531 0.5 0.125 RAD 0.0078125
+   txt146 
+TEXDEF txt147 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.515469 0.125 APEX 0 0.609531 0.125 RAD 0.0078125
+   txt147 
+TEXDEF txt148 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.5 0.140469 APEX 0 0.5 0.234531 RAD 0.0078125
+   txt148 
+TEXDEF txt149 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.5 0.25 RAD 0.03125 
+   txt149 
+TEXDEF txt150 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.25 APEX 0.109531 0.5 0.25 RAD 0.0078125
+   txt150 
+TEXDEF txt151 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.515469 0.25 APEX 0 0.609531 0.25 RAD 0.0078125
+   txt151 
+TEXDEF txt152 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.5 0.265469 APEX 0 0.5 0.359531 RAD 0.0078125
+   txt152 
+TEXDEF txt153 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.5 0.375 RAD 0.03125 
+   txt153 
+TEXDEF txt154 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.375 APEX 0.109531 0.5 0.375 RAD 0.0078125
+   txt154 
+TEXDEF txt155 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.515469 0.375 APEX 0 0.609531 0.375 RAD 0.0078125
+   txt155 
+TEXDEF txt156 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.5 0.390469 APEX 0 0.5 0.484531 RAD 0.0078125
+   txt156 
+TEXDEF txt157 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.5 0.5 RAD 0.03125 
+   txt157 
+TEXDEF txt158 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.5 APEX 0.109531 0.5 0.5 RAD 0.0078125
+   txt158 
+TEXDEF txt159 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.515469 0.5 APEX 0 0.609531 0.5 RAD 0.0078125
+   txt159 
+TEXDEF txt160 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.5 0.515469 APEX 0 0.5 0.609531 RAD 0.0078125
+   txt160 
+TEXDEF txt161 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.5 0.625 RAD 0.03125 
+   txt161 
+TEXDEF txt162 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.625 APEX 0.109531 0.5 0.625 RAD 0.0078125
+   txt162 
+TEXDEF txt163 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.515469 0.625 APEX 0 0.609531 0.625 RAD 0.0078125
+   txt163 
+TEXDEF txt164 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.5 0.640469 APEX 0 0.5 0.734531 RAD 0.0078125
+   txt164 
+TEXDEF txt165 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.5 0.75 RAD 0.03125 
+   txt165 
+TEXDEF txt166 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.75 APEX 0.109531 0.5 0.75 RAD 0.0078125
+   txt166 
+TEXDEF txt167 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.515469 0.75 APEX 0 0.609531 0.75 RAD 0.0078125
+   txt167 
+TEXDEF txt168 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.5 0.765469 APEX 0 0.5 0.859531 RAD 0.0078125
+   txt168 
+TEXDEF txt169 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.5 0.875 RAD 0.03125 
+   txt169 
+TEXDEF txt170 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.875 APEX 0.109531 0.5 0.875 RAD 0.0078125
+   txt170 
+TEXDEF txt171 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.515469 0.875 APEX 0 0.609531 0.875 RAD 0.0078125
+   txt171 
+TEXDEF txt172 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.5 0.890469 APEX 0 0.5 0.984531 RAD 0.0078125
+   txt172 
+TEXDEF txt173 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.5 1 RAD 0.03125 
+   txt173 
+TEXDEF txt174 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.5 1 APEX 0.109531 0.5 1 RAD 0.0078125
+   txt174 
+TEXDEF txt175 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.515469 1 APEX 0 0.609531 1 RAD 0.0078125
+   txt175 
+TEXDEF txt176 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.625 0 RAD 0.03125 
+   txt176 
+TEXDEF txt177 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.625 0 APEX 0.109531 0.625 0 RAD 0.0078125
+   txt177 
+TEXDEF txt178 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.640469 0 APEX 0 0.734531 0 RAD 0.0078125
+   txt178 
+TEXDEF txt179 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.625 0.0154687 APEX 0 0.625 0.109531 RAD 0.0078125
+   txt179 
+TEXDEF txt180 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.625 0.125 RAD 0.03125 
+   txt180 
+TEXDEF txt181 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.125 APEX 0.109531 0.625 0.125 RAD 0.0078125
+   txt181 
+TEXDEF txt182 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.640469 0.125 APEX 0 0.734531 0.125 RAD 0.0078125
+   txt182 
+TEXDEF txt183 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.625 0.140469 APEX 0 0.625 0.234531 RAD 0.0078125
+   txt183 
+TEXDEF txt184 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.625 0.25 RAD 0.03125 
+   txt184 
+TEXDEF txt185 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.25 APEX 0.109531 0.625 0.25 RAD 0.0078125
+   txt185 
+TEXDEF txt186 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.640469 0.25 APEX 0 0.734531 0.25 RAD 0.0078125
+   txt186 
+TEXDEF txt187 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.625 0.265469 APEX 0 0.625 0.359531 RAD 0.0078125
+   txt187 
+TEXDEF txt188 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.625 0.375 RAD 0.03125 
+   txt188 
+TEXDEF txt189 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.375 APEX 0.109531 0.625 0.375 RAD 0.0078125
+   txt189 
+TEXDEF txt190 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.640469 0.375 APEX 0 0.734531 0.375 RAD 0.0078125
+   txt190 
+TEXDEF txt191 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.625 0.390469 APEX 0 0.625 0.484531 RAD 0.0078125
+   txt191 
+TEXDEF txt192 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.625 0.5 RAD 0.03125 
+   txt192 
+TEXDEF txt193 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.5 APEX 0.109531 0.625 0.5 RAD 0.0078125
+   txt193 
+TEXDEF txt194 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.640469 0.5 APEX 0 0.734531 0.5 RAD 0.0078125
+   txt194 
+TEXDEF txt195 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.625 0.515469 APEX 0 0.625 0.609531 RAD 0.0078125
+   txt195 
+TEXDEF txt196 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.625 0.625 RAD 0.03125 
+   txt196 
+TEXDEF txt197 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.625 APEX 0.109531 0.625 0.625 RAD 0.0078125
+   txt197 
+TEXDEF txt198 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.640469 0.625 APEX 0 0.734531 0.625 RAD 0.0078125
+   txt198 
+TEXDEF txt199 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.625 0.640469 APEX 0 0.625 0.734531 RAD 0.0078125
+   txt199 
+TEXDEF txt200 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.625 0.75 RAD 0.03125 
+   txt200 
+TEXDEF txt201 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.75 APEX 0.109531 0.625 0.75 RAD 0.0078125
+   txt201 
+TEXDEF txt202 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.640469 0.75 APEX 0 0.734531 0.75 RAD 0.0078125
+   txt202 
+TEXDEF txt203 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.625 0.765469 APEX 0 0.625 0.859531 RAD 0.0078125
+   txt203 
+TEXDEF txt204 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.625 0.875 RAD 0.03125 
+   txt204 
+TEXDEF txt205 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.875 APEX 0.109531 0.625 0.875 RAD 0.0078125
+   txt205 
+TEXDEF txt206 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.640469 0.875 APEX 0 0.734531 0.875 RAD 0.0078125
+   txt206 
+TEXDEF txt207 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.625 0.890469 APEX 0 0.625 0.984531 RAD 0.0078125
+   txt207 
+TEXDEF txt208 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.625 1 RAD 0.03125 
+   txt208 
+TEXDEF txt209 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.625 1 APEX 0.109531 0.625 1 RAD 0.0078125
+   txt209 
+TEXDEF txt210 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.640469 1 APEX 0 0.734531 1 RAD 0.0078125
+   txt210 
+TEXDEF txt211 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.75 0 RAD 0.03125 
+   txt211 
+TEXDEF txt212 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.75 0 APEX 0.109531 0.75 0 RAD 0.0078125
+   txt212 
+TEXDEF txt213 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.765469 0 APEX 0 0.859531 0 RAD 0.0078125
+   txt213 
+TEXDEF txt214 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.75 0.0154687 APEX 0 0.75 0.109531 RAD 0.0078125
+   txt214 
+TEXDEF txt215 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.75 0.125 RAD 0.03125 
+   txt215 
+TEXDEF txt216 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.125 APEX 0.109531 0.75 0.125 RAD 0.0078125
+   txt216 
+TEXDEF txt217 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.765469 0.125 APEX 0 0.859531 0.125 RAD 0.0078125
+   txt217 
+TEXDEF txt218 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.75 0.140469 APEX 0 0.75 0.234531 RAD 0.0078125
+   txt218 
+TEXDEF txt219 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.75 0.25 RAD 0.03125 
+   txt219 
+TEXDEF txt220 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.25 APEX 0.109531 0.75 0.25 RAD 0.0078125
+   txt220 
+TEXDEF txt221 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.765469 0.25 APEX 0 0.859531 0.25 RAD 0.0078125
+   txt221 
+TEXDEF txt222 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.75 0.265469 APEX 0 0.75 0.359531 RAD 0.0078125
+   txt222 
+TEXDEF txt223 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.75 0.375 RAD 0.03125 
+   txt223 
+TEXDEF txt224 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.375 APEX 0.109531 0.75 0.375 RAD 0.0078125
+   txt224 
+TEXDEF txt225 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.765469 0.375 APEX 0 0.859531 0.375 RAD 0.0078125
+   txt225 
+TEXDEF txt226 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.75 0.390469 APEX 0 0.75 0.484531 RAD 0.0078125
+   txt226 
+TEXDEF txt227 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.75 0.5 RAD 0.03125 
+   txt227 
+TEXDEF txt228 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.5 APEX 0.109531 0.75 0.5 RAD 0.0078125
+   txt228 
+TEXDEF txt229 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.765469 0.5 APEX 0 0.859531 0.5 RAD 0.0078125
+   txt229 
+TEXDEF txt230 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.75 0.515469 APEX 0 0.75 0.609531 RAD 0.0078125
+   txt230 
+TEXDEF txt231 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.75 0.625 RAD 0.03125 
+   txt231 
+TEXDEF txt232 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.625 APEX 0.109531 0.75 0.625 RAD 0.0078125
+   txt232 
+TEXDEF txt233 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.765469 0.625 APEX 0 0.859531 0.625 RAD 0.0078125
+   txt233 
+TEXDEF txt234 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.75 0.640469 APEX 0 0.75 0.734531 RAD 0.0078125
+   txt234 
+TEXDEF txt235 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.75 0.75 RAD 0.03125 
+   txt235 
+TEXDEF txt236 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.75 APEX 0.109531 0.75 0.75 RAD 0.0078125
+   txt236 
+TEXDEF txt237 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.765469 0.75 APEX 0 0.859531 0.75 RAD 0.0078125
+   txt237 
+TEXDEF txt238 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.75 0.765469 APEX 0 0.75 0.859531 RAD 0.0078125
+   txt238 
+TEXDEF txt239 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.75 0.875 RAD 0.03125 
+   txt239 
+TEXDEF txt240 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.875 APEX 0.109531 0.75 0.875 RAD 0.0078125
+   txt240 
+TEXDEF txt241 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.765469 0.875 APEX 0 0.859531 0.875 RAD 0.0078125
+   txt241 
+TEXDEF txt242 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.75 0.890469 APEX 0 0.75 0.984531 RAD 0.0078125
+   txt242 
+TEXDEF txt243 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.75 1 RAD 0.03125 
+   txt243 
+TEXDEF txt244 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.75 1 APEX 0.109531 0.75 1 RAD 0.0078125
+   txt244 
+TEXDEF txt245 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.765469 1 APEX 0 0.859531 1 RAD 0.0078125
+   txt245 
+TEXDEF txt246 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.875 0 RAD 0.03125 
+   txt246 
+TEXDEF txt247 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.875 0 APEX 0.109531 0.875 0 RAD 0.0078125
+   txt247 
+TEXDEF txt248 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.890469 0 APEX 0 0.984531 0 RAD 0.0078125
+   txt248 
+TEXDEF txt249 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.875 0.0154687 APEX 0 0.875 0.109531 RAD 0.0078125
+   txt249 
+TEXDEF txt250 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.875 0.125 RAD 0.03125 
+   txt250 
+TEXDEF txt251 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.125 APEX 0.109531 0.875 0.125 RAD 0.0078125
+   txt251 
+TEXDEF txt252 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.890469 0.125 APEX 0 0.984531 0.125 RAD 0.0078125
+   txt252 
+TEXDEF txt253 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.875 0.140469 APEX 0 0.875 0.234531 RAD 0.0078125
+   txt253 
+TEXDEF txt254 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.875 0.25 RAD 0.03125 
+   txt254 
+TEXDEF txt255 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.25 APEX 0.109531 0.875 0.25 RAD 0.0078125
+   txt255 
+TEXDEF txt256 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.890469 0.25 APEX 0 0.984531 0.25 RAD 0.0078125
+   txt256 
+TEXDEF txt257 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.875 0.265469 APEX 0 0.875 0.359531 RAD 0.0078125
+   txt257 
+TEXDEF txt258 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.875 0.375 RAD 0.03125 
+   txt258 
+TEXDEF txt259 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.375 APEX 0.109531 0.875 0.375 RAD 0.0078125
+   txt259 
+TEXDEF txt260 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.890469 0.375 APEX 0 0.984531 0.375 RAD 0.0078125
+   txt260 
+TEXDEF txt261 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.875 0.390469 APEX 0 0.875 0.484531 RAD 0.0078125
+   txt261 
+TEXDEF txt262 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.875 0.5 RAD 0.03125 
+   txt262 
+TEXDEF txt263 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.5 APEX 0.109531 0.875 0.5 RAD 0.0078125
+   txt263 
+TEXDEF txt264 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.890469 0.5 APEX 0 0.984531 0.5 RAD 0.0078125
+   txt264 
+TEXDEF txt265 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.875 0.515469 APEX 0 0.875 0.609531 RAD 0.0078125
+   txt265 
+TEXDEF txt266 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.875 0.625 RAD 0.03125 
+   txt266 
+TEXDEF txt267 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.625 APEX 0.109531 0.875 0.625 RAD 0.0078125
+   txt267 
+TEXDEF txt268 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.890469 0.625 APEX 0 0.984531 0.625 RAD 0.0078125
+   txt268 
+TEXDEF txt269 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.875 0.640469 APEX 0 0.875 0.734531 RAD 0.0078125
+   txt269 
+TEXDEF txt270 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.875 0.75 RAD 0.03125 
+   txt270 
+TEXDEF txt271 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.75 APEX 0.109531 0.875 0.75 RAD 0.0078125
+   txt271 
+TEXDEF txt272 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.890469 0.75 APEX 0 0.984531 0.75 RAD 0.0078125
+   txt272 
+TEXDEF txt273 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.875 0.765469 APEX 0 0.875 0.859531 RAD 0.0078125
+   txt273 
+TEXDEF txt274 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.875 0.875 RAD 0.03125 
+   txt274 
+TEXDEF txt275 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.875 APEX 0.109531 0.875 0.875 RAD 0.0078125
+   txt275 
+TEXDEF txt276 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.890469 0.875 APEX 0 0.984531 0.875 RAD 0.0078125
+   txt276 
+TEXDEF txt277 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.875 0.890469 APEX 0 0.875 0.984531 RAD 0.0078125
+   txt277 
+TEXDEF txt278 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 0.875 1 RAD 0.03125 
+   txt278 
+TEXDEF txt279 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 0.875 1 APEX 0.109531 0.875 1 RAD 0.0078125
+   txt279 
+TEXDEF txt280 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 0.890469 1 APEX 0 0.984531 1 RAD 0.0078125
+   txt280 
+TEXDEF txt281 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 1 0 RAD 0.03125 
+   txt281 
+TEXDEF txt282 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 1 0 APEX 0.109531 1 0 RAD 0.0078125
+   txt282 
+TEXDEF txt283 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 1 0.0154687 APEX 0 1 0.109531 RAD 0.0078125
+   txt283 
+TEXDEF txt284 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 1 0.125 RAD 0.03125 
+   txt284 
+TEXDEF txt285 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 1 0.125 APEX 0.109531 1 0.125 RAD 0.0078125
+   txt285 
+TEXDEF txt286 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 1 0.140469 APEX 0 1 0.234531 RAD 0.0078125
+   txt286 
+TEXDEF txt287 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 1 0.25 RAD 0.03125 
+   txt287 
+TEXDEF txt288 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 1 0.25 APEX 0.109531 1 0.25 RAD 0.0078125
+   txt288 
+TEXDEF txt289 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 1 0.265469 APEX 0 1 0.359531 RAD 0.0078125
+   txt289 
+TEXDEF txt290 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 1 0.375 RAD 0.03125 
+   txt290 
+TEXDEF txt291 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 1 0.375 APEX 0.109531 1 0.375 RAD 0.0078125
+   txt291 
+TEXDEF txt292 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 1 0.390469 APEX 0 1 0.484531 RAD 0.0078125
+   txt292 
+TEXDEF txt293 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 1 0.5 RAD 0.03125 
+   txt293 
+TEXDEF txt294 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 1 0.5 APEX 0.109531 1 0.5 RAD 0.0078125
+   txt294 
+TEXDEF txt295 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 1 0.515469 APEX 0 1 0.609531 RAD 0.0078125
+   txt295 
+TEXDEF txt296 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 1 0.625 RAD 0.03125 
+   txt296 
+TEXDEF txt297 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 1 0.625 APEX 0.109531 1 0.625 RAD 0.0078125
+   txt297 
+TEXDEF txt298 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 1 0.640469 APEX 0 1 0.734531 RAD 0.0078125
+   txt298 
+TEXDEF txt299 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 1 0.75 RAD 0.03125 
+   txt299 
+TEXDEF txt300 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 1 0.75 APEX 0.109531 1 0.75 RAD 0.0078125
+   txt300 
+TEXDEF txt301 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 1 0.765469 APEX 0 1 0.859531 RAD 0.0078125
+   txt301 
+TEXDEF txt302 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 1 0.875 RAD 0.03125 
+   txt302 
+TEXDEF txt303 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 1 0.875 APEX 0.109531 1 0.875 RAD 0.0078125
+   txt303 
+TEXDEF txt304 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0 1 0.890469 APEX 0 1 0.984531 RAD 0.0078125
+   txt304 
+TEXDEF txt305 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0 1 1 RAD 0.03125 
+   txt305 
+TEXDEF txt306 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.0154687 1 1 APEX 0.109531 1 1 RAD 0.0078125
+   txt306 
+TEXDEF txt307 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0 0 RAD 0.03125 
+   txt307 
+TEXDEF txt308 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0 0 APEX 0.234531 0 0 RAD 0.0078125
+   txt308 
+TEXDEF txt309 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.0154687 0 APEX 0.125 0.109531 0 RAD 0.0078125
+   txt309 
+TEXDEF txt310 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0 0.0154687 APEX 0.125 0 0.109531 RAD 0.0078125
+   txt310 
+TEXDEF txt311 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0 0.125 RAD 0.03125 
+   txt311 
+TEXDEF txt312 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0 0.125 APEX 0.234531 0 0.125 RAD 0.0078125
+   txt312 
+TEXDEF txt313 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.125 APEX 0.125 0.109531 0.125 RAD 0.0078125
+   txt313 
+TEXDEF txt314 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0 0.140469 APEX 0.125 0 0.234531 RAD 0.0078125
+   txt314 
+TEXDEF txt315 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0 0.25 RAD 0.03125 
+   txt315 
+TEXDEF txt316 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0 0.25 APEX 0.234531 0 0.25 RAD 0.0078125
+   txt316 
+TEXDEF txt317 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.25 APEX 0.125 0.109531 0.25 RAD 0.0078125
+   txt317 
+TEXDEF txt318 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0 0.265469 APEX 0.125 0 0.359531 RAD 0.0078125
+   txt318 
+TEXDEF txt319 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0 0.375 RAD 0.03125 
+   txt319 
+TEXDEF txt320 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0 0.375 APEX 0.234531 0 0.375 RAD 0.0078125
+   txt320 
+TEXDEF txt321 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.375 APEX 0.125 0.109531 0.375 RAD 0.0078125
+   txt321 
+TEXDEF txt322 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0 0.390469 APEX 0.125 0 0.484531 RAD 0.0078125
+   txt322 
+TEXDEF txt323 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0 0.5 RAD 0.03125 
+   txt323 
+TEXDEF txt324 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0 0.5 APEX 0.234531 0 0.5 RAD 0.0078125
+   txt324 
+TEXDEF txt325 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.5 APEX 0.125 0.109531 0.5 RAD 0.0078125
+   txt325 
+TEXDEF txt326 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0 0.515469 APEX 0.125 0 0.609531 RAD 0.0078125
+   txt326 
+TEXDEF txt327 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0 0.625 RAD 0.03125 
+   txt327 
+TEXDEF txt328 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0 0.625 APEX 0.234531 0 0.625 RAD 0.0078125
+   txt328 
+TEXDEF txt329 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.625 APEX 0.125 0.109531 0.625 RAD 0.0078125
+   txt329 
+TEXDEF txt330 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0 0.640469 APEX 0.125 0 0.734531 RAD 0.0078125
+   txt330 
+TEXDEF txt331 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0 0.75 RAD 0.03125 
+   txt331 
+TEXDEF txt332 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0 0.75 APEX 0.234531 0 0.75 RAD 0.0078125
+   txt332 
+TEXDEF txt333 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.75 APEX 0.125 0.109531 0.75 RAD 0.0078125
+   txt333 
+TEXDEF txt334 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0 0.765469 APEX 0.125 0 0.859531 RAD 0.0078125
+   txt334 
+TEXDEF txt335 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0 0.875 RAD 0.03125 
+   txt335 
+TEXDEF txt336 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0 0.875 APEX 0.234531 0 0.875 RAD 0.0078125
+   txt336 
+TEXDEF txt337 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.875 APEX 0.125 0.109531 0.875 RAD 0.0078125
+   txt337 
+TEXDEF txt338 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0 0.890469 APEX 0.125 0 0.984531 RAD 0.0078125
+   txt338 
+TEXDEF txt339 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0 1 RAD 0.03125 
+   txt339 
+TEXDEF txt340 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0 1 APEX 0.234531 0 1 RAD 0.0078125
+   txt340 
+TEXDEF txt341 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.0154687 1 APEX 0.125 0.109531 1 RAD 0.0078125
+   txt341 
+TEXDEF txt342 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.125 0 RAD 0.03125 
+   txt342 
+TEXDEF txt343 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.125 0 APEX 0.234531 0.125 0 RAD 0.0078125
+   txt343 
+TEXDEF txt344 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.140469 0 APEX 0.125 0.234531 0 RAD 0.0078125
+   txt344 
+TEXDEF txt345 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.125 0.0154687 APEX 0.125 0.125 0.109531 RAD 0.0078125
+   txt345 
+TEXDEF txt346 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.125 0.125 RAD 0.03125 
+   txt346 
+TEXDEF txt347 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.125 0.125 APEX 0.234531 0.125 0.125 RAD 0.0078125
+   txt347 
+TEXDEF txt348 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.140469 0.125 APEX 0.125 0.234531 0.125 RAD 0.0078125
+   txt348 
+TEXDEF txt349 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.125 0.140469 APEX 0.125 0.125 0.234531 RAD 0.0078125
+   txt349 
+TEXDEF txt350 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.125 0.25 RAD 0.03125 
+   txt350 
+TEXDEF txt351 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.125 0.25 APEX 0.234531 0.125 0.25 RAD 0.0078125
+   txt351 
+TEXDEF txt352 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.140469 0.25 APEX 0.125 0.234531 0.25 RAD 0.0078125
+   txt352 
+TEXDEF txt353 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.125 0.265469 APEX 0.125 0.125 0.359531 RAD 0.0078125
+   txt353 
+TEXDEF txt354 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.125 0.375 RAD 0.03125 
+   txt354 
+TEXDEF txt355 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.125 0.375 APEX 0.234531 0.125 0.375 RAD 0.0078125
+   txt355 
+TEXDEF txt356 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.140469 0.375 APEX 0.125 0.234531 0.375 RAD 0.0078125
+   txt356 
+TEXDEF txt357 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.125 0.390469 APEX 0.125 0.125 0.484531 RAD 0.0078125
+   txt357 
+TEXDEF txt358 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.125 0.5 RAD 0.03125 
+   txt358 
+TEXDEF txt359 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.125 0.5 APEX 0.234531 0.125 0.5 RAD 0.0078125
+   txt359 
+TEXDEF txt360 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.140469 0.5 APEX 0.125 0.234531 0.5 RAD 0.0078125
+   txt360 
+TEXDEF txt361 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.125 0.515469 APEX 0.125 0.125 0.609531 RAD 0.0078125
+   txt361 
+TEXDEF txt362 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.125 0.625 RAD 0.03125 
+   txt362 
+TEXDEF txt363 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.125 0.625 APEX 0.234531 0.125 0.625 RAD 0.0078125
+   txt363 
+TEXDEF txt364 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.140469 0.625 APEX 0.125 0.234531 0.625 RAD 0.0078125
+   txt364 
+TEXDEF txt365 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.125 0.640469 APEX 0.125 0.125 0.734531 RAD 0.0078125
+   txt365 
+TEXDEF txt366 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.125 0.75 RAD 0.03125 
+   txt366 
+TEXDEF txt367 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.125 0.75 APEX 0.234531 0.125 0.75 RAD 0.0078125
+   txt367 
+TEXDEF txt368 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.140469 0.75 APEX 0.125 0.234531 0.75 RAD 0.0078125
+   txt368 
+TEXDEF txt369 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.125 0.765469 APEX 0.125 0.125 0.859531 RAD 0.0078125
+   txt369 
+TEXDEF txt370 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.125 0.875 RAD 0.03125 
+   txt370 
+TEXDEF txt371 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.125 0.875 APEX 0.234531 0.125 0.875 RAD 0.0078125
+   txt371 
+TEXDEF txt372 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.140469 0.875 APEX 0.125 0.234531 0.875 RAD 0.0078125
+   txt372 
+TEXDEF txt373 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.125 0.890469 APEX 0.125 0.125 0.984531 RAD 0.0078125
+   txt373 
+TEXDEF txt374 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.125 1 RAD 0.03125 
+   txt374 
+TEXDEF txt375 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.125 1 APEX 0.234531 0.125 1 RAD 0.0078125
+   txt375 
+TEXDEF txt376 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.140469 1 APEX 0.125 0.234531 1 RAD 0.0078125
+   txt376 
+TEXDEF txt377 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.25 0 RAD 0.03125 
+   txt377 
+TEXDEF txt378 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.25 0 APEX 0.234531 0.25 0 RAD 0.0078125
+   txt378 
+TEXDEF txt379 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.265469 0 APEX 0.125 0.359531 0 RAD 0.0078125
+   txt379 
+TEXDEF txt380 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.25 0.0154687 APEX 0.125 0.25 0.109531 RAD 0.0078125
+   txt380 
+TEXDEF txt381 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.25 0.125 RAD 0.03125 
+   txt381 
+TEXDEF txt382 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.25 0.125 APEX 0.234531 0.25 0.125 RAD 0.0078125
+   txt382 
+TEXDEF txt383 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.265469 0.125 APEX 0.125 0.359531 0.125 RAD 0.0078125
+   txt383 
+TEXDEF txt384 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.25 0.140469 APEX 0.125 0.25 0.234531 RAD 0.0078125
+   txt384 
+TEXDEF txt385 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.25 0.25 RAD 0.03125 
+   txt385 
+TEXDEF txt386 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.25 0.25 APEX 0.234531 0.25 0.25 RAD 0.0078125
+   txt386 
+TEXDEF txt387 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.265469 0.25 APEX 0.125 0.359531 0.25 RAD 0.0078125
+   txt387 
+TEXDEF txt388 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.25 0.265469 APEX 0.125 0.25 0.359531 RAD 0.0078125
+   txt388 
+TEXDEF txt389 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.25 0.375 RAD 0.03125 
+   txt389 
+TEXDEF txt390 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.25 0.375 APEX 0.234531 0.25 0.375 RAD 0.0078125
+   txt390 
+TEXDEF txt391 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.265469 0.375 APEX 0.125 0.359531 0.375 RAD 0.0078125
+   txt391 
+TEXDEF txt392 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.25 0.390469 APEX 0.125 0.25 0.484531 RAD 0.0078125
+   txt392 
+TEXDEF txt393 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.25 0.5 RAD 0.03125 
+   txt393 
+TEXDEF txt394 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.25 0.5 APEX 0.234531 0.25 0.5 RAD 0.0078125
+   txt394 
+TEXDEF txt395 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.265469 0.5 APEX 0.125 0.359531 0.5 RAD 0.0078125
+   txt395 
+TEXDEF txt396 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.25 0.515469 APEX 0.125 0.25 0.609531 RAD 0.0078125
+   txt396 
+TEXDEF txt397 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.25 0.625 RAD 0.03125 
+   txt397 
+TEXDEF txt398 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.25 0.625 APEX 0.234531 0.25 0.625 RAD 0.0078125
+   txt398 
+TEXDEF txt399 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.265469 0.625 APEX 0.125 0.359531 0.625 RAD 0.0078125
+   txt399 
+TEXDEF txt400 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.25 0.640469 APEX 0.125 0.25 0.734531 RAD 0.0078125
+   txt400 
+TEXDEF txt401 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.25 0.75 RAD 0.03125 
+   txt401 
+TEXDEF txt402 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.25 0.75 APEX 0.234531 0.25 0.75 RAD 0.0078125
+   txt402 
+TEXDEF txt403 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.265469 0.75 APEX 0.125 0.359531 0.75 RAD 0.0078125
+   txt403 
+TEXDEF txt404 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.25 0.765469 APEX 0.125 0.25 0.859531 RAD 0.0078125
+   txt404 
+TEXDEF txt405 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.25 0.875 RAD 0.03125 
+   txt405 
+TEXDEF txt406 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.25 0.875 APEX 0.234531 0.25 0.875 RAD 0.0078125
+   txt406 
+TEXDEF txt407 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.265469 0.875 APEX 0.125 0.359531 0.875 RAD 0.0078125
+   txt407 
+TEXDEF txt408 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.25 0.890469 APEX 0.125 0.25 0.984531 RAD 0.0078125
+   txt408 
+TEXDEF txt409 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.25 1 RAD 0.03125 
+   txt409 
+TEXDEF txt410 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.25 1 APEX 0.234531 0.25 1 RAD 0.0078125
+   txt410 
+TEXDEF txt411 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.265469 1 APEX 0.125 0.359531 1 RAD 0.0078125
+   txt411 
+TEXDEF txt412 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.375 0 RAD 0.03125 
+   txt412 
+TEXDEF txt413 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.375 0 APEX 0.234531 0.375 0 RAD 0.0078125
+   txt413 
+TEXDEF txt414 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.390469 0 APEX 0.125 0.484531 0 RAD 0.0078125
+   txt414 
+TEXDEF txt415 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.375 0.0154687 APEX 0.125 0.375 0.109531 RAD 0.0078125
+   txt415 
+TEXDEF txt416 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.375 0.125 RAD 0.03125 
+   txt416 
+TEXDEF txt417 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.375 0.125 APEX 0.234531 0.375 0.125 RAD 0.0078125
+   txt417 
+TEXDEF txt418 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.390469 0.125 APEX 0.125 0.484531 0.125 RAD 0.0078125
+   txt418 
+TEXDEF txt419 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.375 0.140469 APEX 0.125 0.375 0.234531 RAD 0.0078125
+   txt419 
+TEXDEF txt420 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.375 0.25 RAD 0.03125 
+   txt420 
+TEXDEF txt421 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.375 0.25 APEX 0.234531 0.375 0.25 RAD 0.0078125
+   txt421 
+TEXDEF txt422 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.390469 0.25 APEX 0.125 0.484531 0.25 RAD 0.0078125
+   txt422 
+TEXDEF txt423 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.375 0.265469 APEX 0.125 0.375 0.359531 RAD 0.0078125
+   txt423 
+TEXDEF txt424 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.375 0.375 RAD 0.03125 
+   txt424 
+TEXDEF txt425 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.375 0.375 APEX 0.234531 0.375 0.375 RAD 0.0078125
+   txt425 
+TEXDEF txt426 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.390469 0.375 APEX 0.125 0.484531 0.375 RAD 0.0078125
+   txt426 
+TEXDEF txt427 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.375 0.390469 APEX 0.125 0.375 0.484531 RAD 0.0078125
+   txt427 
+TEXDEF txt428 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.375 0.5 RAD 0.03125 
+   txt428 
+TEXDEF txt429 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.375 0.5 APEX 0.234531 0.375 0.5 RAD 0.0078125
+   txt429 
+TEXDEF txt430 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.390469 0.5 APEX 0.125 0.484531 0.5 RAD 0.0078125
+   txt430 
+TEXDEF txt431 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.375 0.515469 APEX 0.125 0.375 0.609531 RAD 0.0078125
+   txt431 
+TEXDEF txt432 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.375 0.625 RAD 0.03125 
+   txt432 
+TEXDEF txt433 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.375 0.625 APEX 0.234531 0.375 0.625 RAD 0.0078125
+   txt433 
+TEXDEF txt434 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.390469 0.625 APEX 0.125 0.484531 0.625 RAD 0.0078125
+   txt434 
+TEXDEF txt435 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.375 0.640469 APEX 0.125 0.375 0.734531 RAD 0.0078125
+   txt435 
+TEXDEF txt436 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.375 0.75 RAD 0.03125 
+   txt436 
+TEXDEF txt437 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.375 0.75 APEX 0.234531 0.375 0.75 RAD 0.0078125
+   txt437 
+TEXDEF txt438 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.390469 0.75 APEX 0.125 0.484531 0.75 RAD 0.0078125
+   txt438 
+TEXDEF txt439 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.375 0.765469 APEX 0.125 0.375 0.859531 RAD 0.0078125
+   txt439 
+TEXDEF txt440 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.375 0.875 RAD 0.03125 
+   txt440 
+TEXDEF txt441 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.375 0.875 APEX 0.234531 0.375 0.875 RAD 0.0078125
+   txt441 
+TEXDEF txt442 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.390469 0.875 APEX 0.125 0.484531 0.875 RAD 0.0078125
+   txt442 
+TEXDEF txt443 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.375 0.890469 APEX 0.125 0.375 0.984531 RAD 0.0078125
+   txt443 
+TEXDEF txt444 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.375 1 RAD 0.03125 
+   txt444 
+TEXDEF txt445 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.375 1 APEX 0.234531 0.375 1 RAD 0.0078125
+   txt445 
+TEXDEF txt446 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.390469 1 APEX 0.125 0.484531 1 RAD 0.0078125
+   txt446 
+TEXDEF txt447 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.5 0 RAD 0.03125 
+   txt447 
+TEXDEF txt448 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.5 0 APEX 0.234531 0.5 0 RAD 0.0078125
+   txt448 
+TEXDEF txt449 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.515469 0 APEX 0.125 0.609531 0 RAD 0.0078125
+   txt449 
+TEXDEF txt450 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.5 0.0154687 APEX 0.125 0.5 0.109531 RAD 0.0078125
+   txt450 
+TEXDEF txt451 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.5 0.125 RAD 0.03125 
+   txt451 
+TEXDEF txt452 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.5 0.125 APEX 0.234531 0.5 0.125 RAD 0.0078125
+   txt452 
+TEXDEF txt453 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.515469 0.125 APEX 0.125 0.609531 0.125 RAD 0.0078125
+   txt453 
+TEXDEF txt454 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.5 0.140469 APEX 0.125 0.5 0.234531 RAD 0.0078125
+   txt454 
+TEXDEF txt455 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.5 0.25 RAD 0.03125 
+   txt455 
+TEXDEF txt456 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.5 0.25 APEX 0.234531 0.5 0.25 RAD 0.0078125
+   txt456 
+TEXDEF txt457 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.515469 0.25 APEX 0.125 0.609531 0.25 RAD 0.0078125
+   txt457 
+TEXDEF txt458 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.5 0.265469 APEX 0.125 0.5 0.359531 RAD 0.0078125
+   txt458 
+TEXDEF txt459 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.5 0.375 RAD 0.03125 
+   txt459 
+TEXDEF txt460 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.5 0.375 APEX 0.234531 0.5 0.375 RAD 0.0078125
+   txt460 
+TEXDEF txt461 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.515469 0.375 APEX 0.125 0.609531 0.375 RAD 0.0078125
+   txt461 
+TEXDEF txt462 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.5 0.390469 APEX 0.125 0.5 0.484531 RAD 0.0078125
+   txt462 
+TEXDEF txt463 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.5 0.5 RAD 0.03125 
+   txt463 
+TEXDEF txt464 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.5 0.5 APEX 0.234531 0.5 0.5 RAD 0.0078125
+   txt464 
+TEXDEF txt465 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.515469 0.5 APEX 0.125 0.609531 0.5 RAD 0.0078125
+   txt465 
+TEXDEF txt466 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.5 0.515469 APEX 0.125 0.5 0.609531 RAD 0.0078125
+   txt466 
+TEXDEF txt467 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.5 0.625 RAD 0.03125 
+   txt467 
+TEXDEF txt468 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.5 0.625 APEX 0.234531 0.5 0.625 RAD 0.0078125
+   txt468 
+TEXDEF txt469 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.515469 0.625 APEX 0.125 0.609531 0.625 RAD 0.0078125
+   txt469 
+TEXDEF txt470 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.5 0.640469 APEX 0.125 0.5 0.734531 RAD 0.0078125
+   txt470 
+TEXDEF txt471 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.5 0.75 RAD 0.03125 
+   txt471 
+TEXDEF txt472 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.5 0.75 APEX 0.234531 0.5 0.75 RAD 0.0078125
+   txt472 
+TEXDEF txt473 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.515469 0.75 APEX 0.125 0.609531 0.75 RAD 0.0078125
+   txt473 
+TEXDEF txt474 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.5 0.765469 APEX 0.125 0.5 0.859531 RAD 0.0078125
+   txt474 
+TEXDEF txt475 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.5 0.875 RAD 0.03125 
+   txt475 
+TEXDEF txt476 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.5 0.875 APEX 0.234531 0.5 0.875 RAD 0.0078125
+   txt476 
+TEXDEF txt477 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.515469 0.875 APEX 0.125 0.609531 0.875 RAD 0.0078125
+   txt477 
+TEXDEF txt478 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.5 0.890469 APEX 0.125 0.5 0.984531 RAD 0.0078125
+   txt478 
+TEXDEF txt479 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.5 1 RAD 0.03125 
+   txt479 
+TEXDEF txt480 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.5 1 APEX 0.234531 0.5 1 RAD 0.0078125
+   txt480 
+TEXDEF txt481 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.515469 1 APEX 0.125 0.609531 1 RAD 0.0078125
+   txt481 
+TEXDEF txt482 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.625 0 RAD 0.03125 
+   txt482 
+TEXDEF txt483 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.625 0 APEX 0.234531 0.625 0 RAD 0.0078125
+   txt483 
+TEXDEF txt484 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.640469 0 APEX 0.125 0.734531 0 RAD 0.0078125
+   txt484 
+TEXDEF txt485 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.625 0.0154687 APEX 0.125 0.625 0.109531 RAD 0.0078125
+   txt485 
+TEXDEF txt486 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.625 0.125 RAD 0.03125 
+   txt486 
+TEXDEF txt487 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.625 0.125 APEX 0.234531 0.625 0.125 RAD 0.0078125
+   txt487 
+TEXDEF txt488 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.640469 0.125 APEX 0.125 0.734531 0.125 RAD 0.0078125
+   txt488 
+TEXDEF txt489 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.625 0.140469 APEX 0.125 0.625 0.234531 RAD 0.0078125
+   txt489 
+TEXDEF txt490 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.625 0.25 RAD 0.03125 
+   txt490 
+TEXDEF txt491 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.625 0.25 APEX 0.234531 0.625 0.25 RAD 0.0078125
+   txt491 
+TEXDEF txt492 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.640469 0.25 APEX 0.125 0.734531 0.25 RAD 0.0078125
+   txt492 
+TEXDEF txt493 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.625 0.265469 APEX 0.125 0.625 0.359531 RAD 0.0078125
+   txt493 
+TEXDEF txt494 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.625 0.375 RAD 0.03125 
+   txt494 
+TEXDEF txt495 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.625 0.375 APEX 0.234531 0.625 0.375 RAD 0.0078125
+   txt495 
+TEXDEF txt496 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.640469 0.375 APEX 0.125 0.734531 0.375 RAD 0.0078125
+   txt496 
+TEXDEF txt497 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.625 0.390469 APEX 0.125 0.625 0.484531 RAD 0.0078125
+   txt497 
+TEXDEF txt498 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.625 0.5 RAD 0.03125 
+   txt498 
+TEXDEF txt499 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.625 0.5 APEX 0.234531 0.625 0.5 RAD 0.0078125
+   txt499 
+TEXDEF txt500 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.640469 0.5 APEX 0.125 0.734531 0.5 RAD 0.0078125
+   txt500 
+TEXDEF txt501 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.625 0.515469 APEX 0.125 0.625 0.609531 RAD 0.0078125
+   txt501 
+TEXDEF txt502 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.625 0.625 RAD 0.03125 
+   txt502 
+TEXDEF txt503 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.625 0.625 APEX 0.234531 0.625 0.625 RAD 0.0078125
+   txt503 
+TEXDEF txt504 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.640469 0.625 APEX 0.125 0.734531 0.625 RAD 0.0078125
+   txt504 
+TEXDEF txt505 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.625 0.640469 APEX 0.125 0.625 0.734531 RAD 0.0078125
+   txt505 
+TEXDEF txt506 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.625 0.75 RAD 0.03125 
+   txt506 
+TEXDEF txt507 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.625 0.75 APEX 0.234531 0.625 0.75 RAD 0.0078125
+   txt507 
+TEXDEF txt508 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.640469 0.75 APEX 0.125 0.734531 0.75 RAD 0.0078125
+   txt508 
+TEXDEF txt509 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.625 0.765469 APEX 0.125 0.625 0.859531 RAD 0.0078125
+   txt509 
+TEXDEF txt510 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.625 0.875 RAD 0.03125 
+   txt510 
+TEXDEF txt511 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.625 0.875 APEX 0.234531 0.625 0.875 RAD 0.0078125
+   txt511 
+TEXDEF txt512 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.640469 0.875 APEX 0.125 0.734531 0.875 RAD 0.0078125
+   txt512 
+TEXDEF txt513 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.625 0.890469 APEX 0.125 0.625 0.984531 RAD 0.0078125
+   txt513 
+TEXDEF txt514 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.625 1 RAD 0.03125 
+   txt514 
+TEXDEF txt515 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.625 1 APEX 0.234531 0.625 1 RAD 0.0078125
+   txt515 
+TEXDEF txt516 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.640469 1 APEX 0.125 0.734531 1 RAD 0.0078125
+   txt516 
+TEXDEF txt517 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.75 0 RAD 0.03125 
+   txt517 
+TEXDEF txt518 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.75 0 APEX 0.234531 0.75 0 RAD 0.0078125
+   txt518 
+TEXDEF txt519 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.765469 0 APEX 0.125 0.859531 0 RAD 0.0078125
+   txt519 
+TEXDEF txt520 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.75 0.0154687 APEX 0.125 0.75 0.109531 RAD 0.0078125
+   txt520 
+TEXDEF txt521 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.75 0.125 RAD 0.03125 
+   txt521 
+TEXDEF txt522 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.75 0.125 APEX 0.234531 0.75 0.125 RAD 0.0078125
+   txt522 
+TEXDEF txt523 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.765469 0.125 APEX 0.125 0.859531 0.125 RAD 0.0078125
+   txt523 
+TEXDEF txt524 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.75 0.140469 APEX 0.125 0.75 0.234531 RAD 0.0078125
+   txt524 
+TEXDEF txt525 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.75 0.25 RAD 0.03125 
+   txt525 
+TEXDEF txt526 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.75 0.25 APEX 0.234531 0.75 0.25 RAD 0.0078125
+   txt526 
+TEXDEF txt527 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.765469 0.25 APEX 0.125 0.859531 0.25 RAD 0.0078125
+   txt527 
+TEXDEF txt528 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.75 0.265469 APEX 0.125 0.75 0.359531 RAD 0.0078125
+   txt528 
+TEXDEF txt529 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.75 0.375 RAD 0.03125 
+   txt529 
+TEXDEF txt530 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.75 0.375 APEX 0.234531 0.75 0.375 RAD 0.0078125
+   txt530 
+TEXDEF txt531 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.765469 0.375 APEX 0.125 0.859531 0.375 RAD 0.0078125
+   txt531 
+TEXDEF txt532 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.75 0.390469 APEX 0.125 0.75 0.484531 RAD 0.0078125
+   txt532 
+TEXDEF txt533 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.75 0.5 RAD 0.03125 
+   txt533 
+TEXDEF txt534 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.75 0.5 APEX 0.234531 0.75 0.5 RAD 0.0078125
+   txt534 
+TEXDEF txt535 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.765469 0.5 APEX 0.125 0.859531 0.5 RAD 0.0078125
+   txt535 
+TEXDEF txt536 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.75 0.515469 APEX 0.125 0.75 0.609531 RAD 0.0078125
+   txt536 
+TEXDEF txt537 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.75 0.625 RAD 0.03125 
+   txt537 
+TEXDEF txt538 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.75 0.625 APEX 0.234531 0.75 0.625 RAD 0.0078125
+   txt538 
+TEXDEF txt539 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.765469 0.625 APEX 0.125 0.859531 0.625 RAD 0.0078125
+   txt539 
+TEXDEF txt540 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.75 0.640469 APEX 0.125 0.75 0.734531 RAD 0.0078125
+   txt540 
+TEXDEF txt541 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.75 0.75 RAD 0.03125 
+   txt541 
+TEXDEF txt542 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.75 0.75 APEX 0.234531 0.75 0.75 RAD 0.0078125
+   txt542 
+TEXDEF txt543 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.765469 0.75 APEX 0.125 0.859531 0.75 RAD 0.0078125
+   txt543 
+TEXDEF txt544 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.75 0.765469 APEX 0.125 0.75 0.859531 RAD 0.0078125
+   txt544 
+TEXDEF txt545 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.75 0.875 RAD 0.03125 
+   txt545 
+TEXDEF txt546 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.75 0.875 APEX 0.234531 0.75 0.875 RAD 0.0078125
+   txt546 
+TEXDEF txt547 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.765469 0.875 APEX 0.125 0.859531 0.875 RAD 0.0078125
+   txt547 
+TEXDEF txt548 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.75 0.890469 APEX 0.125 0.75 0.984531 RAD 0.0078125
+   txt548 
+TEXDEF txt549 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.75 1 RAD 0.03125 
+   txt549 
+TEXDEF txt550 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.75 1 APEX 0.234531 0.75 1 RAD 0.0078125
+   txt550 
+TEXDEF txt551 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.765469 1 APEX 0.125 0.859531 1 RAD 0.0078125
+   txt551 
+TEXDEF txt552 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.875 0 RAD 0.03125 
+   txt552 
+TEXDEF txt553 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.875 0 APEX 0.234531 0.875 0 RAD 0.0078125
+   txt553 
+TEXDEF txt554 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.890469 0 APEX 0.125 0.984531 0 RAD 0.0078125
+   txt554 
+TEXDEF txt555 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.875 0.0154687 APEX 0.125 0.875 0.109531 RAD 0.0078125
+   txt555 
+TEXDEF txt556 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.875 0.125 RAD 0.03125 
+   txt556 
+TEXDEF txt557 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.875 0.125 APEX 0.234531 0.875 0.125 RAD 0.0078125
+   txt557 
+TEXDEF txt558 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.890469 0.125 APEX 0.125 0.984531 0.125 RAD 0.0078125
+   txt558 
+TEXDEF txt559 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.875 0.140469 APEX 0.125 0.875 0.234531 RAD 0.0078125
+   txt559 
+TEXDEF txt560 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.875 0.25 RAD 0.03125 
+   txt560 
+TEXDEF txt561 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.875 0.25 APEX 0.234531 0.875 0.25 RAD 0.0078125
+   txt561 
+TEXDEF txt562 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.890469 0.25 APEX 0.125 0.984531 0.25 RAD 0.0078125
+   txt562 
+TEXDEF txt563 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.875 0.265469 APEX 0.125 0.875 0.359531 RAD 0.0078125
+   txt563 
+TEXDEF txt564 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.875 0.375 RAD 0.03125 
+   txt564 
+TEXDEF txt565 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.875 0.375 APEX 0.234531 0.875 0.375 RAD 0.0078125
+   txt565 
+TEXDEF txt566 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.890469 0.375 APEX 0.125 0.984531 0.375 RAD 0.0078125
+   txt566 
+TEXDEF txt567 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.875 0.390469 APEX 0.125 0.875 0.484531 RAD 0.0078125
+   txt567 
+TEXDEF txt568 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.875 0.5 RAD 0.03125 
+   txt568 
+TEXDEF txt569 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.875 0.5 APEX 0.234531 0.875 0.5 RAD 0.0078125
+   txt569 
+TEXDEF txt570 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.890469 0.5 APEX 0.125 0.984531 0.5 RAD 0.0078125
+   txt570 
+TEXDEF txt571 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.875 0.515469 APEX 0.125 0.875 0.609531 RAD 0.0078125
+   txt571 
+TEXDEF txt572 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.875 0.625 RAD 0.03125 
+   txt572 
+TEXDEF txt573 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.875 0.625 APEX 0.234531 0.875 0.625 RAD 0.0078125
+   txt573 
+TEXDEF txt574 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.890469 0.625 APEX 0.125 0.984531 0.625 RAD 0.0078125
+   txt574 
+TEXDEF txt575 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.875 0.640469 APEX 0.125 0.875 0.734531 RAD 0.0078125
+   txt575 
+TEXDEF txt576 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.875 0.75 RAD 0.03125 
+   txt576 
+TEXDEF txt577 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.875 0.75 APEX 0.234531 0.875 0.75 RAD 0.0078125
+   txt577 
+TEXDEF txt578 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.890469 0.75 APEX 0.125 0.984531 0.75 RAD 0.0078125
+   txt578 
+TEXDEF txt579 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.875 0.765469 APEX 0.125 0.875 0.859531 RAD 0.0078125
+   txt579 
+TEXDEF txt580 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.875 0.875 RAD 0.03125 
+   txt580 
+TEXDEF txt581 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.875 0.875 APEX 0.234531 0.875 0.875 RAD 0.0078125
+   txt581 
+TEXDEF txt582 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.890469 0.875 APEX 0.125 0.984531 0.875 RAD 0.0078125
+   txt582 
+TEXDEF txt583 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.875 0.890469 APEX 0.125 0.875 0.984531 RAD 0.0078125
+   txt583 
+TEXDEF txt584 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 0.875 1 RAD 0.03125 
+   txt584 
+TEXDEF txt585 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 0.875 1 APEX 0.234531 0.875 1 RAD 0.0078125
+   txt585 
+TEXDEF txt586 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 0.890469 1 APEX 0.125 0.984531 1 RAD 0.0078125
+   txt586 
+TEXDEF txt587 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 1 0 RAD 0.03125 
+   txt587 
+TEXDEF txt588 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 1 0 APEX 0.234531 1 0 RAD 0.0078125
+   txt588 
+TEXDEF txt589 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 1 0.0154687 APEX 0.125 1 0.109531 RAD 0.0078125
+   txt589 
+TEXDEF txt590 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 1 0.125 RAD 0.03125 
+   txt590 
+TEXDEF txt591 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 1 0.125 APEX 0.234531 1 0.125 RAD 0.0078125
+   txt591 
+TEXDEF txt592 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 1 0.140469 APEX 0.125 1 0.234531 RAD 0.0078125
+   txt592 
+TEXDEF txt593 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 1 0.25 RAD 0.03125 
+   txt593 
+TEXDEF txt594 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 1 0.25 APEX 0.234531 1 0.25 RAD 0.0078125
+   txt594 
+TEXDEF txt595 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 1 0.265469 APEX 0.125 1 0.359531 RAD 0.0078125
+   txt595 
+TEXDEF txt596 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 1 0.375 RAD 0.03125 
+   txt596 
+TEXDEF txt597 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 1 0.375 APEX 0.234531 1 0.375 RAD 0.0078125
+   txt597 
+TEXDEF txt598 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 1 0.390469 APEX 0.125 1 0.484531 RAD 0.0078125
+   txt598 
+TEXDEF txt599 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 1 0.5 RAD 0.03125 
+   txt599 
+TEXDEF txt600 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 1 0.5 APEX 0.234531 1 0.5 RAD 0.0078125
+   txt600 
+TEXDEF txt601 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 1 0.515469 APEX 0.125 1 0.609531 RAD 0.0078125
+   txt601 
+TEXDEF txt602 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 1 0.625 RAD 0.03125 
+   txt602 
+TEXDEF txt603 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 1 0.625 APEX 0.234531 1 0.625 RAD 0.0078125
+   txt603 
+TEXDEF txt604 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 1 0.640469 APEX 0.125 1 0.734531 RAD 0.0078125
+   txt604 
+TEXDEF txt605 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 1 0.75 RAD 0.03125 
+   txt605 
+TEXDEF txt606 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 1 0.75 APEX 0.234531 1 0.75 RAD 0.0078125
+   txt606 
+TEXDEF txt607 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 1 0.765469 APEX 0.125 1 0.859531 RAD 0.0078125
+   txt607 
+TEXDEF txt608 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 1 0.875 RAD 0.03125 
+   txt608 
+TEXDEF txt609 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 1 0.875 APEX 0.234531 1 0.875 RAD 0.0078125
+   txt609 
+TEXDEF txt610 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.125 1 0.890469 APEX 0.125 1 0.984531 RAD 0.0078125
+   txt610 
+TEXDEF txt611 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.125 1 1 RAD 0.03125 
+   txt611 
+TEXDEF txt612 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.140469 1 1 APEX 0.234531 1 1 RAD 0.0078125
+   txt612 
+TEXDEF txt613 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0 0 RAD 0.03125 
+   txt613 
+TEXDEF txt614 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0 0 APEX 0.359531 0 0 RAD 0.0078125
+   txt614 
+TEXDEF txt615 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.0154687 0 APEX 0.25 0.109531 0 RAD 0.0078125
+   txt615 
+TEXDEF txt616 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0 0.0154687 APEX 0.25 0 0.109531 RAD 0.0078125
+   txt616 
+TEXDEF txt617 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0 0.125 RAD 0.03125 
+   txt617 
+TEXDEF txt618 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0 0.125 APEX 0.359531 0 0.125 RAD 0.0078125
+   txt618 
+TEXDEF txt619 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.125 APEX 0.25 0.109531 0.125 RAD 0.0078125
+   txt619 
+TEXDEF txt620 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0 0.140469 APEX 0.25 0 0.234531 RAD 0.0078125
+   txt620 
+TEXDEF txt621 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0 0.25 RAD 0.03125 
+   txt621 
+TEXDEF txt622 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0 0.25 APEX 0.359531 0 0.25 RAD 0.0078125
+   txt622 
+TEXDEF txt623 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.25 APEX 0.25 0.109531 0.25 RAD 0.0078125
+   txt623 
+TEXDEF txt624 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0 0.265469 APEX 0.25 0 0.359531 RAD 0.0078125
+   txt624 
+TEXDEF txt625 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0 0.375 RAD 0.03125 
+   txt625 
+TEXDEF txt626 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0 0.375 APEX 0.359531 0 0.375 RAD 0.0078125
+   txt626 
+TEXDEF txt627 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.375 APEX 0.25 0.109531 0.375 RAD 0.0078125
+   txt627 
+TEXDEF txt628 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0 0.390469 APEX 0.25 0 0.484531 RAD 0.0078125
+   txt628 
+TEXDEF txt629 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0 0.5 RAD 0.03125 
+   txt629 
+TEXDEF txt630 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0 0.5 APEX 0.359531 0 0.5 RAD 0.0078125
+   txt630 
+TEXDEF txt631 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.5 APEX 0.25 0.109531 0.5 RAD 0.0078125
+   txt631 
+TEXDEF txt632 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0 0.515469 APEX 0.25 0 0.609531 RAD 0.0078125
+   txt632 
+TEXDEF txt633 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0 0.625 RAD 0.03125 
+   txt633 
+TEXDEF txt634 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0 0.625 APEX 0.359531 0 0.625 RAD 0.0078125
+   txt634 
+TEXDEF txt635 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.625 APEX 0.25 0.109531 0.625 RAD 0.0078125
+   txt635 
+TEXDEF txt636 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0 0.640469 APEX 0.25 0 0.734531 RAD 0.0078125
+   txt636 
+TEXDEF txt637 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0 0.75 RAD 0.03125 
+   txt637 
+TEXDEF txt638 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0 0.75 APEX 0.359531 0 0.75 RAD 0.0078125
+   txt638 
+TEXDEF txt639 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.75 APEX 0.25 0.109531 0.75 RAD 0.0078125
+   txt639 
+TEXDEF txt640 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0 0.765469 APEX 0.25 0 0.859531 RAD 0.0078125
+   txt640 
+TEXDEF txt641 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0 0.875 RAD 0.03125 
+   txt641 
+TEXDEF txt642 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0 0.875 APEX 0.359531 0 0.875 RAD 0.0078125
+   txt642 
+TEXDEF txt643 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.875 APEX 0.25 0.109531 0.875 RAD 0.0078125
+   txt643 
+TEXDEF txt644 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0 0.890469 APEX 0.25 0 0.984531 RAD 0.0078125
+   txt644 
+TEXDEF txt645 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0 1 RAD 0.03125 
+   txt645 
+TEXDEF txt646 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0 1 APEX 0.359531 0 1 RAD 0.0078125
+   txt646 
+TEXDEF txt647 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.0154687 1 APEX 0.25 0.109531 1 RAD 0.0078125
+   txt647 
+TEXDEF txt648 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.125 0 RAD 0.03125 
+   txt648 
+TEXDEF txt649 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.125 0 APEX 0.359531 0.125 0 RAD 0.0078125
+   txt649 
+TEXDEF txt650 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.140469 0 APEX 0.25 0.234531 0 RAD 0.0078125
+   txt650 
+TEXDEF txt651 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.125 0.0154687 APEX 0.25 0.125 0.109531 RAD 0.0078125
+   txt651 
+TEXDEF txt652 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.125 0.125 RAD 0.03125 
+   txt652 
+TEXDEF txt653 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.125 0.125 APEX 0.359531 0.125 0.125 RAD 0.0078125
+   txt653 
+TEXDEF txt654 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.140469 0.125 APEX 0.25 0.234531 0.125 RAD 0.0078125
+   txt654 
+TEXDEF txt655 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.125 0.140469 APEX 0.25 0.125 0.234531 RAD 0.0078125
+   txt655 
+TEXDEF txt656 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.125 0.25 RAD 0.03125 
+   txt656 
+TEXDEF txt657 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.125 0.25 APEX 0.359531 0.125 0.25 RAD 0.0078125
+   txt657 
+TEXDEF txt658 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.140469 0.25 APEX 0.25 0.234531 0.25 RAD 0.0078125
+   txt658 
+TEXDEF txt659 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.125 0.265469 APEX 0.25 0.125 0.359531 RAD 0.0078125
+   txt659 
+TEXDEF txt660 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.125 0.375 RAD 0.03125 
+   txt660 
+TEXDEF txt661 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.125 0.375 APEX 0.359531 0.125 0.375 RAD 0.0078125
+   txt661 
+TEXDEF txt662 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.140469 0.375 APEX 0.25 0.234531 0.375 RAD 0.0078125
+   txt662 
+TEXDEF txt663 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.125 0.390469 APEX 0.25 0.125 0.484531 RAD 0.0078125
+   txt663 
+TEXDEF txt664 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.125 0.5 RAD 0.03125 
+   txt664 
+TEXDEF txt665 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.125 0.5 APEX 0.359531 0.125 0.5 RAD 0.0078125
+   txt665 
+TEXDEF txt666 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.140469 0.5 APEX 0.25 0.234531 0.5 RAD 0.0078125
+   txt666 
+TEXDEF txt667 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.125 0.515469 APEX 0.25 0.125 0.609531 RAD 0.0078125
+   txt667 
+TEXDEF txt668 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.125 0.625 RAD 0.03125 
+   txt668 
+TEXDEF txt669 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.125 0.625 APEX 0.359531 0.125 0.625 RAD 0.0078125
+   txt669 
+TEXDEF txt670 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.140469 0.625 APEX 0.25 0.234531 0.625 RAD 0.0078125
+   txt670 
+TEXDEF txt671 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.125 0.640469 APEX 0.25 0.125 0.734531 RAD 0.0078125
+   txt671 
+TEXDEF txt672 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.125 0.75 RAD 0.03125 
+   txt672 
+TEXDEF txt673 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.125 0.75 APEX 0.359531 0.125 0.75 RAD 0.0078125
+   txt673 
+TEXDEF txt674 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.140469 0.75 APEX 0.25 0.234531 0.75 RAD 0.0078125
+   txt674 
+TEXDEF txt675 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.125 0.765469 APEX 0.25 0.125 0.859531 RAD 0.0078125
+   txt675 
+TEXDEF txt676 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.125 0.875 RAD 0.03125 
+   txt676 
+TEXDEF txt677 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.125 0.875 APEX 0.359531 0.125 0.875 RAD 0.0078125
+   txt677 
+TEXDEF txt678 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.140469 0.875 APEX 0.25 0.234531 0.875 RAD 0.0078125
+   txt678 
+TEXDEF txt679 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.125 0.890469 APEX 0.25 0.125 0.984531 RAD 0.0078125
+   txt679 
+TEXDEF txt680 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.125 1 RAD 0.03125 
+   txt680 
+TEXDEF txt681 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.125 1 APEX 0.359531 0.125 1 RAD 0.0078125
+   txt681 
+TEXDEF txt682 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.140469 1 APEX 0.25 0.234531 1 RAD 0.0078125
+   txt682 
+TEXDEF txt683 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.25 0 RAD 0.03125 
+   txt683 
+TEXDEF txt684 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.25 0 APEX 0.359531 0.25 0 RAD 0.0078125
+   txt684 
+TEXDEF txt685 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.265469 0 APEX 0.25 0.359531 0 RAD 0.0078125
+   txt685 
+TEXDEF txt686 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.25 0.0154687 APEX 0.25 0.25 0.109531 RAD 0.0078125
+   txt686 
+TEXDEF txt687 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.25 0.125 RAD 0.03125 
+   txt687 
+TEXDEF txt688 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.25 0.125 APEX 0.359531 0.25 0.125 RAD 0.0078125
+   txt688 
+TEXDEF txt689 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.265469 0.125 APEX 0.25 0.359531 0.125 RAD 0.0078125
+   txt689 
+TEXDEF txt690 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.25 0.140469 APEX 0.25 0.25 0.234531 RAD 0.0078125
+   txt690 
+TEXDEF txt691 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.25 0.25 RAD 0.03125 
+   txt691 
+TEXDEF txt692 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.25 0.25 APEX 0.359531 0.25 0.25 RAD 0.0078125
+   txt692 
+TEXDEF txt693 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.265469 0.25 APEX 0.25 0.359531 0.25 RAD 0.0078125
+   txt693 
+TEXDEF txt694 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.25 0.265469 APEX 0.25 0.25 0.359531 RAD 0.0078125
+   txt694 
+TEXDEF txt695 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.25 0.375 RAD 0.03125 
+   txt695 
+TEXDEF txt696 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.25 0.375 APEX 0.359531 0.25 0.375 RAD 0.0078125
+   txt696 
+TEXDEF txt697 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.265469 0.375 APEX 0.25 0.359531 0.375 RAD 0.0078125
+   txt697 
+TEXDEF txt698 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.25 0.390469 APEX 0.25 0.25 0.484531 RAD 0.0078125
+   txt698 
+TEXDEF txt699 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.25 0.5 RAD 0.03125 
+   txt699 
+TEXDEF txt700 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.25 0.5 APEX 0.359531 0.25 0.5 RAD 0.0078125
+   txt700 
+TEXDEF txt701 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.265469 0.5 APEX 0.25 0.359531 0.5 RAD 0.0078125
+   txt701 
+TEXDEF txt702 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.25 0.515469 APEX 0.25 0.25 0.609531 RAD 0.0078125
+   txt702 
+TEXDEF txt703 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.25 0.625 RAD 0.03125 
+   txt703 
+TEXDEF txt704 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.25 0.625 APEX 0.359531 0.25 0.625 RAD 0.0078125
+   txt704 
+TEXDEF txt705 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.265469 0.625 APEX 0.25 0.359531 0.625 RAD 0.0078125
+   txt705 
+TEXDEF txt706 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.25 0.640469 APEX 0.25 0.25 0.734531 RAD 0.0078125
+   txt706 
+TEXDEF txt707 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.25 0.75 RAD 0.03125 
+   txt707 
+TEXDEF txt708 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.25 0.75 APEX 0.359531 0.25 0.75 RAD 0.0078125
+   txt708 
+TEXDEF txt709 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.265469 0.75 APEX 0.25 0.359531 0.75 RAD 0.0078125
+   txt709 
+TEXDEF txt710 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.25 0.765469 APEX 0.25 0.25 0.859531 RAD 0.0078125
+   txt710 
+TEXDEF txt711 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.25 0.875 RAD 0.03125 
+   txt711 
+TEXDEF txt712 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.25 0.875 APEX 0.359531 0.25 0.875 RAD 0.0078125
+   txt712 
+TEXDEF txt713 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.265469 0.875 APEX 0.25 0.359531 0.875 RAD 0.0078125
+   txt713 
+TEXDEF txt714 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.25 0.890469 APEX 0.25 0.25 0.984531 RAD 0.0078125
+   txt714 
+TEXDEF txt715 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.25 1 RAD 0.03125 
+   txt715 
+TEXDEF txt716 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.25 1 APEX 0.359531 0.25 1 RAD 0.0078125
+   txt716 
+TEXDEF txt717 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.265469 1 APEX 0.25 0.359531 1 RAD 0.0078125
+   txt717 
+TEXDEF txt718 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.375 0 RAD 0.03125 
+   txt718 
+TEXDEF txt719 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.375 0 APEX 0.359531 0.375 0 RAD 0.0078125
+   txt719 
+TEXDEF txt720 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.390469 0 APEX 0.25 0.484531 0 RAD 0.0078125
+   txt720 
+TEXDEF txt721 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.375 0.0154687 APEX 0.25 0.375 0.109531 RAD 0.0078125
+   txt721 
+TEXDEF txt722 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.375 0.125 RAD 0.03125 
+   txt722 
+TEXDEF txt723 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.375 0.125 APEX 0.359531 0.375 0.125 RAD 0.0078125
+   txt723 
+TEXDEF txt724 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.390469 0.125 APEX 0.25 0.484531 0.125 RAD 0.0078125
+   txt724 
+TEXDEF txt725 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.375 0.140469 APEX 0.25 0.375 0.234531 RAD 0.0078125
+   txt725 
+TEXDEF txt726 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.375 0.25 RAD 0.03125 
+   txt726 
+TEXDEF txt727 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.375 0.25 APEX 0.359531 0.375 0.25 RAD 0.0078125
+   txt727 
+TEXDEF txt728 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.390469 0.25 APEX 0.25 0.484531 0.25 RAD 0.0078125
+   txt728 
+TEXDEF txt729 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.375 0.265469 APEX 0.25 0.375 0.359531 RAD 0.0078125
+   txt729 
+TEXDEF txt730 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.375 0.375 RAD 0.03125 
+   txt730 
+TEXDEF txt731 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.375 0.375 APEX 0.359531 0.375 0.375 RAD 0.0078125
+   txt731 
+TEXDEF txt732 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.390469 0.375 APEX 0.25 0.484531 0.375 RAD 0.0078125
+   txt732 
+TEXDEF txt733 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.375 0.390469 APEX 0.25 0.375 0.484531 RAD 0.0078125
+   txt733 
+TEXDEF txt734 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.375 0.5 RAD 0.03125 
+   txt734 
+TEXDEF txt735 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.375 0.5 APEX 0.359531 0.375 0.5 RAD 0.0078125
+   txt735 
+TEXDEF txt736 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.390469 0.5 APEX 0.25 0.484531 0.5 RAD 0.0078125
+   txt736 
+TEXDEF txt737 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.375 0.515469 APEX 0.25 0.375 0.609531 RAD 0.0078125
+   txt737 
+TEXDEF txt738 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.375 0.625 RAD 0.03125 
+   txt738 
+TEXDEF txt739 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.375 0.625 APEX 0.359531 0.375 0.625 RAD 0.0078125
+   txt739 
+TEXDEF txt740 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.390469 0.625 APEX 0.25 0.484531 0.625 RAD 0.0078125
+   txt740 
+TEXDEF txt741 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.375 0.640469 APEX 0.25 0.375 0.734531 RAD 0.0078125
+   txt741 
+TEXDEF txt742 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.375 0.75 RAD 0.03125 
+   txt742 
+TEXDEF txt743 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.375 0.75 APEX 0.359531 0.375 0.75 RAD 0.0078125
+   txt743 
+TEXDEF txt744 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.390469 0.75 APEX 0.25 0.484531 0.75 RAD 0.0078125
+   txt744 
+TEXDEF txt745 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.375 0.765469 APEX 0.25 0.375 0.859531 RAD 0.0078125
+   txt745 
+TEXDEF txt746 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.375 0.875 RAD 0.03125 
+   txt746 
+TEXDEF txt747 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.375 0.875 APEX 0.359531 0.375 0.875 RAD 0.0078125
+   txt747 
+TEXDEF txt748 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.390469 0.875 APEX 0.25 0.484531 0.875 RAD 0.0078125
+   txt748 
+TEXDEF txt749 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.375 0.890469 APEX 0.25 0.375 0.984531 RAD 0.0078125
+   txt749 
+TEXDEF txt750 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.375 1 RAD 0.03125 
+   txt750 
+TEXDEF txt751 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.375 1 APEX 0.359531 0.375 1 RAD 0.0078125
+   txt751 
+TEXDEF txt752 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.390469 1 APEX 0.25 0.484531 1 RAD 0.0078125
+   txt752 
+TEXDEF txt753 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.5 0 RAD 0.03125 
+   txt753 
+TEXDEF txt754 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.5 0 APEX 0.359531 0.5 0 RAD 0.0078125
+   txt754 
+TEXDEF txt755 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.515469 0 APEX 0.25 0.609531 0 RAD 0.0078125
+   txt755 
+TEXDEF txt756 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.5 0.0154687 APEX 0.25 0.5 0.109531 RAD 0.0078125
+   txt756 
+TEXDEF txt757 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.5 0.125 RAD 0.03125 
+   txt757 
+TEXDEF txt758 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.5 0.125 APEX 0.359531 0.5 0.125 RAD 0.0078125
+   txt758 
+TEXDEF txt759 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.515469 0.125 APEX 0.25 0.609531 0.125 RAD 0.0078125
+   txt759 
+TEXDEF txt760 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.5 0.140469 APEX 0.25 0.5 0.234531 RAD 0.0078125
+   txt760 
+TEXDEF txt761 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.5 0.25 RAD 0.03125 
+   txt761 
+TEXDEF txt762 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.5 0.25 APEX 0.359531 0.5 0.25 RAD 0.0078125
+   txt762 
+TEXDEF txt763 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.515469 0.25 APEX 0.25 0.609531 0.25 RAD 0.0078125
+   txt763 
+TEXDEF txt764 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.5 0.265469 APEX 0.25 0.5 0.359531 RAD 0.0078125
+   txt764 
+TEXDEF txt765 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.5 0.375 RAD 0.03125 
+   txt765 
+TEXDEF txt766 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.5 0.375 APEX 0.359531 0.5 0.375 RAD 0.0078125
+   txt766 
+TEXDEF txt767 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.515469 0.375 APEX 0.25 0.609531 0.375 RAD 0.0078125
+   txt767 
+TEXDEF txt768 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.5 0.390469 APEX 0.25 0.5 0.484531 RAD 0.0078125
+   txt768 
+TEXDEF txt769 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.5 0.5 RAD 0.03125 
+   txt769 
+TEXDEF txt770 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.5 0.5 APEX 0.359531 0.5 0.5 RAD 0.0078125
+   txt770 
+TEXDEF txt771 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.515469 0.5 APEX 0.25 0.609531 0.5 RAD 0.0078125
+   txt771 
+TEXDEF txt772 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.5 0.515469 APEX 0.25 0.5 0.609531 RAD 0.0078125
+   txt772 
+TEXDEF txt773 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.5 0.625 RAD 0.03125 
+   txt773 
+TEXDEF txt774 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.5 0.625 APEX 0.359531 0.5 0.625 RAD 0.0078125
+   txt774 
+TEXDEF txt775 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.515469 0.625 APEX 0.25 0.609531 0.625 RAD 0.0078125
+   txt775 
+TEXDEF txt776 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.5 0.640469 APEX 0.25 0.5 0.734531 RAD 0.0078125
+   txt776 
+TEXDEF txt777 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.5 0.75 RAD 0.03125 
+   txt777 
+TEXDEF txt778 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.5 0.75 APEX 0.359531 0.5 0.75 RAD 0.0078125
+   txt778 
+TEXDEF txt779 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.515469 0.75 APEX 0.25 0.609531 0.75 RAD 0.0078125
+   txt779 
+TEXDEF txt780 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.5 0.765469 APEX 0.25 0.5 0.859531 RAD 0.0078125
+   txt780 
+TEXDEF txt781 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.5 0.875 RAD 0.03125 
+   txt781 
+TEXDEF txt782 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.5 0.875 APEX 0.359531 0.5 0.875 RAD 0.0078125
+   txt782 
+TEXDEF txt783 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.515469 0.875 APEX 0.25 0.609531 0.875 RAD 0.0078125
+   txt783 
+TEXDEF txt784 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.5 0.890469 APEX 0.25 0.5 0.984531 RAD 0.0078125
+   txt784 
+TEXDEF txt785 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.5 1 RAD 0.03125 
+   txt785 
+TEXDEF txt786 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.5 1 APEX 0.359531 0.5 1 RAD 0.0078125
+   txt786 
+TEXDEF txt787 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.515469 1 APEX 0.25 0.609531 1 RAD 0.0078125
+   txt787 
+TEXDEF txt788 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.625 0 RAD 0.03125 
+   txt788 
+TEXDEF txt789 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.625 0 APEX 0.359531 0.625 0 RAD 0.0078125
+   txt789 
+TEXDEF txt790 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.640469 0 APEX 0.25 0.734531 0 RAD 0.0078125
+   txt790 
+TEXDEF txt791 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.625 0.0154687 APEX 0.25 0.625 0.109531 RAD 0.0078125
+   txt791 
+TEXDEF txt792 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.625 0.125 RAD 0.03125 
+   txt792 
+TEXDEF txt793 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.625 0.125 APEX 0.359531 0.625 0.125 RAD 0.0078125
+   txt793 
+TEXDEF txt794 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.640469 0.125 APEX 0.25 0.734531 0.125 RAD 0.0078125
+   txt794 
+TEXDEF txt795 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.625 0.140469 APEX 0.25 0.625 0.234531 RAD 0.0078125
+   txt795 
+TEXDEF txt796 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.625 0.25 RAD 0.03125 
+   txt796 
+TEXDEF txt797 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.625 0.25 APEX 0.359531 0.625 0.25 RAD 0.0078125
+   txt797 
+TEXDEF txt798 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.640469 0.25 APEX 0.25 0.734531 0.25 RAD 0.0078125
+   txt798 
+TEXDEF txt799 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.625 0.265469 APEX 0.25 0.625 0.359531 RAD 0.0078125
+   txt799 
+TEXDEF txt800 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.625 0.375 RAD 0.03125 
+   txt800 
+TEXDEF txt801 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.625 0.375 APEX 0.359531 0.625 0.375 RAD 0.0078125
+   txt801 
+TEXDEF txt802 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.640469 0.375 APEX 0.25 0.734531 0.375 RAD 0.0078125
+   txt802 
+TEXDEF txt803 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.625 0.390469 APEX 0.25 0.625 0.484531 RAD 0.0078125
+   txt803 
+TEXDEF txt804 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.625 0.5 RAD 0.03125 
+   txt804 
+TEXDEF txt805 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.625 0.5 APEX 0.359531 0.625 0.5 RAD 0.0078125
+   txt805 
+TEXDEF txt806 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.640469 0.5 APEX 0.25 0.734531 0.5 RAD 0.0078125
+   txt806 
+TEXDEF txt807 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.625 0.515469 APEX 0.25 0.625 0.609531 RAD 0.0078125
+   txt807 
+TEXDEF txt808 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.625 0.625 RAD 0.03125 
+   txt808 
+TEXDEF txt809 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.625 0.625 APEX 0.359531 0.625 0.625 RAD 0.0078125
+   txt809 
+TEXDEF txt810 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.640469 0.625 APEX 0.25 0.734531 0.625 RAD 0.0078125
+   txt810 
+TEXDEF txt811 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.625 0.640469 APEX 0.25 0.625 0.734531 RAD 0.0078125
+   txt811 
+TEXDEF txt812 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.625 0.75 RAD 0.03125 
+   txt812 
+TEXDEF txt813 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.625 0.75 APEX 0.359531 0.625 0.75 RAD 0.0078125
+   txt813 
+TEXDEF txt814 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.640469 0.75 APEX 0.25 0.734531 0.75 RAD 0.0078125
+   txt814 
+TEXDEF txt815 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.625 0.765469 APEX 0.25 0.625 0.859531 RAD 0.0078125
+   txt815 
+TEXDEF txt816 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.625 0.875 RAD 0.03125 
+   txt816 
+TEXDEF txt817 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.625 0.875 APEX 0.359531 0.625 0.875 RAD 0.0078125
+   txt817 
+TEXDEF txt818 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.640469 0.875 APEX 0.25 0.734531 0.875 RAD 0.0078125
+   txt818 
+TEXDEF txt819 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.625 0.890469 APEX 0.25 0.625 0.984531 RAD 0.0078125
+   txt819 
+TEXDEF txt820 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.625 1 RAD 0.03125 
+   txt820 
+TEXDEF txt821 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.625 1 APEX 0.359531 0.625 1 RAD 0.0078125
+   txt821 
+TEXDEF txt822 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.640469 1 APEX 0.25 0.734531 1 RAD 0.0078125
+   txt822 
+TEXDEF txt823 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.75 0 RAD 0.03125 
+   txt823 
+TEXDEF txt824 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.75 0 APEX 0.359531 0.75 0 RAD 0.0078125
+   txt824 
+TEXDEF txt825 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.765469 0 APEX 0.25 0.859531 0 RAD 0.0078125
+   txt825 
+TEXDEF txt826 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.75 0.0154687 APEX 0.25 0.75 0.109531 RAD 0.0078125
+   txt826 
+TEXDEF txt827 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.75 0.125 RAD 0.03125 
+   txt827 
+TEXDEF txt828 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.75 0.125 APEX 0.359531 0.75 0.125 RAD 0.0078125
+   txt828 
+TEXDEF txt829 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.765469 0.125 APEX 0.25 0.859531 0.125 RAD 0.0078125
+   txt829 
+TEXDEF txt830 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.75 0.140469 APEX 0.25 0.75 0.234531 RAD 0.0078125
+   txt830 
+TEXDEF txt831 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.75 0.25 RAD 0.03125 
+   txt831 
+TEXDEF txt832 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.75 0.25 APEX 0.359531 0.75 0.25 RAD 0.0078125
+   txt832 
+TEXDEF txt833 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.765469 0.25 APEX 0.25 0.859531 0.25 RAD 0.0078125
+   txt833 
+TEXDEF txt834 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.75 0.265469 APEX 0.25 0.75 0.359531 RAD 0.0078125
+   txt834 
+TEXDEF txt835 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.75 0.375 RAD 0.03125 
+   txt835 
+TEXDEF txt836 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.75 0.375 APEX 0.359531 0.75 0.375 RAD 0.0078125
+   txt836 
+TEXDEF txt837 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.765469 0.375 APEX 0.25 0.859531 0.375 RAD 0.0078125
+   txt837 
+TEXDEF txt838 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.75 0.390469 APEX 0.25 0.75 0.484531 RAD 0.0078125
+   txt838 
+TEXDEF txt839 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.75 0.5 RAD 0.03125 
+   txt839 
+TEXDEF txt840 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.75 0.5 APEX 0.359531 0.75 0.5 RAD 0.0078125
+   txt840 
+TEXDEF txt841 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.765469 0.5 APEX 0.25 0.859531 0.5 RAD 0.0078125
+   txt841 
+TEXDEF txt842 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.75 0.515469 APEX 0.25 0.75 0.609531 RAD 0.0078125
+   txt842 
+TEXDEF txt843 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.75 0.625 RAD 0.03125 
+   txt843 
+TEXDEF txt844 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.75 0.625 APEX 0.359531 0.75 0.625 RAD 0.0078125
+   txt844 
+TEXDEF txt845 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.765469 0.625 APEX 0.25 0.859531 0.625 RAD 0.0078125
+   txt845 
+TEXDEF txt846 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.75 0.640469 APEX 0.25 0.75 0.734531 RAD 0.0078125
+   txt846 
+TEXDEF txt847 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.75 0.75 RAD 0.03125 
+   txt847 
+TEXDEF txt848 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.75 0.75 APEX 0.359531 0.75 0.75 RAD 0.0078125
+   txt848 
+TEXDEF txt849 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.765469 0.75 APEX 0.25 0.859531 0.75 RAD 0.0078125
+   txt849 
+TEXDEF txt850 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.75 0.765469 APEX 0.25 0.75 0.859531 RAD 0.0078125
+   txt850 
+TEXDEF txt851 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.75 0.875 RAD 0.03125 
+   txt851 
+TEXDEF txt852 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.75 0.875 APEX 0.359531 0.75 0.875 RAD 0.0078125
+   txt852 
+TEXDEF txt853 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.765469 0.875 APEX 0.25 0.859531 0.875 RAD 0.0078125
+   txt853 
+TEXDEF txt854 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.75 0.890469 APEX 0.25 0.75 0.984531 RAD 0.0078125
+   txt854 
+TEXDEF txt855 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.75 1 RAD 0.03125 
+   txt855 
+TEXDEF txt856 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.75 1 APEX 0.359531 0.75 1 RAD 0.0078125
+   txt856 
+TEXDEF txt857 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.765469 1 APEX 0.25 0.859531 1 RAD 0.0078125
+   txt857 
+TEXDEF txt858 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.875 0 RAD 0.03125 
+   txt858 
+TEXDEF txt859 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.875 0 APEX 0.359531 0.875 0 RAD 0.0078125
+   txt859 
+TEXDEF txt860 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.890469 0 APEX 0.25 0.984531 0 RAD 0.0078125
+   txt860 
+TEXDEF txt861 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.875 0.0154687 APEX 0.25 0.875 0.109531 RAD 0.0078125
+   txt861 
+TEXDEF txt862 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.875 0.125 RAD 0.03125 
+   txt862 
+TEXDEF txt863 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.875 0.125 APEX 0.359531 0.875 0.125 RAD 0.0078125
+   txt863 
+TEXDEF txt864 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.890469 0.125 APEX 0.25 0.984531 0.125 RAD 0.0078125
+   txt864 
+TEXDEF txt865 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.875 0.140469 APEX 0.25 0.875 0.234531 RAD 0.0078125
+   txt865 
+TEXDEF txt866 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.875 0.25 RAD 0.03125 
+   txt866 
+TEXDEF txt867 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.875 0.25 APEX 0.359531 0.875 0.25 RAD 0.0078125
+   txt867 
+TEXDEF txt868 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.890469 0.25 APEX 0.25 0.984531 0.25 RAD 0.0078125
+   txt868 
+TEXDEF txt869 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.875 0.265469 APEX 0.25 0.875 0.359531 RAD 0.0078125
+   txt869 
+TEXDEF txt870 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.875 0.375 RAD 0.03125 
+   txt870 
+TEXDEF txt871 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.875 0.375 APEX 0.359531 0.875 0.375 RAD 0.0078125
+   txt871 
+TEXDEF txt872 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.890469 0.375 APEX 0.25 0.984531 0.375 RAD 0.0078125
+   txt872 
+TEXDEF txt873 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.875 0.390469 APEX 0.25 0.875 0.484531 RAD 0.0078125
+   txt873 
+TEXDEF txt874 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.875 0.5 RAD 0.03125 
+   txt874 
+TEXDEF txt875 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.875 0.5 APEX 0.359531 0.875 0.5 RAD 0.0078125
+   txt875 
+TEXDEF txt876 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.890469 0.5 APEX 0.25 0.984531 0.5 RAD 0.0078125
+   txt876 
+TEXDEF txt877 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.875 0.515469 APEX 0.25 0.875 0.609531 RAD 0.0078125
+   txt877 
+TEXDEF txt878 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.875 0.625 RAD 0.03125 
+   txt878 
+TEXDEF txt879 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.875 0.625 APEX 0.359531 0.875 0.625 RAD 0.0078125
+   txt879 
+TEXDEF txt880 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.890469 0.625 APEX 0.25 0.984531 0.625 RAD 0.0078125
+   txt880 
+TEXDEF txt881 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.875 0.640469 APEX 0.25 0.875 0.734531 RAD 0.0078125
+   txt881 
+TEXDEF txt882 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.875 0.75 RAD 0.03125 
+   txt882 
+TEXDEF txt883 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.875 0.75 APEX 0.359531 0.875 0.75 RAD 0.0078125
+   txt883 
+TEXDEF txt884 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.890469 0.75 APEX 0.25 0.984531 0.75 RAD 0.0078125
+   txt884 
+TEXDEF txt885 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.875 0.765469 APEX 0.25 0.875 0.859531 RAD 0.0078125
+   txt885 
+TEXDEF txt886 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.875 0.875 RAD 0.03125 
+   txt886 
+TEXDEF txt887 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.875 0.875 APEX 0.359531 0.875 0.875 RAD 0.0078125
+   txt887 
+TEXDEF txt888 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.890469 0.875 APEX 0.25 0.984531 0.875 RAD 0.0078125
+   txt888 
+TEXDEF txt889 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.875 0.890469 APEX 0.25 0.875 0.984531 RAD 0.0078125
+   txt889 
+TEXDEF txt890 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 0.875 1 RAD 0.03125 
+   txt890 
+TEXDEF txt891 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 0.875 1 APEX 0.359531 0.875 1 RAD 0.0078125
+   txt891 
+TEXDEF txt892 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 0.890469 1 APEX 0.25 0.984531 1 RAD 0.0078125
+   txt892 
+TEXDEF txt893 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 1 0 RAD 0.03125 
+   txt893 
+TEXDEF txt894 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 1 0 APEX 0.359531 1 0 RAD 0.0078125
+   txt894 
+TEXDEF txt895 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 1 0.0154687 APEX 0.25 1 0.109531 RAD 0.0078125
+   txt895 
+TEXDEF txt896 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 1 0.125 RAD 0.03125 
+   txt896 
+TEXDEF txt897 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 1 0.125 APEX 0.359531 1 0.125 RAD 0.0078125
+   txt897 
+TEXDEF txt898 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 1 0.140469 APEX 0.25 1 0.234531 RAD 0.0078125
+   txt898 
+TEXDEF txt899 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 1 0.25 RAD 0.03125 
+   txt899 
+TEXDEF txt900 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 1 0.25 APEX 0.359531 1 0.25 RAD 0.0078125
+   txt900 
+TEXDEF txt901 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 1 0.265469 APEX 0.25 1 0.359531 RAD 0.0078125
+   txt901 
+TEXDEF txt902 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 1 0.375 RAD 0.03125 
+   txt902 
+TEXDEF txt903 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 1 0.375 APEX 0.359531 1 0.375 RAD 0.0078125
+   txt903 
+TEXDEF txt904 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 1 0.390469 APEX 0.25 1 0.484531 RAD 0.0078125
+   txt904 
+TEXDEF txt905 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 1 0.5 RAD 0.03125 
+   txt905 
+TEXDEF txt906 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 1 0.5 APEX 0.359531 1 0.5 RAD 0.0078125
+   txt906 
+TEXDEF txt907 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 1 0.515469 APEX 0.25 1 0.609531 RAD 0.0078125
+   txt907 
+TEXDEF txt908 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 1 0.625 RAD 0.03125 
+   txt908 
+TEXDEF txt909 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 1 0.625 APEX 0.359531 1 0.625 RAD 0.0078125
+   txt909 
+TEXDEF txt910 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 1 0.640469 APEX 0.25 1 0.734531 RAD 0.0078125
+   txt910 
+TEXDEF txt911 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 1 0.75 RAD 0.03125 
+   txt911 
+TEXDEF txt912 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 1 0.75 APEX 0.359531 1 0.75 RAD 0.0078125
+   txt912 
+TEXDEF txt913 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 1 0.765469 APEX 0.25 1 0.859531 RAD 0.0078125
+   txt913 
+TEXDEF txt914 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 1 0.875 RAD 0.03125 
+   txt914 
+TEXDEF txt915 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 1 0.875 APEX 0.359531 1 0.875 RAD 0.0078125
+   txt915 
+TEXDEF txt916 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.25 1 0.890469 APEX 0.25 1 0.984531 RAD 0.0078125
+   txt916 
+TEXDEF txt917 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.25 1 1 RAD 0.03125 
+   txt917 
+TEXDEF txt918 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.265469 1 1 APEX 0.359531 1 1 RAD 0.0078125
+   txt918 
+TEXDEF txt919 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0 0 RAD 0.03125 
+   txt919 
+TEXDEF txt920 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0 0 APEX 0.484531 0 0 RAD 0.0078125
+   txt920 
+TEXDEF txt921 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.0154687 0 APEX 0.375 0.109531 0 RAD 0.0078125
+   txt921 
+TEXDEF txt922 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0 0.0154687 APEX 0.375 0 0.109531 RAD 0.0078125
+   txt922 
+TEXDEF txt923 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0 0.125 RAD 0.03125 
+   txt923 
+TEXDEF txt924 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0 0.125 APEX 0.484531 0 0.125 RAD 0.0078125
+   txt924 
+TEXDEF txt925 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.125 APEX 0.375 0.109531 0.125 RAD 0.0078125
+   txt925 
+TEXDEF txt926 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0 0.140469 APEX 0.375 0 0.234531 RAD 0.0078125
+   txt926 
+TEXDEF txt927 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0 0.25 RAD 0.03125 
+   txt927 
+TEXDEF txt928 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0 0.25 APEX 0.484531 0 0.25 RAD 0.0078125
+   txt928 
+TEXDEF txt929 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.25 APEX 0.375 0.109531 0.25 RAD 0.0078125
+   txt929 
+TEXDEF txt930 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0 0.265469 APEX 0.375 0 0.359531 RAD 0.0078125
+   txt930 
+TEXDEF txt931 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0 0.375 RAD 0.03125 
+   txt931 
+TEXDEF txt932 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0 0.375 APEX 0.484531 0 0.375 RAD 0.0078125
+   txt932 
+TEXDEF txt933 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.375 APEX 0.375 0.109531 0.375 RAD 0.0078125
+   txt933 
+TEXDEF txt934 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0 0.390469 APEX 0.375 0 0.484531 RAD 0.0078125
+   txt934 
+TEXDEF txt935 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0 0.5 RAD 0.03125 
+   txt935 
+TEXDEF txt936 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0 0.5 APEX 0.484531 0 0.5 RAD 0.0078125
+   txt936 
+TEXDEF txt937 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.5 APEX 0.375 0.109531 0.5 RAD 0.0078125
+   txt937 
+TEXDEF txt938 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0 0.515469 APEX 0.375 0 0.609531 RAD 0.0078125
+   txt938 
+TEXDEF txt939 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0 0.625 RAD 0.03125 
+   txt939 
+TEXDEF txt940 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0 0.625 APEX 0.484531 0 0.625 RAD 0.0078125
+   txt940 
+TEXDEF txt941 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.625 APEX 0.375 0.109531 0.625 RAD 0.0078125
+   txt941 
+TEXDEF txt942 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0 0.640469 APEX 0.375 0 0.734531 RAD 0.0078125
+   txt942 
+TEXDEF txt943 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0 0.75 RAD 0.03125 
+   txt943 
+TEXDEF txt944 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0 0.75 APEX 0.484531 0 0.75 RAD 0.0078125
+   txt944 
+TEXDEF txt945 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.75 APEX 0.375 0.109531 0.75 RAD 0.0078125
+   txt945 
+TEXDEF txt946 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0 0.765469 APEX 0.375 0 0.859531 RAD 0.0078125
+   txt946 
+TEXDEF txt947 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0 0.875 RAD 0.03125 
+   txt947 
+TEXDEF txt948 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0 0.875 APEX 0.484531 0 0.875 RAD 0.0078125
+   txt948 
+TEXDEF txt949 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.875 APEX 0.375 0.109531 0.875 RAD 0.0078125
+   txt949 
+TEXDEF txt950 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0 0.890469 APEX 0.375 0 0.984531 RAD 0.0078125
+   txt950 
+TEXDEF txt951 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0 1 RAD 0.03125 
+   txt951 
+TEXDEF txt952 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0 1 APEX 0.484531 0 1 RAD 0.0078125
+   txt952 
+TEXDEF txt953 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.0154687 1 APEX 0.375 0.109531 1 RAD 0.0078125
+   txt953 
+TEXDEF txt954 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.125 0 RAD 0.03125 
+   txt954 
+TEXDEF txt955 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.125 0 APEX 0.484531 0.125 0 RAD 0.0078125
+   txt955 
+TEXDEF txt956 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.140469 0 APEX 0.375 0.234531 0 RAD 0.0078125
+   txt956 
+TEXDEF txt957 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.125 0.0154687 APEX 0.375 0.125 0.109531 RAD 0.0078125
+   txt957 
+TEXDEF txt958 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.125 0.125 RAD 0.03125 
+   txt958 
+TEXDEF txt959 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.125 0.125 APEX 0.484531 0.125 0.125 RAD 0.0078125
+   txt959 
+TEXDEF txt960 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.140469 0.125 APEX 0.375 0.234531 0.125 RAD 0.0078125
+   txt960 
+TEXDEF txt961 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.125 0.140469 APEX 0.375 0.125 0.234531 RAD 0.0078125
+   txt961 
+TEXDEF txt962 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.125 0.25 RAD 0.03125 
+   txt962 
+TEXDEF txt963 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.125 0.25 APEX 0.484531 0.125 0.25 RAD 0.0078125
+   txt963 
+TEXDEF txt964 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.140469 0.25 APEX 0.375 0.234531 0.25 RAD 0.0078125
+   txt964 
+TEXDEF txt965 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.125 0.265469 APEX 0.375 0.125 0.359531 RAD 0.0078125
+   txt965 
+TEXDEF txt966 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.125 0.375 RAD 0.03125 
+   txt966 
+TEXDEF txt967 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.125 0.375 APEX 0.484531 0.125 0.375 RAD 0.0078125
+   txt967 
+TEXDEF txt968 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.140469 0.375 APEX 0.375 0.234531 0.375 RAD 0.0078125
+   txt968 
+TEXDEF txt969 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.125 0.390469 APEX 0.375 0.125 0.484531 RAD 0.0078125
+   txt969 
+TEXDEF txt970 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.125 0.5 RAD 0.03125 
+   txt970 
+TEXDEF txt971 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.125 0.5 APEX 0.484531 0.125 0.5 RAD 0.0078125
+   txt971 
+TEXDEF txt972 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.140469 0.5 APEX 0.375 0.234531 0.5 RAD 0.0078125
+   txt972 
+TEXDEF txt973 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.125 0.515469 APEX 0.375 0.125 0.609531 RAD 0.0078125
+   txt973 
+TEXDEF txt974 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.125 0.625 RAD 0.03125 
+   txt974 
+TEXDEF txt975 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.125 0.625 APEX 0.484531 0.125 0.625 RAD 0.0078125
+   txt975 
+TEXDEF txt976 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.140469 0.625 APEX 0.375 0.234531 0.625 RAD 0.0078125
+   txt976 
+TEXDEF txt977 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.125 0.640469 APEX 0.375 0.125 0.734531 RAD 0.0078125
+   txt977 
+TEXDEF txt978 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.125 0.75 RAD 0.03125 
+   txt978 
+TEXDEF txt979 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.125 0.75 APEX 0.484531 0.125 0.75 RAD 0.0078125
+   txt979 
+TEXDEF txt980 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.140469 0.75 APEX 0.375 0.234531 0.75 RAD 0.0078125
+   txt980 
+TEXDEF txt981 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.125 0.765469 APEX 0.375 0.125 0.859531 RAD 0.0078125
+   txt981 
+TEXDEF txt982 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.125 0.875 RAD 0.03125 
+   txt982 
+TEXDEF txt983 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.125 0.875 APEX 0.484531 0.125 0.875 RAD 0.0078125
+   txt983 
+TEXDEF txt984 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.140469 0.875 APEX 0.375 0.234531 0.875 RAD 0.0078125
+   txt984 
+TEXDEF txt985 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.125 0.890469 APEX 0.375 0.125 0.984531 RAD 0.0078125
+   txt985 
+TEXDEF txt986 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.125 1 RAD 0.03125 
+   txt986 
+TEXDEF txt987 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.125 1 APEX 0.484531 0.125 1 RAD 0.0078125
+   txt987 
+TEXDEF txt988 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.140469 1 APEX 0.375 0.234531 1 RAD 0.0078125
+   txt988 
+TEXDEF txt989 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.25 0 RAD 0.03125 
+   txt989 
+TEXDEF txt990 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.25 0 APEX 0.484531 0.25 0 RAD 0.0078125
+   txt990 
+TEXDEF txt991 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.265469 0 APEX 0.375 0.359531 0 RAD 0.0078125
+   txt991 
+TEXDEF txt992 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.25 0.0154687 APEX 0.375 0.25 0.109531 RAD 0.0078125
+   txt992 
+TEXDEF txt993 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.25 0.125 RAD 0.03125 
+   txt993 
+TEXDEF txt994 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.25 0.125 APEX 0.484531 0.25 0.125 RAD 0.0078125
+   txt994 
+TEXDEF txt995 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.265469 0.125 APEX 0.375 0.359531 0.125 RAD 0.0078125
+   txt995 
+TEXDEF txt996 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.25 0.140469 APEX 0.375 0.25 0.234531 RAD 0.0078125
+   txt996 
+TEXDEF txt997 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.25 0.25 RAD 0.03125 
+   txt997 
+TEXDEF txt998 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.25 0.25 APEX 0.484531 0.25 0.25 RAD 0.0078125
+   txt998 
+TEXDEF txt999 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.265469 0.25 APEX 0.375 0.359531 0.25 RAD 0.0078125
+   txt999 
+TEXDEF txt100 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.25 0.265469 APEX 0.375 0.25 0.359531 RAD 0.0078125
+   txt100 
+TEXDEF txt100 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.25 0.375 RAD 0.03125 
+   txt100 
+TEXDEF txt100 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.25 0.375 APEX 0.484531 0.25 0.375 RAD 0.0078125
+   txt100 
+TEXDEF txt100 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.265469 0.375 APEX 0.375 0.359531 0.375 RAD 0.0078125
+   txt100 
+TEXDEF txt100 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.25 0.390469 APEX 0.375 0.25 0.484531 RAD 0.0078125
+   txt100 
+TEXDEF txt100 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.25 0.5 RAD 0.03125 
+   txt100 
+TEXDEF txt100 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.25 0.5 APEX 0.484531 0.25 0.5 RAD 0.0078125
+   txt100 
+TEXDEF txt100 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.265469 0.5 APEX 0.375 0.359531 0.5 RAD 0.0078125
+   txt100 
+TEXDEF txt100 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.25 0.515469 APEX 0.375 0.25 0.609531 RAD 0.0078125
+   txt100 
+TEXDEF txt100 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.25 0.625 RAD 0.03125 
+   txt100 
+TEXDEF txt101 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.25 0.625 APEX 0.484531 0.25 0.625 RAD 0.0078125
+   txt101 
+TEXDEF txt101 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.265469 0.625 APEX 0.375 0.359531 0.625 RAD 0.0078125
+   txt101 
+TEXDEF txt101 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.25 0.640469 APEX 0.375 0.25 0.734531 RAD 0.0078125
+   txt101 
+TEXDEF txt101 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.25 0.75 RAD 0.03125 
+   txt101 
+TEXDEF txt101 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.25 0.75 APEX 0.484531 0.25 0.75 RAD 0.0078125
+   txt101 
+TEXDEF txt101 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.265469 0.75 APEX 0.375 0.359531 0.75 RAD 0.0078125
+   txt101 
+TEXDEF txt101 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.25 0.765469 APEX 0.375 0.25 0.859531 RAD 0.0078125
+   txt101 
+TEXDEF txt101 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.25 0.875 RAD 0.03125 
+   txt101 
+TEXDEF txt101 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.25 0.875 APEX 0.484531 0.25 0.875 RAD 0.0078125
+   txt101 
+TEXDEF txt101 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.265469 0.875 APEX 0.375 0.359531 0.875 RAD 0.0078125
+   txt101 
+TEXDEF txt102 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.25 0.890469 APEX 0.375 0.25 0.984531 RAD 0.0078125
+   txt102 
+TEXDEF txt102 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.25 1 RAD 0.03125 
+   txt102 
+TEXDEF txt102 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.25 1 APEX 0.484531 0.25 1 RAD 0.0078125
+   txt102 
+TEXDEF txt102 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.265469 1 APEX 0.375 0.359531 1 RAD 0.0078125
+   txt102 
+TEXDEF txt102 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.375 0 RAD 0.03125 
+   txt102 
+TEXDEF txt102 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.375 0 APEX 0.484531 0.375 0 RAD 0.0078125
+   txt102 
+TEXDEF txt102 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.390469 0 APEX 0.375 0.484531 0 RAD 0.0078125
+   txt102 
+TEXDEF txt102 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.375 0.0154687 APEX 0.375 0.375 0.109531 RAD 0.0078125
+   txt102 
+TEXDEF txt102 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.375 0.125 RAD 0.03125 
+   txt102 
+TEXDEF txt102 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.375 0.125 APEX 0.484531 0.375 0.125 RAD 0.0078125
+   txt102 
+TEXDEF txt103 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.390469 0.125 APEX 0.375 0.484531 0.125 RAD 0.0078125
+   txt103 
+TEXDEF txt103 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.375 0.140469 APEX 0.375 0.375 0.234531 RAD 0.0078125
+   txt103 
+TEXDEF txt103 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.375 0.25 RAD 0.03125 
+   txt103 
+TEXDEF txt103 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.375 0.25 APEX 0.484531 0.375 0.25 RAD 0.0078125
+   txt103 
+TEXDEF txt103 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.390469 0.25 APEX 0.375 0.484531 0.25 RAD 0.0078125
+   txt103 
+TEXDEF txt103 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.375 0.265469 APEX 0.375 0.375 0.359531 RAD 0.0078125
+   txt103 
+TEXDEF txt103 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.375 0.375 RAD 0.03125 
+   txt103 
+TEXDEF txt103 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.375 0.375 APEX 0.484531 0.375 0.375 RAD 0.0078125
+   txt103 
+TEXDEF txt103 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.390469 0.375 APEX 0.375 0.484531 0.375 RAD 0.0078125
+   txt103 
+TEXDEF txt103 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.375 0.390469 APEX 0.375 0.375 0.484531 RAD 0.0078125
+   txt103 
+TEXDEF txt104 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.375 0.5 RAD 0.03125 
+   txt104 
+TEXDEF txt104 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.375 0.5 APEX 0.484531 0.375 0.5 RAD 0.0078125
+   txt104 
+TEXDEF txt104 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.390469 0.5 APEX 0.375 0.484531 0.5 RAD 0.0078125
+   txt104 
+TEXDEF txt104 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.375 0.515469 APEX 0.375 0.375 0.609531 RAD 0.0078125
+   txt104 
+TEXDEF txt104 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.375 0.625 RAD 0.03125 
+   txt104 
+TEXDEF txt104 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.375 0.625 APEX 0.484531 0.375 0.625 RAD 0.0078125
+   txt104 
+TEXDEF txt104 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.390469 0.625 APEX 0.375 0.484531 0.625 RAD 0.0078125
+   txt104 
+TEXDEF txt104 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.375 0.640469 APEX 0.375 0.375 0.734531 RAD 0.0078125
+   txt104 
+TEXDEF txt104 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.375 0.75 RAD 0.03125 
+   txt104 
+TEXDEF txt104 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.375 0.75 APEX 0.484531 0.375 0.75 RAD 0.0078125
+   txt104 
+TEXDEF txt105 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.390469 0.75 APEX 0.375 0.484531 0.75 RAD 0.0078125
+   txt105 
+TEXDEF txt105 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.375 0.765469 APEX 0.375 0.375 0.859531 RAD 0.0078125
+   txt105 
+TEXDEF txt105 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.375 0.875 RAD 0.03125 
+   txt105 
+TEXDEF txt105 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.375 0.875 APEX 0.484531 0.375 0.875 RAD 0.0078125
+   txt105 
+TEXDEF txt105 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.390469 0.875 APEX 0.375 0.484531 0.875 RAD 0.0078125
+   txt105 
+TEXDEF txt105 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.375 0.890469 APEX 0.375 0.375 0.984531 RAD 0.0078125
+   txt105 
+TEXDEF txt105 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.375 1 RAD 0.03125 
+   txt105 
+TEXDEF txt105 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.375 1 APEX 0.484531 0.375 1 RAD 0.0078125
+   txt105 
+TEXDEF txt105 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.390469 1 APEX 0.375 0.484531 1 RAD 0.0078125
+   txt105 
+TEXDEF txt105 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.5 0 RAD 0.03125 
+   txt105 
+TEXDEF txt106 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.5 0 APEX 0.484531 0.5 0 RAD 0.0078125
+   txt106 
+TEXDEF txt106 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.515469 0 APEX 0.375 0.609531 0 RAD 0.0078125
+   txt106 
+TEXDEF txt106 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.5 0.0154687 APEX 0.375 0.5 0.109531 RAD 0.0078125
+   txt106 
+TEXDEF txt106 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.5 0.125 RAD 0.03125 
+   txt106 
+TEXDEF txt106 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.5 0.125 APEX 0.484531 0.5 0.125 RAD 0.0078125
+   txt106 
+TEXDEF txt106 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.515469 0.125 APEX 0.375 0.609531 0.125 RAD 0.0078125
+   txt106 
+TEXDEF txt106 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.5 0.140469 APEX 0.375 0.5 0.234531 RAD 0.0078125
+   txt106 
+TEXDEF txt106 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.5 0.25 RAD 0.03125 
+   txt106 
+TEXDEF txt106 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.5 0.25 APEX 0.484531 0.5 0.25 RAD 0.0078125
+   txt106 
+TEXDEF txt106 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.515469 0.25 APEX 0.375 0.609531 0.25 RAD 0.0078125
+   txt106 
+TEXDEF txt107 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.5 0.265469 APEX 0.375 0.5 0.359531 RAD 0.0078125
+   txt107 
+TEXDEF txt107 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.5 0.375 RAD 0.03125 
+   txt107 
+TEXDEF txt107 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.5 0.375 APEX 0.484531 0.5 0.375 RAD 0.0078125
+   txt107 
+TEXDEF txt107 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.515469 0.375 APEX 0.375 0.609531 0.375 RAD 0.0078125
+   txt107 
+TEXDEF txt107 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.5 0.390469 APEX 0.375 0.5 0.484531 RAD 0.0078125
+   txt107 
+TEXDEF txt107 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.5 0.5 RAD 0.03125 
+   txt107 
+TEXDEF txt107 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.5 0.5 APEX 0.484531 0.5 0.5 RAD 0.0078125
+   txt107 
+TEXDEF txt107 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.515469 0.5 APEX 0.375 0.609531 0.5 RAD 0.0078125
+   txt107 
+TEXDEF txt107 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.5 0.515469 APEX 0.375 0.5 0.609531 RAD 0.0078125
+   txt107 
+TEXDEF txt107 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.5 0.625 RAD 0.03125 
+   txt107 
+TEXDEF txt108 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.5 0.625 APEX 0.484531 0.5 0.625 RAD 0.0078125
+   txt108 
+TEXDEF txt108 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.515469 0.625 APEX 0.375 0.609531 0.625 RAD 0.0078125
+   txt108 
+TEXDEF txt108 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.5 0.640469 APEX 0.375 0.5 0.734531 RAD 0.0078125
+   txt108 
+TEXDEF txt108 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.5 0.75 RAD 0.03125 
+   txt108 
+TEXDEF txt108 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.5 0.75 APEX 0.484531 0.5 0.75 RAD 0.0078125
+   txt108 
+TEXDEF txt108 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.515469 0.75 APEX 0.375 0.609531 0.75 RAD 0.0078125
+   txt108 
+TEXDEF txt108 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.5 0.765469 APEX 0.375 0.5 0.859531 RAD 0.0078125
+   txt108 
+TEXDEF txt108 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.5 0.875 RAD 0.03125 
+   txt108 
+TEXDEF txt108 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.5 0.875 APEX 0.484531 0.5 0.875 RAD 0.0078125
+   txt108 
+TEXDEF txt108 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.515469 0.875 APEX 0.375 0.609531 0.875 RAD 0.0078125
+   txt108 
+TEXDEF txt109 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.5 0.890469 APEX 0.375 0.5 0.984531 RAD 0.0078125
+   txt109 
+TEXDEF txt109 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.5 1 RAD 0.03125 
+   txt109 
+TEXDEF txt109 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.5 1 APEX 0.484531 0.5 1 RAD 0.0078125
+   txt109 
+TEXDEF txt109 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.515469 1 APEX 0.375 0.609531 1 RAD 0.0078125
+   txt109 
+TEXDEF txt109 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.625 0 RAD 0.03125 
+   txt109 
+TEXDEF txt109 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.625 0 APEX 0.484531 0.625 0 RAD 0.0078125
+   txt109 
+TEXDEF txt109 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.640469 0 APEX 0.375 0.734531 0 RAD 0.0078125
+   txt109 
+TEXDEF txt109 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.625 0.0154687 APEX 0.375 0.625 0.109531 RAD 0.0078125
+   txt109 
+TEXDEF txt109 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.625 0.125 RAD 0.03125 
+   txt109 
+TEXDEF txt109 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.625 0.125 APEX 0.484531 0.625 0.125 RAD 0.0078125
+   txt109 
+TEXDEF txt110 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.640469 0.125 APEX 0.375 0.734531 0.125 RAD 0.0078125
+   txt110 
+TEXDEF txt110 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.625 0.140469 APEX 0.375 0.625 0.234531 RAD 0.0078125
+   txt110 
+TEXDEF txt110 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.625 0.25 RAD 0.03125 
+   txt110 
+TEXDEF txt110 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.625 0.25 APEX 0.484531 0.625 0.25 RAD 0.0078125
+   txt110 
+TEXDEF txt110 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.640469 0.25 APEX 0.375 0.734531 0.25 RAD 0.0078125
+   txt110 
+TEXDEF txt110 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.625 0.265469 APEX 0.375 0.625 0.359531 RAD 0.0078125
+   txt110 
+TEXDEF txt110 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.625 0.375 RAD 0.03125 
+   txt110 
+TEXDEF txt110 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.625 0.375 APEX 0.484531 0.625 0.375 RAD 0.0078125
+   txt110 
+TEXDEF txt110 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.640469 0.375 APEX 0.375 0.734531 0.375 RAD 0.0078125
+   txt110 
+TEXDEF txt110 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.625 0.390469 APEX 0.375 0.625 0.484531 RAD 0.0078125
+   txt110 
+TEXDEF txt111 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.625 0.5 RAD 0.03125 
+   txt111 
+TEXDEF txt111 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.625 0.5 APEX 0.484531 0.625 0.5 RAD 0.0078125
+   txt111 
+TEXDEF txt111 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.640469 0.5 APEX 0.375 0.734531 0.5 RAD 0.0078125
+   txt111 
+TEXDEF txt111 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.625 0.515469 APEX 0.375 0.625 0.609531 RAD 0.0078125
+   txt111 
+TEXDEF txt111 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.625 0.625 RAD 0.03125 
+   txt111 
+TEXDEF txt111 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.625 0.625 APEX 0.484531 0.625 0.625 RAD 0.0078125
+   txt111 
+TEXDEF txt111 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.640469 0.625 APEX 0.375 0.734531 0.625 RAD 0.0078125
+   txt111 
+TEXDEF txt111 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.625 0.640469 APEX 0.375 0.625 0.734531 RAD 0.0078125
+   txt111 
+TEXDEF txt111 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.625 0.75 RAD 0.03125 
+   txt111 
+TEXDEF txt111 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.625 0.75 APEX 0.484531 0.625 0.75 RAD 0.0078125
+   txt111 
+TEXDEF txt112 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.640469 0.75 APEX 0.375 0.734531 0.75 RAD 0.0078125
+   txt112 
+TEXDEF txt112 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.625 0.765469 APEX 0.375 0.625 0.859531 RAD 0.0078125
+   txt112 
+TEXDEF txt112 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.625 0.875 RAD 0.03125 
+   txt112 
+TEXDEF txt112 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.625 0.875 APEX 0.484531 0.625 0.875 RAD 0.0078125
+   txt112 
+TEXDEF txt112 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.640469 0.875 APEX 0.375 0.734531 0.875 RAD 0.0078125
+   txt112 
+TEXDEF txt112 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.625 0.890469 APEX 0.375 0.625 0.984531 RAD 0.0078125
+   txt112 
+TEXDEF txt112 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.625 1 RAD 0.03125 
+   txt112 
+TEXDEF txt112 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.625 1 APEX 0.484531 0.625 1 RAD 0.0078125
+   txt112 
+TEXDEF txt112 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.640469 1 APEX 0.375 0.734531 1 RAD 0.0078125
+   txt112 
+TEXDEF txt112 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.75 0 RAD 0.03125 
+   txt112 
+TEXDEF txt113 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.75 0 APEX 0.484531 0.75 0 RAD 0.0078125
+   txt113 
+TEXDEF txt113 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.765469 0 APEX 0.375 0.859531 0 RAD 0.0078125
+   txt113 
+TEXDEF txt113 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.75 0.0154687 APEX 0.375 0.75 0.109531 RAD 0.0078125
+   txt113 
+TEXDEF txt113 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.75 0.125 RAD 0.03125 
+   txt113 
+TEXDEF txt113 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.75 0.125 APEX 0.484531 0.75 0.125 RAD 0.0078125
+   txt113 
+TEXDEF txt113 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.765469 0.125 APEX 0.375 0.859531 0.125 RAD 0.0078125
+   txt113 
+TEXDEF txt113 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.75 0.140469 APEX 0.375 0.75 0.234531 RAD 0.0078125
+   txt113 
+TEXDEF txt113 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.75 0.25 RAD 0.03125 
+   txt113 
+TEXDEF txt113 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.75 0.25 APEX 0.484531 0.75 0.25 RAD 0.0078125
+   txt113 
+TEXDEF txt113 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.765469 0.25 APEX 0.375 0.859531 0.25 RAD 0.0078125
+   txt113 
+TEXDEF txt114 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.75 0.265469 APEX 0.375 0.75 0.359531 RAD 0.0078125
+   txt114 
+TEXDEF txt114 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.75 0.375 RAD 0.03125 
+   txt114 
+TEXDEF txt114 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.75 0.375 APEX 0.484531 0.75 0.375 RAD 0.0078125
+   txt114 
+TEXDEF txt114 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.765469 0.375 APEX 0.375 0.859531 0.375 RAD 0.0078125
+   txt114 
+TEXDEF txt114 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.75 0.390469 APEX 0.375 0.75 0.484531 RAD 0.0078125
+   txt114 
+TEXDEF txt114 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.75 0.5 RAD 0.03125 
+   txt114 
+TEXDEF txt114 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.75 0.5 APEX 0.484531 0.75 0.5 RAD 0.0078125
+   txt114 
+TEXDEF txt114 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.765469 0.5 APEX 0.375 0.859531 0.5 RAD 0.0078125
+   txt114 
+TEXDEF txt114 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.75 0.515469 APEX 0.375 0.75 0.609531 RAD 0.0078125
+   txt114 
+TEXDEF txt114 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.75 0.625 RAD 0.03125 
+   txt114 
+TEXDEF txt115 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.75 0.625 APEX 0.484531 0.75 0.625 RAD 0.0078125
+   txt115 
+TEXDEF txt115 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.765469 0.625 APEX 0.375 0.859531 0.625 RAD 0.0078125
+   txt115 
+TEXDEF txt115 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.75 0.640469 APEX 0.375 0.75 0.734531 RAD 0.0078125
+   txt115 
+TEXDEF txt115 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.75 0.75 RAD 0.03125 
+   txt115 
+TEXDEF txt115 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.75 0.75 APEX 0.484531 0.75 0.75 RAD 0.0078125
+   txt115 
+TEXDEF txt115 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.765469 0.75 APEX 0.375 0.859531 0.75 RAD 0.0078125
+   txt115 
+TEXDEF txt115 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.75 0.765469 APEX 0.375 0.75 0.859531 RAD 0.0078125
+   txt115 
+TEXDEF txt115 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.75 0.875 RAD 0.03125 
+   txt115 
+TEXDEF txt115 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.75 0.875 APEX 0.484531 0.75 0.875 RAD 0.0078125
+   txt115 
+TEXDEF txt115 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.765469 0.875 APEX 0.375 0.859531 0.875 RAD 0.0078125
+   txt115 
+TEXDEF txt116 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.75 0.890469 APEX 0.375 0.75 0.984531 RAD 0.0078125
+   txt116 
+TEXDEF txt116 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.75 1 RAD 0.03125 
+   txt116 
+TEXDEF txt116 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.75 1 APEX 0.484531 0.75 1 RAD 0.0078125
+   txt116 
+TEXDEF txt116 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.765469 1 APEX 0.375 0.859531 1 RAD 0.0078125
+   txt116 
+TEXDEF txt116 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.875 0 RAD 0.03125 
+   txt116 
+TEXDEF txt116 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.875 0 APEX 0.484531 0.875 0 RAD 0.0078125
+   txt116 
+TEXDEF txt116 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.890469 0 APEX 0.375 0.984531 0 RAD 0.0078125
+   txt116 
+TEXDEF txt116 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.875 0.0154687 APEX 0.375 0.875 0.109531 RAD 0.0078125
+   txt116 
+TEXDEF txt116 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.875 0.125 RAD 0.03125 
+   txt116 
+TEXDEF txt116 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.875 0.125 APEX 0.484531 0.875 0.125 RAD 0.0078125
+   txt116 
+TEXDEF txt117 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.890469 0.125 APEX 0.375 0.984531 0.125 RAD 0.0078125
+   txt117 
+TEXDEF txt117 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.875 0.140469 APEX 0.375 0.875 0.234531 RAD 0.0078125
+   txt117 
+TEXDEF txt117 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.875 0.25 RAD 0.03125 
+   txt117 
+TEXDEF txt117 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.875 0.25 APEX 0.484531 0.875 0.25 RAD 0.0078125
+   txt117 
+TEXDEF txt117 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.890469 0.25 APEX 0.375 0.984531 0.25 RAD 0.0078125
+   txt117 
+TEXDEF txt117 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.875 0.265469 APEX 0.375 0.875 0.359531 RAD 0.0078125
+   txt117 
+TEXDEF txt117 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.875 0.375 RAD 0.03125 
+   txt117 
+TEXDEF txt117 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.875 0.375 APEX 0.484531 0.875 0.375 RAD 0.0078125
+   txt117 
+TEXDEF txt117 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.890469 0.375 APEX 0.375 0.984531 0.375 RAD 0.0078125
+   txt117 
+TEXDEF txt117 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.875 0.390469 APEX 0.375 0.875 0.484531 RAD 0.0078125
+   txt117 
+TEXDEF txt118 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.875 0.5 RAD 0.03125 
+   txt118 
+TEXDEF txt118 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.875 0.5 APEX 0.484531 0.875 0.5 RAD 0.0078125
+   txt118 
+TEXDEF txt118 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.890469 0.5 APEX 0.375 0.984531 0.5 RAD 0.0078125
+   txt118 
+TEXDEF txt118 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.875 0.515469 APEX 0.375 0.875 0.609531 RAD 0.0078125
+   txt118 
+TEXDEF txt118 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.875 0.625 RAD 0.03125 
+   txt118 
+TEXDEF txt118 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.875 0.625 APEX 0.484531 0.875 0.625 RAD 0.0078125
+   txt118 
+TEXDEF txt118 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.890469 0.625 APEX 0.375 0.984531 0.625 RAD 0.0078125
+   txt118 
+TEXDEF txt118 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.875 0.640469 APEX 0.375 0.875 0.734531 RAD 0.0078125
+   txt118 
+TEXDEF txt118 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.875 0.75 RAD 0.03125 
+   txt118 
+TEXDEF txt118 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.875 0.75 APEX 0.484531 0.875 0.75 RAD 0.0078125
+   txt118 
+TEXDEF txt119 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.890469 0.75 APEX 0.375 0.984531 0.75 RAD 0.0078125
+   txt119 
+TEXDEF txt119 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.875 0.765469 APEX 0.375 0.875 0.859531 RAD 0.0078125
+   txt119 
+TEXDEF txt119 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.875 0.875 RAD 0.03125 
+   txt119 
+TEXDEF txt119 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.875 0.875 APEX 0.484531 0.875 0.875 RAD 0.0078125
+   txt119 
+TEXDEF txt119 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.890469 0.875 APEX 0.375 0.984531 0.875 RAD 0.0078125
+   txt119 
+TEXDEF txt119 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.875 0.890469 APEX 0.375 0.875 0.984531 RAD 0.0078125
+   txt119 
+TEXDEF txt119 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 0.875 1 RAD 0.03125 
+   txt119 
+TEXDEF txt119 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 0.875 1 APEX 0.484531 0.875 1 RAD 0.0078125
+   txt119 
+TEXDEF txt119 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 0.890469 1 APEX 0.375 0.984531 1 RAD 0.0078125
+   txt119 
+TEXDEF txt119 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 1 0 RAD 0.03125 
+   txt119 
+TEXDEF txt120 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 1 0 APEX 0.484531 1 0 RAD 0.0078125
+   txt120 
+TEXDEF txt120 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 1 0.0154687 APEX 0.375 1 0.109531 RAD 0.0078125
+   txt120 
+TEXDEF txt120 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 1 0.125 RAD 0.03125 
+   txt120 
+TEXDEF txt120 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 1 0.125 APEX 0.484531 1 0.125 RAD 0.0078125
+   txt120 
+TEXDEF txt120 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 1 0.140469 APEX 0.375 1 0.234531 RAD 0.0078125
+   txt120 
+TEXDEF txt120 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 1 0.25 RAD 0.03125 
+   txt120 
+TEXDEF txt120 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 1 0.25 APEX 0.484531 1 0.25 RAD 0.0078125
+   txt120 
+TEXDEF txt120 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 1 0.265469 APEX 0.375 1 0.359531 RAD 0.0078125
+   txt120 
+TEXDEF txt120 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 1 0.375 RAD 0.03125 
+   txt120 
+TEXDEF txt120 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 1 0.375 APEX 0.484531 1 0.375 RAD 0.0078125
+   txt120 
+TEXDEF txt121 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 1 0.390469 APEX 0.375 1 0.484531 RAD 0.0078125
+   txt121 
+TEXDEF txt121 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 1 0.5 RAD 0.03125 
+   txt121 
+TEXDEF txt121 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 1 0.5 APEX 0.484531 1 0.5 RAD 0.0078125
+   txt121 
+TEXDEF txt121 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 1 0.515469 APEX 0.375 1 0.609531 RAD 0.0078125
+   txt121 
+TEXDEF txt121 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 1 0.625 RAD 0.03125 
+   txt121 
+TEXDEF txt121 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 1 0.625 APEX 0.484531 1 0.625 RAD 0.0078125
+   txt121 
+TEXDEF txt121 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 1 0.640469 APEX 0.375 1 0.734531 RAD 0.0078125
+   txt121 
+TEXDEF txt121 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 1 0.75 RAD 0.03125 
+   txt121 
+TEXDEF txt121 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 1 0.75 APEX 0.484531 1 0.75 RAD 0.0078125
+   txt121 
+TEXDEF txt121 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 1 0.765469 APEX 0.375 1 0.859531 RAD 0.0078125
+   txt121 
+TEXDEF txt122 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 1 0.875 RAD 0.03125 
+   txt122 
+TEXDEF txt122 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 1 0.875 APEX 0.484531 1 0.875 RAD 0.0078125
+   txt122 
+TEXDEF txt122 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.375 1 0.890469 APEX 0.375 1 0.984531 RAD 0.0078125
+   txt122 
+TEXDEF txt122 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.375 1 1 RAD 0.03125 
+   txt122 
+TEXDEF txt122 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.390469 1 1 APEX 0.484531 1 1 RAD 0.0078125
+   txt122 
+TEXDEF txt122 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0 0 RAD 0.03125 
+   txt122 
+TEXDEF txt122 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0 0 APEX 0.609531 0 0 RAD 0.0078125
+   txt122 
+TEXDEF txt122 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.0154687 0 APEX 0.5 0.109531 0 RAD 0.0078125
+   txt122 
+TEXDEF txt122 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0 0.0154687 APEX 0.5 0 0.109531 RAD 0.0078125
+   txt122 
+TEXDEF txt122 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0 0.125 RAD 0.03125 
+   txt122 
+TEXDEF txt123 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0 0.125 APEX 0.609531 0 0.125 RAD 0.0078125
+   txt123 
+TEXDEF txt123 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.125 APEX 0.5 0.109531 0.125 RAD 0.0078125
+   txt123 
+TEXDEF txt123 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0 0.140469 APEX 0.5 0 0.234531 RAD 0.0078125
+   txt123 
+TEXDEF txt123 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0 0.25 RAD 0.03125 
+   txt123 
+TEXDEF txt123 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0 0.25 APEX 0.609531 0 0.25 RAD 0.0078125
+   txt123 
+TEXDEF txt123 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.25 APEX 0.5 0.109531 0.25 RAD 0.0078125
+   txt123 
+TEXDEF txt123 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0 0.265469 APEX 0.5 0 0.359531 RAD 0.0078125
+   txt123 
+TEXDEF txt123 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0 0.375 RAD 0.03125 
+   txt123 
+TEXDEF txt123 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0 0.375 APEX 0.609531 0 0.375 RAD 0.0078125
+   txt123 
+TEXDEF txt123 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.375 APEX 0.5 0.109531 0.375 RAD 0.0078125
+   txt123 
+TEXDEF txt124 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0 0.390469 APEX 0.5 0 0.484531 RAD 0.0078125
+   txt124 
+TEXDEF txt124 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0 0.5 RAD 0.03125 
+   txt124 
+TEXDEF txt124 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0 0.5 APEX 0.609531 0 0.5 RAD 0.0078125
+   txt124 
+TEXDEF txt124 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.5 APEX 0.5 0.109531 0.5 RAD 0.0078125
+   txt124 
+TEXDEF txt124 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0 0.515469 APEX 0.5 0 0.609531 RAD 0.0078125
+   txt124 
+TEXDEF txt124 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0 0.625 RAD 0.03125 
+   txt124 
+TEXDEF txt124 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0 0.625 APEX 0.609531 0 0.625 RAD 0.0078125
+   txt124 
+TEXDEF txt124 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.625 APEX 0.5 0.109531 0.625 RAD 0.0078125
+   txt124 
+TEXDEF txt124 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0 0.640469 APEX 0.5 0 0.734531 RAD 0.0078125
+   txt124 
+TEXDEF txt124 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0 0.75 RAD 0.03125 
+   txt124 
+TEXDEF txt125 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0 0.75 APEX 0.609531 0 0.75 RAD 0.0078125
+   txt125 
+TEXDEF txt125 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.75 APEX 0.5 0.109531 0.75 RAD 0.0078125
+   txt125 
+TEXDEF txt125 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0 0.765469 APEX 0.5 0 0.859531 RAD 0.0078125
+   txt125 
+TEXDEF txt125 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0 0.875 RAD 0.03125 
+   txt125 
+TEXDEF txt125 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0 0.875 APEX 0.609531 0 0.875 RAD 0.0078125
+   txt125 
+TEXDEF txt125 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.875 APEX 0.5 0.109531 0.875 RAD 0.0078125
+   txt125 
+TEXDEF txt125 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0 0.890469 APEX 0.5 0 0.984531 RAD 0.0078125
+   txt125 
+TEXDEF txt125 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0 1 RAD 0.03125 
+   txt125 
+TEXDEF txt125 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0 1 APEX 0.609531 0 1 RAD 0.0078125
+   txt125 
+TEXDEF txt125 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.0154687 1 APEX 0.5 0.109531 1 RAD 0.0078125
+   txt125 
+TEXDEF txt126 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.125 0 RAD 0.03125 
+   txt126 
+TEXDEF txt126 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.125 0 APEX 0.609531 0.125 0 RAD 0.0078125
+   txt126 
+TEXDEF txt126 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.140469 0 APEX 0.5 0.234531 0 RAD 0.0078125
+   txt126 
+TEXDEF txt126 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.125 0.0154687 APEX 0.5 0.125 0.109531 RAD 0.0078125
+   txt126 
+TEXDEF txt126 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.125 0.125 RAD 0.03125 
+   txt126 
+TEXDEF txt126 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.125 0.125 APEX 0.609531 0.125 0.125 RAD 0.0078125
+   txt126 
+TEXDEF txt126 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.140469 0.125 APEX 0.5 0.234531 0.125 RAD 0.0078125
+   txt126 
+TEXDEF txt126 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.125 0.140469 APEX 0.5 0.125 0.234531 RAD 0.0078125
+   txt126 
+TEXDEF txt126 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.125 0.25 RAD 0.03125 
+   txt126 
+TEXDEF txt126 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.125 0.25 APEX 0.609531 0.125 0.25 RAD 0.0078125
+   txt126 
+TEXDEF txt127 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.140469 0.25 APEX 0.5 0.234531 0.25 RAD 0.0078125
+   txt127 
+TEXDEF txt127 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.125 0.265469 APEX 0.5 0.125 0.359531 RAD 0.0078125
+   txt127 
+TEXDEF txt127 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.125 0.375 RAD 0.03125 
+   txt127 
+TEXDEF txt127 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.125 0.375 APEX 0.609531 0.125 0.375 RAD 0.0078125
+   txt127 
+TEXDEF txt127 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.140469 0.375 APEX 0.5 0.234531 0.375 RAD 0.0078125
+   txt127 
+TEXDEF txt127 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.125 0.390469 APEX 0.5 0.125 0.484531 RAD 0.0078125
+   txt127 
+TEXDEF txt127 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.125 0.5 RAD 0.03125 
+   txt127 
+TEXDEF txt127 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.125 0.5 APEX 0.609531 0.125 0.5 RAD 0.0078125
+   txt127 
+TEXDEF txt127 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.140469 0.5 APEX 0.5 0.234531 0.5 RAD 0.0078125
+   txt127 
+TEXDEF txt127 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.125 0.515469 APEX 0.5 0.125 0.609531 RAD 0.0078125
+   txt127 
+TEXDEF txt128 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.125 0.625 RAD 0.03125 
+   txt128 
+TEXDEF txt128 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.125 0.625 APEX 0.609531 0.125 0.625 RAD 0.0078125
+   txt128 
+TEXDEF txt128 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.140469 0.625 APEX 0.5 0.234531 0.625 RAD 0.0078125
+   txt128 
+TEXDEF txt128 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.125 0.640469 APEX 0.5 0.125 0.734531 RAD 0.0078125
+   txt128 
+TEXDEF txt128 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.125 0.75 RAD 0.03125 
+   txt128 
+TEXDEF txt128 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.125 0.75 APEX 0.609531 0.125 0.75 RAD 0.0078125
+   txt128 
+TEXDEF txt128 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.140469 0.75 APEX 0.5 0.234531 0.75 RAD 0.0078125
+   txt128 
+TEXDEF txt128 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.125 0.765469 APEX 0.5 0.125 0.859531 RAD 0.0078125
+   txt128 
+TEXDEF txt128 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.125 0.875 RAD 0.03125 
+   txt128 
+TEXDEF txt128 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.125 0.875 APEX 0.609531 0.125 0.875 RAD 0.0078125
+   txt128 
+TEXDEF txt129 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.140469 0.875 APEX 0.5 0.234531 0.875 RAD 0.0078125
+   txt129 
+TEXDEF txt129 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.125 0.890469 APEX 0.5 0.125 0.984531 RAD 0.0078125
+   txt129 
+TEXDEF txt129 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.125 1 RAD 0.03125 
+   txt129 
+TEXDEF txt129 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.125 1 APEX 0.609531 0.125 1 RAD 0.0078125
+   txt129 
+TEXDEF txt129 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.140469 1 APEX 0.5 0.234531 1 RAD 0.0078125
+   txt129 
+TEXDEF txt129 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.25 0 RAD 0.03125 
+   txt129 
+TEXDEF txt129 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.25 0 APEX 0.609531 0.25 0 RAD 0.0078125
+   txt129 
+TEXDEF txt129 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.265469 0 APEX 0.5 0.359531 0 RAD 0.0078125
+   txt129 
+TEXDEF txt129 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.25 0.0154687 APEX 0.5 0.25 0.109531 RAD 0.0078125
+   txt129 
+TEXDEF txt129 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.25 0.125 RAD 0.03125 
+   txt129 
+TEXDEF txt130 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.25 0.125 APEX 0.609531 0.25 0.125 RAD 0.0078125
+   txt130 
+TEXDEF txt130 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.265469 0.125 APEX 0.5 0.359531 0.125 RAD 0.0078125
+   txt130 
+TEXDEF txt130 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.25 0.140469 APEX 0.5 0.25 0.234531 RAD 0.0078125
+   txt130 
+TEXDEF txt130 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.25 0.25 RAD 0.03125 
+   txt130 
+TEXDEF txt130 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.25 0.25 APEX 0.609531 0.25 0.25 RAD 0.0078125
+   txt130 
+TEXDEF txt130 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.265469 0.25 APEX 0.5 0.359531 0.25 RAD 0.0078125
+   txt130 
+TEXDEF txt130 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.25 0.265469 APEX 0.5 0.25 0.359531 RAD 0.0078125
+   txt130 
+TEXDEF txt130 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.25 0.375 RAD 0.03125 
+   txt130 
+TEXDEF txt130 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.25 0.375 APEX 0.609531 0.25 0.375 RAD 0.0078125
+   txt130 
+TEXDEF txt130 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.265469 0.375 APEX 0.5 0.359531 0.375 RAD 0.0078125
+   txt130 
+TEXDEF txt131 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.25 0.390469 APEX 0.5 0.25 0.484531 RAD 0.0078125
+   txt131 
+TEXDEF txt131 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.25 0.5 RAD 0.03125 
+   txt131 
+TEXDEF txt131 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.25 0.5 APEX 0.609531 0.25 0.5 RAD 0.0078125
+   txt131 
+TEXDEF txt131 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.265469 0.5 APEX 0.5 0.359531 0.5 RAD 0.0078125
+   txt131 
+TEXDEF txt131 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.25 0.515469 APEX 0.5 0.25 0.609531 RAD 0.0078125
+   txt131 
+TEXDEF txt131 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.25 0.625 RAD 0.03125 
+   txt131 
+TEXDEF txt131 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.25 0.625 APEX 0.609531 0.25 0.625 RAD 0.0078125
+   txt131 
+TEXDEF txt131 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.265469 0.625 APEX 0.5 0.359531 0.625 RAD 0.0078125
+   txt131 
+TEXDEF txt131 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.25 0.640469 APEX 0.5 0.25 0.734531 RAD 0.0078125
+   txt131 
+TEXDEF txt131 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.25 0.75 RAD 0.03125 
+   txt131 
+TEXDEF txt132 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.25 0.75 APEX 0.609531 0.25 0.75 RAD 0.0078125
+   txt132 
+TEXDEF txt132 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.265469 0.75 APEX 0.5 0.359531 0.75 RAD 0.0078125
+   txt132 
+TEXDEF txt132 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.25 0.765469 APEX 0.5 0.25 0.859531 RAD 0.0078125
+   txt132 
+TEXDEF txt132 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.25 0.875 RAD 0.03125 
+   txt132 
+TEXDEF txt132 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.25 0.875 APEX 0.609531 0.25 0.875 RAD 0.0078125
+   txt132 
+TEXDEF txt132 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.265469 0.875 APEX 0.5 0.359531 0.875 RAD 0.0078125
+   txt132 
+TEXDEF txt132 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.25 0.890469 APEX 0.5 0.25 0.984531 RAD 0.0078125
+   txt132 
+TEXDEF txt132 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.25 1 RAD 0.03125 
+   txt132 
+TEXDEF txt132 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.25 1 APEX 0.609531 0.25 1 RAD 0.0078125
+   txt132 
+TEXDEF txt132 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.265469 1 APEX 0.5 0.359531 1 RAD 0.0078125
+   txt132 
+TEXDEF txt133 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.375 0 RAD 0.03125 
+   txt133 
+TEXDEF txt133 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.375 0 APEX 0.609531 0.375 0 RAD 0.0078125
+   txt133 
+TEXDEF txt133 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.390469 0 APEX 0.5 0.484531 0 RAD 0.0078125
+   txt133 
+TEXDEF txt133 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.375 0.0154687 APEX 0.5 0.375 0.109531 RAD 0.0078125
+   txt133 
+TEXDEF txt133 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.375 0.125 RAD 0.03125 
+   txt133 
+TEXDEF txt133 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.375 0.125 APEX 0.609531 0.375 0.125 RAD 0.0078125
+   txt133 
+TEXDEF txt133 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.390469 0.125 APEX 0.5 0.484531 0.125 RAD 0.0078125
+   txt133 
+TEXDEF txt133 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.375 0.140469 APEX 0.5 0.375 0.234531 RAD 0.0078125
+   txt133 
+TEXDEF txt133 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.375 0.25 RAD 0.03125 
+   txt133 
+TEXDEF txt133 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.375 0.25 APEX 0.609531 0.375 0.25 RAD 0.0078125
+   txt133 
+TEXDEF txt134 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.390469 0.25 APEX 0.5 0.484531 0.25 RAD 0.0078125
+   txt134 
+TEXDEF txt134 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.375 0.265469 APEX 0.5 0.375 0.359531 RAD 0.0078125
+   txt134 
+TEXDEF txt134 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.375 0.375 RAD 0.03125 
+   txt134 
+TEXDEF txt134 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.375 0.375 APEX 0.609531 0.375 0.375 RAD 0.0078125
+   txt134 
+TEXDEF txt134 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.390469 0.375 APEX 0.5 0.484531 0.375 RAD 0.0078125
+   txt134 
+TEXDEF txt134 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.375 0.390469 APEX 0.5 0.375 0.484531 RAD 0.0078125
+   txt134 
+TEXDEF txt134 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.375 0.5 RAD 0.03125 
+   txt134 
+TEXDEF txt134 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.375 0.5 APEX 0.609531 0.375 0.5 RAD 0.0078125
+   txt134 
+TEXDEF txt134 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.390469 0.5 APEX 0.5 0.484531 0.5 RAD 0.0078125
+   txt134 
+TEXDEF txt134 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.375 0.515469 APEX 0.5 0.375 0.609531 RAD 0.0078125
+   txt134 
+TEXDEF txt135 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.375 0.625 RAD 0.03125 
+   txt135 
+TEXDEF txt135 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.375 0.625 APEX 0.609531 0.375 0.625 RAD 0.0078125
+   txt135 
+TEXDEF txt135 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.390469 0.625 APEX 0.5 0.484531 0.625 RAD 0.0078125
+   txt135 
+TEXDEF txt135 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.375 0.640469 APEX 0.5 0.375 0.734531 RAD 0.0078125
+   txt135 
+TEXDEF txt135 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.375 0.75 RAD 0.03125 
+   txt135 
+TEXDEF txt135 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.375 0.75 APEX 0.609531 0.375 0.75 RAD 0.0078125
+   txt135 
+TEXDEF txt135 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.390469 0.75 APEX 0.5 0.484531 0.75 RAD 0.0078125
+   txt135 
+TEXDEF txt135 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.375 0.765469 APEX 0.5 0.375 0.859531 RAD 0.0078125
+   txt135 
+TEXDEF txt135 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.375 0.875 RAD 0.03125 
+   txt135 
+TEXDEF txt135 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.375 0.875 APEX 0.609531 0.375 0.875 RAD 0.0078125
+   txt135 
+TEXDEF txt136 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.390469 0.875 APEX 0.5 0.484531 0.875 RAD 0.0078125
+   txt136 
+TEXDEF txt136 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.375 0.890469 APEX 0.5 0.375 0.984531 RAD 0.0078125
+   txt136 
+TEXDEF txt136 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.375 1 RAD 0.03125 
+   txt136 
+TEXDEF txt136 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.375 1 APEX 0.609531 0.375 1 RAD 0.0078125
+   txt136 
+TEXDEF txt136 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.390469 1 APEX 0.5 0.484531 1 RAD 0.0078125
+   txt136 
+TEXDEF txt136 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.5 0 RAD 0.03125 
+   txt136 
+TEXDEF txt136 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.5 0 APEX 0.609531 0.5 0 RAD 0.0078125
+   txt136 
+TEXDEF txt136 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.515469 0 APEX 0.5 0.609531 0 RAD 0.0078125
+   txt136 
+TEXDEF txt136 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.5 0.0154687 APEX 0.5 0.5 0.109531 RAD 0.0078125
+   txt136 
+TEXDEF txt136 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.5 0.125 RAD 0.03125 
+   txt136 
+TEXDEF txt137 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.5 0.125 APEX 0.609531 0.5 0.125 RAD 0.0078125
+   txt137 
+TEXDEF txt137 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.515469 0.125 APEX 0.5 0.609531 0.125 RAD 0.0078125
+   txt137 
+TEXDEF txt137 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.5 0.140469 APEX 0.5 0.5 0.234531 RAD 0.0078125
+   txt137 
+TEXDEF txt137 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.5 0.25 RAD 0.03125 
+   txt137 
+TEXDEF txt137 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.5 0.25 APEX 0.609531 0.5 0.25 RAD 0.0078125
+   txt137 
+TEXDEF txt137 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.515469 0.25 APEX 0.5 0.609531 0.25 RAD 0.0078125
+   txt137 
+TEXDEF txt137 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.5 0.265469 APEX 0.5 0.5 0.359531 RAD 0.0078125
+   txt137 
+TEXDEF txt137 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.5 0.375 RAD 0.03125 
+   txt137 
+TEXDEF txt137 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.5 0.375 APEX 0.609531 0.5 0.375 RAD 0.0078125
+   txt137 
+TEXDEF txt137 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.515469 0.375 APEX 0.5 0.609531 0.375 RAD 0.0078125
+   txt137 
+TEXDEF txt138 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.5 0.390469 APEX 0.5 0.5 0.484531 RAD 0.0078125
+   txt138 
+TEXDEF txt138 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.5 0.5 RAD 0.03125 
+   txt138 
+TEXDEF txt138 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.5 0.5 APEX 0.609531 0.5 0.5 RAD 0.0078125
+   txt138 
+TEXDEF txt138 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.515469 0.5 APEX 0.5 0.609531 0.5 RAD 0.0078125
+   txt138 
+TEXDEF txt138 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.5 0.515469 APEX 0.5 0.5 0.609531 RAD 0.0078125
+   txt138 
+TEXDEF txt138 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.5 0.625 RAD 0.03125 
+   txt138 
+TEXDEF txt138 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.5 0.625 APEX 0.609531 0.5 0.625 RAD 0.0078125
+   txt138 
+TEXDEF txt138 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.515469 0.625 APEX 0.5 0.609531 0.625 RAD 0.0078125
+   txt138 
+TEXDEF txt138 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.5 0.640469 APEX 0.5 0.5 0.734531 RAD 0.0078125
+   txt138 
+TEXDEF txt138 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.5 0.75 RAD 0.03125 
+   txt138 
+TEXDEF txt139 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.5 0.75 APEX 0.609531 0.5 0.75 RAD 0.0078125
+   txt139 
+TEXDEF txt139 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.515469 0.75 APEX 0.5 0.609531 0.75 RAD 0.0078125
+   txt139 
+TEXDEF txt139 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.5 0.765469 APEX 0.5 0.5 0.859531 RAD 0.0078125
+   txt139 
+TEXDEF txt139 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.5 0.875 RAD 0.03125 
+   txt139 
+TEXDEF txt139 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.5 0.875 APEX 0.609531 0.5 0.875 RAD 0.0078125
+   txt139 
+TEXDEF txt139 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.515469 0.875 APEX 0.5 0.609531 0.875 RAD 0.0078125
+   txt139 
+TEXDEF txt139 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.5 0.890469 APEX 0.5 0.5 0.984531 RAD 0.0078125
+   txt139 
+TEXDEF txt139 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.5 1 RAD 0.03125 
+   txt139 
+TEXDEF txt139 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.5 1 APEX 0.609531 0.5 1 RAD 0.0078125
+   txt139 
+TEXDEF txt139 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.515469 1 APEX 0.5 0.609531 1 RAD 0.0078125
+   txt139 
+TEXDEF txt140 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.625 0 RAD 0.03125 
+   txt140 
+TEXDEF txt140 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.625 0 APEX 0.609531 0.625 0 RAD 0.0078125
+   txt140 
+TEXDEF txt140 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.640469 0 APEX 0.5 0.734531 0 RAD 0.0078125
+   txt140 
+TEXDEF txt140 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.625 0.0154687 APEX 0.5 0.625 0.109531 RAD 0.0078125
+   txt140 
+TEXDEF txt140 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.625 0.125 RAD 0.03125 
+   txt140 
+TEXDEF txt140 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.625 0.125 APEX 0.609531 0.625 0.125 RAD 0.0078125
+   txt140 
+TEXDEF txt140 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.640469 0.125 APEX 0.5 0.734531 0.125 RAD 0.0078125
+   txt140 
+TEXDEF txt140 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.625 0.140469 APEX 0.5 0.625 0.234531 RAD 0.0078125
+   txt140 
+TEXDEF txt140 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.625 0.25 RAD 0.03125 
+   txt140 
+TEXDEF txt140 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.625 0.25 APEX 0.609531 0.625 0.25 RAD 0.0078125
+   txt140 
+TEXDEF txt141 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.640469 0.25 APEX 0.5 0.734531 0.25 RAD 0.0078125
+   txt141 
+TEXDEF txt141 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.625 0.265469 APEX 0.5 0.625 0.359531 RAD 0.0078125
+   txt141 
+TEXDEF txt141 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.625 0.375 RAD 0.03125 
+   txt141 
+TEXDEF txt141 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.625 0.375 APEX 0.609531 0.625 0.375 RAD 0.0078125
+   txt141 
+TEXDEF txt141 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.640469 0.375 APEX 0.5 0.734531 0.375 RAD 0.0078125
+   txt141 
+TEXDEF txt141 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.625 0.390469 APEX 0.5 0.625 0.484531 RAD 0.0078125
+   txt141 
+TEXDEF txt141 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.625 0.5 RAD 0.03125 
+   txt141 
+TEXDEF txt141 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.625 0.5 APEX 0.609531 0.625 0.5 RAD 0.0078125
+   txt141 
+TEXDEF txt141 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.640469 0.5 APEX 0.5 0.734531 0.5 RAD 0.0078125
+   txt141 
+TEXDEF txt141 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.625 0.515469 APEX 0.5 0.625 0.609531 RAD 0.0078125
+   txt141 
+TEXDEF txt142 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.625 0.625 RAD 0.03125 
+   txt142 
+TEXDEF txt142 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.625 0.625 APEX 0.609531 0.625 0.625 RAD 0.0078125
+   txt142 
+TEXDEF txt142 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.640469 0.625 APEX 0.5 0.734531 0.625 RAD 0.0078125
+   txt142 
+TEXDEF txt142 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.625 0.640469 APEX 0.5 0.625 0.734531 RAD 0.0078125
+   txt142 
+TEXDEF txt142 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.625 0.75 RAD 0.03125 
+   txt142 
+TEXDEF txt142 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.625 0.75 APEX 0.609531 0.625 0.75 RAD 0.0078125
+   txt142 
+TEXDEF txt142 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.640469 0.75 APEX 0.5 0.734531 0.75 RAD 0.0078125
+   txt142 
+TEXDEF txt142 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.625 0.765469 APEX 0.5 0.625 0.859531 RAD 0.0078125
+   txt142 
+TEXDEF txt142 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.625 0.875 RAD 0.03125 
+   txt142 
+TEXDEF txt142 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.625 0.875 APEX 0.609531 0.625 0.875 RAD 0.0078125
+   txt142 
+TEXDEF txt143 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.640469 0.875 APEX 0.5 0.734531 0.875 RAD 0.0078125
+   txt143 
+TEXDEF txt143 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.625 0.890469 APEX 0.5 0.625 0.984531 RAD 0.0078125
+   txt143 
+TEXDEF txt143 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.625 1 RAD 0.03125 
+   txt143 
+TEXDEF txt143 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.625 1 APEX 0.609531 0.625 1 RAD 0.0078125
+   txt143 
+TEXDEF txt143 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.640469 1 APEX 0.5 0.734531 1 RAD 0.0078125
+   txt143 
+TEXDEF txt143 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.75 0 RAD 0.03125 
+   txt143 
+TEXDEF txt143 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.75 0 APEX 0.609531 0.75 0 RAD 0.0078125
+   txt143 
+TEXDEF txt143 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.765469 0 APEX 0.5 0.859531 0 RAD 0.0078125
+   txt143 
+TEXDEF txt143 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.75 0.0154687 APEX 0.5 0.75 0.109531 RAD 0.0078125
+   txt143 
+TEXDEF txt143 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.75 0.125 RAD 0.03125 
+   txt143 
+TEXDEF txt144 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.75 0.125 APEX 0.609531 0.75 0.125 RAD 0.0078125
+   txt144 
+TEXDEF txt144 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.765469 0.125 APEX 0.5 0.859531 0.125 RAD 0.0078125
+   txt144 
+TEXDEF txt144 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.75 0.140469 APEX 0.5 0.75 0.234531 RAD 0.0078125
+   txt144 
+TEXDEF txt144 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.75 0.25 RAD 0.03125 
+   txt144 
+TEXDEF txt144 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.75 0.25 APEX 0.609531 0.75 0.25 RAD 0.0078125
+   txt144 
+TEXDEF txt144 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.765469 0.25 APEX 0.5 0.859531 0.25 RAD 0.0078125
+   txt144 
+TEXDEF txt144 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.75 0.265469 APEX 0.5 0.75 0.359531 RAD 0.0078125
+   txt144 
+TEXDEF txt144 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.75 0.375 RAD 0.03125 
+   txt144 
+TEXDEF txt144 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.75 0.375 APEX 0.609531 0.75 0.375 RAD 0.0078125
+   txt144 
+TEXDEF txt144 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.765469 0.375 APEX 0.5 0.859531 0.375 RAD 0.0078125
+   txt144 
+TEXDEF txt145 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.75 0.390469 APEX 0.5 0.75 0.484531 RAD 0.0078125
+   txt145 
+TEXDEF txt145 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.75 0.5 RAD 0.03125 
+   txt145 
+TEXDEF txt145 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.75 0.5 APEX 0.609531 0.75 0.5 RAD 0.0078125
+   txt145 
+TEXDEF txt145 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.765469 0.5 APEX 0.5 0.859531 0.5 RAD 0.0078125
+   txt145 
+TEXDEF txt145 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.75 0.515469 APEX 0.5 0.75 0.609531 RAD 0.0078125
+   txt145 
+TEXDEF txt145 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.75 0.625 RAD 0.03125 
+   txt145 
+TEXDEF txt145 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.75 0.625 APEX 0.609531 0.75 0.625 RAD 0.0078125
+   txt145 
+TEXDEF txt145 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.765469 0.625 APEX 0.5 0.859531 0.625 RAD 0.0078125
+   txt145 
+TEXDEF txt145 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.75 0.640469 APEX 0.5 0.75 0.734531 RAD 0.0078125
+   txt145 
+TEXDEF txt145 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.75 0.75 RAD 0.03125 
+   txt145 
+TEXDEF txt146 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.75 0.75 APEX 0.609531 0.75 0.75 RAD 0.0078125
+   txt146 
+TEXDEF txt146 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.765469 0.75 APEX 0.5 0.859531 0.75 RAD 0.0078125
+   txt146 
+TEXDEF txt146 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.75 0.765469 APEX 0.5 0.75 0.859531 RAD 0.0078125
+   txt146 
+TEXDEF txt146 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.75 0.875 RAD 0.03125 
+   txt146 
+TEXDEF txt146 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.75 0.875 APEX 0.609531 0.75 0.875 RAD 0.0078125
+   txt146 
+TEXDEF txt146 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.765469 0.875 APEX 0.5 0.859531 0.875 RAD 0.0078125
+   txt146 
+TEXDEF txt146 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.75 0.890469 APEX 0.5 0.75 0.984531 RAD 0.0078125
+   txt146 
+TEXDEF txt146 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.75 1 RAD 0.03125 
+   txt146 
+TEXDEF txt146 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.75 1 APEX 0.609531 0.75 1 RAD 0.0078125
+   txt146 
+TEXDEF txt146 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.765469 1 APEX 0.5 0.859531 1 RAD 0.0078125
+   txt146 
+TEXDEF txt147 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.875 0 RAD 0.03125 
+   txt147 
+TEXDEF txt147 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.875 0 APEX 0.609531 0.875 0 RAD 0.0078125
+   txt147 
+TEXDEF txt147 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.890469 0 APEX 0.5 0.984531 0 RAD 0.0078125
+   txt147 
+TEXDEF txt147 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.875 0.0154687 APEX 0.5 0.875 0.109531 RAD 0.0078125
+   txt147 
+TEXDEF txt147 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.875 0.125 RAD 0.03125 
+   txt147 
+TEXDEF txt147 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.875 0.125 APEX 0.609531 0.875 0.125 RAD 0.0078125
+   txt147 
+TEXDEF txt147 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.890469 0.125 APEX 0.5 0.984531 0.125 RAD 0.0078125
+   txt147 
+TEXDEF txt147 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.875 0.140469 APEX 0.5 0.875 0.234531 RAD 0.0078125
+   txt147 
+TEXDEF txt147 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.875 0.25 RAD 0.03125 
+   txt147 
+TEXDEF txt147 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.875 0.25 APEX 0.609531 0.875 0.25 RAD 0.0078125
+   txt147 
+TEXDEF txt148 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.890469 0.25 APEX 0.5 0.984531 0.25 RAD 0.0078125
+   txt148 
+TEXDEF txt148 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.875 0.265469 APEX 0.5 0.875 0.359531 RAD 0.0078125
+   txt148 
+TEXDEF txt148 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.875 0.375 RAD 0.03125 
+   txt148 
+TEXDEF txt148 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.875 0.375 APEX 0.609531 0.875 0.375 RAD 0.0078125
+   txt148 
+TEXDEF txt148 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.890469 0.375 APEX 0.5 0.984531 0.375 RAD 0.0078125
+   txt148 
+TEXDEF txt148 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.875 0.390469 APEX 0.5 0.875 0.484531 RAD 0.0078125
+   txt148 
+TEXDEF txt148 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.875 0.5 RAD 0.03125 
+   txt148 
+TEXDEF txt148 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.875 0.5 APEX 0.609531 0.875 0.5 RAD 0.0078125
+   txt148 
+TEXDEF txt148 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.890469 0.5 APEX 0.5 0.984531 0.5 RAD 0.0078125
+   txt148 
+TEXDEF txt148 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.875 0.515469 APEX 0.5 0.875 0.609531 RAD 0.0078125
+   txt148 
+TEXDEF txt149 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.875 0.625 RAD 0.03125 
+   txt149 
+TEXDEF txt149 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.875 0.625 APEX 0.609531 0.875 0.625 RAD 0.0078125
+   txt149 
+TEXDEF txt149 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.890469 0.625 APEX 0.5 0.984531 0.625 RAD 0.0078125
+   txt149 
+TEXDEF txt149 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.875 0.640469 APEX 0.5 0.875 0.734531 RAD 0.0078125
+   txt149 
+TEXDEF txt149 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.875 0.75 RAD 0.03125 
+   txt149 
+TEXDEF txt149 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.875 0.75 APEX 0.609531 0.875 0.75 RAD 0.0078125
+   txt149 
+TEXDEF txt149 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.890469 0.75 APEX 0.5 0.984531 0.75 RAD 0.0078125
+   txt149 
+TEXDEF txt149 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.875 0.765469 APEX 0.5 0.875 0.859531 RAD 0.0078125
+   txt149 
+TEXDEF txt149 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.875 0.875 RAD 0.03125 
+   txt149 
+TEXDEF txt149 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.875 0.875 APEX 0.609531 0.875 0.875 RAD 0.0078125
+   txt149 
+TEXDEF txt150 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.890469 0.875 APEX 0.5 0.984531 0.875 RAD 0.0078125
+   txt150 
+TEXDEF txt150 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.875 0.890469 APEX 0.5 0.875 0.984531 RAD 0.0078125
+   txt150 
+TEXDEF txt150 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 0.875 1 RAD 0.03125 
+   txt150 
+TEXDEF txt150 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 0.875 1 APEX 0.609531 0.875 1 RAD 0.0078125
+   txt150 
+TEXDEF txt150 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 0.890469 1 APEX 0.5 0.984531 1 RAD 0.0078125
+   txt150 
+TEXDEF txt150 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 1 0 RAD 0.03125 
+   txt150 
+TEXDEF txt150 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 1 0 APEX 0.609531 1 0 RAD 0.0078125
+   txt150 
+TEXDEF txt150 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 1 0.0154687 APEX 0.5 1 0.109531 RAD 0.0078125
+   txt150 
+TEXDEF txt150 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 1 0.125 RAD 0.03125 
+   txt150 
+TEXDEF txt150 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 1 0.125 APEX 0.609531 1 0.125 RAD 0.0078125
+   txt150 
+TEXDEF txt151 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 1 0.140469 APEX 0.5 1 0.234531 RAD 0.0078125
+   txt151 
+TEXDEF txt151 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 1 0.25 RAD 0.03125 
+   txt151 
+TEXDEF txt151 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 1 0.25 APEX 0.609531 1 0.25 RAD 0.0078125
+   txt151 
+TEXDEF txt151 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 1 0.265469 APEX 0.5 1 0.359531 RAD 0.0078125
+   txt151 
+TEXDEF txt151 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 1 0.375 RAD 0.03125 
+   txt151 
+TEXDEF txt151 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 1 0.375 APEX 0.609531 1 0.375 RAD 0.0078125
+   txt151 
+TEXDEF txt151 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 1 0.390469 APEX 0.5 1 0.484531 RAD 0.0078125
+   txt151 
+TEXDEF txt151 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 1 0.5 RAD 0.03125 
+   txt151 
+TEXDEF txt151 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 1 0.5 APEX 0.609531 1 0.5 RAD 0.0078125
+   txt151 
+TEXDEF txt151 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 1 0.515469 APEX 0.5 1 0.609531 RAD 0.0078125
+   txt151 
+TEXDEF txt152 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 1 0.625 RAD 0.03125 
+   txt152 
+TEXDEF txt152 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 1 0.625 APEX 0.609531 1 0.625 RAD 0.0078125
+   txt152 
+TEXDEF txt152 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 1 0.640469 APEX 0.5 1 0.734531 RAD 0.0078125
+   txt152 
+TEXDEF txt152 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 1 0.75 RAD 0.03125 
+   txt152 
+TEXDEF txt152 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 1 0.75 APEX 0.609531 1 0.75 RAD 0.0078125
+   txt152 
+TEXDEF txt152 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 1 0.765469 APEX 0.5 1 0.859531 RAD 0.0078125
+   txt152 
+TEXDEF txt152 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 1 0.875 RAD 0.03125 
+   txt152 
+TEXDEF txt152 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 1 0.875 APEX 0.609531 1 0.875 RAD 0.0078125
+   txt152 
+TEXDEF txt152 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.5 1 0.890469 APEX 0.5 1 0.984531 RAD 0.0078125
+   txt152 
+TEXDEF txt152 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.5 1 1 RAD 0.03125 
+   txt152 
+TEXDEF txt153 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.515469 1 1 APEX 0.609531 1 1 RAD 0.0078125
+   txt153 
+TEXDEF txt153 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0 0 RAD 0.03125 
+   txt153 
+TEXDEF txt153 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0 0 APEX 0.734531 0 0 RAD 0.0078125
+   txt153 
+TEXDEF txt153 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.0154687 0 APEX 0.625 0.109531 0 RAD 0.0078125
+   txt153 
+TEXDEF txt153 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0 0.0154687 APEX 0.625 0 0.109531 RAD 0.0078125
+   txt153 
+TEXDEF txt153 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0 0.125 RAD 0.03125 
+   txt153 
+TEXDEF txt153 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0 0.125 APEX 0.734531 0 0.125 RAD 0.0078125
+   txt153 
+TEXDEF txt153 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.125 APEX 0.625 0.109531 0.125 RAD 0.0078125
+   txt153 
+TEXDEF txt153 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0 0.140469 APEX 0.625 0 0.234531 RAD 0.0078125
+   txt153 
+TEXDEF txt153 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0 0.25 RAD 0.03125 
+   txt153 
+TEXDEF txt154 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0 0.25 APEX 0.734531 0 0.25 RAD 0.0078125
+   txt154 
+TEXDEF txt154 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.25 APEX 0.625 0.109531 0.25 RAD 0.0078125
+   txt154 
+TEXDEF txt154 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0 0.265469 APEX 0.625 0 0.359531 RAD 0.0078125
+   txt154 
+TEXDEF txt154 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0 0.375 RAD 0.03125 
+   txt154 
+TEXDEF txt154 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0 0.375 APEX 0.734531 0 0.375 RAD 0.0078125
+   txt154 
+TEXDEF txt154 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.375 APEX 0.625 0.109531 0.375 RAD 0.0078125
+   txt154 
+TEXDEF txt154 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0 0.390469 APEX 0.625 0 0.484531 RAD 0.0078125
+   txt154 
+TEXDEF txt154 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0 0.5 RAD 0.03125 
+   txt154 
+TEXDEF txt154 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0 0.5 APEX 0.734531 0 0.5 RAD 0.0078125
+   txt154 
+TEXDEF txt154 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.5 APEX 0.625 0.109531 0.5 RAD 0.0078125
+   txt154 
+TEXDEF txt155 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0 0.515469 APEX 0.625 0 0.609531 RAD 0.0078125
+   txt155 
+TEXDEF txt155 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0 0.625 RAD 0.03125 
+   txt155 
+TEXDEF txt155 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0 0.625 APEX 0.734531 0 0.625 RAD 0.0078125
+   txt155 
+TEXDEF txt155 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.625 APEX 0.625 0.109531 0.625 RAD 0.0078125
+   txt155 
+TEXDEF txt155 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0 0.640469 APEX 0.625 0 0.734531 RAD 0.0078125
+   txt155 
+TEXDEF txt155 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0 0.75 RAD 0.03125 
+   txt155 
+TEXDEF txt155 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0 0.75 APEX 0.734531 0 0.75 RAD 0.0078125
+   txt155 
+TEXDEF txt155 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.75 APEX 0.625 0.109531 0.75 RAD 0.0078125
+   txt155 
+TEXDEF txt155 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0 0.765469 APEX 0.625 0 0.859531 RAD 0.0078125
+   txt155 
+TEXDEF txt155 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0 0.875 RAD 0.03125 
+   txt155 
+TEXDEF txt156 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0 0.875 APEX 0.734531 0 0.875 RAD 0.0078125
+   txt156 
+TEXDEF txt156 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.875 APEX 0.625 0.109531 0.875 RAD 0.0078125
+   txt156 
+TEXDEF txt156 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0 0.890469 APEX 0.625 0 0.984531 RAD 0.0078125
+   txt156 
+TEXDEF txt156 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0 1 RAD 0.03125 
+   txt156 
+TEXDEF txt156 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0 1 APEX 0.734531 0 1 RAD 0.0078125
+   txt156 
+TEXDEF txt156 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.0154687 1 APEX 0.625 0.109531 1 RAD 0.0078125
+   txt156 
+TEXDEF txt156 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.125 0 RAD 0.03125 
+   txt156 
+TEXDEF txt156 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.125 0 APEX 0.734531 0.125 0 RAD 0.0078125
+   txt156 
+TEXDEF txt156 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.140469 0 APEX 0.625 0.234531 0 RAD 0.0078125
+   txt156 
+TEXDEF txt156 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.125 0.0154687 APEX 0.625 0.125 0.109531 RAD 0.0078125
+   txt156 
+TEXDEF txt157 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.125 0.125 RAD 0.03125 
+   txt157 
+TEXDEF txt157 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.125 0.125 APEX 0.734531 0.125 0.125 RAD 0.0078125
+   txt157 
+TEXDEF txt157 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.140469 0.125 APEX 0.625 0.234531 0.125 RAD 0.0078125
+   txt157 
+TEXDEF txt157 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.125 0.140469 APEX 0.625 0.125 0.234531 RAD 0.0078125
+   txt157 
+TEXDEF txt157 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.125 0.25 RAD 0.03125 
+   txt157 
+TEXDEF txt157 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.125 0.25 APEX 0.734531 0.125 0.25 RAD 0.0078125
+   txt157 
+TEXDEF txt157 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.140469 0.25 APEX 0.625 0.234531 0.25 RAD 0.0078125
+   txt157 
+TEXDEF txt157 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.125 0.265469 APEX 0.625 0.125 0.359531 RAD 0.0078125
+   txt157 
+TEXDEF txt157 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.125 0.375 RAD 0.03125 
+   txt157 
+TEXDEF txt157 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.125 0.375 APEX 0.734531 0.125 0.375 RAD 0.0078125
+   txt157 
+TEXDEF txt158 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.140469 0.375 APEX 0.625 0.234531 0.375 RAD 0.0078125
+   txt158 
+TEXDEF txt158 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.125 0.390469 APEX 0.625 0.125 0.484531 RAD 0.0078125
+   txt158 
+TEXDEF txt158 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.125 0.5 RAD 0.03125 
+   txt158 
+TEXDEF txt158 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.125 0.5 APEX 0.734531 0.125 0.5 RAD 0.0078125
+   txt158 
+TEXDEF txt158 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.140469 0.5 APEX 0.625 0.234531 0.5 RAD 0.0078125
+   txt158 
+TEXDEF txt158 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.125 0.515469 APEX 0.625 0.125 0.609531 RAD 0.0078125
+   txt158 
+TEXDEF txt158 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.125 0.625 RAD 0.03125 
+   txt158 
+TEXDEF txt158 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.125 0.625 APEX 0.734531 0.125 0.625 RAD 0.0078125
+   txt158 
+TEXDEF txt158 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.140469 0.625 APEX 0.625 0.234531 0.625 RAD 0.0078125
+   txt158 
+TEXDEF txt158 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.125 0.640469 APEX 0.625 0.125 0.734531 RAD 0.0078125
+   txt158 
+TEXDEF txt159 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.125 0.75 RAD 0.03125 
+   txt159 
+TEXDEF txt159 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.125 0.75 APEX 0.734531 0.125 0.75 RAD 0.0078125
+   txt159 
+TEXDEF txt159 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.140469 0.75 APEX 0.625 0.234531 0.75 RAD 0.0078125
+   txt159 
+TEXDEF txt159 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.125 0.765469 APEX 0.625 0.125 0.859531 RAD 0.0078125
+   txt159 
+TEXDEF txt159 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.125 0.875 RAD 0.03125 
+   txt159 
+TEXDEF txt159 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.125 0.875 APEX 0.734531 0.125 0.875 RAD 0.0078125
+   txt159 
+TEXDEF txt159 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.140469 0.875 APEX 0.625 0.234531 0.875 RAD 0.0078125
+   txt159 
+TEXDEF txt159 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.125 0.890469 APEX 0.625 0.125 0.984531 RAD 0.0078125
+   txt159 
+TEXDEF txt159 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.125 1 RAD 0.03125 
+   txt159 
+TEXDEF txt159 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.125 1 APEX 0.734531 0.125 1 RAD 0.0078125
+   txt159 
+TEXDEF txt160 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.140469 1 APEX 0.625 0.234531 1 RAD 0.0078125
+   txt160 
+TEXDEF txt160 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.25 0 RAD 0.03125 
+   txt160 
+TEXDEF txt160 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.25 0 APEX 0.734531 0.25 0 RAD 0.0078125
+   txt160 
+TEXDEF txt160 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.265469 0 APEX 0.625 0.359531 0 RAD 0.0078125
+   txt160 
+TEXDEF txt160 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.25 0.0154687 APEX 0.625 0.25 0.109531 RAD 0.0078125
+   txt160 
+TEXDEF txt160 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.25 0.125 RAD 0.03125 
+   txt160 
+TEXDEF txt160 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.25 0.125 APEX 0.734531 0.25 0.125 RAD 0.0078125
+   txt160 
+TEXDEF txt160 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.265469 0.125 APEX 0.625 0.359531 0.125 RAD 0.0078125
+   txt160 
+TEXDEF txt160 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.25 0.140469 APEX 0.625 0.25 0.234531 RAD 0.0078125
+   txt160 
+TEXDEF txt160 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.25 0.25 RAD 0.03125 
+   txt160 
+TEXDEF txt161 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.25 0.25 APEX 0.734531 0.25 0.25 RAD 0.0078125
+   txt161 
+TEXDEF txt161 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.265469 0.25 APEX 0.625 0.359531 0.25 RAD 0.0078125
+   txt161 
+TEXDEF txt161 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.25 0.265469 APEX 0.625 0.25 0.359531 RAD 0.0078125
+   txt161 
+TEXDEF txt161 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.25 0.375 RAD 0.03125 
+   txt161 
+TEXDEF txt161 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.25 0.375 APEX 0.734531 0.25 0.375 RAD 0.0078125
+   txt161 
+TEXDEF txt161 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.265469 0.375 APEX 0.625 0.359531 0.375 RAD 0.0078125
+   txt161 
+TEXDEF txt161 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.25 0.390469 APEX 0.625 0.25 0.484531 RAD 0.0078125
+   txt161 
+TEXDEF txt161 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.25 0.5 RAD 0.03125 
+   txt161 
+TEXDEF txt161 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.25 0.5 APEX 0.734531 0.25 0.5 RAD 0.0078125
+   txt161 
+TEXDEF txt161 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.265469 0.5 APEX 0.625 0.359531 0.5 RAD 0.0078125
+   txt161 
+TEXDEF txt162 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.25 0.515469 APEX 0.625 0.25 0.609531 RAD 0.0078125
+   txt162 
+TEXDEF txt162 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.25 0.625 RAD 0.03125 
+   txt162 
+TEXDEF txt162 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.25 0.625 APEX 0.734531 0.25 0.625 RAD 0.0078125
+   txt162 
+TEXDEF txt162 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.265469 0.625 APEX 0.625 0.359531 0.625 RAD 0.0078125
+   txt162 
+TEXDEF txt162 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.25 0.640469 APEX 0.625 0.25 0.734531 RAD 0.0078125
+   txt162 
+TEXDEF txt162 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.25 0.75 RAD 0.03125 
+   txt162 
+TEXDEF txt162 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.25 0.75 APEX 0.734531 0.25 0.75 RAD 0.0078125
+   txt162 
+TEXDEF txt162 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.265469 0.75 APEX 0.625 0.359531 0.75 RAD 0.0078125
+   txt162 
+TEXDEF txt162 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.25 0.765469 APEX 0.625 0.25 0.859531 RAD 0.0078125
+   txt162 
+TEXDEF txt162 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.25 0.875 RAD 0.03125 
+   txt162 
+TEXDEF txt163 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.25 0.875 APEX 0.734531 0.25 0.875 RAD 0.0078125
+   txt163 
+TEXDEF txt163 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.265469 0.875 APEX 0.625 0.359531 0.875 RAD 0.0078125
+   txt163 
+TEXDEF txt163 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.25 0.890469 APEX 0.625 0.25 0.984531 RAD 0.0078125
+   txt163 
+TEXDEF txt163 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.25 1 RAD 0.03125 
+   txt163 
+TEXDEF txt163 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.25 1 APEX 0.734531 0.25 1 RAD 0.0078125
+   txt163 
+TEXDEF txt163 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.265469 1 APEX 0.625 0.359531 1 RAD 0.0078125
+   txt163 
+TEXDEF txt163 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.375 0 RAD 0.03125 
+   txt163 
+TEXDEF txt163 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.375 0 APEX 0.734531 0.375 0 RAD 0.0078125
+   txt163 
+TEXDEF txt163 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.390469 0 APEX 0.625 0.484531 0 RAD 0.0078125
+   txt163 
+TEXDEF txt163 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.375 0.0154687 APEX 0.625 0.375 0.109531 RAD 0.0078125
+   txt163 
+TEXDEF txt164 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.375 0.125 RAD 0.03125 
+   txt164 
+TEXDEF txt164 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.375 0.125 APEX 0.734531 0.375 0.125 RAD 0.0078125
+   txt164 
+TEXDEF txt164 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.390469 0.125 APEX 0.625 0.484531 0.125 RAD 0.0078125
+   txt164 
+TEXDEF txt164 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.375 0.140469 APEX 0.625 0.375 0.234531 RAD 0.0078125
+   txt164 
+TEXDEF txt164 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.375 0.25 RAD 0.03125 
+   txt164 
+TEXDEF txt164 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.375 0.25 APEX 0.734531 0.375 0.25 RAD 0.0078125
+   txt164 
+TEXDEF txt164 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.390469 0.25 APEX 0.625 0.484531 0.25 RAD 0.0078125
+   txt164 
+TEXDEF txt164 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.375 0.265469 APEX 0.625 0.375 0.359531 RAD 0.0078125
+   txt164 
+TEXDEF txt164 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.375 0.375 RAD 0.03125 
+   txt164 
+TEXDEF txt164 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.375 0.375 APEX 0.734531 0.375 0.375 RAD 0.0078125
+   txt164 
+TEXDEF txt165 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.390469 0.375 APEX 0.625 0.484531 0.375 RAD 0.0078125
+   txt165 
+TEXDEF txt165 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.375 0.390469 APEX 0.625 0.375 0.484531 RAD 0.0078125
+   txt165 
+TEXDEF txt165 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.375 0.5 RAD 0.03125 
+   txt165 
+TEXDEF txt165 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.375 0.5 APEX 0.734531 0.375 0.5 RAD 0.0078125
+   txt165 
+TEXDEF txt165 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.390469 0.5 APEX 0.625 0.484531 0.5 RAD 0.0078125
+   txt165 
+TEXDEF txt165 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.375 0.515469 APEX 0.625 0.375 0.609531 RAD 0.0078125
+   txt165 
+TEXDEF txt165 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.375 0.625 RAD 0.03125 
+   txt165 
+TEXDEF txt165 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.375 0.625 APEX 0.734531 0.375 0.625 RAD 0.0078125
+   txt165 
+TEXDEF txt165 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.390469 0.625 APEX 0.625 0.484531 0.625 RAD 0.0078125
+   txt165 
+TEXDEF txt165 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.375 0.640469 APEX 0.625 0.375 0.734531 RAD 0.0078125
+   txt165 
+TEXDEF txt166 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.375 0.75 RAD 0.03125 
+   txt166 
+TEXDEF txt166 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.375 0.75 APEX 0.734531 0.375 0.75 RAD 0.0078125
+   txt166 
+TEXDEF txt166 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.390469 0.75 APEX 0.625 0.484531 0.75 RAD 0.0078125
+   txt166 
+TEXDEF txt166 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.375 0.765469 APEX 0.625 0.375 0.859531 RAD 0.0078125
+   txt166 
+TEXDEF txt166 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.375 0.875 RAD 0.03125 
+   txt166 
+TEXDEF txt166 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.375 0.875 APEX 0.734531 0.375 0.875 RAD 0.0078125
+   txt166 
+TEXDEF txt166 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.390469 0.875 APEX 0.625 0.484531 0.875 RAD 0.0078125
+   txt166 
+TEXDEF txt166 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.375 0.890469 APEX 0.625 0.375 0.984531 RAD 0.0078125
+   txt166 
+TEXDEF txt166 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.375 1 RAD 0.03125 
+   txt166 
+TEXDEF txt166 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.375 1 APEX 0.734531 0.375 1 RAD 0.0078125
+   txt166 
+TEXDEF txt167 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.390469 1 APEX 0.625 0.484531 1 RAD 0.0078125
+   txt167 
+TEXDEF txt167 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.5 0 RAD 0.03125 
+   txt167 
+TEXDEF txt167 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.5 0 APEX 0.734531 0.5 0 RAD 0.0078125
+   txt167 
+TEXDEF txt167 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.515469 0 APEX 0.625 0.609531 0 RAD 0.0078125
+   txt167 
+TEXDEF txt167 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.5 0.0154687 APEX 0.625 0.5 0.109531 RAD 0.0078125
+   txt167 
+TEXDEF txt167 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.5 0.125 RAD 0.03125 
+   txt167 
+TEXDEF txt167 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.5 0.125 APEX 0.734531 0.5 0.125 RAD 0.0078125
+   txt167 
+TEXDEF txt167 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.515469 0.125 APEX 0.625 0.609531 0.125 RAD 0.0078125
+   txt167 
+TEXDEF txt167 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.5 0.140469 APEX 0.625 0.5 0.234531 RAD 0.0078125
+   txt167 
+TEXDEF txt167 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.5 0.25 RAD 0.03125 
+   txt167 
+TEXDEF txt168 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.5 0.25 APEX 0.734531 0.5 0.25 RAD 0.0078125
+   txt168 
+TEXDEF txt168 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.515469 0.25 APEX 0.625 0.609531 0.25 RAD 0.0078125
+   txt168 
+TEXDEF txt168 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.5 0.265469 APEX 0.625 0.5 0.359531 RAD 0.0078125
+   txt168 
+TEXDEF txt168 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.5 0.375 RAD 0.03125 
+   txt168 
+TEXDEF txt168 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.5 0.375 APEX 0.734531 0.5 0.375 RAD 0.0078125
+   txt168 
+TEXDEF txt168 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.515469 0.375 APEX 0.625 0.609531 0.375 RAD 0.0078125
+   txt168 
+TEXDEF txt168 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.5 0.390469 APEX 0.625 0.5 0.484531 RAD 0.0078125
+   txt168 
+TEXDEF txt168 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.5 0.5 RAD 0.03125 
+   txt168 
+TEXDEF txt168 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.5 0.5 APEX 0.734531 0.5 0.5 RAD 0.0078125
+   txt168 
+TEXDEF txt168 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.515469 0.5 APEX 0.625 0.609531 0.5 RAD 0.0078125
+   txt168 
+TEXDEF txt169 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.5 0.515469 APEX 0.625 0.5 0.609531 RAD 0.0078125
+   txt169 
+TEXDEF txt169 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.5 0.625 RAD 0.03125 
+   txt169 
+TEXDEF txt169 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.5 0.625 APEX 0.734531 0.5 0.625 RAD 0.0078125
+   txt169 
+TEXDEF txt169 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.515469 0.625 APEX 0.625 0.609531 0.625 RAD 0.0078125
+   txt169 
+TEXDEF txt169 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.5 0.640469 APEX 0.625 0.5 0.734531 RAD 0.0078125
+   txt169 
+TEXDEF txt169 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.5 0.75 RAD 0.03125 
+   txt169 
+TEXDEF txt169 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.5 0.75 APEX 0.734531 0.5 0.75 RAD 0.0078125
+   txt169 
+TEXDEF txt169 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.515469 0.75 APEX 0.625 0.609531 0.75 RAD 0.0078125
+   txt169 
+TEXDEF txt169 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.5 0.765469 APEX 0.625 0.5 0.859531 RAD 0.0078125
+   txt169 
+TEXDEF txt169 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.5 0.875 RAD 0.03125 
+   txt169 
+TEXDEF txt170 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.5 0.875 APEX 0.734531 0.5 0.875 RAD 0.0078125
+   txt170 
+TEXDEF txt170 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.515469 0.875 APEX 0.625 0.609531 0.875 RAD 0.0078125
+   txt170 
+TEXDEF txt170 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.5 0.890469 APEX 0.625 0.5 0.984531 RAD 0.0078125
+   txt170 
+TEXDEF txt170 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.5 1 RAD 0.03125 
+   txt170 
+TEXDEF txt170 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.5 1 APEX 0.734531 0.5 1 RAD 0.0078125
+   txt170 
+TEXDEF txt170 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.515469 1 APEX 0.625 0.609531 1 RAD 0.0078125
+   txt170 
+TEXDEF txt170 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.625 0 RAD 0.03125 
+   txt170 
+TEXDEF txt170 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.625 0 APEX 0.734531 0.625 0 RAD 0.0078125
+   txt170 
+TEXDEF txt170 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.640469 0 APEX 0.625 0.734531 0 RAD 0.0078125
+   txt170 
+TEXDEF txt170 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.625 0.0154687 APEX 0.625 0.625 0.109531 RAD 0.0078125
+   txt170 
+TEXDEF txt171 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.625 0.125 RAD 0.03125 
+   txt171 
+TEXDEF txt171 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.625 0.125 APEX 0.734531 0.625 0.125 RAD 0.0078125
+   txt171 
+TEXDEF txt171 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.640469 0.125 APEX 0.625 0.734531 0.125 RAD 0.0078125
+   txt171 
+TEXDEF txt171 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.625 0.140469 APEX 0.625 0.625 0.234531 RAD 0.0078125
+   txt171 
+TEXDEF txt171 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.625 0.25 RAD 0.03125 
+   txt171 
+TEXDEF txt171 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.625 0.25 APEX 0.734531 0.625 0.25 RAD 0.0078125
+   txt171 
+TEXDEF txt171 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.640469 0.25 APEX 0.625 0.734531 0.25 RAD 0.0078125
+   txt171 
+TEXDEF txt171 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.625 0.265469 APEX 0.625 0.625 0.359531 RAD 0.0078125
+   txt171 
+TEXDEF txt171 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.625 0.375 RAD 0.03125 
+   txt171 
+TEXDEF txt171 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.625 0.375 APEX 0.734531 0.625 0.375 RAD 0.0078125
+   txt171 
+TEXDEF txt172 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.640469 0.375 APEX 0.625 0.734531 0.375 RAD 0.0078125
+   txt172 
+TEXDEF txt172 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.625 0.390469 APEX 0.625 0.625 0.484531 RAD 0.0078125
+   txt172 
+TEXDEF txt172 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.625 0.5 RAD 0.03125 
+   txt172 
+TEXDEF txt172 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.625 0.5 APEX 0.734531 0.625 0.5 RAD 0.0078125
+   txt172 
+TEXDEF txt172 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.640469 0.5 APEX 0.625 0.734531 0.5 RAD 0.0078125
+   txt172 
+TEXDEF txt172 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.625 0.515469 APEX 0.625 0.625 0.609531 RAD 0.0078125
+   txt172 
+TEXDEF txt172 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.625 0.625 RAD 0.03125 
+   txt172 
+TEXDEF txt172 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.625 0.625 APEX 0.734531 0.625 0.625 RAD 0.0078125
+   txt172 
+TEXDEF txt172 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.640469 0.625 APEX 0.625 0.734531 0.625 RAD 0.0078125
+   txt172 
+TEXDEF txt172 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.625 0.640469 APEX 0.625 0.625 0.734531 RAD 0.0078125
+   txt172 
+TEXDEF txt173 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.625 0.75 RAD 0.03125 
+   txt173 
+TEXDEF txt173 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.625 0.75 APEX 0.734531 0.625 0.75 RAD 0.0078125
+   txt173 
+TEXDEF txt173 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.640469 0.75 APEX 0.625 0.734531 0.75 RAD 0.0078125
+   txt173 
+TEXDEF txt173 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.625 0.765469 APEX 0.625 0.625 0.859531 RAD 0.0078125
+   txt173 
+TEXDEF txt173 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.625 0.875 RAD 0.03125 
+   txt173 
+TEXDEF txt173 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.625 0.875 APEX 0.734531 0.625 0.875 RAD 0.0078125
+   txt173 
+TEXDEF txt173 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.640469 0.875 APEX 0.625 0.734531 0.875 RAD 0.0078125
+   txt173 
+TEXDEF txt173 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.625 0.890469 APEX 0.625 0.625 0.984531 RAD 0.0078125
+   txt173 
+TEXDEF txt173 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.625 1 RAD 0.03125 
+   txt173 
+TEXDEF txt173 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.625 1 APEX 0.734531 0.625 1 RAD 0.0078125
+   txt173 
+TEXDEF txt174 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.640469 1 APEX 0.625 0.734531 1 RAD 0.0078125
+   txt174 
+TEXDEF txt174 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.75 0 RAD 0.03125 
+   txt174 
+TEXDEF txt174 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.75 0 APEX 0.734531 0.75 0 RAD 0.0078125
+   txt174 
+TEXDEF txt174 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.765469 0 APEX 0.625 0.859531 0 RAD 0.0078125
+   txt174 
+TEXDEF txt174 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.75 0.0154687 APEX 0.625 0.75 0.109531 RAD 0.0078125
+   txt174 
+TEXDEF txt174 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.75 0.125 RAD 0.03125 
+   txt174 
+TEXDEF txt174 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.75 0.125 APEX 0.734531 0.75 0.125 RAD 0.0078125
+   txt174 
+TEXDEF txt174 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.765469 0.125 APEX 0.625 0.859531 0.125 RAD 0.0078125
+   txt174 
+TEXDEF txt174 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.75 0.140469 APEX 0.625 0.75 0.234531 RAD 0.0078125
+   txt174 
+TEXDEF txt174 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.75 0.25 RAD 0.03125 
+   txt174 
+TEXDEF txt175 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.75 0.25 APEX 0.734531 0.75 0.25 RAD 0.0078125
+   txt175 
+TEXDEF txt175 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.765469 0.25 APEX 0.625 0.859531 0.25 RAD 0.0078125
+   txt175 
+TEXDEF txt175 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.75 0.265469 APEX 0.625 0.75 0.359531 RAD 0.0078125
+   txt175 
+TEXDEF txt175 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.75 0.375 RAD 0.03125 
+   txt175 
+TEXDEF txt175 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.75 0.375 APEX 0.734531 0.75 0.375 RAD 0.0078125
+   txt175 
+TEXDEF txt175 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.765469 0.375 APEX 0.625 0.859531 0.375 RAD 0.0078125
+   txt175 
+TEXDEF txt175 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.75 0.390469 APEX 0.625 0.75 0.484531 RAD 0.0078125
+   txt175 
+TEXDEF txt175 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.75 0.5 RAD 0.03125 
+   txt175 
+TEXDEF txt175 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.75 0.5 APEX 0.734531 0.75 0.5 RAD 0.0078125
+   txt175 
+TEXDEF txt175 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.765469 0.5 APEX 0.625 0.859531 0.5 RAD 0.0078125
+   txt175 
+TEXDEF txt176 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.75 0.515469 APEX 0.625 0.75 0.609531 RAD 0.0078125
+   txt176 
+TEXDEF txt176 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.75 0.625 RAD 0.03125 
+   txt176 
+TEXDEF txt176 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.75 0.625 APEX 0.734531 0.75 0.625 RAD 0.0078125
+   txt176 
+TEXDEF txt176 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.765469 0.625 APEX 0.625 0.859531 0.625 RAD 0.0078125
+   txt176 
+TEXDEF txt176 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.75 0.640469 APEX 0.625 0.75 0.734531 RAD 0.0078125
+   txt176 
+TEXDEF txt176 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.75 0.75 RAD 0.03125 
+   txt176 
+TEXDEF txt176 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.75 0.75 APEX 0.734531 0.75 0.75 RAD 0.0078125
+   txt176 
+TEXDEF txt176 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.765469 0.75 APEX 0.625 0.859531 0.75 RAD 0.0078125
+   txt176 
+TEXDEF txt176 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.75 0.765469 APEX 0.625 0.75 0.859531 RAD 0.0078125
+   txt176 
+TEXDEF txt176 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.75 0.875 RAD 0.03125 
+   txt176 
+TEXDEF txt177 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.75 0.875 APEX 0.734531 0.75 0.875 RAD 0.0078125
+   txt177 
+TEXDEF txt177 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.765469 0.875 APEX 0.625 0.859531 0.875 RAD 0.0078125
+   txt177 
+TEXDEF txt177 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.75 0.890469 APEX 0.625 0.75 0.984531 RAD 0.0078125
+   txt177 
+TEXDEF txt177 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.75 1 RAD 0.03125 
+   txt177 
+TEXDEF txt177 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.75 1 APEX 0.734531 0.75 1 RAD 0.0078125
+   txt177 
+TEXDEF txt177 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.765469 1 APEX 0.625 0.859531 1 RAD 0.0078125
+   txt177 
+TEXDEF txt177 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.875 0 RAD 0.03125 
+   txt177 
+TEXDEF txt177 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.875 0 APEX 0.734531 0.875 0 RAD 0.0078125
+   txt177 
+TEXDEF txt177 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.890469 0 APEX 0.625 0.984531 0 RAD 0.0078125
+   txt177 
+TEXDEF txt177 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.875 0.0154687 APEX 0.625 0.875 0.109531 RAD 0.0078125
+   txt177 
+TEXDEF txt178 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.875 0.125 RAD 0.03125 
+   txt178 
+TEXDEF txt178 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.875 0.125 APEX 0.734531 0.875 0.125 RAD 0.0078125
+   txt178 
+TEXDEF txt178 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.890469 0.125 APEX 0.625 0.984531 0.125 RAD 0.0078125
+   txt178 
+TEXDEF txt178 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.875 0.140469 APEX 0.625 0.875 0.234531 RAD 0.0078125
+   txt178 
+TEXDEF txt178 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.875 0.25 RAD 0.03125 
+   txt178 
+TEXDEF txt178 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.875 0.25 APEX 0.734531 0.875 0.25 RAD 0.0078125
+   txt178 
+TEXDEF txt178 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.890469 0.25 APEX 0.625 0.984531 0.25 RAD 0.0078125
+   txt178 
+TEXDEF txt178 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.875 0.265469 APEX 0.625 0.875 0.359531 RAD 0.0078125
+   txt178 
+TEXDEF txt178 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.875 0.375 RAD 0.03125 
+   txt178 
+TEXDEF txt178 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.875 0.375 APEX 0.734531 0.875 0.375 RAD 0.0078125
+   txt178 
+TEXDEF txt179 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.890469 0.375 APEX 0.625 0.984531 0.375 RAD 0.0078125
+   txt179 
+TEXDEF txt179 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.875 0.390469 APEX 0.625 0.875 0.484531 RAD 0.0078125
+   txt179 
+TEXDEF txt179 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.875 0.5 RAD 0.03125 
+   txt179 
+TEXDEF txt179 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.875 0.5 APEX 0.734531 0.875 0.5 RAD 0.0078125
+   txt179 
+TEXDEF txt179 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.890469 0.5 APEX 0.625 0.984531 0.5 RAD 0.0078125
+   txt179 
+TEXDEF txt179 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.875 0.515469 APEX 0.625 0.875 0.609531 RAD 0.0078125
+   txt179 
+TEXDEF txt179 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.875 0.625 RAD 0.03125 
+   txt179 
+TEXDEF txt179 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.875 0.625 APEX 0.734531 0.875 0.625 RAD 0.0078125
+   txt179 
+TEXDEF txt179 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.890469 0.625 APEX 0.625 0.984531 0.625 RAD 0.0078125
+   txt179 
+TEXDEF txt179 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.875 0.640469 APEX 0.625 0.875 0.734531 RAD 0.0078125
+   txt179 
+TEXDEF txt180 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.875 0.75 RAD 0.03125 
+   txt180 
+TEXDEF txt180 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.875 0.75 APEX 0.734531 0.875 0.75 RAD 0.0078125
+   txt180 
+TEXDEF txt180 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.890469 0.75 APEX 0.625 0.984531 0.75 RAD 0.0078125
+   txt180 
+TEXDEF txt180 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.875 0.765469 APEX 0.625 0.875 0.859531 RAD 0.0078125
+   txt180 
+TEXDEF txt180 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.875 0.875 RAD 0.03125 
+   txt180 
+TEXDEF txt180 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.875 0.875 APEX 0.734531 0.875 0.875 RAD 0.0078125
+   txt180 
+TEXDEF txt180 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.890469 0.875 APEX 0.625 0.984531 0.875 RAD 0.0078125
+   txt180 
+TEXDEF txt180 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.875 0.890469 APEX 0.625 0.875 0.984531 RAD 0.0078125
+   txt180 
+TEXDEF txt180 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 0.875 1 RAD 0.03125 
+   txt180 
+TEXDEF txt180 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 0.875 1 APEX 0.734531 0.875 1 RAD 0.0078125
+   txt180 
+TEXDEF txt181 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 0.890469 1 APEX 0.625 0.984531 1 RAD 0.0078125
+   txt181 
+TEXDEF txt181 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 1 0 RAD 0.03125 
+   txt181 
+TEXDEF txt181 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 1 0 APEX 0.734531 1 0 RAD 0.0078125
+   txt181 
+TEXDEF txt181 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 1 0.0154687 APEX 0.625 1 0.109531 RAD 0.0078125
+   txt181 
+TEXDEF txt181 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 1 0.125 RAD 0.03125 
+   txt181 
+TEXDEF txt181 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 1 0.125 APEX 0.734531 1 0.125 RAD 0.0078125
+   txt181 
+TEXDEF txt181 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 1 0.140469 APEX 0.625 1 0.234531 RAD 0.0078125
+   txt181 
+TEXDEF txt181 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 1 0.25 RAD 0.03125 
+   txt181 
+TEXDEF txt181 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 1 0.25 APEX 0.734531 1 0.25 RAD 0.0078125
+   txt181 
+TEXDEF txt181 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 1 0.265469 APEX 0.625 1 0.359531 RAD 0.0078125
+   txt181 
+TEXDEF txt182 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 1 0.375 RAD 0.03125 
+   txt182 
+TEXDEF txt182 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 1 0.375 APEX 0.734531 1 0.375 RAD 0.0078125
+   txt182 
+TEXDEF txt182 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 1 0.390469 APEX 0.625 1 0.484531 RAD 0.0078125
+   txt182 
+TEXDEF txt182 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 1 0.5 RAD 0.03125 
+   txt182 
+TEXDEF txt182 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 1 0.5 APEX 0.734531 1 0.5 RAD 0.0078125
+   txt182 
+TEXDEF txt182 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 1 0.515469 APEX 0.625 1 0.609531 RAD 0.0078125
+   txt182 
+TEXDEF txt182 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 1 0.625 RAD 0.03125 
+   txt182 
+TEXDEF txt182 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 1 0.625 APEX 0.734531 1 0.625 RAD 0.0078125
+   txt182 
+TEXDEF txt182 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 1 0.640469 APEX 0.625 1 0.734531 RAD 0.0078125
+   txt182 
+TEXDEF txt182 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 1 0.75 RAD 0.03125 
+   txt182 
+TEXDEF txt183 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 1 0.75 APEX 0.734531 1 0.75 RAD 0.0078125
+   txt183 
+TEXDEF txt183 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 1 0.765469 APEX 0.625 1 0.859531 RAD 0.0078125
+   txt183 
+TEXDEF txt183 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 1 0.875 RAD 0.03125 
+   txt183 
+TEXDEF txt183 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 1 0.875 APEX 0.734531 1 0.875 RAD 0.0078125
+   txt183 
+TEXDEF txt183 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.625 1 0.890469 APEX 0.625 1 0.984531 RAD 0.0078125
+   txt183 
+TEXDEF txt183 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.625 1 1 RAD 0.03125 
+   txt183 
+TEXDEF txt183 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.640469 1 1 APEX 0.734531 1 1 RAD 0.0078125
+   txt183 
+TEXDEF txt183 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0 0 RAD 0.03125 
+   txt183 
+TEXDEF txt183 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0 0 APEX 0.859531 0 0 RAD 0.0078125
+   txt183 
+TEXDEF txt183 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.0154687 0 APEX 0.75 0.109531 0 RAD 0.0078125
+   txt183 
+TEXDEF txt184 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0 0.0154687 APEX 0.75 0 0.109531 RAD 0.0078125
+   txt184 
+TEXDEF txt184 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0 0.125 RAD 0.03125 
+   txt184 
+TEXDEF txt184 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0 0.125 APEX 0.859531 0 0.125 RAD 0.0078125
+   txt184 
+TEXDEF txt184 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.125 APEX 0.75 0.109531 0.125 RAD 0.0078125
+   txt184 
+TEXDEF txt184 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0 0.140469 APEX 0.75 0 0.234531 RAD 0.0078125
+   txt184 
+TEXDEF txt184 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0 0.25 RAD 0.03125 
+   txt184 
+TEXDEF txt184 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0 0.25 APEX 0.859531 0 0.25 RAD 0.0078125
+   txt184 
+TEXDEF txt184 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.25 APEX 0.75 0.109531 0.25 RAD 0.0078125
+   txt184 
+TEXDEF txt184 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0 0.265469 APEX 0.75 0 0.359531 RAD 0.0078125
+   txt184 
+TEXDEF txt184 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0 0.375 RAD 0.03125 
+   txt184 
+TEXDEF txt185 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0 0.375 APEX 0.859531 0 0.375 RAD 0.0078125
+   txt185 
+TEXDEF txt185 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.375 APEX 0.75 0.109531 0.375 RAD 0.0078125
+   txt185 
+TEXDEF txt185 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0 0.390469 APEX 0.75 0 0.484531 RAD 0.0078125
+   txt185 
+TEXDEF txt185 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0 0.5 RAD 0.03125 
+   txt185 
+TEXDEF txt185 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0 0.5 APEX 0.859531 0 0.5 RAD 0.0078125
+   txt185 
+TEXDEF txt185 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.5 APEX 0.75 0.109531 0.5 RAD 0.0078125
+   txt185 
+TEXDEF txt185 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0 0.515469 APEX 0.75 0 0.609531 RAD 0.0078125
+   txt185 
+TEXDEF txt185 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0 0.625 RAD 0.03125 
+   txt185 
+TEXDEF txt185 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0 0.625 APEX 0.859531 0 0.625 RAD 0.0078125
+   txt185 
+TEXDEF txt185 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.625 APEX 0.75 0.109531 0.625 RAD 0.0078125
+   txt185 
+TEXDEF txt186 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0 0.640469 APEX 0.75 0 0.734531 RAD 0.0078125
+   txt186 
+TEXDEF txt186 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0 0.75 RAD 0.03125 
+   txt186 
+TEXDEF txt186 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0 0.75 APEX 0.859531 0 0.75 RAD 0.0078125
+   txt186 
+TEXDEF txt186 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.75 APEX 0.75 0.109531 0.75 RAD 0.0078125
+   txt186 
+TEXDEF txt186 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0 0.765469 APEX 0.75 0 0.859531 RAD 0.0078125
+   txt186 
+TEXDEF txt186 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0 0.875 RAD 0.03125 
+   txt186 
+TEXDEF txt186 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0 0.875 APEX 0.859531 0 0.875 RAD 0.0078125
+   txt186 
+TEXDEF txt186 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.875 APEX 0.75 0.109531 0.875 RAD 0.0078125
+   txt186 
+TEXDEF txt186 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0 0.890469 APEX 0.75 0 0.984531 RAD 0.0078125
+   txt186 
+TEXDEF txt186 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0 1 RAD 0.03125 
+   txt186 
+TEXDEF txt187 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0 1 APEX 0.859531 0 1 RAD 0.0078125
+   txt187 
+TEXDEF txt187 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.0154687 1 APEX 0.75 0.109531 1 RAD 0.0078125
+   txt187 
+TEXDEF txt187 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.125 0 RAD 0.03125 
+   txt187 
+TEXDEF txt187 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.125 0 APEX 0.859531 0.125 0 RAD 0.0078125
+   txt187 
+TEXDEF txt187 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.140469 0 APEX 0.75 0.234531 0 RAD 0.0078125
+   txt187 
+TEXDEF txt187 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.125 0.0154687 APEX 0.75 0.125 0.109531 RAD 0.0078125
+   txt187 
+TEXDEF txt187 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.125 0.125 RAD 0.03125 
+   txt187 
+TEXDEF txt187 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.125 0.125 APEX 0.859531 0.125 0.125 RAD 0.0078125
+   txt187 
+TEXDEF txt187 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.140469 0.125 APEX 0.75 0.234531 0.125 RAD 0.0078125
+   txt187 
+TEXDEF txt187 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.125 0.140469 APEX 0.75 0.125 0.234531 RAD 0.0078125
+   txt187 
+TEXDEF txt188 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.125 0.25 RAD 0.03125 
+   txt188 
+TEXDEF txt188 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.125 0.25 APEX 0.859531 0.125 0.25 RAD 0.0078125
+   txt188 
+TEXDEF txt188 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.140469 0.25 APEX 0.75 0.234531 0.25 RAD 0.0078125
+   txt188 
+TEXDEF txt188 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.125 0.265469 APEX 0.75 0.125 0.359531 RAD 0.0078125
+   txt188 
+TEXDEF txt188 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.125 0.375 RAD 0.03125 
+   txt188 
+TEXDEF txt188 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.125 0.375 APEX 0.859531 0.125 0.375 RAD 0.0078125
+   txt188 
+TEXDEF txt188 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.140469 0.375 APEX 0.75 0.234531 0.375 RAD 0.0078125
+   txt188 
+TEXDEF txt188 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.125 0.390469 APEX 0.75 0.125 0.484531 RAD 0.0078125
+   txt188 
+TEXDEF txt188 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.125 0.5 RAD 0.03125 
+   txt188 
+TEXDEF txt188 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.125 0.5 APEX 0.859531 0.125 0.5 RAD 0.0078125
+   txt188 
+TEXDEF txt189 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.140469 0.5 APEX 0.75 0.234531 0.5 RAD 0.0078125
+   txt189 
+TEXDEF txt189 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.125 0.515469 APEX 0.75 0.125 0.609531 RAD 0.0078125
+   txt189 
+TEXDEF txt189 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.125 0.625 RAD 0.03125 
+   txt189 
+TEXDEF txt189 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.125 0.625 APEX 0.859531 0.125 0.625 RAD 0.0078125
+   txt189 
+TEXDEF txt189 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.140469 0.625 APEX 0.75 0.234531 0.625 RAD 0.0078125
+   txt189 
+TEXDEF txt189 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.125 0.640469 APEX 0.75 0.125 0.734531 RAD 0.0078125
+   txt189 
+TEXDEF txt189 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.125 0.75 RAD 0.03125 
+   txt189 
+TEXDEF txt189 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.125 0.75 APEX 0.859531 0.125 0.75 RAD 0.0078125
+   txt189 
+TEXDEF txt189 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.140469 0.75 APEX 0.75 0.234531 0.75 RAD 0.0078125
+   txt189 
+TEXDEF txt189 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.125 0.765469 APEX 0.75 0.125 0.859531 RAD 0.0078125
+   txt189 
+TEXDEF txt190 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.125 0.875 RAD 0.03125 
+   txt190 
+TEXDEF txt190 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.125 0.875 APEX 0.859531 0.125 0.875 RAD 0.0078125
+   txt190 
+TEXDEF txt190 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.140469 0.875 APEX 0.75 0.234531 0.875 RAD 0.0078125
+   txt190 
+TEXDEF txt190 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.125 0.890469 APEX 0.75 0.125 0.984531 RAD 0.0078125
+   txt190 
+TEXDEF txt190 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.125 1 RAD 0.03125 
+   txt190 
+TEXDEF txt190 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.125 1 APEX 0.859531 0.125 1 RAD 0.0078125
+   txt190 
+TEXDEF txt190 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.140469 1 APEX 0.75 0.234531 1 RAD 0.0078125
+   txt190 
+TEXDEF txt190 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.25 0 RAD 0.03125 
+   txt190 
+TEXDEF txt190 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.25 0 APEX 0.859531 0.25 0 RAD 0.0078125
+   txt190 
+TEXDEF txt190 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.265469 0 APEX 0.75 0.359531 0 RAD 0.0078125
+   txt190 
+TEXDEF txt191 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.25 0.0154687 APEX 0.75 0.25 0.109531 RAD 0.0078125
+   txt191 
+TEXDEF txt191 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.25 0.125 RAD 0.03125 
+   txt191 
+TEXDEF txt191 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.25 0.125 APEX 0.859531 0.25 0.125 RAD 0.0078125
+   txt191 
+TEXDEF txt191 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.265469 0.125 APEX 0.75 0.359531 0.125 RAD 0.0078125
+   txt191 
+TEXDEF txt191 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.25 0.140469 APEX 0.75 0.25 0.234531 RAD 0.0078125
+   txt191 
+TEXDEF txt191 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.25 0.25 RAD 0.03125 
+   txt191 
+TEXDEF txt191 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.25 0.25 APEX 0.859531 0.25 0.25 RAD 0.0078125
+   txt191 
+TEXDEF txt191 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.265469 0.25 APEX 0.75 0.359531 0.25 RAD 0.0078125
+   txt191 
+TEXDEF txt191 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.25 0.265469 APEX 0.75 0.25 0.359531 RAD 0.0078125
+   txt191 
+TEXDEF txt191 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.25 0.375 RAD 0.03125 
+   txt191 
+TEXDEF txt192 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.25 0.375 APEX 0.859531 0.25 0.375 RAD 0.0078125
+   txt192 
+TEXDEF txt192 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.265469 0.375 APEX 0.75 0.359531 0.375 RAD 0.0078125
+   txt192 
+TEXDEF txt192 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.25 0.390469 APEX 0.75 0.25 0.484531 RAD 0.0078125
+   txt192 
+TEXDEF txt192 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.25 0.5 RAD 0.03125 
+   txt192 
+TEXDEF txt192 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.25 0.5 APEX 0.859531 0.25 0.5 RAD 0.0078125
+   txt192 
+TEXDEF txt192 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.265469 0.5 APEX 0.75 0.359531 0.5 RAD 0.0078125
+   txt192 
+TEXDEF txt192 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.25 0.515469 APEX 0.75 0.25 0.609531 RAD 0.0078125
+   txt192 
+TEXDEF txt192 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.25 0.625 RAD 0.03125 
+   txt192 
+TEXDEF txt192 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.25 0.625 APEX 0.859531 0.25 0.625 RAD 0.0078125
+   txt192 
+TEXDEF txt192 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.265469 0.625 APEX 0.75 0.359531 0.625 RAD 0.0078125
+   txt192 
+TEXDEF txt193 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.25 0.640469 APEX 0.75 0.25 0.734531 RAD 0.0078125
+   txt193 
+TEXDEF txt193 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.25 0.75 RAD 0.03125 
+   txt193 
+TEXDEF txt193 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.25 0.75 APEX 0.859531 0.25 0.75 RAD 0.0078125
+   txt193 
+TEXDEF txt193 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.265469 0.75 APEX 0.75 0.359531 0.75 RAD 0.0078125
+   txt193 
+TEXDEF txt193 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.25 0.765469 APEX 0.75 0.25 0.859531 RAD 0.0078125
+   txt193 
+TEXDEF txt193 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.25 0.875 RAD 0.03125 
+   txt193 
+TEXDEF txt193 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.25 0.875 APEX 0.859531 0.25 0.875 RAD 0.0078125
+   txt193 
+TEXDEF txt193 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.265469 0.875 APEX 0.75 0.359531 0.875 RAD 0.0078125
+   txt193 
+TEXDEF txt193 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.25 0.890469 APEX 0.75 0.25 0.984531 RAD 0.0078125
+   txt193 
+TEXDEF txt193 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.25 1 RAD 0.03125 
+   txt193 
+TEXDEF txt194 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.25 1 APEX 0.859531 0.25 1 RAD 0.0078125
+   txt194 
+TEXDEF txt194 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.265469 1 APEX 0.75 0.359531 1 RAD 0.0078125
+   txt194 
+TEXDEF txt194 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.375 0 RAD 0.03125 
+   txt194 
+TEXDEF txt194 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.375 0 APEX 0.859531 0.375 0 RAD 0.0078125
+   txt194 
+TEXDEF txt194 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.390469 0 APEX 0.75 0.484531 0 RAD 0.0078125
+   txt194 
+TEXDEF txt194 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.375 0.0154687 APEX 0.75 0.375 0.109531 RAD 0.0078125
+   txt194 
+TEXDEF txt194 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.375 0.125 RAD 0.03125 
+   txt194 
+TEXDEF txt194 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.375 0.125 APEX 0.859531 0.375 0.125 RAD 0.0078125
+   txt194 
+TEXDEF txt194 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.390469 0.125 APEX 0.75 0.484531 0.125 RAD 0.0078125
+   txt194 
+TEXDEF txt194 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.375 0.140469 APEX 0.75 0.375 0.234531 RAD 0.0078125
+   txt194 
+TEXDEF txt195 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.375 0.25 RAD 0.03125 
+   txt195 
+TEXDEF txt195 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.375 0.25 APEX 0.859531 0.375 0.25 RAD 0.0078125
+   txt195 
+TEXDEF txt195 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.390469 0.25 APEX 0.75 0.484531 0.25 RAD 0.0078125
+   txt195 
+TEXDEF txt195 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.375 0.265469 APEX 0.75 0.375 0.359531 RAD 0.0078125
+   txt195 
+TEXDEF txt195 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.375 0.375 RAD 0.03125 
+   txt195 
+TEXDEF txt195 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.375 0.375 APEX 0.859531 0.375 0.375 RAD 0.0078125
+   txt195 
+TEXDEF txt195 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.390469 0.375 APEX 0.75 0.484531 0.375 RAD 0.0078125
+   txt195 
+TEXDEF txt195 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.375 0.390469 APEX 0.75 0.375 0.484531 RAD 0.0078125
+   txt195 
+TEXDEF txt195 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.375 0.5 RAD 0.03125 
+   txt195 
+TEXDEF txt195 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.375 0.5 APEX 0.859531 0.375 0.5 RAD 0.0078125
+   txt195 
+TEXDEF txt196 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.390469 0.5 APEX 0.75 0.484531 0.5 RAD 0.0078125
+   txt196 
+TEXDEF txt196 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.375 0.515469 APEX 0.75 0.375 0.609531 RAD 0.0078125
+   txt196 
+TEXDEF txt196 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.375 0.625 RAD 0.03125 
+   txt196 
+TEXDEF txt196 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.375 0.625 APEX 0.859531 0.375 0.625 RAD 0.0078125
+   txt196 
+TEXDEF txt196 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.390469 0.625 APEX 0.75 0.484531 0.625 RAD 0.0078125
+   txt196 
+TEXDEF txt196 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.375 0.640469 APEX 0.75 0.375 0.734531 RAD 0.0078125
+   txt196 
+TEXDEF txt196 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.375 0.75 RAD 0.03125 
+   txt196 
+TEXDEF txt196 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.375 0.75 APEX 0.859531 0.375 0.75 RAD 0.0078125
+   txt196 
+TEXDEF txt196 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.390469 0.75 APEX 0.75 0.484531 0.75 RAD 0.0078125
+   txt196 
+TEXDEF txt196 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.375 0.765469 APEX 0.75 0.375 0.859531 RAD 0.0078125
+   txt196 
+TEXDEF txt197 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.375 0.875 RAD 0.03125 
+   txt197 
+TEXDEF txt197 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.375 0.875 APEX 0.859531 0.375 0.875 RAD 0.0078125
+   txt197 
+TEXDEF txt197 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.390469 0.875 APEX 0.75 0.484531 0.875 RAD 0.0078125
+   txt197 
+TEXDEF txt197 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.375 0.890469 APEX 0.75 0.375 0.984531 RAD 0.0078125
+   txt197 
+TEXDEF txt197 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.375 1 RAD 0.03125 
+   txt197 
+TEXDEF txt197 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.375 1 APEX 0.859531 0.375 1 RAD 0.0078125
+   txt197 
+TEXDEF txt197 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.390469 1 APEX 0.75 0.484531 1 RAD 0.0078125
+   txt197 
+TEXDEF txt197 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.5 0 RAD 0.03125 
+   txt197 
+TEXDEF txt197 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.5 0 APEX 0.859531 0.5 0 RAD 0.0078125
+   txt197 
+TEXDEF txt197 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.515469 0 APEX 0.75 0.609531 0 RAD 0.0078125
+   txt197 
+TEXDEF txt198 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.5 0.0154687 APEX 0.75 0.5 0.109531 RAD 0.0078125
+   txt198 
+TEXDEF txt198 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.5 0.125 RAD 0.03125 
+   txt198 
+TEXDEF txt198 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.5 0.125 APEX 0.859531 0.5 0.125 RAD 0.0078125
+   txt198 
+TEXDEF txt198 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.515469 0.125 APEX 0.75 0.609531 0.125 RAD 0.0078125
+   txt198 
+TEXDEF txt198 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.5 0.140469 APEX 0.75 0.5 0.234531 RAD 0.0078125
+   txt198 
+TEXDEF txt198 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.5 0.25 RAD 0.03125 
+   txt198 
+TEXDEF txt198 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.5 0.25 APEX 0.859531 0.5 0.25 RAD 0.0078125
+   txt198 
+TEXDEF txt198 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.515469 0.25 APEX 0.75 0.609531 0.25 RAD 0.0078125
+   txt198 
+TEXDEF txt198 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.5 0.265469 APEX 0.75 0.5 0.359531 RAD 0.0078125
+   txt198 
+TEXDEF txt198 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.5 0.375 RAD 0.03125 
+   txt198 
+TEXDEF txt199 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.5 0.375 APEX 0.859531 0.5 0.375 RAD 0.0078125
+   txt199 
+TEXDEF txt199 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.515469 0.375 APEX 0.75 0.609531 0.375 RAD 0.0078125
+   txt199 
+TEXDEF txt199 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.5 0.390469 APEX 0.75 0.5 0.484531 RAD 0.0078125
+   txt199 
+TEXDEF txt199 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.5 0.5 RAD 0.03125 
+   txt199 
+TEXDEF txt199 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.5 0.5 APEX 0.859531 0.5 0.5 RAD 0.0078125
+   txt199 
+TEXDEF txt199 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.515469 0.5 APEX 0.75 0.609531 0.5 RAD 0.0078125
+   txt199 
+TEXDEF txt199 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.5 0.515469 APEX 0.75 0.5 0.609531 RAD 0.0078125
+   txt199 
+TEXDEF txt199 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.5 0.625 RAD 0.03125 
+   txt199 
+TEXDEF txt199 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.5 0.625 APEX 0.859531 0.5 0.625 RAD 0.0078125
+   txt199 
+TEXDEF txt199 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.515469 0.625 APEX 0.75 0.609531 0.625 RAD 0.0078125
+   txt199 
+TEXDEF txt200 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.5 0.640469 APEX 0.75 0.5 0.734531 RAD 0.0078125
+   txt200 
+TEXDEF txt200 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.5 0.75 RAD 0.03125 
+   txt200 
+TEXDEF txt200 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.5 0.75 APEX 0.859531 0.5 0.75 RAD 0.0078125
+   txt200 
+TEXDEF txt200 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.515469 0.75 APEX 0.75 0.609531 0.75 RAD 0.0078125
+   txt200 
+TEXDEF txt200 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.5 0.765469 APEX 0.75 0.5 0.859531 RAD 0.0078125
+   txt200 
+TEXDEF txt200 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.5 0.875 RAD 0.03125 
+   txt200 
+TEXDEF txt200 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.5 0.875 APEX 0.859531 0.5 0.875 RAD 0.0078125
+   txt200 
+TEXDEF txt200 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.515469 0.875 APEX 0.75 0.609531 0.875 RAD 0.0078125
+   txt200 
+TEXDEF txt200 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.5 0.890469 APEX 0.75 0.5 0.984531 RAD 0.0078125
+   txt200 
+TEXDEF txt200 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.5 1 RAD 0.03125 
+   txt200 
+TEXDEF txt201 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.5 1 APEX 0.859531 0.5 1 RAD 0.0078125
+   txt201 
+TEXDEF txt201 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.515469 1 APEX 0.75 0.609531 1 RAD 0.0078125
+   txt201 
+TEXDEF txt201 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.625 0 RAD 0.03125 
+   txt201 
+TEXDEF txt201 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.625 0 APEX 0.859531 0.625 0 RAD 0.0078125
+   txt201 
+TEXDEF txt201 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.640469 0 APEX 0.75 0.734531 0 RAD 0.0078125
+   txt201 
+TEXDEF txt201 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.625 0.0154687 APEX 0.75 0.625 0.109531 RAD 0.0078125
+   txt201 
+TEXDEF txt201 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.625 0.125 RAD 0.03125 
+   txt201 
+TEXDEF txt201 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.625 0.125 APEX 0.859531 0.625 0.125 RAD 0.0078125
+   txt201 
+TEXDEF txt201 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.640469 0.125 APEX 0.75 0.734531 0.125 RAD 0.0078125
+   txt201 
+TEXDEF txt201 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.625 0.140469 APEX 0.75 0.625 0.234531 RAD 0.0078125
+   txt201 
+TEXDEF txt202 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.625 0.25 RAD 0.03125 
+   txt202 
+TEXDEF txt202 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.625 0.25 APEX 0.859531 0.625 0.25 RAD 0.0078125
+   txt202 
+TEXDEF txt202 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.640469 0.25 APEX 0.75 0.734531 0.25 RAD 0.0078125
+   txt202 
+TEXDEF txt202 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.625 0.265469 APEX 0.75 0.625 0.359531 RAD 0.0078125
+   txt202 
+TEXDEF txt202 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.625 0.375 RAD 0.03125 
+   txt202 
+TEXDEF txt202 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.625 0.375 APEX 0.859531 0.625 0.375 RAD 0.0078125
+   txt202 
+TEXDEF txt202 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.640469 0.375 APEX 0.75 0.734531 0.375 RAD 0.0078125
+   txt202 
+TEXDEF txt202 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.625 0.390469 APEX 0.75 0.625 0.484531 RAD 0.0078125
+   txt202 
+TEXDEF txt202 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.625 0.5 RAD 0.03125 
+   txt202 
+TEXDEF txt202 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.625 0.5 APEX 0.859531 0.625 0.5 RAD 0.0078125
+   txt202 
+TEXDEF txt203 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.640469 0.5 APEX 0.75 0.734531 0.5 RAD 0.0078125
+   txt203 
+TEXDEF txt203 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.625 0.515469 APEX 0.75 0.625 0.609531 RAD 0.0078125
+   txt203 
+TEXDEF txt203 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.625 0.625 RAD 0.03125 
+   txt203 
+TEXDEF txt203 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.625 0.625 APEX 0.859531 0.625 0.625 RAD 0.0078125
+   txt203 
+TEXDEF txt203 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.640469 0.625 APEX 0.75 0.734531 0.625 RAD 0.0078125
+   txt203 
+TEXDEF txt203 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.625 0.640469 APEX 0.75 0.625 0.734531 RAD 0.0078125
+   txt203 
+TEXDEF txt203 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.625 0.75 RAD 0.03125 
+   txt203 
+TEXDEF txt203 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.625 0.75 APEX 0.859531 0.625 0.75 RAD 0.0078125
+   txt203 
+TEXDEF txt203 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.640469 0.75 APEX 0.75 0.734531 0.75 RAD 0.0078125
+   txt203 
+TEXDEF txt203 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.625 0.765469 APEX 0.75 0.625 0.859531 RAD 0.0078125
+   txt203 
+TEXDEF txt204 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.625 0.875 RAD 0.03125 
+   txt204 
+TEXDEF txt204 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.625 0.875 APEX 0.859531 0.625 0.875 RAD 0.0078125
+   txt204 
+TEXDEF txt204 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.640469 0.875 APEX 0.75 0.734531 0.875 RAD 0.0078125
+   txt204 
+TEXDEF txt204 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.625 0.890469 APEX 0.75 0.625 0.984531 RAD 0.0078125
+   txt204 
+TEXDEF txt204 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.625 1 RAD 0.03125 
+   txt204 
+TEXDEF txt204 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.625 1 APEX 0.859531 0.625 1 RAD 0.0078125
+   txt204 
+TEXDEF txt204 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.640469 1 APEX 0.75 0.734531 1 RAD 0.0078125
+   txt204 
+TEXDEF txt204 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.75 0 RAD 0.03125 
+   txt204 
+TEXDEF txt204 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.75 0 APEX 0.859531 0.75 0 RAD 0.0078125
+   txt204 
+TEXDEF txt204 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.765469 0 APEX 0.75 0.859531 0 RAD 0.0078125
+   txt204 
+TEXDEF txt205 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.75 0.0154687 APEX 0.75 0.75 0.109531 RAD 0.0078125
+   txt205 
+TEXDEF txt205 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.75 0.125 RAD 0.03125 
+   txt205 
+TEXDEF txt205 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.75 0.125 APEX 0.859531 0.75 0.125 RAD 0.0078125
+   txt205 
+TEXDEF txt205 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.765469 0.125 APEX 0.75 0.859531 0.125 RAD 0.0078125
+   txt205 
+TEXDEF txt205 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.75 0.140469 APEX 0.75 0.75 0.234531 RAD 0.0078125
+   txt205 
+TEXDEF txt205 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.75 0.25 RAD 0.03125 
+   txt205 
+TEXDEF txt205 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.75 0.25 APEX 0.859531 0.75 0.25 RAD 0.0078125
+   txt205 
+TEXDEF txt205 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.765469 0.25 APEX 0.75 0.859531 0.25 RAD 0.0078125
+   txt205 
+TEXDEF txt205 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.75 0.265469 APEX 0.75 0.75 0.359531 RAD 0.0078125
+   txt205 
+TEXDEF txt205 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.75 0.375 RAD 0.03125 
+   txt205 
+TEXDEF txt206 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.75 0.375 APEX 0.859531 0.75 0.375 RAD 0.0078125
+   txt206 
+TEXDEF txt206 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.765469 0.375 APEX 0.75 0.859531 0.375 RAD 0.0078125
+   txt206 
+TEXDEF txt206 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.75 0.390469 APEX 0.75 0.75 0.484531 RAD 0.0078125
+   txt206 
+TEXDEF txt206 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.75 0.5 RAD 0.03125 
+   txt206 
+TEXDEF txt206 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.75 0.5 APEX 0.859531 0.75 0.5 RAD 0.0078125
+   txt206 
+TEXDEF txt206 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.765469 0.5 APEX 0.75 0.859531 0.5 RAD 0.0078125
+   txt206 
+TEXDEF txt206 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.75 0.515469 APEX 0.75 0.75 0.609531 RAD 0.0078125
+   txt206 
+TEXDEF txt206 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.75 0.625 RAD 0.03125 
+   txt206 
+TEXDEF txt206 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.75 0.625 APEX 0.859531 0.75 0.625 RAD 0.0078125
+   txt206 
+TEXDEF txt206 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.765469 0.625 APEX 0.75 0.859531 0.625 RAD 0.0078125
+   txt206 
+TEXDEF txt207 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.75 0.640469 APEX 0.75 0.75 0.734531 RAD 0.0078125
+   txt207 
+TEXDEF txt207 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.75 0.75 RAD 0.03125 
+   txt207 
+TEXDEF txt207 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.75 0.75 APEX 0.859531 0.75 0.75 RAD 0.0078125
+   txt207 
+TEXDEF txt207 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.765469 0.75 APEX 0.75 0.859531 0.75 RAD 0.0078125
+   txt207 
+TEXDEF txt207 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.75 0.765469 APEX 0.75 0.75 0.859531 RAD 0.0078125
+   txt207 
+TEXDEF txt207 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.75 0.875 RAD 0.03125 
+   txt207 
+TEXDEF txt207 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.75 0.875 APEX 0.859531 0.75 0.875 RAD 0.0078125
+   txt207 
+TEXDEF txt207 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.765469 0.875 APEX 0.75 0.859531 0.875 RAD 0.0078125
+   txt207 
+TEXDEF txt207 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.75 0.890469 APEX 0.75 0.75 0.984531 RAD 0.0078125
+   txt207 
+TEXDEF txt207 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.75 1 RAD 0.03125 
+   txt207 
+TEXDEF txt208 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.75 1 APEX 0.859531 0.75 1 RAD 0.0078125
+   txt208 
+TEXDEF txt208 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.765469 1 APEX 0.75 0.859531 1 RAD 0.0078125
+   txt208 
+TEXDEF txt208 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.875 0 RAD 0.03125 
+   txt208 
+TEXDEF txt208 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.875 0 APEX 0.859531 0.875 0 RAD 0.0078125
+   txt208 
+TEXDEF txt208 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.890469 0 APEX 0.75 0.984531 0 RAD 0.0078125
+   txt208 
+TEXDEF txt208 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.875 0.0154687 APEX 0.75 0.875 0.109531 RAD 0.0078125
+   txt208 
+TEXDEF txt208 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.875 0.125 RAD 0.03125 
+   txt208 
+TEXDEF txt208 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.875 0.125 APEX 0.859531 0.875 0.125 RAD 0.0078125
+   txt208 
+TEXDEF txt208 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.890469 0.125 APEX 0.75 0.984531 0.125 RAD 0.0078125
+   txt208 
+TEXDEF txt208 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.875 0.140469 APEX 0.75 0.875 0.234531 RAD 0.0078125
+   txt208 
+TEXDEF txt209 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.875 0.25 RAD 0.03125 
+   txt209 
+TEXDEF txt209 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.875 0.25 APEX 0.859531 0.875 0.25 RAD 0.0078125
+   txt209 
+TEXDEF txt209 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.890469 0.25 APEX 0.75 0.984531 0.25 RAD 0.0078125
+   txt209 
+TEXDEF txt209 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.875 0.265469 APEX 0.75 0.875 0.359531 RAD 0.0078125
+   txt209 
+TEXDEF txt209 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.875 0.375 RAD 0.03125 
+   txt209 
+TEXDEF txt209 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.875 0.375 APEX 0.859531 0.875 0.375 RAD 0.0078125
+   txt209 
+TEXDEF txt209 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.890469 0.375 APEX 0.75 0.984531 0.375 RAD 0.0078125
+   txt209 
+TEXDEF txt209 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.875 0.390469 APEX 0.75 0.875 0.484531 RAD 0.0078125
+   txt209 
+TEXDEF txt209 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.875 0.5 RAD 0.03125 
+   txt209 
+TEXDEF txt209 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.875 0.5 APEX 0.859531 0.875 0.5 RAD 0.0078125
+   txt209 
+TEXDEF txt210 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.890469 0.5 APEX 0.75 0.984531 0.5 RAD 0.0078125
+   txt210 
+TEXDEF txt210 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.875 0.515469 APEX 0.75 0.875 0.609531 RAD 0.0078125
+   txt210 
+TEXDEF txt210 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.875 0.625 RAD 0.03125 
+   txt210 
+TEXDEF txt210 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.875 0.625 APEX 0.859531 0.875 0.625 RAD 0.0078125
+   txt210 
+TEXDEF txt210 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.890469 0.625 APEX 0.75 0.984531 0.625 RAD 0.0078125
+   txt210 
+TEXDEF txt210 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.875 0.640469 APEX 0.75 0.875 0.734531 RAD 0.0078125
+   txt210 
+TEXDEF txt210 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.875 0.75 RAD 0.03125 
+   txt210 
+TEXDEF txt210 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.875 0.75 APEX 0.859531 0.875 0.75 RAD 0.0078125
+   txt210 
+TEXDEF txt210 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.890469 0.75 APEX 0.75 0.984531 0.75 RAD 0.0078125
+   txt210 
+TEXDEF txt210 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.875 0.765469 APEX 0.75 0.875 0.859531 RAD 0.0078125
+   txt210 
+TEXDEF txt211 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.875 0.875 RAD 0.03125 
+   txt211 
+TEXDEF txt211 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.875 0.875 APEX 0.859531 0.875 0.875 RAD 0.0078125
+   txt211 
+TEXDEF txt211 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.890469 0.875 APEX 0.75 0.984531 0.875 RAD 0.0078125
+   txt211 
+TEXDEF txt211 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.875 0.890469 APEX 0.75 0.875 0.984531 RAD 0.0078125
+   txt211 
+TEXDEF txt211 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 0.875 1 RAD 0.03125 
+   txt211 
+TEXDEF txt211 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 0.875 1 APEX 0.859531 0.875 1 RAD 0.0078125
+   txt211 
+TEXDEF txt211 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 0.890469 1 APEX 0.75 0.984531 1 RAD 0.0078125
+   txt211 
+TEXDEF txt211 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 1 0 RAD 0.03125 
+   txt211 
+TEXDEF txt211 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 1 0 APEX 0.859531 1 0 RAD 0.0078125
+   txt211 
+TEXDEF txt211 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 1 0.0154687 APEX 0.75 1 0.109531 RAD 0.0078125
+   txt211 
+TEXDEF txt212 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 1 0.125 RAD 0.03125 
+   txt212 
+TEXDEF txt212 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 1 0.125 APEX 0.859531 1 0.125 RAD 0.0078125
+   txt212 
+TEXDEF txt212 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 1 0.140469 APEX 0.75 1 0.234531 RAD 0.0078125
+   txt212 
+TEXDEF txt212 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 1 0.25 RAD 0.03125 
+   txt212 
+TEXDEF txt212 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 1 0.25 APEX 0.859531 1 0.25 RAD 0.0078125
+   txt212 
+TEXDEF txt212 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 1 0.265469 APEX 0.75 1 0.359531 RAD 0.0078125
+   txt212 
+TEXDEF txt212 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 1 0.375 RAD 0.03125 
+   txt212 
+TEXDEF txt212 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 1 0.375 APEX 0.859531 1 0.375 RAD 0.0078125
+   txt212 
+TEXDEF txt212 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 1 0.390469 APEX 0.75 1 0.484531 RAD 0.0078125
+   txt212 
+TEXDEF txt212 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 1 0.5 RAD 0.03125 
+   txt212 
+TEXDEF txt213 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 1 0.5 APEX 0.859531 1 0.5 RAD 0.0078125
+   txt213 
+TEXDEF txt213 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 1 0.515469 APEX 0.75 1 0.609531 RAD 0.0078125
+   txt213 
+TEXDEF txt213 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 1 0.625 RAD 0.03125 
+   txt213 
+TEXDEF txt213 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 1 0.625 APEX 0.859531 1 0.625 RAD 0.0078125
+   txt213 
+TEXDEF txt213 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 1 0.640469 APEX 0.75 1 0.734531 RAD 0.0078125
+   txt213 
+TEXDEF txt213 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 1 0.75 RAD 0.03125 
+   txt213 
+TEXDEF txt213 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 1 0.75 APEX 0.859531 1 0.75 RAD 0.0078125
+   txt213 
+TEXDEF txt213 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 1 0.765469 APEX 0.75 1 0.859531 RAD 0.0078125
+   txt213 
+TEXDEF txt213 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 1 0.875 RAD 0.03125 
+   txt213 
+TEXDEF txt213 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 1 0.875 APEX 0.859531 1 0.875 RAD 0.0078125
+   txt213 
+TEXDEF txt214 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.75 1 0.890469 APEX 0.75 1 0.984531 RAD 0.0078125
+   txt214 
+TEXDEF txt214 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.75 1 1 RAD 0.03125 
+   txt214 
+TEXDEF txt214 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.765469 1 1 APEX 0.859531 1 1 RAD 0.0078125
+   txt214 
+TEXDEF txt214 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0 0 RAD 0.03125 
+   txt214 
+TEXDEF txt214 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0 0 APEX 0.984531 0 0 RAD 0.0078125
+   txt214 
+TEXDEF txt214 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.0154687 0 APEX 0.875 0.109531 0 RAD 0.0078125
+   txt214 
+TEXDEF txt214 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0 0.0154687 APEX 0.875 0 0.109531 RAD 0.0078125
+   txt214 
+TEXDEF txt214 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0 0.125 RAD 0.03125 
+   txt214 
+TEXDEF txt214 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0 0.125 APEX 0.984531 0 0.125 RAD 0.0078125
+   txt214 
+TEXDEF txt214 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.125 APEX 0.875 0.109531 0.125 RAD 0.0078125
+   txt214 
+TEXDEF txt215 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0 0.140469 APEX 0.875 0 0.234531 RAD 0.0078125
+   txt215 
+TEXDEF txt215 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0 0.25 RAD 0.03125 
+   txt215 
+TEXDEF txt215 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0 0.25 APEX 0.984531 0 0.25 RAD 0.0078125
+   txt215 
+TEXDEF txt215 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.25 APEX 0.875 0.109531 0.25 RAD 0.0078125
+   txt215 
+TEXDEF txt215 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0 0.265469 APEX 0.875 0 0.359531 RAD 0.0078125
+   txt215 
+TEXDEF txt215 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0 0.375 RAD 0.03125 
+   txt215 
+TEXDEF txt215 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0 0.375 APEX 0.984531 0 0.375 RAD 0.0078125
+   txt215 
+TEXDEF txt215 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.375 APEX 0.875 0.109531 0.375 RAD 0.0078125
+   txt215 
+TEXDEF txt215 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0 0.390469 APEX 0.875 0 0.484531 RAD 0.0078125
+   txt215 
+TEXDEF txt215 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0 0.5 RAD 0.03125 
+   txt215 
+TEXDEF txt216 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0 0.5 APEX 0.984531 0 0.5 RAD 0.0078125
+   txt216 
+TEXDEF txt216 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.5 APEX 0.875 0.109531 0.5 RAD 0.0078125
+   txt216 
+TEXDEF txt216 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0 0.515469 APEX 0.875 0 0.609531 RAD 0.0078125
+   txt216 
+TEXDEF txt216 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0 0.625 RAD 0.03125 
+   txt216 
+TEXDEF txt216 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0 0.625 APEX 0.984531 0 0.625 RAD 0.0078125
+   txt216 
+TEXDEF txt216 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.625 APEX 0.875 0.109531 0.625 RAD 0.0078125
+   txt216 
+TEXDEF txt216 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0 0.640469 APEX 0.875 0 0.734531 RAD 0.0078125
+   txt216 
+TEXDEF txt216 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0 0.75 RAD 0.03125 
+   txt216 
+TEXDEF txt216 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0 0.75 APEX 0.984531 0 0.75 RAD 0.0078125
+   txt216 
+TEXDEF txt216 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.75 APEX 0.875 0.109531 0.75 RAD 0.0078125
+   txt216 
+TEXDEF txt217 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0 0.765469 APEX 0.875 0 0.859531 RAD 0.0078125
+   txt217 
+TEXDEF txt217 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0 0.875 RAD 0.03125 
+   txt217 
+TEXDEF txt217 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0 0.875 APEX 0.984531 0 0.875 RAD 0.0078125
+   txt217 
+TEXDEF txt217 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.875 APEX 0.875 0.109531 0.875 RAD 0.0078125
+   txt217 
+TEXDEF txt217 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0 0.890469 APEX 0.875 0 0.984531 RAD 0.0078125
+   txt217 
+TEXDEF txt217 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0 1 RAD 0.03125 
+   txt217 
+TEXDEF txt217 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0 1 APEX 0.984531 0 1 RAD 0.0078125
+   txt217 
+TEXDEF txt217 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.0154687 1 APEX 0.875 0.109531 1 RAD 0.0078125
+   txt217 
+TEXDEF txt217 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.125 0 RAD 0.03125 
+   txt217 
+TEXDEF txt217 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.125 0 APEX 0.984531 0.125 0 RAD 0.0078125
+   txt217 
+TEXDEF txt218 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.140469 0 APEX 0.875 0.234531 0 RAD 0.0078125
+   txt218 
+TEXDEF txt218 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.125 0.0154687 APEX 0.875 0.125 0.109531 RAD 0.0078125
+   txt218 
+TEXDEF txt218 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.125 0.125 RAD 0.03125 
+   txt218 
+TEXDEF txt218 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.125 0.125 APEX 0.984531 0.125 0.125 RAD 0.0078125
+   txt218 
+TEXDEF txt218 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.140469 0.125 APEX 0.875 0.234531 0.125 RAD 0.0078125
+   txt218 
+TEXDEF txt218 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.125 0.140469 APEX 0.875 0.125 0.234531 RAD 0.0078125
+   txt218 
+TEXDEF txt218 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.125 0.25 RAD 0.03125 
+   txt218 
+TEXDEF txt218 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.125 0.25 APEX 0.984531 0.125 0.25 RAD 0.0078125
+   txt218 
+TEXDEF txt218 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.140469 0.25 APEX 0.875 0.234531 0.25 RAD 0.0078125
+   txt218 
+TEXDEF txt218 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.125 0.265469 APEX 0.875 0.125 0.359531 RAD 0.0078125
+   txt218 
+TEXDEF txt219 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.125 0.375 RAD 0.03125 
+   txt219 
+TEXDEF txt219 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.125 0.375 APEX 0.984531 0.125 0.375 RAD 0.0078125
+   txt219 
+TEXDEF txt219 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.140469 0.375 APEX 0.875 0.234531 0.375 RAD 0.0078125
+   txt219 
+TEXDEF txt219 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.125 0.390469 APEX 0.875 0.125 0.484531 RAD 0.0078125
+   txt219 
+TEXDEF txt219 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.125 0.5 RAD 0.03125 
+   txt219 
+TEXDEF txt219 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.125 0.5 APEX 0.984531 0.125 0.5 RAD 0.0078125
+   txt219 
+TEXDEF txt219 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.140469 0.5 APEX 0.875 0.234531 0.5 RAD 0.0078125
+   txt219 
+TEXDEF txt219 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.125 0.515469 APEX 0.875 0.125 0.609531 RAD 0.0078125
+   txt219 
+TEXDEF txt219 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.125 0.625 RAD 0.03125 
+   txt219 
+TEXDEF txt219 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.125 0.625 APEX 0.984531 0.125 0.625 RAD 0.0078125
+   txt219 
+TEXDEF txt220 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.140469 0.625 APEX 0.875 0.234531 0.625 RAD 0.0078125
+   txt220 
+TEXDEF txt220 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.125 0.640469 APEX 0.875 0.125 0.734531 RAD 0.0078125
+   txt220 
+TEXDEF txt220 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.125 0.75 RAD 0.03125 
+   txt220 
+TEXDEF txt220 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.125 0.75 APEX 0.984531 0.125 0.75 RAD 0.0078125
+   txt220 
+TEXDEF txt220 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.140469 0.75 APEX 0.875 0.234531 0.75 RAD 0.0078125
+   txt220 
+TEXDEF txt220 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.125 0.765469 APEX 0.875 0.125 0.859531 RAD 0.0078125
+   txt220 
+TEXDEF txt220 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.125 0.875 RAD 0.03125 
+   txt220 
+TEXDEF txt220 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.125 0.875 APEX 0.984531 0.125 0.875 RAD 0.0078125
+   txt220 
+TEXDEF txt220 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.140469 0.875 APEX 0.875 0.234531 0.875 RAD 0.0078125
+   txt220 
+TEXDEF txt220 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.125 0.890469 APEX 0.875 0.125 0.984531 RAD 0.0078125
+   txt220 
+TEXDEF txt221 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.125 1 RAD 0.03125 
+   txt221 
+TEXDEF txt221 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.125 1 APEX 0.984531 0.125 1 RAD 0.0078125
+   txt221 
+TEXDEF txt221 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.140469 1 APEX 0.875 0.234531 1 RAD 0.0078125
+   txt221 
+TEXDEF txt221 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.25 0 RAD 0.03125 
+   txt221 
+TEXDEF txt221 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.25 0 APEX 0.984531 0.25 0 RAD 0.0078125
+   txt221 
+TEXDEF txt221 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.265469 0 APEX 0.875 0.359531 0 RAD 0.0078125
+   txt221 
+TEXDEF txt221 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.25 0.0154687 APEX 0.875 0.25 0.109531 RAD 0.0078125
+   txt221 
+TEXDEF txt221 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.25 0.125 RAD 0.03125 
+   txt221 
+TEXDEF txt221 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.25 0.125 APEX 0.984531 0.25 0.125 RAD 0.0078125
+   txt221 
+TEXDEF txt221 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.265469 0.125 APEX 0.875 0.359531 0.125 RAD 0.0078125
+   txt221 
+TEXDEF txt222 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.25 0.140469 APEX 0.875 0.25 0.234531 RAD 0.0078125
+   txt222 
+TEXDEF txt222 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.25 0.25 RAD 0.03125 
+   txt222 
+TEXDEF txt222 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.25 0.25 APEX 0.984531 0.25 0.25 RAD 0.0078125
+   txt222 
+TEXDEF txt222 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.265469 0.25 APEX 0.875 0.359531 0.25 RAD 0.0078125
+   txt222 
+TEXDEF txt222 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.25 0.265469 APEX 0.875 0.25 0.359531 RAD 0.0078125
+   txt222 
+TEXDEF txt222 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.25 0.375 RAD 0.03125 
+   txt222 
+TEXDEF txt222 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.25 0.375 APEX 0.984531 0.25 0.375 RAD 0.0078125
+   txt222 
+TEXDEF txt222 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.265469 0.375 APEX 0.875 0.359531 0.375 RAD 0.0078125
+   txt222 
+TEXDEF txt222 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.25 0.390469 APEX 0.875 0.25 0.484531 RAD 0.0078125
+   txt222 
+TEXDEF txt222 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.25 0.5 RAD 0.03125 
+   txt222 
+TEXDEF txt223 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.25 0.5 APEX 0.984531 0.25 0.5 RAD 0.0078125
+   txt223 
+TEXDEF txt223 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.265469 0.5 APEX 0.875 0.359531 0.5 RAD 0.0078125
+   txt223 
+TEXDEF txt223 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.25 0.515469 APEX 0.875 0.25 0.609531 RAD 0.0078125
+   txt223 
+TEXDEF txt223 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.25 0.625 RAD 0.03125 
+   txt223 
+TEXDEF txt223 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.25 0.625 APEX 0.984531 0.25 0.625 RAD 0.0078125
+   txt223 
+TEXDEF txt223 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.265469 0.625 APEX 0.875 0.359531 0.625 RAD 0.0078125
+   txt223 
+TEXDEF txt223 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.25 0.640469 APEX 0.875 0.25 0.734531 RAD 0.0078125
+   txt223 
+TEXDEF txt223 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.25 0.75 RAD 0.03125 
+   txt223 
+TEXDEF txt223 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.25 0.75 APEX 0.984531 0.25 0.75 RAD 0.0078125
+   txt223 
+TEXDEF txt223 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.265469 0.75 APEX 0.875 0.359531 0.75 RAD 0.0078125
+   txt223 
+TEXDEF txt224 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.25 0.765469 APEX 0.875 0.25 0.859531 RAD 0.0078125
+   txt224 
+TEXDEF txt224 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.25 0.875 RAD 0.03125 
+   txt224 
+TEXDEF txt224 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.25 0.875 APEX 0.984531 0.25 0.875 RAD 0.0078125
+   txt224 
+TEXDEF txt224 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.265469 0.875 APEX 0.875 0.359531 0.875 RAD 0.0078125
+   txt224 
+TEXDEF txt224 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.25 0.890469 APEX 0.875 0.25 0.984531 RAD 0.0078125
+   txt224 
+TEXDEF txt224 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.25 1 RAD 0.03125 
+   txt224 
+TEXDEF txt224 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.25 1 APEX 0.984531 0.25 1 RAD 0.0078125
+   txt224 
+TEXDEF txt224 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.265469 1 APEX 0.875 0.359531 1 RAD 0.0078125
+   txt224 
+TEXDEF txt224 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.375 0 RAD 0.03125 
+   txt224 
+TEXDEF txt224 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.375 0 APEX 0.984531 0.375 0 RAD 0.0078125
+   txt224 
+TEXDEF txt225 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.390469 0 APEX 0.875 0.484531 0 RAD 0.0078125
+   txt225 
+TEXDEF txt225 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.375 0.0154687 APEX 0.875 0.375 0.109531 RAD 0.0078125
+   txt225 
+TEXDEF txt225 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.375 0.125 RAD 0.03125 
+   txt225 
+TEXDEF txt225 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.375 0.125 APEX 0.984531 0.375 0.125 RAD 0.0078125
+   txt225 
+TEXDEF txt225 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.390469 0.125 APEX 0.875 0.484531 0.125 RAD 0.0078125
+   txt225 
+TEXDEF txt225 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.375 0.140469 APEX 0.875 0.375 0.234531 RAD 0.0078125
+   txt225 
+TEXDEF txt225 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.375 0.25 RAD 0.03125 
+   txt225 
+TEXDEF txt225 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.375 0.25 APEX 0.984531 0.375 0.25 RAD 0.0078125
+   txt225 
+TEXDEF txt225 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.390469 0.25 APEX 0.875 0.484531 0.25 RAD 0.0078125
+   txt225 
+TEXDEF txt225 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.375 0.265469 APEX 0.875 0.375 0.359531 RAD 0.0078125
+   txt225 
+TEXDEF txt226 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.375 0.375 RAD 0.03125 
+   txt226 
+TEXDEF txt226 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.375 0.375 APEX 0.984531 0.375 0.375 RAD 0.0078125
+   txt226 
+TEXDEF txt226 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.390469 0.375 APEX 0.875 0.484531 0.375 RAD 0.0078125
+   txt226 
+TEXDEF txt226 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.375 0.390469 APEX 0.875 0.375 0.484531 RAD 0.0078125
+   txt226 
+TEXDEF txt226 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.375 0.5 RAD 0.03125 
+   txt226 
+TEXDEF txt226 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.375 0.5 APEX 0.984531 0.375 0.5 RAD 0.0078125
+   txt226 
+TEXDEF txt226 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.390469 0.5 APEX 0.875 0.484531 0.5 RAD 0.0078125
+   txt226 
+TEXDEF txt226 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.375 0.515469 APEX 0.875 0.375 0.609531 RAD 0.0078125
+   txt226 
+TEXDEF txt226 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.375 0.625 RAD 0.03125 
+   txt226 
+TEXDEF txt226 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.375 0.625 APEX 0.984531 0.375 0.625 RAD 0.0078125
+   txt226 
+TEXDEF txt227 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.390469 0.625 APEX 0.875 0.484531 0.625 RAD 0.0078125
+   txt227 
+TEXDEF txt227 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.375 0.640469 APEX 0.875 0.375 0.734531 RAD 0.0078125
+   txt227 
+TEXDEF txt227 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.375 0.75 RAD 0.03125 
+   txt227 
+TEXDEF txt227 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.375 0.75 APEX 0.984531 0.375 0.75 RAD 0.0078125
+   txt227 
+TEXDEF txt227 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.390469 0.75 APEX 0.875 0.484531 0.75 RAD 0.0078125
+   txt227 
+TEXDEF txt227 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.375 0.765469 APEX 0.875 0.375 0.859531 RAD 0.0078125
+   txt227 
+TEXDEF txt227 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.375 0.875 RAD 0.03125 
+   txt227 
+TEXDEF txt227 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.375 0.875 APEX 0.984531 0.375 0.875 RAD 0.0078125
+   txt227 
+TEXDEF txt227 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.390469 0.875 APEX 0.875 0.484531 0.875 RAD 0.0078125
+   txt227 
+TEXDEF txt227 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.375 0.890469 APEX 0.875 0.375 0.984531 RAD 0.0078125
+   txt227 
+TEXDEF txt228 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.375 1 RAD 0.03125 
+   txt228 
+TEXDEF txt228 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.375 1 APEX 0.984531 0.375 1 RAD 0.0078125
+   txt228 
+TEXDEF txt228 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.390469 1 APEX 0.875 0.484531 1 RAD 0.0078125
+   txt228 
+TEXDEF txt228 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.5 0 RAD 0.03125 
+   txt228 
+TEXDEF txt228 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.5 0 APEX 0.984531 0.5 0 RAD 0.0078125
+   txt228 
+TEXDEF txt228 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.515469 0 APEX 0.875 0.609531 0 RAD 0.0078125
+   txt228 
+TEXDEF txt228 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.5 0.0154687 APEX 0.875 0.5 0.109531 RAD 0.0078125
+   txt228 
+TEXDEF txt228 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.5 0.125 RAD 0.03125 
+   txt228 
+TEXDEF txt228 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.5 0.125 APEX 0.984531 0.5 0.125 RAD 0.0078125
+   txt228 
+TEXDEF txt228 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.515469 0.125 APEX 0.875 0.609531 0.125 RAD 0.0078125
+   txt228 
+TEXDEF txt229 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.5 0.140469 APEX 0.875 0.5 0.234531 RAD 0.0078125
+   txt229 
+TEXDEF txt229 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.5 0.25 RAD 0.03125 
+   txt229 
+TEXDEF txt229 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.5 0.25 APEX 0.984531 0.5 0.25 RAD 0.0078125
+   txt229 
+TEXDEF txt229 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.515469 0.25 APEX 0.875 0.609531 0.25 RAD 0.0078125
+   txt229 
+TEXDEF txt229 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.5 0.265469 APEX 0.875 0.5 0.359531 RAD 0.0078125
+   txt229 
+TEXDEF txt229 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.5 0.375 RAD 0.03125 
+   txt229 
+TEXDEF txt229 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.5 0.375 APEX 0.984531 0.5 0.375 RAD 0.0078125
+   txt229 
+TEXDEF txt229 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.515469 0.375 APEX 0.875 0.609531 0.375 RAD 0.0078125
+   txt229 
+TEXDEF txt229 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.5 0.390469 APEX 0.875 0.5 0.484531 RAD 0.0078125
+   txt229 
+TEXDEF txt229 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.5 0.5 RAD 0.03125 
+   txt229 
+TEXDEF txt230 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.5 0.5 APEX 0.984531 0.5 0.5 RAD 0.0078125
+   txt230 
+TEXDEF txt230 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.515469 0.5 APEX 0.875 0.609531 0.5 RAD 0.0078125
+   txt230 
+TEXDEF txt230 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.5 0.515469 APEX 0.875 0.5 0.609531 RAD 0.0078125
+   txt230 
+TEXDEF txt230 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.5 0.625 RAD 0.03125 
+   txt230 
+TEXDEF txt230 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.5 0.625 APEX 0.984531 0.5 0.625 RAD 0.0078125
+   txt230 
+TEXDEF txt230 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.515469 0.625 APEX 0.875 0.609531 0.625 RAD 0.0078125
+   txt230 
+TEXDEF txt230 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.5 0.640469 APEX 0.875 0.5 0.734531 RAD 0.0078125
+   txt230 
+TEXDEF txt230 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.5 0.75 RAD 0.03125 
+   txt230 
+TEXDEF txt230 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.5 0.75 APEX 0.984531 0.5 0.75 RAD 0.0078125
+   txt230 
+TEXDEF txt230 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.515469 0.75 APEX 0.875 0.609531 0.75 RAD 0.0078125
+   txt230 
+TEXDEF txt231 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.5 0.765469 APEX 0.875 0.5 0.859531 RAD 0.0078125
+   txt231 
+TEXDEF txt231 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.5 0.875 RAD 0.03125 
+   txt231 
+TEXDEF txt231 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.5 0.875 APEX 0.984531 0.5 0.875 RAD 0.0078125
+   txt231 
+TEXDEF txt231 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.515469 0.875 APEX 0.875 0.609531 0.875 RAD 0.0078125
+   txt231 
+TEXDEF txt231 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.5 0.890469 APEX 0.875 0.5 0.984531 RAD 0.0078125
+   txt231 
+TEXDEF txt231 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.5 1 RAD 0.03125 
+   txt231 
+TEXDEF txt231 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.5 1 APEX 0.984531 0.5 1 RAD 0.0078125
+   txt231 
+TEXDEF txt231 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.515469 1 APEX 0.875 0.609531 1 RAD 0.0078125
+   txt231 
+TEXDEF txt231 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.625 0 RAD 0.03125 
+   txt231 
+TEXDEF txt231 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.625 0 APEX 0.984531 0.625 0 RAD 0.0078125
+   txt231 
+TEXDEF txt232 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.640469 0 APEX 0.875 0.734531 0 RAD 0.0078125
+   txt232 
+TEXDEF txt232 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.625 0.0154687 APEX 0.875 0.625 0.109531 RAD 0.0078125
+   txt232 
+TEXDEF txt232 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.625 0.125 RAD 0.03125 
+   txt232 
+TEXDEF txt232 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.625 0.125 APEX 0.984531 0.625 0.125 RAD 0.0078125
+   txt232 
+TEXDEF txt232 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.640469 0.125 APEX 0.875 0.734531 0.125 RAD 0.0078125
+   txt232 
+TEXDEF txt232 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.625 0.140469 APEX 0.875 0.625 0.234531 RAD 0.0078125
+   txt232 
+TEXDEF txt232 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.625 0.25 RAD 0.03125 
+   txt232 
+TEXDEF txt232 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.625 0.25 APEX 0.984531 0.625 0.25 RAD 0.0078125
+   txt232 
+TEXDEF txt232 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.640469 0.25 APEX 0.875 0.734531 0.25 RAD 0.0078125
+   txt232 
+TEXDEF txt232 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.625 0.265469 APEX 0.875 0.625 0.359531 RAD 0.0078125
+   txt232 
+TEXDEF txt233 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.625 0.375 RAD 0.03125 
+   txt233 
+TEXDEF txt233 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.625 0.375 APEX 0.984531 0.625 0.375 RAD 0.0078125
+   txt233 
+TEXDEF txt233 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.640469 0.375 APEX 0.875 0.734531 0.375 RAD 0.0078125
+   txt233 
+TEXDEF txt233 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.625 0.390469 APEX 0.875 0.625 0.484531 RAD 0.0078125
+   txt233 
+TEXDEF txt233 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.625 0.5 RAD 0.03125 
+   txt233 
+TEXDEF txt233 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.625 0.5 APEX 0.984531 0.625 0.5 RAD 0.0078125
+   txt233 
+TEXDEF txt233 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.640469 0.5 APEX 0.875 0.734531 0.5 RAD 0.0078125
+   txt233 
+TEXDEF txt233 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.625 0.515469 APEX 0.875 0.625 0.609531 RAD 0.0078125
+   txt233 
+TEXDEF txt233 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.625 0.625 RAD 0.03125 
+   txt233 
+TEXDEF txt233 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.625 0.625 APEX 0.984531 0.625 0.625 RAD 0.0078125
+   txt233 
+TEXDEF txt234 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.640469 0.625 APEX 0.875 0.734531 0.625 RAD 0.0078125
+   txt234 
+TEXDEF txt234 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.625 0.640469 APEX 0.875 0.625 0.734531 RAD 0.0078125
+   txt234 
+TEXDEF txt234 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.625 0.75 RAD 0.03125 
+   txt234 
+TEXDEF txt234 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.625 0.75 APEX 0.984531 0.625 0.75 RAD 0.0078125
+   txt234 
+TEXDEF txt234 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.640469 0.75 APEX 0.875 0.734531 0.75 RAD 0.0078125
+   txt234 
+TEXDEF txt234 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.625 0.765469 APEX 0.875 0.625 0.859531 RAD 0.0078125
+   txt234 
+TEXDEF txt234 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.625 0.875 RAD 0.03125 
+   txt234 
+TEXDEF txt234 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.625 0.875 APEX 0.984531 0.625 0.875 RAD 0.0078125
+   txt234 
+TEXDEF txt234 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.640469 0.875 APEX 0.875 0.734531 0.875 RAD 0.0078125
+   txt234 
+TEXDEF txt234 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.625 0.890469 APEX 0.875 0.625 0.984531 RAD 0.0078125
+   txt234 
+TEXDEF txt235 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.625 1 RAD 0.03125 
+   txt235 
+TEXDEF txt235 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.625 1 APEX 0.984531 0.625 1 RAD 0.0078125
+   txt235 
+TEXDEF txt235 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.640469 1 APEX 0.875 0.734531 1 RAD 0.0078125
+   txt235 
+TEXDEF txt235 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.75 0 RAD 0.03125 
+   txt235 
+TEXDEF txt235 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.75 0 APEX 0.984531 0.75 0 RAD 0.0078125
+   txt235 
+TEXDEF txt235 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.765469 0 APEX 0.875 0.859531 0 RAD 0.0078125
+   txt235 
+TEXDEF txt235 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.75 0.0154687 APEX 0.875 0.75 0.109531 RAD 0.0078125
+   txt235 
+TEXDEF txt235 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.75 0.125 RAD 0.03125 
+   txt235 
+TEXDEF txt235 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.75 0.125 APEX 0.984531 0.75 0.125 RAD 0.0078125
+   txt235 
+TEXDEF txt235 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.765469 0.125 APEX 0.875 0.859531 0.125 RAD 0.0078125
+   txt235 
+TEXDEF txt236 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.75 0.140469 APEX 0.875 0.75 0.234531 RAD 0.0078125
+   txt236 
+TEXDEF txt236 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.75 0.25 RAD 0.03125 
+   txt236 
+TEXDEF txt236 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.75 0.25 APEX 0.984531 0.75 0.25 RAD 0.0078125
+   txt236 
+TEXDEF txt236 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.765469 0.25 APEX 0.875 0.859531 0.25 RAD 0.0078125
+   txt236 
+TEXDEF txt236 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.75 0.265469 APEX 0.875 0.75 0.359531 RAD 0.0078125
+   txt236 
+TEXDEF txt236 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.75 0.375 RAD 0.03125 
+   txt236 
+TEXDEF txt236 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.75 0.375 APEX 0.984531 0.75 0.375 RAD 0.0078125
+   txt236 
+TEXDEF txt236 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.765469 0.375 APEX 0.875 0.859531 0.375 RAD 0.0078125
+   txt236 
+TEXDEF txt236 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.75 0.390469 APEX 0.875 0.75 0.484531 RAD 0.0078125
+   txt236 
+TEXDEF txt236 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.75 0.5 RAD 0.03125 
+   txt236 
+TEXDEF txt237 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.75 0.5 APEX 0.984531 0.75 0.5 RAD 0.0078125
+   txt237 
+TEXDEF txt237 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.765469 0.5 APEX 0.875 0.859531 0.5 RAD 0.0078125
+   txt237 
+TEXDEF txt237 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.75 0.515469 APEX 0.875 0.75 0.609531 RAD 0.0078125
+   txt237 
+TEXDEF txt237 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.75 0.625 RAD 0.03125 
+   txt237 
+TEXDEF txt237 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.75 0.625 APEX 0.984531 0.75 0.625 RAD 0.0078125
+   txt237 
+TEXDEF txt237 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.765469 0.625 APEX 0.875 0.859531 0.625 RAD 0.0078125
+   txt237 
+TEXDEF txt237 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.75 0.640469 APEX 0.875 0.75 0.734531 RAD 0.0078125
+   txt237 
+TEXDEF txt237 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.75 0.75 RAD 0.03125 
+   txt237 
+TEXDEF txt237 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.75 0.75 APEX 0.984531 0.75 0.75 RAD 0.0078125
+   txt237 
+TEXDEF txt237 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.765469 0.75 APEX 0.875 0.859531 0.75 RAD 0.0078125
+   txt237 
+TEXDEF txt238 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.75 0.765469 APEX 0.875 0.75 0.859531 RAD 0.0078125
+   txt238 
+TEXDEF txt238 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.75 0.875 RAD 0.03125 
+   txt238 
+TEXDEF txt238 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.75 0.875 APEX 0.984531 0.75 0.875 RAD 0.0078125
+   txt238 
+TEXDEF txt238 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.765469 0.875 APEX 0.875 0.859531 0.875 RAD 0.0078125
+   txt238 
+TEXDEF txt238 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.75 0.890469 APEX 0.875 0.75 0.984531 RAD 0.0078125
+   txt238 
+TEXDEF txt238 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.75 1 RAD 0.03125 
+   txt238 
+TEXDEF txt238 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.75 1 APEX 0.984531 0.75 1 RAD 0.0078125
+   txt238 
+TEXDEF txt238 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.765469 1 APEX 0.875 0.859531 1 RAD 0.0078125
+   txt238 
+TEXDEF txt238 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.875 0 RAD 0.03125 
+   txt238 
+TEXDEF txt238 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.875 0 APEX 0.984531 0.875 0 RAD 0.0078125
+   txt238 
+TEXDEF txt239 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.890469 0 APEX 0.875 0.984531 0 RAD 0.0078125
+   txt239 
+TEXDEF txt239 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.875 0.0154687 APEX 0.875 0.875 0.109531 RAD 0.0078125
+   txt239 
+TEXDEF txt239 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.875 0.125 RAD 0.03125 
+   txt239 
+TEXDEF txt239 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.875 0.125 APEX 0.984531 0.875 0.125 RAD 0.0078125
+   txt239 
+TEXDEF txt239 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.890469 0.125 APEX 0.875 0.984531 0.125 RAD 0.0078125
+   txt239 
+TEXDEF txt239 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.875 0.140469 APEX 0.875 0.875 0.234531 RAD 0.0078125
+   txt239 
+TEXDEF txt239 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.875 0.25 RAD 0.03125 
+   txt239 
+TEXDEF txt239 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.875 0.25 APEX 0.984531 0.875 0.25 RAD 0.0078125
+   txt239 
+TEXDEF txt239 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.890469 0.25 APEX 0.875 0.984531 0.25 RAD 0.0078125
+   txt239 
+TEXDEF txt239 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.875 0.265469 APEX 0.875 0.875 0.359531 RAD 0.0078125
+   txt239 
+TEXDEF txt240 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.875 0.375 RAD 0.03125 
+   txt240 
+TEXDEF txt240 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.875 0.375 APEX 0.984531 0.875 0.375 RAD 0.0078125
+   txt240 
+TEXDEF txt240 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.890469 0.375 APEX 0.875 0.984531 0.375 RAD 0.0078125
+   txt240 
+TEXDEF txt240 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.875 0.390469 APEX 0.875 0.875 0.484531 RAD 0.0078125
+   txt240 
+TEXDEF txt240 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.875 0.5 RAD 0.03125 
+   txt240 
+TEXDEF txt240 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.875 0.5 APEX 0.984531 0.875 0.5 RAD 0.0078125
+   txt240 
+TEXDEF txt240 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.890469 0.5 APEX 0.875 0.984531 0.5 RAD 0.0078125
+   txt240 
+TEXDEF txt240 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.875 0.515469 APEX 0.875 0.875 0.609531 RAD 0.0078125
+   txt240 
+TEXDEF txt240 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.875 0.625 RAD 0.03125 
+   txt240 
+TEXDEF txt240 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.875 0.625 APEX 0.984531 0.875 0.625 RAD 0.0078125
+   txt240 
+TEXDEF txt241 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.890469 0.625 APEX 0.875 0.984531 0.625 RAD 0.0078125
+   txt241 
+TEXDEF txt241 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.875 0.640469 APEX 0.875 0.875 0.734531 RAD 0.0078125
+   txt241 
+TEXDEF txt241 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.875 0.75 RAD 0.03125 
+   txt241 
+TEXDEF txt241 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.875 0.75 APEX 0.984531 0.875 0.75 RAD 0.0078125
+   txt241 
+TEXDEF txt241 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.890469 0.75 APEX 0.875 0.984531 0.75 RAD 0.0078125
+   txt241 
+TEXDEF txt241 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.875 0.765469 APEX 0.875 0.875 0.859531 RAD 0.0078125
+   txt241 
+TEXDEF txt241 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.875 0.875 RAD 0.03125 
+   txt241 
+TEXDEF txt241 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.875 0.875 APEX 0.984531 0.875 0.875 RAD 0.0078125
+   txt241 
+TEXDEF txt241 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.890469 0.875 APEX 0.875 0.984531 0.875 RAD 0.0078125
+   txt241 
+TEXDEF txt241 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.875 0.890469 APEX 0.875 0.875 0.984531 RAD 0.0078125
+   txt241 
+TEXDEF txt242 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 0.875 1 RAD 0.03125 
+   txt242 
+TEXDEF txt242 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 0.875 1 APEX 0.984531 0.875 1 RAD 0.0078125
+   txt242 
+TEXDEF txt242 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 0.890469 1 APEX 0.875 0.984531 1 RAD 0.0078125
+   txt242 
+TEXDEF txt242 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 1 0 RAD 0.03125 
+   txt242 
+TEXDEF txt242 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 1 0 APEX 0.984531 1 0 RAD 0.0078125
+   txt242 
+TEXDEF txt242 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 1 0.0154687 APEX 0.875 1 0.109531 RAD 0.0078125
+   txt242 
+TEXDEF txt242 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 1 0.125 RAD 0.03125 
+   txt242 
+TEXDEF txt242 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 1 0.125 APEX 0.984531 1 0.125 RAD 0.0078125
+   txt242 
+TEXDEF txt242 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 1 0.140469 APEX 0.875 1 0.234531 RAD 0.0078125
+   txt242 
+TEXDEF txt242 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 1 0.25 RAD 0.03125 
+   txt242 
+TEXDEF txt243 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 1 0.25 APEX 0.984531 1 0.25 RAD 0.0078125
+   txt243 
+TEXDEF txt243 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 1 0.265469 APEX 0.875 1 0.359531 RAD 0.0078125
+   txt243 
+TEXDEF txt243 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 1 0.375 RAD 0.03125 
+   txt243 
+TEXDEF txt243 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 1 0.375 APEX 0.984531 1 0.375 RAD 0.0078125
+   txt243 
+TEXDEF txt243 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 1 0.390469 APEX 0.875 1 0.484531 RAD 0.0078125
+   txt243 
+TEXDEF txt243 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 1 0.5 RAD 0.03125 
+   txt243 
+TEXDEF txt243 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 1 0.5 APEX 0.984531 1 0.5 RAD 0.0078125
+   txt243 
+TEXDEF txt243 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 1 0.515469 APEX 0.875 1 0.609531 RAD 0.0078125
+   txt243 
+TEXDEF txt243 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 1 0.625 RAD 0.03125 
+   txt243 
+TEXDEF txt243 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 1 0.625 APEX 0.984531 1 0.625 RAD 0.0078125
+   txt243 
+TEXDEF txt244 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 1 0.640469 APEX 0.875 1 0.734531 RAD 0.0078125
+   txt244 
+TEXDEF txt244 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 1 0.75 RAD 0.03125 
+   txt244 
+TEXDEF txt244 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 1 0.75 APEX 0.984531 1 0.75 RAD 0.0078125
+   txt244 
+TEXDEF txt244 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 1 0.765469 APEX 0.875 1 0.859531 RAD 0.0078125
+   txt244 
+TEXDEF txt244 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 1 0.875 RAD 0.03125 
+   txt244 
+TEXDEF txt244 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 1 0.875 APEX 0.984531 1 0.875 RAD 0.0078125
+   txt244 
+TEXDEF txt244 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.875 1 0.890469 APEX 0.875 1 0.984531 RAD 0.0078125
+   txt244 
+TEXDEF txt244 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 0.875 1 1 RAD 0.03125 
+   txt244 
+TEXDEF txt244 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.9 0.1 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 0.890469 1 1 APEX 0.984531 1 1 RAD 0.0078125
+   txt244 
+TEXDEF txt244 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0 0 RAD 0.03125 
+   txt244 
+TEXDEF txt245 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.0154687 0 APEX 1 0.109531 0 RAD 0.0078125
+   txt245 
+TEXDEF txt245 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0 0.0154687 APEX 1 0 0.109531 RAD 0.0078125
+   txt245 
+TEXDEF txt245 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0 0.125 RAD 0.03125 
+   txt245 
+TEXDEF txt245 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.0154687 0.125 APEX 1 0.109531 0.125 RAD 0.0078125
+   txt245 
+TEXDEF txt245 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0 0.140469 APEX 1 0 0.234531 RAD 0.0078125
+   txt245 
+TEXDEF txt245 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0 0.25 RAD 0.03125 
+   txt245 
+TEXDEF txt245 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.0154687 0.25 APEX 1 0.109531 0.25 RAD 0.0078125
+   txt245 
+TEXDEF txt245 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0 0.265469 APEX 1 0 0.359531 RAD 0.0078125
+   txt245 
+TEXDEF txt245 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0 0.375 RAD 0.03125 
+   txt245 
+TEXDEF txt245 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.0154687 0.375 APEX 1 0.109531 0.375 RAD 0.0078125
+   txt245 
+TEXDEF txt246 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0 0.390469 APEX 1 0 0.484531 RAD 0.0078125
+   txt246 
+TEXDEF txt246 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0 0.5 RAD 0.03125 
+   txt246 
+TEXDEF txt246 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.0154687 0.5 APEX 1 0.109531 0.5 RAD 0.0078125
+   txt246 
+TEXDEF txt246 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0 0.515469 APEX 1 0 0.609531 RAD 0.0078125
+   txt246 
+TEXDEF txt246 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0 0.625 RAD 0.03125 
+   txt246 
+TEXDEF txt246 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.0154687 0.625 APEX 1 0.109531 0.625 RAD 0.0078125
+   txt246 
+TEXDEF txt246 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0 0.640469 APEX 1 0 0.734531 RAD 0.0078125
+   txt246 
+TEXDEF txt246 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0 0.75 RAD 0.03125 
+   txt246 
+TEXDEF txt246 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.0154687 0.75 APEX 1 0.109531 0.75 RAD 0.0078125
+   txt246 
+TEXDEF txt246 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0 0.765469 APEX 1 0 0.859531 RAD 0.0078125
+   txt246 
+TEXDEF txt247 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0 0.875 RAD 0.03125 
+   txt247 
+TEXDEF txt247 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.0154687 0.875 APEX 1 0.109531 0.875 RAD 0.0078125
+   txt247 
+TEXDEF txt247 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0 0.890469 APEX 1 0 0.984531 RAD 0.0078125
+   txt247 
+TEXDEF txt247 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0 1 RAD 0.03125 
+   txt247 
+TEXDEF txt247 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.0154687 1 APEX 1 0.109531 1 RAD 0.0078125
+   txt247 
+TEXDEF txt247 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.125 0 RAD 0.03125 
+   txt247 
+TEXDEF txt247 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.140469 0 APEX 1 0.234531 0 RAD 0.0078125
+   txt247 
+TEXDEF txt247 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.125 0.0154687 APEX 1 0.125 0.109531 RAD 0.0078125
+   txt247 
+TEXDEF txt247 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.125 0.125 RAD 0.03125 
+   txt247 
+TEXDEF txt247 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.140469 0.125 APEX 1 0.234531 0.125 RAD 0.0078125
+   txt247 
+TEXDEF txt248 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.125 0.140469 APEX 1 0.125 0.234531 RAD 0.0078125
+   txt248 
+TEXDEF txt248 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.125 0.25 RAD 0.03125 
+   txt248 
+TEXDEF txt248 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.140469 0.25 APEX 1 0.234531 0.25 RAD 0.0078125
+   txt248 
+TEXDEF txt248 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.125 0.265469 APEX 1 0.125 0.359531 RAD 0.0078125
+   txt248 
+TEXDEF txt248 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.125 0.375 RAD 0.03125 
+   txt248 
+TEXDEF txt248 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.140469 0.375 APEX 1 0.234531 0.375 RAD 0.0078125
+   txt248 
+TEXDEF txt248 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.125 0.390469 APEX 1 0.125 0.484531 RAD 0.0078125
+   txt248 
+TEXDEF txt248 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.125 0.5 RAD 0.03125 
+   txt248 
+TEXDEF txt248 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.140469 0.5 APEX 1 0.234531 0.5 RAD 0.0078125
+   txt248 
+TEXDEF txt248 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.125 0.515469 APEX 1 0.125 0.609531 RAD 0.0078125
+   txt248 
+TEXDEF txt249 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.125 0.625 RAD 0.03125 
+   txt249 
+TEXDEF txt249 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.140469 0.625 APEX 1 0.234531 0.625 RAD 0.0078125
+   txt249 
+TEXDEF txt249 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.125 0.640469 APEX 1 0.125 0.734531 RAD 0.0078125
+   txt249 
+TEXDEF txt249 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.125 0.75 RAD 0.03125 
+   txt249 
+TEXDEF txt249 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.140469 0.75 APEX 1 0.234531 0.75 RAD 0.0078125
+   txt249 
+TEXDEF txt249 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.125 0.765469 APEX 1 0.125 0.859531 RAD 0.0078125
+   txt249 
+TEXDEF txt249 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.125 0.875 RAD 0.03125 
+   txt249 
+TEXDEF txt249 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.140469 0.875 APEX 1 0.234531 0.875 RAD 0.0078125
+   txt249 
+TEXDEF txt249 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.125 0.890469 APEX 1 0.125 0.984531 RAD 0.0078125
+   txt249 
+TEXDEF txt249 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.125 1 RAD 0.03125 
+   txt249 
+TEXDEF txt250 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.140469 1 APEX 1 0.234531 1 RAD 0.0078125
+   txt250 
+TEXDEF txt250 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.25 0 RAD 0.03125 
+   txt250 
+TEXDEF txt250 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.265469 0 APEX 1 0.359531 0 RAD 0.0078125
+   txt250 
+TEXDEF txt250 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.25 0.0154687 APEX 1 0.25 0.109531 RAD 0.0078125
+   txt250 
+TEXDEF txt250 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.25 0.125 RAD 0.03125 
+   txt250 
+TEXDEF txt250 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.265469 0.125 APEX 1 0.359531 0.125 RAD 0.0078125
+   txt250 
+TEXDEF txt250 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.25 0.140469 APEX 1 0.25 0.234531 RAD 0.0078125
+   txt250 
+TEXDEF txt250 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.25 0.25 RAD 0.03125 
+   txt250 
+TEXDEF txt250 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.265469 0.25 APEX 1 0.359531 0.25 RAD 0.0078125
+   txt250 
+TEXDEF txt250 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.25 0.265469 APEX 1 0.25 0.359531 RAD 0.0078125
+   txt250 
+TEXDEF txt251 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.25 0.375 RAD 0.03125 
+   txt251 
+TEXDEF txt251 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.265469 0.375 APEX 1 0.359531 0.375 RAD 0.0078125
+   txt251 
+TEXDEF txt251 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.25 0.390469 APEX 1 0.25 0.484531 RAD 0.0078125
+   txt251 
+TEXDEF txt251 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.25 0.5 RAD 0.03125 
+   txt251 
+TEXDEF txt251 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.265469 0.5 APEX 1 0.359531 0.5 RAD 0.0078125
+   txt251 
+TEXDEF txt251 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.25 0.515469 APEX 1 0.25 0.609531 RAD 0.0078125
+   txt251 
+TEXDEF txt251 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.25 0.625 RAD 0.03125 
+   txt251 
+TEXDEF txt251 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.265469 0.625 APEX 1 0.359531 0.625 RAD 0.0078125
+   txt251 
+TEXDEF txt251 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.25 0.640469 APEX 1 0.25 0.734531 RAD 0.0078125
+   txt251 
+TEXDEF txt251 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.25 0.75 RAD 0.03125 
+   txt251 
+TEXDEF txt252 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.265469 0.75 APEX 1 0.359531 0.75 RAD 0.0078125
+   txt252 
+TEXDEF txt252 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.25 0.765469 APEX 1 0.25 0.859531 RAD 0.0078125
+   txt252 
+TEXDEF txt252 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.25 0.875 RAD 0.03125 
+   txt252 
+TEXDEF txt252 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.265469 0.875 APEX 1 0.359531 0.875 RAD 0.0078125
+   txt252 
+TEXDEF txt252 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.25 0.890469 APEX 1 0.25 0.984531 RAD 0.0078125
+   txt252 
+TEXDEF txt252 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.25 1 RAD 0.03125 
+   txt252 
+TEXDEF txt252 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.265469 1 APEX 1 0.359531 1 RAD 0.0078125
+   txt252 
+TEXDEF txt252 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.375 0 RAD 0.03125 
+   txt252 
+TEXDEF txt252 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.390469 0 APEX 1 0.484531 0 RAD 0.0078125
+   txt252 
+TEXDEF txt252 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.375 0.0154687 APEX 1 0.375 0.109531 RAD 0.0078125
+   txt252 
+TEXDEF txt253 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.375 0.125 RAD 0.03125 
+   txt253 
+TEXDEF txt253 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.390469 0.125 APEX 1 0.484531 0.125 RAD 0.0078125
+   txt253 
+TEXDEF txt253 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.375 0.140469 APEX 1 0.375 0.234531 RAD 0.0078125
+   txt253 
+TEXDEF txt253 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.375 0.25 RAD 0.03125 
+   txt253 
+TEXDEF txt253 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.390469 0.25 APEX 1 0.484531 0.25 RAD 0.0078125
+   txt253 
+TEXDEF txt253 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.375 0.265469 APEX 1 0.375 0.359531 RAD 0.0078125
+   txt253 
+TEXDEF txt253 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.375 0.375 RAD 0.03125 
+   txt253 
+TEXDEF txt253 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.390469 0.375 APEX 1 0.484531 0.375 RAD 0.0078125
+   txt253 
+TEXDEF txt253 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.375 0.390469 APEX 1 0.375 0.484531 RAD 0.0078125
+   txt253 
+TEXDEF txt253 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.375 0.5 RAD 0.03125 
+   txt253 
+TEXDEF txt254 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.390469 0.5 APEX 1 0.484531 0.5 RAD 0.0078125
+   txt254 
+TEXDEF txt254 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.375 0.515469 APEX 1 0.375 0.609531 RAD 0.0078125
+   txt254 
+TEXDEF txt254 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.375 0.625 RAD 0.03125 
+   txt254 
+TEXDEF txt254 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.390469 0.625 APEX 1 0.484531 0.625 RAD 0.0078125
+   txt254 
+TEXDEF txt254 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.375 0.640469 APEX 1 0.375 0.734531 RAD 0.0078125
+   txt254 
+TEXDEF txt254 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.375 0.75 RAD 0.03125 
+   txt254 
+TEXDEF txt254 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.390469 0.75 APEX 1 0.484531 0.75 RAD 0.0078125
+   txt254 
+TEXDEF txt254 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.375 0.765469 APEX 1 0.375 0.859531 RAD 0.0078125
+   txt254 
+TEXDEF txt254 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.375 0.875 RAD 0.03125 
+   txt254 
+TEXDEF txt254 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.390469 0.875 APEX 1 0.484531 0.875 RAD 0.0078125
+   txt254 
+TEXDEF txt255 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.375 0.890469 APEX 1 0.375 0.984531 RAD 0.0078125
+   txt255 
+TEXDEF txt255 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.375 1 RAD 0.03125 
+   txt255 
+TEXDEF txt255 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.390469 1 APEX 1 0.484531 1 RAD 0.0078125
+   txt255 
+TEXDEF txt255 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.5 0 RAD 0.03125 
+   txt255 
+TEXDEF txt255 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.515469 0 APEX 1 0.609531 0 RAD 0.0078125
+   txt255 
+TEXDEF txt255 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.5 0.0154687 APEX 1 0.5 0.109531 RAD 0.0078125
+   txt255 
+TEXDEF txt255 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.5 0.125 RAD 0.03125 
+   txt255 
+TEXDEF txt255 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.515469 0.125 APEX 1 0.609531 0.125 RAD 0.0078125
+   txt255 
+TEXDEF txt255 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.5 0.140469 APEX 1 0.5 0.234531 RAD 0.0078125
+   txt255 
+TEXDEF txt255 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.5 0.25 RAD 0.03125 
+   txt255 
+TEXDEF txt256 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.515469 0.25 APEX 1 0.609531 0.25 RAD 0.0078125
+   txt256 
+TEXDEF txt256 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.5 0.265469 APEX 1 0.5 0.359531 RAD 0.0078125
+   txt256 
+TEXDEF txt256 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.5 0.375 RAD 0.03125 
+   txt256 
+TEXDEF txt256 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.515469 0.375 APEX 1 0.609531 0.375 RAD 0.0078125
+   txt256 
+TEXDEF txt256 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.5 0.390469 APEX 1 0.5 0.484531 RAD 0.0078125
+   txt256 
+TEXDEF txt256 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.5 0.5 RAD 0.03125 
+   txt256 
+TEXDEF txt256 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.515469 0.5 APEX 1 0.609531 0.5 RAD 0.0078125
+   txt256 
+TEXDEF txt256 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.5 0.515469 APEX 1 0.5 0.609531 RAD 0.0078125
+   txt256 
+TEXDEF txt256 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.5 0.625 RAD 0.03125 
+   txt256 
+TEXDEF txt256 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.515469 0.625 APEX 1 0.609531 0.625 RAD 0.0078125
+   txt256 
+TEXDEF txt257 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.5 0.640469 APEX 1 0.5 0.734531 RAD 0.0078125
+   txt257 
+TEXDEF txt257 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.5 0.75 RAD 0.03125 
+   txt257 
+TEXDEF txt257 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.515469 0.75 APEX 1 0.609531 0.75 RAD 0.0078125
+   txt257 
+TEXDEF txt257 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.5 0.765469 APEX 1 0.5 0.859531 RAD 0.0078125
+   txt257 
+TEXDEF txt257 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.5 0.875 RAD 0.03125 
+   txt257 
+TEXDEF txt257 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.515469 0.875 APEX 1 0.609531 0.875 RAD 0.0078125
+   txt257 
+TEXDEF txt257 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.5 0.890469 APEX 1 0.5 0.984531 RAD 0.0078125
+   txt257 
+TEXDEF txt257 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.5 1 RAD 0.03125 
+   txt257 
+TEXDEF txt257 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.515469 1 APEX 1 0.609531 1 RAD 0.0078125
+   txt257 
+TEXDEF txt257 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.625 0 RAD 0.03125 
+   txt257 
+TEXDEF txt258 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.640469 0 APEX 1 0.734531 0 RAD 0.0078125
+   txt258 
+TEXDEF txt258 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.625 0.0154687 APEX 1 0.625 0.109531 RAD 0.0078125
+   txt258 
+TEXDEF txt258 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.625 0.125 RAD 0.03125 
+   txt258 
+TEXDEF txt258 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.640469 0.125 APEX 1 0.734531 0.125 RAD 0.0078125
+   txt258 
+TEXDEF txt258 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.625 0.140469 APEX 1 0.625 0.234531 RAD 0.0078125
+   txt258 
+TEXDEF txt258 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.625 0.25 RAD 0.03125 
+   txt258 
+TEXDEF txt258 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.640469 0.25 APEX 1 0.734531 0.25 RAD 0.0078125
+   txt258 
+TEXDEF txt258 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.625 0.265469 APEX 1 0.625 0.359531 RAD 0.0078125
+   txt258 
+TEXDEF txt258 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.625 0.375 RAD 0.03125 
+   txt258 
+TEXDEF txt258 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.640469 0.375 APEX 1 0.734531 0.375 RAD 0.0078125
+   txt258 
+TEXDEF txt259 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.625 0.390469 APEX 1 0.625 0.484531 RAD 0.0078125
+   txt259 
+TEXDEF txt259 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.625 0.5 RAD 0.03125 
+   txt259 
+TEXDEF txt259 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.640469 0.5 APEX 1 0.734531 0.5 RAD 0.0078125
+   txt259 
+TEXDEF txt259 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.625 0.515469 APEX 1 0.625 0.609531 RAD 0.0078125
+   txt259 
+TEXDEF txt259 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.625 0.625 RAD 0.03125 
+   txt259 
+TEXDEF txt259 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.640469 0.625 APEX 1 0.734531 0.625 RAD 0.0078125
+   txt259 
+TEXDEF txt259 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.625 0.640469 APEX 1 0.625 0.734531 RAD 0.0078125
+   txt259 
+TEXDEF txt259 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.625 0.75 RAD 0.03125 
+   txt259 
+TEXDEF txt259 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.640469 0.75 APEX 1 0.734531 0.75 RAD 0.0078125
+   txt259 
+TEXDEF txt259 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.625 0.765469 APEX 1 0.625 0.859531 RAD 0.0078125
+   txt259 
+TEXDEF txt260 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.625 0.875 RAD 0.03125 
+   txt260 
+TEXDEF txt260 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.640469 0.875 APEX 1 0.734531 0.875 RAD 0.0078125
+   txt260 
+TEXDEF txt260 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.625 0.890469 APEX 1 0.625 0.984531 RAD 0.0078125
+   txt260 
+TEXDEF txt260 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.625 1 RAD 0.03125 
+   txt260 
+TEXDEF txt260 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.640469 1 APEX 1 0.734531 1 RAD 0.0078125
+   txt260 
+TEXDEF txt260 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.75 0 RAD 0.03125 
+   txt260 
+TEXDEF txt260 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.765469 0 APEX 1 0.859531 0 RAD 0.0078125
+   txt260 
+TEXDEF txt260 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.75 0.0154687 APEX 1 0.75 0.109531 RAD 0.0078125
+   txt260 
+TEXDEF txt260 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.75 0.125 RAD 0.03125 
+   txt260 
+TEXDEF txt260 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.765469 0.125 APEX 1 0.859531 0.125 RAD 0.0078125
+   txt260 
+TEXDEF txt261 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.75 0.140469 APEX 1 0.75 0.234531 RAD 0.0078125
+   txt261 
+TEXDEF txt261 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.75 0.25 RAD 0.03125 
+   txt261 
+TEXDEF txt261 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.765469 0.25 APEX 1 0.859531 0.25 RAD 0.0078125
+   txt261 
+TEXDEF txt261 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.75 0.265469 APEX 1 0.75 0.359531 RAD 0.0078125
+   txt261 
+TEXDEF txt261 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.75 0.375 RAD 0.03125 
+   txt261 
+TEXDEF txt261 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.765469 0.375 APEX 1 0.859531 0.375 RAD 0.0078125
+   txt261 
+TEXDEF txt261 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.75 0.390469 APEX 1 0.75 0.484531 RAD 0.0078125
+   txt261 
+TEXDEF txt261 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.75 0.5 RAD 0.03125 
+   txt261 
+TEXDEF txt261 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.765469 0.5 APEX 1 0.859531 0.5 RAD 0.0078125
+   txt261 
+TEXDEF txt261 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.75 0.515469 APEX 1 0.75 0.609531 RAD 0.0078125
+   txt261 
+TEXDEF txt262 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.75 0.625 RAD 0.03125 
+   txt262 
+TEXDEF txt262 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.765469 0.625 APEX 1 0.859531 0.625 RAD 0.0078125
+   txt262 
+TEXDEF txt262 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.75 0.640469 APEX 1 0.75 0.734531 RAD 0.0078125
+   txt262 
+TEXDEF txt262 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.75 0.75 RAD 0.03125 
+   txt262 
+TEXDEF txt262 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.765469 0.75 APEX 1 0.859531 0.75 RAD 0.0078125
+   txt262 
+TEXDEF txt262 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.75 0.765469 APEX 1 0.75 0.859531 RAD 0.0078125
+   txt262 
+TEXDEF txt262 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.75 0.875 RAD 0.03125 
+   txt262 
+TEXDEF txt262 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.765469 0.875 APEX 1 0.859531 0.875 RAD 0.0078125
+   txt262 
+TEXDEF txt262 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.75 0.890469 APEX 1 0.75 0.984531 RAD 0.0078125
+   txt262 
+TEXDEF txt262 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.75 1 RAD 0.03125 
+   txt262 
+TEXDEF txt263 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.765469 1 APEX 1 0.859531 1 RAD 0.0078125
+   txt263 
+TEXDEF txt263 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.875 0 RAD 0.03125 
+   txt263 
+TEXDEF txt263 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.890469 0 APEX 1 0.984531 0 RAD 0.0078125
+   txt263 
+TEXDEF txt263 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.875 0.0154687 APEX 1 0.875 0.109531 RAD 0.0078125
+   txt263 
+TEXDEF txt263 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.875 0.125 RAD 0.03125 
+   txt263 
+TEXDEF txt263 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.890469 0.125 APEX 1 0.984531 0.125 RAD 0.0078125
+   txt263 
+TEXDEF txt263 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.875 0.140469 APEX 1 0.875 0.234531 RAD 0.0078125
+   txt263 
+TEXDEF txt263 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.875 0.25 RAD 0.03125 
+   txt263 
+TEXDEF txt263 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.890469 0.25 APEX 1 0.984531 0.25 RAD 0.0078125
+   txt263 
+TEXDEF txt263 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.875 0.265469 APEX 1 0.875 0.359531 RAD 0.0078125
+   txt263 
+TEXDEF txt264 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.875 0.375 RAD 0.03125 
+   txt264 
+TEXDEF txt264 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.890469 0.375 APEX 1 0.984531 0.375 RAD 0.0078125
+   txt264 
+TEXDEF txt264 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.875 0.390469 APEX 1 0.875 0.484531 RAD 0.0078125
+   txt264 
+TEXDEF txt264 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.875 0.5 RAD 0.03125 
+   txt264 
+TEXDEF txt264 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.890469 0.5 APEX 1 0.984531 0.5 RAD 0.0078125
+   txt264 
+TEXDEF txt264 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.875 0.515469 APEX 1 0.875 0.609531 RAD 0.0078125
+   txt264 
+TEXDEF txt264 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.875 0.625 RAD 0.03125 
+   txt264 
+TEXDEF txt264 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.890469 0.625 APEX 1 0.984531 0.625 RAD 0.0078125
+   txt264 
+TEXDEF txt264 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.875 0.640469 APEX 1 0.875 0.734531 RAD 0.0078125
+   txt264 
+TEXDEF txt264 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.875 0.75 RAD 0.03125 
+   txt264 
+TEXDEF txt265 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.890469 0.75 APEX 1 0.984531 0.75 RAD 0.0078125
+   txt265 
+TEXDEF txt265 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.875 0.765469 APEX 1 0.875 0.859531 RAD 0.0078125
+   txt265 
+TEXDEF txt265 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.875 0.875 RAD 0.03125 
+   txt265 
+TEXDEF txt265 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.890469 0.875 APEX 1 0.984531 0.875 RAD 0.0078125
+   txt265 
+TEXDEF txt265 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.875 0.890469 APEX 1 0.875 0.984531 RAD 0.0078125
+   txt265 
+TEXDEF txt265 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 0.875 1 RAD 0.03125 
+   txt265 
+TEXDEF txt265 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.9 0.1 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 0.890469 1 APEX 1 0.984531 1 RAD 0.0078125
+   txt265 
+TEXDEF txt265 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 1 0 RAD 0.03125 
+   txt265 
+TEXDEF txt265 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 1 0.0154687 APEX 1 1 0.109531 RAD 0.0078125
+   txt265 
+TEXDEF txt265 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 1 0.125 RAD 0.03125 
+   txt265 
+TEXDEF txt266 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 1 0.140469 APEX 1 1 0.234531 RAD 0.0078125
+   txt266 
+TEXDEF txt266 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 1 0.25 RAD 0.03125 
+   txt266 
+TEXDEF txt266 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 1 0.265469 APEX 1 1 0.359531 RAD 0.0078125
+   txt266 
+TEXDEF txt266 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 1 0.375 RAD 0.03125 
+   txt266 
+TEXDEF txt266 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 1 0.390469 APEX 1 1 0.484531 RAD 0.0078125
+   txt266 
+TEXDEF txt266 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 1 0.5 RAD 0.03125 
+   txt266 
+TEXDEF txt266 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 1 0.515469 APEX 1 1 0.609531 RAD 0.0078125
+   txt266 
+TEXDEF txt266 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 1 0.625 RAD 0.03125 
+   txt266 
+TEXDEF txt266 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 1 0.640469 APEX 1 1 0.734531 RAD 0.0078125
+   txt266 
+TEXDEF txt266 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 1 0.75 RAD 0.03125 
+   txt266 
+TEXDEF txt267 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 1 0.765469 APEX 1 1 0.859531 RAD 0.0078125
+   txt267 
+TEXDEF txt267 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 1 0.875 RAD 0.03125 
+   txt267 
+TEXDEF txt267 AMBIENT 0.1  DIFFUSE 0.99  SPECULAR 0  OPACITY 1 
+ COLOR 0.1 0.1 0.9 
+ TEXFUNC 0 
+
+FCYLINDER
+ BASE 1 1 0.890469 APEX 1 1 0.984531 RAD 0.0078125
+   txt267 
+TEXDEF txt267 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+ COLOR 0.9 0.9 0.9 
+ TEXFUNC 0 
+
+ SPHERE CENTER 1 1 1 RAD 0.03125 
+   txt267 
+
+END_SCENE
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/model2.dat b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/model2.dat
new file mode 100644 (file)
index 0000000..c57ce49
--- /dev/null
@@ -0,0 +1,104 @@
+BEGIN_SCENE
+  OUTFILE /dev/null
+  RESOLUTION 512 512
+  VERBOSE 0
+
+CAMERA
+  ZOOM  1.0
+  ASPECTRATIO 1.0
+  ANTIALIASING 1
+  RAYDEPTH 12
+  CENTER    0.0 0.0 -5.0
+  VIEWDIR   0.0 0.0 1.0
+  UPDIR     0.0 1.0 0.0
+END_CAMERA
+
+LIGHT  
+  CENTER -5.0 0.0 -4.0   
+  RAD     0.2
+  COLOR   1.0 0.1  0.0 
+
+LIGHT
+  CENTER  4.0 5.0 -4.0  
+  RAD     0.2
+  COLOR   0.0 0.1  1.0
+
+LIGHT 
+  CENTER  4.0 1.5  3.0 
+  RAD     0.2
+  COLOR   0.5 0.5  0.5
+
+TRI
+  V0  0.0 -4.0 12.0
+  V1  4.0 -4.0 8.0
+  V2 -4.0 -4.0 8.0
+  TEXTURE
+    AMBIENT  0.1 DIFFUSE  0.2 SPECULAR 0.7 OPACITY 1.0
+    COLOR 1.0 1.0 1.0
+    TEXFUNC 0
+
+SPHERE
+  CENTER 0.0  0.0 5.0   
+  RAD 1.3 
+  TEXTURE 
+    AMBIENT  0.1 DIFFUSE  0.0 SPECULAR 0.9   OPACITY 1.0
+    COLOR 1.0 1.0 1.0  
+    TEXFUNC 0
+
+SPHERE
+  CENTER 1.0  0.0 4.3   
+  RAD 0.8 
+  TEXTURE  
+    AMBIENT  0.1 DIFFUSE  0.9 SPECULAR 0.0 OPACITY 1.0
+    COLOR 0.3 0.3 1.0
+    TEXFUNC 3
+      CENTER 1.0 0.0 4.3
+      ROTATE 0. 0.0 0.0
+      SCALE  1.0 1.0 1.0
+
+SPHERE
+  CENTER 0.0  2.0 8.0   
+  RAD 1.0
+  TEXTURE 
+    AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
+    COLOR 1.0 0.0 1.0  
+    TEXFUNC 4
+      CENTER 0.0 1.0 8.0
+      ROTATE 0. 0.0 0.0
+      SCALE  1.0 1.0 1.0
+
+SPHERE
+  CENTER -1.0 -0.5 5.0 
+  RAD  1.0
+  TEXTURE
+    AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0  OPACITY 1.0
+    COLOR 1.0 1.0 0.5  
+    TEXFUNC 6
+      CENTER -1.0 -0.5 5.0
+      ROTATE 0. 0.0 0.0
+      SCALE  1.0 1.0 1.0
+
+PLANE 
+  CENTER 0.0 -5.0 0.0 
+  NORMAL 0.0  1.0 0.0  
+  TEXTURE 
+    AMBIENT  0.1 DIFFUSE  0.9 SPECULAR 0.0  OPACITY 1.0
+    COLOR  1.0 1.0 1.0 
+    TEXFUNC  1
+      CENTER 0.0 -5.0 0.0
+      ROTATE 0. 0.0 0.0
+      SCALE  1.0 1.0 1.0
+
+PLANE
+  CENTER 0.0 0.0 15.0  
+  NORMAL 0.0 0.0 -1.0  
+  TEXTURE 
+    AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0   OPACITY 1.0
+    COLOR 1.0 1.0 1.0 
+    TEXFUNC  3
+      CENTER 0.0 0.0 15.0
+      ROTATE 0. 0.0 0.0
+      SCALE  1.0 1.0 1.0
+
+END_SCENE
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/teapot.dat b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/teapot.dat
new file mode 100644 (file)
index 0000000..105afcd
--- /dev/null
@@ -0,0 +1,9279 @@
+BEGIN_SCENE
+  OUTFILE /dev/null
+  RESOLUTION 512 512
+  VERBOSE 0
+
+CAMERA
+  ZOOM 1.20711
+ASPECTRATIO 1.0
+  ANTIALIASING 0
+  RAYDEPTH 5
+  CENTER 4.86 7.2 5.4
+  VIEWDIR -0.475149 -0.703924 -0.527943
+  UPDIR -0.29537 -0.437585 0.84928
+
+END_CAMERA 
+
+BACKGROUND 0.078 0.361 0.753 
+
+LIGHT CENTER -3.1 9.8 12.1 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 11.3 5.1 8.8 RAD 0.002 COLOR 0.5 0.5 0.5
+
+TEXDEF txt001 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+PHONG METAL 0.5 PHONG_SIZE 4.81884
+ COLOR 1 1 1 
+ TEXFUNC 0 
+
+TRI 
+  V0 -4 -2.66667 0   V1 -2.66667 -2.66667 0   V2 -4 -1.33333 0 
+   txt001 
+TRI 
+  V0 -2.66667 -2.66667 0   V1 -2.66667 -1.33333 0   V2 -4 -1.33333 0 
+   txt001 
+TRI 
+  V0 -4 0 0   V1 -2.66667 0 0   V2 -4 1.33333 0 
+   txt001 
+TRI 
+  V0 -2.66667 0 0   V1 -2.66667 1.33333 0   V2 -4 1.33333 0 
+   txt001 
+TRI 
+  V0 -4 2.66667 0   V1 -2.66667 2.66667 0   V2 -4 4 0 
+   txt001 
+TRI 
+  V0 -2.66667 2.66667 0   V1 -2.66667 4 0   V2 -4 4 0 
+   txt001 
+TRI 
+  V0 -2.66667 -4 0   V1 -1.33333 -4 0   V2 -2.66667 -2.66667 0 
+   txt001 
+TRI 
+  V0 -1.33333 -4 0   V1 -1.33333 -2.66667 0   V2 -2.66667 -2.66667 0 
+   txt001 
+TRI 
+  V0 -2.66667 -1.33333 0   V1 -1.33333 -1.33333 0   V2 -2.66667 0 0 
+   txt001 
+TRI 
+  V0 -1.33333 -1.33333 0   V1 -1.33333 0 0   V2 -2.66667 0 0 
+   txt001 
+TRI 
+  V0 -2.66667 1.33333 0   V1 -1.33333 1.33333 0   V2 -2.66667 2.66667 0 
+   txt001 
+TRI 
+  V0 -1.33333 1.33333 0   V1 -1.33333 2.66667 0   V2 -2.66667 2.66667 0 
+   txt001 
+TRI 
+  V0 -1.33333 -2.66667 0   V1 0 -2.66667 0   V2 -1.33333 -1.33333 0 
+   txt001 
+TRI 
+  V0 0 -2.66667 0   V1 0 -1.33333 0   V2 -1.33333 -1.33333 0 
+   txt001 
+TRI 
+  V0 -1.33333 0 0   V1 0 0 0   V2 -1.33333 1.33333 0 
+   txt001 
+TRI 
+  V0 0 0 0   V1 0 1.33333 0   V2 -1.33333 1.33333 0 
+   txt001 
+TRI 
+  V0 -1.33333 2.66667 0   V1 0 2.66667 0   V2 -1.33333 4 0 
+   txt001 
+TRI 
+  V0 0 2.66667 0   V1 0 4 0   V2 -1.33333 4 0 
+   txt001 
+TRI 
+  V0 0 -4 0   V1 1.33333 -4 0   V2 0 -2.66667 0 
+   txt001 
+TRI 
+  V0 1.33333 -4 0   V1 1.33333 -2.66667 0   V2 0 -2.66667 0 
+   txt001 
+TRI 
+  V0 0 -1.33333 0   V1 1.33333 -1.33333 0   V2 0 0 0 
+   txt001 
+TRI 
+  V0 1.33333 -1.33333 0   V1 1.33333 0 0   V2 0 0 0 
+   txt001 
+TRI 
+  V0 0 1.33333 0   V1 1.33333 1.33333 0   V2 0 2.66667 0 
+   txt001 
+TRI 
+  V0 1.33333 1.33333 0   V1 1.33333 2.66667 0   V2 0 2.66667 0 
+   txt001 
+TRI 
+  V0 1.33333 -2.66667 0   V1 2.66667 -2.66667 0   V2 1.33333 -1.33333 0 
+   txt001 
+TRI 
+  V0 2.66667 -2.66667 0   V1 2.66667 -1.33333 0   V2 1.33333 -1.33333 0 
+   txt001 
+TRI 
+  V0 1.33333 0 0   V1 2.66667 0 0   V2 1.33333 1.33333 0 
+   txt001 
+TRI 
+  V0 2.66667 0 0   V1 2.66667 1.33333 0   V2 1.33333 1.33333 0 
+   txt001 
+TRI 
+  V0 1.33333 2.66667 0   V1 2.66667 2.66667 0   V2 1.33333 4 0 
+   txt001 
+TRI 
+  V0 2.66667 2.66667 0   V1 2.66667 4 0   V2 1.33333 4 0 
+   txt001 
+TRI 
+  V0 2.66667 -4 0   V1 4 -4 0   V2 2.66667 -2.66667 0 
+   txt001 
+TRI 
+  V0 4 -4 0   V1 4 -2.66667 0   V2 2.66667 -2.66667 0 
+   txt001 
+TRI 
+  V0 2.66667 -1.33333 0   V1 4 -1.33333 0   V2 2.66667 0 0 
+   txt001 
+TRI 
+  V0 4 -1.33333 0   V1 4 0 0   V2 2.66667 0 0 
+   txt001 
+TRI 
+  V0 2.66667 1.33333 0   V1 4 1.33333 0   V2 2.66667 2.66667 0 
+   txt001 
+TRI 
+  V0 4 1.33333 0   V1 4 2.66667 0   V2 2.66667 2.66667 0 
+   txt001 
+TEXDEF txt002 AMBIENT 0  DIFFUSE 0.5  SPECULAR 0.5  OPACITY 1 
+PHONG METAL 0.5 PHONG_SIZE 4.81884
+ COLOR 0.5 0.5 0.5 
+ TEXFUNC 0 
+
+TRI 
+  V0 -4 -4 0   V1 -2.66667 -4 0   V2 -4 -2.66667 0 
+   txt002 
+TRI 
+  V0 -2.66667 -4 0   V1 -2.66667 -2.66667 0   V2 -4 -2.66667 0 
+   txt002 
+TRI 
+  V0 -4 -1.33333 0   V1 -2.66667 -1.33333 0   V2 -4 0 0 
+   txt002 
+TRI 
+  V0 -2.66667 -1.33333 0   V1 -2.66667 0 0   V2 -4 0 0 
+   txt002 
+TRI 
+  V0 -4 1.33333 0   V1 -2.66667 1.33333 0   V2 -4 2.66667 0 
+   txt002 
+TRI 
+  V0 -2.66667 1.33333 0   V1 -2.66667 2.66667 0   V2 -4 2.66667 0 
+   txt002 
+TRI 
+  V0 -2.66667 -2.66667 0   V1 -1.33333 -2.66667 0   V2 -2.66667 -1.33333 0 
+   txt002 
+TRI 
+  V0 -1.33333 -2.66667 0   V1 -1.33333 -1.33333 0   V2 -2.66667 -1.33333 0 
+   txt002 
+TRI 
+  V0 -2.66667 0 0   V1 -1.33333 0 0   V2 -2.66667 1.33333 0 
+   txt002 
+TRI 
+  V0 -1.33333 0 0   V1 -1.33333 1.33333 0   V2 -2.66667 1.33333 0 
+   txt002 
+TRI 
+  V0 -2.66667 2.66667 0   V1 -1.33333 2.66667 0   V2 -2.66667 4 0 
+   txt002 
+TRI 
+  V0 -1.33333 2.66667 0   V1 -1.33333 4 0   V2 -2.66667 4 0 
+   txt002 
+TRI 
+  V0 -1.33333 -4 0   V1 0 -4 0   V2 -1.33333 -2.66667 0 
+   txt002 
+TRI 
+  V0 0 -4 0   V1 0 -2.66667 0   V2 -1.33333 -2.66667 0 
+   txt002 
+TRI 
+  V0 -1.33333 -1.33333 0   V1 0 -1.33333 0   V2 -1.33333 0 0 
+   txt002 
+TRI 
+  V0 0 -1.33333 0   V1 0 0 0   V2 -1.33333 0 0 
+   txt002 
+TRI 
+  V0 -1.33333 1.33333 0   V1 0 1.33333 0   V2 -1.33333 2.66667 0 
+   txt002 
+TRI 
+  V0 0 1.33333 0   V1 0 2.66667 0   V2 -1.33333 2.66667 0 
+   txt002 
+TRI 
+  V0 0 -2.66667 0   V1 1.33333 -2.66667 0   V2 0 -1.33333 0 
+   txt002 
+TRI 
+  V0 1.33333 -2.66667 0   V1 1.33333 -1.33333 0   V2 0 -1.33333 0 
+   txt002 
+TRI 
+  V0 0 0 0   V1 1.33333 0 0   V2 0 1.33333 0 
+   txt002 
+TRI 
+  V0 1.33333 0 0   V1 1.33333 1.33333 0   V2 0 1.33333 0 
+   txt002 
+TRI 
+  V0 0 2.66667 0   V1 1.33333 2.66667 0   V2 0 4 0 
+   txt002 
+TRI 
+  V0 1.33333 2.66667 0   V1 1.33333 4 0   V2 0 4 0 
+   txt002 
+TRI 
+  V0 1.33333 -4 0   V1 2.66667 -4 0   V2 1.33333 -2.66667 0 
+   txt002 
+TRI 
+  V0 2.66667 -4 0   V1 2.66667 -2.66667 0   V2 1.33333 -2.66667 0 
+   txt002 
+TRI 
+  V0 1.33333 -1.33333 0   V1 2.66667 -1.33333 0   V2 1.33333 0 0 
+   txt002 
+TRI 
+  V0 2.66667 -1.33333 0   V1 2.66667 0 0   V2 1.33333 0 0 
+   txt002 
+TRI 
+  V0 1.33333 1.33333 0   V1 2.66667 1.33333 0   V2 1.33333 2.66667 0 
+   txt002 
+TRI 
+  V0 2.66667 1.33333 0   V1 2.66667 2.66667 0   V2 1.33333 2.66667 0 
+   txt002 
+TRI 
+  V0 2.66667 -2.66667 0   V1 4 -2.66667 0   V2 2.66667 -1.33333 0 
+   txt002 
+TRI 
+  V0 4 -2.66667 0   V1 4 -1.33333 0   V2 2.66667 -1.33333 0 
+   txt002 
+TRI 
+  V0 2.66667 0 0   V1 4 0 0   V2 2.66667 1.33333 0 
+   txt002 
+TRI 
+  V0 4 0 0   V1 4 1.33333 0   V2 2.66667 1.33333 0 
+   txt002 
+TRI 
+  V0 2.66667 2.66667 0   V1 4 2.66667 0   V2 2.66667 4 0 
+   txt002 
+TRI 
+  V0 4 2.66667 0   V1 4 4 0   V2 2.66667 4 0 
+   txt002 
+TEXDEF txt003 AMBIENT 0  DIFFUSE 0.75  SPECULAR 0.25  OPACITY 1 
+PHONG PLASTIC 0.25 PHONG_SIZE 45.2776
+ COLOR 1 0.5 0.1 
+ TEXFUNC 0 
+
+STRI 
+  V0 1.4 0 2.4   V1 1.35074 -0.375926 2.4   V2 1.33276 -0.370922 2.45469 
+  N0 -0.902861 -0 -0.429934   N1 -0.871509 0.234929 -0.430442   N2 -0.953562 0.257047 -0.156989 
+   txt003 
+STRI 
+  V0 1.33276 -0.370922 2.45469   V1 1.38137 0 2.45469   V2 1.4 0 2.4 
+  N0 -0.953562 0.257047 -0.156989   N1 -0.987636 -0 -0.156768   N2 -0.902861 -0 -0.429934 
+   txt003 
+STRI 
+  V0 1.35074 -0.375926 2.4   V1 1.21126 -0.711407 2.4   V2 1.19514 -0.701938 2.45469 
+  N0 -0.871509 0.234929 -0.430442   N1 -0.780517 0.4527 -0.43111   N2 -0.854265 0.495474 -0.157281 
+   txt003 
+STRI 
+  V0 1.19514 -0.701938 2.45469   V1 1.33276 -0.370922 2.45469   V2 1.35074 -0.375926 2.4 
+  N0 -0.854265 0.495474 -0.157281   N1 -0.953562 0.257047 -0.156989   N2 -0.871509 0.234929 -0.430442 
+   txt003 
+STRI 
+  V0 1.21126 -0.711407 2.4   V1 0.994 -0.994 2.4   V2 0.98077 -0.98077 2.45469 
+  N0 -0.780517 0.4527 -0.43111   N1 -0.637936 0.637936 -0.431366   N2 -0.698293 0.698293 -0.157393 
+   txt003 
+STRI 
+  V0 0.98077 -0.98077 2.45469   V1 1.19514 -0.701938 2.45469   V2 1.21126 -0.711407 2.4 
+  N0 -0.698293 0.698293 -0.157393   N1 -0.854265 0.495474 -0.157281   N2 -0.780517 0.4527 -0.43111 
+   txt003 
+STRI 
+  V0 0.994 -0.994 2.4   V1 0.711407 -1.21126 2.4   V2 0.701938 -1.19514 2.45469 
+  N0 -0.637936 0.637936 -0.431366   N1 -0.4527 0.780517 -0.43111   N2 -0.495474 0.854265 -0.157281 
+   txt003 
+STRI 
+  V0 0.701938 -1.19514 2.45469   V1 0.98077 -0.98077 2.45469   V2 0.994 -0.994 2.4 
+  N0 -0.495474 0.854265 -0.157281   N1 -0.698293 0.698293 -0.157393   N2 -0.637936 0.637936 -0.431366 
+   txt003 
+STRI 
+  V0 0.711407 -1.21126 2.4   V1 0.375926 -1.35074 2.4   V2 0.370922 -1.33276 2.45469 
+  N0 -0.4527 0.780517 -0.43111   N1 -0.234929 0.871509 -0.430442   N2 -0.257047 0.953562 -0.156989 
+   txt003 
+STRI 
+  V0 0.370922 -1.33276 2.45469   V1 0.701938 -1.19514 2.45469   V2 0.711407 -1.21126 2.4 
+  N0 -0.257047 0.953562 -0.156989   N1 -0.495474 0.854265 -0.157281   N2 -0.4527 0.780517 -0.43111 
+   txt003 
+STRI 
+  V0 0.375926 -1.35074 2.4   V1 0 -1.4 2.4   V2 0 -1.38137 2.45469 
+  N0 -0.234929 0.871509 -0.430442   N1 7.30595e-17 0.902861 -0.429934   N2 -9.89971e-17 0.987636 -0.156768 
+   txt003 
+STRI 
+  V0 0 -1.38137 2.45469   V1 0.370922 -1.33276 2.45469   V2 0.375926 -1.35074 2.4 
+  N0 -9.89971e-17 0.987636 -0.156768   N1 -0.257047 0.953562 -0.156989   N2 -0.234929 0.871509 -0.430442 
+   txt003 
+STRI 
+  V0 1.38137 0 2.45469   V1 1.33276 -0.370922 2.45469   V2 1.33555 -0.371699 2.4875 
+  N0 -0.987636 -0 -0.156768   N1 -0.953562 0.257047 -0.156989   N2 -0.849414 0.228972 0.475466 
+   txt003 
+STRI 
+  V0 1.33555 -0.371699 2.4875   V1 1.38426 0 2.4875   V2 1.38137 0 2.45469 
+  N0 -0.849414 0.228972 0.475466   N1 -0.880022 0 0.474933   N2 -0.987636 -0 -0.156768 
+   txt003 
+STRI 
+  V0 1.33276 -0.370922 2.45469   V1 1.19514 -0.701938 2.45469   V2 1.19764 -0.703409 2.4875 
+  N0 -0.953562 0.257047 -0.156989   N1 -0.854265 0.495474 -0.157281   N2 -0.760669 0.441188 0.476167 
+   txt003 
+STRI 
+  V0 1.19764 -0.703409 2.4875   V1 1.33555 -0.371699 2.4875   V2 1.33276 -0.370922 2.45469 
+  N0 -0.760669 0.441188 0.476167   N1 -0.849414 0.228972 0.475466   N2 -0.953562 0.257047 -0.156989 
+   txt003 
+STRI 
+  V0 1.19514 -0.701938 2.45469   V1 0.98077 -0.98077 2.45469   V2 0.982824 -0.982824 2.4875 
+  N0 -0.854265 0.495474 -0.157281   N1 -0.698293 0.698293 -0.157393   N2 -0.621695 0.621695 0.476435 
+   txt003 
+STRI 
+  V0 0.982824 -0.982824 2.4875   V1 1.19764 -0.703409 2.4875   V2 1.19514 -0.701938 2.45469 
+  N0 -0.621695 0.621695 0.476435   N1 -0.760669 0.441188 0.476167   N2 -0.854265 0.495474 -0.157281 
+   txt003 
+STRI 
+  V0 0.98077 -0.98077 2.45469   V1 0.701938 -1.19514 2.45469   V2 0.703409 -1.19764 2.4875 
+  N0 -0.698293 0.698293 -0.157393   N1 -0.495474 0.854265 -0.157281   N2 -0.441188 0.760669 0.476167 
+   txt003 
+STRI 
+  V0 0.703409 -1.19764 2.4875   V1 0.982824 -0.982824 2.4875   V2 0.98077 -0.98077 2.45469 
+  N0 -0.441188 0.760669 0.476167   N1 -0.621695 0.621695 0.476435   N2 -0.698293 0.698293 -0.157393 
+   txt003 
+STRI 
+  V0 0.701938 -1.19514 2.45469   V1 0.370922 -1.33276 2.45469   V2 0.371699 -1.33555 2.4875 
+  N0 -0.495474 0.854265 -0.157281   N1 -0.257047 0.953562 -0.156989   N2 -0.228972 0.849414 0.475466 
+   txt003 
+STRI 
+  V0 0.371699 -1.33555 2.4875   V1 0.703409 -1.19764 2.4875   V2 0.701938 -1.19514 2.45469 
+  N0 -0.228972 0.849414 0.475466   N1 -0.441188 0.760669 0.476167   N2 -0.495474 0.854265 -0.157281 
+   txt003 
+STRI 
+  V0 0.370922 -1.33276 2.45469   V1 0 -1.38137 2.45469   V2 0 -1.38426 2.4875 
+  N0 -0.257047 0.953562 -0.156989   N1 -9.89971e-17 0.987636 -0.156768   N2 -6.08179e-16 0.880022 0.474933 
+   txt003 
+STRI 
+  V0 0 -1.38426 2.4875   V1 0.371699 -1.33555 2.4875   V2 0.370922 -1.33276 2.45469 
+  N0 -6.08179e-16 0.880022 0.474933   N1 -0.228972 0.849414 0.475466   N2 -0.257047 0.953562 -0.156989 
+   txt003 
+STRI 
+  V0 1.38426 0 2.4875   V1 1.33555 -0.371699 2.4875   V2 1.35376 -0.376765 2.49844 
+  N0 -0.880022 0 0.474933   N1 -0.849414 0.228972 0.475466   N2 2.13636e-15 -5.93089e-16 1 
+   txt003 
+STRI 
+  V0 1.35376 -0.376765 2.49844   V1 1.40312 0 2.49844   V2 1.38426 0 2.4875 
+  N0 2.13636e-15 -5.93089e-16 1   N1 2.22045e-15 0 1   N2 -0.880022 0 0.474933 
+   txt003 
+STRI 
+  V0 1.33555 -0.371699 2.4875   V1 1.19764 -0.703409 2.4875   V2 1.21396 -0.712995 2.49844 
+  N0 -0.849414 0.228972 0.475466   N1 -0.760669 0.441188 0.476167   N2 1.87966e-15 -1.16933e-15 1 
+   txt003 
+STRI 
+  V0 1.21396 -0.712995 2.49844   V1 1.35376 -0.376765 2.49844   V2 1.33555 -0.371699 2.4875 
+  N0 1.87966e-15 -1.16933e-15 1   N1 2.13636e-15 -5.93089e-16 1   N2 -0.849414 0.228972 0.475466 
+   txt003 
+STRI 
+  V0 1.19764 -0.703409 2.4875   V1 0.982824 -0.982824 2.4875   V2 0.996219 -0.996219 2.49844 
+  N0 -0.760669 0.441188 0.476167   N1 -0.621695 0.621695 0.476435   N2 1.4538e-15 -1.67359e-15 1 
+   txt003 
+STRI 
+  V0 0.996219 -0.996219 2.49844   V1 1.21396 -0.712995 2.49844   V2 1.19764 -0.703409 2.4875 
+  N0 1.4538e-15 -1.67359e-15 1   N1 1.87966e-15 -1.16933e-15 1   N2 -0.760669 0.441188 0.476167 
+   txt003 
+STRI 
+  V0 0.982824 -0.982824 2.4875   V1 0.703409 -1.19764 2.4875   V2 0.712995 -1.21396 2.49844 
+  N0 -0.621695 0.621695 0.476435   N1 -0.441188 0.760669 0.476167   N2 8.74229e-16 -2.05298e-15 1 
+   txt003 
+STRI 
+  V0 0.712995 -1.21396 2.49844   V1 0.996219 -0.996219 2.49844   V2 0.982824 -0.982824 2.4875 
+  N0 8.74229e-16 -2.05298e-15 1   N1 1.4538e-15 -1.67359e-15 1   N2 -0.621695 0.621695 0.476435 
+   txt003 
+STRI 
+  V0 0.703409 -1.19764 2.4875   V1 0.371699 -1.33555 2.4875   V2 0.376765 -1.35376 2.49844 
+  N0 -0.441188 0.760669 0.476167   N1 -0.228972 0.849414 0.475466   N2 1.77072e-16 -2.25214e-15 1 
+   txt003 
+STRI 
+  V0 0.376765 -1.35376 2.49844   V1 0.712995 -1.21396 2.49844   V2 0.703409 -1.19764 2.4875 
+  N0 1.77072e-16 -2.25214e-15 1   N1 8.74229e-16 -2.05298e-15 1   N2 -0.441188 0.760669 0.476167 
+   txt003 
+STRI 
+  V0 0.371699 -1.33555 2.4875   V1 0 -1.38426 2.4875   V2 0 -1.40312 2.49844 
+  N0 -0.228972 0.849414 0.475466   N1 -6.08179e-16 0.880022 0.474933   N2 -5.65179e-16 -2.22045e-15 1 
+   txt003 
+STRI 
+  V0 0 -1.40312 2.49844   V1 0.376765 -1.35376 2.49844   V2 0.371699 -1.33555 2.4875 
+  N0 -5.65179e-16 -2.22045e-15 1   N1 1.77072e-16 -2.25214e-15 1   N2 -0.228972 0.849414 0.475466 
+   txt003 
+STRI 
+  V0 1.40312 0 2.49844   V1 1.35376 -0.376765 2.49844   V2 1.38201 -0.384628 2.4875 
+  N0 2.22045e-15 0 1   N1 2.13636e-15 -5.93089e-16 1   N2 0.537012 -0.14476 0.831061 
+   txt003 
+STRI 
+  V0 1.38201 -0.384628 2.4875   V1 1.43241 0 2.4875   V2 1.40312 0 2.49844 
+  N0 0.537012 -0.14476 0.831061   N1 0.556738 0 0.830688   N2 2.22045e-15 0 1 
+   txt003 
+STRI 
+  V0 1.35376 -0.376765 2.49844   V1 1.21396 -0.712995 2.49844   V2 1.2393 -0.727875 2.4875 
+  N0 2.13636e-15 -5.93089e-16 1   N1 1.87966e-15 -1.16933e-15 1   N2 0.480481 -0.278679 0.83155 
+   txt003 
+STRI 
+  V0 1.2393 -0.727875 2.4875   V1 1.38201 -0.384628 2.4875   V2 1.35376 -0.376765 2.49844 
+  N0 0.480481 -0.278679 0.83155   N1 0.537012 -0.14476 0.831061   N2 2.13636e-15 -5.93089e-16 1 
+   txt003 
+STRI 
+  V0 1.21396 -0.712995 2.49844   V1 0.996219 -0.996219 2.49844   V2 1.01701 -1.01701 2.4875 
+  N0 1.87966e-15 -1.16933e-15 1   N1 1.4538e-15 -1.67359e-15 1   N2 0.392564 -0.392564 0.831737 
+   txt003 
+STRI 
+  V0 1.01701 -1.01701 2.4875   V1 1.2393 -0.727875 2.4875   V2 1.21396 -0.712995 2.49844 
+  N0 0.392564 -0.392564 0.831737   N1 0.480481 -0.278679 0.83155   N2 1.87966e-15 -1.16933e-15 1 
+   txt003 
+STRI 
+  V0 0.996219 -0.996219 2.49844   V1 0.712995 -1.21396 2.49844   V2 0.727875 -1.2393 2.4875 
+  N0 1.4538e-15 -1.67359e-15 1   N1 8.74229e-16 -2.05298e-15 1   N2 0.278679 -0.480481 0.83155 
+   txt003 
+STRI 
+  V0 0.727875 -1.2393 2.4875   V1 1.01701 -1.01701 2.4875   V2 0.996219 -0.996219 2.49844 
+  N0 0.278679 -0.480481 0.83155   N1 0.392564 -0.392564 0.831737   N2 1.4538e-15 -1.67359e-15 1 
+   txt003 
+STRI 
+  V0 0.712995 -1.21396 2.49844   V1 0.376765 -1.35376 2.49844   V2 0.384628 -1.38201 2.4875 
+  N0 8.74229e-16 -2.05298e-15 1   N1 1.77072e-16 -2.25214e-15 1   N2 0.14476 -0.537012 0.831061 
+   txt003 
+STRI 
+  V0 0.384628 -1.38201 2.4875   V1 0.727875 -1.2393 2.4875   V2 0.712995 -1.21396 2.49844 
+  N0 0.14476 -0.537012 0.831061   N1 0.278679 -0.480481 0.83155   N2 8.74229e-16 -2.05298e-15 1 
+   txt003 
+STRI 
+  V0 0.376765 -1.35376 2.49844   V1 0 -1.40312 2.49844   V2 0 -1.43241 2.4875 
+  N0 1.77072e-16 -2.25214e-15 1   N1 -5.65179e-16 -2.22045e-15 1   N2 -4.5989e-16 -0.556738 0.830688 
+   txt003 
+STRI 
+  V0 0 -1.43241 2.4875   V1 0.384628 -1.38201 2.4875   V2 0.376765 -1.35376 2.49844 
+  N0 -4.5989e-16 -0.556738 0.830688   N1 0.14476 -0.537012 0.831061   N2 1.77072e-16 -2.25214e-15 1 
+   txt003 
+STRI 
+  V0 1.43241 0 2.4875   V1 1.38201 -0.384628 2.4875   V2 1.41495 -0.393796 2.45469 
+  N0 0.556738 0 0.830688   N1 0.537012 -0.14476 0.831061   N2 0.755869 -0.203756 0.622211 
+   txt003 
+STRI 
+  V0 1.41495 -0.393796 2.45469   V1 1.46655 0 2.45469   V2 1.43241 0 2.4875 
+  N0 0.755869 -0.203756 0.622211   N1 0.783289 0 0.621658   N2 0.556738 0 0.830688 
+   txt003 
+STRI 
+  V0 1.38201 -0.384628 2.4875   V1 1.2393 -0.727875 2.4875   V2 1.26884 -0.745225 2.45469 
+  N0 0.537012 -0.14476 0.831061   N1 0.480481 -0.278679 0.83155   N2 0.67669 -0.39248 0.622937 
+   txt003 
+STRI 
+  V0 1.26884 -0.745225 2.45469   V1 1.41495 -0.393796 2.45469   V2 1.38201 -0.384628 2.4875 
+  N0 0.67669 -0.39248 0.622937   N1 0.755869 -0.203756 0.622211   N2 0.537012 -0.14476 0.831061 
+   txt003 
+STRI 
+  V0 1.2393 -0.727875 2.4875   V1 1.01701 -1.01701 2.4875   V2 1.04125 -1.04125 2.45469 
+  N0 0.480481 -0.278679 0.83155   N1 0.392564 -0.392564 0.831737   N2 0.552993 -0.552993 0.623215 
+   txt003 
+STRI 
+  V0 1.04125 -1.04125 2.45469   V1 1.26884 -0.745225 2.45469   V2 1.2393 -0.727875 2.4875 
+  N0 0.552993 -0.552993 0.623215   N1 0.67669 -0.39248 0.622937   N2 0.480481 -0.278679 0.83155 
+   txt003 
+STRI 
+  V0 1.01701 -1.01701 2.4875   V1 0.727875 -1.2393 2.4875   V2 0.745225 -1.26884 2.45469 
+  N0 0.392564 -0.392564 0.831737   N1 0.278679 -0.480481 0.83155   N2 0.39248 -0.67669 0.622937 
+   txt003 
+STRI 
+  V0 0.745225 -1.26884 2.45469   V1 1.04125 -1.04125 2.45469   V2 1.01701 -1.01701 2.4875 
+  N0 0.39248 -0.67669 0.622937   N1 0.552993 -0.552993 0.623215   N2 0.392564 -0.392564 0.831737 
+   txt003 
+STRI 
+  V0 0.727875 -1.2393 2.4875   V1 0.384628 -1.38201 2.4875   V2 0.393796 -1.41495 2.45469 
+  N0 0.278679 -0.480481 0.83155   N1 0.14476 -0.537012 0.831061   N2 0.203756 -0.755869 0.622211 
+   txt003 
+STRI 
+  V0 0.393796 -1.41495 2.45469   V1 0.745225 -1.26884 2.45469   V2 0.727875 -1.2393 2.4875 
+  N0 0.203756 -0.755869 0.622211   N1 0.39248 -0.67669 0.622937   N2 0.278679 -0.480481 0.83155 
+   txt003 
+STRI 
+  V0 0.384628 -1.38201 2.4875   V1 0 -1.43241 2.4875   V2 0 -1.46655 2.45469 
+  N0 0.14476 -0.537012 0.831061   N1 -4.5989e-16 -0.556738 0.830688   N2 -1.94969e-16 -0.783289 0.621658 
+   txt003 
+STRI 
+  V0 0 -1.46655 2.45469   V1 0.393796 -1.41495 2.45469   V2 0.384628 -1.38201 2.4875 
+  N0 -1.94969e-16 -0.783289 0.621658   N1 0.203756 -0.755869 0.622211   N2 0.14476 -0.537012 0.831061 
+   txt003 
+STRI 
+  V0 1.46655 0 2.45469   V1 1.41495 -0.393796 2.45469   V2 1.44722 -0.402778 2.4 
+  N0 0.783289 0 0.621658   N1 0.755869 -0.203756 0.622211   N2 0.871509 -0.234929 0.430442 
+   txt003 
+STRI 
+  V0 1.44722 -0.402778 2.4   V1 1.5 0 2.4   V2 1.46655 0 2.45469 
+  N0 0.871509 -0.234929 0.430442   N1 0.902861 0 0.429934   N2 0.783289 0 0.621658 
+   txt003 
+STRI 
+  V0 1.41495 -0.393796 2.45469   V1 1.26884 -0.745225 2.45469   V2 1.29778 -0.762222 2.4 
+  N0 0.755869 -0.203756 0.622211   N1 0.67669 -0.39248 0.622937   N2 0.780517 -0.4527 0.43111 
+   txt003 
+STRI 
+  V0 1.29778 -0.762222 2.4   V1 1.44722 -0.402778 2.4   V2 1.41495 -0.393796 2.45469 
+  N0 0.780517 -0.4527 0.43111   N1 0.871509 -0.234929 0.430442   N2 0.755869 -0.203756 0.622211 
+   txt003 
+STRI 
+  V0 1.26884 -0.745225 2.45469   V1 1.04125 -1.04125 2.45469   V2 1.065 -1.065 2.4 
+  N0 0.67669 -0.39248 0.622937   N1 0.552993 -0.552993 0.623215   N2 0.637936 -0.637936 0.431366 
+   txt003 
+STRI 
+  V0 1.065 -1.065 2.4   V1 1.29778 -0.762222 2.4   V2 1.26884 -0.745225 2.45469 
+  N0 0.637936 -0.637936 0.431366   N1 0.780517 -0.4527 0.43111   N2 0.67669 -0.39248 0.622937 
+   txt003 
+STRI 
+  V0 1.04125 -1.04125 2.45469   V1 0.745225 -1.26884 2.45469   V2 0.762222 -1.29778 2.4 
+  N0 0.552993 -0.552993 0.623215   N1 0.39248 -0.67669 0.622937   N2 0.4527 -0.780517 0.43111 
+   txt003 
+STRI 
+  V0 0.762222 -1.29778 2.4   V1 1.065 -1.065 2.4   V2 1.04125 -1.04125 2.45469 
+  N0 0.4527 -0.780517 0.43111   N1 0.637936 -0.637936 0.431366   N2 0.552993 -0.552993 0.623215 
+   txt003 
+STRI 
+  V0 0.745225 -1.26884 2.45469   V1 0.393796 -1.41495 2.45469   V2 0.402778 -1.44722 2.4 
+  N0 0.39248 -0.67669 0.622937   N1 0.203756 -0.755869 0.622211   N2 0.234929 -0.871509 0.430442 
+   txt003 
+STRI 
+  V0 0.402778 -1.44722 2.4   V1 0.762222 -1.29778 2.4   V2 0.745225 -1.26884 2.45469 
+  N0 0.234929 -0.871509 0.430442   N1 0.4527 -0.780517 0.43111   N2 0.39248 -0.67669 0.622937 
+   txt003 
+STRI 
+  V0 0.393796 -1.41495 2.45469   V1 0 -1.46655 2.45469   V2 0 -1.5 2.4 
+  N0 0.203756 -0.755869 0.622211   N1 -1.94969e-16 -0.783289 0.621658   N2 -6.81889e-17 -0.902861 0.429934 
+   txt003 
+STRI 
+  V0 0 -1.5 2.4   V1 0.402778 -1.44722 2.4   V2 0.393796 -1.41495 2.45469 
+  N0 -6.81889e-17 -0.902861 0.429934   N1 0.234929 -0.871509 0.430442   N2 0.203756 -0.755869 0.622211 
+   txt003 
+STRI 
+  V0 0 -1.4 2.4   V1 -0.375926 -1.35074 2.4   V2 -0.370922 -1.33276 2.45469 
+  N0 0 0.902861 -0.429934   N1 0.234929 0.871509 -0.430442   N2 0.257047 0.953562 -0.156989 
+   txt003 
+STRI 
+  V0 -0.370922 -1.33276 2.45469   V1 0 -1.38137 2.45469   V2 0 -1.4 2.4 
+  N0 0.257047 0.953562 -0.156989   N1 0 0.987636 -0.156768   N2 0 0.902861 -0.429934 
+   txt003 
+STRI 
+  V0 -0.375926 -1.35074 2.4   V1 -0.711407 -1.21126 2.4   V2 -0.701938 -1.19514 2.45469 
+  N0 0.234929 0.871509 -0.430442   N1 0.4527 0.780517 -0.43111   N2 0.495474 0.854265 -0.157281 
+   txt003 
+STRI 
+  V0 -0.701938 -1.19514 2.45469   V1 -0.370922 -1.33276 2.45469   V2 -0.375926 -1.35074 2.4 
+  N0 0.495474 0.854265 -0.157281   N1 0.257047 0.953562 -0.156989   N2 0.234929 0.871509 -0.430442 
+   txt003 
+STRI 
+  V0 -0.711407 -1.21126 2.4   V1 -0.994 -0.994 2.4   V2 -0.98077 -0.98077 2.45469 
+  N0 0.4527 0.780517 -0.43111   N1 0.637936 0.637936 -0.431366   N2 0.698293 0.698293 -0.157393 
+   txt003 
+STRI 
+  V0 -0.98077 -0.98077 2.45469   V1 -0.701938 -1.19514 2.45469   V2 -0.711407 -1.21126 2.4 
+  N0 0.698293 0.698293 -0.157393   N1 0.495474 0.854265 -0.157281   N2 0.4527 0.780517 -0.43111 
+   txt003 
+STRI 
+  V0 -0.994 -0.994 2.4   V1 -1.21126 -0.711407 2.4   V2 -1.19514 -0.701938 2.45469 
+  N0 0.637936 0.637936 -0.431366   N1 0.780517 0.4527 -0.43111   N2 0.854265 0.495474 -0.157281 
+   txt003 
+STRI 
+  V0 -1.19514 -0.701938 2.45469   V1 -0.98077 -0.98077 2.45469   V2 -0.994 -0.994 2.4 
+  N0 0.854265 0.495474 -0.157281   N1 0.698293 0.698293 -0.157393   N2 0.637936 0.637936 -0.431366 
+   txt003 
+STRI 
+  V0 -1.21126 -0.711407 2.4   V1 -1.35074 -0.375926 2.4   V2 -1.33276 -0.370922 2.45469 
+  N0 0.780517 0.4527 -0.43111   N1 0.871509 0.234929 -0.430442   N2 0.953562 0.257047 -0.156989 
+   txt003 
+STRI 
+  V0 -1.33276 -0.370922 2.45469   V1 -1.19514 -0.701938 2.45469   V2 -1.21126 -0.711407 2.4 
+  N0 0.953562 0.257047 -0.156989   N1 0.854265 0.495474 -0.157281   N2 0.780517 0.4527 -0.43111 
+   txt003 
+STRI 
+  V0 -1.35074 -0.375926 2.4   V1 -1.4 0 2.4   V2 -1.38137 0 2.45469 
+  N0 0.871509 0.234929 -0.430442   N1 0.902861 -7.30595e-17 -0.429934   N2 0.987636 9.89971e-17 -0.156768 
+   txt003 
+STRI 
+  V0 -1.38137 0 2.45469   V1 -1.33276 -0.370922 2.45469   V2 -1.35074 -0.375926 2.4 
+  N0 0.987636 9.89971e-17 -0.156768   N1 0.953562 0.257047 -0.156989   N2 0.871509 0.234929 -0.430442 
+   txt003 
+STRI 
+  V0 0 -1.38137 2.45469   V1 -0.370922 -1.33276 2.45469   V2 -0.371699 -1.33555 2.4875 
+  N0 0 0.987636 -0.156768   N1 0.257047 0.953562 -0.156989   N2 0.228972 0.849414 0.475466 
+   txt003 
+STRI 
+  V0 -0.371699 -1.33555 2.4875   V1 0 -1.38426 2.4875   V2 0 -1.38137 2.45469 
+  N0 0.228972 0.849414 0.475466   N1 0 0.880022 0.474933   N2 0 0.987636 -0.156768 
+   txt003 
+STRI 
+  V0 -0.370922 -1.33276 2.45469   V1 -0.701938 -1.19514 2.45469   V2 -0.703409 -1.19764 2.4875 
+  N0 0.257047 0.953562 -0.156989   N1 0.495474 0.854265 -0.157281   N2 0.441188 0.760669 0.476167 
+   txt003 
+STRI 
+  V0 -0.703409 -1.19764 2.4875   V1 -0.371699 -1.33555 2.4875   V2 -0.370922 -1.33276 2.45469 
+  N0 0.441188 0.760669 0.476167   N1 0.228972 0.849414 0.475466   N2 0.257047 0.953562 -0.156989 
+   txt003 
+STRI 
+  V0 -0.701938 -1.19514 2.45469   V1 -0.98077 -0.98077 2.45469   V2 -0.982824 -0.982824 2.4875 
+  N0 0.495474 0.854265 -0.157281   N1 0.698293 0.698293 -0.157393   N2 0.621695 0.621695 0.476435 
+   txt003 
+STRI 
+  V0 -0.982824 -0.982824 2.4875   V1 -0.703409 -1.19764 2.4875   V2 -0.701938 -1.19514 2.45469 
+  N0 0.621695 0.621695 0.476435   N1 0.441188 0.760669 0.476167   N2 0.495474 0.854265 -0.157281 
+   txt003 
+STRI 
+  V0 -0.98077 -0.98077 2.45469   V1 -1.19514 -0.701938 2.45469   V2 -1.19764 -0.703409 2.4875 
+  N0 0.698293 0.698293 -0.157393   N1 0.854265 0.495474 -0.157281   N2 0.760669 0.441188 0.476167 
+   txt003 
+STRI 
+  V0 -1.19764 -0.703409 2.4875   V1 -0.982824 -0.982824 2.4875   V2 -0.98077 -0.98077 2.45469 
+  N0 0.760669 0.441188 0.476167   N1 0.621695 0.621695 0.476435   N2 0.698293 0.698293 -0.157393 
+   txt003 
+STRI 
+  V0 -1.19514 -0.701938 2.45469   V1 -1.33276 -0.370922 2.45469   V2 -1.33555 -0.371699 2.4875 
+  N0 0.854265 0.495474 -0.157281   N1 0.953562 0.257047 -0.156989   N2 0.849414 0.228972 0.475466 
+   txt003 
+STRI 
+  V0 -1.33555 -0.371699 2.4875   V1 -1.19764 -0.703409 2.4875   V2 -1.19514 -0.701938 2.45469 
+  N0 0.849414 0.228972 0.475466   N1 0.760669 0.441188 0.476167   N2 0.854265 0.495474 -0.157281 
+   txt003 
+STRI 
+  V0 -1.33276 -0.370922 2.45469   V1 -1.38137 0 2.45469   V2 -1.38426 0 2.4875 
+  N0 0.953562 0.257047 -0.156989   N1 0.987636 9.89971e-17 -0.156768   N2 0.880022 6.08179e-16 0.474933 
+   txt003 
+STRI 
+  V0 -1.38426 0 2.4875   V1 -1.33555 -0.371699 2.4875   V2 -1.33276 -0.370922 2.45469 
+  N0 0.880022 6.08179e-16 0.474933   N1 0.849414 0.228972 0.475466   N2 0.953562 0.257047 -0.156989 
+   txt003 
+STRI 
+  V0 0 -1.38426 2.4875   V1 -0.371699 -1.33555 2.4875   V2 -0.376765 -1.35376 2.49844 
+  N0 0 0.880022 0.474933   N1 0.228972 0.849414 0.475466   N2 -5.93089e-16 -2.13636e-15 1 
+   txt003 
+STRI 
+  V0 -0.376765 -1.35376 2.49844   V1 0 -1.40312 2.49844   V2 0 -1.38426 2.4875 
+  N0 -5.93089e-16 -2.13636e-15 1   N1 0 -2.22045e-15 1   N2 0 0.880022 0.474933 
+   txt003 
+STRI 
+  V0 -0.371699 -1.33555 2.4875   V1 -0.703409 -1.19764 2.4875   V2 -0.712995 -1.21396 2.49844 
+  N0 0.228972 0.849414 0.475466   N1 0.441188 0.760669 0.476167   N2 -1.16933e-15 -1.87966e-15 1 
+   txt003 
+STRI 
+  V0 -0.712995 -1.21396 2.49844   V1 -0.376765 -1.35376 2.49844   V2 -0.371699 -1.33555 2.4875 
+  N0 -1.16933e-15 -1.87966e-15 1   N1 -5.93089e-16 -2.13636e-15 1   N2 0.228972 0.849414 0.475466 
+   txt003 
+STRI 
+  V0 -0.703409 -1.19764 2.4875   V1 -0.982824 -0.982824 2.4875   V2 -0.996219 -0.996219 2.49844 
+  N0 0.441188 0.760669 0.476167   N1 0.621695 0.621695 0.476435   N2 -1.67359e-15 -1.4538e-15 1 
+   txt003 
+STRI 
+  V0 -0.996219 -0.996219 2.49844   V1 -0.712995 -1.21396 2.49844   V2 -0.703409 -1.19764 2.4875 
+  N0 -1.67359e-15 -1.4538e-15 1   N1 -1.16933e-15 -1.87966e-15 1   N2 0.441188 0.760669 0.476167 
+   txt003 
+STRI 
+  V0 -0.982824 -0.982824 2.4875   V1 -1.19764 -0.703409 2.4875   V2 -1.21396 -0.712995 2.49844 
+  N0 0.621695 0.621695 0.476435   N1 0.760669 0.441188 0.476167   N2 -2.05298e-15 -8.74229e-16 1 
+   txt003 
+STRI 
+  V0 -1.21396 -0.712995 2.49844   V1 -0.996219 -0.996219 2.49844   V2 -0.982824 -0.982824 2.4875 
+  N0 -2.05298e-15 -8.74229e-16 1   N1 -1.67359e-15 -1.4538e-15 1   N2 0.621695 0.621695 0.476435 
+   txt003 
+STRI 
+  V0 -1.19764 -0.703409 2.4875   V1 -1.33555 -0.371699 2.4875   V2 -1.35376 -0.376765 2.49844 
+  N0 0.760669 0.441188 0.476167   N1 0.849414 0.228972 0.475466   N2 -2.25214e-15 -1.77072e-16 1 
+   txt003 
+STRI 
+  V0 -1.35376 -0.376765 2.49844   V1 -1.21396 -0.712995 2.49844   V2 -1.19764 -0.703409 2.4875 
+  N0 -2.25214e-15 -1.77072e-16 1   N1 -2.05298e-15 -8.74229e-16 1   N2 0.760669 0.441188 0.476167 
+   txt003 
+STRI 
+  V0 -1.33555 -0.371699 2.4875   V1 -1.38426 0 2.4875   V2 -1.40312 0 2.49844 
+  N0 0.849414 0.228972 0.475466   N1 0.880022 6.08179e-16 0.474933   N2 -2.22045e-15 5.65179e-16 1 
+   txt003 
+STRI 
+  V0 -1.40312 0 2.49844   V1 -1.35376 -0.376765 2.49844   V2 -1.33555 -0.371699 2.4875 
+  N0 -2.22045e-15 5.65179e-16 1   N1 -2.25214e-15 -1.77072e-16 1   N2 0.849414 0.228972 0.475466 
+   txt003 
+STRI 
+  V0 0 -1.40312 2.49844   V1 -0.376765 -1.35376 2.49844   V2 -0.384628 -1.38201 2.4875 
+  N0 0 -2.22045e-15 1   N1 -5.93089e-16 -2.13636e-15 1   N2 -0.14476 -0.537012 0.831061 
+   txt003 
+STRI 
+  V0 -0.384628 -1.38201 2.4875   V1 0 -1.43241 2.4875   V2 0 -1.40312 2.49844 
+  N0 -0.14476 -0.537012 0.831061   N1 0 -0.556738 0.830688   N2 0 -2.22045e-15 1 
+   txt003 
+STRI 
+  V0 -0.376765 -1.35376 2.49844   V1 -0.712995 -1.21396 2.49844   V2 -0.727875 -1.2393 2.4875 
+  N0 -5.93089e-16 -2.13636e-15 1   N1 -1.16933e-15 -1.87966e-15 1   N2 -0.278679 -0.480481 0.83155 
+   txt003 
+STRI 
+  V0 -0.727875 -1.2393 2.4875   V1 -0.384628 -1.38201 2.4875   V2 -0.376765 -1.35376 2.49844 
+  N0 -0.278679 -0.480481 0.83155   N1 -0.14476 -0.537012 0.831061   N2 -5.93089e-16 -2.13636e-15 1 
+   txt003 
+STRI 
+  V0 -0.712995 -1.21396 2.49844   V1 -0.996219 -0.996219 2.49844   V2 -1.01701 -1.01701 2.4875 
+  N0 -1.16933e-15 -1.87966e-15 1   N1 -1.67359e-15 -1.4538e-15 1   N2 -0.392564 -0.392564 0.831737 
+   txt003 
+STRI 
+  V0 -1.01701 -1.01701 2.4875   V1 -0.727875 -1.2393 2.4875   V2 -0.712995 -1.21396 2.49844 
+  N0 -0.392564 -0.392564 0.831737   N1 -0.278679 -0.480481 0.83155   N2 -1.16933e-15 -1.87966e-15 1 
+   txt003 
+STRI 
+  V0 -0.996219 -0.996219 2.49844   V1 -1.21396 -0.712995 2.49844   V2 -1.2393 -0.727875 2.4875 
+  N0 -1.67359e-15 -1.4538e-15 1   N1 -2.05298e-15 -8.74229e-16 1   N2 -0.480481 -0.278679 0.83155 
+   txt003 
+STRI 
+  V0 -1.2393 -0.727875 2.4875   V1 -1.01701 -1.01701 2.4875   V2 -0.996219 -0.996219 2.49844 
+  N0 -0.480481 -0.278679 0.83155   N1 -0.392564 -0.392564 0.831737   N2 -1.67359e-15 -1.4538e-15 1 
+   txt003 
+STRI 
+  V0 -1.21396 -0.712995 2.49844   V1 -1.35376 -0.376765 2.49844   V2 -1.38201 -0.384628 2.4875 
+  N0 -2.05298e-15 -8.74229e-16 1   N1 -2.25214e-15 -1.77072e-16 1   N2 -0.537012 -0.14476 0.831061 
+   txt003 
+STRI 
+  V0 -1.38201 -0.384628 2.4875   V1 -1.2393 -0.727875 2.4875   V2 -1.21396 -0.712995 2.49844 
+  N0 -0.537012 -0.14476 0.831061   N1 -0.480481 -0.278679 0.83155   N2 -2.05298e-15 -8.74229e-16 1 
+   txt003 
+STRI 
+  V0 -1.35376 -0.376765 2.49844   V1 -1.40312 0 2.49844   V2 -1.43241 0 2.4875 
+  N0 -2.25214e-15 -1.77072e-16 1   N1 -2.22045e-15 5.65179e-16 1   N2 -0.556738 4.5989e-16 0.830688 
+   txt003 
+STRI 
+  V0 -1.43241 0 2.4875   V1 -1.38201 -0.384628 2.4875   V2 -1.35376 -0.376765 2.49844 
+  N0 -0.556738 4.5989e-16 0.830688   N1 -0.537012 -0.14476 0.831061   N2 -2.25214e-15 -1.77072e-16 1 
+   txt003 
+STRI 
+  V0 0 -1.43241 2.4875   V1 -0.384628 -1.38201 2.4875   V2 -0.393796 -1.41495 2.45469 
+  N0 0 -0.556738 0.830688   N1 -0.14476 -0.537012 0.831061   N2 -0.203756 -0.755869 0.622211 
+   txt003 
+STRI 
+  V0 -0.393796 -1.41495 2.45469   V1 0 -1.46655 2.45469   V2 0 -1.43241 2.4875 
+  N0 -0.203756 -0.755869 0.622211   N1 0 -0.783289 0.621658   N2 0 -0.556738 0.830688 
+   txt003 
+STRI 
+  V0 -0.384628 -1.38201 2.4875   V1 -0.727875 -1.2393 2.4875   V2 -0.745225 -1.26884 2.45469 
+  N0 -0.14476 -0.537012 0.831061   N1 -0.278679 -0.480481 0.83155   N2 -0.39248 -0.67669 0.622937 
+   txt003 
+STRI 
+  V0 -0.745225 -1.26884 2.45469   V1 -0.393796 -1.41495 2.45469   V2 -0.384628 -1.38201 2.4875 
+  N0 -0.39248 -0.67669 0.622937   N1 -0.203756 -0.755869 0.622211   N2 -0.14476 -0.537012 0.831061 
+   txt003 
+STRI 
+  V0 -0.727875 -1.2393 2.4875   V1 -1.01701 -1.01701 2.4875   V2 -1.04125 -1.04125 2.45469 
+  N0 -0.278679 -0.480481 0.83155   N1 -0.392564 -0.392564 0.831737   N2 -0.552993 -0.552993 0.623215 
+   txt003 
+STRI 
+  V0 -1.04125 -1.04125 2.45469   V1 -0.745225 -1.26884 2.45469   V2 -0.727875 -1.2393 2.4875 
+  N0 -0.552993 -0.552993 0.623215   N1 -0.39248 -0.67669 0.622937   N2 -0.278679 -0.480481 0.83155 
+   txt003 
+STRI 
+  V0 -1.01701 -1.01701 2.4875   V1 -1.2393 -0.727875 2.4875   V2 -1.26884 -0.745225 2.45469 
+  N0 -0.392564 -0.392564 0.831737   N1 -0.480481 -0.278679 0.83155   N2 -0.67669 -0.39248 0.622937 
+   txt003 
+STRI 
+  V0 -1.26884 -0.745225 2.45469   V1 -1.04125 -1.04125 2.45469   V2 -1.01701 -1.01701 2.4875 
+  N0 -0.67669 -0.39248 0.622937   N1 -0.552993 -0.552993 0.623215   N2 -0.392564 -0.392564 0.831737 
+   txt003 
+STRI 
+  V0 -1.2393 -0.727875 2.4875   V1 -1.38201 -0.384628 2.4875   V2 -1.41495 -0.393796 2.45469 
+  N0 -0.480481 -0.278679 0.83155   N1 -0.537012 -0.14476 0.831061   N2 -0.755869 -0.203756 0.622211 
+   txt003 
+STRI 
+  V0 -1.41495 -0.393796 2.45469   V1 -1.26884 -0.745225 2.45469   V2 -1.2393 -0.727875 2.4875 
+  N0 -0.755869 -0.203756 0.622211   N1 -0.67669 -0.39248 0.622937   N2 -0.480481 -0.278679 0.83155 
+   txt003 
+STRI 
+  V0 -1.38201 -0.384628 2.4875   V1 -1.43241 0 2.4875   V2 -1.46655 0 2.45469 
+  N0 -0.537012 -0.14476 0.831061   N1 -0.556738 4.5989e-16 0.830688   N2 -0.783289 1.94969e-16 0.621658 
+   txt003 
+STRI 
+  V0 -1.46655 0 2.45469   V1 -1.41495 -0.393796 2.45469   V2 -1.38201 -0.384628 2.4875 
+  N0 -0.783289 1.94969e-16 0.621658   N1 -0.755869 -0.203756 0.622211   N2 -0.537012 -0.14476 0.831061 
+   txt003 
+STRI 
+  V0 0 -1.46655 2.45469   V1 -0.393796 -1.41495 2.45469   V2 -0.402778 -1.44722 2.4 
+  N0 0 -0.783289 0.621658   N1 -0.203756 -0.755869 0.622211   N2 -0.234929 -0.871509 0.430442 
+   txt003 
+STRI 
+  V0 -0.402778 -1.44722 2.4   V1 0 -1.5 2.4   V2 0 -1.46655 2.45469 
+  N0 -0.234929 -0.871509 0.430442   N1 0 -0.902861 0.429934   N2 0 -0.783289 0.621658 
+   txt003 
+STRI 
+  V0 -0.393796 -1.41495 2.45469   V1 -0.745225 -1.26884 2.45469   V2 -0.762222 -1.29778 2.4 
+  N0 -0.203756 -0.755869 0.622211   N1 -0.39248 -0.67669 0.622937   N2 -0.4527 -0.780517 0.43111 
+   txt003 
+STRI 
+  V0 -0.762222 -1.29778 2.4   V1 -0.402778 -1.44722 2.4   V2 -0.393796 -1.41495 2.45469 
+  N0 -0.4527 -0.780517 0.43111   N1 -0.234929 -0.871509 0.430442   N2 -0.203756 -0.755869 0.622211 
+   txt003 
+STRI 
+  V0 -0.745225 -1.26884 2.45469   V1 -1.04125 -1.04125 2.45469   V2 -1.065 -1.065 2.4 
+  N0 -0.39248 -0.67669 0.622937   N1 -0.552993 -0.552993 0.623215   N2 -0.637936 -0.637936 0.431366 
+   txt003 
+STRI 
+  V0 -1.065 -1.065 2.4   V1 -0.762222 -1.29778 2.4   V2 -0.745225 -1.26884 2.45469 
+  N0 -0.637936 -0.637936 0.431366   N1 -0.4527 -0.780517 0.43111   N2 -0.39248 -0.67669 0.622937 
+   txt003 
+STRI 
+  V0 -1.04125 -1.04125 2.45469   V1 -1.26884 -0.745225 2.45469   V2 -1.29778 -0.762222 2.4 
+  N0 -0.552993 -0.552993 0.623215   N1 -0.67669 -0.39248 0.622937   N2 -0.780517 -0.4527 0.43111 
+   txt003 
+STRI 
+  V0 -1.29778 -0.762222 2.4   V1 -1.065 -1.065 2.4   V2 -1.04125 -1.04125 2.45469 
+  N0 -0.780517 -0.4527 0.43111   N1 -0.637936 -0.637936 0.431366   N2 -0.552993 -0.552993 0.623215 
+   txt003 
+STRI 
+  V0 -1.26884 -0.745225 2.45469   V1 -1.41495 -0.393796 2.45469   V2 -1.44722 -0.402778 2.4 
+  N0 -0.67669 -0.39248 0.622937   N1 -0.755869 -0.203756 0.622211   N2 -0.871509 -0.234929 0.430442 
+   txt003 
+STRI 
+  V0 -1.44722 -0.402778 2.4   V1 -1.29778 -0.762222 2.4   V2 -1.26884 -0.745225 2.45469 
+  N0 -0.871509 -0.234929 0.430442   N1 -0.780517 -0.4527 0.43111   N2 -0.67669 -0.39248 0.622937 
+   txt003 
+STRI 
+  V0 -1.41495 -0.393796 2.45469   V1 -1.46655 0 2.45469   V2 -1.5 0 2.4 
+  N0 -0.755869 -0.203756 0.622211   N1 -0.783289 1.94969e-16 0.621658   N2 -0.902861 6.81889e-17 0.429934 
+   txt003 
+STRI 
+  V0 -1.5 0 2.4   V1 -1.44722 -0.402778 2.4   V2 -1.41495 -0.393796 2.45469 
+  N0 -0.902861 6.81889e-17 0.429934   N1 -0.871509 -0.234929 0.430442   N2 -0.755869 -0.203756 0.622211 
+   txt003 
+STRI 
+  V0 -1.4 0 2.4   V1 -1.35074 0.375926 2.4   V2 -1.33276 0.370922 2.45469 
+  N0 0.902861 0 -0.429934   N1 0.871509 -0.234929 -0.430442   N2 0.953562 -0.257047 -0.156989 
+   txt003 
+STRI 
+  V0 -1.33276 0.370922 2.45469   V1 -1.38137 0 2.45469   V2 -1.4 0 2.4 
+  N0 0.953562 -0.257047 -0.156989   N1 0.987636 0 -0.156768   N2 0.902861 0 -0.429934 
+   txt003 
+STRI 
+  V0 -1.35074 0.375926 2.4   V1 -1.21126 0.711407 2.4   V2 -1.19514 0.701938 2.45469 
+  N0 0.871509 -0.234929 -0.430442   N1 0.780517 -0.4527 -0.43111   N2 0.854265 -0.495474 -0.157281 
+   txt003 
+STRI 
+  V0 -1.19514 0.701938 2.45469   V1 -1.33276 0.370922 2.45469   V2 -1.35074 0.375926 2.4 
+  N0 0.854265 -0.495474 -0.157281   N1 0.953562 -0.257047 -0.156989   N2 0.871509 -0.234929 -0.430442 
+   txt003 
+STRI 
+  V0 -1.21126 0.711407 2.4   V1 -0.994 0.994 2.4   V2 -0.98077 0.98077 2.45469 
+  N0 0.780517 -0.4527 -0.43111   N1 0.637936 -0.637936 -0.431366   N2 0.698293 -0.698293 -0.157393 
+   txt003 
+STRI 
+  V0 -0.98077 0.98077 2.45469   V1 -1.19514 0.701938 2.45469   V2 -1.21126 0.711407 2.4 
+  N0 0.698293 -0.698293 -0.157393   N1 0.854265 -0.495474 -0.157281   N2 0.780517 -0.4527 -0.43111 
+   txt003 
+STRI 
+  V0 -0.994 0.994 2.4   V1 -0.711407 1.21126 2.4   V2 -0.701938 1.19514 2.45469 
+  N0 0.637936 -0.637936 -0.431366   N1 0.4527 -0.780517 -0.43111   N2 0.495474 -0.854265 -0.157281 
+   txt003 
+STRI 
+  V0 -0.701938 1.19514 2.45469   V1 -0.98077 0.98077 2.45469   V2 -0.994 0.994 2.4 
+  N0 0.495474 -0.854265 -0.157281   N1 0.698293 -0.698293 -0.157393   N2 0.637936 -0.637936 -0.431366 
+   txt003 
+STRI 
+  V0 -0.711407 1.21126 2.4   V1 -0.375926 1.35074 2.4   V2 -0.370922 1.33276 2.45469 
+  N0 0.4527 -0.780517 -0.43111   N1 0.234929 -0.871509 -0.430442   N2 0.257047 -0.953562 -0.156989 
+   txt003 
+STRI 
+  V0 -0.370922 1.33276 2.45469   V1 -0.701938 1.19514 2.45469   V2 -0.711407 1.21126 2.4 
+  N0 0.257047 -0.953562 -0.156989   N1 0.495474 -0.854265 -0.157281   N2 0.4527 -0.780517 -0.43111 
+   txt003 
+STRI 
+  V0 -0.375926 1.35074 2.4   V1 0 1.4 2.4   V2 0 1.38137 2.45469 
+  N0 0.234929 -0.871509 -0.430442   N1 -7.30595e-17 -0.902861 -0.429934   N2 9.89971e-17 -0.987636 -0.156768 
+   txt003 
+STRI 
+  V0 0 1.38137 2.45469   V1 -0.370922 1.33276 2.45469   V2 -0.375926 1.35074 2.4 
+  N0 9.89971e-17 -0.987636 -0.156768   N1 0.257047 -0.953562 -0.156989   N2 0.234929 -0.871509 -0.430442 
+   txt003 
+STRI 
+  V0 -1.38137 0 2.45469   V1 -1.33276 0.370922 2.45469   V2 -1.33555 0.371699 2.4875 
+  N0 0.987636 0 -0.156768   N1 0.953562 -0.257047 -0.156989   N2 0.849414 -0.228972 0.475466 
+   txt003 
+STRI 
+  V0 -1.33555 0.371699 2.4875   V1 -1.38426 0 2.4875   V2 -1.38137 0 2.45469 
+  N0 0.849414 -0.228972 0.475466   N1 0.880022 -0 0.474933   N2 0.987636 0 -0.156768 
+   txt003 
+STRI 
+  V0 -1.33276 0.370922 2.45469   V1 -1.19514 0.701938 2.45469   V2 -1.19764 0.703409 2.4875 
+  N0 0.953562 -0.257047 -0.156989   N1 0.854265 -0.495474 -0.157281   N2 0.760669 -0.441188 0.476167 
+   txt003 
+STRI 
+  V0 -1.19764 0.703409 2.4875   V1 -1.33555 0.371699 2.4875   V2 -1.33276 0.370922 2.45469 
+  N0 0.760669 -0.441188 0.476167   N1 0.849414 -0.228972 0.475466   N2 0.953562 -0.257047 -0.156989 
+   txt003 
+STRI 
+  V0 -1.19514 0.701938 2.45469   V1 -0.98077 0.98077 2.45469   V2 -0.982824 0.982824 2.4875 
+  N0 0.854265 -0.495474 -0.157281   N1 0.698293 -0.698293 -0.157393   N2 0.621695 -0.621695 0.476435 
+   txt003 
+STRI 
+  V0 -0.982824 0.982824 2.4875   V1 -1.19764 0.703409 2.4875   V2 -1.19514 0.701938 2.45469 
+  N0 0.621695 -0.621695 0.476435   N1 0.760669 -0.441188 0.476167   N2 0.854265 -0.495474 -0.157281 
+   txt003 
+STRI 
+  V0 -0.98077 0.98077 2.45469   V1 -0.701938 1.19514 2.45469   V2 -0.703409 1.19764 2.4875 
+  N0 0.698293 -0.698293 -0.157393   N1 0.495474 -0.854265 -0.157281   N2 0.441188 -0.760669 0.476167 
+   txt003 
+STRI 
+  V0 -0.703409 1.19764 2.4875   V1 -0.982824 0.982824 2.4875   V2 -0.98077 0.98077 2.45469 
+  N0 0.441188 -0.760669 0.476167   N1 0.621695 -0.621695 0.476435   N2 0.698293 -0.698293 -0.157393 
+   txt003 
+STRI 
+  V0 -0.701938 1.19514 2.45469   V1 -0.370922 1.33276 2.45469   V2 -0.371699 1.33555 2.4875 
+  N0 0.495474 -0.854265 -0.157281   N1 0.257047 -0.953562 -0.156989   N2 0.228972 -0.849414 0.475466 
+   txt003 
+STRI 
+  V0 -0.371699 1.33555 2.4875   V1 -0.703409 1.19764 2.4875   V2 -0.701938 1.19514 2.45469 
+  N0 0.228972 -0.849414 0.475466   N1 0.441188 -0.760669 0.476167   N2 0.495474 -0.854265 -0.157281 
+   txt003 
+STRI 
+  V0 -0.370922 1.33276 2.45469   V1 0 1.38137 2.45469   V2 0 1.38426 2.4875 
+  N0 0.257047 -0.953562 -0.156989   N1 9.89971e-17 -0.987636 -0.156768   N2 6.08179e-16 -0.880022 0.474933 
+   txt003 
+STRI 
+  V0 0 1.38426 2.4875   V1 -0.371699 1.33555 2.4875   V2 -0.370922 1.33276 2.45469 
+  N0 6.08179e-16 -0.880022 0.474933   N1 0.228972 -0.849414 0.475466   N2 0.257047 -0.953562 -0.156989 
+   txt003 
+STRI 
+  V0 -1.38426 0 2.4875   V1 -1.33555 0.371699 2.4875   V2 -1.35376 0.376765 2.49844 
+  N0 0.880022 -0 0.474933   N1 0.849414 -0.228972 0.475466   N2 -2.13636e-15 5.93089e-16 1 
+   txt003 
+STRI 
+  V0 -1.35376 0.376765 2.49844   V1 -1.40312 0 2.49844   V2 -1.38426 0 2.4875 
+  N0 -2.13636e-15 5.93089e-16 1   N1 -2.22045e-15 0 1   N2 0.880022 -0 0.474933 
+   txt003 
+STRI 
+  V0 -1.33555 0.371699 2.4875   V1 -1.19764 0.703409 2.4875   V2 -1.21396 0.712995 2.49844 
+  N0 0.849414 -0.228972 0.475466   N1 0.760669 -0.441188 0.476167   N2 -1.87966e-15 1.16933e-15 1 
+   txt003 
+STRI 
+  V0 -1.21396 0.712995 2.49844   V1 -1.35376 0.376765 2.49844   V2 -1.33555 0.371699 2.4875 
+  N0 -1.87966e-15 1.16933e-15 1   N1 -2.13636e-15 5.93089e-16 1   N2 0.849414 -0.228972 0.475466 
+   txt003 
+STRI 
+  V0 -1.19764 0.703409 2.4875   V1 -0.982824 0.982824 2.4875   V2 -0.996219 0.996219 2.49844 
+  N0 0.760669 -0.441188 0.476167   N1 0.621695 -0.621695 0.476435   N2 -1.4538e-15 1.67359e-15 1 
+   txt003 
+STRI 
+  V0 -0.996219 0.996219 2.49844   V1 -1.21396 0.712995 2.49844   V2 -1.19764 0.703409 2.4875 
+  N0 -1.4538e-15 1.67359e-15 1   N1 -1.87966e-15 1.16933e-15 1   N2 0.760669 -0.441188 0.476167 
+   txt003 
+STRI 
+  V0 -0.982824 0.982824 2.4875   V1 -0.703409 1.19764 2.4875   V2 -0.712995 1.21396 2.49844 
+  N0 0.621695 -0.621695 0.476435   N1 0.441188 -0.760669 0.476167   N2 -8.74229e-16 2.05298e-15 1 
+   txt003 
+STRI 
+  V0 -0.712995 1.21396 2.49844   V1 -0.996219 0.996219 2.49844   V2 -0.982824 0.982824 2.4875 
+  N0 -8.74229e-16 2.05298e-15 1   N1 -1.4538e-15 1.67359e-15 1   N2 0.621695 -0.621695 0.476435 
+   txt003 
+STRI 
+  V0 -0.703409 1.19764 2.4875   V1 -0.371699 1.33555 2.4875   V2 -0.376765 1.35376 2.49844 
+  N0 0.441188 -0.760669 0.476167   N1 0.228972 -0.849414 0.475466   N2 -1.77072e-16 2.25214e-15 1 
+   txt003 
+STRI 
+  V0 -0.376765 1.35376 2.49844   V1 -0.712995 1.21396 2.49844   V2 -0.703409 1.19764 2.4875 
+  N0 -1.77072e-16 2.25214e-15 1   N1 -8.74229e-16 2.05298e-15 1   N2 0.441188 -0.760669 0.476167 
+   txt003 
+STRI 
+  V0 -0.371699 1.33555 2.4875   V1 0 1.38426 2.4875   V2 0 1.40312 2.49844 
+  N0 0.228972 -0.849414 0.475466   N1 6.08179e-16 -0.880022 0.474933   N2 5.65179e-16 2.22045e-15 1 
+   txt003 
+STRI 
+  V0 0 1.40312 2.49844   V1 -0.376765 1.35376 2.49844   V2 -0.371699 1.33555 2.4875 
+  N0 5.65179e-16 2.22045e-15 1   N1 -1.77072e-16 2.25214e-15 1   N2 0.228972 -0.849414 0.475466 
+   txt003 
+STRI 
+  V0 -1.40312 0 2.49844   V1 -1.35376 0.376765 2.49844   V2 -1.38201 0.384628 2.4875 
+  N0 -2.22045e-15 0 1   N1 -2.13636e-15 5.93089e-16 1   N2 -0.537012 0.14476 0.831061 
+   txt003 
+STRI 
+  V0 -1.38201 0.384628 2.4875   V1 -1.43241 0 2.4875   V2 -1.40312 0 2.49844 
+  N0 -0.537012 0.14476 0.831061   N1 -0.556738 0 0.830688   N2 -2.22045e-15 0 1 
+   txt003 
+STRI 
+  V0 -1.35376 0.376765 2.49844   V1 -1.21396 0.712995 2.49844   V2 -1.2393 0.727875 2.4875 
+  N0 -2.13636e-15 5.93089e-16 1   N1 -1.87966e-15 1.16933e-15 1   N2 -0.480481 0.278679 0.83155 
+   txt003 
+STRI 
+  V0 -1.2393 0.727875 2.4875   V1 -1.38201 0.384628 2.4875   V2 -1.35376 0.376765 2.49844 
+  N0 -0.480481 0.278679 0.83155   N1 -0.537012 0.14476 0.831061   N2 -2.13636e-15 5.93089e-16 1 
+   txt003 
+STRI 
+  V0 -1.21396 0.712995 2.49844   V1 -0.996219 0.996219 2.49844   V2 -1.01701 1.01701 2.4875 
+  N0 -1.87966e-15 1.16933e-15 1   N1 -1.4538e-15 1.67359e-15 1   N2 -0.392564 0.392564 0.831737 
+   txt003 
+STRI 
+  V0 -1.01701 1.01701 2.4875   V1 -1.2393 0.727875 2.4875   V2 -1.21396 0.712995 2.49844 
+  N0 -0.392564 0.392564 0.831737   N1 -0.480481 0.278679 0.83155   N2 -1.87966e-15 1.16933e-15 1 
+   txt003 
+STRI 
+  V0 -0.996219 0.996219 2.49844   V1 -0.712995 1.21396 2.49844   V2 -0.727875 1.2393 2.4875 
+  N0 -1.4538e-15 1.67359e-15 1   N1 -8.74229e-16 2.05298e-15 1   N2 -0.278679 0.480481 0.83155 
+   txt003 
+STRI 
+  V0 -0.727875 1.2393 2.4875   V1 -1.01701 1.01701 2.4875   V2 -0.996219 0.996219 2.49844 
+  N0 -0.278679 0.480481 0.83155   N1 -0.392564 0.392564 0.831737   N2 -1.4538e-15 1.67359e-15 1 
+   txt003 
+STRI 
+  V0 -0.712995 1.21396 2.49844   V1 -0.376765 1.35376 2.49844   V2 -0.384628 1.38201 2.4875 
+  N0 -8.74229e-16 2.05298e-15 1   N1 -1.77072e-16 2.25214e-15 1   N2 -0.14476 0.537012 0.831061 
+   txt003 
+STRI 
+  V0 -0.384628 1.38201 2.4875   V1 -0.727875 1.2393 2.4875   V2 -0.712995 1.21396 2.49844 
+  N0 -0.14476 0.537012 0.831061   N1 -0.278679 0.480481 0.83155   N2 -8.74229e-16 2.05298e-15 1 
+   txt003 
+STRI 
+  V0 -0.376765 1.35376 2.49844   V1 0 1.40312 2.49844   V2 0 1.43241 2.4875 
+  N0 -1.77072e-16 2.25214e-15 1   N1 5.65179e-16 2.22045e-15 1   N2 4.5989e-16 0.556738 0.830688 
+   txt003 
+STRI 
+  V0 0 1.43241 2.4875   V1 -0.384628 1.38201 2.4875   V2 -0.376765 1.35376 2.49844 
+  N0 4.5989e-16 0.556738 0.830688   N1 -0.14476 0.537012 0.831061   N2 -1.77072e-16 2.25214e-15 1 
+   txt003 
+STRI 
+  V0 -1.43241 0 2.4875   V1 -1.38201 0.384628 2.4875   V2 -1.41495 0.393796 2.45469 
+  N0 -0.556738 0 0.830688   N1 -0.537012 0.14476 0.831061   N2 -0.755869 0.203756 0.622211 
+   txt003 
+STRI 
+  V0 -1.41495 0.393796 2.45469   V1 -1.46655 0 2.45469   V2 -1.43241 0 2.4875 
+  N0 -0.755869 0.203756 0.622211   N1 -0.783289 0 0.621658   N2 -0.556738 0 0.830688 
+   txt003 
+STRI 
+  V0 -1.38201 0.384628 2.4875   V1 -1.2393 0.727875 2.4875   V2 -1.26884 0.745225 2.45469 
+  N0 -0.537012 0.14476 0.831061   N1 -0.480481 0.278679 0.83155   N2 -0.67669 0.39248 0.622937 
+   txt003 
+STRI 
+  V0 -1.26884 0.745225 2.45469   V1 -1.41495 0.393796 2.45469   V2 -1.38201 0.384628 2.4875 
+  N0 -0.67669 0.39248 0.622937   N1 -0.755869 0.203756 0.622211   N2 -0.537012 0.14476 0.831061 
+   txt003 
+STRI 
+  V0 -1.2393 0.727875 2.4875   V1 -1.01701 1.01701 2.4875   V2 -1.04125 1.04125 2.45469 
+  N0 -0.480481 0.278679 0.83155   N1 -0.392564 0.392564 0.831737   N2 -0.552993 0.552993 0.623215 
+   txt003 
+STRI 
+  V0 -1.04125 1.04125 2.45469   V1 -1.26884 0.745225 2.45469   V2 -1.2393 0.727875 2.4875 
+  N0 -0.552993 0.552993 0.623215   N1 -0.67669 0.39248 0.622937   N2 -0.480481 0.278679 0.83155 
+   txt003 
+STRI 
+  V0 -1.01701 1.01701 2.4875   V1 -0.727875 1.2393 2.4875   V2 -0.745225 1.26884 2.45469 
+  N0 -0.392564 0.392564 0.831737   N1 -0.278679 0.480481 0.83155   N2 -0.39248 0.67669 0.622937 
+   txt003 
+STRI 
+  V0 -0.745225 1.26884 2.45469   V1 -1.04125 1.04125 2.45469   V2 -1.01701 1.01701 2.4875 
+  N0 -0.39248 0.67669 0.622937   N1 -0.552993 0.552993 0.623215   N2 -0.392564 0.392564 0.831737 
+   txt003 
+STRI 
+  V0 -0.727875 1.2393 2.4875   V1 -0.384628 1.38201 2.4875   V2 -0.393796 1.41495 2.45469 
+  N0 -0.278679 0.480481 0.83155   N1 -0.14476 0.537012 0.831061   N2 -0.203756 0.755869 0.622211 
+   txt003 
+STRI 
+  V0 -0.393796 1.41495 2.45469   V1 -0.745225 1.26884 2.45469   V2 -0.727875 1.2393 2.4875 
+  N0 -0.203756 0.755869 0.622211   N1 -0.39248 0.67669 0.622937   N2 -0.278679 0.480481 0.83155 
+   txt003 
+STRI 
+  V0 -0.384628 1.38201 2.4875   V1 0 1.43241 2.4875   V2 0 1.46655 2.45469 
+  N0 -0.14476 0.537012 0.831061   N1 4.5989e-16 0.556738 0.830688   N2 1.94969e-16 0.783289 0.621658 
+   txt003 
+STRI 
+  V0 0 1.46655 2.45469   V1 -0.393796 1.41495 2.45469   V2 -0.384628 1.38201 2.4875 
+  N0 1.94969e-16 0.783289 0.621658   N1 -0.203756 0.755869 0.622211   N2 -0.14476 0.537012 0.831061 
+   txt003 
+STRI 
+  V0 -1.46655 0 2.45469   V1 -1.41495 0.393796 2.45469   V2 -1.44722 0.402778 2.4 
+  N0 -0.783289 0 0.621658   N1 -0.755869 0.203756 0.622211   N2 -0.871509 0.234929 0.430442 
+   txt003 
+STRI 
+  V0 -1.44722 0.402778 2.4   V1 -1.5 0 2.4   V2 -1.46655 0 2.45469 
+  N0 -0.871509 0.234929 0.430442   N1 -0.902861 0 0.429934   N2 -0.783289 0 0.621658 
+   txt003 
+STRI 
+  V0 -1.41495 0.393796 2.45469   V1 -1.26884 0.745225 2.45469   V2 -1.29778 0.762222 2.4 
+  N0 -0.755869 0.203756 0.622211   N1 -0.67669 0.39248 0.622937   N2 -0.780517 0.4527 0.43111 
+   txt003 
+STRI 
+  V0 -1.29778 0.762222 2.4   V1 -1.44722 0.402778 2.4   V2 -1.41495 0.393796 2.45469 
+  N0 -0.780517 0.4527 0.43111   N1 -0.871509 0.234929 0.430442   N2 -0.755869 0.203756 0.622211 
+   txt003 
+STRI 
+  V0 -1.26884 0.745225 2.45469   V1 -1.04125 1.04125 2.45469   V2 -1.065 1.065 2.4 
+  N0 -0.67669 0.39248 0.622937   N1 -0.552993 0.552993 0.623215   N2 -0.637936 0.637936 0.431366 
+   txt003 
+STRI 
+  V0 -1.065 1.065 2.4   V1 -1.29778 0.762222 2.4   V2 -1.26884 0.745225 2.45469 
+  N0 -0.637936 0.637936 0.431366   N1 -0.780517 0.4527 0.43111   N2 -0.67669 0.39248 0.622937 
+   txt003 
+STRI 
+  V0 -1.04125 1.04125 2.45469   V1 -0.745225 1.26884 2.45469   V2 -0.762222 1.29778 2.4 
+  N0 -0.552993 0.552993 0.623215   N1 -0.39248 0.67669 0.622937   N2 -0.4527 0.780517 0.43111 
+   txt003 
+STRI 
+  V0 -0.762222 1.29778 2.4   V1 -1.065 1.065 2.4   V2 -1.04125 1.04125 2.45469 
+  N0 -0.4527 0.780517 0.43111   N1 -0.637936 0.637936 0.431366   N2 -0.552993 0.552993 0.623215 
+   txt003 
+STRI 
+  V0 -0.745225 1.26884 2.45469   V1 -0.393796 1.41495 2.45469   V2 -0.402778 1.44722 2.4 
+  N0 -0.39248 0.67669 0.622937   N1 -0.203756 0.755869 0.622211   N2 -0.234929 0.871509 0.430442 
+   txt003 
+STRI 
+  V0 -0.402778 1.44722 2.4   V1 -0.762222 1.29778 2.4   V2 -0.745225 1.26884 2.45469 
+  N0 -0.234929 0.871509 0.430442   N1 -0.4527 0.780517 0.43111   N2 -0.39248 0.67669 0.622937 
+   txt003 
+STRI 
+  V0 -0.393796 1.41495 2.45469   V1 0 1.46655 2.45469   V2 0 1.5 2.4 
+  N0 -0.203756 0.755869 0.622211   N1 1.94969e-16 0.783289 0.621658   N2 6.81889e-17 0.902861 0.429934 
+   txt003 
+STRI 
+  V0 0 1.5 2.4   V1 -0.402778 1.44722 2.4   V2 -0.393796 1.41495 2.45469 
+  N0 6.81889e-17 0.902861 0.429934   N1 -0.234929 0.871509 0.430442   N2 -0.203756 0.755869 0.622211 
+   txt003 
+STRI 
+  V0 0 1.4 2.4   V1 0.375926 1.35074 2.4   V2 0.370922 1.33276 2.45469 
+  N0 0 -0.902861 -0.429934   N1 -0.234929 -0.871509 -0.430442   N2 -0.257047 -0.953562 -0.156989 
+   txt003 
+STRI 
+  V0 0.370922 1.33276 2.45469   V1 0 1.38137 2.45469   V2 0 1.4 2.4 
+  N0 -0.257047 -0.953562 -0.156989   N1 0 -0.987636 -0.156768   N2 0 -0.902861 -0.429934 
+   txt003 
+STRI 
+  V0 0.375926 1.35074 2.4   V1 0.711407 1.21126 2.4   V2 0.701938 1.19514 2.45469 
+  N0 -0.234929 -0.871509 -0.430442   N1 -0.4527 -0.780517 -0.43111   N2 -0.495474 -0.854265 -0.157281 
+   txt003 
+STRI 
+  V0 0.701938 1.19514 2.45469   V1 0.370922 1.33276 2.45469   V2 0.375926 1.35074 2.4 
+  N0 -0.495474 -0.854265 -0.157281   N1 -0.257047 -0.953562 -0.156989   N2 -0.234929 -0.871509 -0.430442 
+   txt003 
+STRI 
+  V0 0.711407 1.21126 2.4   V1 0.994 0.994 2.4   V2 0.98077 0.98077 2.45469 
+  N0 -0.4527 -0.780517 -0.43111   N1 -0.637936 -0.637936 -0.431366   N2 -0.698293 -0.698293 -0.157393 
+   txt003 
+STRI 
+  V0 0.98077 0.98077 2.45469   V1 0.701938 1.19514 2.45469   V2 0.711407 1.21126 2.4 
+  N0 -0.698293 -0.698293 -0.157393   N1 -0.495474 -0.854265 -0.157281   N2 -0.4527 -0.780517 -0.43111 
+   txt003 
+STRI 
+  V0 0.994 0.994 2.4   V1 1.21126 0.711407 2.4   V2 1.19514 0.701938 2.45469 
+  N0 -0.637936 -0.637936 -0.431366   N1 -0.780517 -0.4527 -0.43111   N2 -0.854265 -0.495474 -0.157281 
+   txt003 
+STRI 
+  V0 1.19514 0.701938 2.45469   V1 0.98077 0.98077 2.45469   V2 0.994 0.994 2.4 
+  N0 -0.854265 -0.495474 -0.157281   N1 -0.698293 -0.698293 -0.157393   N2 -0.637936 -0.637936 -0.431366 
+   txt003 
+STRI 
+  V0 1.21126 0.711407 2.4   V1 1.35074 0.375926 2.4   V2 1.33276 0.370922 2.45469 
+  N0 -0.780517 -0.4527 -0.43111   N1 -0.871509 -0.234929 -0.430442   N2 -0.953562 -0.257047 -0.156989 
+   txt003 
+STRI 
+  V0 1.33276 0.370922 2.45469   V1 1.19514 0.701938 2.45469   V2 1.21126 0.711407 2.4 
+  N0 -0.953562 -0.257047 -0.156989   N1 -0.854265 -0.495474 -0.157281   N2 -0.780517 -0.4527 -0.43111 
+   txt003 
+STRI 
+  V0 1.35074 0.375926 2.4   V1 1.4 0 2.4   V2 1.38137 0 2.45469 
+  N0 -0.871509 -0.234929 -0.430442   N1 -0.902861 7.30595e-17 -0.429934   N2 -0.987636 -9.89971e-17 -0.156768 
+   txt003 
+STRI 
+  V0 1.38137 0 2.45469   V1 1.33276 0.370922 2.45469   V2 1.35074 0.375926 2.4 
+  N0 -0.987636 -9.89971e-17 -0.156768   N1 -0.953562 -0.257047 -0.156989   N2 -0.871509 -0.234929 -0.430442 
+   txt003 
+STRI 
+  V0 0 1.38137 2.45469   V1 0.370922 1.33276 2.45469   V2 0.371699 1.33555 2.4875 
+  N0 0 -0.987636 -0.156768   N1 -0.257047 -0.953562 -0.156989   N2 -0.228972 -0.849414 0.475466 
+   txt003 
+STRI 
+  V0 0.371699 1.33555 2.4875   V1 0 1.38426 2.4875   V2 0 1.38137 2.45469 
+  N0 -0.228972 -0.849414 0.475466   N1 0 -0.880022 0.474933   N2 0 -0.987636 -0.156768 
+   txt003 
+STRI 
+  V0 0.370922 1.33276 2.45469   V1 0.701938 1.19514 2.45469   V2 0.703409 1.19764 2.4875 
+  N0 -0.257047 -0.953562 -0.156989   N1 -0.495474 -0.854265 -0.157281   N2 -0.441188 -0.760669 0.476167 
+   txt003 
+STRI 
+  V0 0.703409 1.19764 2.4875   V1 0.371699 1.33555 2.4875   V2 0.370922 1.33276 2.45469 
+  N0 -0.441188 -0.760669 0.476167   N1 -0.228972 -0.849414 0.475466   N2 -0.257047 -0.953562 -0.156989 
+   txt003 
+STRI 
+  V0 0.701938 1.19514 2.45469   V1 0.98077 0.98077 2.45469   V2 0.982824 0.982824 2.4875 
+  N0 -0.495474 -0.854265 -0.157281   N1 -0.698293 -0.698293 -0.157393   N2 -0.621695 -0.621695 0.476435 
+   txt003 
+STRI 
+  V0 0.982824 0.982824 2.4875   V1 0.703409 1.19764 2.4875   V2 0.701938 1.19514 2.45469 
+  N0 -0.621695 -0.621695 0.476435   N1 -0.441188 -0.760669 0.476167   N2 -0.495474 -0.854265 -0.157281 
+   txt003 
+STRI 
+  V0 0.98077 0.98077 2.45469   V1 1.19514 0.701938 2.45469   V2 1.19764 0.703409 2.4875 
+  N0 -0.698293 -0.698293 -0.157393   N1 -0.854265 -0.495474 -0.157281   N2 -0.760669 -0.441188 0.476167 
+   txt003 
+STRI 
+  V0 1.19764 0.703409 2.4875   V1 0.982824 0.982824 2.4875   V2 0.98077 0.98077 2.45469 
+  N0 -0.760669 -0.441188 0.476167   N1 -0.621695 -0.621695 0.476435   N2 -0.698293 -0.698293 -0.157393 
+   txt003 
+STRI 
+  V0 1.19514 0.701938 2.45469   V1 1.33276 0.370922 2.45469   V2 1.33555 0.371699 2.4875 
+  N0 -0.854265 -0.495474 -0.157281   N1 -0.953562 -0.257047 -0.156989   N2 -0.849414 -0.228972 0.475466 
+   txt003 
+STRI 
+  V0 1.33555 0.371699 2.4875   V1 1.19764 0.703409 2.4875   V2 1.19514 0.701938 2.45469 
+  N0 -0.849414 -0.228972 0.475466   N1 -0.760669 -0.441188 0.476167   N2 -0.854265 -0.495474 -0.157281 
+   txt003 
+STRI 
+  V0 1.33276 0.370922 2.45469   V1 1.38137 0 2.45469   V2 1.38426 0 2.4875 
+  N0 -0.953562 -0.257047 -0.156989   N1 -0.987636 -9.89971e-17 -0.156768   N2 -0.880022 -6.08179e-16 0.474933 
+   txt003 
+STRI 
+  V0 1.38426 0 2.4875   V1 1.33555 0.371699 2.4875   V2 1.33276 0.370922 2.45469 
+  N0 -0.880022 -6.08179e-16 0.474933   N1 -0.849414 -0.228972 0.475466   N2 -0.953562 -0.257047 -0.156989 
+   txt003 
+STRI 
+  V0 0 1.38426 2.4875   V1 0.371699 1.33555 2.4875   V2 0.376765 1.35376 2.49844 
+  N0 0 -0.880022 0.474933   N1 -0.228972 -0.849414 0.475466   N2 5.93089e-16 2.13636e-15 1 
+   txt003 
+STRI 
+  V0 0.376765 1.35376 2.49844   V1 0 1.40312 2.49844   V2 0 1.38426 2.4875 
+  N0 5.93089e-16 2.13636e-15 1   N1 -0 2.22045e-15 1   N2 0 -0.880022 0.474933 
+   txt003 
+STRI 
+  V0 0.371699 1.33555 2.4875   V1 0.703409 1.19764 2.4875   V2 0.712995 1.21396 2.49844 
+  N0 -0.228972 -0.849414 0.475466   N1 -0.441188 -0.760669 0.476167   N2 1.16933e-15 1.87966e-15 1 
+   txt003 
+STRI 
+  V0 0.712995 1.21396 2.49844   V1 0.376765 1.35376 2.49844   V2 0.371699 1.33555 2.4875 
+  N0 1.16933e-15 1.87966e-15 1   N1 5.93089e-16 2.13636e-15 1   N2 -0.228972 -0.849414 0.475466 
+   txt003 
+STRI 
+  V0 0.703409 1.19764 2.4875   V1 0.982824 0.982824 2.4875   V2 0.996219 0.996219 2.49844 
+  N0 -0.441188 -0.760669 0.476167   N1 -0.621695 -0.621695 0.476435   N2 1.67359e-15 1.4538e-15 1 
+   txt003 
+STRI 
+  V0 0.996219 0.996219 2.49844   V1 0.712995 1.21396 2.49844   V2 0.703409 1.19764 2.4875 
+  N0 1.67359e-15 1.4538e-15 1   N1 1.16933e-15 1.87966e-15 1   N2 -0.441188 -0.760669 0.476167 
+   txt003 
+STRI 
+  V0 0.982824 0.982824 2.4875   V1 1.19764 0.703409 2.4875   V2 1.21396 0.712995 2.49844 
+  N0 -0.621695 -0.621695 0.476435   N1 -0.760669 -0.441188 0.476167   N2 2.05298e-15 8.74229e-16 1 
+   txt003 
+STRI 
+  V0 1.21396 0.712995 2.49844   V1 0.996219 0.996219 2.49844   V2 0.982824 0.982824 2.4875 
+  N0 2.05298e-15 8.74229e-16 1   N1 1.67359e-15 1.4538e-15 1   N2 -0.621695 -0.621695 0.476435 
+   txt003 
+STRI 
+  V0 1.19764 0.703409 2.4875   V1 1.33555 0.371699 2.4875   V2 1.35376 0.376765 2.49844 
+  N0 -0.760669 -0.441188 0.476167   N1 -0.849414 -0.228972 0.475466   N2 2.25214e-15 1.77072e-16 1 
+   txt003 
+STRI 
+  V0 1.35376 0.376765 2.49844   V1 1.21396 0.712995 2.49844   V2 1.19764 0.703409 2.4875 
+  N0 2.25214e-15 1.77072e-16 1   N1 2.05298e-15 8.74229e-16 1   N2 -0.760669 -0.441188 0.476167 
+   txt003 
+STRI 
+  V0 1.33555 0.371699 2.4875   V1 1.38426 0 2.4875   V2 1.40312 0 2.49844 
+  N0 -0.849414 -0.228972 0.475466   N1 -0.880022 -6.08179e-16 0.474933   N2 2.22045e-15 -5.65179e-16 1 
+   txt003 
+STRI 
+  V0 1.40312 0 2.49844   V1 1.35376 0.376765 2.49844   V2 1.33555 0.371699 2.4875 
+  N0 2.22045e-15 -5.65179e-16 1   N1 2.25214e-15 1.77072e-16 1   N2 -0.849414 -0.228972 0.475466 
+   txt003 
+STRI 
+  V0 0 1.40312 2.49844   V1 0.376765 1.35376 2.49844   V2 0.384628 1.38201 2.4875 
+  N0 -0 2.22045e-15 1   N1 5.93089e-16 2.13636e-15 1   N2 0.14476 0.537012 0.831061 
+   txt003 
+STRI 
+  V0 0.384628 1.38201 2.4875   V1 0 1.43241 2.4875   V2 0 1.40312 2.49844 
+  N0 0.14476 0.537012 0.831061   N1 -0 0.556738 0.830688   N2 -0 2.22045e-15 1 
+   txt003 
+STRI 
+  V0 0.376765 1.35376 2.49844   V1 0.712995 1.21396 2.49844   V2 0.727875 1.2393 2.4875 
+  N0 5.93089e-16 2.13636e-15 1   N1 1.16933e-15 1.87966e-15 1   N2 0.278679 0.480481 0.83155 
+   txt003 
+STRI 
+  V0 0.727875 1.2393 2.4875   V1 0.384628 1.38201 2.4875   V2 0.376765 1.35376 2.49844 
+  N0 0.278679 0.480481 0.83155   N1 0.14476 0.537012 0.831061   N2 5.93089e-16 2.13636e-15 1 
+   txt003 
+STRI 
+  V0 0.712995 1.21396 2.49844   V1 0.996219 0.996219 2.49844   V2 1.01701 1.01701 2.4875 
+  N0 1.16933e-15 1.87966e-15 1   N1 1.67359e-15 1.4538e-15 1   N2 0.392564 0.392564 0.831737 
+   txt003 
+STRI 
+  V0 1.01701 1.01701 2.4875   V1 0.727875 1.2393 2.4875   V2 0.712995 1.21396 2.49844 
+  N0 0.392564 0.392564 0.831737   N1 0.278679 0.480481 0.83155   N2 1.16933e-15 1.87966e-15 1 
+   txt003 
+STRI 
+  V0 0.996219 0.996219 2.49844   V1 1.21396 0.712995 2.49844   V2 1.2393 0.727875 2.4875 
+  N0 1.67359e-15 1.4538e-15 1   N1 2.05298e-15 8.74229e-16 1   N2 0.480481 0.278679 0.83155 
+   txt003 
+STRI 
+  V0 1.2393 0.727875 2.4875   V1 1.01701 1.01701 2.4875   V2 0.996219 0.996219 2.49844 
+  N0 0.480481 0.278679 0.83155   N1 0.392564 0.392564 0.831737   N2 1.67359e-15 1.4538e-15 1 
+   txt003 
+STRI 
+  V0 1.21396 0.712995 2.49844   V1 1.35376 0.376765 2.49844   V2 1.38201 0.384628 2.4875 
+  N0 2.05298e-15 8.74229e-16 1   N1 2.25214e-15 1.77072e-16 1   N2 0.537012 0.14476 0.831061 
+   txt003 
+STRI 
+  V0 1.38201 0.384628 2.4875   V1 1.2393 0.727875 2.4875   V2 1.21396 0.712995 2.49844 
+  N0 0.537012 0.14476 0.831061   N1 0.480481 0.278679 0.83155   N2 2.05298e-15 8.74229e-16 1 
+   txt003 
+STRI 
+  V0 1.35376 0.376765 2.49844   V1 1.40312 0 2.49844   V2 1.43241 0 2.4875 
+  N0 2.25214e-15 1.77072e-16 1   N1 2.22045e-15 -5.65179e-16 1   N2 0.556738 -4.5989e-16 0.830688 
+   txt003 
+STRI 
+  V0 1.43241 0 2.4875   V1 1.38201 0.384628 2.4875   V2 1.35376 0.376765 2.49844 
+  N0 0.556738 -4.5989e-16 0.830688   N1 0.537012 0.14476 0.831061   N2 2.25214e-15 1.77072e-16 1 
+   txt003 
+STRI 
+  V0 0 1.43241 2.4875   V1 0.384628 1.38201 2.4875   V2 0.393796 1.41495 2.45469 
+  N0 -0 0.556738 0.830688   N1 0.14476 0.537012 0.831061   N2 0.203756 0.755869 0.622211 
+   txt003 
+STRI 
+  V0 0.393796 1.41495 2.45469   V1 0 1.46655 2.45469   V2 0 1.43241 2.4875 
+  N0 0.203756 0.755869 0.622211   N1 -0 0.783289 0.621658   N2 -0 0.556738 0.830688 
+   txt003 
+STRI 
+  V0 0.384628 1.38201 2.4875   V1 0.727875 1.2393 2.4875   V2 0.745225 1.26884 2.45469 
+  N0 0.14476 0.537012 0.831061   N1 0.278679 0.480481 0.83155   N2 0.39248 0.67669 0.622937 
+   txt003 
+STRI 
+  V0 0.745225 1.26884 2.45469   V1 0.393796 1.41495 2.45469   V2 0.384628 1.38201 2.4875 
+  N0 0.39248 0.67669 0.622937   N1 0.203756 0.755869 0.622211   N2 0.14476 0.537012 0.831061 
+   txt003 
+STRI 
+  V0 0.727875 1.2393 2.4875   V1 1.01701 1.01701 2.4875   V2 1.04125 1.04125 2.45469 
+  N0 0.278679 0.480481 0.83155   N1 0.392564 0.392564 0.831737   N2 0.552993 0.552993 0.623215 
+   txt003 
+STRI 
+  V0 1.04125 1.04125 2.45469   V1 0.745225 1.26884 2.45469   V2 0.727875 1.2393 2.4875 
+  N0 0.552993 0.552993 0.623215   N1 0.39248 0.67669 0.622937   N2 0.278679 0.480481 0.83155 
+   txt003 
+STRI 
+  V0 1.01701 1.01701 2.4875   V1 1.2393 0.727875 2.4875   V2 1.26884 0.745225 2.45469 
+  N0 0.392564 0.392564 0.831737   N1 0.480481 0.278679 0.83155   N2 0.67669 0.39248 0.622937 
+   txt003 
+STRI 
+  V0 1.26884 0.745225 2.45469   V1 1.04125 1.04125 2.45469   V2 1.01701 1.01701 2.4875 
+  N0 0.67669 0.39248 0.622937   N1 0.552993 0.552993 0.623215   N2 0.392564 0.392564 0.831737 
+   txt003 
+STRI 
+  V0 1.2393 0.727875 2.4875   V1 1.38201 0.384628 2.4875   V2 1.41495 0.393796 2.45469 
+  N0 0.480481 0.278679 0.83155   N1 0.537012 0.14476 0.831061   N2 0.755869 0.203756 0.622211 
+   txt003 
+STRI 
+  V0 1.41495 0.393796 2.45469   V1 1.26884 0.745225 2.45469   V2 1.2393 0.727875 2.4875 
+  N0 0.755869 0.203756 0.622211   N1 0.67669 0.39248 0.622937   N2 0.480481 0.278679 0.83155 
+   txt003 
+STRI 
+  V0 1.38201 0.384628 2.4875   V1 1.43241 0 2.4875   V2 1.46655 0 2.45469 
+  N0 0.537012 0.14476 0.831061   N1 0.556738 -4.5989e-16 0.830688   N2 0.783289 -1.94969e-16 0.621658 
+   txt003 
+STRI 
+  V0 1.46655 0 2.45469   V1 1.41495 0.393796 2.45469   V2 1.38201 0.384628 2.4875 
+  N0 0.783289 -1.94969e-16 0.621658   N1 0.755869 0.203756 0.622211   N2 0.537012 0.14476 0.831061 
+   txt003 
+STRI 
+  V0 0 1.46655 2.45469   V1 0.393796 1.41495 2.45469   V2 0.402778 1.44722 2.4 
+  N0 -0 0.783289 0.621658   N1 0.203756 0.755869 0.622211   N2 0.234929 0.871509 0.430442 
+   txt003 
+STRI 
+  V0 0.402778 1.44722 2.4   V1 0 1.5 2.4   V2 0 1.46655 2.45469 
+  N0 0.234929 0.871509 0.430442   N1 -0 0.902861 0.429934   N2 -0 0.783289 0.621658 
+   txt003 
+STRI 
+  V0 0.393796 1.41495 2.45469   V1 0.745225 1.26884 2.45469   V2 0.762222 1.29778 2.4 
+  N0 0.203756 0.755869 0.622211   N1 0.39248 0.67669 0.622937   N2 0.4527 0.780517 0.43111 
+   txt003 
+STRI 
+  V0 0.762222 1.29778 2.4   V1 0.402778 1.44722 2.4   V2 0.393796 1.41495 2.45469 
+  N0 0.4527 0.780517 0.43111   N1 0.234929 0.871509 0.430442   N2 0.203756 0.755869 0.622211 
+   txt003 
+STRI 
+  V0 0.745225 1.26884 2.45469   V1 1.04125 1.04125 2.45469   V2 1.065 1.065 2.4 
+  N0 0.39248 0.67669 0.622937   N1 0.552993 0.552993 0.623215   N2 0.637936 0.637936 0.431366 
+   txt003 
+STRI 
+  V0 1.065 1.065 2.4   V1 0.762222 1.29778 2.4   V2 0.745225 1.26884 2.45469 
+  N0 0.637936 0.637936 0.431366   N1 0.4527 0.780517 0.43111   N2 0.39248 0.67669 0.622937 
+   txt003 
+STRI 
+  V0 1.04125 1.04125 2.45469   V1 1.26884 0.745225 2.45469   V2 1.29778 0.762222 2.4 
+  N0 0.552993 0.552993 0.623215   N1 0.67669 0.39248 0.622937   N2 0.780517 0.4527 0.43111 
+   txt003 
+STRI 
+  V0 1.29778 0.762222 2.4   V1 1.065 1.065 2.4   V2 1.04125 1.04125 2.45469 
+  N0 0.780517 0.4527 0.43111   N1 0.637936 0.637936 0.431366   N2 0.552993 0.552993 0.623215 
+   txt003 
+STRI 
+  V0 1.26884 0.745225 2.45469   V1 1.41495 0.393796 2.45469   V2 1.44722 0.402778 2.4 
+  N0 0.67669 0.39248 0.622937   N1 0.755869 0.203756 0.622211   N2 0.871509 0.234929 0.430442 
+   txt003 
+STRI 
+  V0 1.44722 0.402778 2.4   V1 1.29778 0.762222 2.4   V2 1.26884 0.745225 2.45469 
+  N0 0.871509 0.234929 0.430442   N1 0.780517 0.4527 0.43111   N2 0.67669 0.39248 0.622937 
+   txt003 
+STRI 
+  V0 1.41495 0.393796 2.45469   V1 1.46655 0 2.45469   V2 1.5 0 2.4 
+  N0 0.755869 0.203756 0.622211   N1 0.783289 -1.94969e-16 0.621658   N2 0.902861 -6.81889e-17 0.429934 
+   txt003 
+STRI 
+  V0 1.5 0 2.4   V1 1.44722 0.402778 2.4   V2 1.41495 0.393796 2.45469 
+  N0 0.902861 -6.81889e-17 0.429934   N1 0.871509 0.234929 0.430442   N2 0.755869 0.203756 0.622211 
+   txt003 
+STRI 
+  V0 1.5 0 2.4   V1 1.44722 -0.402778 2.4   V2 1.56671 -0.436032 2.13785 
+  N0 0.902861 0 0.429934   N1 0.871509 -0.234929 0.430442   N2 0.875348 -0.235963 0.422003 
+   txt003 
+STRI 
+  V0 1.56671 -0.436032 2.13785   V1 1.62384 0 2.13785   V2 1.5 0 2.4 
+  N0 0.875348 -0.235963 0.422003   N1 0.906828 0 0.4215   N2 0.902861 0 0.429934 
+   txt003 
+STRI 
+  V0 1.44722 -0.402778 2.4   V1 1.29778 -0.762222 2.4   V2 1.40492 -0.825153 2.13785 
+  N0 0.871509 -0.234929 0.430442   N1 0.780517 -0.4527 0.43111   N2 0.783966 -0.4547 0.422664 
+   txt003 
+STRI 
+  V0 1.40492 -0.825153 2.13785   V1 1.56671 -0.436032 2.13785   V2 1.44722 -0.402778 2.4 
+  N0 0.783966 -0.4547 0.422664   N1 0.875348 -0.235963 0.422003   N2 0.871509 -0.234929 0.430442 
+   txt003 
+STRI 
+  V0 1.29778 -0.762222 2.4   V1 1.065 -1.065 2.4   V2 1.15293 -1.15293 2.13785 
+  N0 0.780517 -0.4527 0.43111   N1 0.637936 -0.637936 0.431366   N2 0.640758 -0.640758 0.422917 
+   txt003 
+STRI 
+  V0 1.15293 -1.15293 2.13785   V1 1.40492 -0.825153 2.13785   V2 1.29778 -0.762222 2.4 
+  N0 0.640758 -0.640758 0.422917   N1 0.783966 -0.4547 0.422664   N2 0.780517 -0.4527 0.43111 
+   txt003 
+STRI 
+  V0 1.065 -1.065 2.4   V1 0.762222 -1.29778 2.4   V2 0.825153 -1.40492 2.13785 
+  N0 0.637936 -0.637936 0.431366   N1 0.4527 -0.780517 0.43111   N2 0.4547 -0.783966 0.422664 
+   txt003 
+STRI 
+  V0 0.825153 -1.40492 2.13785   V1 1.15293 -1.15293 2.13785   V2 1.065 -1.065 2.4 
+  N0 0.4547 -0.783966 0.422664   N1 0.640758 -0.640758 0.422917   N2 0.637936 -0.637936 0.431366 
+   txt003 
+STRI 
+  V0 0.762222 -1.29778 2.4   V1 0.402778 -1.44722 2.4   V2 0.436032 -1.56671 2.13785 
+  N0 0.4527 -0.780517 0.43111   N1 0.234929 -0.871509 0.430442   N2 0.235963 -0.875348 0.422003 
+   txt003 
+STRI 
+  V0 0.436032 -1.56671 2.13785   V1 0.825153 -1.40492 2.13785   V2 0.762222 -1.29778 2.4 
+  N0 0.235963 -0.875348 0.422003   N1 0.4547 -0.783966 0.422664   N2 0.4527 -0.780517 0.43111 
+   txt003 
+STRI 
+  V0 0.402778 -1.44722 2.4   V1 0 -1.5 2.4   V2 2.22045e-16 -1.62384 2.13785 
+  N0 0.234929 -0.871509 0.430442   N1 -2.27296e-16 -0.902861 0.429934   N2 -2.05843e-16 -0.906828 0.4215 
+   txt003 
+STRI 
+  V0 2.22045e-16 -1.62384 2.13785   V1 0.436032 -1.56671 2.13785   V2 0.402778 -1.44722 2.4 
+  N0 -2.05843e-16 -0.906828 0.4215   N1 0.235963 -0.875348 0.422003   N2 0.234929 -0.871509 0.430442 
+   txt003 
+STRI 
+  V0 1.62384 0 2.13785   V1 1.56671 -0.436032 2.13785   V2 1.67949 -0.467421 1.87778 
+  N0 0.906828 0 0.4215   N1 0.875348 -0.235963 0.422003   N2 0.886771 -0.239043 0.395595 
+   txt003 
+STRI 
+  V0 1.67949 -0.467421 1.87778   V1 1.74074 0 1.87778   V2 1.62384 0 2.13785 
+  N0 0.886771 -0.239043 0.395595   N1 0.918633 0 0.395111   N2 0.906828 0 0.4215 
+   txt003 
+STRI 
+  V0 1.56671 -0.436032 2.13785   V1 1.40492 -0.825153 2.13785   V2 1.50606 -0.884554 1.87778 
+  N0 0.875348 -0.235963 0.422003   N1 0.783966 -0.4547 0.422664   N2 0.794229 -0.460653 0.39623 
+   txt003 
+STRI 
+  V0 1.50606 -0.884554 1.87778   V1 1.67949 -0.467421 1.87778   V2 1.56671 -0.436032 2.13785 
+  N0 0.794229 -0.460653 0.39623   N1 0.886771 -0.239043 0.395595   N2 0.875348 -0.235963 0.422003 
+   txt003 
+STRI 
+  V0 1.40492 -0.825153 2.13785   V1 1.15293 -1.15293 2.13785   V2 1.23593 -1.23593 1.87778 
+  N0 0.783966 -0.4547 0.422664   N1 0.640758 -0.640758 0.422917   N2 0.649156 -0.649156 0.396474 
+   txt003 
+STRI 
+  V0 1.23593 -1.23593 1.87778   V1 1.50606 -0.884554 1.87778   V2 1.40492 -0.825153 2.13785 
+  N0 0.649156 -0.649156 0.396474   N1 0.794229 -0.460653 0.39623   N2 0.783966 -0.4547 0.422664 
+   txt003 
+STRI 
+  V0 1.15293 -1.15293 2.13785   V1 0.825153 -1.40492 2.13785   V2 0.884554 -1.50606 1.87778 
+  N0 0.640758 -0.640758 0.422917   N1 0.4547 -0.783966 0.422664   N2 0.460653 -0.794229 0.39623 
+   txt003 
+STRI 
+  V0 0.884554 -1.50606 1.87778   V1 1.23593 -1.23593 1.87778   V2 1.15293 -1.15293 2.13785 
+  N0 0.460653 -0.794229 0.39623   N1 0.649156 -0.649156 0.396474   N2 0.640758 -0.640758 0.422917 
+   txt003 
+STRI 
+  V0 0.825153 -1.40492 2.13785   V1 0.436032 -1.56671 2.13785   V2 0.467421 -1.67949 1.87778 
+  N0 0.4547 -0.783966 0.422664   N1 0.235963 -0.875348 0.422003   N2 0.239043 -0.886771 0.395595 
+   txt003 
+STRI 
+  V0 0.467421 -1.67949 1.87778   V1 0.884554 -1.50606 1.87778   V2 0.825153 -1.40492 2.13785 
+  N0 0.239043 -0.886771 0.395595   N1 0.460653 -0.794229 0.39623   N2 0.4547 -0.783966 0.422664 
+   txt003 
+STRI 
+  V0 0.436032 -1.56671 2.13785   V1 2.22045e-16 -1.62384 2.13785   V2 0 -1.74074 1.87778 
+  N0 0.235963 -0.875348 0.422003   N1 -2.05843e-16 -0.906828 0.4215   N2 -1.79998e-16 -0.918633 0.395111 
+   txt003 
+STRI 
+  V0 0 -1.74074 1.87778   V1 0.467421 -1.67949 1.87778   V2 0.436032 -1.56671 2.13785 
+  N0 -1.79998e-16 -0.918633 0.395111   N1 0.239043 -0.886771 0.395595   N2 0.235963 -0.875348 0.422003 
+   txt003 
+STRI 
+  V0 1.74074 0 1.87778   V1 1.67949 -0.467421 1.87778   V2 1.77888 -0.495081 1.62188 
+  N0 0.918633 0 0.395111   N1 0.886771 -0.239043 0.395595   N2 0.90527 -0.244029 0.347757 
+   txt003 
+STRI 
+  V0 1.77888 -0.495081 1.62188   V1 1.84375 0 1.62188   V2 1.74074 0 1.87778 
+  N0 0.90527 -0.244029 0.347757   N1 0.937749 0 0.347314   N2 0.918633 0 0.395111 
+   txt003 
+STRI 
+  V0 1.67949 -0.467421 1.87778   V1 1.50606 -0.884554 1.87778   V2 1.59519 -0.936898 1.62188 
+  N0 0.886771 -0.239043 0.395595   N1 0.794229 -0.460653 0.39623   N2 0.810853 -0.470295 0.34834 
+   txt003 
+STRI 
+  V0 1.59519 -0.936898 1.62188   V1 1.77888 -0.495081 1.62188   V2 1.67949 -0.467421 1.87778 
+  N0 0.810853 -0.470295 0.34834   N1 0.90527 -0.244029 0.347757   N2 0.886771 -0.239043 0.395595 
+   txt003 
+STRI 
+  V0 1.50606 -0.884554 1.87778   V1 1.23593 -1.23593 1.87778   V2 1.30906 -1.30906 1.62188 
+  N0 0.794229 -0.460653 0.39623   N1 0.649156 -0.649156 0.396474   N2 0.662761 -0.662761 0.348563 
+   txt003 
+STRI 
+  V0 1.30906 -1.30906 1.62188   V1 1.59519 -0.936898 1.62188   V2 1.50606 -0.884554 1.87778 
+  N0 0.662761 -0.662761 0.348563   N1 0.810853 -0.470295 0.34834   N2 0.794229 -0.460653 0.39623 
+   txt003 
+STRI 
+  V0 1.23593 -1.23593 1.87778   V1 0.884554 -1.50606 1.87778   V2 0.936898 -1.59519 1.62187 
+  N0 0.649156 -0.649156 0.396474   N1 0.460653 -0.794229 0.39623   N2 0.470295 -0.810853 0.34834 
+   txt003 
+STRI 
+  V0 0.936898 -1.59519 1.62187   V1 1.30906 -1.30906 1.62188   V2 1.23593 -1.23593 1.87778 
+  N0 0.470295 -0.810853 0.34834   N1 0.662761 -0.662761 0.348563   N2 0.649156 -0.649156 0.396474 
+   txt003 
+STRI 
+  V0 0.884554 -1.50606 1.87778   V1 0.467421 -1.67949 1.87778   V2 0.495081 -1.77888 1.62187 
+  N0 0.460653 -0.794229 0.39623   N1 0.239043 -0.886771 0.395595   N2 0.244029 -0.90527 0.347757 
+   txt003 
+STRI 
+  V0 0.495081 -1.77888 1.62187   V1 0.936898 -1.59519 1.62187   V2 0.884554 -1.50606 1.87778 
+  N0 0.244029 -0.90527 0.347757   N1 0.470295 -0.810853 0.34834   N2 0.460653 -0.794229 0.39623 
+   txt003 
+STRI 
+  V0 0.467421 -1.67949 1.87778   V1 0 -1.74074 1.87778   V2 0 -1.84375 1.62187 
+  N0 0.239043 -0.886771 0.395595   N1 -1.79998e-16 -0.918633 0.395111   N2 -1.49384e-16 -0.937749 0.347314 
+   txt003 
+STRI 
+  V0 0 -1.84375 1.62187   V1 0.495081 -1.77888 1.62187   V2 0.467421 -1.67949 1.87778 
+  N0 -1.49384e-16 -0.937749 0.347314   N1 0.244029 -0.90527 0.347757   N2 0.239043 -0.886771 0.395595 
+   txt003 
+STRI 
+  V0 1.84375 0 1.62188   V1 1.77888 -0.495081 1.62188   V2 1.85816 -0.517147 1.37222 
+  N0 0.937749 0 0.347314   N1 0.90527 -0.244029 0.347757   N2 0.929073 -0.250446 0.272213 
+   txt003 
+STRI 
+  V0 1.85816 -0.517147 1.37222   V1 1.92593 0 1.37222   V2 1.84375 0 1.62188 
+  N0 0.929073 -0.250446 0.272213   N1 0.96234 0 0.271848   N2 0.937749 0 0.347314 
+   txt003 
+STRI 
+  V0 1.77888 -0.495081 1.62188   V1 1.59519 -0.936898 1.62188   V2 1.66628 -0.978656 1.37222 
+  N0 0.90527 -0.244029 0.347757   N1 0.810853 -0.470295 0.34834   N2 0.832247 -0.482704 0.272693 
+   txt003 
+STRI 
+  V0 1.66628 -0.978656 1.37222   V1 1.85816 -0.517147 1.37222   V2 1.77888 -0.495081 1.62188 
+  N0 0.832247 -0.482704 0.272693   N1 0.929073 -0.250446 0.272213   N2 0.90527 -0.244029 0.347757 
+   txt003 
+STRI 
+  V0 1.59519 -0.936898 1.62188   V1 1.30906 -1.30906 1.62188   V2 1.36741 -1.36741 1.37222 
+  N0 0.810853 -0.470295 0.34834   N1 0.662761 -0.662761 0.348563   N2 0.680271 -0.680271 0.272877 
+   txt003 
+STRI 
+  V0 1.36741 -1.36741 1.37222   V1 1.66628 -0.978656 1.37222   V2 1.59519 -0.936898 1.62188 
+  N0 0.680271 -0.680271 0.272877   N1 0.832247 -0.482704 0.272693   N2 0.810853 -0.470295 0.34834 
+   txt003 
+STRI 
+  V0 1.30906 -1.30906 1.62188   V1 0.936898 -1.59519 1.62187   V2 0.978656 -1.66628 1.37222 
+  N0 0.662761 -0.662761 0.348563   N1 0.470295 -0.810853 0.34834   N2 0.482704 -0.832247 0.272693 
+   txt003 
+STRI 
+  V0 0.978656 -1.66628 1.37222   V1 1.36741 -1.36741 1.37222   V2 1.30906 -1.30906 1.62188 
+  N0 0.482704 -0.832247 0.272693   N1 0.680271 -0.680271 0.272877   N2 0.662761 -0.662761 0.348563 
+   txt003 
+STRI 
+  V0 0.936898 -1.59519 1.62187   V1 0.495081 -1.77888 1.62187   V2 0.517147 -1.85816 1.37222 
+  N0 0.470295 -0.810853 0.34834   N1 0.244029 -0.90527 0.347757   N2 0.250446 -0.929073 0.272213 
+   txt003 
+STRI 
+  V0 0.517147 -1.85816 1.37222   V1 0.978656 -1.66628 1.37222   V2 0.936898 -1.59519 1.62187 
+  N0 0.250446 -0.929073 0.272213   N1 0.482704 -0.832247 0.272693   N2 0.470295 -0.810853 0.34834 
+   txt003 
+STRI 
+  V0 0.495081 -1.77888 1.62187   V1 0 -1.84375 1.62187   V2 2.22045e-16 -1.92593 1.37222 
+  N0 0.244029 -0.90527 0.347757   N1 -1.49384e-16 -0.937749 0.347314   N2 -1.11936e-16 -0.96234 0.271848 
+   txt003 
+STRI 
+  V0 2.22045e-16 -1.92593 1.37222   V1 0.517147 -1.85816 1.37222   V2 0.495081 -1.77888 1.62187 
+  N0 -1.11936e-16 -0.96234 0.271848   N1 0.250446 -0.929073 0.272213   N2 0.244029 -0.90527 0.347757 
+   txt003 
+STRI 
+  V0 1.92593 0 1.37222   V1 1.85816 -0.517147 1.37222   V2 1.91065 -0.531754 1.1309 
+  N0 0.96234 0 0.271848   N1 0.929073 -0.250446 0.272213   N2 0.953145 -0.256935 0.159686 
+   txt003 
+STRI 
+  V0 1.91065 -0.531754 1.1309   V1 1.98032 0 1.1309   V2 1.92593 0 1.37222 
+  N0 0.953145 -0.256935 0.159686   N1 0.987204 0 0.15946   N2 0.96234 0 0.271848 
+   txt003 
+STRI 
+  V0 1.85816 -0.517147 1.37222   V1 1.66628 -0.978656 1.37222   V2 1.71335 -1.0063 1.1309 
+  N0 0.929073 -0.250446 0.272213   N1 0.832247 -0.482704 0.272693   N2 0.853889 -0.495256 0.159982 
+   txt003 
+STRI 
+  V0 1.71335 -1.0063 1.1309   V1 1.91065 -0.531754 1.1309   V2 1.85816 -0.517147 1.37222 
+  N0 0.853889 -0.495256 0.159982   N1 0.953145 -0.256935 0.159686   N2 0.929073 -0.250446 0.272213 
+   txt003 
+STRI 
+  V0 1.66628 -0.978656 1.37222   V1 1.36741 -1.36741 1.37222   V2 1.40603 -1.40603 1.1309 
+  N0 0.832247 -0.482704 0.272693   N1 0.680271 -0.680271 0.272877   N2 0.697986 -0.697986 0.160096 
+   txt003 
+STRI 
+  V0 1.40603 -1.40603 1.1309   V1 1.71335 -1.0063 1.1309   V2 1.66628 -0.978656 1.37222 
+  N0 0.697986 -0.697986 0.160096   N1 0.853889 -0.495256 0.159982   N2 0.832247 -0.482704 0.272693 
+   txt003 
+STRI 
+  V0 1.36741 -1.36741 1.37222   V1 0.978656 -1.66628 1.37222   V2 1.0063 -1.71335 1.1309 
+  N0 0.680271 -0.680271 0.272877   N1 0.482704 -0.832247 0.272693   N2 0.495256 -0.853889 0.159982 
+   txt003 
+STRI 
+  V0 1.0063 -1.71335 1.1309   V1 1.40603 -1.40603 1.1309   V2 1.36741 -1.36741 1.37222 
+  N0 0.495256 -0.853889 0.159982   N1 0.697986 -0.697986 0.160096   N2 0.680271 -0.680271 0.272877 
+   txt003 
+STRI 
+  V0 0.978656 -1.66628 1.37222   V1 0.517147 -1.85816 1.37222   V2 0.531754 -1.91065 1.1309 
+  N0 0.482704 -0.832247 0.272693   N1 0.250446 -0.929073 0.272213   N2 0.256935 -0.953145 0.159686 
+   txt003 
+STRI 
+  V0 0.531754 -1.91065 1.1309   V1 1.0063 -1.71335 1.1309   V2 0.978656 -1.66628 1.37222 
+  N0 0.256935 -0.953145 0.159686   N1 0.495256 -0.853889 0.159982   N2 0.482704 -0.832247 0.272693 
+   txt003 
+STRI 
+  V0 0.517147 -1.85816 1.37222   V1 2.22045e-16 -1.92593 1.37222   V2 -2.22045e-16 -1.98032 1.1309 
+  N0 0.250446 -0.929073 0.272213   N1 -1.11936e-16 -0.96234 0.271848   N2 -6.38555e-17 -0.987204 0.15946 
+   txt003 
+STRI 
+  V0 -2.22045e-16 -1.98032 1.1309   V1 0.531754 -1.91065 1.1309   V2 0.517147 -1.85816 1.37222 
+  N0 -6.38555e-17 -0.987204 0.15946   N1 0.256935 -0.953145 0.159686   N2 0.250446 -0.929073 0.272213 
+   txt003 
+STRI 
+  V0 1.98032 0 1.1309   V1 1.91065 -0.531754 1.1309   V2 1.92963 -0.537037 0.9 
+  N0 0.987204 0 0.15946   N1 0.953145 -0.256935 0.159686   N2 0.965535 -0.260275 5.17854e-17 
+   txt003 
+STRI 
+  V0 1.92963 -0.537037 0.9   V1 2 0 0.9   V2 1.98032 0 1.1309 
+  N0 0.965535 -0.260275 5.17854e-17   N1 1 0 0   N2 0.987204 0 0.15946 
+   txt003 
+STRI 
+  V0 1.91065 -0.531754 1.1309   V1 1.71335 -1.0063 1.1309   V2 1.73037 -1.0163 0.9 
+  N0 0.953145 -0.256935 0.159686   N1 0.853889 -0.495256 0.159982   N2 0.865031 -0.501718 1.36587e-16 
+   txt003 
+STRI 
+  V0 1.73037 -1.0163 0.9   V1 1.92963 -0.537037 0.9   V2 1.91065 -0.531754 1.1309 
+  N0 0.865031 -0.501718 1.36587e-16   N1 0.965535 -0.260275 5.17854e-17   N2 0.953145 -0.256935 0.159686 
+   txt003 
+STRI 
+  V0 1.71335 -1.0063 1.1309   V1 1.40603 -1.40603 1.1309   V2 1.42 -1.42 0.9 
+  N0 0.853889 -0.495256 0.159982   N1 0.697986 -0.697986 0.160096   N2 0.707107 -0.707107 1.74455e-16 
+   txt003 
+STRI 
+  V0 1.42 -1.42 0.9   V1 1.73037 -1.0163 0.9   V2 1.71335 -1.0063 1.1309 
+  N0 0.707107 -0.707107 1.74455e-16   N1 0.865031 -0.501718 1.36587e-16   N2 0.853889 -0.495256 0.159982 
+   txt003 
+STRI 
+  V0 1.40603 -1.40603 1.1309   V1 1.0063 -1.71335 1.1309   V2 1.0163 -1.73037 0.9 
+  N0 0.697986 -0.697986 0.160096   N1 0.495256 -0.853889 0.159982   N2 0.501718 -0.865031 1.36587e-16 
+   txt003 
+STRI 
+  V0 1.0163 -1.73037 0.9   V1 1.42 -1.42 0.9   V2 1.40603 -1.40603 1.1309 
+  N0 0.501718 -0.865031 1.36587e-16   N1 0.707107 -0.707107 1.74455e-16   N2 0.697986 -0.697986 0.160096 
+   txt003 
+STRI 
+  V0 1.0063 -1.71335 1.1309   V1 0.531754 -1.91065 1.1309   V2 0.537037 -1.92963 0.9 
+  N0 0.495256 -0.853889 0.159982   N1 0.256935 -0.953145 0.159686   N2 0.260275 -0.965535 5.17854e-17 
+   txt003 
+STRI 
+  V0 0.537037 -1.92963 0.9   V1 1.0163 -1.73037 0.9   V2 1.0063 -1.71335 1.1309 
+  N0 0.260275 -0.965535 5.17854e-17   N1 0.501718 -0.865031 1.36587e-16   N2 0.495256 -0.853889 0.159982 
+   txt003 
+STRI 
+  V0 0.531754 -1.91065 1.1309   V1 -2.22045e-16 -1.98032 1.1309   V2 0 -2 0.9 
+  N0 0.256935 -0.953145 0.159686   N1 -6.38555e-17 -0.987204 0.15946   N2 0 -1 -0 
+   txt003 
+STRI 
+  V0 0 -2 0.9   V1 0.537037 -1.92963 0.9   V2 0.531754 -1.91065 1.1309 
+  N0 0 -1 -0   N1 0.260275 -0.965535 5.17854e-17   N2 0.256935 -0.953145 0.159686 
+   txt003 
+STRI 
+  V0 0 -1.5 2.4   V1 -0.402778 -1.44722 2.4   V2 -0.436032 -1.56671 2.13785 
+  N0 0 -0.902861 0.429934   N1 -0.234929 -0.871509 0.430442   N2 -0.235963 -0.875348 0.422003 
+   txt003 
+STRI 
+  V0 -0.436032 -1.56671 2.13785   V1 0 -1.62384 2.13785   V2 0 -1.5 2.4 
+  N0 -0.235963 -0.875348 0.422003   N1 0 -0.906828 0.4215   N2 0 -0.902861 0.429934 
+   txt003 
+STRI 
+  V0 -0.402778 -1.44722 2.4   V1 -0.762222 -1.29778 2.4   V2 -0.825153 -1.40492 2.13785 
+  N0 -0.234929 -0.871509 0.430442   N1 -0.4527 -0.780517 0.43111   N2 -0.4547 -0.783966 0.422664 
+   txt003 
+STRI 
+  V0 -0.825153 -1.40492 2.13785   V1 -0.436032 -1.56671 2.13785   V2 -0.402778 -1.44722 2.4 
+  N0 -0.4547 -0.783966 0.422664   N1 -0.235963 -0.875348 0.422003   N2 -0.234929 -0.871509 0.430442 
+   txt003 
+STRI 
+  V0 -0.762222 -1.29778 2.4   V1 -1.065 -1.065 2.4   V2 -1.15293 -1.15293 2.13785 
+  N0 -0.4527 -0.780517 0.43111   N1 -0.637936 -0.637936 0.431366   N2 -0.640758 -0.640758 0.422917 
+   txt003 
+STRI 
+  V0 -1.15293 -1.15293 2.13785   V1 -0.825153 -1.40492 2.13785   V2 -0.762222 -1.29778 2.4 
+  N0 -0.640758 -0.640758 0.422917   N1 -0.4547 -0.783966 0.422664   N2 -0.4527 -0.780517 0.43111 
+   txt003 
+STRI 
+  V0 -1.065 -1.065 2.4   V1 -1.29778 -0.762222 2.4   V2 -1.40492 -0.825153 2.13785 
+  N0 -0.637936 -0.637936 0.431366   N1 -0.780517 -0.4527 0.43111   N2 -0.783966 -0.4547 0.422664 
+   txt003 
+STRI 
+  V0 -1.40492 -0.825153 2.13785   V1 -1.15293 -1.15293 2.13785   V2 -1.065 -1.065 2.4 
+  N0 -0.783966 -0.4547 0.422664   N1 -0.640758 -0.640758 0.422917   N2 -0.637936 -0.637936 0.431366 
+   txt003 
+STRI 
+  V0 -1.29778 -0.762222 2.4   V1 -1.44722 -0.402778 2.4   V2 -1.56671 -0.436032 2.13785 
+  N0 -0.780517 -0.4527 0.43111   N1 -0.871509 -0.234929 0.430442   N2 -0.875348 -0.235963 0.422003 
+   txt003 
+STRI 
+  V0 -1.56671 -0.436032 2.13785   V1 -1.40492 -0.825153 2.13785   V2 -1.29778 -0.762222 2.4 
+  N0 -0.875348 -0.235963 0.422003   N1 -0.783966 -0.4547 0.422664   N2 -0.780517 -0.4527 0.43111 
+   txt003 
+STRI 
+  V0 -1.44722 -0.402778 2.4   V1 -1.5 0 2.4   V2 -1.62384 -2.22045e-16 2.13785 
+  N0 -0.871509 -0.234929 0.430442   N1 -0.902861 2.27296e-16 0.429934   N2 -0.906828 2.05843e-16 0.4215 
+   txt003 
+STRI 
+  V0 -1.62384 -2.22045e-16 2.13785   V1 -1.56671 -0.436032 2.13785   V2 -1.44722 -0.402778 2.4 
+  N0 -0.906828 2.05843e-16 0.4215   N1 -0.875348 -0.235963 0.422003   N2 -0.871509 -0.234929 0.430442 
+   txt003 
+STRI 
+  V0 0 -1.62384 2.13785   V1 -0.436032 -1.56671 2.13785   V2 -0.467421 -1.67949 1.87778 
+  N0 0 -0.906828 0.4215   N1 -0.235963 -0.875348 0.422003   N2 -0.239043 -0.886771 0.395595 
+   txt003 
+STRI 
+  V0 -0.467421 -1.67949 1.87778   V1 0 -1.74074 1.87778   V2 0 -1.62384 2.13785 
+  N0 -0.239043 -0.886771 0.395595   N1 0 -0.918633 0.395111   N2 0 -0.906828 0.4215 
+   txt003 
+STRI 
+  V0 -0.436032 -1.56671 2.13785   V1 -0.825153 -1.40492 2.13785   V2 -0.884554 -1.50606 1.87778 
+  N0 -0.235963 -0.875348 0.422003   N1 -0.4547 -0.783966 0.422664   N2 -0.460653 -0.794229 0.39623 
+   txt003 
+STRI 
+  V0 -0.884554 -1.50606 1.87778   V1 -0.467421 -1.67949 1.87778   V2 -0.436032 -1.56671 2.13785 
+  N0 -0.460653 -0.794229 0.39623   N1 -0.239043 -0.886771 0.395595   N2 -0.235963 -0.875348 0.422003 
+   txt003 
+STRI 
+  V0 -0.825153 -1.40492 2.13785   V1 -1.15293 -1.15293 2.13785   V2 -1.23593 -1.23593 1.87778 
+  N0 -0.4547 -0.783966 0.422664   N1 -0.640758 -0.640758 0.422917   N2 -0.649156 -0.649156 0.396474 
+   txt003 
+STRI 
+  V0 -1.23593 -1.23593 1.87778   V1 -0.884554 -1.50606 1.87778   V2 -0.825153 -1.40492 2.13785 
+  N0 -0.649156 -0.649156 0.396474   N1 -0.460653 -0.794229 0.39623   N2 -0.4547 -0.783966 0.422664 
+   txt003 
+STRI 
+  V0 -1.15293 -1.15293 2.13785   V1 -1.40492 -0.825153 2.13785   V2 -1.50606 -0.884554 1.87778 
+  N0 -0.640758 -0.640758 0.422917   N1 -0.783966 -0.4547 0.422664   N2 -0.794229 -0.460653 0.39623 
+   txt003 
+STRI 
+  V0 -1.50606 -0.884554 1.87778   V1 -1.23593 -1.23593 1.87778   V2 -1.15293 -1.15293 2.13785 
+  N0 -0.794229 -0.460653 0.39623   N1 -0.649156 -0.649156 0.396474   N2 -0.640758 -0.640758 0.422917 
+   txt003 
+STRI 
+  V0 -1.40492 -0.825153 2.13785   V1 -1.56671 -0.436032 2.13785   V2 -1.67949 -0.467421 1.87778 
+  N0 -0.783966 -0.4547 0.422664   N1 -0.875348 -0.235963 0.422003   N2 -0.886771 -0.239043 0.395595 
+   txt003 
+STRI 
+  V0 -1.67949 -0.467421 1.87778   V1 -1.50606 -0.884554 1.87778   V2 -1.40492 -0.825153 2.13785 
+  N0 -0.886771 -0.239043 0.395595   N1 -0.794229 -0.460653 0.39623   N2 -0.783966 -0.4547 0.422664 
+   txt003 
+STRI 
+  V0 -1.56671 -0.436032 2.13785   V1 -1.62384 -2.22045e-16 2.13785   V2 -1.74074 0 1.87778 
+  N0 -0.875348 -0.235963 0.422003   N1 -0.906828 2.05843e-16 0.4215   N2 -0.918633 1.79998e-16 0.395111 
+   txt003 
+STRI 
+  V0 -1.74074 0 1.87778   V1 -1.67949 -0.467421 1.87778   V2 -1.56671 -0.436032 2.13785 
+  N0 -0.918633 1.79998e-16 0.395111   N1 -0.886771 -0.239043 0.395595   N2 -0.875348 -0.235963 0.422003 
+   txt003 
+STRI 
+  V0 0 -1.74074 1.87778   V1 -0.467421 -1.67949 1.87778   V2 -0.495081 -1.77888 1.62188 
+  N0 0 -0.918633 0.395111   N1 -0.239043 -0.886771 0.395595   N2 -0.244029 -0.90527 0.347757 
+   txt003 
+STRI 
+  V0 -0.495081 -1.77888 1.62188   V1 0 -1.84375 1.62188   V2 0 -1.74074 1.87778 
+  N0 -0.244029 -0.90527 0.347757   N1 0 -0.937749 0.347314   N2 0 -0.918633 0.395111 
+   txt003 
+STRI 
+  V0 -0.467421 -1.67949 1.87778   V1 -0.884554 -1.50606 1.87778   V2 -0.936898 -1.59519 1.62188 
+  N0 -0.239043 -0.886771 0.395595   N1 -0.460653 -0.794229 0.39623   N2 -0.470295 -0.810853 0.34834 
+   txt003 
+STRI 
+  V0 -0.936898 -1.59519 1.62188   V1 -0.495081 -1.77888 1.62188   V2 -0.467421 -1.67949 1.87778 
+  N0 -0.470295 -0.810853 0.34834   N1 -0.244029 -0.90527 0.347757   N2 -0.239043 -0.886771 0.395595 
+   txt003 
+STRI 
+  V0 -0.884554 -1.50606 1.87778   V1 -1.23593 -1.23593 1.87778   V2 -1.30906 -1.30906 1.62188 
+  N0 -0.460653 -0.794229 0.39623   N1 -0.649156 -0.649156 0.396474   N2 -0.662761 -0.662761 0.348563 
+   txt003 
+STRI 
+  V0 -1.30906 -1.30906 1.62188   V1 -0.936898 -1.59519 1.62188   V2 -0.884554 -1.50606 1.87778 
+  N0 -0.662761 -0.662761 0.348563   N1 -0.470295 -0.810853 0.34834   N2 -0.460653 -0.794229 0.39623 
+   txt003 
+STRI 
+  V0 -1.23593 -1.23593 1.87778   V1 -1.50606 -0.884554 1.87778   V2 -1.59519 -0.936898 1.62187 
+  N0 -0.649156 -0.649156 0.396474   N1 -0.794229 -0.460653 0.39623   N2 -0.810853 -0.470295 0.34834 
+   txt003 
+STRI 
+  V0 -1.59519 -0.936898 1.62187   V1 -1.30906 -1.30906 1.62188   V2 -1.23593 -1.23593 1.87778 
+  N0 -0.810853 -0.470295 0.34834   N1 -0.662761 -0.662761 0.348563   N2 -0.649156 -0.649156 0.396474 
+   txt003 
+STRI 
+  V0 -1.50606 -0.884554 1.87778   V1 -1.67949 -0.467421 1.87778   V2 -1.77888 -0.495081 1.62187 
+  N0 -0.794229 -0.460653 0.39623   N1 -0.886771 -0.239043 0.395595   N2 -0.90527 -0.244029 0.347757 
+   txt003 
+STRI 
+  V0 -1.77888 -0.495081 1.62187   V1 -1.59519 -0.936898 1.62187   V2 -1.50606 -0.884554 1.87778 
+  N0 -0.90527 -0.244029 0.347757   N1 -0.810853 -0.470295 0.34834   N2 -0.794229 -0.460653 0.39623 
+   txt003 
+STRI 
+  V0 -1.67949 -0.467421 1.87778   V1 -1.74074 0 1.87778   V2 -1.84375 0 1.62187 
+  N0 -0.886771 -0.239043 0.395595   N1 -0.918633 1.79998e-16 0.395111   N2 -0.937749 1.49384e-16 0.347314 
+   txt003 
+STRI 
+  V0 -1.84375 0 1.62187   V1 -1.77888 -0.495081 1.62187   V2 -1.67949 -0.467421 1.87778 
+  N0 -0.937749 1.49384e-16 0.347314   N1 -0.90527 -0.244029 0.347757   N2 -0.886771 -0.239043 0.395595 
+   txt003 
+STRI 
+  V0 0 -1.84375 1.62188   V1 -0.495081 -1.77888 1.62188   V2 -0.517147 -1.85816 1.37222 
+  N0 0 -0.937749 0.347314   N1 -0.244029 -0.90527 0.347757   N2 -0.250446 -0.929073 0.272213 
+   txt003 
+STRI 
+  V0 -0.517147 -1.85816 1.37222   V1 0 -1.92593 1.37222   V2 0 -1.84375 1.62188 
+  N0 -0.250446 -0.929073 0.272213   N1 0 -0.96234 0.271848   N2 0 -0.937749 0.347314 
+   txt003 
+STRI 
+  V0 -0.495081 -1.77888 1.62188   V1 -0.936898 -1.59519 1.62188   V2 -0.978656 -1.66628 1.37222 
+  N0 -0.244029 -0.90527 0.347757   N1 -0.470295 -0.810853 0.34834   N2 -0.482704 -0.832247 0.272693 
+   txt003 
+STRI 
+  V0 -0.978656 -1.66628 1.37222   V1 -0.517147 -1.85816 1.37222   V2 -0.495081 -1.77888 1.62188 
+  N0 -0.482704 -0.832247 0.272693   N1 -0.250446 -0.929073 0.272213   N2 -0.244029 -0.90527 0.347757 
+   txt003 
+STRI 
+  V0 -0.936898 -1.59519 1.62188   V1 -1.30906 -1.30906 1.62188   V2 -1.36741 -1.36741 1.37222 
+  N0 -0.470295 -0.810853 0.34834   N1 -0.662761 -0.662761 0.348563   N2 -0.680271 -0.680271 0.272877 
+   txt003 
+STRI 
+  V0 -1.36741 -1.36741 1.37222   V1 -0.978656 -1.66628 1.37222   V2 -0.936898 -1.59519 1.62188 
+  N0 -0.680271 -0.680271 0.272877   N1 -0.482704 -0.832247 0.272693   N2 -0.470295 -0.810853 0.34834 
+   txt003 
+STRI 
+  V0 -1.30906 -1.30906 1.62188   V1 -1.59519 -0.936898 1.62187   V2 -1.66628 -0.978656 1.37222 
+  N0 -0.662761 -0.662761 0.348563   N1 -0.810853 -0.470295 0.34834   N2 -0.832247 -0.482704 0.272693 
+   txt003 
+STRI 
+  V0 -1.66628 -0.978656 1.37222   V1 -1.36741 -1.36741 1.37222   V2 -1.30906 -1.30906 1.62188 
+  N0 -0.832247 -0.482704 0.272693   N1 -0.680271 -0.680271 0.272877   N2 -0.662761 -0.662761 0.348563 
+   txt003 
+STRI 
+  V0 -1.59519 -0.936898 1.62187   V1 -1.77888 -0.495081 1.62187   V2 -1.85816 -0.517147 1.37222 
+  N0 -0.810853 -0.470295 0.34834   N1 -0.90527 -0.244029 0.347757   N2 -0.929073 -0.250446 0.272213 
+   txt003 
+STRI 
+  V0 -1.85816 -0.517147 1.37222   V1 -1.66628 -0.978656 1.37222   V2 -1.59519 -0.936898 1.62187 
+  N0 -0.929073 -0.250446 0.272213   N1 -0.832247 -0.482704 0.272693   N2 -0.810853 -0.470295 0.34834 
+   txt003 
+STRI 
+  V0 -1.77888 -0.495081 1.62187   V1 -1.84375 0 1.62187   V2 -1.92593 -2.22045e-16 1.37222 
+  N0 -0.90527 -0.244029 0.347757   N1 -0.937749 1.49384e-16 0.347314   N2 -0.96234 1.11936e-16 0.271848 
+   txt003 
+STRI 
+  V0 -1.92593 -2.22045e-16 1.37222   V1 -1.85816 -0.517147 1.37222   V2 -1.77888 -0.495081 1.62187 
+  N0 -0.96234 1.11936e-16 0.271848   N1 -0.929073 -0.250446 0.272213   N2 -0.90527 -0.244029 0.347757 
+   txt003 
+STRI 
+  V0 0 -1.92593 1.37222   V1 -0.517147 -1.85816 1.37222   V2 -0.531754 -1.91065 1.1309 
+  N0 0 -0.96234 0.271848   N1 -0.250446 -0.929073 0.272213   N2 -0.256935 -0.953145 0.159686 
+   txt003 
+STRI 
+  V0 -0.531754 -1.91065 1.1309   V1 0 -1.98032 1.1309   V2 0 -1.92593 1.37222 
+  N0 -0.256935 -0.953145 0.159686   N1 0 -0.987204 0.15946   N2 0 -0.96234 0.271848 
+   txt003 
+STRI 
+  V0 -0.517147 -1.85816 1.37222   V1 -0.978656 -1.66628 1.37222   V2 -1.0063 -1.71335 1.1309 
+  N0 -0.250446 -0.929073 0.272213   N1 -0.482704 -0.832247 0.272693   N2 -0.495256 -0.853889 0.159982 
+   txt003 
+STRI 
+  V0 -1.0063 -1.71335 1.1309   V1 -0.531754 -1.91065 1.1309   V2 -0.517147 -1.85816 1.37222 
+  N0 -0.495256 -0.853889 0.159982   N1 -0.256935 -0.953145 0.159686   N2 -0.250446 -0.929073 0.272213 
+   txt003 
+STRI 
+  V0 -0.978656 -1.66628 1.37222   V1 -1.36741 -1.36741 1.37222   V2 -1.40603 -1.40603 1.1309 
+  N0 -0.482704 -0.832247 0.272693   N1 -0.680271 -0.680271 0.272877   N2 -0.697986 -0.697986 0.160096 
+   txt003 
+STRI 
+  V0 -1.40603 -1.40603 1.1309   V1 -1.0063 -1.71335 1.1309   V2 -0.978656 -1.66628 1.37222 
+  N0 -0.697986 -0.697986 0.160096   N1 -0.495256 -0.853889 0.159982   N2 -0.482704 -0.832247 0.272693 
+   txt003 
+STRI 
+  V0 -1.36741 -1.36741 1.37222   V1 -1.66628 -0.978656 1.37222   V2 -1.71335 -1.0063 1.1309 
+  N0 -0.680271 -0.680271 0.272877   N1 -0.832247 -0.482704 0.272693   N2 -0.853889 -0.495256 0.159982 
+   txt003 
+STRI 
+  V0 -1.71335 -1.0063 1.1309   V1 -1.40603 -1.40603 1.1309   V2 -1.36741 -1.36741 1.37222 
+  N0 -0.853889 -0.495256 0.159982   N1 -0.697986 -0.697986 0.160096   N2 -0.680271 -0.680271 0.272877 
+   txt003 
+STRI 
+  V0 -1.66628 -0.978656 1.37222   V1 -1.85816 -0.517147 1.37222   V2 -1.91065 -0.531754 1.1309 
+  N0 -0.832247 -0.482704 0.272693   N1 -0.929073 -0.250446 0.272213   N2 -0.953145 -0.256935 0.159686 
+   txt003 
+STRI 
+  V0 -1.91065 -0.531754 1.1309   V1 -1.71335 -1.0063 1.1309   V2 -1.66628 -0.978656 1.37222 
+  N0 -0.953145 -0.256935 0.159686   N1 -0.853889 -0.495256 0.159982   N2 -0.832247 -0.482704 0.272693 
+   txt003 
+STRI 
+  V0 -1.85816 -0.517147 1.37222   V1 -1.92593 -2.22045e-16 1.37222   V2 -1.98032 2.22045e-16 1.1309 
+  N0 -0.929073 -0.250446 0.272213   N1 -0.96234 1.11936e-16 0.271848   N2 -0.987204 6.38555e-17 0.15946 
+   txt003 
+STRI 
+  V0 -1.98032 2.22045e-16 1.1309   V1 -1.91065 -0.531754 1.1309   V2 -1.85816 -0.517147 1.37222 
+  N0 -0.987204 6.38555e-17 0.15946   N1 -0.953145 -0.256935 0.159686   N2 -0.929073 -0.250446 0.272213 
+   txt003 
+STRI 
+  V0 0 -1.98032 1.1309   V1 -0.531754 -1.91065 1.1309   V2 -0.537037 -1.92963 0.9 
+  N0 0 -0.987204 0.15946   N1 -0.256935 -0.953145 0.159686   N2 -0.260275 -0.965535 5.17854e-17 
+   txt003 
+STRI 
+  V0 -0.537037 -1.92963 0.9   V1 0 -2 0.9   V2 0 -1.98032 1.1309 
+  N0 -0.260275 -0.965535 5.17854e-17   N1 -0 -1 -0   N2 0 -0.987204 0.15946 
+   txt003 
+STRI 
+  V0 -0.531754 -1.91065 1.1309   V1 -1.0063 -1.71335 1.1309   V2 -1.0163 -1.73037 0.9 
+  N0 -0.256935 -0.953145 0.159686   N1 -0.495256 -0.853889 0.159982   N2 -0.501718 -0.865031 1.36587e-16 
+   txt003 
+STRI 
+  V0 -1.0163 -1.73037 0.9   V1 -0.537037 -1.92963 0.9   V2 -0.531754 -1.91065 1.1309 
+  N0 -0.501718 -0.865031 1.36587e-16   N1 -0.260275 -0.965535 5.17854e-17   N2 -0.256935 -0.953145 0.159686 
+   txt003 
+STRI 
+  V0 -1.0063 -1.71335 1.1309   V1 -1.40603 -1.40603 1.1309   V2 -1.42 -1.42 0.9 
+  N0 -0.495256 -0.853889 0.159982   N1 -0.697986 -0.697986 0.160096   N2 -0.707107 -0.707107 1.74455e-16 
+   txt003 
+STRI 
+  V0 -1.42 -1.42 0.9   V1 -1.0163 -1.73037 0.9   V2 -1.0063 -1.71335 1.1309 
+  N0 -0.707107 -0.707107 1.74455e-16   N1 -0.501718 -0.865031 1.36587e-16   N2 -0.495256 -0.853889 0.159982 
+   txt003 
+STRI 
+  V0 -1.40603 -1.40603 1.1309   V1 -1.71335 -1.0063 1.1309   V2 -1.73037 -1.0163 0.9 
+  N0 -0.697986 -0.697986 0.160096   N1 -0.853889 -0.495256 0.159982   N2 -0.865031 -0.501718 1.36587e-16 
+   txt003 
+STRI 
+  V0 -1.73037 -1.0163 0.9   V1 -1.42 -1.42 0.9   V2 -1.40603 -1.40603 1.1309 
+  N0 -0.865031 -0.501718 1.36587e-16   N1 -0.707107 -0.707107 1.74455e-16   N2 -0.697986 -0.697986 0.160096 
+   txt003 
+STRI 
+  V0 -1.71335 -1.0063 1.1309   V1 -1.91065 -0.531754 1.1309   V2 -1.92963 -0.537037 0.9 
+  N0 -0.853889 -0.495256 0.159982   N1 -0.953145 -0.256935 0.159686   N2 -0.965535 -0.260275 5.17854e-17 
+   txt003 
+STRI 
+  V0 -1.92963 -0.537037 0.9   V1 -1.73037 -1.0163 0.9   V2 -1.71335 -1.0063 1.1309 
+  N0 -0.965535 -0.260275 5.17854e-17   N1 -0.865031 -0.501718 1.36587e-16   N2 -0.853889 -0.495256 0.159982 
+   txt003 
+STRI 
+  V0 -1.91065 -0.531754 1.1309   V1 -1.98032 2.22045e-16 1.1309   V2 -2 0 0.9 
+  N0 -0.953145 -0.256935 0.159686   N1 -0.987204 6.38555e-17 0.15946   N2 -1 0 0 
+   txt003 
+STRI 
+  V0 -2 0 0.9   V1 -1.92963 -0.537037 0.9   V2 -1.91065 -0.531754 1.1309 
+  N0 -1 0 0   N1 -0.965535 -0.260275 5.17854e-17   N2 -0.953145 -0.256935 0.159686 
+   txt003 
+STRI 
+  V0 -1.5 0 2.4   V1 -1.44722 0.402778 2.4   V2 -1.56671 0.436032 2.13785 
+  N0 -0.902861 0 0.429934   N1 -0.871509 0.234929 0.430442   N2 -0.875348 0.235963 0.422003 
+   txt003 
+STRI 
+  V0 -1.56671 0.436032 2.13785   V1 -1.62384 0 2.13785   V2 -1.5 0 2.4 
+  N0 -0.875348 0.235963 0.422003   N1 -0.906828 0 0.4215   N2 -0.902861 0 0.429934 
+   txt003 
+STRI 
+  V0 -1.44722 0.402778 2.4   V1 -1.29778 0.762222 2.4   V2 -1.40492 0.825153 2.13785 
+  N0 -0.871509 0.234929 0.430442   N1 -0.780517 0.4527 0.43111   N2 -0.783966 0.4547 0.422664 
+   txt003 
+STRI 
+  V0 -1.40492 0.825153 2.13785   V1 -1.56671 0.436032 2.13785   V2 -1.44722 0.402778 2.4 
+  N0 -0.783966 0.4547 0.422664   N1 -0.875348 0.235963 0.422003   N2 -0.871509 0.234929 0.430442 
+   txt003 
+STRI 
+  V0 -1.29778 0.762222 2.4   V1 -1.065 1.065 2.4   V2 -1.15293 1.15293 2.13785 
+  N0 -0.780517 0.4527 0.43111   N1 -0.637936 0.637936 0.431366   N2 -0.640758 0.640758 0.422917 
+   txt003 
+STRI 
+  V0 -1.15293 1.15293 2.13785   V1 -1.40492 0.825153 2.13785   V2 -1.29778 0.762222 2.4 
+  N0 -0.640758 0.640758 0.422917   N1 -0.783966 0.4547 0.422664   N2 -0.780517 0.4527 0.43111 
+   txt003 
+STRI 
+  V0 -1.065 1.065 2.4   V1 -0.762222 1.29778 2.4   V2 -0.825153 1.40492 2.13785 
+  N0 -0.637936 0.637936 0.431366   N1 -0.4527 0.780517 0.43111   N2 -0.4547 0.783966 0.422664 
+   txt003 
+STRI 
+  V0 -0.825153 1.40492 2.13785   V1 -1.15293 1.15293 2.13785   V2 -1.065 1.065 2.4 
+  N0 -0.4547 0.783966 0.422664   N1 -0.640758 0.640758 0.422917   N2 -0.637936 0.637936 0.431366 
+   txt003 
+STRI 
+  V0 -0.762222 1.29778 2.4   V1 -0.402778 1.44722 2.4   V2 -0.436032 1.56671 2.13785 
+  N0 -0.4527 0.780517 0.43111   N1 -0.234929 0.871509 0.430442   N2 -0.235963 0.875348 0.422003 
+   txt003 
+STRI 
+  V0 -0.436032 1.56671 2.13785   V1 -0.825153 1.40492 2.13785   V2 -0.762222 1.29778 2.4 
+  N0 -0.235963 0.875348 0.422003   N1 -0.4547 0.783966 0.422664   N2 -0.4527 0.780517 0.43111 
+   txt003 
+STRI 
+  V0 -0.402778 1.44722 2.4   V1 0 1.5 2.4   V2 -2.22045e-16 1.62384 2.13785 
+  N0 -0.234929 0.871509 0.430442   N1 2.27296e-16 0.902861 0.429934   N2 2.05843e-16 0.906828 0.4215 
+   txt003 
+STRI 
+  V0 -2.22045e-16 1.62384 2.13785   V1 -0.436032 1.56671 2.13785   V2 -0.402778 1.44722 2.4 
+  N0 2.05843e-16 0.906828 0.4215   N1 -0.235963 0.875348 0.422003   N2 -0.234929 0.871509 0.430442 
+   txt003 
+STRI 
+  V0 -1.62384 0 2.13785   V1 -1.56671 0.436032 2.13785   V2 -1.67949 0.467421 1.87778 
+  N0 -0.906828 0 0.4215   N1 -0.875348 0.235963 0.422003   N2 -0.886771 0.239043 0.395595 
+   txt003 
+STRI 
+  V0 -1.67949 0.467421 1.87778   V1 -1.74074 0 1.87778   V2 -1.62384 0 2.13785 
+  N0 -0.886771 0.239043 0.395595   N1 -0.918633 0 0.395111   N2 -0.906828 0 0.4215 
+   txt003 
+STRI 
+  V0 -1.56671 0.436032 2.13785   V1 -1.40492 0.825153 2.13785   V2 -1.50606 0.884554 1.87778 
+  N0 -0.875348 0.235963 0.422003   N1 -0.783966 0.4547 0.422664   N2 -0.794229 0.460653 0.39623 
+   txt003 
+STRI 
+  V0 -1.50606 0.884554 1.87778   V1 -1.67949 0.467421 1.87778   V2 -1.56671 0.436032 2.13785 
+  N0 -0.794229 0.460653 0.39623   N1 -0.886771 0.239043 0.395595   N2 -0.875348 0.235963 0.422003 
+   txt003 
+STRI 
+  V0 -1.40492 0.825153 2.13785   V1 -1.15293 1.15293 2.13785   V2 -1.23593 1.23593 1.87778 
+  N0 -0.783966 0.4547 0.422664   N1 -0.640758 0.640758 0.422917   N2 -0.649156 0.649156 0.396474 
+   txt003 
+STRI 
+  V0 -1.23593 1.23593 1.87778   V1 -1.50606 0.884554 1.87778   V2 -1.40492 0.825153 2.13785 
+  N0 -0.649156 0.649156 0.396474   N1 -0.794229 0.460653 0.39623   N2 -0.783966 0.4547 0.422664 
+   txt003 
+STRI 
+  V0 -1.15293 1.15293 2.13785   V1 -0.825153 1.40492 2.13785   V2 -0.884554 1.50606 1.87778 
+  N0 -0.640758 0.640758 0.422917   N1 -0.4547 0.783966 0.422664   N2 -0.460653 0.794229 0.39623 
+   txt003 
+STRI 
+  V0 -0.884554 1.50606 1.87778   V1 -1.23593 1.23593 1.87778   V2 -1.15293 1.15293 2.13785 
+  N0 -0.460653 0.794229 0.39623   N1 -0.649156 0.649156 0.396474   N2 -0.640758 0.640758 0.422917 
+   txt003 
+STRI 
+  V0 -0.825153 1.40492 2.13785   V1 -0.436032 1.56671 2.13785   V2 -0.467421 1.67949 1.87778 
+  N0 -0.4547 0.783966 0.422664   N1 -0.235963 0.875348 0.422003   N2 -0.239043 0.886771 0.395595 
+   txt003 
+STRI 
+  V0 -0.467421 1.67949 1.87778   V1 -0.884554 1.50606 1.87778   V2 -0.825153 1.40492 2.13785 
+  N0 -0.239043 0.886771 0.395595   N1 -0.460653 0.794229 0.39623   N2 -0.4547 0.783966 0.422664 
+   txt003 
+STRI 
+  V0 -0.436032 1.56671 2.13785   V1 -2.22045e-16 1.62384 2.13785   V2 0 1.74074 1.87778 
+  N0 -0.235963 0.875348 0.422003   N1 2.05843e-16 0.906828 0.4215   N2 1.79998e-16 0.918633 0.395111 
+   txt003 
+STRI 
+  V0 0 1.74074 1.87778   V1 -0.467421 1.67949 1.87778   V2 -0.436032 1.56671 2.13785 
+  N0 1.79998e-16 0.918633 0.395111   N1 -0.239043 0.886771 0.395595   N2 -0.235963 0.875348 0.422003 
+   txt003 
+STRI 
+  V0 -1.74074 0 1.87778   V1 -1.67949 0.467421 1.87778   V2 -1.77888 0.495081 1.62188 
+  N0 -0.918633 0 0.395111   N1 -0.886771 0.239043 0.395595   N2 -0.90527 0.244029 0.347757 
+   txt003 
+STRI 
+  V0 -1.77888 0.495081 1.62188   V1 -1.84375 0 1.62188   V2 -1.74074 0 1.87778 
+  N0 -0.90527 0.244029 0.347757   N1 -0.937749 0 0.347314   N2 -0.918633 0 0.395111 
+   txt003 
+STRI 
+  V0 -1.67949 0.467421 1.87778   V1 -1.50606 0.884554 1.87778   V2 -1.59519 0.936898 1.62188 
+  N0 -0.886771 0.239043 0.395595   N1 -0.794229 0.460653 0.39623   N2 -0.810853 0.470295 0.34834 
+   txt003 
+STRI 
+  V0 -1.59519 0.936898 1.62188   V1 -1.77888 0.495081 1.62188   V2 -1.67949 0.467421 1.87778 
+  N0 -0.810853 0.470295 0.34834   N1 -0.90527 0.244029 0.347757   N2 -0.886771 0.239043 0.395595 
+   txt003 
+STRI 
+  V0 -1.50606 0.884554 1.87778   V1 -1.23593 1.23593 1.87778   V2 -1.30906 1.30906 1.62188 
+  N0 -0.794229 0.460653 0.39623   N1 -0.649156 0.649156 0.396474   N2 -0.662761 0.662761 0.348563 
+   txt003 
+STRI 
+  V0 -1.30906 1.30906 1.62188   V1 -1.59519 0.936898 1.62188   V2 -1.50606 0.884554 1.87778 
+  N0 -0.662761 0.662761 0.348563   N1 -0.810853 0.470295 0.34834   N2 -0.794229 0.460653 0.39623 
+   txt003 
+STRI 
+  V0 -1.23593 1.23593 1.87778   V1 -0.884554 1.50606 1.87778   V2 -0.936898 1.59519 1.62187 
+  N0 -0.649156 0.649156 0.396474   N1 -0.460653 0.794229 0.39623   N2 -0.470295 0.810853 0.34834 
+   txt003 
+STRI 
+  V0 -0.936898 1.59519 1.62187   V1 -1.30906 1.30906 1.62188   V2 -1.23593 1.23593 1.87778 
+  N0 -0.470295 0.810853 0.34834   N1 -0.662761 0.662761 0.348563   N2 -0.649156 0.649156 0.396474 
+   txt003 
+STRI 
+  V0 -0.884554 1.50606 1.87778   V1 -0.467421 1.67949 1.87778   V2 -0.495081 1.77888 1.62187 
+  N0 -0.460653 0.794229 0.39623   N1 -0.239043 0.886771 0.395595   N2 -0.244029 0.90527 0.347757 
+   txt003 
+STRI 
+  V0 -0.495081 1.77888 1.62187   V1 -0.936898 1.59519 1.62187   V2 -0.884554 1.50606 1.87778 
+  N0 -0.244029 0.90527 0.347757   N1 -0.470295 0.810853 0.34834   N2 -0.460653 0.794229 0.39623 
+   txt003 
+STRI 
+  V0 -0.467421 1.67949 1.87778   V1 0 1.74074 1.87778   V2 0 1.84375 1.62187 
+  N0 -0.239043 0.886771 0.395595   N1 1.79998e-16 0.918633 0.395111   N2 1.49384e-16 0.937749 0.347314 
+   txt003 
+STRI 
+  V0 0 1.84375 1.62187   V1 -0.495081 1.77888 1.62187   V2 -0.467421 1.67949 1.87778 
+  N0 1.49384e-16 0.937749 0.347314   N1 -0.244029 0.90527 0.347757   N2 -0.239043 0.886771 0.395595 
+   txt003 
+STRI 
+  V0 -1.84375 0 1.62188   V1 -1.77888 0.495081 1.62188   V2 -1.85816 0.517147 1.37222 
+  N0 -0.937749 0 0.347314   N1 -0.90527 0.244029 0.347757   N2 -0.929073 0.250446 0.272213 
+   txt003 
+STRI 
+  V0 -1.85816 0.517147 1.37222   V1 -1.92593 0 1.37222   V2 -1.84375 0 1.62188 
+  N0 -0.929073 0.250446 0.272213   N1 -0.96234 0 0.271848   N2 -0.937749 0 0.347314 
+   txt003 
+STRI 
+  V0 -1.77888 0.495081 1.62188   V1 -1.59519 0.936898 1.62188   V2 -1.66628 0.978656 1.37222 
+  N0 -0.90527 0.244029 0.347757   N1 -0.810853 0.470295 0.34834   N2 -0.832247 0.482704 0.272693 
+   txt003 
+STRI 
+  V0 -1.66628 0.978656 1.37222   V1 -1.85816 0.517147 1.37222   V2 -1.77888 0.495081 1.62188 
+  N0 -0.832247 0.482704 0.272693   N1 -0.929073 0.250446 0.272213   N2 -0.90527 0.244029 0.347757 
+   txt003 
+STRI 
+  V0 -1.59519 0.936898 1.62188   V1 -1.30906 1.30906 1.62188   V2 -1.36741 1.36741 1.37222 
+  N0 -0.810853 0.470295 0.34834   N1 -0.662761 0.662761 0.348563   N2 -0.680271 0.680271 0.272877 
+   txt003 
+STRI 
+  V0 -1.36741 1.36741 1.37222   V1 -1.66628 0.978656 1.37222   V2 -1.59519 0.936898 1.62188 
+  N0 -0.680271 0.680271 0.272877   N1 -0.832247 0.482704 0.272693   N2 -0.810853 0.470295 0.34834 
+   txt003 
+STRI 
+  V0 -1.30906 1.30906 1.62188   V1 -0.936898 1.59519 1.62187   V2 -0.978656 1.66628 1.37222 
+  N0 -0.662761 0.662761 0.348563   N1 -0.470295 0.810853 0.34834   N2 -0.482704 0.832247 0.272693 
+   txt003 
+STRI 
+  V0 -0.978656 1.66628 1.37222   V1 -1.36741 1.36741 1.37222   V2 -1.30906 1.30906 1.62188 
+  N0 -0.482704 0.832247 0.272693   N1 -0.680271 0.680271 0.272877   N2 -0.662761 0.662761 0.348563 
+   txt003 
+STRI 
+  V0 -0.936898 1.59519 1.62187   V1 -0.495081 1.77888 1.62187   V2 -0.517147 1.85816 1.37222 
+  N0 -0.470295 0.810853 0.34834   N1 -0.244029 0.90527 0.347757   N2 -0.250446 0.929073 0.272213 
+   txt003 
+STRI 
+  V0 -0.517147 1.85816 1.37222   V1 -0.978656 1.66628 1.37222   V2 -0.936898 1.59519 1.62187 
+  N0 -0.250446 0.929073 0.272213   N1 -0.482704 0.832247 0.272693   N2 -0.470295 0.810853 0.34834 
+   txt003 
+STRI 
+  V0 -0.495081 1.77888 1.62187   V1 0 1.84375 1.62187   V2 -2.22045e-16 1.92593 1.37222 
+  N0 -0.244029 0.90527 0.347757   N1 1.49384e-16 0.937749 0.347314   N2 1.11936e-16 0.96234 0.271848 
+   txt003 
+STRI 
+  V0 -2.22045e-16 1.92593 1.37222   V1 -0.517147 1.85816 1.37222   V2 -0.495081 1.77888 1.62187 
+  N0 1.11936e-16 0.96234 0.271848   N1 -0.250446 0.929073 0.272213   N2 -0.244029 0.90527 0.347757 
+   txt003 
+STRI 
+  V0 -1.92593 0 1.37222   V1 -1.85816 0.517147 1.37222   V2 -1.91065 0.531754 1.1309 
+  N0 -0.96234 0 0.271848   N1 -0.929073 0.250446 0.272213   N2 -0.953145 0.256935 0.159686 
+   txt003 
+STRI 
+  V0 -1.91065 0.531754 1.1309   V1 -1.98032 0 1.1309   V2 -1.92593 0 1.37222 
+  N0 -0.953145 0.256935 0.159686   N1 -0.987204 0 0.15946   N2 -0.96234 0 0.271848 
+   txt003 
+STRI 
+  V0 -1.85816 0.517147 1.37222   V1 -1.66628 0.978656 1.37222   V2 -1.71335 1.0063 1.1309 
+  N0 -0.929073 0.250446 0.272213   N1 -0.832247 0.482704 0.272693   N2 -0.853889 0.495256 0.159982 
+   txt003 
+STRI 
+  V0 -1.71335 1.0063 1.1309   V1 -1.91065 0.531754 1.1309   V2 -1.85816 0.517147 1.37222 
+  N0 -0.853889 0.495256 0.159982   N1 -0.953145 0.256935 0.159686   N2 -0.929073 0.250446 0.272213 
+   txt003 
+STRI 
+  V0 -1.66628 0.978656 1.37222   V1 -1.36741 1.36741 1.37222   V2 -1.40603 1.40603 1.1309 
+  N0 -0.832247 0.482704 0.272693   N1 -0.680271 0.680271 0.272877   N2 -0.697986 0.697986 0.160096 
+   txt003 
+STRI 
+  V0 -1.40603 1.40603 1.1309   V1 -1.71335 1.0063 1.1309   V2 -1.66628 0.978656 1.37222 
+  N0 -0.697986 0.697986 0.160096   N1 -0.853889 0.495256 0.159982   N2 -0.832247 0.482704 0.272693 
+   txt003 
+STRI 
+  V0 -1.36741 1.36741 1.37222   V1 -0.978656 1.66628 1.37222   V2 -1.0063 1.71335 1.1309 
+  N0 -0.680271 0.680271 0.272877   N1 -0.482704 0.832247 0.272693   N2 -0.495256 0.853889 0.159982 
+   txt003 
+STRI 
+  V0 -1.0063 1.71335 1.1309   V1 -1.40603 1.40603 1.1309   V2 -1.36741 1.36741 1.37222 
+  N0 -0.495256 0.853889 0.159982   N1 -0.697986 0.697986 0.160096   N2 -0.680271 0.680271 0.272877 
+   txt003 
+STRI 
+  V0 -0.978656 1.66628 1.37222   V1 -0.517147 1.85816 1.37222   V2 -0.531754 1.91065 1.1309 
+  N0 -0.482704 0.832247 0.272693   N1 -0.250446 0.929073 0.272213   N2 -0.256935 0.953145 0.159686 
+   txt003 
+STRI 
+  V0 -0.531754 1.91065 1.1309   V1 -1.0063 1.71335 1.1309   V2 -0.978656 1.66628 1.37222 
+  N0 -0.256935 0.953145 0.159686   N1 -0.495256 0.853889 0.159982   N2 -0.482704 0.832247 0.272693 
+   txt003 
+STRI 
+  V0 -0.517147 1.85816 1.37222   V1 -2.22045e-16 1.92593 1.37222   V2 2.22045e-16 1.98032 1.1309 
+  N0 -0.250446 0.929073 0.272213   N1 1.11936e-16 0.96234 0.271848   N2 6.38555e-17 0.987204 0.15946 
+   txt003 
+STRI 
+  V0 2.22045e-16 1.98032 1.1309   V1 -0.531754 1.91065 1.1309   V2 -0.517147 1.85816 1.37222 
+  N0 6.38555e-17 0.987204 0.15946   N1 -0.256935 0.953145 0.159686   N2 -0.250446 0.929073 0.272213 
+   txt003 
+STRI 
+  V0 -1.98032 0 1.1309   V1 -1.91065 0.531754 1.1309   V2 -1.92963 0.537037 0.9 
+  N0 -0.987204 0 0.15946   N1 -0.953145 0.256935 0.159686   N2 -0.965535 0.260275 5.17854e-17 
+   txt003 
+STRI 
+  V0 -1.92963 0.537037 0.9   V1 -2 0 0.9   V2 -1.98032 0 1.1309 
+  N0 -0.965535 0.260275 5.17854e-17   N1 -1 0 0   N2 -0.987204 0 0.15946 
+   txt003 
+STRI 
+  V0 -1.91065 0.531754 1.1309   V1 -1.71335 1.0063 1.1309   V2 -1.73037 1.0163 0.9 
+  N0 -0.953145 0.256935 0.159686   N1 -0.853889 0.495256 0.159982   N2 -0.865031 0.501718 1.36587e-16 
+   txt003 
+STRI 
+  V0 -1.73037 1.0163 0.9   V1 -1.92963 0.537037 0.9   V2 -1.91065 0.531754 1.1309 
+  N0 -0.865031 0.501718 1.36587e-16   N1 -0.965535 0.260275 5.17854e-17   N2 -0.953145 0.256935 0.159686 
+   txt003 
+STRI 
+  V0 -1.71335 1.0063 1.1309   V1 -1.40603 1.40603 1.1309   V2 -1.42 1.42 0.9 
+  N0 -0.853889 0.495256 0.159982   N1 -0.697986 0.697986 0.160096   N2 -0.707107 0.707107 1.74455e-16 
+   txt003 
+STRI 
+  V0 -1.42 1.42 0.9   V1 -1.73037 1.0163 0.9   V2 -1.71335 1.0063 1.1309 
+  N0 -0.707107 0.707107 1.74455e-16   N1 -0.865031 0.501718 1.36587e-16   N2 -0.853889 0.495256 0.159982 
+   txt003 
+STRI 
+  V0 -1.40603 1.40603 1.1309   V1 -1.0063 1.71335 1.1309   V2 -1.0163 1.73037 0.9 
+  N0 -0.697986 0.697986 0.160096   N1 -0.495256 0.853889 0.159982   N2 -0.501718 0.865031 1.36587e-16 
+   txt003 
+STRI 
+  V0 -1.0163 1.73037 0.9   V1 -1.42 1.42 0.9   V2 -1.40603 1.40603 1.1309 
+  N0 -0.501718 0.865031 1.36587e-16   N1 -0.707107 0.707107 1.74455e-16   N2 -0.697986 0.697986 0.160096 
+   txt003 
+STRI 
+  V0 -1.0063 1.71335 1.1309   V1 -0.531754 1.91065 1.1309   V2 -0.537037 1.92963 0.9 
+  N0 -0.495256 0.853889 0.159982   N1 -0.256935 0.953145 0.159686   N2 -0.260275 0.965535 5.17854e-17 
+   txt003 
+STRI 
+  V0 -0.537037 1.92963 0.9   V1 -1.0163 1.73037 0.9   V2 -1.0063 1.71335 1.1309 
+  N0 -0.260275 0.965535 5.17854e-17   N1 -0.501718 0.865031 1.36587e-16   N2 -0.495256 0.853889 0.159982 
+   txt003 
+STRI 
+  V0 -0.531754 1.91065 1.1309   V1 2.22045e-16 1.98032 1.1309   V2 0 2 0.9 
+  N0 -0.256935 0.953145 0.159686   N1 6.38555e-17 0.987204 0.15946   N2 0 1 0 
+   txt003 
+STRI 
+  V0 0 2 0.9   V1 -0.537037 1.92963 0.9   V2 -0.531754 1.91065 1.1309 
+  N0 0 1 0   N1 -0.260275 0.965535 5.17854e-17   N2 -0.256935 0.953145 0.159686 
+   txt003 
+STRI 
+  V0 0 1.5 2.4   V1 0.402778 1.44722 2.4   V2 0.436032 1.56671 2.13785 
+  N0 -0 0.902861 0.429934   N1 0.234929 0.871509 0.430442   N2 0.235963 0.875348 0.422003 
+   txt003 
+STRI 
+  V0 0.436032 1.56671 2.13785   V1 0 1.62384 2.13785   V2 0 1.5 2.4 
+  N0 0.235963 0.875348 0.422003   N1 -0 0.906828 0.4215   N2 -0 0.902861 0.429934 
+   txt003 
+STRI 
+  V0 0.402778 1.44722 2.4   V1 0.762222 1.29778 2.4   V2 0.825153 1.40492 2.13785 
+  N0 0.234929 0.871509 0.430442   N1 0.4527 0.780517 0.43111   N2 0.4547 0.783966 0.422664 
+   txt003 
+STRI 
+  V0 0.825153 1.40492 2.13785   V1 0.436032 1.56671 2.13785   V2 0.402778 1.44722 2.4 
+  N0 0.4547 0.783966 0.422664   N1 0.235963 0.875348 0.422003   N2 0.234929 0.871509 0.430442 
+   txt003 
+STRI 
+  V0 0.762222 1.29778 2.4   V1 1.065 1.065 2.4   V2 1.15293 1.15293 2.13785 
+  N0 0.4527 0.780517 0.43111   N1 0.637936 0.637936 0.431366   N2 0.640758 0.640758 0.422917 
+   txt003 
+STRI 
+  V0 1.15293 1.15293 2.13785   V1 0.825153 1.40492 2.13785   V2 0.762222 1.29778 2.4 
+  N0 0.640758 0.640758 0.422917   N1 0.4547 0.783966 0.422664   N2 0.4527 0.780517 0.43111 
+   txt003 
+STRI 
+  V0 1.065 1.065 2.4   V1 1.29778 0.762222 2.4   V2 1.40492 0.825153 2.13785 
+  N0 0.637936 0.637936 0.431366   N1 0.780517 0.4527 0.43111   N2 0.783966 0.4547 0.422664 
+   txt003 
+STRI 
+  V0 1.40492 0.825153 2.13785   V1 1.15293 1.15293 2.13785   V2 1.065 1.065 2.4 
+  N0 0.783966 0.4547 0.422664   N1 0.640758 0.640758 0.422917   N2 0.637936 0.637936 0.431366 
+   txt003 
+STRI 
+  V0 1.29778 0.762222 2.4   V1 1.44722 0.402778 2.4   V2 1.56671 0.436032 2.13785 
+  N0 0.780517 0.4527 0.43111   N1 0.871509 0.234929 0.430442   N2 0.875348 0.235963 0.422003 
+   txt003 
+STRI 
+  V0 1.56671 0.436032 2.13785   V1 1.40492 0.825153 2.13785   V2 1.29778 0.762222 2.4 
+  N0 0.875348 0.235963 0.422003   N1 0.783966 0.4547 0.422664   N2 0.780517 0.4527 0.43111 
+   txt003 
+STRI 
+  V0 1.44722 0.402778 2.4   V1 1.5 0 2.4   V2 1.62384 2.22045e-16 2.13785 
+  N0 0.871509 0.234929 0.430442   N1 0.902861 -2.27296e-16 0.429934   N2 0.906828 -2.05843e-16 0.4215 
+   txt003 
+STRI 
+  V0 1.62384 2.22045e-16 2.13785   V1 1.56671 0.436032 2.13785   V2 1.44722 0.402778 2.4 
+  N0 0.906828 -2.05843e-16 0.4215   N1 0.875348 0.235963 0.422003   N2 0.871509 0.234929 0.430442 
+   txt003 
+STRI 
+  V0 0 1.62384 2.13785   V1 0.436032 1.56671 2.13785   V2 0.467421 1.67949 1.87778 
+  N0 -0 0.906828 0.4215   N1 0.235963 0.875348 0.422003   N2 0.239043 0.886771 0.395595 
+   txt003 
+STRI 
+  V0 0.467421 1.67949 1.87778   V1 0 1.74074 1.87778   V2 0 1.62384 2.13785 
+  N0 0.239043 0.886771 0.395595   N1 -0 0.918633 0.395111   N2 -0 0.906828 0.4215 
+   txt003 
+STRI 
+  V0 0.436032 1.56671 2.13785   V1 0.825153 1.40492 2.13785   V2 0.884554 1.50606 1.87778 
+  N0 0.235963 0.875348 0.422003   N1 0.4547 0.783966 0.422664   N2 0.460653 0.794229 0.39623 
+   txt003 
+STRI 
+  V0 0.884554 1.50606 1.87778   V1 0.467421 1.67949 1.87778   V2 0.436032 1.56671 2.13785 
+  N0 0.460653 0.794229 0.39623   N1 0.239043 0.886771 0.395595   N2 0.235963 0.875348 0.422003 
+   txt003 
+STRI 
+  V0 0.825153 1.40492 2.13785   V1 1.15293 1.15293 2.13785   V2 1.23593 1.23593 1.87778 
+  N0 0.4547 0.783966 0.422664   N1 0.640758 0.640758 0.422917   N2 0.649156 0.649156 0.396474 
+   txt003 
+STRI 
+  V0 1.23593 1.23593 1.87778   V1 0.884554 1.50606 1.87778   V2 0.825153 1.40492 2.13785 
+  N0 0.649156 0.649156 0.396474   N1 0.460653 0.794229 0.39623   N2 0.4547 0.783966 0.422664 
+   txt003 
+STRI 
+  V0 1.15293 1.15293 2.13785   V1 1.40492 0.825153 2.13785   V2 1.50606 0.884554 1.87778 
+  N0 0.640758 0.640758 0.422917   N1 0.783966 0.4547 0.422664   N2 0.794229 0.460653 0.39623 
+   txt003 
+STRI 
+  V0 1.50606 0.884554 1.87778   V1 1.23593 1.23593 1.87778   V2 1.15293 1.15293 2.13785 
+  N0 0.794229 0.460653 0.39623   N1 0.649156 0.649156 0.396474   N2 0.640758 0.640758 0.422917 
+   txt003 
+STRI 
+  V0 1.40492 0.825153 2.13785   V1 1.56671 0.436032 2.13785   V2 1.67949 0.467421 1.87778 
+  N0 0.783966 0.4547 0.422664   N1 0.875348 0.235963 0.422003   N2 0.886771 0.239043 0.395595 
+   txt003 
+STRI 
+  V0 1.67949 0.467421 1.87778   V1 1.50606 0.884554 1.87778   V2 1.40492 0.825153 2.13785 
+  N0 0.886771 0.239043 0.395595   N1 0.794229 0.460653 0.39623   N2 0.783966 0.4547 0.422664 
+   txt003 
+STRI 
+  V0 1.56671 0.436032 2.13785   V1 1.62384 2.22045e-16 2.13785   V2 1.74074 0 1.87778 
+  N0 0.875348 0.235963 0.422003   N1 0.906828 -2.05843e-16 0.4215   N2 0.918633 -1.79998e-16 0.395111 
+   txt003 
+STRI 
+  V0 1.74074 0 1.87778   V1 1.67949 0.467421 1.87778   V2 1.56671 0.436032 2.13785 
+  N0 0.918633 -1.79998e-16 0.395111   N1 0.886771 0.239043 0.395595   N2 0.875348 0.235963 0.422003 
+   txt003 
+STRI 
+  V0 0 1.74074 1.87778   V1 0.467421 1.67949 1.87778   V2 0.495081 1.77888 1.62188 
+  N0 -0 0.918633 0.395111   N1 0.239043 0.886771 0.395595   N2 0.244029 0.90527 0.347757 
+   txt003 
+STRI 
+  V0 0.495081 1.77888 1.62188   V1 0 1.84375 1.62188   V2 0 1.74074 1.87778 
+  N0 0.244029 0.90527 0.347757   N1 -0 0.937749 0.347314   N2 -0 0.918633 0.395111 
+   txt003 
+STRI 
+  V0 0.467421 1.67949 1.87778   V1 0.884554 1.50606 1.87778   V2 0.936898 1.59519 1.62188 
+  N0 0.239043 0.886771 0.395595   N1 0.460653 0.794229 0.39623   N2 0.470295 0.810853 0.34834 
+   txt003 
+STRI 
+  V0 0.936898 1.59519 1.62188   V1 0.495081 1.77888 1.62188   V2 0.467421 1.67949 1.87778 
+  N0 0.470295 0.810853 0.34834   N1 0.244029 0.90527 0.347757   N2 0.239043 0.886771 0.395595 
+   txt003 
+STRI 
+  V0 0.884554 1.50606 1.87778   V1 1.23593 1.23593 1.87778   V2 1.30906 1.30906 1.62188 
+  N0 0.460653 0.794229 0.39623   N1 0.649156 0.649156 0.396474   N2 0.662761 0.662761 0.348563 
+   txt003 
+STRI 
+  V0 1.30906 1.30906 1.62188   V1 0.936898 1.59519 1.62188   V2 0.884554 1.50606 1.87778 
+  N0 0.662761 0.662761 0.348563   N1 0.470295 0.810853 0.34834   N2 0.460653 0.794229 0.39623 
+   txt003 
+STRI 
+  V0 1.23593 1.23593 1.87778   V1 1.50606 0.884554 1.87778   V2 1.59519 0.936898 1.62187 
+  N0 0.649156 0.649156 0.396474   N1 0.794229 0.460653 0.39623   N2 0.810853 0.470295 0.34834 
+   txt003 
+STRI 
+  V0 1.59519 0.936898 1.62187   V1 1.30906 1.30906 1.62188   V2 1.23593 1.23593 1.87778 
+  N0 0.810853 0.470295 0.34834   N1 0.662761 0.662761 0.348563   N2 0.649156 0.649156 0.396474 
+   txt003 
+STRI 
+  V0 1.50606 0.884554 1.87778   V1 1.67949 0.467421 1.87778   V2 1.77888 0.495081 1.62187 
+  N0 0.794229 0.460653 0.39623   N1 0.886771 0.239043 0.395595   N2 0.90527 0.244029 0.347757 
+   txt003 
+STRI 
+  V0 1.77888 0.495081 1.62187   V1 1.59519 0.936898 1.62187   V2 1.50606 0.884554 1.87778 
+  N0 0.90527 0.244029 0.347757   N1 0.810853 0.470295 0.34834   N2 0.794229 0.460653 0.39623 
+   txt003 
+STRI 
+  V0 1.67949 0.467421 1.87778   V1 1.74074 0 1.87778   V2 1.84375 0 1.62187 
+  N0 0.886771 0.239043 0.395595   N1 0.918633 -1.79998e-16 0.395111   N2 0.937749 -1.49384e-16 0.347314 
+   txt003 
+STRI 
+  V0 1.84375 0 1.62187   V1 1.77888 0.495081 1.62187   V2 1.67949 0.467421 1.87778 
+  N0 0.937749 -1.49384e-16 0.347314   N1 0.90527 0.244029 0.347757   N2 0.886771 0.239043 0.395595 
+   txt003 
+STRI 
+  V0 0 1.84375 1.62188   V1 0.495081 1.77888 1.62188   V2 0.517147 1.85816 1.37222 
+  N0 -0 0.937749 0.347314   N1 0.244029 0.90527 0.347757   N2 0.250446 0.929073 0.272213 
+   txt003 
+STRI 
+  V0 0.517147 1.85816 1.37222   V1 0 1.92593 1.37222   V2 0 1.84375 1.62188 
+  N0 0.250446 0.929073 0.272213   N1 -0 0.96234 0.271848   N2 -0 0.937749 0.347314 
+   txt003 
+STRI 
+  V0 0.495081 1.77888 1.62188   V1 0.936898 1.59519 1.62188   V2 0.978656 1.66628 1.37222 
+  N0 0.244029 0.90527 0.347757   N1 0.470295 0.810853 0.34834   N2 0.482704 0.832247 0.272693 
+   txt003 
+STRI 
+  V0 0.978656 1.66628 1.37222   V1 0.517147 1.85816 1.37222   V2 0.495081 1.77888 1.62188 
+  N0 0.482704 0.832247 0.272693   N1 0.250446 0.929073 0.272213   N2 0.244029 0.90527 0.347757 
+   txt003 
+STRI 
+  V0 0.936898 1.59519 1.62188   V1 1.30906 1.30906 1.62188   V2 1.36741 1.36741 1.37222 
+  N0 0.470295 0.810853 0.34834   N1 0.662761 0.662761 0.348563   N2 0.680271 0.680271 0.272877 
+   txt003 
+STRI 
+  V0 1.36741 1.36741 1.37222   V1 0.978656 1.66628 1.37222   V2 0.936898 1.59519 1.62188 
+  N0 0.680271 0.680271 0.272877   N1 0.482704 0.832247 0.272693   N2 0.470295 0.810853 0.34834 
+   txt003 
+STRI 
+  V0 1.30906 1.30906 1.62188   V1 1.59519 0.936898 1.62187   V2 1.66628 0.978656 1.37222 
+  N0 0.662761 0.662761 0.348563   N1 0.810853 0.470295 0.34834   N2 0.832247 0.482704 0.272693 
+   txt003 
+STRI 
+  V0 1.66628 0.978656 1.37222   V1 1.36741 1.36741 1.37222   V2 1.30906 1.30906 1.62188 
+  N0 0.832247 0.482704 0.272693   N1 0.680271 0.680271 0.272877   N2 0.662761 0.662761 0.348563 
+   txt003 
+STRI 
+  V0 1.59519 0.936898 1.62187   V1 1.77888 0.495081 1.62187   V2 1.85816 0.517147 1.37222 
+  N0 0.810853 0.470295 0.34834   N1 0.90527 0.244029 0.347757   N2 0.929073 0.250446 0.272213 
+   txt003 
+STRI 
+  V0 1.85816 0.517147 1.37222   V1 1.66628 0.978656 1.37222   V2 1.59519 0.936898 1.62187 
+  N0 0.929073 0.250446 0.272213   N1 0.832247 0.482704 0.272693   N2 0.810853 0.470295 0.34834 
+   txt003 
+STRI 
+  V0 1.77888 0.495081 1.62187   V1 1.84375 0 1.62187   V2 1.92593 2.22045e-16 1.37222 
+  N0 0.90527 0.244029 0.347757   N1 0.937749 -1.49384e-16 0.347314   N2 0.96234 -1.11936e-16 0.271848 
+   txt003 
+STRI 
+  V0 1.92593 2.22045e-16 1.37222   V1 1.85816 0.517147 1.37222   V2 1.77888 0.495081 1.62187 
+  N0 0.96234 -1.11936e-16 0.271848   N1 0.929073 0.250446 0.272213   N2 0.90527 0.244029 0.347757 
+   txt003 
+STRI 
+  V0 0 1.92593 1.37222   V1 0.517147 1.85816 1.37222   V2 0.531754 1.91065 1.1309 
+  N0 -0 0.96234 0.271848   N1 0.250446 0.929073 0.272213   N2 0.256935 0.953145 0.159686 
+   txt003 
+STRI 
+  V0 0.531754 1.91065 1.1309   V1 0 1.98032 1.1309   V2 0 1.92593 1.37222 
+  N0 0.256935 0.953145 0.159686   N1 -0 0.987204 0.15946   N2 -0 0.96234 0.271848 
+   txt003 
+STRI 
+  V0 0.517147 1.85816 1.37222   V1 0.978656 1.66628 1.37222   V2 1.0063 1.71335 1.1309 
+  N0 0.250446 0.929073 0.272213   N1 0.482704 0.832247 0.272693   N2 0.495256 0.853889 0.159982 
+   txt003 
+STRI 
+  V0 1.0063 1.71335 1.1309   V1 0.531754 1.91065 1.1309   V2 0.517147 1.85816 1.37222 
+  N0 0.495256 0.853889 0.159982   N1 0.256935 0.953145 0.159686   N2 0.250446 0.929073 0.272213 
+   txt003 
+STRI 
+  V0 0.978656 1.66628 1.37222   V1 1.36741 1.36741 1.37222   V2 1.40603 1.40603 1.1309 
+  N0 0.482704 0.832247 0.272693   N1 0.680271 0.680271 0.272877   N2 0.697986 0.697986 0.160096 
+   txt003 
+STRI 
+  V0 1.40603 1.40603 1.1309   V1 1.0063 1.71335 1.1309   V2 0.978656 1.66628 1.37222 
+  N0 0.697986 0.697986 0.160096   N1 0.495256 0.853889 0.159982   N2 0.482704 0.832247 0.272693 
+   txt003 
+STRI 
+  V0 1.36741 1.36741 1.37222   V1 1.66628 0.978656 1.37222   V2 1.71335 1.0063 1.1309 
+  N0 0.680271 0.680271 0.272877   N1 0.832247 0.482704 0.272693   N2 0.853889 0.495256 0.159982 
+   txt003 
+STRI 
+  V0 1.71335 1.0063 1.1309   V1 1.40603 1.40603 1.1309   V2 1.36741 1.36741 1.37222 
+  N0 0.853889 0.495256 0.159982   N1 0.697986 0.697986 0.160096   N2 0.680271 0.680271 0.272877 
+   txt003 
+STRI 
+  V0 1.66628 0.978656 1.37222   V1 1.85816 0.517147 1.37222   V2 1.91065 0.531754 1.1309 
+  N0 0.832247 0.482704 0.272693   N1 0.929073 0.250446 0.272213   N2 0.953145 0.256935 0.159686 
+   txt003 
+STRI 
+  V0 1.91065 0.531754 1.1309   V1 1.71335 1.0063 1.1309   V2 1.66628 0.978656 1.37222 
+  N0 0.953145 0.256935 0.159686   N1 0.853889 0.495256 0.159982   N2 0.832247 0.482704 0.272693 
+   txt003 
+STRI 
+  V0 1.85816 0.517147 1.37222   V1 1.92593 2.22045e-16 1.37222   V2 1.98032 -2.22045e-16 1.1309 
+  N0 0.929073 0.250446 0.272213   N1 0.96234 -1.11936e-16 0.271848   N2 0.987204 -6.38555e-17 0.15946 
+   txt003 
+STRI 
+  V0 1.98032 -2.22045e-16 1.1309   V1 1.91065 0.531754 1.1309   V2 1.85816 0.517147 1.37222 
+  N0 0.987204 -6.38555e-17 0.15946   N1 0.953145 0.256935 0.159686   N2 0.929073 0.250446 0.272213 
+   txt003 
+STRI 
+  V0 0 1.98032 1.1309   V1 0.531754 1.91065 1.1309   V2 0.537037 1.92963 0.9 
+  N0 -0 0.987204 0.15946   N1 0.256935 0.953145 0.159686   N2 0.260275 0.965535 5.17854e-17 
+   txt003 
+STRI 
+  V0 0.537037 1.92963 0.9   V1 0 2 0.9   V2 0 1.98032 1.1309 
+  N0 0.260275 0.965535 5.17854e-17   N1 -0 1 0   N2 -0 0.987204 0.15946 
+   txt003 
+STRI 
+  V0 0.531754 1.91065 1.1309   V1 1.0063 1.71335 1.1309   V2 1.0163 1.73037 0.9 
+  N0 0.256935 0.953145 0.159686   N1 0.495256 0.853889 0.159982   N2 0.501718 0.865031 1.36587e-16 
+   txt003 
+STRI 
+  V0 1.0163 1.73037 0.9   V1 0.537037 1.92963 0.9   V2 0.531754 1.91065 1.1309 
+  N0 0.501718 0.865031 1.36587e-16   N1 0.260275 0.965535 5.17854e-17   N2 0.256935 0.953145 0.159686 
+   txt003 
+STRI 
+  V0 1.0063 1.71335 1.1309   V1 1.40603 1.40603 1.1309   V2 1.42 1.42 0.9 
+  N0 0.495256 0.853889 0.159982   N1 0.697986 0.697986 0.160096   N2 0.707107 0.707107 1.74455e-16 
+   txt003 
+STRI 
+  V0 1.42 1.42 0.9   V1 1.0163 1.73037 0.9   V2 1.0063 1.71335 1.1309 
+  N0 0.707107 0.707107 1.74455e-16   N1 0.501718 0.865031 1.36587e-16   N2 0.495256 0.853889 0.159982 
+   txt003 
+STRI 
+  V0 1.40603 1.40603 1.1309   V1 1.71335 1.0063 1.1309   V2 1.73037 1.0163 0.9 
+  N0 0.697986 0.697986 0.160096   N1 0.853889 0.495256 0.159982   N2 0.865031 0.501718 1.36587e-16 
+   txt003 
+STRI 
+  V0 1.73037 1.0163 0.9   V1 1.42 1.42 0.9   V2 1.40603 1.40603 1.1309 
+  N0 0.865031 0.501718 1.36587e-16   N1 0.707107 0.707107 1.74455e-16   N2 0.697986 0.697986 0.160096 
+   txt003 
+STRI 
+  V0 1.71335 1.0063 1.1309   V1 1.91065 0.531754 1.1309   V2 1.92963 0.537037 0.9 
+  N0 0.853889 0.495256 0.159982   N1 0.953145 0.256935 0.159686   N2 0.965535 0.260275 5.17854e-17 
+   txt003 
+STRI 
+  V0 1.92963 0.537037 0.9   V1 1.73037 1.0163 0.9   V2 1.71335 1.0063 1.1309 
+  N0 0.965535 0.260275 5.17854e-17   N1 0.865031 0.501718 1.36587e-16   N2 0.853889 0.495256 0.159982 
+   txt003 
+STRI 
+  V0 1.91065 0.531754 1.1309   V1 1.98032 -2.22045e-16 1.1309   V2 2 0 0.9 
+  N0 0.953145 0.256935 0.159686   N1 0.987204 -6.38555e-17 0.15946   N2 1 0 0 
+   txt003 
+STRI 
+  V0 2 0 0.9   V1 1.92963 0.537037 0.9   V2 1.91065 0.531754 1.1309 
+  N0 1 0 0   N1 0.965535 0.260275 5.17854e-17   N2 0.953145 0.256935 0.159686 
+   txt003 
+STRI 
+  V0 2 0 0.9   V1 1.92963 -0.537037 0.9   V2 1.8939 -0.527092 0.693403 
+  N0 1 0 0   N1 0.965535 -0.260275 0   N2 0.905874 -0.244192 -0.346067 
+   txt003 
+STRI 
+  V0 1.8939 -0.527092 0.693403   V1 1.96296 0 0.693403   V2 2 0 0.9 
+  N0 0.905874 -0.244192 -0.346067   N1 0.938373 0 -0.345625   N2 1 0 0 
+   txt003 
+STRI 
+  V0 1.92963 -0.537037 0.9   V1 1.73037 -1.0163 0.9   V2 1.69833 -0.997476 0.693403 
+  N0 0.965535 -0.260275 0   N1 0.865031 -0.501718 0   N2 0.811395 -0.470609 -0.346647 
+   txt003 
+STRI 
+  V0 1.69833 -0.997476 0.693403   V1 1.8939 -0.527092 0.693403   V2 1.92963 -0.537037 0.9 
+  N0 0.811395 -0.470609 -0.346647   N1 0.905874 -0.244192 -0.346067   N2 0.965535 -0.260275 0 
+   txt003 
+STRI 
+  V0 1.73037 -1.0163 0.9   V1 1.42 -1.42 0.9   V2 1.3937 -1.3937 0.693403 
+  N0 0.865031 -0.501718 0   N1 0.707107 -0.707107 0   N2 0.663205 -0.663205 -0.34687 
+   txt003 
+STRI 
+  V0 1.3937 -1.3937 0.693403   V1 1.69833 -0.997476 0.693403   V2 1.73037 -1.0163 0.9 
+  N0 0.663205 -0.663205 -0.34687   N1 0.811395 -0.470609 -0.346647   N2 0.865031 -0.501718 0 
+   txt003 
+STRI 
+  V0 1.42 -1.42 0.9   V1 1.0163 -1.73037 0.9   V2 0.997476 -1.69833 0.693403 
+  N0 0.707107 -0.707107 0   N1 0.501718 -0.865031 0   N2 0.470609 -0.811395 -0.346647 
+   txt003 
+STRI 
+  V0 0.997476 -1.69833 0.693403   V1 1.3937 -1.3937 0.693403   V2 1.42 -1.42 0.9 
+  N0 0.470609 -0.811395 -0.346647   N1 0.663205 -0.663205 -0.34687   N2 0.707107 -0.707107 0 
+   txt003 
+STRI 
+  V0 1.0163 -1.73037 0.9   V1 0.537037 -1.92963 0.9   V2 0.527092 -1.8939 0.693403 
+  N0 0.501718 -0.865031 0   N1 0.260275 -0.965535 0   N2 0.244192 -0.905874 -0.346067 
+   txt003 
+STRI 
+  V0 0.527092 -1.8939 0.693403   V1 0.997476 -1.69833 0.693403   V2 1.0163 -1.73037 0.9 
+  N0 0.244192 -0.905874 -0.346067   N1 0.470609 -0.811395 -0.346647   N2 0.501718 -0.865031 0 
+   txt003 
+STRI 
+  V0 0.537037 -1.92963 0.9   V1 0 -2 0.9   V2 2.22045e-16 -1.96296 0.693403 
+  N0 0.260275 -0.965535 0   N1 -0 -1 -0   N2 -3.49072e-17 -0.938373 -0.345625 
+   txt003 
+STRI 
+  V0 2.22045e-16 -1.96296 0.693403   V1 0.527092 -1.8939 0.693403   V2 0.537037 -1.92963 0.9 
+  N0 -3.49072e-17 -0.938373 -0.345625   N1 0.244192 -0.905874 -0.346067   N2 0.260275 -0.965535 0 
+   txt003 
+STRI 
+  V0 1.96296 0 0.693403   V1 1.8939 -0.527092 0.693403   V2 1.80456 -0.502229 0.522222 
+  N0 0.938373 0 -0.345625   N1 0.905874 -0.244192 -0.346067   N2 0.782908 -0.211045 -0.585248 
+   txt003 
+STRI 
+  V0 1.80456 -0.502229 0.522222   V1 1.87037 0 0.522222   V2 1.96296 0 0.693403 
+  N0 0.782908 -0.211045 -0.585248   N1 0.811257 0 -0.58469   N2 0.938373 0 -0.345625 
+   txt003 
+STRI 
+  V0 1.8939 -0.527092 0.693403   V1 1.69833 -0.997476 0.693403   V2 1.61822 -0.950425 0.522222 
+  N0 0.905874 -0.244192 -0.346067   N1 0.811395 -0.470609 -0.346647   N2 0.700957 -0.406555 -0.58598 
+   txt003 
+STRI 
+  V0 1.61822 -0.950425 0.522222   V1 1.80456 -0.502229 0.522222   V2 1.8939 -0.527092 0.693403 
+  N0 0.700957 -0.406555 -0.58598   N1 0.782908 -0.211045 -0.585248   N2 0.905874 -0.244192 -0.346067 
+   txt003 
+STRI 
+  V0 1.69833 -0.997476 0.693403   V1 1.3937 -1.3937 0.693403   V2 1.32796 -1.32796 0.522222 
+  N0 0.811395 -0.470609 -0.346647   N1 0.663205 -0.663205 -0.34687   N2 0.572843 -0.572843 -0.586261 
+   txt003 
+STRI 
+  V0 1.32796 -1.32796 0.522222   V1 1.61822 -0.950425 0.522222   V2 1.69833 -0.997476 0.693403 
+  N0 0.572843 -0.572843 -0.586261   N1 0.700957 -0.406555 -0.58598   N2 0.811395 -0.470609 -0.346647 
+   txt003 
+STRI 
+  V0 1.3937 -1.3937 0.693403   V1 0.997476 -1.69833 0.693403   V2 0.950425 -1.61822 0.522222 
+  N0 0.663205 -0.663205 -0.34687   N1 0.470609 -0.811395 -0.346647   N2 0.406555 -0.700957 -0.58598 
+   txt003 
+STRI 
+  V0 0.950425 -1.61822 0.522222   V1 1.32796 -1.32796 0.522222   V2 1.3937 -1.3937 0.693403 
+  N0 0.406555 -0.700957 -0.58598   N1 0.572843 -0.572843 -0.586261   N2 0.663205 -0.663205 -0.34687 
+   txt003 
+STRI 
+  V0 0.997476 -1.69833 0.693403   V1 0.527092 -1.8939 0.693403   V2 0.502229 -1.80456 0.522222 
+  N0 0.470609 -0.811395 -0.346647   N1 0.244192 -0.905874 -0.346067   N2 0.211045 -0.782908 -0.585248 
+   txt003 
+STRI 
+  V0 0.502229 -1.80456 0.522222   V1 0.950425 -1.61822 0.522222   V2 0.997476 -1.69833 0.693403 
+  N0 0.211045 -0.782908 -0.585248   N1 0.406555 -0.700957 -0.58598   N2 0.470609 -0.811395 -0.346647 
+   txt003 
+STRI 
+  V0 0.527092 -1.8939 0.693403   V1 2.22045e-16 -1.96296 0.693403   V2 2.22045e-16 -1.87037 0.522222 
+  N0 0.244192 -0.905874 -0.346067   N1 -3.49072e-17 -0.938373 -0.345625   N2 -6.19755e-17 -0.811257 -0.58469 
+   txt003 
+STRI 
+  V0 2.22045e-16 -1.87037 0.522222   V1 0.502229 -1.80456 0.522222   V2 0.527092 -1.8939 0.693403 
+  N0 -6.19755e-17 -0.811257 -0.58469   N1 0.211045 -0.782908 -0.585248   N2 0.244192 -0.905874 -0.346067 
+   txt003 
+STRI 
+  V0 1.87037 0 0.522222   V1 1.80456 -0.502229 0.522222   V2 1.68843 -0.469907 0.384375 
+  N0 0.811257 0 -0.58469   N1 0.782908 -0.211045 -0.585248   N2 0.673539 -0.181563 -0.716506 
+   txt003 
+STRI 
+  V0 1.68843 -0.469907 0.384375   V1 1.75 0 0.384375   V2 1.87037 0 0.522222 
+  N0 0.673539 -0.181563 -0.716506   N1 0.6981 0 -0.716   N2 0.811257 0 -0.58469 
+   txt003 
+STRI 
+  V0 1.80456 -0.502229 0.522222   V1 1.61822 -0.950425 0.522222   V2 1.51407 -0.889259 0.384375 
+  N0 0.782908 -0.211045 -0.585248   N1 0.700957 -0.406555 -0.58598   N2 0.602839 -0.349647 -0.717169 
+   txt003 
+STRI 
+  V0 1.51407 -0.889259 0.384375   V1 1.68843 -0.469907 0.384375   V2 1.80456 -0.502229 0.522222 
+  N0 0.602839 -0.349647 -0.717169   N1 0.673539 -0.181563 -0.716506   N2 0.782908 -0.211045 -0.585248 
+   txt003 
+STRI 
+  V0 1.61822 -0.950425 0.522222   V1 1.32796 -1.32796 0.522222   V2 1.2425 -1.2425 0.384375 
+  N0 0.700957 -0.406555 -0.58598   N1 0.572843 -0.572843 -0.586261   N2 0.492597 -0.492597 -0.717423 
+   txt003 
+STRI 
+  V0 1.2425 -1.2425 0.384375   V1 1.51407 -0.889259 0.384375   V2 1.61822 -0.950425 0.522222 
+  N0 0.492597 -0.492597 -0.717423   N1 0.602839 -0.349647 -0.717169   N2 0.700957 -0.406555 -0.58598 
+   txt003 
+STRI 
+  V0 1.32796 -1.32796 0.522222   V1 0.950425 -1.61822 0.522222   V2 0.889259 -1.51407 0.384375 
+  N0 0.572843 -0.572843 -0.586261   N1 0.406555 -0.700957 -0.58598   N2 0.349647 -0.602839 -0.717169 
+   txt003 
+STRI 
+  V0 0.889259 -1.51407 0.384375   V1 1.2425 -1.2425 0.384375   V2 1.32796 -1.32796 0.522222 
+  N0 0.349647 -0.602839 -0.717169   N1 0.492597 -0.492597 -0.717423   N2 0.572843 -0.572843 -0.586261 
+   txt003 
+STRI 
+  V0 0.950425 -1.61822 0.522222   V1 0.502229 -1.80456 0.522222   V2 0.469907 -1.68843 0.384375 
+  N0 0.406555 -0.700957 -0.58598   N1 0.211045 -0.782908 -0.585248   N2 0.181563 -0.673539 -0.716506 
+   txt003 
+STRI 
+  V0 0.469907 -1.68843 0.384375   V1 0.889259 -1.51407 0.384375   V2 0.950425 -1.61822 0.522222 
+  N0 0.181563 -0.673539 -0.716506   N1 0.349647 -0.602839 -0.717169   N2 0.406555 -0.700957 -0.58598 
+   txt003 
+STRI 
+  V0 0.502229 -1.80456 0.522222   V1 2.22045e-16 -1.87037 0.522222   V2 2.22045e-16 -1.75 0.384375 
+  N0 0.211045 -0.782908 -0.585248   N1 -6.19755e-17 -0.811257 -0.58469   N2 -8.11143e-17 -0.6981 -0.716 
+   txt003 
+STRI 
+  V0 2.22045e-16 -1.75 0.384375   V1 0.469907 -1.68843 0.384375   V2 0.502229 -1.80456 0.522222 
+  N0 -8.11143e-17 -0.6981 -0.716   N1 0.181563 -0.673539 -0.716506   N2 0.211045 -0.782908 -0.585248 
+   txt003 
+STRI 
+  V0 1.75 0 0.384375   V1 1.68843 -0.469907 0.384375   V2 1.57229 -0.437586 0.277778 
+  N0 0.6981 0 -0.716   N1 0.673539 -0.181563 -0.716506   N2 0.61392 -0.165491 -0.771826 
+   txt003 
+STRI 
+  V0 1.57229 -0.437586 0.277778   V1 1.62963 0 0.277778   V2 1.75 0 0.384375 
+  N0 0.61392 -0.165491 -0.771826   N1 0.636383 0 -0.771373   N2 0.6981 0 -0.716 
+   txt003 
+STRI 
+  V0 1.68843 -0.469907 0.384375   V1 1.51407 -0.889259 0.384375   V2 1.40993 -0.828093 0.277778 
+  N0 0.673539 -0.181563 -0.716506   N1 0.602839 -0.349647 -0.717169   N2 0.549392 -0.318647 -0.77242 
+   txt003 
+STRI 
+  V0 1.40993 -0.828093 0.277778   V1 1.57229 -0.437586 0.277778   V2 1.68843 -0.469907 0.384375 
+  N0 0.549392 -0.318647 -0.77242   N1 0.61392 -0.165491 -0.771826   N2 0.673539 -0.181563 -0.716506 
+   txt003 
+STRI 
+  V0 1.51407 -0.889259 0.384375   V1 1.2425 -1.2425 0.384375   V2 1.15704 -1.15704 0.277778 
+  N0 0.602839 -0.349647 -0.717169   N1 0.492597 -0.492597 -0.717423   N2 0.448897 -0.448897 -0.772647 
+   txt003 
+STRI 
+  V0 1.15704 -1.15704 0.277778   V1 1.40993 -0.828093 0.277778   V2 1.51407 -0.889259 0.384375 
+  N0 0.448897 -0.448897 -0.772647   N1 0.549392 -0.318647 -0.77242   N2 0.602839 -0.349647 -0.717169 
+   txt003 
+STRI 
+  V0 1.2425 -1.2425 0.384375   V1 0.889259 -1.51407 0.384375   V2 0.828093 -1.40993 0.277778 
+  N0 0.492597 -0.492597 -0.717423   N1 0.349647 -0.602839 -0.717169   N2 0.318647 -0.549392 -0.77242 
+   txt003 
+STRI 
+  V0 0.828093 -1.40993 0.277778   V1 1.15704 -1.15704 0.277778   V2 1.2425 -1.2425 0.384375 
+  N0 0.318647 -0.549392 -0.77242   N1 0.448897 -0.448897 -0.772647   N2 0.492597 -0.492597 -0.717423 
+   txt003 
+STRI 
+  V0 0.889259 -1.51407 0.384375   V1 0.469907 -1.68843 0.384375   V2 0.437586 -1.57229 0.277778 
+  N0 0.349647 -0.602839 -0.717169   N1 0.181563 -0.673539 -0.716506   N2 0.165491 -0.61392 -0.771826 
+   txt003 
+STRI 
+  V0 0.437586 -1.57229 0.277778   V1 0.828093 -1.40993 0.277778   V2 0.889259 -1.51407 0.384375 
+  N0 0.165491 -0.61392 -0.771826   N1 0.318647 -0.549392 -0.77242   N2 0.349647 -0.602839 -0.717169 
+   txt003 
+STRI 
+  V0 0.469907 -1.68843 0.384375   V1 2.22045e-16 -1.75 0.384375   V2 0 -1.62963 0.277778 
+  N0 0.181563 -0.673539 -0.716506   N1 -8.11143e-17 -0.6981 -0.716   N2 -1.97068e-16 -0.636383 -0.771373 
+   txt003 
+STRI 
+  V0 0 -1.62963 0.277778   V1 0.437586 -1.57229 0.277778   V2 0.469907 -1.68843 0.384375 
+  N0 -1.97068e-16 -0.636383 -0.771373   N1 0.165491 -0.61392 -0.771826   N2 0.181563 -0.673539 -0.716506 
+   txt003 
+STRI 
+  V0 1.62963 0 0.277778   V1 1.57229 -0.437586 0.277778   V2 1.48296 -0.412723 0.200347 
+  N0 0.636383 0 -0.771373   N1 0.61392 -0.165491 -0.771826   N2 0.651276 -0.175561 -0.738253 
+   txt003 
+STRI 
+  V0 1.48296 -0.412723 0.200347   V1 1.53704 0 0.200347   V2 1.62963 0 0.277778 
+  N0 0.651276 -0.175561 -0.738253   N1 0.675056 0 -0.737766   N2 0.636383 0 -0.771373 
+   txt003 
+STRI 
+  V0 1.57229 -0.437586 0.277778   V1 1.40993 -0.828093 0.277778   V2 1.32982 -0.781043 0.200347 
+  N0 0.61392 -0.165491 -0.771826   N1 0.549392 -0.318647 -0.77242   N2 0.582878 -0.338069 -0.738893 
+   txt003 
+STRI 
+  V0 1.32982 -0.781043 0.200347   V1 1.48296 -0.412723 0.200347   V2 1.57229 -0.437586 0.277778 
+  N0 0.582878 -0.338069 -0.738893   N1 0.651276 -0.175561 -0.738253   N2 0.61392 -0.165491 -0.771826 
+   txt003 
+STRI 
+  V0 1.40993 -0.828093 0.277778   V1 1.15704 -1.15704 0.277778   V2 1.0913 -1.0913 0.200347 
+  N0 0.549392 -0.318647 -0.77242   N1 0.448897 -0.448897 -0.772647   N2 0.476275 -0.476275 -0.739137 
+   txt003 
+STRI 
+  V0 1.0913 -1.0913 0.200347   V1 1.32982 -0.781043 0.200347   V2 1.40993 -0.828093 0.277778 
+  N0 0.476275 -0.476275 -0.739137   N1 0.582878 -0.338069 -0.738893   N2 0.549392 -0.318647 -0.77242 
+   txt003 
+STRI 
+  V0 1.15704 -1.15704 0.277778   V1 0.828093 -1.40993 0.277778   V2 0.781043 -1.32982 0.200347 
+  N0 0.448897 -0.448897 -0.772647   N1 0.318647 -0.549392 -0.77242   N2 0.338069 -0.582878 -0.738893 
+   txt003 
+STRI 
+  V0 0.781043 -1.32982 0.200347   V1 1.0913 -1.0913 0.200347   V2 1.15704 -1.15704 0.277778 
+  N0 0.338069 -0.582878 -0.738893   N1 0.476275 -0.476275 -0.739137   N2 0.448897 -0.448897 -0.772647 
+   txt003 
+STRI 
+  V0 0.828093 -1.40993 0.277778   V1 0.437586 -1.57229 0.277778   V2 0.412723 -1.48296 0.200347 
+  N0 0.318647 -0.549392 -0.77242   N1 0.165491 -0.61392 -0.771826   N2 0.175561 -0.651276 -0.738253 
+   txt003 
+STRI 
+  V0 0.412723 -1.48296 0.200347   V1 0.781043 -1.32982 0.200347   V2 0.828093 -1.40993 0.277778 
+  N0 0.175561 -0.651276 -0.738253   N1 0.338069 -0.582878 -0.738893   N2 0.318647 -0.549392 -0.77242 
+   txt003 
+STRI 
+  V0 0.437586 -1.57229 0.277778   V1 0 -1.62963 0.277778   V2 0 -1.53704 0.200347 
+  N0 0.165491 -0.61392 -0.771826   N1 -1.97068e-16 -0.636383 -0.771373   N2 -9.51605e-17 -0.675056 -0.737766 
+   txt003 
+STRI 
+  V0 0 -1.53704 0.200347   V1 0.412723 -1.48296 0.200347   V2 0.437586 -1.57229 0.277778 
+  N0 -9.51605e-17 -0.675056 -0.737766   N1 0.175561 -0.651276 -0.738253   N2 0.165491 -0.61392 -0.771826 
+   txt003 
+STRI 
+  V0 1.53704 0 0.200347   V1 1.48296 -0.412723 0.200347   V2 1.44722 -0.402778 0.15 
+  N0 0.675056 0 -0.737766   N1 0.651276 -0.175561 -0.738253   N2 0.965535 -0.260275 0 
+   txt003 
+STRI 
+  V0 1.44722 -0.402778 0.15   V1 1.5 0 0.15   V2 1.53704 0 0.200347 
+  N0 0.965535 -0.260275 0   N1 1 0 0   N2 0.675056 0 -0.737766 
+   txt003 
+STRI 
+  V0 1.48296 -0.412723 0.200347   V1 1.32982 -0.781043 0.200347   V2 1.29778 -0.762222 0.15 
+  N0 0.651276 -0.175561 -0.738253   N1 0.582878 -0.338069 -0.738893   N2 0.865031 -0.501718 0 
+   txt003 
+STRI 
+  V0 1.29778 -0.762222 0.15   V1 1.44722 -0.402778 0.15   V2 1.48296 -0.412723 0.200347 
+  N0 0.865031 -0.501718 0   N1 0.965535 -0.260275 0   N2 0.651276 -0.175561 -0.738253 
+   txt003 
+STRI 
+  V0 1.32982 -0.781043 0.200347   V1 1.0913 -1.0913 0.200347   V2 1.065 -1.065 0.15 
+  N0 0.582878 -0.338069 -0.738893   N1 0.476275 -0.476275 -0.739137   N2 0.707107 -0.707107 0 
+   txt003 
+STRI 
+  V0 1.065 -1.065 0.15   V1 1.29778 -0.762222 0.15   V2 1.32982 -0.781043 0.200347 
+  N0 0.707107 -0.707107 0   N1 0.865031 -0.501718 0   N2 0.582878 -0.338069 -0.738893 
+   txt003 
+STRI 
+  V0 1.0913 -1.0913 0.200347   V1 0.781043 -1.32982 0.200347   V2 0.762222 -1.29778 0.15 
+  N0 0.476275 -0.476275 -0.739137   N1 0.338069 -0.582878 -0.738893   N2 0.501718 -0.865031 0 
+   txt003 
+STRI 
+  V0 0.762222 -1.29778 0.15   V1 1.065 -1.065 0.15   V2 1.0913 -1.0913 0.200347 
+  N0 0.501718 -0.865031 0   N1 0.707107 -0.707107 0   N2 0.476275 -0.476275 -0.739137 
+   txt003 
+STRI 
+  V0 0.781043 -1.32982 0.200347   V1 0.412723 -1.48296 0.200347   V2 0.402778 -1.44722 0.15 
+  N0 0.338069 -0.582878 -0.738893   N1 0.175561 -0.651276 -0.738253   N2 0.260275 -0.965535 0 
+   txt003 
+STRI 
+  V0 0.402778 -1.44722 0.15   V1 0.762222 -1.29778 0.15   V2 0.781043 -1.32982 0.200347 
+  N0 0.260275 -0.965535 0   N1 0.501718 -0.865031 0   N2 0.338069 -0.582878 -0.738893 
+   txt003 
+STRI 
+  V0 0.412723 -1.48296 0.200347   V1 0 -1.53704 0.200347   V2 0 -1.5 0.15 
+  N0 0.175561 -0.651276 -0.738253   N1 -9.51605e-17 -0.675056 -0.737766   N2 -0 -1 -0 
+   txt003 
+STRI 
+  V0 0 -1.5 0.15   V1 0.402778 -1.44722 0.15   V2 0.412723 -1.48296 0.200347 
+  N0 -0 -1 -0   N1 0.260275 -0.965535 0   N2 0.175561 -0.651276 -0.738253 
+   txt003 
+STRI 
+  V0 0 -2 0.9   V1 -0.537037 -1.92963 0.9   V2 -0.527092 -1.8939 0.693403 
+  N0 -0 -1 -0   N1 -0.260275 -0.965535 -0   N2 -0.244192 -0.905874 -0.346067 
+   txt003 
+STRI 
+  V0 -0.527092 -1.8939 0.693403   V1 0 -1.96296 0.693403   V2 0 -2 0.9 
+  N0 -0.244192 -0.905874 -0.346067   N1 -0 -0.938373 -0.345625   N2 -0 -1 -0 
+   txt003 
+STRI 
+  V0 -0.537037 -1.92963 0.9   V1 -1.0163 -1.73037 0.9   V2 -0.997476 -1.69833 0.693403 
+  N0 -0.260275 -0.965535 -0   N1 -0.501718 -0.865031 -0   N2 -0.470609 -0.811395 -0.346647 
+   txt003 
+STRI 
+  V0 -0.997476 -1.69833 0.693403   V1 -0.527092 -1.8939 0.693403   V2 -0.537037 -1.92963 0.9 
+  N0 -0.470609 -0.811395 -0.346647   N1 -0.244192 -0.905874 -0.346067   N2 -0.260275 -0.965535 -0 
+   txt003 
+STRI 
+  V0 -1.0163 -1.73037 0.9   V1 -1.42 -1.42 0.9   V2 -1.3937 -1.3937 0.693403 
+  N0 -0.501718 -0.865031 -0   N1 -0.707107 -0.707107 -0   N2 -0.663205 -0.663205 -0.34687 
+   txt003 
+STRI 
+  V0 -1.3937 -1.3937 0.693403   V1 -0.997476 -1.69833 0.693403   V2 -1.0163 -1.73037 0.9 
+  N0 -0.663205 -0.663205 -0.34687   N1 -0.470609 -0.811395 -0.346647   N2 -0.501718 -0.865031 -0 
+   txt003 
+STRI 
+  V0 -1.42 -1.42 0.9   V1 -1.73037 -1.0163 0.9   V2 -1.69833 -0.997476 0.693403 
+  N0 -0.707107 -0.707107 -0   N1 -0.865031 -0.501718 -0   N2 -0.811395 -0.470609 -0.346647 
+   txt003 
+STRI 
+  V0 -1.69833 -0.997476 0.693403   V1 -1.3937 -1.3937 0.693403   V2 -1.42 -1.42 0.9 
+  N0 -0.811395 -0.470609 -0.346647   N1 -0.663205 -0.663205 -0.34687   N2 -0.707107 -0.707107 -0 
+   txt003 
+STRI 
+  V0 -1.73037 -1.0163 0.9   V1 -1.92963 -0.537037 0.9   V2 -1.8939 -0.527092 0.693403 
+  N0 -0.865031 -0.501718 -0   N1 -0.965535 -0.260275 -0   N2 -0.905874 -0.244192 -0.346067 
+   txt003 
+STRI 
+  V0 -1.8939 -0.527092 0.693403   V1 -1.69833 -0.997476 0.693403   V2 -1.73037 -1.0163 0.9 
+  N0 -0.905874 -0.244192 -0.346067   N1 -0.811395 -0.470609 -0.346647   N2 -0.865031 -0.501718 -0 
+   txt003 
+STRI 
+  V0 -1.92963 -0.537037 0.9   V1 -2 0 0.9   V2 -1.96296 -2.22045e-16 0.693403 
+  N0 -0.965535 -0.260275 -0   N1 -1 0 0   N2 -0.938373 3.49072e-17 -0.345625 
+   txt003 
+STRI 
+  V0 -1.96296 -2.22045e-16 0.693403   V1 -1.8939 -0.527092 0.693403   V2 -1.92963 -0.537037 0.9 
+  N0 -0.938373 3.49072e-17 -0.345625   N1 -0.905874 -0.244192 -0.346067   N2 -0.965535 -0.260275 -0 
+   txt003 
+STRI 
+  V0 0 -1.96296 0.693403   V1 -0.527092 -1.8939 0.693403   V2 -0.502229 -1.80456 0.522222 
+  N0 -0 -0.938373 -0.345625   N1 -0.244192 -0.905874 -0.346067   N2 -0.211045 -0.782908 -0.585248 
+   txt003 
+STRI 
+  V0 -0.502229 -1.80456 0.522222   V1 0 -1.87037 0.522222   V2 0 -1.96296 0.693403 
+  N0 -0.211045 -0.782908 -0.585248   N1 -0 -0.811257 -0.58469   N2 -0 -0.938373 -0.345625 
+   txt003 
+STRI 
+  V0 -0.527092 -1.8939 0.693403   V1 -0.997476 -1.69833 0.693403   V2 -0.950425 -1.61822 0.522222 
+  N0 -0.244192 -0.905874 -0.346067   N1 -0.470609 -0.811395 -0.346647   N2 -0.406555 -0.700957 -0.58598 
+   txt003 
+STRI 
+  V0 -0.950425 -1.61822 0.522222   V1 -0.502229 -1.80456 0.522222   V2 -0.527092 -1.8939 0.693403 
+  N0 -0.406555 -0.700957 -0.58598   N1 -0.211045 -0.782908 -0.585248   N2 -0.244192 -0.905874 -0.346067 
+   txt003 
+STRI 
+  V0 -0.997476 -1.69833 0.693403   V1 -1.3937 -1.3937 0.693403   V2 -1.32796 -1.32796 0.522222 
+  N0 -0.470609 -0.811395 -0.346647   N1 -0.663205 -0.663205 -0.34687   N2 -0.572843 -0.572843 -0.586261 
+   txt003 
+STRI 
+  V0 -1.32796 -1.32796 0.522222   V1 -0.950425 -1.61822 0.522222   V2 -0.997476 -1.69833 0.693403 
+  N0 -0.572843 -0.572843 -0.586261   N1 -0.406555 -0.700957 -0.58598   N2 -0.470609 -0.811395 -0.346647 
+   txt003 
+STRI 
+  V0 -1.3937 -1.3937 0.693403   V1 -1.69833 -0.997476 0.693403   V2 -1.61822 -0.950425 0.522222 
+  N0 -0.663205 -0.663205 -0.34687   N1 -0.811395 -0.470609 -0.346647   N2 -0.700957 -0.406555 -0.58598 
+   txt003 
+STRI 
+  V0 -1.61822 -0.950425 0.522222   V1 -1.32796 -1.32796 0.522222   V2 -1.3937 -1.3937 0.693403 
+  N0 -0.700957 -0.406555 -0.58598   N1 -0.572843 -0.572843 -0.586261   N2 -0.663205 -0.663205 -0.34687 
+   txt003 
+STRI 
+  V0 -1.69833 -0.997476 0.693403   V1 -1.8939 -0.527092 0.693403   V2 -1.80456 -0.502229 0.522222 
+  N0 -0.811395 -0.470609 -0.346647   N1 -0.905874 -0.244192 -0.346067   N2 -0.782908 -0.211045 -0.585248 
+   txt003 
+STRI 
+  V0 -1.80456 -0.502229 0.522222   V1 -1.61822 -0.950425 0.522222   V2 -1.69833 -0.997476 0.693403 
+  N0 -0.782908 -0.211045 -0.585248   N1 -0.700957 -0.406555 -0.58598   N2 -0.811395 -0.470609 -0.346647 
+   txt003 
+STRI 
+  V0 -1.8939 -0.527092 0.693403   V1 -1.96296 -2.22045e-16 0.693403   V2 -1.87037 -2.22045e-16 0.522222 
+  N0 -0.905874 -0.244192 -0.346067   N1 -0.938373 3.49072e-17 -0.345625   N2 -0.811257 6.19755e-17 -0.58469 
+   txt003 
+STRI 
+  V0 -1.87037 -2.22045e-16 0.522222   V1 -1.80456 -0.502229 0.522222   V2 -1.8939 -0.527092 0.693403 
+  N0 -0.811257 6.19755e-17 -0.58469   N1 -0.782908 -0.211045 -0.585248   N2 -0.905874 -0.244192 -0.346067 
+   txt003 
+STRI 
+  V0 0 -1.87037 0.522222   V1 -0.502229 -1.80456 0.522222   V2 -0.469907 -1.68843 0.384375 
+  N0 -0 -0.811257 -0.58469   N1 -0.211045 -0.782908 -0.585248   N2 -0.181563 -0.673539 -0.716506 
+   txt003 
+STRI 
+  V0 -0.469907 -1.68843 0.384375   V1 0 -1.75 0.384375   V2 0 -1.87037 0.522222 
+  N0 -0.181563 -0.673539 -0.716506   N1 -0 -0.6981 -0.716   N2 -0 -0.811257 -0.58469 
+   txt003 
+STRI 
+  V0 -0.502229 -1.80456 0.522222   V1 -0.950425 -1.61822 0.522222   V2 -0.889259 -1.51407 0.384375 
+  N0 -0.211045 -0.782908 -0.585248   N1 -0.406555 -0.700957 -0.58598   N2 -0.349647 -0.602839 -0.717169 
+   txt003 
+STRI 
+  V0 -0.889259 -1.51407 0.384375   V1 -0.469907 -1.68843 0.384375   V2 -0.502229 -1.80456 0.522222 
+  N0 -0.349647 -0.602839 -0.717169   N1 -0.181563 -0.673539 -0.716506   N2 -0.211045 -0.782908 -0.585248 
+   txt003 
+STRI 
+  V0 -0.950425 -1.61822 0.522222   V1 -1.32796 -1.32796 0.522222   V2 -1.2425 -1.2425 0.384375 
+  N0 -0.406555 -0.700957 -0.58598   N1 -0.572843 -0.572843 -0.586261   N2 -0.492597 -0.492597 -0.717423 
+   txt003 
+STRI 
+  V0 -1.2425 -1.2425 0.384375   V1 -0.889259 -1.51407 0.384375   V2 -0.950425 -1.61822 0.522222 
+  N0 -0.492597 -0.492597 -0.717423   N1 -0.349647 -0.602839 -0.717169   N2 -0.406555 -0.700957 -0.58598 
+   txt003 
+STRI 
+  V0 -1.32796 -1.32796 0.522222   V1 -1.61822 -0.950425 0.522222   V2 -1.51407 -0.889259 0.384375 
+  N0 -0.572843 -0.572843 -0.586261   N1 -0.700957 -0.406555 -0.58598   N2 -0.602839 -0.349647 -0.717169 
+   txt003 
+STRI 
+  V0 -1.51407 -0.889259 0.384375   V1 -1.2425 -1.2425 0.384375   V2 -1.32796 -1.32796 0.522222 
+  N0 -0.602839 -0.349647 -0.717169   N1 -0.492597 -0.492597 -0.717423   N2 -0.572843 -0.572843 -0.586261 
+   txt003 
+STRI 
+  V0 -1.61822 -0.950425 0.522222   V1 -1.80456 -0.502229 0.522222   V2 -1.68843 -0.469907 0.384375 
+  N0 -0.700957 -0.406555 -0.58598   N1 -0.782908 -0.211045 -0.585248   N2 -0.673539 -0.181563 -0.716506 
+   txt003 
+STRI 
+  V0 -1.68843 -0.469907 0.384375   V1 -1.51407 -0.889259 0.384375   V2 -1.61822 -0.950425 0.522222 
+  N0 -0.673539 -0.181563 -0.716506   N1 -0.602839 -0.349647 -0.717169   N2 -0.700957 -0.406555 -0.58598 
+   txt003 
+STRI 
+  V0 -1.80456 -0.502229 0.522222   V1 -1.87037 -2.22045e-16 0.522222   V2 -1.75 -2.22045e-16 0.384375 
+  N0 -0.782908 -0.211045 -0.585248   N1 -0.811257 6.19755e-17 -0.58469   N2 -0.6981 8.11143e-17 -0.716 
+   txt003 
+STRI 
+  V0 -1.75 -2.22045e-16 0.384375   V1 -1.68843 -0.469907 0.384375   V2 -1.80456 -0.502229 0.522222 
+  N0 -0.6981 8.11143e-17 -0.716   N1 -0.673539 -0.181563 -0.716506   N2 -0.782908 -0.211045 -0.585248 
+   txt003 
+STRI 
+  V0 0 -1.75 0.384375   V1 -0.469907 -1.68843 0.384375   V2 -0.437586 -1.57229 0.277778 
+  N0 -0 -0.6981 -0.716   N1 -0.181563 -0.673539 -0.716506   N2 -0.165491 -0.61392 -0.771826 
+   txt003 
+STRI 
+  V0 -0.437586 -1.57229 0.277778   V1 0 -1.62963 0.277778   V2 0 -1.75 0.384375 
+  N0 -0.165491 -0.61392 -0.771826   N1 -0 -0.636383 -0.771373   N2 -0 -0.6981 -0.716 
+   txt003 
+STRI 
+  V0 -0.469907 -1.68843 0.384375   V1 -0.889259 -1.51407 0.384375   V2 -0.828093 -1.40993 0.277778 
+  N0 -0.181563 -0.673539 -0.716506   N1 -0.349647 -0.602839 -0.717169   N2 -0.318647 -0.549392 -0.77242 
+   txt003 
+STRI 
+  V0 -0.828093 -1.40993 0.277778   V1 -0.437586 -1.57229 0.277778   V2 -0.469907 -1.68843 0.384375 
+  N0 -0.318647 -0.549392 -0.77242   N1 -0.165491 -0.61392 -0.771826   N2 -0.181563 -0.673539 -0.716506 
+   txt003 
+STRI 
+  V0 -0.889259 -1.51407 0.384375   V1 -1.2425 -1.2425 0.384375   V2 -1.15704 -1.15704 0.277778 
+  N0 -0.349647 -0.602839 -0.717169   N1 -0.492597 -0.492597 -0.717423   N2 -0.448897 -0.448897 -0.772647 
+   txt003 
+STRI 
+  V0 -1.15704 -1.15704 0.277778   V1 -0.828093 -1.40993 0.277778   V2 -0.889259 -1.51407 0.384375 
+  N0 -0.448897 -0.448897 -0.772647   N1 -0.318647 -0.549392 -0.77242   N2 -0.349647 -0.602839 -0.717169 
+   txt003 
+STRI 
+  V0 -1.2425 -1.2425 0.384375   V1 -1.51407 -0.889259 0.384375   V2 -1.40993 -0.828093 0.277778 
+  N0 -0.492597 -0.492597 -0.717423   N1 -0.602839 -0.349647 -0.717169   N2 -0.549392 -0.318647 -0.77242 
+   txt003 
+STRI 
+  V0 -1.40993 -0.828093 0.277778   V1 -1.15704 -1.15704 0.277778   V2 -1.2425 -1.2425 0.384375 
+  N0 -0.549392 -0.318647 -0.77242   N1 -0.448897 -0.448897 -0.772647   N2 -0.492597 -0.492597 -0.717423 
+   txt003 
+STRI 
+  V0 -1.51407 -0.889259 0.384375   V1 -1.68843 -0.469907 0.384375   V2 -1.57229 -0.437586 0.277778 
+  N0 -0.602839 -0.349647 -0.717169   N1 -0.673539 -0.181563 -0.716506   N2 -0.61392 -0.165491 -0.771826 
+   txt003 
+STRI 
+  V0 -1.57229 -0.437586 0.277778   V1 -1.40993 -0.828093 0.277778   V2 -1.51407 -0.889259 0.384375 
+  N0 -0.61392 -0.165491 -0.771826   N1 -0.549392 -0.318647 -0.77242   N2 -0.602839 -0.349647 -0.717169 
+   txt003 
+STRI 
+  V0 -1.68843 -0.469907 0.384375   V1 -1.75 -2.22045e-16 0.384375   V2 -1.62963 0 0.277778 
+  N0 -0.673539 -0.181563 -0.716506   N1 -0.6981 8.11143e-17 -0.716   N2 -0.636383 1.97068e-16 -0.771373 
+   txt003 
+STRI 
+  V0 -1.62963 0 0.277778   V1 -1.57229 -0.437586 0.277778   V2 -1.68843 -0.469907 0.384375 
+  N0 -0.636383 1.97068e-16 -0.771373   N1 -0.61392 -0.165491 -0.771826   N2 -0.673539 -0.181563 -0.716506 
+   txt003 
+STRI 
+  V0 0 -1.62963 0.277778   V1 -0.437586 -1.57229 0.277778   V2 -0.412723 -1.48296 0.200347 
+  N0 -0 -0.636383 -0.771373   N1 -0.165491 -0.61392 -0.771826   N2 -0.175561 -0.651276 -0.738253 
+   txt003 
+STRI 
+  V0 -0.412723 -1.48296 0.200347   V1 0 -1.53704 0.200347   V2 0 -1.62963 0.277778 
+  N0 -0.175561 -0.651276 -0.738253   N1 -0 -0.675056 -0.737766   N2 -0 -0.636383 -0.771373 
+   txt003 
+STRI 
+  V0 -0.437586 -1.57229 0.277778   V1 -0.828093 -1.40993 0.277778   V2 -0.781043 -1.32982 0.200347 
+  N0 -0.165491 -0.61392 -0.771826   N1 -0.318647 -0.549392 -0.77242   N2 -0.338069 -0.582878 -0.738893 
+   txt003 
+STRI 
+  V0 -0.781043 -1.32982 0.200347   V1 -0.412723 -1.48296 0.200347   V2 -0.437586 -1.57229 0.277778 
+  N0 -0.338069 -0.582878 -0.738893   N1 -0.175561 -0.651276 -0.738253   N2 -0.165491 -0.61392 -0.771826 
+   txt003 
+STRI 
+  V0 -0.828093 -1.40993 0.277778   V1 -1.15704 -1.15704 0.277778   V2 -1.0913 -1.0913 0.200347 
+  N0 -0.318647 -0.549392 -0.77242   N1 -0.448897 -0.448897 -0.772647   N2 -0.476275 -0.476275 -0.739137 
+   txt003 
+STRI 
+  V0 -1.0913 -1.0913 0.200347   V1 -0.781043 -1.32982 0.200347   V2 -0.828093 -1.40993 0.277778 
+  N0 -0.476275 -0.476275 -0.739137   N1 -0.338069 -0.582878 -0.738893   N2 -0.318647 -0.549392 -0.77242 
+   txt003 
+STRI 
+  V0 -1.15704 -1.15704 0.277778   V1 -1.40993 -0.828093 0.277778   V2 -1.32982 -0.781043 0.200347 
+  N0 -0.448897 -0.448897 -0.772647   N1 -0.549392 -0.318647 -0.77242   N2 -0.582878 -0.338069 -0.738893 
+   txt003 
+STRI 
+  V0 -1.32982 -0.781043 0.200347   V1 -1.0913 -1.0913 0.200347   V2 -1.15704 -1.15704 0.277778 
+  N0 -0.582878 -0.338069 -0.738893   N1 -0.476275 -0.476275 -0.739137   N2 -0.448897 -0.448897 -0.772647 
+   txt003 
+STRI 
+  V0 -1.40993 -0.828093 0.277778   V1 -1.57229 -0.437586 0.277778   V2 -1.48296 -0.412723 0.200347 
+  N0 -0.549392 -0.318647 -0.77242   N1 -0.61392 -0.165491 -0.771826   N2 -0.651276 -0.175561 -0.738253 
+   txt003 
+STRI 
+  V0 -1.48296 -0.412723 0.200347   V1 -1.32982 -0.781043 0.200347   V2 -1.40993 -0.828093 0.277778 
+  N0 -0.651276 -0.175561 -0.738253   N1 -0.582878 -0.338069 -0.738893   N2 -0.549392 -0.318647 -0.77242 
+   txt003 
+STRI 
+  V0 -1.57229 -0.437586 0.277778   V1 -1.62963 0 0.277778   V2 -1.53704 0 0.200347 
+  N0 -0.61392 -0.165491 -0.771826   N1 -0.636383 1.97068e-16 -0.771373   N2 -0.675056 9.51605e-17 -0.737766 
+   txt003 
+STRI 
+  V0 -1.53704 0 0.200347   V1 -1.48296 -0.412723 0.200347   V2 -1.57229 -0.437586 0.277778 
+  N0 -0.675056 9.51605e-17 -0.737766   N1 -0.651276 -0.175561 -0.738253   N2 -0.61392 -0.165491 -0.771826 
+   txt003 
+STRI 
+  V0 0 -1.53704 0.200347   V1 -0.412723 -1.48296 0.200347   V2 -0.402778 -1.44722 0.15 
+  N0 -0 -0.675056 -0.737766   N1 -0.175561 -0.651276 -0.738253   N2 -0.260275 -0.965535 -0 
+   txt003 
+STRI 
+  V0 -0.402778 -1.44722 0.15   V1 0 -1.5 0.15   V2 0 -1.53704 0.200347 
+  N0 -0.260275 -0.965535 -0   N1 -0 -1 -0   N2 -0 -0.675056 -0.737766 
+   txt003 
+STRI 
+  V0 -0.412723 -1.48296 0.200347   V1 -0.781043 -1.32982 0.200347   V2 -0.762222 -1.29778 0.15 
+  N0 -0.175561 -0.651276 -0.738253   N1 -0.338069 -0.582878 -0.738893   N2 -0.501718 -0.865031 -0 
+   txt003 
+STRI 
+  V0 -0.762222 -1.29778 0.15   V1 -0.402778 -1.44722 0.15   V2 -0.412723 -1.48296 0.200347 
+  N0 -0.501718 -0.865031 -0   N1 -0.260275 -0.965535 -0   N2 -0.175561 -0.651276 -0.738253 
+   txt003 
+STRI 
+  V0 -0.781043 -1.32982 0.200347   V1 -1.0913 -1.0913 0.200347   V2 -1.065 -1.065 0.15 
+  N0 -0.338069 -0.582878 -0.738893   N1 -0.476275 -0.476275 -0.739137   N2 -0.707107 -0.707107 -0 
+   txt003 
+STRI 
+  V0 -1.065 -1.065 0.15   V1 -0.762222 -1.29778 0.15   V2 -0.781043 -1.32982 0.200347 
+  N0 -0.707107 -0.707107 -0   N1 -0.501718 -0.865031 -0   N2 -0.338069 -0.582878 -0.738893 
+   txt003 
+STRI 
+  V0 -1.0913 -1.0913 0.200347   V1 -1.32982 -0.781043 0.200347   V2 -1.29778 -0.762222 0.15 
+  N0 -0.476275 -0.476275 -0.739137   N1 -0.582878 -0.338069 -0.738893   N2 -0.865031 -0.501718 -0 
+   txt003 
+STRI 
+  V0 -1.29778 -0.762222 0.15   V1 -1.065 -1.065 0.15   V2 -1.0913 -1.0913 0.200347 
+  N0 -0.865031 -0.501718 -0   N1 -0.707107 -0.707107 -0   N2 -0.476275 -0.476275 -0.739137 
+   txt003 
+STRI 
+  V0 -1.32982 -0.781043 0.200347   V1 -1.48296 -0.412723 0.200347   V2 -1.44722 -0.402778 0.15 
+  N0 -0.582878 -0.338069 -0.738893   N1 -0.651276 -0.175561 -0.738253   N2 -0.965535 -0.260275 -0 
+   txt003 
+STRI 
+  V0 -1.44722 -0.402778 0.15   V1 -1.29778 -0.762222 0.15   V2 -1.32982 -0.781043 0.200347 
+  N0 -0.965535 -0.260275 -0   N1 -0.865031 -0.501718 -0   N2 -0.582878 -0.338069 -0.738893 
+   txt003 
+STRI 
+  V0 -1.48296 -0.412723 0.200347   V1 -1.53704 0 0.200347   V2 -1.5 0 0.15 
+  N0 -0.651276 -0.175561 -0.738253   N1 -0.675056 9.51605e-17 -0.737766   N2 -1 0 0 
+   txt003 
+STRI 
+  V0 -1.5 0 0.15   V1 -1.44722 -0.402778 0.15   V2 -1.48296 -0.412723 0.200347 
+  N0 -1 0 0   N1 -0.965535 -0.260275 -0   N2 -0.651276 -0.175561 -0.738253 
+   txt003 
+STRI 
+  V0 -2 0 0.9   V1 -1.92963 0.537037 0.9   V2 -1.8939 0.527092 0.693403 
+  N0 -1 0 0   N1 -0.965535 0.260275 0   N2 -0.905874 0.244192 -0.346067 
+   txt003 
+STRI 
+  V0 -1.8939 0.527092 0.693403   V1 -1.96296 0 0.693403   V2 -2 0 0.9 
+  N0 -0.905874 0.244192 -0.346067   N1 -0.938373 0 -0.345625   N2 -1 0 0 
+   txt003 
+STRI 
+  V0 -1.92963 0.537037 0.9   V1 -1.73037 1.0163 0.9   V2 -1.69833 0.997476 0.693403 
+  N0 -0.965535 0.260275 0   N1 -0.865031 0.501718 0   N2 -0.811395 0.470609 -0.346647 
+   txt003 
+STRI 
+  V0 -1.69833 0.997476 0.693403   V1 -1.8939 0.527092 0.693403   V2 -1.92963 0.537037 0.9 
+  N0 -0.811395 0.470609 -0.346647   N1 -0.905874 0.244192 -0.346067   N2 -0.965535 0.260275 0 
+   txt003 
+STRI 
+  V0 -1.73037 1.0163 0.9   V1 -1.42 1.42 0.9   V2 -1.3937 1.3937 0.693403 
+  N0 -0.865031 0.501718 0   N1 -0.707107 0.707107 0   N2 -0.663205 0.663205 -0.34687 
+   txt003 
+STRI 
+  V0 -1.3937 1.3937 0.693403   V1 -1.69833 0.997476 0.693403   V2 -1.73037 1.0163 0.9 
+  N0 -0.663205 0.663205 -0.34687   N1 -0.811395 0.470609 -0.346647   N2 -0.865031 0.501718 0 
+   txt003 
+STRI 
+  V0 -1.42 1.42 0.9   V1 -1.0163 1.73037 0.9   V2 -0.997476 1.69833 0.693403 
+  N0 -0.707107 0.707107 0   N1 -0.501718 0.865031 0   N2 -0.470609 0.811395 -0.346647 
+   txt003 
+STRI 
+  V0 -0.997476 1.69833 0.693403   V1 -1.3937 1.3937 0.693403   V2 -1.42 1.42 0.9 
+  N0 -0.470609 0.811395 -0.346647   N1 -0.663205 0.663205 -0.34687   N2 -0.707107 0.707107 0 
+   txt003 
+STRI 
+  V0 -1.0163 1.73037 0.9   V1 -0.537037 1.92963 0.9   V2 -0.527092 1.8939 0.693403 
+  N0 -0.501718 0.865031 0   N1 -0.260275 0.965535 0   N2 -0.244192 0.905874 -0.346067 
+   txt003 
+STRI 
+  V0 -0.527092 1.8939 0.693403   V1 -0.997476 1.69833 0.693403   V2 -1.0163 1.73037 0.9 
+  N0 -0.244192 0.905874 -0.346067   N1 -0.470609 0.811395 -0.346647   N2 -0.501718 0.865031 0 
+   txt003 
+STRI 
+  V0 -0.537037 1.92963 0.9   V1 0 2 0.9   V2 -2.22045e-16 1.96296 0.693403 
+  N0 -0.260275 0.965535 0   N1 -0 1 0   N2 3.49072e-17 0.938373 -0.345625 
+   txt003 
+STRI 
+  V0 -2.22045e-16 1.96296 0.693403   V1 -0.527092 1.8939 0.693403   V2 -0.537037 1.92963 0.9 
+  N0 3.49072e-17 0.938373 -0.345625   N1 -0.244192 0.905874 -0.346067   N2 -0.260275 0.965535 0 
+   txt003 
+STRI 
+  V0 -1.96296 0 0.693403   V1 -1.8939 0.527092 0.693403   V2 -1.80456 0.502229 0.522222 
+  N0 -0.938373 0 -0.345625   N1 -0.905874 0.244192 -0.346067   N2 -0.782908 0.211045 -0.585248 
+   txt003 
+STRI 
+  V0 -1.80456 0.502229 0.522222   V1 -1.87037 0 0.522222   V2 -1.96296 0 0.693403 
+  N0 -0.782908 0.211045 -0.585248   N1 -0.811257 0 -0.58469   N2 -0.938373 0 -0.345625 
+   txt003 
+STRI 
+  V0 -1.8939 0.527092 0.693403   V1 -1.69833 0.997476 0.693403   V2 -1.61822 0.950425 0.522222 
+  N0 -0.905874 0.244192 -0.346067   N1 -0.811395 0.470609 -0.346647   N2 -0.700957 0.406555 -0.58598 
+   txt003 
+STRI 
+  V0 -1.61822 0.950425 0.522222   V1 -1.80456 0.502229 0.522222   V2 -1.8939 0.527092 0.693403 
+  N0 -0.700957 0.406555 -0.58598   N1 -0.782908 0.211045 -0.585248   N2 -0.905874 0.244192 -0.346067 
+   txt003 
+STRI 
+  V0 -1.69833 0.997476 0.693403   V1 -1.3937 1.3937 0.693403   V2 -1.32796 1.32796 0.522222 
+  N0 -0.811395 0.470609 -0.346647   N1 -0.663205 0.663205 -0.34687   N2 -0.572843 0.572843 -0.586261 
+   txt003 
+STRI 
+  V0 -1.32796 1.32796 0.522222   V1 -1.61822 0.950425 0.522222   V2 -1.69833 0.997476 0.693403 
+  N0 -0.572843 0.572843 -0.586261   N1 -0.700957 0.406555 -0.58598   N2 -0.811395 0.470609 -0.346647 
+   txt003 
+STRI 
+  V0 -1.3937 1.3937 0.693403   V1 -0.997476 1.69833 0.693403   V2 -0.950425 1.61822 0.522222 
+  N0 -0.663205 0.663205 -0.34687   N1 -0.470609 0.811395 -0.346647   N2 -0.406555 0.700957 -0.58598 
+   txt003 
+STRI 
+  V0 -0.950425 1.61822 0.522222   V1 -1.32796 1.32796 0.522222   V2 -1.3937 1.3937 0.693403 
+  N0 -0.406555 0.700957 -0.58598   N1 -0.572843 0.572843 -0.586261   N2 -0.663205 0.663205 -0.34687 
+   txt003 
+STRI 
+  V0 -0.997476 1.69833 0.693403   V1 -0.527092 1.8939 0.693403   V2 -0.502229 1.80456 0.522222 
+  N0 -0.470609 0.811395 -0.346647   N1 -0.244192 0.905874 -0.346067   N2 -0.211045 0.782908 -0.585248 
+   txt003 
+STRI 
+  V0 -0.502229 1.80456 0.522222   V1 -0.950425 1.61822 0.522222   V2 -0.997476 1.69833 0.693403 
+  N0 -0.211045 0.782908 -0.585248   N1 -0.406555 0.700957 -0.58598   N2 -0.470609 0.811395 -0.346647 
+   txt003 
+STRI 
+  V0 -0.527092 1.8939 0.693403   V1 -2.22045e-16 1.96296 0.693403   V2 -2.22045e-16 1.87037 0.522222 
+  N0 -0.244192 0.905874 -0.346067   N1 3.49072e-17 0.938373 -0.345625   N2 6.19755e-17 0.811257 -0.58469 
+   txt003 
+STRI 
+  V0 -2.22045e-16 1.87037 0.522222   V1 -0.502229 1.80456 0.522222   V2 -0.527092 1.8939 0.693403 
+  N0 6.19755e-17 0.811257 -0.58469   N1 -0.211045 0.782908 -0.585248   N2 -0.244192 0.905874 -0.346067 
+   txt003 
+STRI 
+  V0 -1.87037 0 0.522222   V1 -1.80456 0.502229 0.522222   V2 -1.68843 0.469907 0.384375 
+  N0 -0.811257 0 -0.58469   N1 -0.782908 0.211045 -0.585248   N2 -0.673539 0.181563 -0.716506 
+   txt003 
+STRI 
+  V0 -1.68843 0.469907 0.384375   V1 -1.75 0 0.384375   V2 -1.87037 0 0.522222 
+  N0 -0.673539 0.181563 -0.716506   N1 -0.6981 0 -0.716   N2 -0.811257 0 -0.58469 
+   txt003 
+STRI 
+  V0 -1.80456 0.502229 0.522222   V1 -1.61822 0.950425 0.522222   V2 -1.51407 0.889259 0.384375 
+  N0 -0.782908 0.211045 -0.585248   N1 -0.700957 0.406555 -0.58598   N2 -0.602839 0.349647 -0.717169 
+   txt003 
+STRI 
+  V0 -1.51407 0.889259 0.384375   V1 -1.68843 0.469907 0.384375   V2 -1.80456 0.502229 0.522222 
+  N0 -0.602839 0.349647 -0.717169   N1 -0.673539 0.181563 -0.716506   N2 -0.782908 0.211045 -0.585248 
+   txt003 
+STRI 
+  V0 -1.61822 0.950425 0.522222   V1 -1.32796 1.32796 0.522222   V2 -1.2425 1.2425 0.384375 
+  N0 -0.700957 0.406555 -0.58598   N1 -0.572843 0.572843 -0.586261   N2 -0.492597 0.492597 -0.717423 
+   txt003 
+STRI 
+  V0 -1.2425 1.2425 0.384375   V1 -1.51407 0.889259 0.384375   V2 -1.61822 0.950425 0.522222 
+  N0 -0.492597 0.492597 -0.717423   N1 -0.602839 0.349647 -0.717169   N2 -0.700957 0.406555 -0.58598 
+   txt003 
+STRI 
+  V0 -1.32796 1.32796 0.522222   V1 -0.950425 1.61822 0.522222   V2 -0.889259 1.51407 0.384375 
+  N0 -0.572843 0.572843 -0.586261   N1 -0.406555 0.700957 -0.58598   N2 -0.349647 0.602839 -0.717169 
+   txt003 
+STRI 
+  V0 -0.889259 1.51407 0.384375   V1 -1.2425 1.2425 0.384375   V2 -1.32796 1.32796 0.522222 
+  N0 -0.349647 0.602839 -0.717169   N1 -0.492597 0.492597 -0.717423   N2 -0.572843 0.572843 -0.586261 
+   txt003 
+STRI 
+  V0 -0.950425 1.61822 0.522222   V1 -0.502229 1.80456 0.522222   V2 -0.469907 1.68843 0.384375 
+  N0 -0.406555 0.700957 -0.58598   N1 -0.211045 0.782908 -0.585248   N2 -0.181563 0.673539 -0.716506 
+   txt003 
+STRI 
+  V0 -0.469907 1.68843 0.384375   V1 -0.889259 1.51407 0.384375   V2 -0.950425 1.61822 0.522222 
+  N0 -0.181563 0.673539 -0.716506   N1 -0.349647 0.602839 -0.717169   N2 -0.406555 0.700957 -0.58598 
+   txt003 
+STRI 
+  V0 -0.502229 1.80456 0.522222   V1 -2.22045e-16 1.87037 0.522222   V2 -2.22045e-16 1.75 0.384375 
+  N0 -0.211045 0.782908 -0.585248   N1 6.19755e-17 0.811257 -0.58469   N2 8.11143e-17 0.6981 -0.716 
+   txt003 
+STRI 
+  V0 -2.22045e-16 1.75 0.384375   V1 -0.469907 1.68843 0.384375   V2 -0.502229 1.80456 0.522222 
+  N0 8.11143e-17 0.6981 -0.716   N1 -0.181563 0.673539 -0.716506   N2 -0.211045 0.782908 -0.585248 
+   txt003 
+STRI 
+  V0 -1.75 0 0.384375   V1 -1.68843 0.469907 0.384375   V2 -1.57229 0.437586 0.277778 
+  N0 -0.6981 0 -0.716   N1 -0.673539 0.181563 -0.716506   N2 -0.61392 0.165491 -0.771826 
+   txt003 
+STRI 
+  V0 -1.57229 0.437586 0.277778   V1 -1.62963 0 0.277778   V2 -1.75 0 0.384375 
+  N0 -0.61392 0.165491 -0.771826   N1 -0.636383 0 -0.771373   N2 -0.6981 0 -0.716 
+   txt003 
+STRI 
+  V0 -1.68843 0.469907 0.384375   V1 -1.51407 0.889259 0.384375   V2 -1.40993 0.828093 0.277778 
+  N0 -0.673539 0.181563 -0.716506   N1 -0.602839 0.349647 -0.717169   N2 -0.549392 0.318647 -0.77242 
+   txt003 
+STRI 
+  V0 -1.40993 0.828093 0.277778   V1 -1.57229 0.437586 0.277778   V2 -1.68843 0.469907 0.384375 
+  N0 -0.549392 0.318647 -0.77242   N1 -0.61392 0.165491 -0.771826   N2 -0.673539 0.181563 -0.716506 
+   txt003 
+STRI 
+  V0 -1.51407 0.889259 0.384375   V1 -1.2425 1.2425 0.384375   V2 -1.15704 1.15704 0.277778 
+  N0 -0.602839 0.349647 -0.717169   N1 -0.492597 0.492597 -0.717423   N2 -0.448897 0.448897 -0.772647 
+   txt003 
+STRI 
+  V0 -1.15704 1.15704 0.277778   V1 -1.40993 0.828093 0.277778   V2 -1.51407 0.889259 0.384375 
+  N0 -0.448897 0.448897 -0.772647   N1 -0.549392 0.318647 -0.77242   N2 -0.602839 0.349647 -0.717169 
+   txt003 
+STRI 
+  V0 -1.2425 1.2425 0.384375   V1 -0.889259 1.51407 0.384375   V2 -0.828093 1.40993 0.277778 
+  N0 -0.492597 0.492597 -0.717423   N1 -0.349647 0.602839 -0.717169   N2 -0.318647 0.549392 -0.77242 
+   txt003 
+STRI 
+  V0 -0.828093 1.40993 0.277778   V1 -1.15704 1.15704 0.277778   V2 -1.2425 1.2425 0.384375 
+  N0 -0.318647 0.549392 -0.77242   N1 -0.448897 0.448897 -0.772647   N2 -0.492597 0.492597 -0.717423 
+   txt003 
+STRI 
+  V0 -0.889259 1.51407 0.384375   V1 -0.469907 1.68843 0.384375   V2 -0.437586 1.57229 0.277778 
+  N0 -0.349647 0.602839 -0.717169   N1 -0.181563 0.673539 -0.716506   N2 -0.165491 0.61392 -0.771826 
+   txt003 
+STRI 
+  V0 -0.437586 1.57229 0.277778   V1 -0.828093 1.40993 0.277778   V2 -0.889259 1.51407 0.384375 
+  N0 -0.165491 0.61392 -0.771826   N1 -0.318647 0.549392 -0.77242   N2 -0.349647 0.602839 -0.717169 
+   txt003 
+STRI 
+  V0 -0.469907 1.68843 0.384375   V1 -2.22045e-16 1.75 0.384375   V2 0 1.62963 0.277778 
+  N0 -0.181563 0.673539 -0.716506   N1 8.11143e-17 0.6981 -0.716   N2 1.97068e-16 0.636383 -0.771373 
+   txt003 
+STRI 
+  V0 0 1.62963 0.277778   V1 -0.437586 1.57229 0.277778   V2 -0.469907 1.68843 0.384375 
+  N0 1.97068e-16 0.636383 -0.771373   N1 -0.165491 0.61392 -0.771826   N2 -0.181563 0.673539 -0.716506 
+   txt003 
+STRI 
+  V0 -1.62963 0 0.277778   V1 -1.57229 0.437586 0.277778   V2 -1.48296 0.412723 0.200347 
+  N0 -0.636383 0 -0.771373   N1 -0.61392 0.165491 -0.771826   N2 -0.651276 0.175561 -0.738253 
+   txt003 
+STRI 
+  V0 -1.48296 0.412723 0.200347   V1 -1.53704 0 0.200347   V2 -1.62963 0 0.277778 
+  N0 -0.651276 0.175561 -0.738253   N1 -0.675056 0 -0.737766   N2 -0.636383 0 -0.771373 
+   txt003 
+STRI 
+  V0 -1.57229 0.437586 0.277778   V1 -1.40993 0.828093 0.277778   V2 -1.32982 0.781043 0.200347 
+  N0 -0.61392 0.165491 -0.771826   N1 -0.549392 0.318647 -0.77242   N2 -0.582878 0.338069 -0.738893 
+   txt003 
+STRI 
+  V0 -1.32982 0.781043 0.200347   V1 -1.48296 0.412723 0.200347   V2 -1.57229 0.437586 0.277778 
+  N0 -0.582878 0.338069 -0.738893   N1 -0.651276 0.175561 -0.738253   N2 -0.61392 0.165491 -0.771826 
+   txt003 
+STRI 
+  V0 -1.40993 0.828093 0.277778   V1 -1.15704 1.15704 0.277778   V2 -1.0913 1.0913 0.200347 
+  N0 -0.549392 0.318647 -0.77242   N1 -0.448897 0.448897 -0.772647   N2 -0.476275 0.476275 -0.739137 
+   txt003 
+STRI 
+  V0 -1.0913 1.0913 0.200347   V1 -1.32982 0.781043 0.200347   V2 -1.40993 0.828093 0.277778 
+  N0 -0.476275 0.476275 -0.739137   N1 -0.582878 0.338069 -0.738893   N2 -0.549392 0.318647 -0.77242 
+   txt003 
+STRI 
+  V0 -1.15704 1.15704 0.277778   V1 -0.828093 1.40993 0.277778   V2 -0.781043 1.32982 0.200347 
+  N0 -0.448897 0.448897 -0.772647   N1 -0.318647 0.549392 -0.77242   N2 -0.338069 0.582878 -0.738893 
+   txt003 
+STRI 
+  V0 -0.781043 1.32982 0.200347   V1 -1.0913 1.0913 0.200347   V2 -1.15704 1.15704 0.277778 
+  N0 -0.338069 0.582878 -0.738893   N1 -0.476275 0.476275 -0.739137   N2 -0.448897 0.448897 -0.772647 
+   txt003 
+STRI 
+  V0 -0.828093 1.40993 0.277778   V1 -0.437586 1.57229 0.277778   V2 -0.412723 1.48296 0.200347 
+  N0 -0.318647 0.549392 -0.77242   N1 -0.165491 0.61392 -0.771826   N2 -0.175561 0.651276 -0.738253 
+   txt003 
+STRI 
+  V0 -0.412723 1.48296 0.200347   V1 -0.781043 1.32982 0.200347   V2 -0.828093 1.40993 0.277778 
+  N0 -0.175561 0.651276 -0.738253   N1 -0.338069 0.582878 -0.738893   N2 -0.318647 0.549392 -0.77242 
+   txt003 
+STRI 
+  V0 -0.437586 1.57229 0.277778   V1 0 1.62963 0.277778   V2 0 1.53704 0.200347 
+  N0 -0.165491 0.61392 -0.771826   N1 1.97068e-16 0.636383 -0.771373   N2 9.51605e-17 0.675056 -0.737766 
+   txt003 
+STRI 
+  V0 0 1.53704 0.200347   V1 -0.412723 1.48296 0.200347   V2 -0.437586 1.57229 0.277778 
+  N0 9.51605e-17 0.675056 -0.737766   N1 -0.175561 0.651276 -0.738253   N2 -0.165491 0.61392 -0.771826 
+   txt003 
+STRI 
+  V0 -1.53704 0 0.200347   V1 -1.48296 0.412723 0.200347   V2 -1.44722 0.402778 0.15 
+  N0 -0.675056 0 -0.737766   N1 -0.651276 0.175561 -0.738253   N2 -0.965535 0.260275 0 
+   txt003 
+STRI 
+  V0 -1.44722 0.402778 0.15   V1 -1.5 0 0.15   V2 -1.53704 0 0.200347 
+  N0 -0.965535 0.260275 0   N1 -1 0 0   N2 -0.675056 0 -0.737766 
+   txt003 
+STRI 
+  V0 -1.48296 0.412723 0.200347   V1 -1.32982 0.781043 0.200347   V2 -1.29778 0.762222 0.15 
+  N0 -0.651276 0.175561 -0.738253   N1 -0.582878 0.338069 -0.738893   N2 -0.865031 0.501718 0 
+   txt003 
+STRI 
+  V0 -1.29778 0.762222 0.15   V1 -1.44722 0.402778 0.15   V2 -1.48296 0.412723 0.200347 
+  N0 -0.865031 0.501718 0   N1 -0.965535 0.260275 0   N2 -0.651276 0.175561 -0.738253 
+   txt003 
+STRI 
+  V0 -1.32982 0.781043 0.200347   V1 -1.0913 1.0913 0.200347   V2 -1.065 1.065 0.15 
+  N0 -0.582878 0.338069 -0.738893   N1 -0.476275 0.476275 -0.739137   N2 -0.707107 0.707107 0 
+   txt003 
+STRI 
+  V0 -1.065 1.065 0.15   V1 -1.29778 0.762222 0.15   V2 -1.32982 0.781043 0.200347 
+  N0 -0.707107 0.707107 0   N1 -0.865031 0.501718 0   N2 -0.582878 0.338069 -0.738893 
+   txt003 
+STRI 
+  V0 -1.0913 1.0913 0.200347   V1 -0.781043 1.32982 0.200347   V2 -0.762222 1.29778 0.15 
+  N0 -0.476275 0.476275 -0.739137   N1 -0.338069 0.582878 -0.738893   N2 -0.501718 0.865031 0 
+   txt003 
+STRI 
+  V0 -0.762222 1.29778 0.15   V1 -1.065 1.065 0.15   V2 -1.0913 1.0913 0.200347 
+  N0 -0.501718 0.865031 0   N1 -0.707107 0.707107 0   N2 -0.476275 0.476275 -0.739137 
+   txt003 
+STRI 
+  V0 -0.781043 1.32982 0.200347   V1 -0.412723 1.48296 0.200347   V2 -0.402778 1.44722 0.15 
+  N0 -0.338069 0.582878 -0.738893   N1 -0.175561 0.651276 -0.738253   N2 -0.260275 0.965535 0 
+   txt003 
+STRI 
+  V0 -0.402778 1.44722 0.15   V1 -0.762222 1.29778 0.15   V2 -0.781043 1.32982 0.200347 
+  N0 -0.260275 0.965535 0   N1 -0.501718 0.865031 0   N2 -0.338069 0.582878 -0.738893 
+   txt003 
+STRI 
+  V0 -0.412723 1.48296 0.200347   V1 0 1.53704 0.200347   V2 0 1.5 0.15 
+  N0 -0.175561 0.651276 -0.738253   N1 9.51605e-17 0.675056 -0.737766   N2 -0 1 0 
+   txt003 
+STRI 
+  V0 0 1.5 0.15   V1 -0.402778 1.44722 0.15   V2 -0.412723 1.48296 0.200347 
+  N0 -0 1 0   N1 -0.260275 0.965535 0   N2 -0.175561 0.651276 -0.738253 
+   txt003 
+STRI 
+  V0 0 2 0.9   V1 0.537037 1.92963 0.9   V2 0.527092 1.8939 0.693403 
+  N0 -0 1 0   N1 0.260275 0.965535 0   N2 0.244192 0.905874 -0.346067 
+   txt003 
+STRI 
+  V0 0.527092 1.8939 0.693403   V1 0 1.96296 0.693403   V2 0 2 0.9 
+  N0 0.244192 0.905874 -0.346067   N1 0 0.938373 -0.345625   N2 -0 1 0 
+   txt003 
+STRI 
+  V0 0.537037 1.92963 0.9   V1 1.0163 1.73037 0.9   V2 0.997476 1.69833 0.693403 
+  N0 0.260275 0.965535 0   N1 0.501718 0.865031 0   N2 0.470609 0.811395 -0.346647 
+   txt003 
+STRI 
+  V0 0.997476 1.69833 0.693403   V1 0.527092 1.8939 0.693403   V2 0.537037 1.92963 0.9 
+  N0 0.470609 0.811395 -0.346647   N1 0.244192 0.905874 -0.346067   N2 0.260275 0.965535 0 
+   txt003 
+STRI 
+  V0 1.0163 1.73037 0.9   V1 1.42 1.42 0.9   V2 1.3937 1.3937 0.693403 
+  N0 0.501718 0.865031 0   N1 0.707107 0.707107 0   N2 0.663205 0.663205 -0.34687 
+   txt003 
+STRI 
+  V0 1.3937 1.3937 0.693403   V1 0.997476 1.69833 0.693403   V2 1.0163 1.73037 0.9 
+  N0 0.663205 0.663205 -0.34687   N1 0.470609 0.811395 -0.346647   N2 0.501718 0.865031 0 
+   txt003 
+STRI 
+  V0 1.42 1.42 0.9   V1 1.73037 1.0163 0.9   V2 1.69833 0.997476 0.693403 
+  N0 0.707107 0.707107 0   N1 0.865031 0.501718 0   N2 0.811395 0.470609 -0.346647 
+   txt003 
+STRI 
+  V0 1.69833 0.997476 0.693403   V1 1.3937 1.3937 0.693403   V2 1.42 1.42 0.9 
+  N0 0.811395 0.470609 -0.346647   N1 0.663205 0.663205 -0.34687   N2 0.707107 0.707107 0 
+   txt003 
+STRI 
+  V0 1.73037 1.0163 0.9   V1 1.92963 0.537037 0.9   V2 1.8939 0.527092 0.693403 
+  N0 0.865031 0.501718 0   N1 0.965535 0.260275 0   N2 0.905874 0.244192 -0.346067 
+   txt003 
+STRI 
+  V0 1.8939 0.527092 0.693403   V1 1.69833 0.997476 0.693403   V2 1.73037 1.0163 0.9 
+  N0 0.905874 0.244192 -0.346067   N1 0.811395 0.470609 -0.346647   N2 0.865031 0.501718 0 
+   txt003 
+STRI 
+  V0 1.92963 0.537037 0.9   V1 2 0 0.9   V2 1.96296 2.22045e-16 0.693403 
+  N0 0.965535 0.260275 0   N1 1 0 0   N2 0.938373 -3.49072e-17 -0.345625 
+   txt003 
+STRI 
+  V0 1.96296 2.22045e-16 0.693403   V1 1.8939 0.527092 0.693403   V2 1.92963 0.537037 0.9 
+  N0 0.938373 -3.49072e-17 -0.345625   N1 0.905874 0.244192 -0.346067   N2 0.965535 0.260275 0 
+   txt003 
+STRI 
+  V0 0 1.96296 0.693403   V1 0.527092 1.8939 0.693403   V2 0.502229 1.80456 0.522222 
+  N0 0 0.938373 -0.345625   N1 0.244192 0.905874 -0.346067   N2 0.211045 0.782908 -0.585248 
+   txt003 
+STRI 
+  V0 0.502229 1.80456 0.522222   V1 0 1.87037 0.522222   V2 0 1.96296 0.693403 
+  N0 0.211045 0.782908 -0.585248   N1 0 0.811257 -0.58469   N2 0 0.938373 -0.345625 
+   txt003 
+STRI 
+  V0 0.527092 1.8939 0.693403   V1 0.997476 1.69833 0.693403   V2 0.950425 1.61822 0.522222 
+  N0 0.244192 0.905874 -0.346067   N1 0.470609 0.811395 -0.346647   N2 0.406555 0.700957 -0.58598 
+   txt003 
+STRI 
+  V0 0.950425 1.61822 0.522222   V1 0.502229 1.80456 0.522222   V2 0.527092 1.8939 0.693403 
+  N0 0.406555 0.700957 -0.58598   N1 0.211045 0.782908 -0.585248   N2 0.244192 0.905874 -0.346067 
+   txt003 
+STRI 
+  V0 0.997476 1.69833 0.693403   V1 1.3937 1.3937 0.693403   V2 1.32796 1.32796 0.522222 
+  N0 0.470609 0.811395 -0.346647   N1 0.663205 0.663205 -0.34687   N2 0.572843 0.572843 -0.586261 
+   txt003 
+STRI 
+  V0 1.32796 1.32796 0.522222   V1 0.950425 1.61822 0.522222   V2 0.997476 1.69833 0.693403 
+  N0 0.572843 0.572843 -0.586261   N1 0.406555 0.700957 -0.58598   N2 0.470609 0.811395 -0.346647 
+   txt003 
+STRI 
+  V0 1.3937 1.3937 0.693403   V1 1.69833 0.997476 0.693403   V2 1.61822 0.950425 0.522222 
+  N0 0.663205 0.663205 -0.34687   N1 0.811395 0.470609 -0.346647   N2 0.700957 0.406555 -0.58598 
+   txt003 
+STRI 
+  V0 1.61822 0.950425 0.522222   V1 1.32796 1.32796 0.522222   V2 1.3937 1.3937 0.693403 
+  N0 0.700957 0.406555 -0.58598   N1 0.572843 0.572843 -0.586261   N2 0.663205 0.663205 -0.34687 
+   txt003 
+STRI 
+  V0 1.69833 0.997476 0.693403   V1 1.8939 0.527092 0.693403   V2 1.80456 0.502229 0.522222 
+  N0 0.811395 0.470609 -0.346647   N1 0.905874 0.244192 -0.346067   N2 0.782908 0.211045 -0.585248 
+   txt003 
+STRI 
+  V0 1.80456 0.502229 0.522222   V1 1.61822 0.950425 0.522222   V2 1.69833 0.997476 0.693403 
+  N0 0.782908 0.211045 -0.585248   N1 0.700957 0.406555 -0.58598   N2 0.811395 0.470609 -0.346647 
+   txt003 
+STRI 
+  V0 1.8939 0.527092 0.693403   V1 1.96296 2.22045e-16 0.693403   V2 1.87037 2.22045e-16 0.522222 
+  N0 0.905874 0.244192 -0.346067   N1 0.938373 -3.49072e-17 -0.345625   N2 0.811257 -6.19755e-17 -0.58469 
+   txt003 
+STRI 
+  V0 1.87037 2.22045e-16 0.522222   V1 1.80456 0.502229 0.522222   V2 1.8939 0.527092 0.693403 
+  N0 0.811257 -6.19755e-17 -0.58469   N1 0.782908 0.211045 -0.585248   N2 0.905874 0.244192 -0.346067 
+   txt003 
+STRI 
+  V0 0 1.87037 0.522222   V1 0.502229 1.80456 0.522222   V2 0.469907 1.68843 0.384375 
+  N0 0 0.811257 -0.58469   N1 0.211045 0.782908 -0.585248   N2 0.181563 0.673539 -0.716506 
+   txt003 
+STRI 
+  V0 0.469907 1.68843 0.384375   V1 0 1.75 0.384375   V2 0 1.87037 0.522222 
+  N0 0.181563 0.673539 -0.716506   N1 0 0.6981 -0.716   N2 0 0.811257 -0.58469 
+   txt003 
+STRI 
+  V0 0.502229 1.80456 0.522222   V1 0.950425 1.61822 0.522222   V2 0.889259 1.51407 0.384375 
+  N0 0.211045 0.782908 -0.585248   N1 0.406555 0.700957 -0.58598   N2 0.349647 0.602839 -0.717169 
+   txt003 
+STRI 
+  V0 0.889259 1.51407 0.384375   V1 0.469907 1.68843 0.384375   V2 0.502229 1.80456 0.522222 
+  N0 0.349647 0.602839 -0.717169   N1 0.181563 0.673539 -0.716506   N2 0.211045 0.782908 -0.585248 
+   txt003 
+STRI 
+  V0 0.950425 1.61822 0.522222   V1 1.32796 1.32796 0.522222   V2 1.2425 1.2425 0.384375 
+  N0 0.406555 0.700957 -0.58598   N1 0.572843 0.572843 -0.586261   N2 0.492597 0.492597 -0.717423 
+   txt003 
+STRI 
+  V0 1.2425 1.2425 0.384375   V1 0.889259 1.51407 0.384375   V2 0.950425 1.61822 0.522222 
+  N0 0.492597 0.492597 -0.717423   N1 0.349647 0.602839 -0.717169   N2 0.406555 0.700957 -0.58598 
+   txt003 
+STRI 
+  V0 1.32796 1.32796 0.522222   V1 1.61822 0.950425 0.522222   V2 1.51407 0.889259 0.384375 
+  N0 0.572843 0.572843 -0.586261   N1 0.700957 0.406555 -0.58598   N2 0.602839 0.349647 -0.717169 
+   txt003 
+STRI 
+  V0 1.51407 0.889259 0.384375   V1 1.2425 1.2425 0.384375   V2 1.32796 1.32796 0.522222 
+  N0 0.602839 0.349647 -0.717169   N1 0.492597 0.492597 -0.717423   N2 0.572843 0.572843 -0.586261 
+   txt003 
+STRI 
+  V0 1.61822 0.950425 0.522222   V1 1.80456 0.502229 0.522222   V2 1.68843 0.469907 0.384375 
+  N0 0.700957 0.406555 -0.58598   N1 0.782908 0.211045 -0.585248   N2 0.673539 0.181563 -0.716506 
+   txt003 
+STRI 
+  V0 1.68843 0.469907 0.384375   V1 1.51407 0.889259 0.384375   V2 1.61822 0.950425 0.522222 
+  N0 0.673539 0.181563 -0.716506   N1 0.602839 0.349647 -0.717169   N2 0.700957 0.406555 -0.58598 
+   txt003 
+STRI 
+  V0 1.80456 0.502229 0.522222   V1 1.87037 2.22045e-16 0.522222   V2 1.75 2.22045e-16 0.384375 
+  N0 0.782908 0.211045 -0.585248   N1 0.811257 -6.19755e-17 -0.58469   N2 0.6981 -8.11143e-17 -0.716 
+   txt003 
+STRI 
+  V0 1.75 2.22045e-16 0.384375   V1 1.68843 0.469907 0.384375   V2 1.80456 0.502229 0.522222 
+  N0 0.6981 -8.11143e-17 -0.716   N1 0.673539 0.181563 -0.716506   N2 0.782908 0.211045 -0.585248 
+   txt003 
+STRI 
+  V0 0 1.75 0.384375   V1 0.469907 1.68843 0.384375   V2 0.437586 1.57229 0.277778 
+  N0 0 0.6981 -0.716   N1 0.181563 0.673539 -0.716506   N2 0.165491 0.61392 -0.771826 
+   txt003 
+STRI 
+  V0 0.437586 1.57229 0.277778   V1 0 1.62963 0.277778   V2 0 1.75 0.384375 
+  N0 0.165491 0.61392 -0.771826   N1 0 0.636383 -0.771373   N2 0 0.6981 -0.716 
+   txt003 
+STRI 
+  V0 0.469907 1.68843 0.384375   V1 0.889259 1.51407 0.384375   V2 0.828093 1.40993 0.277778 
+  N0 0.181563 0.673539 -0.716506   N1 0.349647 0.602839 -0.717169   N2 0.318647 0.549392 -0.77242 
+   txt003 
+STRI 
+  V0 0.828093 1.40993 0.277778   V1 0.437586 1.57229 0.277778   V2 0.469907 1.68843 0.384375 
+  N0 0.318647 0.549392 -0.77242   N1 0.165491 0.61392 -0.771826   N2 0.181563 0.673539 -0.716506 
+   txt003 
+STRI 
+  V0 0.889259 1.51407 0.384375   V1 1.2425 1.2425 0.384375   V2 1.15704 1.15704 0.277778 
+  N0 0.349647 0.602839 -0.717169   N1 0.492597 0.492597 -0.717423   N2 0.448897 0.448897 -0.772647 
+   txt003 
+STRI 
+  V0 1.15704 1.15704 0.277778   V1 0.828093 1.40993 0.277778   V2 0.889259 1.51407 0.384375 
+  N0 0.448897 0.448897 -0.772647   N1 0.318647 0.549392 -0.77242   N2 0.349647 0.602839 -0.717169 
+   txt003 
+STRI 
+  V0 1.2425 1.2425 0.384375   V1 1.51407 0.889259 0.384375   V2 1.40993 0.828093 0.277778 
+  N0 0.492597 0.492597 -0.717423   N1 0.602839 0.349647 -0.717169   N2 0.549392 0.318647 -0.77242 
+   txt003 
+STRI 
+  V0 1.40993 0.828093 0.277778   V1 1.15704 1.15704 0.277778   V2 1.2425 1.2425 0.384375 
+  N0 0.549392 0.318647 -0.77242   N1 0.448897 0.448897 -0.772647   N2 0.492597 0.492597 -0.717423 
+   txt003 
+STRI 
+  V0 1.51407 0.889259 0.384375   V1 1.68843 0.469907 0.384375   V2 1.57229 0.437586 0.277778 
+  N0 0.602839 0.349647 -0.717169   N1 0.673539 0.181563 -0.716506   N2 0.61392 0.165491 -0.771826 
+   txt003 
+STRI 
+  V0 1.57229 0.437586 0.277778   V1 1.40993 0.828093 0.277778   V2 1.51407 0.889259 0.384375 
+  N0 0.61392 0.165491 -0.771826   N1 0.549392 0.318647 -0.77242   N2 0.602839 0.349647 -0.717169 
+   txt003 
+STRI 
+  V0 1.68843 0.469907 0.384375   V1 1.75 2.22045e-16 0.384375   V2 1.62963 0 0.277778 
+  N0 0.673539 0.181563 -0.716506   N1 0.6981 -8.11143e-17 -0.716   N2 0.636383 -1.97068e-16 -0.771373 
+   txt003 
+STRI 
+  V0 1.62963 0 0.277778   V1 1.57229 0.437586 0.277778   V2 1.68843 0.469907 0.384375 
+  N0 0.636383 -1.97068e-16 -0.771373   N1 0.61392 0.165491 -0.771826   N2 0.673539 0.181563 -0.716506 
+   txt003 
+STRI 
+  V0 0 1.62963 0.277778   V1 0.437586 1.57229 0.277778   V2 0.412723 1.48296 0.200347 
+  N0 0 0.636383 -0.771373   N1 0.165491 0.61392 -0.771826   N2 0.175561 0.651276 -0.738253 
+   txt003 
+STRI 
+  V0 0.412723 1.48296 0.200347   V1 0 1.53704 0.200347   V2 0 1.62963 0.277778 
+  N0 0.175561 0.651276 -0.738253   N1 0 0.675056 -0.737766   N2 0 0.636383 -0.771373 
+   txt003 
+STRI 
+  V0 0.437586 1.57229 0.277778   V1 0.828093 1.40993 0.277778   V2 0.781043 1.32982 0.200347 
+  N0 0.165491 0.61392 -0.771826   N1 0.318647 0.549392 -0.77242   N2 0.338069 0.582878 -0.738893 
+   txt003 
+STRI 
+  V0 0.781043 1.32982 0.200347   V1 0.412723 1.48296 0.200347   V2 0.437586 1.57229 0.277778 
+  N0 0.338069 0.582878 -0.738893   N1 0.175561 0.651276 -0.738253   N2 0.165491 0.61392 -0.771826 
+   txt003 
+STRI 
+  V0 0.828093 1.40993 0.277778   V1 1.15704 1.15704 0.277778   V2 1.0913 1.0913 0.200347 
+  N0 0.318647 0.549392 -0.77242   N1 0.448897 0.448897 -0.772647   N2 0.476275 0.476275 -0.739137 
+   txt003 
+STRI 
+  V0 1.0913 1.0913 0.200347   V1 0.781043 1.32982 0.200347   V2 0.828093 1.40993 0.277778 
+  N0 0.476275 0.476275 -0.739137   N1 0.338069 0.582878 -0.738893   N2 0.318647 0.549392 -0.77242 
+   txt003 
+STRI 
+  V0 1.15704 1.15704 0.277778   V1 1.40993 0.828093 0.277778   V2 1.32982 0.781043 0.200347 
+  N0 0.448897 0.448897 -0.772647   N1 0.549392 0.318647 -0.77242   N2 0.582878 0.338069 -0.738893 
+   txt003 
+STRI 
+  V0 1.32982 0.781043 0.200347   V1 1.0913 1.0913 0.200347   V2 1.15704 1.15704 0.277778 
+  N0 0.582878 0.338069 -0.738893   N1 0.476275 0.476275 -0.739137   N2 0.448897 0.448897 -0.772647 
+   txt003 
+STRI 
+  V0 1.40993 0.828093 0.277778   V1 1.57229 0.437586 0.277778   V2 1.48296 0.412723 0.200347 
+  N0 0.549392 0.318647 -0.77242   N1 0.61392 0.165491 -0.771826   N2 0.651276 0.175561 -0.738253 
+   txt003 
+STRI 
+  V0 1.48296 0.412723 0.200347   V1 1.32982 0.781043 0.200347   V2 1.40993 0.828093 0.277778 
+  N0 0.651276 0.175561 -0.738253   N1 0.582878 0.338069 -0.738893   N2 0.549392 0.318647 -0.77242 
+   txt003 
+STRI 
+  V0 1.57229 0.437586 0.277778   V1 1.62963 0 0.277778   V2 1.53704 0 0.200347 
+  N0 0.61392 0.165491 -0.771826   N1 0.636383 -1.97068e-16 -0.771373   N2 0.675056 -9.51605e-17 -0.737766 
+   txt003 
+STRI 
+  V0 1.53704 0 0.200347   V1 1.48296 0.412723 0.200347   V2 1.57229 0.437586 0.277778 
+  N0 0.675056 -9.51605e-17 -0.737766   N1 0.651276 0.175561 -0.738253   N2 0.61392 0.165491 -0.771826 
+   txt003 
+STRI 
+  V0 0 1.53704 0.200347   V1 0.412723 1.48296 0.200347   V2 0.402778 1.44722 0.15 
+  N0 0 0.675056 -0.737766   N1 0.175561 0.651276 -0.738253   N2 0.260275 0.965535 0 
+   txt003 
+STRI 
+  V0 0.402778 1.44722 0.15   V1 0 1.5 0.15   V2 0 1.53704 0.200347 
+  N0 0.260275 0.965535 0   N1 -0 1 0   N2 0 0.675056 -0.737766 
+   txt003 
+STRI 
+  V0 0.412723 1.48296 0.200347   V1 0.781043 1.32982 0.200347   V2 0.762222 1.29778 0.15 
+  N0 0.175561 0.651276 -0.738253   N1 0.338069 0.582878 -0.738893   N2 0.501718 0.865031 0 
+   txt003 
+STRI 
+  V0 0.762222 1.29778 0.15   V1 0.402778 1.44722 0.15   V2 0.412723 1.48296 0.200347 
+  N0 0.501718 0.865031 0   N1 0.260275 0.965535 0   N2 0.175561 0.651276 -0.738253 
+   txt003 
+STRI 
+  V0 0.781043 1.32982 0.200347   V1 1.0913 1.0913 0.200347   V2 1.065 1.065 0.15 
+  N0 0.338069 0.582878 -0.738893   N1 0.476275 0.476275 -0.739137   N2 0.707107 0.707107 0 
+   txt003 
+STRI 
+  V0 1.065 1.065 0.15   V1 0.762222 1.29778 0.15   V2 0.781043 1.32982 0.200347 
+  N0 0.707107 0.707107 0   N1 0.501718 0.865031 0   N2 0.338069 0.582878 -0.738893 
+   txt003 
+STRI 
+  V0 1.0913 1.0913 0.200347   V1 1.32982 0.781043 0.200347   V2 1.29778 0.762222 0.15 
+  N0 0.476275 0.476275 -0.739137   N1 0.582878 0.338069 -0.738893   N2 0.865031 0.501718 0 
+   txt003 
+STRI 
+  V0 1.29778 0.762222 0.15   V1 1.065 1.065 0.15   V2 1.0913 1.0913 0.200347 
+  N0 0.865031 0.501718 0   N1 0.707107 0.707107 0   N2 0.476275 0.476275 -0.739137 
+   txt003 
+STRI 
+  V0 1.32982 0.781043 0.200347   V1 1.48296 0.412723 0.200347   V2 1.44722 0.402778 0.15 
+  N0 0.582878 0.338069 -0.738893   N1 0.651276 0.175561 -0.738253   N2 0.965535 0.260275 0 
+   txt003 
+STRI 
+  V0 1.44722 0.402778 0.15   V1 1.29778 0.762222 0.15   V2 1.32982 0.781043 0.200347 
+  N0 0.965535 0.260275 0   N1 0.865031 0.501718 0   N2 0.582878 0.338069 -0.738893 
+   txt003 
+STRI 
+  V0 1.48296 0.412723 0.200347   V1 1.53704 0 0.200347   V2 1.5 0 0.15 
+  N0 0.651276 0.175561 -0.738253   N1 0.675056 -9.51605e-17 -0.737766   N2 1 0 0 
+   txt003 
+STRI 
+  V0 1.5 0 0.15   V1 1.44722 0.402778 0.15   V2 1.48296 0.412723 0.200347 
+  N0 1 0 0   N1 0.965535 0.260275 0   N2 0.651276 0.175561 -0.738253 
+   txt003 
+STRI 
+  V0 -1.6 0 2.025   V1 -1.59259 -0.125 2.04167   V2 -1.92704 -0.125 2.04055 
+  N0 -0 -0 -1   N1 -0 -0.298275 -0.95448   N2 0.0104256 -0.297446 -0.954682 
+   txt003 
+STRI 
+  V0 -1.92704 -0.125 2.04055   V1 -1.92454 0 2.02396   V2 -1.6 0 2.025 
+  N0 0.0104256 -0.297446 -0.954682   N1 0.0104645 0 -0.999945   N2 -0 -0 -1 
+   txt003 
+STRI 
+  V0 -1.59259 -0.125 2.04167   V1 -1.57407 -0.2 2.08333   V2 -1.9333 -0.2 2.08202 
+  N0 -0 -0.298275 -0.95448   N1 -0 -0.707107 -0.707107   N2 0.00846382 -0.706077 -0.708084 
+   txt003 
+STRI 
+  V0 -1.9333 -0.2 2.08202   V1 -1.92704 -0.125 2.04055   V2 -1.59259 -0.125 2.04167 
+  N0 0.00846382 -0.706077 -0.708084   N1 0.0104256 -0.297446 -0.954682   N2 -0 -0.298275 -0.95448 
+   txt003 
+STRI 
+  V0 -1.57407 -0.2 2.08333   V1 -1.55 -0.225 2.1375   V2 -1.94144 -0.225 2.13594 
+  N0 -0 -0.707107 -0.707107   N1 0 -1 0   N2 -1.61364e-18 -1 -2.43505e-19 
+   txt003 
+STRI 
+  V0 -1.94144 -0.225 2.13594   V1 -1.9333 -0.2 2.08202   V2 -1.57407 -0.2 2.08333 
+  N0 -1.61364e-18 -1 -2.43505e-19   N1 0.00846382 -0.706077 -0.708084   N2 -0 -0.707107 -0.707107 
+   txt003 
+STRI 
+  V0 -1.55 -0.225 2.1375   V1 -1.52593 -0.2 2.19167   V2 -1.94957 -0.2 2.18985 
+  N0 0 -1 0   N1 0 -0.707107 0.707107   N2 -0.00997559 -0.706181 0.707961 
+   txt003 
+STRI 
+  V0 -1.94957 -0.2 2.18985   V1 -1.94144 -0.225 2.13594   V2 -1.55 -0.225 2.1375 
+  N0 -0.00997559 -0.706181 0.707961   N1 -1.61364e-18 -1 -2.43505e-19   N2 0 -1 0 
+   txt003 
+STRI 
+  V0 -1.52593 -0.2 2.19167   V1 -1.50741 -0.125 2.23333   V2 -1.95583 -0.125 2.23133 
+  N0 0 -0.707107 0.707107   N1 0 -0.298275 0.95448   N2 -0.0140841 -0.297589 0.95459 
+   txt003 
+STRI 
+  V0 -1.95583 -0.125 2.23133   V1 -1.94957 -0.2 2.18985   V2 -1.52593 -0.2 2.19167 
+  N0 -0.0140841 -0.297589 0.95459   N1 -0.00997559 -0.706181 0.707961   N2 0 -0.707107 0.707107 
+   txt003 
+STRI 
+  V0 -1.50741 -0.125 2.23333   V1 -1.5 0 2.25   V2 -1.95833 0 2.24792 
+  N0 0 -0.298275 0.95448   N1 0 1.97373e-15 1   N2 -0.0149983 1.96426e-15 0.999888 
+   txt003 
+STRI 
+  V0 -1.95833 0 2.24792   V1 -1.95583 -0.125 2.23133   V2 -1.50741 -0.125 2.23333 
+  N0 -0.0149983 1.96426e-15 0.999888   N1 -0.0140841 -0.297589 0.95459   N2 0 -0.298275 0.95448 
+   txt003 
+STRI 
+  V0 -1.92454 0 2.02396   V1 -1.92704 -0.125 2.04055   V2 -2.20645 -0.125 2.03272 
+  N0 0.0104645 0 -0.999945   N1 0.0104256 -0.297446 -0.954682   N2 0.0510028 -0.296675 -0.953616 
+   txt003 
+STRI 
+  V0 -2.20645 -0.125 2.03272   V1 -2.1963 0 2.01667   V2 -1.92454 0 2.02396 
+  N0 0.0510028 -0.296675 -0.953616   N1 0.0510696 0 -0.998695   N2 0.0104645 0 -0.999945 
+   txt003 
+STRI 
+  V0 -1.92704 -0.125 2.04055   V1 -1.9333 -0.2 2.08202   V2 -2.23182 -0.2 2.07284 
+  N0 0.0104256 -0.297446 -0.954682   N1 0.00846382 -0.706077 -0.708084   N2 0.0415994 -0.706072 -0.706918 
+   txt003 
+STRI 
+  V0 -2.23182 -0.2 2.07284   V1 -2.20645 -0.125 2.03272   V2 -1.92704 -0.125 2.04055 
+  N0 0.0415994 -0.706072 -0.706918   N1 0.0510028 -0.296675 -0.953616   N2 0.0104256 -0.297446 -0.954682 
+   txt003 
+STRI 
+  V0 -1.9333 -0.2 2.08202   V1 -1.94144 -0.225 2.13594   V2 -2.26481 -0.225 2.125 
+  N0 0.00846382 -0.706077 -0.708084   N1 -1.61364e-18 -1 -2.43505e-19   N2 -7.69071e-18 -1 -4.86421e-18 
+   txt003 
+STRI 
+  V0 -2.26481 -0.225 2.125   V1 -2.23182 -0.2 2.07284   V2 -1.9333 -0.2 2.08202 
+  N0 -7.69071e-18 -1 -4.86421e-18   N1 0.0415994 -0.706072 -0.706918   N2 0.00846382 -0.706077 -0.708084 
+   txt003 
+STRI 
+  V0 -1.94144 -0.225 2.13594   V1 -1.94957 -0.2 2.18985   V2 -2.29781 -0.2 2.17716 
+  N0 -1.61364e-18 -1 -2.43505e-19   N1 -0.00997559 -0.706181 0.707961   N2 -0.0493858 -0.708239 0.704243 
+   txt003 
+STRI 
+  V0 -2.29781 -0.2 2.17716   V1 -2.26481 -0.225 2.125   V2 -1.94144 -0.225 2.13594 
+  N0 -0.0493858 -0.708239 0.704243   N1 -7.69071e-18 -1 -4.86421e-18   N2 -1.61364e-18 -1 -2.43505e-19 
+   txt003 
+STRI 
+  V0 -1.94957 -0.2 2.18985   V1 -1.95583 -0.125 2.23133   V2 -2.32318 -0.125 2.21728 
+  N0 -0.00997559 -0.706181 0.707961   N1 -0.0140841 -0.297589 0.95459   N2 -0.0701017 -0.299663 0.951466 
+   txt003 
+STRI 
+  V0 -2.32318 -0.125 2.21728   V1 -2.29781 -0.2 2.17716   V2 -1.94957 -0.2 2.18985 
+  N0 -0.0701017 -0.299663 0.951466   N1 -0.0493858 -0.708239 0.704243   N2 -0.00997559 -0.706181 0.707961 
+   txt003 
+STRI 
+  V0 -1.95583 -0.125 2.23133   V1 -1.95833 0 2.24792   V2 -2.33333 0 2.23333 
+  N0 -0.0140841 -0.297589 0.95459   N1 -0.0149983 1.96426e-15 0.999888   N2 -0.0747899 1.66682e-15 0.997199 
+   txt003 
+STRI 
+  V0 -2.33333 0 2.23333   V1 -2.32318 -0.125 2.21728   V2 -1.95583 -0.125 2.23133 
+  N0 -0.0747899 1.66682e-15 0.997199   N1 -0.0701017 -0.299663 0.951466   N2 -0.0140841 -0.297589 0.95459 
+   txt003 
+STRI 
+  V0 -2.1963 0 2.01667   V1 -2.20645 -0.125 2.03272   V2 -2.42824 -0.125 2.01146 
+  N0 0.0510696 0 -0.998695   N1 0.0510028 -0.296675 -0.953616   N2 0.148104 -0.301279 -0.941964 
+   txt003 
+STRI 
+  V0 -2.42824 -0.125 2.01146   V1 -2.4125 0 1.99687   V2 -2.1963 0 2.01667 
+  N0 0.148104 -0.301279 -0.941964   N1 0.14834 0 -0.988936   N2 0.0510696 0 -0.998695 
+   txt003 
+STRI 
+  V0 -2.20645 -0.125 2.03272   V1 -2.23182 -0.2 2.07284   V2 -2.46759 -0.2 2.04792 
+  N0 0.0510028 -0.296675 -0.953616   N1 0.0415994 -0.706072 -0.706918   N2 0.119688 -0.715388 -0.6884 
+   txt003 
+STRI 
+  V0 -2.46759 -0.2 2.04792   V1 -2.42824 -0.125 2.01146   V2 -2.20645 -0.125 2.03272 
+  N0 0.119688 -0.715388 -0.6884   N1 0.148104 -0.301279 -0.941964   N2 0.0510028 -0.296675 -0.953616 
+   txt003 
+STRI 
+  V0 -2.23182 -0.2 2.07284   V1 -2.26481 -0.225 2.125   V2 -2.51875 -0.225 2.09531 
+  N0 0.0415994 -0.706072 -0.706918   N1 -7.69071e-18 -1 -4.86421e-18   N2 -1.96915e-17 -1 -2.12543e-17 
+   txt003 
+STRI 
+  V0 -2.51875 -0.225 2.09531   V1 -2.46759 -0.2 2.04792   V2 -2.23182 -0.2 2.07284 
+  N0 -1.96915e-17 -1 -2.12543e-17   N1 0.119688 -0.715388 -0.6884   N2 0.0415994 -0.706072 -0.706918 
+   txt003 
+STRI 
+  V0 -2.26481 -0.225 2.125   V1 -2.29781 -0.2 2.17716   V2 -2.56991 -0.2 2.14271 
+  N0 -7.69071e-18 -1 -4.86421e-18   N1 -0.0493858 -0.708239 0.704243   N2 -0.141352 -0.724137 0.675015 
+   txt003 
+STRI 
+  V0 -2.56991 -0.2 2.14271   V1 -2.51875 -0.225 2.09531   V2 -2.26481 -0.225 2.125 
+  N0 -0.141352 -0.724137 0.675015   N1 -1.96915e-17 -1 -2.12543e-17   N2 -7.69071e-18 -1 -4.86421e-18 
+   txt003 
+STRI 
+  V0 -2.29781 -0.2 2.17716   V1 -2.32318 -0.125 2.21728   V2 -2.60926 -0.125 2.17917 
+  N0 -0.0493858 -0.708239 0.704243   N1 -0.0701017 -0.299663 0.951466   N2 -0.204668 -0.313917 0.927128 
+   txt003 
+STRI 
+  V0 -2.60926 -0.125 2.17917   V1 -2.56991 -0.2 2.14271   V2 -2.29781 -0.2 2.17716 
+  N0 -0.204668 -0.313917 0.927128   N1 -0.141352 -0.724137 0.675015   N2 -0.0493858 -0.708239 0.704243 
+   txt003 
+STRI 
+  V0 -2.32318 -0.125 2.21728   V1 -2.33333 0 2.23333   V2 -2.625 0 2.19375 
+  N0 -0.0701017 -0.299663 0.951466   N1 -0.0747899 1.66682e-15 0.997199   N2 -0.219512 1.81728e-15 0.97561 
+   txt003 
+STRI 
+  V0 -2.625 0 2.19375   V1 -2.60926 -0.125 2.17917   V2 -2.32318 -0.125 2.21728 
+  N0 -0.219512 1.81728e-15 0.97561   N1 -0.204668 -0.313917 0.927128   N2 -0.0701017 -0.299663 0.951466 
+   txt003 
+STRI 
+  V0 -2.4125 0 1.99687   V1 -2.42824 -0.125 2.01146   V2 -2.58985 -0.125 1.97006 
+  N0 0.14834 0 -0.988936   N1 0.148104 -0.301279 -0.941964   N2 0.359682 -0.323804 -0.875089 
+   txt003 
+STRI 
+  V0 -2.58985 -0.125 1.97006   V1 -2.57037 0 1.95833   V2 -2.4125 0 1.99687 
+  N0 0.359682 -0.323804 -0.875089   N1 0.364399 0 -0.931243   N2 0.14834 0 -0.988936 
+   txt003 
+STRI 
+  V0 -2.42824 -0.125 2.01146   V1 -2.46759 -0.2 2.04792   V2 -2.63855 -0.2 1.99938 
+  N0 0.148104 -0.301279 -0.941964   N1 0.119688 -0.715388 -0.6884   N2 0.275915 -0.747596 -0.604128 
+   txt003 
+STRI 
+  V0 -2.63855 -0.2 1.99938   V1 -2.58985 -0.125 1.97006   V2 -2.42824 -0.125 2.01146 
+  N0 0.275915 -0.747596 -0.604128   N1 0.359682 -0.323804 -0.875089   N2 0.148104 -0.301279 -0.941964 
+   txt003 
+STRI 
+  V0 -2.46759 -0.2 2.04792   V1 -2.51875 -0.225 2.09531   V2 -2.70185 -0.225 2.0375 
+  N0 0.119688 -0.715388 -0.6884   N1 -1.96915e-17 -1 -2.12543e-17   N2 -3.40413e-17 -1 -5.65364e-17 
+   txt003 
+STRI 
+  V0 -2.70185 -0.225 2.0375   V1 -2.63855 -0.2 1.99938   V2 -2.46759 -0.2 2.04792 
+  N0 -3.40413e-17 -1 -5.65364e-17   N1 0.275915 -0.747596 -0.604128   N2 0.119688 -0.715388 -0.6884 
+   txt003 
+STRI 
+  V0 -2.51875 -0.225 2.09531   V1 -2.56991 -0.2 2.14271   V2 -2.76516 -0.2 2.07562 
+  N0 -1.96915e-17 -1 -2.12543e-17   N1 -0.141352 -0.724137 0.675015   N2 -0.313659 -0.763673 0.564289 
+   txt003 
+STRI 
+  V0 -2.76516 -0.2 2.07562   V1 -2.70185 -0.225 2.0375   V2 -2.51875 -0.225 2.09531 
+  N0 -0.313659 -0.763673 0.564289   N1 -3.40413e-17 -1 -5.65364e-17   N2 -1.96915e-17 -1 -2.12543e-17 
+   txt003 
+STRI 
+  V0 -2.56991 -0.2 2.14271   V1 -2.60926 -0.125 2.17917   V2 -2.81385 -0.125 2.10494 
+  N0 -0.141352 -0.724137 0.675015   N1 -0.204668 -0.313917 0.927128   N2 -0.474611 -0.350859 0.807244 
+   txt003 
+STRI 
+  V0 -2.81385 -0.125 2.10494   V1 -2.76516 -0.2 2.07562   V2 -2.56991 -0.2 2.14271 
+  N0 -0.474611 -0.350859 0.807244   N1 -0.313659 -0.763673 0.564289   N2 -0.141352 -0.724137 0.675015 
+   txt003 
+STRI 
+  V0 -2.60926 -0.125 2.17917   V1 -2.625 0 2.19375   V2 -2.83333 0 2.11667 
+  N0 -0.204668 -0.313917 0.927128   N1 -0.219512 1.81728e-15 0.97561   N2 -0.514496 1.6713e-15 0.857493 
+   txt003 
+STRI 
+  V0 -2.83333 0 2.11667   V1 -2.81385 -0.125 2.10494   V2 -2.60926 -0.125 2.17917 
+  N0 -0.514496 1.6713e-15 0.857493   N1 -0.474611 -0.350859 0.807244   N2 -0.204668 -0.313917 0.927128 
+   txt003 
+STRI 
+  V0 -2.57037 0 1.95833   V1 -2.58985 -0.125 1.97006   V2 -2.6887 -0.125 1.90181 
+  N0 0.364399 0 -0.931243   N1 0.359682 -0.323804 -0.875089   N2 0.727532 -0.37029 -0.577566 
+   txt003 
+STRI 
+  V0 -2.6887 -0.125 1.90181   V1 -2.66713 0 1.89479   V2 -2.57037 0 1.95833 
+  N0 0.727532 -0.37029 -0.577566   N1 0.767382 0 -0.64119   N2 0.364399 0 -0.931243 
+   txt003 
+STRI 
+  V0 -2.58985 -0.125 1.97006   V1 -2.63855 -0.2 1.99938   V2 -2.74263 -0.2 1.91937 
+  N0 0.359682 -0.323804 -0.875089   N1 0.275915 -0.747596 -0.604128   N2 0.497152 -0.792374 -0.35353 
+   txt003 
+STRI 
+  V0 -2.74263 -0.2 1.91937   V1 -2.6887 -0.125 1.90181   V2 -2.58985 -0.125 1.97006 
+  N0 0.497152 -0.792374 -0.35353   N1 0.727532 -0.37029 -0.577566   N2 0.359682 -0.323804 -0.875089 
+   txt003 
+STRI 
+  V0 -2.63855 -0.2 1.99938   V1 -2.70185 -0.225 2.0375   V2 -2.81273 -0.225 1.94219 
+  N0 0.275915 -0.747596 -0.604128   N1 -3.40413e-17 -1 -5.65364e-17   N2 -3.3285e-17 -1 -1.02253e-16 
+   txt003 
+STRI 
+  V0 -2.81273 -0.225 1.94219   V1 -2.74263 -0.2 1.91937   V2 -2.63855 -0.2 1.99938 
+  N0 -3.3285e-17 -1 -1.02253e-16   N1 0.497152 -0.792374 -0.35353   N2 0.275915 -0.747596 -0.604128 
+   txt003 
+STRI 
+  V0 -2.70185 -0.225 2.0375   V1 -2.76516 -0.2 2.07562   V2 -2.88284 -0.2 1.96501 
+  N0 -3.40413e-17 -1 -5.65364e-17   N1 -0.313659 -0.763673 0.564289   N2 -0.519903 -0.799556 0.300684 
+   txt003 
+STRI 
+  V0 -2.88284 -0.2 1.96501   V1 -2.81273 -0.225 1.94219   V2 -2.70185 -0.225 2.0375 
+  N0 -0.519903 -0.799556 0.300684   N1 -3.3285e-17 -1 -1.02253e-16   N2 -3.40413e-17 -1 -5.65364e-17 
+   txt003 
+STRI 
+  V0 -2.76516 -0.2 2.07562   V1 -2.81385 -0.125 2.10494   V2 -2.93676 -0.125 1.98256 
+  N0 -0.313659 -0.763673 0.564289   N1 -0.474611 -0.350859 0.807244   N2 -0.810111 -0.385772 0.441476 
+   txt003 
+STRI 
+  V0 -2.93676 -0.125 1.98256   V1 -2.88284 -0.2 1.96501   V2 -2.76516 -0.2 2.07562 
+  N0 -0.810111 -0.385772 0.441476   N1 -0.519903 -0.799556 0.300684   N2 -0.313659 -0.763673 0.564289 
+   txt003 
+STRI 
+  V0 -2.81385 -0.125 2.10494   V1 -2.83333 0 2.11667   V2 -2.95833 0 1.98958 
+  N0 -0.474611 -0.350859 0.807244   N1 -0.514496 1.6713e-15 0.857493   N2 -0.882353 9.28814e-16 0.470588 
+   txt003 
+STRI 
+  V0 -2.95833 0 1.98958   V1 -2.93676 -0.125 1.98256   V2 -2.81385 -0.125 2.10494 
+  N0 -0.882353 9.28814e-16 0.470588   N1 -0.810111 -0.385772 0.441476   N2 -0.474611 -0.350859 0.807244 
+   txt003 
+STRI 
+  V0 -2.66713 0 1.89479   V1 -2.6887 -0.125 1.90181   V2 -2.72222 -0.125 1.8 
+  N0 0.767382 0 -0.64119   N1 0.727532 -0.37029 -0.577566   N2 0.923077 -0.384615 2.05733e-15 
+   txt003 
+STRI 
+  V0 -2.72222 -0.125 1.8   V1 -2.7 0 1.8   V2 -2.66713 0 1.89479 
+  N0 0.923077 -0.384615 2.05733e-15   N1 1 0 2.63164e-15   N2 0.767382 0 -0.64119 
+   txt003 
+STRI 
+  V0 -2.6887 -0.125 1.90181   V1 -2.74263 -0.2 1.91937   V2 -2.77778 -0.2 1.8 
+  N0 0.727532 -0.37029 -0.577566   N1 0.497152 -0.792374 -0.35353   N2 0.6 -0.8 8.24322e-16 
+   txt003 
+STRI 
+  V0 -2.77778 -0.2 1.8   V1 -2.72222 -0.125 1.8   V2 -2.6887 -0.125 1.90181 
+  N0 0.6 -0.8 8.24322e-16   N1 0.923077 -0.384615 2.05733e-15   N2 0.727532 -0.37029 -0.577566 
+   txt003 
+STRI 
+  V0 -2.74263 -0.2 1.91937   V1 -2.81273 -0.225 1.94219   V2 -2.85 -0.225 1.8 
+  N0 0.497152 -0.792374 -0.35353   N1 -3.3285e-17 -1 -1.02253e-16   N2 -1.21738e-31 -1 -1.23358e-16 
+   txt003 
+STRI 
+  V0 -2.85 -0.225 1.8   V1 -2.77778 -0.2 1.8   V2 -2.74263 -0.2 1.91937 
+  N0 -1.21738e-31 -1 -1.23358e-16   N1 0.6 -0.8 8.24322e-16   N2 0.497152 -0.792374 -0.35353 
+   txt003 
+STRI 
+  V0 -2.81273 -0.225 1.94219   V1 -2.88284 -0.2 1.96501   V2 -2.92222 -0.2 1.8 
+  N0 -3.3285e-17 -1 -1.02253e-16   N1 -0.519903 -0.799556 0.300684   N2 -0.6 -0.8 -3.10757e-16 
+   txt003 
+STRI 
+  V0 -2.92222 -0.2 1.8   V1 -2.85 -0.225 1.8   V2 -2.81273 -0.225 1.94219 
+  N0 -0.6 -0.8 -3.10757e-16   N1 -1.21738e-31 -1 -1.23358e-16   N2 -3.3285e-17 -1 -1.02253e-16 
+   txt003 
+STRI 
+  V0 -2.88284 -0.2 1.96501   V1 -2.93676 -0.125 1.98256   V2 -2.97778 -0.125 1.8 
+  N0 -0.519903 -0.799556 0.300684   N1 -0.810111 -0.385772 0.441476   N2 -0.923077 -0.384615 -1.1396e-16 
+   txt003 
+STRI 
+  V0 -2.97778 -0.125 1.8   V1 -2.92222 -0.2 1.8   V2 -2.88284 -0.2 1.96501 
+  N0 -0.923077 -0.384615 -1.1396e-16   N1 -0.6 -0.8 -3.10757e-16   N2 -0.519903 -0.799556 0.300684 
+   txt003 
+STRI 
+  V0 -2.93676 -0.125 1.98256   V1 -2.95833 0 1.98958   V2 -3 0 1.8 
+  N0 -0.810111 -0.385772 0.441476   N1 -0.882353 9.28814e-16 0.470588   N2 -1 -4.93432e-16 -0 
+   txt003 
+STRI 
+  V0 -3 0 1.8   V1 -2.97778 -0.125 1.8   V2 -2.93676 -0.125 1.98256 
+  N0 -1 -4.93432e-16 -0   N1 -0.923077 -0.384615 -1.1396e-16   N2 -0.810111 -0.385772 0.441476 
+   txt003 
+STRI 
+  V0 -1.5 0 2.25   V1 -1.50741 0.125 2.23333   V2 -1.95583 0.125 2.23133 
+  N0 0 -0 1   N1 0 0.298275 0.95448   N2 -0.0140841 0.297589 0.95459 
+   txt003 
+STRI 
+  V0 -1.95583 0.125 2.23133   V1 -1.95833 0 2.24792   V2 -1.5 0 2.25 
+  N0 -0.0140841 0.297589 0.95459   N1 -0.0149983 0 0.999888   N2 0 -0 1 
+   txt003 
+STRI 
+  V0 -1.50741 0.125 2.23333   V1 -1.52593 0.2 2.19167   V2 -1.94957 0.2 2.18985 
+  N0 0 0.298275 0.95448   N1 0 0.707107 0.707107   N2 -0.00997559 0.706181 0.707961 
+   txt003 
+STRI 
+  V0 -1.94957 0.2 2.18985   V1 -1.95583 0.125 2.23133   V2 -1.50741 0.125 2.23333 
+  N0 -0.00997559 0.706181 0.707961   N1 -0.0140841 0.297589 0.95459   N2 0 0.298275 0.95448 
+   txt003 
+STRI 
+  V0 -1.52593 0.2 2.19167   V1 -1.55 0.225 2.1375   V2 -1.94144 0.225 2.13594 
+  N0 0 0.707107 0.707107   N1 0 1 0   N2 -1.61364e-18 1 -2.43505e-19 
+   txt003 
+STRI 
+  V0 -1.94144 0.225 2.13594   V1 -1.94957 0.2 2.18985   V2 -1.52593 0.2 2.19167 
+  N0 -1.61364e-18 1 -2.43505e-19   N1 -0.00997559 0.706181 0.707961   N2 0 0.707107 0.707107 
+   txt003 
+STRI 
+  V0 -1.55 0.225 2.1375   V1 -1.57407 0.2 2.08333   V2 -1.9333 0.2 2.08202 
+  N0 0 1 0   N1 0 0.707107 -0.707107   N2 0.00846382 0.706077 -0.708084 
+   txt003 
+STRI 
+  V0 -1.9333 0.2 2.08202   V1 -1.94144 0.225 2.13594   V2 -1.55 0.225 2.1375 
+  N0 0.00846382 0.706077 -0.708084   N1 -1.61364e-18 1 -2.43505e-19   N2 0 1 0 
+   txt003 
+STRI 
+  V0 -1.57407 0.2 2.08333   V1 -1.59259 0.125 2.04167   V2 -1.92704 0.125 2.04055 
+  N0 0 0.707107 -0.707107   N1 0 0.298275 -0.95448   N2 0.0104256 0.297446 -0.954682 
+   txt003 
+STRI 
+  V0 -1.92704 0.125 2.04055   V1 -1.9333 0.2 2.08202   V2 -1.57407 0.2 2.08333 
+  N0 0.0104256 0.297446 -0.954682   N1 0.00846382 0.706077 -0.708084   N2 0 0.707107 -0.707107 
+   txt003 
+STRI 
+  V0 -1.59259 0.125 2.04167   V1 -1.6 0 2.025   V2 -1.92454 0 2.02396 
+  N0 0 0.298275 -0.95448   N1 -0 -4.93432e-16 -1   N2 0.0104645 -4.86951e-16 -0.999945 
+   txt003 
+STRI 
+  V0 -1.92454 0 2.02396   V1 -1.92704 0.125 2.04055   V2 -1.59259 0.125 2.04167 
+  N0 0.0104645 -4.86951e-16 -0.999945   N1 0.0104256 0.297446 -0.954682   N2 0 0.298275 -0.95448 
+   txt003 
+STRI 
+  V0 -1.95833 0 2.24792   V1 -1.95583 0.125 2.23133   V2 -2.32318 0.125 2.21728 
+  N0 -0.0149983 0 0.999888   N1 -0.0140841 0.297589 0.95459   N2 -0.0701017 0.299663 0.951466 
+   txt003 
+STRI 
+  V0 -2.32318 0.125 2.21728   V1 -2.33333 0 2.23333   V2 -1.95833 0 2.24792 
+  N0 -0.0701017 0.299663 0.951466   N1 -0.0747899 0 0.997199   N2 -0.0149983 0 0.999888 
+   txt003 
+STRI 
+  V0 -1.95583 0.125 2.23133   V1 -1.94957 0.2 2.18985   V2 -2.29781 0.2 2.17716 
+  N0 -0.0140841 0.297589 0.95459   N1 -0.00997559 0.706181 0.707961   N2 -0.0493858 0.708239 0.704243 
+   txt003 
+STRI 
+  V0 -2.29781 0.2 2.17716   V1 -2.32318 0.125 2.21728   V2 -1.95583 0.125 2.23133 
+  N0 -0.0493858 0.708239 0.704243   N1 -0.0701017 0.299663 0.951466   N2 -0.0140841 0.297589 0.95459 
+   txt003 
+STRI 
+  V0 -1.94957 0.2 2.18985   V1 -1.94144 0.225 2.13594   V2 -2.26481 0.225 2.125 
+  N0 -0.00997559 0.706181 0.707961   N1 -1.61364e-18 1 -2.43505e-19   N2 -7.69071e-18 1 -4.86421e-18 
+   txt003 
+STRI 
+  V0 -2.26481 0.225 2.125   V1 -2.29781 0.2 2.17716   V2 -1.94957 0.2 2.18985 
+  N0 -7.69071e-18 1 -4.86421e-18   N1 -0.0493858 0.708239 0.704243   N2 -0.00997559 0.706181 0.707961 
+   txt003 
+STRI 
+  V0 -1.94144 0.225 2.13594   V1 -1.9333 0.2 2.08202   V2 -2.23182 0.2 2.07284 
+  N0 -1.61364e-18 1 -2.43505e-19   N1 0.00846382 0.706077 -0.708084   N2 0.0415994 0.706072 -0.706918 
+   txt003 
+STRI 
+  V0 -2.23182 0.2 2.07284   V1 -2.26481 0.225 2.125   V2 -1.94144 0.225 2.13594 
+  N0 0.0415994 0.706072 -0.706918   N1 -7.69071e-18 1 -4.86421e-18   N2 -1.61364e-18 1 -2.43505e-19 
+   txt003 
+STRI 
+  V0 -1.9333 0.2 2.08202   V1 -1.92704 0.125 2.04055   V2 -2.20645 0.125 2.03272 
+  N0 0.00846382 0.706077 -0.708084   N1 0.0104256 0.297446 -0.954682   N2 0.0510028 0.296675 -0.953616 
+   txt003 
+STRI 
+  V0 -2.20645 0.125 2.03272   V1 -2.23182 0.2 2.07284   V2 -1.9333 0.2 2.08202 
+  N0 0.0510028 0.296675 -0.953616   N1 0.0415994 0.706072 -0.706918   N2 0.00846382 0.706077 -0.708084 
+   txt003 
+STRI 
+  V0 -1.92704 0.125 2.04055   V1 -1.92454 0 2.02396   V2 -2.1963 0 2.01667 
+  N0 0.0104256 0.297446 -0.954682   N1 0.0104645 -4.86951e-16 -0.999945   N2 0.0510696 -2.08595e-16 -0.998695 
+   txt003 
+STRI 
+  V0 -2.1963 0 2.01667   V1 -2.20645 0.125 2.03272   V2 -1.92704 0.125 2.04055 
+  N0 0.0510696 -2.08595e-16 -0.998695   N1 0.0510028 0.296675 -0.953616   N2 0.0104256 0.297446 -0.954682 
+   txt003 
+STRI 
+  V0 -2.33333 0 2.23333   V1 -2.32318 0.125 2.21728   V2 -2.60926 0.125 2.17917 
+  N0 -0.0747899 0 0.997199   N1 -0.0701017 0.299663 0.951466   N2 -0.204668 0.313917 0.927128 
+   txt003 
+STRI 
+  V0 -2.60926 0.125 2.17917   V1 -2.625 0 2.19375   V2 -2.33333 0 2.23333 
+  N0 -0.204668 0.313917 0.927128   N1 -0.219512 0 0.97561   N2 -0.0747899 0 0.997199 
+   txt003 
+STRI 
+  V0 -2.32318 0.125 2.21728   V1 -2.29781 0.2 2.17716   V2 -2.56991 0.2 2.14271 
+  N0 -0.0701017 0.299663 0.951466   N1 -0.0493858 0.708239 0.704243   N2 -0.141352 0.724137 0.675015 
+   txt003 
+STRI 
+  V0 -2.56991 0.2 2.14271   V1 -2.60926 0.125 2.17917   V2 -2.32318 0.125 2.21728 
+  N0 -0.141352 0.724137 0.675015   N1 -0.204668 0.313917 0.927128   N2 -0.0701017 0.299663 0.951466 
+   txt003 
+STRI 
+  V0 -2.29781 0.2 2.17716   V1 -2.26481 0.225 2.125   V2 -2.51875 0.225 2.09531 
+  N0 -0.0493858 0.708239 0.704243   N1 -7.69071e-18 1 -4.86421e-18   N2 -1.96915e-17 1 -2.12543e-17 
+   txt003 
+STRI 
+  V0 -2.51875 0.225 2.09531   V1 -2.56991 0.2 2.14271   V2 -2.29781 0.2 2.17716 
+  N0 -1.96915e-17 1 -2.12543e-17   N1 -0.141352 0.724137 0.675015   N2 -0.0493858 0.708239 0.704243 
+   txt003 
+STRI 
+  V0 -2.26481 0.225 2.125   V1 -2.23182 0.2 2.07284   V2 -2.46759 0.2 2.04792 
+  N0 -7.69071e-18 1 -4.86421e-18   N1 0.0415994 0.706072 -0.706918   N2 0.119688 0.715388 -0.6884 
+   txt003 
+STRI 
+  V0 -2.46759 0.2 2.04792   V1 -2.51875 0.225 2.09531   V2 -2.26481 0.225 2.125 
+  N0 0.119688 0.715388 -0.6884   N1 -1.96915e-17 1 -2.12543e-17   N2 -7.69071e-18 1 -4.86421e-18 
+   txt003 
+STRI 
+  V0 -2.23182 0.2 2.07284   V1 -2.20645 0.125 2.03272   V2 -2.42824 0.125 2.01146 
+  N0 0.0415994 0.706072 -0.706918   N1 0.0510028 0.296675 -0.953616   N2 0.148104 0.301279 -0.941964 
+   txt003 
+STRI 
+  V0 -2.42824 0.125 2.01146   V1 -2.46759 0.2 2.04792   V2 -2.23182 0.2 2.07284 
+  N0 0.148104 0.301279 -0.941964   N1 0.119688 0.715388 -0.6884   N2 0.0415994 0.706072 -0.706918 
+   txt003 
+STRI 
+  V0 -2.20645 0.125 2.03272   V1 -2.1963 0 2.01667   V2 -2.4125 0 1.99687 
+  N0 0.0510028 0.296675 -0.953616   N1 0.0510696 -2.08595e-16 -0.998695   N2 0.14834 -4.14777e-16 -0.988936 
+   txt003 
+STRI 
+  V0 -2.4125 0 1.99687   V1 -2.42824 0.125 2.01146   V2 -2.20645 0.125 2.03272 
+  N0 0.14834 -4.14777e-16 -0.988936   N1 0.148104 0.301279 -0.941964   N2 0.0510028 0.296675 -0.953616 
+   txt003 
+STRI 
+  V0 -2.625 0 2.19375   V1 -2.60926 0.125 2.17917   V2 -2.81385 0.125 2.10494 
+  N0 -0.219512 0 0.97561   N1 -0.204668 0.313917 0.927128   N2 -0.474611 0.350859 0.807244 
+   txt003 
+STRI 
+  V0 -2.81385 0.125 2.10494   V1 -2.83333 0 2.11667   V2 -2.625 0 2.19375 
+  N0 -0.474611 0.350859 0.807244   N1 -0.514496 0 0.857493   N2 -0.219512 0 0.97561 
+   txt003 
+STRI 
+  V0 -2.60926 0.125 2.17917   V1 -2.56991 0.2 2.14271   V2 -2.76516 0.2 2.07562 
+  N0 -0.204668 0.313917 0.927128   N1 -0.141352 0.724137 0.675015   N2 -0.313659 0.763673 0.564289 
+   txt003 
+STRI 
+  V0 -2.76516 0.2 2.07562   V1 -2.81385 0.125 2.10494   V2 -2.60926 0.125 2.17917 
+  N0 -0.313659 0.763673 0.564289   N1 -0.474611 0.350859 0.807244   N2 -0.204668 0.313917 0.927128 
+   txt003 
+STRI 
+  V0 -2.56991 0.2 2.14271   V1 -2.51875 0.225 2.09531   V2 -2.70185 0.225 2.0375 
+  N0 -0.141352 0.724137 0.675015   N1 -1.96915e-17 1 -2.12543e-17   N2 -3.40413e-17 1 -5.65364e-17 
+   txt003 
+STRI 
+  V0 -2.70185 0.225 2.0375   V1 -2.76516 0.2 2.07562   V2 -2.56991 0.2 2.14271 
+  N0 -3.40413e-17 1 -5.65364e-17   N1 -0.313659 0.763673 0.564289   N2 -0.141352 0.724137 0.675015 
+   txt003 
+STRI 
+  V0 -2.51875 0.225 2.09531   V1 -2.46759 0.2 2.04792   V2 -2.63855 0.2 1.99938 
+  N0 -1.96915e-17 1 -2.12543e-17   N1 0.119688 0.715388 -0.6884   N2 0.275915 0.747596 -0.604128 
+   txt003 
+STRI 
+  V0 -2.63855 0.2 1.99938   V1 -2.70185 0.225 2.0375   V2 -2.51875 0.225 2.09531 
+  N0 0.275915 0.747596 -0.604128   N1 -3.40413e-17 1 -5.65364e-17   N2 -1.96915e-17 1 -2.12543e-17 
+   txt003 
+STRI 
+  V0 -2.46759 0.2 2.04792   V1 -2.42824 0.125 2.01146   V2 -2.58985 0.125 1.97006 
+  N0 0.119688 0.715388 -0.6884   N1 0.148104 0.301279 -0.941964   N2 0.359682 0.323804 -0.875089 
+   txt003 
+STRI 
+  V0 -2.58985 0.125 1.97006   V1 -2.63855 0.2 1.99938   V2 -2.46759 0.2 2.04792 
+  N0 0.359682 0.323804 -0.875089   N1 0.275915 0.747596 -0.604128   N2 0.119688 0.715388 -0.6884 
+   txt003 
+STRI 
+  V0 -2.42824 0.125 2.01146   V1 -2.4125 0 1.99687   V2 -2.57037 0 1.95833 
+  N0 0.148104 0.301279 -0.941964   N1 0.14834 -4.14777e-16 -0.988936   N2 0.364399 -4.84479e-16 -0.931243 
+   txt003 
+STRI 
+  V0 -2.57037 0 1.95833   V1 -2.58985 0.125 1.97006   V2 -2.42824 0.125 2.01146 
+  N0 0.364399 -4.84479e-16 -0.931243   N1 0.359682 0.323804 -0.875089   N2 0.148104 0.301279 -0.941964 
+   txt003 
+STRI 
+  V0 -2.83333 0 2.11667   V1 -2.81385 0.125 2.10494   V2 -2.93676 0.125 1.98256 
+  N0 -0.514496 0 0.857493   N1 -0.474611 0.350859 0.807244   N2 -0.810111 0.385772 0.441476 
+   txt003 
+STRI 
+  V0 -2.93676 0.125 1.98256   V1 -2.95833 0 1.98958   V2 -2.83333 0 2.11667 
+  N0 -0.810111 0.385772 0.441476   N1 -0.882353 0 0.470588   N2 -0.514496 0 0.857493 
+   txt003 
+STRI 
+  V0 -2.81385 0.125 2.10494   V1 -2.76516 0.2 2.07562   V2 -2.88284 0.2 1.96501 
+  N0 -0.474611 0.350859 0.807244   N1 -0.313659 0.763673 0.564289   N2 -0.519903 0.799556 0.300684 
+   txt003 
+STRI 
+  V0 -2.88284 0.2 1.96501   V1 -2.93676 0.125 1.98256   V2 -2.81385 0.125 2.10494 
+  N0 -0.519903 0.799556 0.300684   N1 -0.810111 0.385772 0.441476   N2 -0.474611 0.350859 0.807244 
+   txt003 
+STRI 
+  V0 -2.76516 0.2 2.07562   V1 -2.70185 0.225 2.0375   V2 -2.81273 0.225 1.94219 
+  N0 -0.313659 0.763673 0.564289   N1 -3.40413e-17 1 -5.65364e-17   N2 -3.3285e-17 1 -1.02253e-16 
+   txt003 
+STRI 
+  V0 -2.81273 0.225 1.94219   V1 -2.88284 0.2 1.96501   V2 -2.76516 0.2 2.07562 
+  N0 -3.3285e-17 1 -1.02253e-16   N1 -0.519903 0.799556 0.300684   N2 -0.313659 0.763673 0.564289 
+   txt003 
+STRI 
+  V0 -2.70185 0.225 2.0375   V1 -2.63855 0.2 1.99938   V2 -2.74263 0.2 1.91937 
+  N0 -3.40413e-17 1 -5.65364e-17   N1 0.275915 0.747596 -0.604128   N2 0.497152 0.792374 -0.35353 
+   txt003 
+STRI 
+  V0 -2.74263 0.2 1.91937   V1 -2.81273 0.225 1.94219   V2 -2.70185 0.225 2.0375 
+  N0 0.497152 0.792374 -0.35353   N1 -3.3285e-17 1 -1.02253e-16   N2 -3.40413e-17 1 -5.65364e-17 
+   txt003 
+STRI 
+  V0 -2.63855 0.2 1.99938   V1 -2.58985 0.125 1.97006   V2 -2.6887 0.125 1.90181 
+  N0 0.275915 0.747596 -0.604128   N1 0.359682 0.323804 -0.875089   N2 0.727532 0.37029 -0.577566 
+   txt003 
+STRI 
+  V0 -2.6887 0.125 1.90181   V1 -2.74263 0.2 1.91937   V2 -2.63855 0.2 1.99938 
+  N0 0.727532 0.37029 -0.577566   N1 0.497152 0.792374 -0.35353   N2 0.275915 0.747596 -0.604128 
+   txt003 
+STRI 
+  V0 -2.58985 0.125 1.97006   V1 -2.57037 0 1.95833   V2 -2.66713 0 1.89479 
+  N0 0.359682 0.323804 -0.875089   N1 0.364399 -4.84479e-16 -0.931243   N2 0.767382 -3.16384e-16 -0.64119 
+   txt003 
+STRI 
+  V0 -2.66713 0 1.89479   V1 -2.6887 0.125 1.90181   V2 -2.58985 0.125 1.97006 
+  N0 0.767382 -3.16384e-16 -0.64119   N1 0.727532 0.37029 -0.577566   N2 0.359682 0.323804 -0.875089 
+   txt003 
+STRI 
+  V0 -2.95833 0 1.98958   V1 -2.93676 0.125 1.98256   V2 -2.97778 0.125 1.8 
+  N0 -0.882353 0 0.470588   N1 -0.810111 0.385772 0.441476   N2 -0.923077 0.384615 -1.1396e-16 
+   txt003 
+STRI 
+  V0 -2.97778 0.125 1.8   V1 -3 0 1.8   V2 -2.95833 0 1.98958 
+  N0 -0.923077 0.384615 -1.1396e-16   N1 -1 0 0   N2 -0.882353 0 0.470588 
+   txt003 
+STRI 
+  V0 -2.93676 0.125 1.98256   V1 -2.88284 0.2 1.96501   V2 -2.92222 0.2 1.8 
+  N0 -0.810111 0.385772 0.441476   N1 -0.519903 0.799556 0.300684   N2 -0.6 0.8 -3.10757e-16 
+   txt003 
+STRI 
+  V0 -2.92222 0.2 1.8   V1 -2.97778 0.125 1.8   V2 -2.93676 0.125 1.98256 
+  N0 -0.6 0.8 -3.10757e-16   N1 -0.923077 0.384615 -1.1396e-16   N2 -0.810111 0.385772 0.441476 
+   txt003 
+STRI 
+  V0 -2.88284 0.2 1.96501   V1 -2.81273 0.225 1.94219   V2 -2.85 0.225 1.8 
+  N0 -0.519903 0.799556 0.300684   N1 -3.3285e-17 1 -1.02253e-16   N2 -2.13041e-31 1 -1.23358e-16 
+   txt003 
+STRI 
+  V0 -2.85 0.225 1.8   V1 -2.92222 0.2 1.8   V2 -2.88284 0.2 1.96501 
+  N0 -2.13041e-31 1 -1.23358e-16   N1 -0.6 0.8 -3.10757e-16   N2 -0.519903 0.799556 0.300684 
+   txt003 
+STRI 
+  V0 -2.81273 0.225 1.94219   V1 -2.74263 0.2 1.91937   V2 -2.77778 0.2 1.8 
+  N0 -3.3285e-17 1 -1.02253e-16   N1 0.497152 0.792374 -0.35353   N2 0.6 0.8 8.24322e-16 
+   txt003 
+STRI 
+  V0 -2.77778 0.2 1.8   V1 -2.85 0.225 1.8   V2 -2.81273 0.225 1.94219 
+  N0 0.6 0.8 8.24322e-16   N1 -2.13041e-31 1 -1.23358e-16   N2 -3.3285e-17 1 -1.02253e-16 
+   txt003 
+STRI 
+  V0 -2.74263 0.2 1.91937   V1 -2.6887 0.125 1.90181   V2 -2.72222 0.125 1.8 
+  N0 0.497152 0.792374 -0.35353   N1 0.727532 0.37029 -0.577566   N2 0.923077 0.384615 2.05733e-15 
+   txt003 
+STRI 
+  V0 -2.72222 0.125 1.8   V1 -2.77778 0.2 1.8   V2 -2.74263 0.2 1.91937 
+  N0 0.923077 0.384615 2.05733e-15   N1 0.6 0.8 8.24322e-16   N2 0.497152 0.792374 -0.35353 
+   txt003 
+STRI 
+  V0 -2.6887 0.125 1.90181   V1 -2.66713 0 1.89479   V2 -2.7 0 1.8 
+  N0 0.727532 0.37029 -0.577566   N1 0.767382 -3.16384e-16 -0.64119   N2 1 4.93432e-16 2.63164e-15 
+   txt003 
+STRI 
+  V0 -2.7 0 1.8   V1 -2.72222 0.125 1.8   V2 -2.6887 0.125 1.90181 
+  N0 1 4.93432e-16 2.63164e-15   N1 0.923077 0.384615 2.05733e-15   N2 0.727532 0.37029 -0.577566 
+   txt003 
+STRI 
+  V0 -2.7 0 1.8   V1 -2.72222 -0.125 1.8   V2 -2.70418 -0.125 1.66398 
+  N0 1 0 0   N1 0.923077 -0.384615 0   N2 0.895972 -0.38623 0.219226 
+   txt003 
+STRI 
+  V0 -2.70418 -0.125 1.66398   V1 -2.68287 0 1.67083   V2 -2.7 0 1.8 
+  N0 0.895972 -0.38623 0.219226   N1 0.972045 0 0.234794   N2 1 0 0 
+   txt003 
+STRI 
+  V0 -2.72222 -0.125 1.8   V1 -2.77778 -0.2 1.8   V2 -2.75747 -0.2 1.64684 
+  N0 0.923077 -0.384615 0   N1 0.6 -0.8 0   N2 0.57987 -0.801541 0.145888 
+   txt003 
+STRI 
+  V0 -2.75747 -0.2 1.64684   V1 -2.70418 -0.125 1.66398   V2 -2.72222 -0.125 1.8 
+  N0 0.57987 -0.801541 0.145888   N1 0.895972 -0.38623 0.219226   N2 0.923077 -0.384615 0 
+   txt003 
+STRI 
+  V0 -2.77778 -0.2 1.8   V1 -2.85 -0.225 1.8   V2 -2.82674 -0.225 1.62457 
+  N0 0.6 -0.8 0   N1 -0 -1 -0   N2 9.48478e-19 -1 -2.94924e-18 
+   txt003 
+STRI 
+  V0 -2.82674 -0.225 1.62457   V1 -2.75747 -0.2 1.64684   V2 -2.77778 -0.2 1.8 
+  N0 9.48478e-19 -1 -2.94924e-18   N1 0.57987 -0.801541 0.145888   N2 0.6 -0.8 0 
+   txt003 
+STRI 
+  V0 -2.85 -0.225 1.8   V1 -2.92222 -0.2 1.8   V2 -2.896 -0.2 1.60229 
+  N0 -0 -1 -0   N1 -0.6 -0.8 -0   N2 -0.577707 -0.801752 -0.153129 
+   txt003 
+STRI 
+  V0 -2.896 -0.2 1.60229   V1 -2.82674 -0.225 1.62457   V2 -2.85 -0.225 1.8 
+  N0 -0.577707 -0.801752 -0.153129   N1 9.48478e-19 -1 -2.94924e-18   N2 -0 -1 -0 
+   txt003 
+STRI 
+  V0 -2.92222 -0.2 1.8   V1 -2.97778 -0.125 1.8   V2 -2.94929 -0.125 1.58515 
+  N0 -0.6 -0.8 -0   N1 -0.923077 -0.384615 -0   N2 -0.890548 -0.386679 -0.23959 
+   txt003 
+STRI 
+  V0 -2.94929 -0.125 1.58515   V1 -2.896 -0.2 1.60229   V2 -2.92222 -0.2 1.8 
+  N0 -0.890548 -0.386679 -0.23959   N1 -0.577707 -0.801752 -0.153129   N2 -0.6 -0.8 -0 
+   txt003 
+STRI 
+  V0 -2.97778 -0.125 1.8   V1 -3 0 1.8   V2 -2.9706 0 1.5783 
+  N0 -0.923077 -0.384615 -0   N1 -1 -9.86865e-16 -0   N2 -0.965311 -7.59377e-16 -0.261102 
+   txt003 
+STRI 
+  V0 -2.9706 0 1.5783   V1 -2.94929 -0.125 1.58515   V2 -2.97778 -0.125 1.8 
+  N0 -0.965311 -7.59377e-16 -0.261102   N1 -0.890548 -0.386679 -0.23959   N2 -0.923077 -0.384615 -0 
+   txt003 
+STRI 
+  V0 -2.68287 0 1.67083   V1 -2.70418 -0.125 1.66398   V2 -2.64829 -0.125 1.50535 
+  N0 0.972045 0 0.234794   N1 0.895972 -0.38623 0.219226   N2 0.842942 -0.376421 0.38439 
+   txt003 
+STRI 
+  V0 -2.64829 -0.125 1.50535   V1 -2.62963 0 1.51667   V2 -2.68287 0 1.67083 
+  N0 0.842942 -0.376421 0.38439   N1 0.913812 0 0.406138   N2 0.972045 0 0.234794 
+   txt003 
+STRI 
+  V0 -2.70418 -0.125 1.66398   V1 -2.75747 -0.2 1.64684   V2 -2.69492 -0.2 1.47706 
+  N0 0.895972 -0.38623 0.219226   N1 0.57987 -0.801541 0.145888   N2 0.548194 -0.793356 0.264707 
+   txt003 
+STRI 
+  V0 -2.69492 -0.2 1.47706   V1 -2.64829 -0.125 1.50535   V2 -2.70418 -0.125 1.66398 
+  N0 0.548194 -0.793356 0.264707   N1 0.842942 -0.376421 0.38439   N2 0.895972 -0.38623 0.219226 
+   txt003 
+STRI 
+  V0 -2.75747 -0.2 1.64684   V1 -2.82674 -0.225 1.62457   V2 -2.75556 -0.225 1.44028 
+  N0 0.57987 -0.801541 0.145888   N1 9.48478e-19 -1 -2.94924e-18   N2 5.73642e-18 -1 -9.4564e-18 
+   txt003 
+STRI 
+  V0 -2.75556 -0.225 1.44028   V1 -2.69492 -0.2 1.47706   V2 -2.75747 -0.2 1.64684 
+  N0 5.73642e-18 -1 -9.4564e-18   N1 0.548194 -0.793356 0.264707   N2 0.57987 -0.801541 0.145888 
+   txt003 
+STRI 
+  V0 -2.82674 -0.225 1.62457   V1 -2.896 -0.2 1.60229   V2 -2.81619 -0.2 1.4035 
+  N0 9.48478e-19 -1 -2.94924e-18   N1 -0.577707 -0.801752 -0.153129   N2 -0.534196 -0.794341 -0.289235 
+   txt003 
+STRI 
+  V0 -2.81619 -0.2 1.4035   V1 -2.75556 -0.225 1.44028   V2 -2.82674 -0.225 1.62457 
+  N0 -0.534196 -0.794341 -0.289235   N1 5.73642e-18 -1 -9.4564e-18   N2 9.48478e-19 -1 -2.94924e-18 
+   txt003 
+STRI 
+  V0 -2.896 -0.2 1.60229   V1 -2.94929 -0.125 1.58515   V2 -2.86283 -0.125 1.37521 
+  N0 -0.577707 -0.801752 -0.153129   N1 -0.890548 -0.386679 -0.23959   N2 -0.807437 -0.378466 -0.452558 
+   txt003 
+STRI 
+  V0 -2.86283 -0.125 1.37521   V1 -2.81619 -0.2 1.4035   V2 -2.896 -0.2 1.60229 
+  N0 -0.807437 -0.378466 -0.452558   N1 -0.534196 -0.794341 -0.289235   N2 -0.577707 -0.801752 -0.153129 
+   txt003 
+STRI 
+  V0 -2.94929 -0.125 1.58515   V1 -2.9706 0 1.5783   V2 -2.88148 0 1.36389 
+  N0 -0.890548 -0.386679 -0.23959   N1 -0.965311 -7.59377e-16 -0.261102   N2 -0.869653 -7.07402e-16 -0.493664 
+   txt003 
+STRI 
+  V0 -2.88148 0 1.36389   V1 -2.86283 -0.125 1.37521   V2 -2.94929 -0.125 1.58515 
+  N0 -0.869653 -7.07402e-16 -0.493664   N1 -0.807437 -0.378466 -0.452558   N2 -0.890548 -0.386679 -0.23959 
+   txt003 
+STRI 
+  V0 -2.62963 0 1.51667   V1 -2.64829 -0.125 1.50535   V2 -2.55185 -0.125 1.33576 
+  N0 0.913812 0 0.406138   N1 0.842942 -0.376421 0.38439   N2 0.772293 -0.349434 0.530527 
+   txt003 
+STRI 
+  V0 -2.55185 -0.125 1.33576   V1 -2.5375 0 1.35   V2 -2.62963 0 1.51667 
+  N0 0.772293 -0.349434 0.530527   N1 0.83205 0 0.5547   N2 0.913812 0 0.406138 
+   txt003 
+STRI 
+  V0 -2.64829 -0.125 1.50535   V1 -2.69492 -0.2 1.47706   V2 -2.58773 -0.2 1.30017 
+  N0 0.842942 -0.376421 0.38439   N1 0.548194 -0.793356 0.264707   N2 0.515846 -0.768155 0.379264 
+   txt003 
+STRI 
+  V0 -2.58773 -0.2 1.30017   V1 -2.55185 -0.125 1.33576   V2 -2.64829 -0.125 1.50535 
+  N0 0.515846 -0.768155 0.379264   N1 0.772293 -0.349434 0.530527   N2 0.842942 -0.376421 0.38439 
+   txt003 
+STRI 
+  V0 -2.69492 -0.2 1.47706   V1 -2.75556 -0.225 1.44028   V2 -2.63437 -0.225 1.25391 
+  N0 0.548194 -0.793356 0.264707   N1 5.73642e-18 -1 -9.4564e-18   N2 1.5603e-17 -1 -1.57299e-17 
+   txt003 
+STRI 
+  V0 -2.63437 -0.225 1.25391   V1 -2.58773 -0.2 1.30017   V2 -2.69492 -0.2 1.47706 
+  N0 1.5603e-17 -1 -1.57299e-17   N1 0.515846 -0.768155 0.379264   N2 0.548194 -0.793356 0.264707 
+   txt003 
+STRI 
+  V0 -2.75556 -0.225 1.44028   V1 -2.81619 -0.2 1.4035   V2 -2.68102 -0.2 1.20764 
+  N0 5.73642e-18 -1 -9.4564e-18   N1 -0.534196 -0.794341 -0.289235   N2 -0.486433 -0.770599 -0.411777 
+   txt003 
+STRI 
+  V0 -2.68102 -0.2 1.20764   V1 -2.63437 -0.225 1.25391   V2 -2.75556 -0.225 1.44028 
+  N0 -0.486433 -0.770599 -0.411777   N1 1.5603e-17 -1 -1.57299e-17   N2 5.73642e-18 -1 -9.4564e-18 
+   txt003 
+STRI 
+  V0 -2.81619 -0.2 1.4035   V1 -2.86283 -0.125 1.37521   V2 -2.7169 -0.125 1.17205 
+  N0 -0.534196 -0.794341 -0.289235   N1 -0.807437 -0.378466 -0.452558   N2 -0.700515 -0.35392 -0.619694 
+   txt003 
+STRI 
+  V0 -2.7169 -0.125 1.17205   V1 -2.68102 -0.2 1.20764   V2 -2.81619 -0.2 1.4035 
+  N0 -0.700515 -0.35392 -0.619694   N1 -0.486433 -0.770599 -0.411777   N2 -0.534196 -0.794341 -0.289235 
+   txt003 
+STRI 
+  V0 -2.86283 -0.125 1.37521   V1 -2.88148 0 1.36389   V2 -2.73125 0 1.15781 
+  N0 -0.807437 -0.378466 -0.452558   N1 -0.869653 -7.07402e-16 -0.493664   N2 -0.743581 -2.38916e-16 -0.668646 
+   txt003 
+STRI 
+  V0 -2.73125 0 1.15781   V1 -2.7169 -0.125 1.17205   V2 -2.86283 -0.125 1.37521 
+  N0 -0.743581 -2.38916e-16 -0.668646   N1 -0.700515 -0.35392 -0.619694   N2 -0.807437 -0.378466 -0.452558 
+   txt003 
+STRI 
+  V0 -2.5375 0 1.35   V1 -2.55185 -0.125 1.33576   V2 -2.41221 -0.125 1.16687 
+  N0 0.83205 0 0.5547   N1 0.772293 -0.349434 0.530527   N2 0.676612 -0.31353 0.666255 
+   txt003 
+STRI 
+  V0 -2.41221 -0.125 1.16687   V1 -2.4037 0 1.18333   V2 -2.5375 0 1.35 
+  N0 0.676612 -0.31353 0.666255   N1 0.722374 0 0.691503   N2 0.83205 0 0.5547 
+   txt003 
+STRI 
+  V0 -2.55185 -0.125 1.33576   V1 -2.58773 -0.2 1.30017   V2 -2.43347 -0.2 1.12572 
+  N0 0.772293 -0.349434 0.530527   N1 0.515846 -0.768155 0.379264   N2 0.471519 -0.729692 0.495195 
+   txt003 
+STRI 
+  V0 -2.43347 -0.2 1.12572   V1 -2.41221 -0.125 1.16687   V2 -2.55185 -0.125 1.33576 
+  N0 0.471519 -0.729692 0.495195   N1 0.676612 -0.31353 0.666255   N2 0.772293 -0.349434 0.530527 
+   txt003 
+STRI 
+  V0 -2.58773 -0.2 1.30017   V1 -2.63437 -0.225 1.25391   V2 -2.46111 -0.225 1.07222 
+  N0 0.515846 -0.768155 0.379264   N1 1.5603e-17 -1 -1.57299e-17   N2 3.17396e-17 -1 -1.63988e-17 
+   txt003 
+STRI 
+  V0 -2.46111 -0.225 1.07222   V1 -2.43347 -0.2 1.12572   V2 -2.58773 -0.2 1.30017 
+  N0 3.17396e-17 -1 -1.63988e-17   N1 0.471519 -0.729692 0.495195   N2 0.515846 -0.768155 0.379264 
+   txt003 
+STRI 
+  V0 -2.63437 -0.225 1.25391   V1 -2.68102 -0.2 1.20764   V2 -2.48875 -0.2 1.01872 
+  N0 1.5603e-17 -1 -1.57299e-17   N1 -0.486433 -0.770599 -0.411777   N2 -0.433172 -0.735531 -0.520919 
+   txt003 
+STRI 
+  V0 -2.48875 -0.2 1.01872   V1 -2.46111 -0.225 1.07222   V2 -2.63437 -0.225 1.25391 
+  N0 -0.433172 -0.735531 -0.520919   N1 3.17396e-17 -1 -1.63988e-17   N2 1.5603e-17 -1 -1.57299e-17 
+   txt003 
+STRI 
+  V0 -2.68102 -0.2 1.20764   V1 -2.7169 -0.125 1.17205   V2 -2.51001 -0.125 0.977572 
+  N0 -0.486433 -0.770599 -0.411777   N1 -0.700515 -0.35392 -0.619694   N2 -0.589822 -0.322549 -0.740319 
+   txt003 
+STRI 
+  V0 -2.51001 -0.125 0.977572   V1 -2.48875 -0.2 1.01872   V2 -2.68102 -0.2 1.20764 
+  N0 -0.589822 -0.322549 -0.740319   N1 -0.433172 -0.735531 -0.520919   N2 -0.486433 -0.770599 -0.411777 
+   txt003 
+STRI 
+  V0 -2.7169 -0.125 1.17205   V1 -2.73125 0 1.15781   V2 -2.51852 0 0.961111 
+  N0 -0.700515 -0.35392 -0.619694   N1 -0.743581 -2.38916e-16 -0.668646   N2 -0.617031 -2.64751e-17 -0.786939 
+   txt003 
+STRI 
+  V0 -2.51852 0 0.961111   V1 -2.51001 -0.125 0.977572   V2 -2.7169 -0.125 1.17205 
+  N0 -0.617031 -2.64751e-17 -0.786939   N1 -0.589822 -0.322549 -0.740319   N2 -0.700515 -0.35392 -0.619694 
+   txt003 
+STRI 
+  V0 -2.4037 0 1.18333   V1 -2.41221 -0.125 1.16687   V2 -2.22668 -0.125 1.01033 
+  N0 0.722374 0 0.691503   N1 0.676612 -0.31353 0.666255   N2 0.548733 -0.289562 0.784249 
+   txt003 
+STRI 
+  V0 -2.22668 -0.125 1.01033   V1 -2.22546 0 1.02917   V2 -2.4037 0 1.18333 
+  N0 0.548733 -0.289562 0.784249   N1 0.580973 0 0.813923   N2 0.722374 0 0.691503 
+   txt003 
+STRI 
+  V0 -2.41221 -0.125 1.16687   V1 -2.43347 -0.2 1.12572   V2 -2.22972 -0.2 0.963227 
+  N0 0.676612 -0.31353 0.666255   N1 0.471519 -0.729692 0.495195   N2 0.396971 -0.700023 0.593618 
+   txt003 
+STRI 
+  V0 -2.22972 -0.2 0.963227   V1 -2.22668 -0.125 1.01033   V2 -2.41221 -0.125 1.16687 
+  N0 0.396971 -0.700023 0.593618   N1 0.548733 -0.289562 0.784249   N2 0.676612 -0.31353 0.666255 
+   txt003 
+STRI 
+  V0 -2.43347 -0.2 1.12572   V1 -2.46111 -0.225 1.07222   V2 -2.23368 -0.225 0.901997 
+  N0 0.471519 -0.729692 0.495195   N1 3.17396e-17 -1 -1.63988e-17   N2 5.4409e-17 -1 -3.51585e-18 
+   txt003 
+STRI 
+  V0 -2.23368 -0.225 0.901997   V1 -2.22972 -0.2 0.963227   V2 -2.43347 -0.2 1.12572 
+  N0 5.4409e-17 -1 -3.51585e-18   N1 0.396971 -0.700023 0.593618   N2 0.471519 -0.729692 0.495195 
+   txt003 
+STRI 
+  V0 -2.46111 -0.225 1.07222   V1 -2.48875 -0.2 1.01872   V2 -2.23764 -0.2 0.840766 
+  N0 3.17396e-17 -1 -1.63988e-17   N1 -0.433172 -0.735531 -0.520919   N2 -0.367048 -0.708353 -0.60292 
+   txt003 
+STRI 
+  V0 -2.23764 -0.2 0.840766   V1 -2.23368 -0.225 0.901997   V2 -2.46111 -0.225 1.07222 
+  N0 -0.367048 -0.708353 -0.60292   N1 5.4409e-17 -1 -3.51585e-18   N2 3.17396e-17 -1 -1.63988e-17 
+   txt003 
+STRI 
+  V0 -2.48875 -0.2 1.01872   V1 -2.51001 -0.125 0.977572   V2 -2.24068 -0.125 0.793666 
+  N0 -0.433172 -0.735531 -0.520919   N1 -0.589822 -0.322549 -0.740319   N2 -0.485318 -0.301052 -0.820874 
+   txt003 
+STRI 
+  V0 -2.24068 -0.125 0.793666   V1 -2.23764 -0.2 0.840766   V2 -2.48875 -0.2 1.01872 
+  N0 -0.485318 -0.301052 -0.820874   N1 -0.367048 -0.708353 -0.60292   N2 -0.433172 -0.735531 -0.520919 
+   txt003 
+STRI 
+  V0 -2.51001 -0.125 0.977572   V1 -2.51852 0 0.961111   V2 -2.2419 0 0.774826 
+  N0 -0.589822 -0.322549 -0.740319   N1 -0.617031 -2.64751e-17 -0.786939   N2 -0.504836 2.02979e-16 -0.863216 
+   txt003 
+STRI 
+  V0 -2.2419 0 0.774826   V1 -2.24068 -0.125 0.793666   V2 -2.51001 -0.125 0.977572 
+  N0 -0.504836 2.02979e-16 -0.863216   N1 -0.485318 -0.301052 -0.820874   N2 -0.589822 -0.322549 -0.740319 
+   txt003 
+STRI 
+  V0 -2.22546 0 1.02917   V1 -2.22668 -0.125 1.01033   V2 -1.99259 -0.125 0.877778 
+  N0 0.580973 0 0.813923   N1 0.548733 -0.289562 0.784249   N2 0.390503 -0.30734 0.867784 
+   txt003 
+STRI 
+  V0 -1.99259 -0.125 0.877778   V1 -2 0 0.9   V2 -2.22546 0 1.02917 
+  N0 0.390503 -0.30734 0.867784   N1 0.410365 0 0.911922   N2 0.580973 0 0.813923 
+   txt003 
+STRI 
+  V0 -2.22668 -0.125 1.01033   V1 -2.22972 -0.2 0.963227   V2 -1.97407 -0.2 0.822222 
+  N0 0.548733 -0.289562 0.784249   N1 0.396971 -0.700023 0.593618   N2 0.285351 -0.718662 0.634113 
+   txt003 
+STRI 
+  V0 -1.97407 -0.2 0.822222   V1 -1.99259 -0.125 0.877778   V2 -2.22668 -0.125 1.01033 
+  N0 0.285351 -0.718662 0.634113   N1 0.390503 -0.30734 0.867784   N2 0.548733 -0.289562 0.784249 
+   txt003 
+STRI 
+  V0 -2.22972 -0.2 0.963227   V1 -2.23368 -0.225 0.901997   V2 -1.95 -0.225 0.75 
+  N0 0.396971 -0.700023 0.593618   N1 5.4409e-17 -1 -3.51585e-18   N2 7.83687e-17 -1 2.61229e-17 
+   txt003 
+STRI 
+  V0 -1.95 -0.225 0.75   V1 -1.97407 -0.2 0.822222   V2 -2.22972 -0.2 0.963227 
+  N0 7.83687e-17 -1 2.61229e-17   N1 0.285351 -0.718662 0.634113   N2 0.396971 -0.700023 0.593618 
+   txt003 
+STRI 
+  V0 -2.23368 -0.225 0.901997   V1 -2.23764 -0.2 0.840766   V2 -1.92593 -0.2 0.677778 
+  N0 5.4409e-17 -1 -3.51585e-18   N1 -0.367048 -0.708353 -0.60292   N2 -0.285351 -0.718662 -0.634113 
+   txt003 
+STRI 
+  V0 -1.92593 -0.2 0.677778   V1 -1.95 -0.225 0.75   V2 -2.23368 -0.225 0.901997 
+  N0 -0.285351 -0.718662 -0.634113   N1 7.83687e-17 -1 2.61229e-17   N2 5.4409e-17 -1 -3.51585e-18 
+   txt003 
+STRI 
+  V0 -2.23764 -0.2 0.840766   V1 -2.24068 -0.125 0.793666   V2 -1.90741 -0.125 0.622222 
+  N0 -0.367048 -0.708353 -0.60292   N1 -0.485318 -0.301052 -0.820874   N2 -0.390503 -0.30734 -0.867784 
+   txt003 
+STRI 
+  V0 -1.90741 -0.125 0.622222   V1 -1.92593 -0.2 0.677778   V2 -2.23764 -0.2 0.840766 
+  N0 -0.390503 -0.30734 -0.867784   N1 -0.285351 -0.718662 -0.634113   N2 -0.367048 -0.708353 -0.60292 
+   txt003 
+STRI 
+  V0 -2.24068 -0.125 0.793666   V1 -2.2419 0 0.774826   V2 -1.9 0 0.6 
+  N0 -0.485318 -0.301052 -0.820874   N1 -0.504836 2.02979e-16 -0.863216   N2 -0.410365 4.49972e-17 -0.911922 
+   txt003 
+STRI 
+  V0 -1.9 0 0.6   V1 -1.90741 -0.125 0.622222   V2 -2.24068 -0.125 0.793666 
+  N0 -0.410365 4.49972e-17 -0.911922   N1 -0.390503 -0.30734 -0.867784   N2 -0.485318 -0.301052 -0.820874 
+   txt003 
+STRI 
+  V0 -3 0 1.8   V1 -2.97778 0.125 1.8   V2 -2.94929 0.125 1.58515 
+  N0 -1 0 0   N1 -0.923077 0.384615 0   N2 -0.890548 0.386679 -0.23959 
+   txt003 
+STRI 
+  V0 -2.94929 0.125 1.58515   V1 -2.9706 0 1.5783   V2 -3 0 1.8 
+  N0 -0.890548 0.386679 -0.23959   N1 -0.965311 0 -0.261102   N2 -1 0 0 
+   txt003 
+STRI 
+  V0 -2.97778 0.125 1.8   V1 -2.92222 0.2 1.8   V2 -2.896 0.2 1.60229 
+  N0 -0.923077 0.384615 0   N1 -0.6 0.8 0   N2 -0.577707 0.801752 -0.153129 
+   txt003 
+STRI 
+  V0 -2.896 0.2 1.60229   V1 -2.94929 0.125 1.58515   V2 -2.97778 0.125 1.8 
+  N0 -0.577707 0.801752 -0.153129   N1 -0.890548 0.386679 -0.23959   N2 -0.923077 0.384615 0 
+   txt003 
+STRI 
+  V0 -2.92222 0.2 1.8   V1 -2.85 0.225 1.8   V2 -2.82674 0.225 1.62457 
+  N0 -0.6 0.8 0   N1 -0 1 0   N2 9.48478e-19 1 -2.94924e-18 
+   txt003 
+STRI 
+  V0 -2.82674 0.225 1.62457   V1 -2.896 0.2 1.60229   V2 -2.92222 0.2 1.8 
+  N0 9.48478e-19 1 -2.94924e-18   N1 -0.577707 0.801752 -0.153129   N2 -0.6 0.8 0 
+   txt003 
+STRI 
+  V0 -2.85 0.225 1.8   V1 -2.77778 0.2 1.8   V2 -2.75747 0.2 1.64684 
+  N0 -0 1 0   N1 0.6 0.8 0   N2 0.57987 0.801541 0.145888 
+   txt003 
+STRI 
+  V0 -2.75747 0.2 1.64684   V1 -2.82674 0.225 1.62457   V2 -2.85 0.225 1.8 
+  N0 0.57987 0.801541 0.145888   N1 9.48478e-19 1 -2.94924e-18   N2 -0 1 0 
+   txt003 
+STRI 
+  V0 -2.77778 0.2 1.8   V1 -2.72222 0.125 1.8   V2 -2.70418 0.125 1.66398 
+  N0 0.6 0.8 0   N1 0.923077 0.384615 0   N2 0.895972 0.38623 0.219226 
+   txt003 
+STRI 
+  V0 -2.70418 0.125 1.66398   V1 -2.75747 0.2 1.64684   V2 -2.77778 0.2 1.8 
+  N0 0.895972 0.38623 0.219226   N1 0.57987 0.801541 0.145888   N2 0.6 0.8 0 
+   txt003 
+STRI 
+  V0 -2.72222 0.125 1.8   V1 -2.7 0 1.8   V2 -2.68287 0 1.67083 
+  N0 0.923077 0.384615 0   N1 1 9.86865e-16 0   N2 0.972045 1.13306e-15 0.234794 
+   txt003 
+STRI 
+  V0 -2.68287 0 1.67083   V1 -2.70418 0.125 1.66398   V2 -2.72222 0.125 1.8 
+  N0 0.972045 1.13306e-15 0.234794   N1 0.895972 0.38623 0.219226   N2 0.923077 0.384615 0 
+   txt003 
+STRI 
+  V0 -2.9706 0 1.5783   V1 -2.94929 0.125 1.58515   V2 -2.86283 0.125 1.37521 
+  N0 -0.965311 0 -0.261102   N1 -0.890548 0.386679 -0.23959   N2 -0.807437 0.378466 -0.452558 
+   txt003 
+STRI 
+  V0 -2.86283 0.125 1.37521   V1 -2.88148 0 1.36389   V2 -2.9706 0 1.5783 
+  N0 -0.807437 0.378466 -0.452558   N1 -0.869653 0 -0.493664   N2 -0.965311 0 -0.261102 
+   txt003 
+STRI 
+  V0 -2.94929 0.125 1.58515   V1 -2.896 0.2 1.60229   V2 -2.81619 0.2 1.4035 
+  N0 -0.890548 0.386679 -0.23959   N1 -0.577707 0.801752 -0.153129   N2 -0.534196 0.794341 -0.289235 
+   txt003 
+STRI 
+  V0 -2.81619 0.2 1.4035   V1 -2.86283 0.125 1.37521   V2 -2.94929 0.125 1.58515 
+  N0 -0.534196 0.794341 -0.289235   N1 -0.807437 0.378466 -0.452558   N2 -0.890548 0.386679 -0.23959 
+   txt003 
+STRI 
+  V0 -2.896 0.2 1.60229   V1 -2.82674 0.225 1.62457   V2 -2.75556 0.225 1.44028 
+  N0 -0.577707 0.801752 -0.153129   N1 9.48478e-19 1 -2.94924e-18   N2 5.73642e-18 1 -9.4564e-18 
+   txt003 
+STRI 
+  V0 -2.75556 0.225 1.44028   V1 -2.81619 0.2 1.4035   V2 -2.896 0.2 1.60229 
+  N0 5.73642e-18 1 -9.4564e-18   N1 -0.534196 0.794341 -0.289235   N2 -0.577707 0.801752 -0.153129 
+   txt003 
+STRI 
+  V0 -2.82674 0.225 1.62457   V1 -2.75747 0.2 1.64684   V2 -2.69492 0.2 1.47706 
+  N0 9.48478e-19 1 -2.94924e-18   N1 0.57987 0.801541 0.145888   N2 0.548194 0.793356 0.264707 
+   txt003 
+STRI 
+  V0 -2.69492 0.2 1.47706   V1 -2.75556 0.225 1.44028   V2 -2.82674 0.225 1.62457 
+  N0 0.548194 0.793356 0.264707   N1 5.73642e-18 1 -9.4564e-18   N2 9.48478e-19 1 -2.94924e-18 
+   txt003 
+STRI 
+  V0 -2.75747 0.2 1.64684   V1 -2.70418 0.125 1.66398   V2 -2.64829 0.125 1.50535 
+  N0 0.57987 0.801541 0.145888   N1 0.895972 0.38623 0.219226   N2 0.842942 0.376421 0.38439 
+   txt003 
+STRI 
+  V0 -2.64829 0.125 1.50535   V1 -2.69492 0.2 1.47706   V2 -2.75747 0.2 1.64684 
+  N0 0.842942 0.376421 0.38439   N1 0.548194 0.793356 0.264707   N2 0.57987 0.801541 0.145888 
+   txt003 
+STRI 
+  V0 -2.70418 0.125 1.66398   V1 -2.68287 0 1.67083   V2 -2.62963 0 1.51667 
+  N0 0.895972 0.38623 0.219226   N1 0.972045 1.13306e-15 0.234794   N2 0.913812 1.42786e-15 0.406138 
+   txt003 
+STRI 
+  V0 -2.62963 0 1.51667   V1 -2.64829 0.125 1.50535   V2 -2.70418 0.125 1.66398 
+  N0 0.913812 1.42786e-15 0.406138   N1 0.842942 0.376421 0.38439   N2 0.895972 0.38623 0.219226 
+   txt003 
+STRI 
+  V0 -2.88148 0 1.36389   V1 -2.86283 0.125 1.37521   V2 -2.7169 0.125 1.17205 
+  N0 -0.869653 0 -0.493664   N1 -0.807437 0.378466 -0.452558   N2 -0.700515 0.35392 -0.619694 
+   txt003 
+STRI 
+  V0 -2.7169 0.125 1.17205   V1 -2.73125 0 1.15781   V2 -2.88148 0 1.36389 
+  N0 -0.700515 0.35392 -0.619694   N1 -0.743581 0 -0.668646   N2 -0.869653 0 -0.493664 
+   txt003 
+STRI 
+  V0 -2.86283 0.125 1.37521   V1 -2.81619 0.2 1.4035   V2 -2.68102 0.2 1.20764 
+  N0 -0.807437 0.378466 -0.452558   N1 -0.534196 0.794341 -0.289235   N2 -0.486433 0.770599 -0.411777 
+   txt003 
+STRI 
+  V0 -2.68102 0.2 1.20764   V1 -2.7169 0.125 1.17205   V2 -2.86283 0.125 1.37521 
+  N0 -0.486433 0.770599 -0.411777   N1 -0.700515 0.35392 -0.619694   N2 -0.807437 0.378466 -0.452558 
+   txt003 
+STRI 
+  V0 -2.81619 0.2 1.4035   V1 -2.75556 0.225 1.44028   V2 -2.63437 0.225 1.25391 
+  N0 -0.534196 0.794341 -0.289235   N1 5.73642e-18 1 -9.4564e-18   N2 1.5603e-17 1 -1.57299e-17 
+   txt003 
+STRI 
+  V0 -2.63437 0.225 1.25391   V1 -2.68102 0.2 1.20764   V2 -2.81619 0.2 1.4035 
+  N0 1.5603e-17 1 -1.57299e-17   N1 -0.486433 0.770599 -0.411777   N2 -0.534196 0.794341 -0.289235 
+   txt003 
+STRI 
+  V0 -2.75556 0.225 1.44028   V1 -2.69492 0.2 1.47706   V2 -2.58773 0.2 1.30017 
+  N0 5.73642e-18 1 -9.4564e-18   N1 0.548194 0.793356 0.264707   N2 0.515846 0.768155 0.379264 
+   txt003 
+STRI 
+  V0 -2.58773 0.2 1.30017   V1 -2.63437 0.225 1.25391   V2 -2.75556 0.225 1.44028 
+  N0 0.515846 0.768155 0.379264   N1 1.5603e-17 1 -1.57299e-17   N2 5.73642e-18 1 -9.4564e-18 
+   txt003 
+STRI 
+  V0 -2.69492 0.2 1.47706   V1 -2.64829 0.125 1.50535   V2 -2.55185 0.125 1.33576 
+  N0 0.548194 0.793356 0.264707   N1 0.842942 0.376421 0.38439   N2 0.772293 0.349434 0.530527 
+   txt003 
+STRI 
+  V0 -2.55185 0.125 1.33576   V1 -2.58773 0.2 1.30017   V2 -2.69492 0.2 1.47706 
+  N0 0.772293 0.349434 0.530527   N1 0.515846 0.768155 0.379264   N2 0.548194 0.793356 0.264707 
+   txt003 
+STRI 
+  V0 -2.64829 0.125 1.50535   V1 -2.62963 0 1.51667   V2 -2.5375 0 1.35 
+  N0 0.842942 0.376421 0.38439   N1 0.913812 1.42786e-15 0.406138   N2 0.83205 1.23168e-15 0.5547 
+   txt003 
+STRI 
+  V0 -2.5375 0 1.35   V1 -2.55185 0.125 1.33576   V2 -2.64829 0.125 1.50535 
+  N0 0.83205 1.23168e-15 0.5547   N1 0.772293 0.349434 0.530527   N2 0.842942 0.376421 0.38439 
+   txt003 
+STRI 
+  V0 -2.73125 0 1.15781   V1 -2.7169 0.125 1.17205   V2 -2.51001 0.125 0.977572 
+  N0 -0.743581 0 -0.668646   N1 -0.700515 0.35392 -0.619694   N2 -0.589822 0.322549 -0.740319 
+   txt003 
+STRI 
+  V0 -2.51001 0.125 0.977572   V1 -2.51852 0 0.961111   V2 -2.73125 0 1.15781 
+  N0 -0.589822 0.322549 -0.740319   N1 -0.617031 0 -0.786939   N2 -0.743581 0 -0.668646 
+   txt003 
+STRI 
+  V0 -2.7169 0.125 1.17205   V1 -2.68102 0.2 1.20764   V2 -2.48875 0.2 1.01872 
+  N0 -0.700515 0.35392 -0.619694   N1 -0.486433 0.770599 -0.411777   N2 -0.433172 0.735531 -0.520919 
+   txt003 
+STRI 
+  V0 -2.48875 0.2 1.01872   V1 -2.51001 0.125 0.977572   V2 -2.7169 0.125 1.17205 
+  N0 -0.433172 0.735531 -0.520919   N1 -0.589822 0.322549 -0.740319   N2 -0.700515 0.35392 -0.619694 
+   txt003 
+STRI 
+  V0 -2.68102 0.2 1.20764   V1 -2.63437 0.225 1.25391   V2 -2.46111 0.225 1.07222 
+  N0 -0.486433 0.770599 -0.411777   N1 1.5603e-17 1 -1.57299e-17   N2 3.17396e-17 1 -1.63988e-17 
+   txt003 
+STRI 
+  V0 -2.46111 0.225 1.07222   V1 -2.48875 0.2 1.01872   V2 -2.68102 0.2 1.20764 
+  N0 3.17396e-17 1 -1.63988e-17   N1 -0.433172 0.735531 -0.520919   N2 -0.486433 0.770599 -0.411777 
+   txt003 
+STRI 
+  V0 -2.63437 0.225 1.25391   V1 -2.58773 0.2 1.30017   V2 -2.43347 0.2 1.12572 
+  N0 1.5603e-17 1 -1.57299e-17   N1 0.515846 0.768155 0.379264   N2 0.471519 0.729692 0.495195 
+   txt003 
+STRI 
+  V0 -2.43347 0.2 1.12572   V1 -2.46111 0.225 1.07222   V2 -2.63437 0.225 1.25391 
+  N0 0.471519 0.729692 0.495195   N1 3.17396e-17 1 -1.63988e-17   N2 1.5603e-17 1 -1.57299e-17 
+   txt003 
+STRI 
+  V0 -2.58773 0.2 1.30017   V1 -2.55185 0.125 1.33576   V2 -2.41221 0.125 1.16687 
+  N0 0.515846 0.768155 0.379264   N1 0.772293 0.349434 0.530527   N2 0.676612 0.31353 0.666255 
+   txt003 
+STRI 
+  V0 -2.41221 0.125 1.16687   V1 -2.43347 0.2 1.12572   V2 -2.58773 0.2 1.30017 
+  N0 0.676612 0.31353 0.666255   N1 0.471519 0.729692 0.495195   N2 0.515846 0.768155 0.379264 
+   txt003 
+STRI 
+  V0 -2.55185 0.125 1.33576   V1 -2.5375 0 1.35   V2 -2.4037 0 1.18333 
+  N0 0.772293 0.349434 0.530527   N1 0.83205 1.23168e-15 0.5547   N2 0.722374 1.2247e-15 0.691503 
+   txt003 
+STRI 
+  V0 -2.4037 0 1.18333   V1 -2.41221 0.125 1.16687   V2 -2.55185 0.125 1.33576 
+  N0 0.722374 1.2247e-15 0.691503   N1 0.676612 0.31353 0.666255   N2 0.772293 0.349434 0.530527 
+   txt003 
+STRI 
+  V0 -2.51852 0 0.961111   V1 -2.51001 0.125 0.977572   V2 -2.24068 0.125 0.793666 
+  N0 -0.617031 0 -0.786939   N1 -0.589822 0.322549 -0.740319   N2 -0.485318 0.301052 -0.820874 
+   txt003 
+STRI 
+  V0 -2.24068 0.125 0.793666   V1 -2.2419 0 0.774826   V2 -2.51852 0 0.961111 
+  N0 -0.485318 0.301052 -0.820874   N1 -0.504836 0 -0.863216   N2 -0.617031 0 -0.786939 
+   txt003 
+STRI 
+  V0 -2.51001 0.125 0.977572   V1 -2.48875 0.2 1.01872   V2 -2.23764 0.2 0.840766 
+  N0 -0.589822 0.322549 -0.740319   N1 -0.433172 0.735531 -0.520919   N2 -0.367048 0.708353 -0.60292 
+   txt003 
+STRI 
+  V0 -2.23764 0.2 0.840766   V1 -2.24068 0.125 0.793666   V2 -2.51001 0.125 0.977572 
+  N0 -0.367048 0.708353 -0.60292   N1 -0.485318 0.301052 -0.820874   N2 -0.589822 0.322549 -0.740319 
+   txt003 
+STRI 
+  V0 -2.48875 0.2 1.01872   V1 -2.46111 0.225 1.07222   V2 -2.23368 0.225 0.901997 
+  N0 -0.433172 0.735531 -0.520919   N1 3.17396e-17 1 -1.63988e-17   N2 5.4409e-17 1 -3.51585e-18 
+   txt003 
+STRI 
+  V0 -2.23368 0.225 0.901997   V1 -2.23764 0.2 0.840766   V2 -2.48875 0.2 1.01872 
+  N0 5.4409e-17 1 -3.51585e-18   N1 -0.367048 0.708353 -0.60292   N2 -0.433172 0.735531 -0.520919 
+   txt003 
+STRI 
+  V0 -2.46111 0.225 1.07222   V1 -2.43347 0.2 1.12572   V2 -2.22972 0.2 0.963227 
+  N0 3.17396e-17 1 -1.63988e-17   N1 0.471519 0.729692 0.495195   N2 0.396971 0.700023 0.593618 
+   txt003 
+STRI 
+  V0 -2.22972 0.2 0.963227   V1 -2.23368 0.225 0.901997   V2 -2.46111 0.225 1.07222 
+  N0 0.396971 0.700023 0.593618   N1 5.4409e-17 1 -3.51585e-18   N2 3.17396e-17 1 -1.63988e-17 
+   txt003 
+STRI 
+  V0 -2.43347 0.2 1.12572   V1 -2.41221 0.125 1.16687   V2 -2.22668 0.125 1.01033 
+  N0 0.471519 0.729692 0.495195   N1 0.676612 0.31353 0.666255   N2 0.548733 0.289562 0.784249 
+   txt003 
+STRI 
+  V0 -2.22668 0.125 1.01033   V1 -2.22972 0.2 0.963227   V2 -2.43347 0.2 1.12572 
+  N0 0.548733 0.289562 0.784249   N1 0.396971 0.700023 0.593618   N2 0.471519 0.729692 0.495195 
+   txt003 
+STRI 
+  V0 -2.41221 0.125 1.16687   V1 -2.4037 0 1.18333   V2 -2.22546 0 1.02917 
+  N0 0.676612 0.31353 0.666255   N1 0.722374 1.2247e-15 0.691503   N2 0.580973 1.1041e-15 0.813923 
+   txt003 
+STRI 
+  V0 -2.22546 0 1.02917   V1 -2.22668 0.125 1.01033   V2 -2.41221 0.125 1.16687 
+  N0 0.580973 1.1041e-15 0.813923   N1 0.548733 0.289562 0.784249   N2 0.676612 0.31353 0.666255 
+   txt003 
+STRI 
+  V0 -2.2419 0 0.774826   V1 -2.24068 0.125 0.793666   V2 -1.90741 0.125 0.622222 
+  N0 -0.504836 0 -0.863216   N1 -0.485318 0.301052 -0.820874   N2 -0.390503 0.30734 -0.867784 
+   txt003 
+STRI 
+  V0 -1.90741 0.125 0.622222   V1 -1.9 0 0.6   V2 -2.2419 0 0.774826 
+  N0 -0.390503 0.30734 -0.867784   N1 -0.410365 0 -0.911922   N2 -0.504836 0 -0.863216 
+   txt003 
+STRI 
+  V0 -2.24068 0.125 0.793666   V1 -2.23764 0.2 0.840766   V2 -1.92593 0.2 0.677778 
+  N0 -0.485318 0.301052 -0.820874   N1 -0.367048 0.708353 -0.60292   N2 -0.285351 0.718662 -0.634113 
+   txt003 
+STRI 
+  V0 -1.92593 0.2 0.677778   V1 -1.90741 0.125 0.622222   V2 -2.24068 0.125 0.793666 
+  N0 -0.285351 0.718662 -0.634113   N1 -0.390503 0.30734 -0.867784   N2 -0.485318 0.301052 -0.820874 
+   txt003 
+STRI 
+  V0 -2.23764 0.2 0.840766   V1 -2.23368 0.225 0.901997   V2 -1.95 0.225 0.75 
+  N0 -0.367048 0.708353 -0.60292   N1 5.4409e-17 1 -3.51585e-18   N2 7.83687e-17 1 2.61229e-17 
+   txt003 
+STRI 
+  V0 -1.95 0.225 0.75   V1 -1.92593 0.2 0.677778   V2 -2.23764 0.2 0.840766 
+  N0 7.83687e-17 1 2.61229e-17   N1 -0.285351 0.718662 -0.634113   N2 -0.367048 0.708353 -0.60292 
+   txt003 
+STRI 
+  V0 -2.23368 0.225 0.901997   V1 -2.22972 0.2 0.963227   V2 -1.97407 0.2 0.822222 
+  N0 5.4409e-17 1 -3.51585e-18   N1 0.396971 0.700023 0.593618   N2 0.285351 0.718662 0.634113 
+   txt003 
+STRI 
+  V0 -1.97407 0.2 0.822222   V1 -1.95 0.225 0.75   V2 -2.23368 0.225 0.901997 
+  N0 0.285351 0.718662 0.634113   N1 7.83687e-17 1 2.61229e-17   N2 5.4409e-17 1 -3.51585e-18 
+   txt003 
+STRI 
+  V0 -2.22972 0.2 0.963227   V1 -2.22668 0.125 1.01033   V2 -1.99259 0.125 0.877778 
+  N0 0.396971 0.700023 0.593618   N1 0.548733 0.289562 0.784249   N2 0.390503 0.30734 0.867784 
+   txt003 
+STRI 
+  V0 -1.99259 0.125 0.877778   V1 -1.97407 0.2 0.822222   V2 -2.22972 0.2 0.963227 
+  N0 0.390503 0.30734 0.867784   N1 0.285351 0.718662 0.634113   N2 0.396971 0.700023 0.593618 
+   txt003 
+STRI 
+  V0 -2.22668 0.125 1.01033   V1 -2.22546 0 1.02917   V2 -2 0 0.9 
+  N0 0.548733 0.289562 0.784249   N1 0.580973 1.1041e-15 0.813923   N2 0.410365 1.30492e-15 0.911922 
+   txt003 
+STRI 
+  V0 -2 0 0.9   V1 -1.99259 0.125 0.877778   V2 -2.22668 0.125 1.01033 
+  N0 0.410365 1.30492e-15 0.911922   N1 0.390503 0.30734 0.867784   N2 0.548733 0.289562 0.784249 
+   txt003 
+STRI 
+  V0 1.7 0 1.425   V1 1.7 -0.275 1.36389   V2 2.07238 -0.262346 1.42521 
+  N0 -0 0 1   N1 -0.0157732 -0.461877 0.886804   N2 -0.291732 -0.426807 0.855995 
+   txt003 
+STRI 
+  V0 2.07238 -0.262346 1.42521   V1 2.0588 0 1.47639   V2 1.7 0 1.425 
+  N0 -0.291732 -0.426807 0.855995   N1 -0.333935 0 0.942596   N2 -0 0 1 
+   txt003 
+STRI 
+  V0 1.7 -0.275 1.36389   V1 1.7 -0.44 1.21111   V2 2.10633 -0.419753 1.29725 
+  N0 -0.0157732 -0.461877 0.886804   N1 -0.0291362 -0.857129 0.514277   N2 -0.135104 -0.834377 0.534381 
+   txt003 
+STRI 
+  V0 2.10633 -0.419753 1.29725   V1 2.07238 -0.262346 1.42521   V2 1.7 -0.275 1.36389 
+  N0 -0.135104 -0.834377 0.534381   N1 -0.291732 -0.426807 0.855995   N2 -0.0157732 -0.461877 0.886804 
+   txt003 
+STRI 
+  V0 1.7 -0.44 1.21111   V1 1.7 -0.495 1.0125   V2 2.15046 -0.472222 1.1309 
+  N0 -0.0291362 -0.857129 0.514277   N1 0 -1 -0   N2 0.110195 -0.99348 0.0292376 
+   txt003 
+STRI 
+  V0 2.15046 -0.472222 1.1309   V1 2.10633 -0.419753 1.29725   V2 1.7 -0.44 1.21111 
+  N0 0.110195 -0.99348 0.0292376   N1 -0.135104 -0.834377 0.534381   N2 -0.0291362 -0.857129 0.514277 
+   txt003 
+STRI 
+  V0 1.7 -0.495 1.0125   V1 1.7 -0.44 0.813889   V2 2.1946 -0.419753 0.964558 
+  N0 0 -1 -0   N1 0.0673462 -0.855546 -0.513328   N2 0.348602 -0.814337 -0.464038 
+   txt003 
+STRI 
+  V0 2.1946 -0.419753 0.964558   V1 2.15046 -0.472222 1.1309   V2 1.7 -0.495 1.0125 
+  N0 0.348602 -0.814337 -0.464038   N1 0.110195 -0.99348 0.0292376   N2 0 -1 -0 
+   txt003 
+STRI 
+  V0 1.7 -0.44 0.813889   V1 1.7 -0.275 0.661111   V2 2.22855 -0.262346 0.8366 
+  N0 0.0673462 -0.855546 -0.513328   N1 0.134339 -0.457747 -0.878875   N2 0.492146 -0.41068 -0.767551 
+   txt003 
+STRI 
+  V0 2.22855 -0.262346 0.8366   V1 2.1946 -0.419753 0.964558   V2 1.7 -0.44 0.813889 
+  N0 0.492146 -0.41068 -0.767551   N1 0.348602 -0.814337 -0.464038   N2 0.0673462 -0.855546 -0.513328 
+   txt003 
+STRI 
+  V0 1.7 -0.275 0.661111   V1 1.7 0 0.6   V2 2.24213 0 0.785417 
+  N0 0.134339 -0.457747 -0.878875   N1 0.158678 9.39168e-16 -0.98733   N2 0.528678 6.47717e-16 -0.848822 
+   txt003 
+STRI 
+  V0 2.24213 0 0.785417   V1 2.22855 -0.262346 0.8366   V2 1.7 -0.275 0.661111 
+  N0 0.528678 6.47717e-16 -0.848822   N1 0.492146 -0.41068 -0.767551   N2 0.134339 -0.457747 -0.878875 
+   txt003 
+STRI 
+  V0 2.0588 0 1.47639   V1 2.07238 -0.262346 1.42521   V2 2.29012 -0.23071 1.57202 
+  N0 -0.333935 0 0.942596   N1 -0.291732 -0.426807 0.855995   N2 -0.64585 -0.390219 0.656206 
+   txt003 
+STRI 
+  V0 2.29012 -0.23071 1.57202   V1 2.27037 0 1.61111   V2 2.0588 0 1.47639 
+  N0 -0.64585 -0.390219 0.656206   N1 -0.731055 0 0.682318   N2 -0.333935 0 0.942596 
+   txt003 
+STRI 
+  V0 2.07238 -0.262346 1.42521   V1 2.10633 -0.419753 1.29725   V2 2.33951 -0.369136 1.47428 
+  N0 -0.291732 -0.426807 0.855995   N1 -0.135104 -0.834377 0.534381   N2 -0.312511 -0.816863 0.484842 
+   txt003 
+STRI 
+  V0 2.33951 -0.369136 1.47428   V1 2.29012 -0.23071 1.57202   V2 2.07238 -0.262346 1.42521 
+  N0 -0.312511 -0.816863 0.484842   N1 -0.64585 -0.390219 0.656206   N2 -0.291732 -0.426807 0.855995 
+   txt003 
+STRI 
+  V0 2.10633 -0.419753 1.29725   V1 2.15046 -0.472222 1.1309   V2 2.4037 -0.415278 1.34722 
+  N0 -0.135104 -0.834377 0.534381   N1 0.110195 -0.99348 0.0292376   N2 0.215359 -0.970454 0.108813 
+   txt003 
+STRI 
+  V0 2.4037 -0.415278 1.34722   V1 2.33951 -0.369136 1.47428   V2 2.10633 -0.419753 1.29725 
+  N0 0.215359 -0.970454 0.108813   N1 -0.312511 -0.816863 0.484842   N2 -0.135104 -0.834377 0.534381 
+   txt003 
+STRI 
+  V0 2.15046 -0.472222 1.1309   V1 2.1946 -0.419753 0.964558   V2 2.4679 -0.369136 1.22016 
+  N0 0.110195 -0.99348 0.0292376   N1 0.348602 -0.814337 -0.464038   N2 0.627607 -0.733748 -0.260237 
+   txt003 
+STRI 
+  V0 2.4679 -0.369136 1.22016   V1 2.4037 -0.415278 1.34722   V2 2.15046 -0.472222 1.1309 
+  N0 0.627607 -0.733748 -0.260237   N1 0.215359 -0.970454 0.108813   N2 0.110195 -0.99348 0.0292376 
+   txt003 
+STRI 
+  V0 2.1946 -0.419753 0.964558   V1 2.22855 -0.262346 0.8366   V2 2.51728 -0.23071 1.12243 
+  N0 0.348602 -0.814337 -0.464038   N1 0.492146 -0.41068 -0.767551   N2 0.813963 -0.348056 -0.465103 
+   txt003 
+STRI 
+  V0 2.51728 -0.23071 1.12243   V1 2.4679 -0.369136 1.22016   V2 2.1946 -0.419753 0.964558 
+  N0 0.813963 -0.348056 -0.465103   N1 0.627607 -0.733748 -0.260237   N2 0.348602 -0.814337 -0.464038 
+   txt003 
+STRI 
+  V0 2.22855 -0.262346 0.8366   V1 2.24213 0 0.785417   V2 2.53704 0 1.08333 
+  N0 0.492146 -0.41068 -0.767551   N1 0.528678 6.47717e-16 -0.848822   N2 0.854063 9.88017e-16 -0.52017 
+   txt003 
+STRI 
+  V0 2.53704 0 1.08333   V1 2.51728 -0.23071 1.12243   V2 2.22855 -0.262346 0.8366 
+  N0 0.854063 9.88017e-16 -0.52017   N1 0.813963 -0.348056 -0.465103   N2 0.492146 -0.41068 -0.767551 
+   txt003 
+STRI 
+  V0 2.27037 0 1.61111   V1 2.29012 -0.23071 1.57202   V2 2.40972 -0.189583 1.77361 
+  N0 -0.731055 0 0.682318   N1 -0.64585 -0.390219 0.656206   N2 -0.835237 -0.363942 0.412221 
+   txt003 
+STRI 
+  V0 2.40972 -0.189583 1.77361   V1 2.3875 0 1.8   V2 2.27037 0 1.61111 
+  N0 -0.835237 -0.363942 0.412221   N1 -0.920582 0 0.39055   N2 -0.731055 0 0.682318 
+   txt003 
+STRI 
+  V0 2.29012 -0.23071 1.57202   V1 2.33951 -0.369136 1.47428   V2 2.46528 -0.303333 1.70764 
+  N0 -0.64585 -0.390219 0.656206   N1 -0.312511 -0.816863 0.484842   N2 -0.451323 -0.803033 0.38916 
+   txt003 
+STRI 
+  V0 2.46528 -0.303333 1.70764   V1 2.40972 -0.189583 1.77361   V2 2.29012 -0.23071 1.57202 
+  N0 -0.451323 -0.803033 0.38916   N1 -0.835237 -0.363942 0.412221   N2 -0.64585 -0.390219 0.656206 
+   txt003 
+STRI 
+  V0 2.33951 -0.369136 1.47428   V1 2.4037 -0.415278 1.34722   V2 2.5375 -0.34125 1.62187 
+  N0 -0.312511 -0.816863 0.484842   N1 0.215359 -0.970454 0.108813   N2 0.214084 -0.960035 0.180281 
+   txt003 
+STRI 
+  V0 2.5375 -0.34125 1.62187   V1 2.46528 -0.303333 1.70764   V2 2.33951 -0.369136 1.47428 
+  N0 0.214084 -0.960035 0.180281   N1 -0.451323 -0.803033 0.38916   N2 -0.312511 -0.816863 0.484842 
+   txt003 
+STRI 
+  V0 2.4037 -0.415278 1.34722   V1 2.4679 -0.369136 1.22016   V2 2.60972 -0.303333 1.53611 
+  N0 0.215359 -0.970454 0.108813   N1 0.627607 -0.733748 -0.260237   N2 0.705424 -0.704198 -0.0805066 
+   txt003 
+STRI 
+  V0 2.60972 -0.303333 1.53611   V1 2.5375 -0.34125 1.62187   V2 2.4037 -0.415278 1.34722 
+  N0 0.705424 -0.704198 -0.0805066   N1 0.214084 -0.960035 0.180281   N2 0.215359 -0.970454 0.108813 
+   txt003 
+STRI 
+  V0 2.4679 -0.369136 1.22016   V1 2.51728 -0.23071 1.12243   V2 2.66528 -0.189583 1.47014 
+  N0 0.627607 -0.733748 -0.260237   N1 0.813963 -0.348056 -0.465103   N2 0.913262 -0.329186 -0.239977 
+   txt003 
+STRI 
+  V0 2.66528 -0.189583 1.47014   V1 2.60972 -0.303333 1.53611   V2 2.4679 -0.369136 1.22016 
+  N0 0.913262 -0.329186 -0.239977   N1 0.705424 -0.704198 -0.0805066   N2 0.627607 -0.733748 -0.260237 
+   txt003 
+STRI 
+  V0 2.51728 -0.23071 1.12243   V1 2.53704 0 1.08333   V2 2.6875 0 1.44375 
+  N0 0.813963 -0.348056 -0.465103   N1 0.854063 9.88017e-16 -0.52017   N2 0.957826 1.83855e-15 -0.287348 
+   txt003 
+STRI 
+  V0 2.6875 0 1.44375   V1 2.66528 -0.189583 1.47014   V2 2.51728 -0.23071 1.12243 
+  N0 0.957826 1.83855e-15 -0.287348   N1 0.913262 -0.329186 -0.239977   N2 0.813963 -0.348056 -0.465103 
+   txt003 
+STRI 
+  V0 2.3875 0 1.8   V1 2.40972 -0.189583 1.77361   V2 2.48765 -0.148457 1.99928 
+  N0 -0.920582 0 0.39055   N1 -0.835237 -0.363942 0.412221   N2 -0.842821 -0.409176 0.34961 
+   txt003 
+STRI 
+  V0 2.48765 -0.148457 1.99928   V1 2.46296 0 2.01389   V2 2.3875 0 1.8 
+  N0 -0.842821 -0.409176 0.34961   N1 -0.948683 0 0.316228   N2 -0.920582 0 0.39055 
+   txt003 
+STRI 
+  V0 2.40972 -0.189583 1.77361   V1 2.46528 -0.303333 1.70764   V2 2.54938 -0.237531 1.96276 
+  N0 -0.835237 -0.363942 0.412221   N1 -0.451323 -0.803033 0.38916   N2 -0.452673 -0.821162 0.347535 
+   txt003 
+STRI 
+  V0 2.54938 -0.237531 1.96276   V1 2.48765 -0.148457 1.99928   V2 2.40972 -0.189583 1.77361 
+  N0 -0.452673 -0.821162 0.347535   N1 -0.842821 -0.409176 0.34961   N2 -0.835237 -0.363942 0.412221 
+   txt003 
+STRI 
+  V0 2.46528 -0.303333 1.70764   V1 2.5375 -0.34125 1.62187   V2 2.62963 -0.267222 1.91528 
+  N0 -0.451323 -0.803033 0.38916   N1 0.214084 -0.960035 0.180281   N2 0.113546 -0.974822 0.191909 
+   txt003 
+STRI 
+  V0 2.62963 -0.267222 1.91528   V1 2.54938 -0.237531 1.96276   V2 2.46528 -0.303333 1.70764 
+  N0 0.113546 -0.974822 0.191909   N1 -0.452673 -0.821162 0.347535   N2 -0.451323 -0.803033 0.38916 
+   txt003 
+STRI 
+  V0 2.5375 -0.34125 1.62187   V1 2.60972 -0.303333 1.53611   V2 2.70988 -0.237531 1.8678 
+  N0 0.214084 -0.960035 0.180281   N1 0.705424 -0.704198 -0.0805066   N2 0.60461 -0.794635 -0.0547983 
+   txt003 
+STRI 
+  V0 2.70988 -0.237531 1.8678   V1 2.62963 -0.267222 1.91528   V2 2.5375 -0.34125 1.62187 
+  N0 0.60461 -0.794635 -0.0547983   N1 0.113546 -0.974822 0.191909   N2 0.214084 -0.960035 0.180281 
+   txt003 
+STRI 
+  V0 2.60972 -0.303333 1.53611   V1 2.66528 -0.189583 1.47014   V2 2.7716 -0.148457 1.83128 
+  N0 0.705424 -0.704198 -0.0805066   N1 0.913262 -0.329186 -0.239977   N2 0.880144 -0.401503 -0.253261 
+   txt003 
+STRI 
+  V0 2.7716 -0.148457 1.83128   V1 2.70988 -0.237531 1.8678   V2 2.60972 -0.303333 1.53611 
+  N0 0.880144 -0.401503 -0.253261   N1 0.60461 -0.794635 -0.0547983   N2 0.705424 -0.704198 -0.0805066 
+   txt003 
+STRI 
+  V0 2.66528 -0.189583 1.47014   V1 2.6875 0 1.44375   V2 2.7963 0 1.81667 
+  N0 0.913262 -0.329186 -0.239977   N1 0.957826 1.83855e-15 -0.287348   N2 0.947588 3.02585e-15 -0.319493 
+   txt003 
+STRI 
+  V0 2.7963 0 1.81667   V1 2.7716 -0.148457 1.83128   V2 2.66528 -0.189583 1.47014 
+  N0 0.947588 3.02585e-15 -0.319493   N1 0.880144 -0.401503 -0.253261   N2 0.913262 -0.329186 -0.239977 
+   txt003 
+STRI 
+  V0 2.46296 0 2.01389   V1 2.48765 -0.148457 1.99928   V2 2.5804 -0.116821 2.21831 
+  N0 -0.948683 0 0.316228   N1 -0.842821 -0.409176 0.34961   N2 -0.723795 -0.498863 0.476715 
+   txt003 
+STRI 
+  V0 2.5804 -0.116821 2.21831   V1 2.54954 0 2.22361   V2 2.46296 0 2.01389 
+  N0 -0.723795 -0.498863 0.476715   N1 -0.874591 0 0.484861   N2 -0.948683 0 0.316228 
+   txt003 
+STRI 
+  V0 2.48765 -0.148457 1.99928   V1 2.54938 -0.237531 1.96276   V2 2.65756 -0.186914 2.20507 
+  N0 -0.842821 -0.409176 0.34961   N1 -0.452673 -0.821162 0.347535   N2 -0.365378 -0.851743 0.375544 
+   txt003 
+STRI 
+  V0 2.65756 -0.186914 2.20507   V1 2.5804 -0.116821 2.21831   V2 2.48765 -0.148457 1.99928 
+  N0 -0.365378 -0.851743 0.375544   N1 -0.723795 -0.498863 0.476715   N2 -0.842821 -0.409176 0.34961 
+   txt003 
+STRI 
+  V0 2.54938 -0.237531 1.96276   V1 2.62963 -0.267222 1.91528   V2 2.75787 -0.210278 2.18785 
+  N0 -0.452673 -0.821162 0.347535   N1 0.113546 -0.974822 0.191909   N2 0.0260102 -0.988113 0.151516 
+   txt003 
+STRI 
+  V0 2.75787 -0.210278 2.18785   V1 2.65756 -0.186914 2.20507   V2 2.54938 -0.237531 1.96276 
+  N0 0.0260102 -0.988113 0.151516   N1 -0.365378 -0.851743 0.375544   N2 -0.452673 -0.821162 0.347535 
+   txt003 
+STRI 
+  V0 2.62963 -0.267222 1.91528   V1 2.70988 -0.237531 1.8678   V2 2.85818 -0.186914 2.17063 
+  N0 0.113546 -0.974822 0.191909   N1 0.60461 -0.794635 -0.0547983   N2 0.417243 -0.88974 -0.185122 
+   txt003 
+STRI 
+  V0 2.85818 -0.186914 2.17063   V1 2.75787 -0.210278 2.18785   V2 2.62963 -0.267222 1.91528 
+  N0 0.417243 -0.88974 -0.185122   N1 0.0260102 -0.988113 0.151516   N2 0.113546 -0.974822 0.191909 
+   txt003 
+STRI 
+  V0 2.70988 -0.237531 1.8678   V1 2.7716 -0.148457 1.83128   V2 2.93534 -0.116821 2.15738 
+  N0 0.60461 -0.794635 -0.0547983   N1 0.880144 -0.401503 -0.253261   N2 0.70819 -0.492319 -0.506053 
+   txt003 
+STRI 
+  V0 2.93534 -0.116821 2.15738   V1 2.85818 -0.186914 2.17063   V2 2.70988 -0.237531 1.8678 
+  N0 0.70819 -0.492319 -0.506053   N1 0.417243 -0.88974 -0.185122   N2 0.60461 -0.794635 -0.0547983 
+   txt003 
+STRI 
+  V0 2.7716 -0.148457 1.83128   V1 2.7963 0 1.81667   V2 2.9662 0 2.15208 
+  N0 0.880144 -0.401503 -0.253261   N1 0.947588 3.02585e-15 -0.319493   N2 0.787582 4.30265e-15 -0.61621 
+   txt003 
+STRI 
+  V0 2.9662 0 2.15208   V1 2.93534 -0.116821 2.15738   V2 2.7716 -0.148457 1.83128 
+  N0 0.787582 4.30265e-15 -0.61621   N1 0.70819 -0.492319 -0.506053   N2 0.880144 -0.401503 -0.253261 
+   txt003 
+STRI 
+  V0 2.54954 0 2.22361   V1 2.5804 -0.116821 2.21831   V2 2.74444 -0.104167 2.4 
+  N0 -0.874591 0 0.484861   N1 -0.723795 -0.498863 0.476715   N2 -0.497164 -0.497164 0.711095 
+   txt003 
+STRI 
+  V0 2.74444 -0.104167 2.4   V1 2.7 0 2.4   V2 2.54954 0 2.22361 
+  N0 -0.497164 -0.497164 0.711095   N1 -0.6 0 0.8   N2 -0.874591 0 0.484861 
+   txt003 
+STRI 
+  V0 2.5804 -0.116821 2.21831   V1 2.65756 -0.186914 2.20507   V2 2.85556 -0.166667 2.4 
+  N0 -0.723795 -0.498863 0.476715   N1 -0.365378 -0.851743 0.375544   N2 -0.267368 -0.855576 0.443288 
+   txt003 
+STRI 
+  V0 2.85556 -0.166667 2.4   V1 2.74444 -0.104167 2.4   V2 2.5804 -0.116821 2.21831 
+  N0 -0.267368 -0.855576 0.443288   N1 -0.497164 -0.497164 0.711095   N2 -0.723795 -0.498863 0.476715 
+   txt003 
+STRI 
+  V0 2.65756 -0.186914 2.20507   V1 2.75787 -0.210278 2.18785   V2 3 -0.1875 2.4 
+  N0 -0.365378 -0.851743 0.375544   N1 0.0260102 -0.988113 0.151516   N2 0 -1 2.19303e-16 
+   txt003 
+STRI 
+  V0 3 -0.1875 2.4   V1 2.85556 -0.166667 2.4   V2 2.65756 -0.186914 2.20507 
+  N0 0 -1 2.19303e-16   N1 -0.267368 -0.855576 0.443288   N2 -0.365378 -0.851743 0.375544 
+   txt003 
+STRI 
+  V0 2.75787 -0.210278 2.18785   V1 2.85818 -0.186914 2.17063   V2 3.14444 -0.166667 2.4 
+  N0 0.0260102 -0.988113 0.151516   N1 0.417243 -0.88974 -0.185122   N2 0.250514 -0.801644 -0.54278 
+   txt003 
+STRI 
+  V0 3.14444 -0.166667 2.4   V1 3 -0.1875 2.4   V2 2.75787 -0.210278 2.18785 
+  N0 0.250514 -0.801644 -0.54278   N1 0 -1 2.19303e-16   N2 0.0260102 -0.988113 0.151516 
+   txt003 
+STRI 
+  V0 2.85818 -0.186914 2.17063   V1 2.93534 -0.116821 2.15738   V2 3.25556 -0.104167 2.4 
+  N0 0.417243 -0.88974 -0.185122   N1 0.70819 -0.492319 -0.506053   N2 0.366221 -0.366221 -0.855433 
+   txt003 
+STRI 
+  V0 3.25556 -0.104167 2.4   V1 3.14444 -0.166667 2.4   V2 2.85818 -0.186914 2.17063 
+  N0 0.366221 -0.366221 -0.855433   N1 0.250514 -0.801644 -0.54278   N2 0.417243 -0.88974 -0.185122 
+   txt003 
+STRI 
+  V0 2.93534 -0.116821 2.15738   V1 2.9662 0 2.15208   V2 3.3 0 2.4 
+  N0 0.70819 -0.492319 -0.506053   N1 0.787582 4.30265e-15 -0.61621   N2 0.384615 6.46776e-15 -0.923077 
+   txt003 
+STRI 
+  V0 3.3 0 2.4   V1 3.25556 -0.104167 2.4   V2 2.93534 -0.116821 2.15738 
+  N0 0.384615 6.46776e-15 -0.923077   N1 0.366221 -0.366221 -0.855433   N2 0.70819 -0.492319 -0.506053 
+   txt003 
+STRI 
+  V0 1.7 0 0.6   V1 1.7 0.275 0.661111   V2 2.22855 0.262346 0.8366 
+  N0 0.158678 0 -0.98733   N1 0.134339 0.457747 -0.878875   N2 0.492146 0.41068 -0.767551 
+   txt003 
+STRI 
+  V0 2.22855 0.262346 0.8366   V1 2.24213 0 0.785417   V2 1.7 0 0.6 
+  N0 0.492146 0.41068 -0.767551   N1 0.528678 0 -0.848822   N2 0.158678 0 -0.98733 
+   txt003 
+STRI 
+  V0 1.7 0.275 0.661111   V1 1.7 0.44 0.813889   V2 2.1946 0.419753 0.964558 
+  N0 0.134339 0.457747 -0.878875   N1 0.0673462 0.855546 -0.513328   N2 0.348602 0.814337 -0.464038 
+   txt003 
+STRI 
+  V0 2.1946 0.419753 0.964558   V1 2.22855 0.262346 0.8366   V2 1.7 0.275 0.661111 
+  N0 0.348602 0.814337 -0.464038   N1 0.492146 0.41068 -0.767551   N2 0.134339 0.457747 -0.878875 
+   txt003 
+STRI 
+  V0 1.7 0.44 0.813889   V1 1.7 0.495 1.0125   V2 2.15046 0.472222 1.1309 
+  N0 0.0673462 0.855546 -0.513328   N1 0 1 -0   N2 0.110195 0.99348 0.0292376 
+   txt003 
+STRI 
+  V0 2.15046 0.472222 1.1309   V1 2.1946 0.419753 0.964558   V2 1.7 0.44 0.813889 
+  N0 0.110195 0.99348 0.0292376   N1 0.348602 0.814337 -0.464038   N2 0.0673462 0.855546 -0.513328 
+   txt003 
+STRI 
+  V0 1.7 0.495 1.0125   V1 1.7 0.44 1.21111   V2 2.10633 0.419753 1.29725 
+  N0 0 1 -0   N1 -0.0291362 0.857129 0.514277   N2 -0.135104 0.834377 0.534381 
+   txt003 
+STRI 
+  V0 2.10633 0.419753 1.29725   V1 2.15046 0.472222 1.1309   V2 1.7 0.495 1.0125 
+  N0 -0.135104 0.834377 0.534381   N1 0.110195 0.99348 0.0292376   N2 0 1 -0 
+   txt003 
+STRI 
+  V0 1.7 0.44 1.21111   V1 1.7 0.275 1.36389   V2 2.07238 0.262346 1.42521 
+  N0 -0.0291362 0.857129 0.514277   N1 -0.0157732 0.461877 0.886804   N2 -0.291732 0.426807 0.855995 
+   txt003 
+STRI 
+  V0 2.07238 0.262346 1.42521   V1 2.10633 0.419753 1.29725   V2 1.7 0.44 1.21111 
+  N0 -0.291732 0.426807 0.855995   N1 -0.135104 0.834377 0.534381   N2 -0.0291362 0.857129 0.514277 
+   txt003 
+STRI 
+  V0 1.7 0.275 1.36389   V1 1.7 0 1.425   V2 2.0588 0 1.47639 
+  N0 -0.0157732 0.461877 0.886804   N1 0 -4.48575e-16 1   N2 -0.333935 -3.25455e-16 0.942596 
+   txt003 
+STRI 
+  V0 2.0588 0 1.47639   V1 2.07238 0.262346 1.42521   V2 1.7 0.275 1.36389 
+  N0 -0.333935 -3.25455e-16 0.942596   N1 -0.291732 0.426807 0.855995   N2 -0.0157732 0.461877 0.886804 
+   txt003 
+STRI 
+  V0 2.24213 0 0.785417   V1 2.22855 0.262346 0.8366   V2 2.51728 0.23071 1.12243 
+  N0 0.528678 0 -0.848822   N1 0.492146 0.41068 -0.767551   N2 0.813963 0.348056 -0.465103 
+   txt003 
+STRI 
+  V0 2.51728 0.23071 1.12243   V1 2.53704 0 1.08333   V2 2.24213 0 0.785417 
+  N0 0.813963 0.348056 -0.465103   N1 0.854063 0 -0.52017   N2 0.528678 0 -0.848822 
+   txt003 
+STRI 
+  V0 2.22855 0.262346 0.8366   V1 2.1946 0.419753 0.964558   V2 2.4679 0.369136 1.22016 
+  N0 0.492146 0.41068 -0.767551   N1 0.348602 0.814337 -0.464038   N2 0.627607 0.733748 -0.260237 
+   txt003 
+STRI 
+  V0 2.4679 0.369136 1.22016   V1 2.51728 0.23071 1.12243   V2 2.22855 0.262346 0.8366 
+  N0 0.627607 0.733748 -0.260237   N1 0.813963 0.348056 -0.465103   N2 0.492146 0.41068 -0.767551 
+   txt003 
+STRI 
+  V0 2.1946 0.419753 0.964558   V1 2.15046 0.472222 1.1309   V2 2.4037 0.415278 1.34722 
+  N0 0.348602 0.814337 -0.464038   N1 0.110195 0.99348 0.0292376   N2 0.215359 0.970454 0.108813 
+   txt003 
+STRI 
+  V0 2.4037 0.415278 1.34722   V1 2.4679 0.369136 1.22016   V2 2.1946 0.419753 0.964558 
+  N0 0.215359 0.970454 0.108813   N1 0.627607 0.733748 -0.260237   N2 0.348602 0.814337 -0.464038 
+   txt003 
+STRI 
+  V0 2.15046 0.472222 1.1309   V1 2.10633 0.419753 1.29725   V2 2.33951 0.369136 1.47428 
+  N0 0.110195 0.99348 0.0292376   N1 -0.135104 0.834377 0.534381   N2 -0.312511 0.816863 0.484842 
+   txt003 
+STRI 
+  V0 2.33951 0.369136 1.47428   V1 2.4037 0.415278 1.34722   V2 2.15046 0.472222 1.1309 
+  N0 -0.312511 0.816863 0.484842   N1 0.215359 0.970454 0.108813   N2 0.110195 0.99348 0.0292376 
+   txt003 
+STRI 
+  V0 2.10633 0.419753 1.29725   V1 2.07238 0.262346 1.42521   V2 2.29012 0.23071 1.57202 
+  N0 -0.135104 0.834377 0.534381   N1 -0.291732 0.426807 0.855995   N2 -0.64585 0.390219 0.656206 
+   txt003 
+STRI 
+  V0 2.29012 0.23071 1.57202   V1 2.33951 0.369136 1.47428   V2 2.10633 0.419753 1.29725 
+  N0 -0.64585 0.390219 0.656206   N1 -0.312511 0.816863 0.484842   N2 -0.135104 0.834377 0.534381 
+   txt003 
+STRI 
+  V0 2.07238 0.262346 1.42521   V1 2.0588 0 1.47639   V2 2.27037 0 1.61111 
+  N0 -0.291732 0.426807 0.855995   N1 -0.333935 -3.25455e-16 0.942596   N2 -0.731055 -1.69385e-16 0.682318 
+   txt003 
+STRI 
+  V0 2.27037 0 1.61111   V1 2.29012 0.23071 1.57202   V2 2.07238 0.262346 1.42521 
+  N0 -0.731055 -1.69385e-16 0.682318   N1 -0.64585 0.390219 0.656206   N2 -0.291732 0.426807 0.855995 
+   txt003 
+STRI 
+  V0 2.53704 0 1.08333   V1 2.51728 0.23071 1.12243   V2 2.66528 0.189583 1.47014 
+  N0 0.854063 0 -0.52017   N1 0.813963 0.348056 -0.465103   N2 0.913262 0.329186 -0.239977 
+   txt003 
+STRI 
+  V0 2.66528 0.189583 1.47014   V1 2.6875 0 1.44375   V2 2.53704 0 1.08333 
+  N0 0.913262 0.329186 -0.239977   N1 0.957826 0 -0.287348   N2 0.854063 0 -0.52017 
+   txt003 
+STRI 
+  V0 2.51728 0.23071 1.12243   V1 2.4679 0.369136 1.22016   V2 2.60972 0.303333 1.53611 
+  N0 0.813963 0.348056 -0.465103   N1 0.627607 0.733748 -0.260237   N2 0.705424 0.704198 -0.0805066 
+   txt003 
+STRI 
+  V0 2.60972 0.303333 1.53611   V1 2.66528 0.189583 1.47014   V2 2.51728 0.23071 1.12243 
+  N0 0.705424 0.704198 -0.0805066   N1 0.913262 0.329186 -0.239977   N2 0.813963 0.348056 -0.465103 
+   txt003 
+STRI 
+  V0 2.4679 0.369136 1.22016   V1 2.4037 0.415278 1.34722   V2 2.5375 0.34125 1.62188 
+  N0 0.627607 0.733748 -0.260237   N1 0.215359 0.970454 0.108813   N2 0.214084 0.960035 0.180281 
+   txt003 
+STRI 
+  V0 2.5375 0.34125 1.62188   V1 2.60972 0.303333 1.53611   V2 2.4679 0.369136 1.22016 
+  N0 0.214084 0.960035 0.180281   N1 0.705424 0.704198 -0.0805066   N2 0.627607 0.733748 -0.260237 
+   txt003 
+STRI 
+  V0 2.4037 0.415278 1.34722   V1 2.33951 0.369136 1.47428   V2 2.46528 0.303333 1.70764 
+  N0 0.215359 0.970454 0.108813   N1 -0.312511 0.816863 0.484842   N2 -0.451323 0.803033 0.38916 
+   txt003 
+STRI 
+  V0 2.46528 0.303333 1.70764   V1 2.5375 0.34125 1.62188   V2 2.4037 0.415278 1.34722 
+  N0 -0.451323 0.803033 0.38916   N1 0.214084 0.960035 0.180281   N2 0.215359 0.970454 0.108813 
+   txt003 
+STRI 
+  V0 2.33951 0.369136 1.47428   V1 2.29012 0.23071 1.57202   V2 2.40972 0.189583 1.77361 
+  N0 -0.312511 0.816863 0.484842   N1 -0.64585 0.390219 0.656206   N2 -0.835237 0.363942 0.412221 
+   txt003 
+STRI 
+  V0 2.40972 0.189583 1.77361   V1 2.46528 0.303333 1.70764   V2 2.33951 0.369136 1.47428 
+  N0 -0.835237 0.363942 0.412221   N1 -0.451323 0.803033 0.38916   N2 -0.312511 0.816863 0.484842 
+   txt003 
+STRI 
+  V0 2.29012 0.23071 1.57202   V1 2.27037 0 1.61111   V2 2.3875 0 1.8 
+  N0 -0.64585 0.390219 0.656206   N1 -0.731055 -1.69385e-16 0.682318   N2 -0.920582 -2.76813e-16 0.39055 
+   txt003 
+STRI 
+  V0 2.3875 0 1.8   V1 2.40972 0.189583 1.77361   V2 2.29012 0.23071 1.57202 
+  N0 -0.920582 -2.76813e-16 0.39055   N1 -0.835237 0.363942 0.412221   N2 -0.64585 0.390219 0.656206 
+   txt003 
+STRI 
+  V0 2.6875 0 1.44375   V1 2.66528 0.189583 1.47014   V2 2.7716 0.148457 1.83128 
+  N0 0.957826 0 -0.287348   N1 0.913262 0.329186 -0.239977   N2 0.880144 0.401503 -0.253261 
+   txt003 
+STRI 
+  V0 2.7716 0.148457 1.83128   V1 2.7963 0 1.81667   V2 2.6875 0 1.44375 
+  N0 0.880144 0.401503 -0.253261   N1 0.947588 0 -0.319493   N2 0.957826 0 -0.287348 
+   txt003 
+STRI 
+  V0 2.66528 0.189583 1.47014   V1 2.60972 0.303333 1.53611   V2 2.70988 0.237531 1.8678 
+  N0 0.913262 0.329186 -0.239977   N1 0.705424 0.704198 -0.0805066   N2 0.60461 0.794635 -0.0547983 
+   txt003 
+STRI 
+  V0 2.70988 0.237531 1.8678   V1 2.7716 0.148457 1.83128   V2 2.66528 0.189583 1.47014 
+  N0 0.60461 0.794635 -0.0547983   N1 0.880144 0.401503 -0.253261   N2 0.913262 0.329186 -0.239977 
+   txt003 
+STRI 
+  V0 2.60972 0.303333 1.53611   V1 2.5375 0.34125 1.62188   V2 2.62963 0.267222 1.91528 
+  N0 0.705424 0.704198 -0.0805066   N1 0.214084 0.960035 0.180281   N2 0.113546 0.974822 0.191909 
+   txt003 
+STRI 
+  V0 2.62963 0.267222 1.91528   V1 2.70988 0.237531 1.8678   V2 2.60972 0.303333 1.53611 
+  N0 0.113546 0.974822 0.191909   N1 0.60461 0.794635 -0.0547983   N2 0.705424 0.704198 -0.0805066 
+   txt003 
+STRI 
+  V0 2.5375 0.34125 1.62188   V1 2.46528 0.303333 1.70764   V2 2.54938 0.237531 1.96276 
+  N0 0.214084 0.960035 0.180281   N1 -0.451323 0.803033 0.38916   N2 -0.452673 0.821162 0.347535 
+   txt003 
+STRI 
+  V0 2.54938 0.237531 1.96276   V1 2.62963 0.267222 1.91528   V2 2.5375 0.34125 1.62188 
+  N0 -0.452673 0.821162 0.347535   N1 0.113546 0.974822 0.191909   N2 0.214084 0.960035 0.180281 
+   txt003 
+STRI 
+  V0 2.46528 0.303333 1.70764   V1 2.40972 0.189583 1.77361   V2 2.48765 0.148457 1.99928 
+  N0 -0.451323 0.803033 0.38916   N1 -0.835237 0.363942 0.412221   N2 -0.842821 0.409176 0.34961 
+   txt003 
+STRI 
+  V0 2.48765 0.148457 1.99928   V1 2.54938 0.237531 1.96276   V2 2.46528 0.303333 1.70764 
+  N0 -0.842821 0.409176 0.34961   N1 -0.452673 0.821162 0.347535   N2 -0.451323 0.803033 0.38916 
+   txt003 
+STRI 
+  V0 2.40972 0.189583 1.77361   V1 2.3875 0 1.8   V2 2.46296 0 2.01389 
+  N0 -0.835237 0.363942 0.412221   N1 -0.920582 -2.76813e-16 0.39055   N2 -0.948683 -4.59839e-16 0.316228 
+   txt003 
+STRI 
+  V0 2.46296 0 2.01389   V1 2.48765 0.148457 1.99928   V2 2.40972 0.189583 1.77361 
+  N0 -0.948683 -4.59839e-16 0.316228   N1 -0.842821 0.409176 0.34961   N2 -0.835237 0.363942 0.412221 
+   txt003 
+STRI 
+  V0 2.7963 0 1.81667   V1 2.7716 0.148457 1.83128   V2 2.93534 0.116821 2.15738 
+  N0 0.947588 0 -0.319493   N1 0.880144 0.401503 -0.253261   N2 0.70819 0.492319 -0.506053 
+   txt003 
+STRI 
+  V0 2.93534 0.116821 2.15738   V1 2.9662 0 2.15208   V2 2.7963 0 1.81667 
+  N0 0.70819 0.492319 -0.506053   N1 0.787582 0 -0.61621   N2 0.947588 0 -0.319493 
+   txt003 
+STRI 
+  V0 2.7716 0.148457 1.83128   V1 2.70988 0.237531 1.8678   V2 2.85818 0.186914 2.17063 
+  N0 0.880144 0.401503 -0.253261   N1 0.60461 0.794635 -0.0547983   N2 0.417243 0.88974 -0.185122 
+   txt003 
+STRI 
+  V0 2.85818 0.186914 2.17063   V1 2.93534 0.116821 2.15738   V2 2.7716 0.148457 1.83128 
+  N0 0.417243 0.88974 -0.185122   N1 0.70819 0.492319 -0.506053   N2 0.880144 0.401503 -0.253261 
+   txt003 
+STRI 
+  V0 2.70988 0.237531 1.8678   V1 2.62963 0.267222 1.91528   V2 2.75787 0.210278 2.18785 
+  N0 0.60461 0.794635 -0.0547983   N1 0.113546 0.974822 0.191909   N2 0.0260102 0.988113 0.151516 
+   txt003 
+STRI 
+  V0 2.75787 0.210278 2.18785   V1 2.85818 0.186914 2.17063   V2 2.70988 0.237531 1.8678 
+  N0 0.0260102 0.988113 0.151516   N1 0.417243 0.88974 -0.185122   N2 0.60461 0.794635 -0.0547983 
+   txt003 
+STRI 
+  V0 2.62963 0.267222 1.91528   V1 2.54938 0.237531 1.96276   V2 2.65756 0.186914 2.20507 
+  N0 0.113546 0.974822 0.191909   N1 -0.452673 0.821162 0.347535   N2 -0.365378 0.851743 0.375544 
+   txt003 
+STRI 
+  V0 2.65756 0.186914 2.20507   V1 2.75787 0.210278 2.18785   V2 2.62963 0.267222 1.91528 
+  N0 -0.365378 0.851743 0.375544   N1 0.0260102 0.988113 0.151516   N2 0.113546 0.974822 0.191909 
+   txt003 
+STRI 
+  V0 2.54938 0.237531 1.96276   V1 2.48765 0.148457 1.99928   V2 2.5804 0.116821 2.21831 
+  N0 -0.452673 0.821162 0.347535   N1 -0.842821 0.409176 0.34961   N2 -0.723795 0.498863 0.476715 
+   txt003 
+STRI 
+  V0 2.5804 0.116821 2.21831   V1 2.65756 0.186914 2.20507   V2 2.54938 0.237531 1.96276 
+  N0 -0.723795 0.498863 0.476715   N1 -0.365378 0.851743 0.375544   N2 -0.452673 0.821162 0.347535 
+   txt003 
+STRI 
+  V0 2.48765 0.148457 1.99928   V1 2.46296 0 2.01389   V2 2.54954 0 2.22361 
+  N0 -0.842821 0.409176 0.34961   N1 -0.948683 -4.59839e-16 0.316228   N2 -0.874591 -1.30753e-15 0.484861 
+   txt003 
+STRI 
+  V0 2.54954 0 2.22361   V1 2.5804 0.116821 2.21831   V2 2.48765 0.148457 1.99928 
+  N0 -0.874591 -1.30753e-15 0.484861   N1 -0.723795 0.498863 0.476715   N2 -0.842821 0.409176 0.34961 
+   txt003 
+STRI 
+  V0 2.9662 0 2.15208   V1 2.93534 0.116821 2.15738   V2 3.25556 0.104167 2.4 
+  N0 0.787582 0 -0.61621   N1 0.70819 0.492319 -0.506053   N2 0.366221 0.366221 -0.855433 
+   txt003 
+STRI 
+  V0 3.25556 0.104167 2.4   V1 3.3 0 2.4   V2 2.9662 0 2.15208 
+  N0 0.366221 0.366221 -0.855433   N1 0.384615 0 -0.923077   N2 0.787582 0 -0.61621 
+   txt003 
+STRI 
+  V0 2.93534 0.116821 2.15738   V1 2.85818 0.186914 2.17063   V2 3.14444 0.166667 2.4 
+  N0 0.70819 0.492319 -0.506053   N1 0.417243 0.88974 -0.185122   N2 0.250514 0.801644 -0.54278 
+   txt003 
+STRI 
+  V0 3.14444 0.166667 2.4   V1 3.25556 0.104167 2.4   V2 2.93534 0.116821 2.15738 
+  N0 0.250514 0.801644 -0.54278   N1 0.366221 0.366221 -0.855433   N2 0.70819 0.492319 -0.506053 
+   txt003 
+STRI 
+  V0 2.85818 0.186914 2.17063   V1 2.75787 0.210278 2.18785   V2 3 0.1875 2.4 
+  N0 0.417243 0.88974 -0.185122   N1 0.0260102 0.988113 0.151516   N2 4.05793e-32 1 2.19303e-16 
+   txt003 
+STRI 
+  V0 3 0.1875 2.4   V1 3.14444 0.166667 2.4   V2 2.85818 0.186914 2.17063 
+  N0 4.05793e-32 1 2.19303e-16   N1 0.250514 0.801644 -0.54278   N2 0.417243 0.88974 -0.185122 
+   txt003 
+STRI 
+  V0 2.75787 0.210278 2.18785   V1 2.65756 0.186914 2.20507   V2 2.85556 0.166667 2.4 
+  N0 0.0260102 0.988113 0.151516   N1 -0.365378 0.851743 0.375544   N2 -0.267368 0.855576 0.443288 
+   txt003 
+STRI 
+  V0 2.85556 0.166667 2.4   V1 3 0.1875 2.4   V2 2.75787 0.210278 2.18785 
+  N0 -0.267368 0.855576 0.443288   N1 4.05793e-32 1 2.19303e-16   N2 0.0260102 0.988113 0.151516 
+   txt003 
+STRI 
+  V0 2.65756 0.186914 2.20507   V1 2.5804 0.116821 2.21831   V2 2.74444 0.104167 2.4 
+  N0 -0.365378 0.851743 0.375544   N1 -0.723795 0.498863 0.476715   N2 -0.497164 0.497164 0.711095 
+   txt003 
+STRI 
+  V0 2.74444 0.104167 2.4   V1 2.85556 0.166667 2.4   V2 2.65756 0.186914 2.20507 
+  N0 -0.497164 0.497164 0.711095   N1 -0.267368 0.855576 0.443288   N2 -0.365378 0.851743 0.375544 
+   txt003 
+STRI 
+  V0 2.5804 0.116821 2.21831   V1 2.54954 0 2.22361   V2 2.7 0 2.4 
+  N0 -0.723795 0.498863 0.476715   N1 -0.874591 -1.30753e-15 0.484861   N2 -0.6 -3.55271e-15 0.8 
+   txt003 
+STRI 
+  V0 2.7 0 2.4   V1 2.74444 0.104167 2.4   V2 2.5804 0.116821 2.21831 
+  N0 -0.6 -3.55271e-15 0.8   N1 -0.497164 0.497164 0.711095   N2 -0.723795 0.498863 0.476715 
+   txt003 
+STRI 
+  V0 2.7 0 2.4   V1 2.74444 -0.104167 2.4   V2 2.79641 -0.10108 2.43193 
+  N0 -0.6 0 0.8   N1 -0.497164 -0.497164 0.711095   N2 -0.387052 -0.411886 0.824949 
+   txt003 
+STRI 
+  V0 2.79641 -0.10108 2.43193   V1 2.74907 0 2.43125   V2 2.7 0 2.4 
+  N0 -0.387052 -0.411886 0.824949   N1 -0.467888 0 0.883788   N2 -0.6 0 0.8 
+   txt003 
+STRI 
+  V0 2.74444 -0.104167 2.4   V1 2.85556 -0.166667 2.4   V2 2.91474 -0.161728 2.43361 
+  N0 -0.497164 -0.497164 0.711095   N1 -0.267368 -0.855576 0.443288   N2 -0.215548 -0.724209 0.655027 
+   txt003 
+STRI 
+  V0 2.91474 -0.161728 2.43361   V1 2.79641 -0.10108 2.43193   V2 2.74444 -0.104167 2.4 
+  N0 -0.215548 -0.724209 0.655027   N1 -0.387052 -0.411886 0.824949   N2 -0.497164 -0.497164 0.711095 
+   txt003 
+STRI 
+  V0 2.85556 -0.166667 2.4   V1 3 -0.1875 2.4   V2 3.06858 -0.181944 2.43581 
+  N0 -0.267368 -0.855576 0.443288   N1 0 -1 0   N2 -0.00489618 -0.939227 0.343261 
+   txt003 
+STRI 
+  V0 3.06858 -0.181944 2.43581   V1 2.91474 -0.161728 2.43361   V2 2.85556 -0.166667 2.4 
+  N0 -0.00489618 -0.939227 0.343261   N1 -0.215548 -0.724209 0.655027   N2 -0.267368 -0.855576 0.443288 
+   txt003 
+STRI 
+  V0 3 -0.1875 2.4   V1 3.14444 -0.166667 2.4   V2 3.22241 -0.161728 2.438 
+  N0 0 -1 0   N1 0.250514 -0.801644 -0.54278   N2 0.269127 -0.933284 -0.237808 
+   txt003 
+STRI 
+  V0 3.22241 -0.161728 2.438   V1 3.06858 -0.181944 2.43581   V2 3 -0.1875 2.4 
+  N0 0.269127 -0.933284 -0.237808   N1 -0.00489618 -0.939227 0.343261   N2 0 -1 0 
+   txt003 
+STRI 
+  V0 3.14444 -0.166667 2.4   V1 3.25556 -0.104167 2.4   V2 3.34075 -0.10108 2.43969 
+  N0 0.250514 -0.801644 -0.54278   N1 0.366221 -0.366221 -0.855433   N2 0.442187 -0.473386 -0.761824 
+   txt003 
+STRI 
+  V0 3.34075 -0.10108 2.43969   V1 3.22241 -0.161728 2.438   V2 3.14444 -0.166667 2.4 
+  N0 0.442187 -0.473386 -0.761824   N1 0.269127 -0.933284 -0.237808   N2 0.250514 -0.801644 -0.54278 
+   txt003 
+STRI 
+  V0 3.25556 -0.104167 2.4   V1 3.3 0 2.4   V2 3.38808 0 2.44036 
+  N0 0.366221 -0.366221 -0.855433   N1 0.384615 -2.55067e-15 -0.923077   N2 0.463425 -2.75328e-15 -0.886136 
+   txt003 
+STRI 
+  V0 3.38808 0 2.44036   V1 3.34075 -0.10108 2.43969   V2 3.25556 -0.104167 2.4 
+  N0 0.463425 -2.75328e-15 -0.886136   N1 0.442187 -0.473386 -0.761824   N2 0.366221 -0.366221 -0.855433 
+   txt003 
+STRI 
+  V0 2.74907 0 2.43125   V1 2.79641 -0.10108 2.43193   V2 2.83978 -0.0933642 2.45123 
+  N0 -0.467888 0 0.883788   N1 -0.387052 -0.411886 0.824949   N2 -0.253997 -0.272114 0.928138 
+   txt003 
+STRI 
+  V0 2.83978 -0.0933642 2.45123   V1 2.79259 0 2.45   V2 2.74907 0 2.43125 
+  N0 -0.253997 -0.272114 0.928138   N1 -0.306009 0 0.952029   N2 -0.467888 0 0.883788 
+   txt003 
+STRI 
+  V0 2.79641 -0.10108 2.43193   V1 2.91474 -0.161728 2.43361   V2 2.95775 -0.149383 2.45432 
+  N0 -0.387052 -0.411886 0.824949   N1 -0.215548 -0.724209 0.655027   N2 -0.14959 -0.481391 0.863647 
+   txt003 
+STRI 
+  V0 2.95775 -0.149383 2.45432   V1 2.83978 -0.0933642 2.45123   V2 2.79641 -0.10108 2.43193 
+  N0 -0.14959 -0.481391 0.863647   N1 -0.253997 -0.272114 0.928138   N2 -0.387052 -0.411886 0.824949 
+   txt003 
+STRI 
+  V0 2.91474 -0.161728 2.43361   V1 3.06858 -0.181944 2.43581   V2 3.11111 -0.168056 2.45833 
+  N0 -0.215548 -0.724209 0.655027   N1 -0.00489618 -0.939227 0.343261   N2 -0.0195232 -0.665415 0.746219 
+   txt003 
+STRI 
+  V0 3.11111 -0.168056 2.45833   V1 2.95775 -0.149383 2.45432   V2 2.91474 -0.161728 2.43361 
+  N0 -0.0195232 -0.665415 0.746219   N1 -0.14959 -0.481391 0.863647   N2 -0.215548 -0.724209 0.655027 
+   txt003 
+STRI 
+  V0 3.06858 -0.181944 2.43581   V1 3.22241 -0.161728 2.438   V2 3.26447 -0.149383 2.46235 
+  N0 -0.00489618 -0.939227 0.343261   N1 0.269127 -0.933284 -0.237808   N2 0.218115 -0.87054 0.44112 
+   txt003 
+STRI 
+  V0 3.26447 -0.149383 2.46235   V1 3.11111 -0.168056 2.45833   V2 3.06858 -0.181944 2.43581 
+  N0 0.218115 -0.87054 0.44112   N1 -0.0195232 -0.665415 0.746219   N2 -0.00489618 -0.939227 0.343261 
+   txt003 
+STRI 
+  V0 3.22241 -0.161728 2.438   V1 3.34075 -0.10108 2.43969   V2 3.38244 -0.0933642 2.46543 
+  N0 0.269127 -0.933284 -0.237808   N1 0.442187 -0.473386 -0.761824   N2 0.612385 -0.714958 -0.337372 
+   txt003 
+STRI 
+  V0 3.38244 -0.0933642 2.46543   V1 3.26447 -0.149383 2.46235   V2 3.22241 -0.161728 2.438 
+  N0 0.612385 -0.714958 -0.337372   N1 0.218115 -0.87054 0.44112   N2 0.269127 -0.933284 -0.237808 
+   txt003 
+STRI 
+  V0 3.34075 -0.10108 2.43969   V1 3.38808 0 2.44036   V2 3.42963 0 2.46667 
+  N0 0.442187 -0.473386 -0.761824   N1 0.463425 -2.75328e-15 -0.886136   N2 0.694136 -3.24605e-15 -0.719844 
+   txt003 
+STRI 
+  V0 3.42963 0 2.46667   V1 3.38244 -0.0933642 2.46543   V2 3.34075 -0.10108 2.43969 
+  N0 0.694136 -3.24605e-15 -0.719844   N1 0.612385 -0.714958 -0.337372   N2 0.442187 -0.473386 -0.761824 
+   txt003 
+STRI 
+  V0 2.79259 0 2.45   V1 2.83978 -0.0933642 2.45123   V2 2.86968 -0.0833333 2.45781 
+  N0 -0.306009 0 0.952029   N1 -0.253997 -0.272114 0.928138   N2 -0.0182321 0.0210195 0.999613 
+   txt003 
+STRI 
+  V0 2.86968 -0.0833333 2.45781   V1 2.825 0 2.45625   V2 2.79259 0 2.45 
+  N0 -0.0182321 0.0210195 0.999613   N1 2.22045e-15 0 1   N2 -0.306009 0 0.952029 
+   txt003 
+STRI 
+  V0 2.83978 -0.0933642 2.45123   V1 2.95775 -0.149383 2.45432   V2 2.98137 -0.133333 2.46172 
+  N0 -0.253997 -0.272114 0.928138   N1 -0.14959 -0.481391 0.863647   N2 -0.0369301 -0.00796532 0.999286 
+   txt003 
+STRI 
+  V0 2.98137 -0.133333 2.46172   V1 2.86968 -0.0833333 2.45781   V2 2.83978 -0.0933642 2.45123 
+  N0 -0.0369301 -0.00796532 0.999286   N1 -0.0182321 0.0210195 0.999613   N2 -0.253997 -0.272114 0.928138 
+   txt003 
+STRI 
+  V0 2.95775 -0.149383 2.45432   V1 3.11111 -0.168056 2.45833   V2 3.12656 -0.15 2.4668 
+  N0 -0.14959 -0.481391 0.863647   N1 -0.0195232 -0.665415 0.746219   N2 -0.0348909 -0.0594438 0.997622 
+   txt003 
+STRI 
+  V0 3.12656 -0.15 2.4668   V1 2.98137 -0.133333 2.46172   V2 2.95775 -0.149383 2.45432 
+  N0 -0.0348909 -0.0594438 0.997622   N1 -0.0369301 -0.00796532 0.999286   N2 -0.14959 -0.481391 0.863647 
+   txt003 
+STRI 
+  V0 3.11111 -0.168056 2.45833   V1 3.26447 -0.149383 2.46235   V2 3.27176 -0.133333 2.47187 
+  N0 -0.0195232 -0.665415 0.746219   N1 0.218115 -0.87054 0.44112   N2 -0.00787186 -0.108144 0.994104 
+   txt003 
+STRI 
+  V0 3.27176 -0.133333 2.47187   V1 3.12656 -0.15 2.4668   V2 3.11111 -0.168056 2.45833 
+  N0 -0.00787186 -0.108144 0.994104   N1 -0.0348909 -0.0594438 0.997622   N2 -0.0195232 -0.665415 0.746219 
+   txt003 
+STRI 
+  V0 3.26447 -0.149383 2.46235   V1 3.38244 -0.0933642 2.46543   V2 3.38345 -0.0833333 2.47578 
+  N0 0.218115 -0.87054 0.44112   N1 0.612385 -0.714958 -0.337372   N2 0.0539577 -0.111406 0.992309 
+   txt003 
+STRI 
+  V0 3.38345 -0.0833333 2.47578   V1 3.27176 -0.133333 2.47187   V2 3.26447 -0.149383 2.46235 
+  N0 0.0539577 -0.111406 0.992309   N1 -0.00787186 -0.108144 0.994104   N2 0.218115 -0.87054 0.44112 
+   txt003 
+STRI 
+  V0 3.38244 -0.0933642 2.46543   V1 3.42963 0 2.46667   V2 3.42813 0 2.47734 
+  N0 0.612385 -0.714958 -0.337372   N1 0.694136 -3.24605e-15 -0.719844   N2 0.106533 1.89241e-15 0.994309 
+   txt003 
+STRI 
+  V0 3.42813 0 2.47734   V1 3.38345 -0.0833333 2.47578   V2 3.38244 -0.0933642 2.46543 
+  N0 0.106533 1.89241e-15 0.994309   N1 0.0539577 -0.111406 0.992309   N2 0.612385 -0.714958 -0.337372 
+   txt003 
+STRI 
+  V0 2.825 0 2.45625   V1 2.86968 -0.0833333 2.45781   V2 2.88121 -0.0733025 2.45154 
+  N0 2.22045e-15 0 1   N1 -0.0182321 0.0210195 0.999613   N2 0.507715 0.682832 0.525324 
+   txt003 
+STRI 
+  V0 2.88121 -0.0733025 2.45154   V1 2.84074 0 2.45   V2 2.825 0 2.45625 
+  N0 0.507715 0.682832 0.525324   N1 0.913812 0 0.406138   N2 2.22045e-15 0 1 
+   txt003 
+STRI 
+  V0 2.86968 -0.0833333 2.45781   V1 2.98137 -0.133333 2.46172   V2 2.98237 -0.117284 2.4554 
+  N0 -0.0182321 0.0210195 0.999613   N1 -0.0369301 -0.00796532 0.999286   N2 0.148477 0.721529 0.676277 
+   txt003 
+STRI 
+  V0 2.98237 -0.117284 2.4554   V1 2.88121 -0.0733025 2.45154   V2 2.86968 -0.0833333 2.45781 
+  N0 0.148477 0.721529 0.676277   N1 0.507715 0.682832 0.525324   N2 -0.0182321 0.0210195 0.999613 
+   txt003 
+STRI 
+  V0 2.98137 -0.133333 2.46172   V1 3.12656 -0.15 2.4668   V2 3.11389 -0.131944 2.46042 
+  N0 -0.0369301 -0.00796532 0.999286   N1 -0.0348909 -0.0594438 0.997622   N2 -0.0300305 0.615625 0.787467 
+   txt003 
+STRI 
+  V0 3.11389 -0.131944 2.46042   V1 2.98237 -0.117284 2.4554   V2 2.98137 -0.133333 2.46172 
+  N0 -0.0300305 0.615625 0.787467   N1 0.148477 0.721529 0.676277   N2 -0.0369301 -0.00796532 0.999286 
+   txt003 
+STRI 
+  V0 3.12656 -0.15 2.4668   V1 3.27176 -0.133333 2.47187   V2 3.2454 -0.117284 2.46543 
+  N0 -0.0348909 -0.0594438 0.997622   N1 -0.00787186 -0.108144 0.994104   N2 -0.144371 0.459364 0.876437 
+   txt003 
+STRI 
+  V0 3.2454 -0.117284 2.46543   V1 3.11389 -0.131944 2.46042   V2 3.12656 -0.15 2.4668 
+  N0 -0.144371 0.459364 0.876437   N1 -0.0300305 0.615625 0.787467   N2 -0.0348909 -0.0594438 0.997622 
+   txt003 
+STRI 
+  V0 3.27176 -0.133333 2.47187   V1 3.38345 -0.0833333 2.47578   V2 3.34657 -0.0733025 2.46929 
+  N0 -0.00787186 -0.108144 0.994104   N1 0.0539577 -0.111406 0.992309   N2 -0.223743 0.242919 0.943891 
+   txt003 
+STRI 
+  V0 3.34657 -0.0733025 2.46929   V1 3.2454 -0.117284 2.46543   V2 3.27176 -0.133333 2.47187 
+  N0 -0.223743 0.242919 0.943891   N1 -0.144371 0.459364 0.876437   N2 -0.00787186 -0.108144 0.994104 
+   txt003 
+STRI 
+  V0 3.38345 -0.0833333 2.47578   V1 3.42813 0 2.47734   V2 3.38704 0 2.47083 
+  N0 0.0539577 -0.111406 0.992309   N1 0.106533 1.89241e-15 0.994309   N2 -0.253109 3.19224e-15 0.967438 
+   txt003 
+STRI 
+  V0 3.38704 0 2.47083   V1 3.34657 -0.0733025 2.46929   V2 3.38345 -0.0833333 2.47578 
+  N0 -0.253109 3.19224e-15 0.967438   N1 -0.223743 0.242919 0.943891   N2 0.0539577 -0.111406 0.992309 
+   txt003 
+STRI 
+  V0 2.84074 0 2.45   V1 2.88121 -0.0733025 2.45154   V2 2.86949 -0.0655864 2.43231 
+  N0 0.913812 0 0.406138   N1 0.507715 0.682832 0.525324   N2 0.577416 0.711734 -0.400031 
+   txt003 
+STRI 
+  V0 2.86949 -0.0655864 2.43231   V1 2.83426 0 2.43125   V2 2.84074 0 2.45 
+  N0 0.577416 0.711734 -0.400031   N1 0.789352 0 -0.613941   N2 0.913812 0 0.406138 
+   txt003 
+STRI 
+  V0 2.88121 -0.0733025 2.45154   V1 2.98237 -0.117284 2.4554   V2 2.95756 -0.104938 2.43496 
+  N0 0.507715 0.682832 0.525324   N1 0.148477 0.721529 0.676277   N2 0.241288 0.970358 -0.0136399 
+   txt003 
+STRI 
+  V0 2.95756 -0.104938 2.43496   V1 2.86949 -0.0655864 2.43231   V2 2.88121 -0.0733025 2.45154 
+  N0 0.241288 0.970358 -0.0136399   N1 0.577416 0.711734 -0.400031   N2 0.507715 0.682832 0.525324 
+   txt003 
+STRI 
+  V0 2.98237 -0.117284 2.4554   V1 3.11389 -0.131944 2.46042   V2 3.07205 -0.118056 2.43841 
+  N0 0.148477 0.721529 0.676277   N1 -0.0300305 0.615625 0.787467   N2 -0.0103804 0.938666 0.344672 
+   txt003 
+STRI 
+  V0 3.07205 -0.118056 2.43841   V1 2.95756 -0.104938 2.43496   V2 2.98237 -0.117284 2.4554 
+  N0 -0.0103804 0.938666 0.344672   N1 0.241288 0.970358 -0.0136399   N2 0.148477 0.721529 0.676277 
+   txt003 
+STRI 
+  V0 3.11389 -0.131944 2.46042   V1 3.2454 -0.117284 2.46543   V2 3.18654 -0.104938 2.44186 
+  N0 -0.0300305 0.615625 0.787467   N1 -0.144371 0.459364 0.876437   N2 -0.199105 0.721639 0.663019 
+   txt003 
+STRI 
+  V0 3.18654 -0.104938 2.44186   V1 3.07205 -0.118056 2.43841   V2 3.11389 -0.131944 2.46042 
+  N0 -0.199105 0.721639 0.663019   N1 -0.0103804 0.938666 0.344672   N2 -0.0300305 0.615625 0.787467 
+   txt003 
+STRI 
+  V0 3.2454 -0.117284 2.46543   V1 3.34657 -0.0733025 2.46929   V2 3.27461 -0.0655864 2.44451 
+  N0 -0.144371 0.459364 0.876437   N1 -0.223743 0.242919 0.943891   N2 -0.316294 0.364979 0.875641 
+   txt003 
+STRI 
+  V0 3.27461 -0.0655864 2.44451   V1 3.18654 -0.104938 2.44186   V2 3.2454 -0.117284 2.46543 
+  N0 -0.316294 0.364979 0.875641   N1 -0.199105 0.721639 0.663019   N2 -0.144371 0.459364 0.876437 
+   txt003 
+STRI 
+  V0 3.34657 -0.0733025 2.46929   V1 3.38704 0 2.47083   V2 3.30984 0 2.44557 
+  N0 -0.223743 0.242919 0.943891   N1 -0.253109 3.19224e-15 0.967438   N2 -0.349987 4.0695e-15 0.936755 
+   txt003 
+STRI 
+  V0 3.30984 0 2.44557   V1 3.27461 -0.0655864 2.44451   V2 3.34657 -0.0733025 2.46929 
+  N0 -0.349987 4.0695e-15 0.936755   N1 -0.316294 0.364979 0.875641   N2 -0.223743 0.242919 0.943891 
+   txt003 
+STRI 
+  V0 2.83426 0 2.43125   V1 2.86949 -0.0655864 2.43231   V2 2.82963 -0.0625 2.4 
+  N0 0.789352 0 -0.613941   N1 0.577416 0.711734 -0.400031   N2 0.483629 0.537366 -0.690899 
+   txt003 
+STRI 
+  V0 2.82963 -0.0625 2.4   V1 2.8 0 2.4   V2 2.83426 0 2.43125 
+  N0 0.483629 0.537366 -0.690899   N1 0.6 0 -0.8   N2 0.789352 0 -0.613941 
+   txt003 
+STRI 
+  V0 2.86949 -0.0655864 2.43231   V1 2.95756 -0.104938 2.43496   V2 2.9037 -0.1 2.4 
+  N0 0.577416 0.711734 -0.400031   N1 0.241288 0.970358 -0.0136399   N2 0.247465 0.879877 -0.405681 
+   txt003 
+STRI 
+  V0 2.9037 -0.1 2.4   V1 2.82963 -0.0625 2.4   V2 2.86949 -0.0655864 2.43231 
+  N0 0.247465 0.879877 -0.405681   N1 0.483629 0.537366 -0.690899   N2 0.577416 0.711734 -0.400031 
+   txt003 
+STRI 
+  V0 2.95756 -0.104938 2.43496   V1 3.07205 -0.118056 2.43841   V2 3 -0.1125 2.4 
+  N0 0.241288 0.970358 -0.0136399   N1 -0.0103804 0.938666 0.344672   N2 0 1 0 
+   txt003 
+STRI 
+  V0 3 -0.1125 2.4   V1 2.9037 -0.1 2.4   V2 2.95756 -0.104938 2.43496 
+  N0 0 1 0   N1 0.247465 0.879877 -0.405681   N2 0.241288 0.970358 -0.0136399 
+   txt003 
+STRI 
+  V0 3.07205 -0.118056 2.43841   V1 3.18654 -0.104938 2.44186   V2 3.0963 -0.1 2.4 
+  N0 -0.0103804 0.938666 0.344672   N1 -0.199105 0.721639 0.663019   N2 -0.236617 0.841304 0.486024 
+   txt003 
+STRI 
+  V0 3.0963 -0.1 2.4   V1 3 -0.1125 2.4   V2 3.07205 -0.118056 2.43841 
+  N0 -0.236617 0.841304 0.486024   N1 0 1 0   N2 -0.0103804 0.938666 0.344672 
+   txt003 
+STRI 
+  V0 3.18654 -0.104938 2.44186   V1 3.27461 -0.0655864 2.44451   V2 3.17037 -0.0625 2.4 
+  N0 -0.199105 0.721639 0.663019   N1 -0.316294 0.364979 0.875641   N2 -0.378646 0.420717 0.824393 
+   txt003 
+STRI 
+  V0 3.17037 -0.0625 2.4   V1 3.0963 -0.1 2.4   V2 3.18654 -0.104938 2.44186 
+  N0 -0.378646 0.420717 0.824393   N1 -0.236617 0.841304 0.486024   N2 -0.199105 0.721639 0.663019 
+   txt003 
+STRI 
+  V0 3.27461 -0.0655864 2.44451   V1 3.30984 0 2.44557   V2 3.2 0 2.4 
+  N0 -0.316294 0.364979 0.875641   N1 -0.349987 4.0695e-15 0.936755   N2 -0.410365 4.31973e-15 0.911922 
+   txt003 
+STRI 
+  V0 3.2 0 2.4   V1 3.17037 -0.0625 2.4   V2 3.27461 -0.0655864 2.44451 
+  N0 -0.410365 4.31973e-15 0.911922   N1 -0.378646 0.420717 0.824393   N2 -0.316294 0.364979 0.875641 
+   txt003 
+STRI 
+  V0 3.3 0 2.4   V1 3.25556 0.104167 2.4   V2 3.34075 0.10108 2.43969 
+  N0 0.384615 0 -0.923077   N1 0.366221 0.366221 -0.855433   N2 0.442187 0.473386 -0.761824 
+   txt003 
+STRI 
+  V0 3.34075 0.10108 2.43969   V1 3.38808 0 2.44036   V2 3.3 0 2.4 
+  N0 0.442187 0.473386 -0.761824   N1 0.463425 0 -0.886136   N2 0.384615 0 -0.923077 
+   txt003 
+STRI 
+  V0 3.25556 0.104167 2.4   V1 3.14444 0.166667 2.4   V2 3.22241 0.161728 2.438 
+  N0 0.366221 0.366221 -0.855433   N1 0.250514 0.801644 -0.54278   N2 0.269127 0.933284 -0.237808 
+   txt003 
+STRI 
+  V0 3.22241 0.161728 2.438   V1 3.34075 0.10108 2.43969   V2 3.25556 0.104167 2.4 
+  N0 0.269127 0.933284 -0.237808   N1 0.442187 0.473386 -0.761824   N2 0.366221 0.366221 -0.855433 
+   txt003 
+STRI 
+  V0 3.14444 0.166667 2.4   V1 3 0.1875 2.4   V2 3.06858 0.181944 2.43581 
+  N0 0.250514 0.801644 -0.54278   N1 0 1 -0   N2 -0.00489618 0.939227 0.343261 
+   txt003 
+STRI 
+  V0 3.06858 0.181944 2.43581   V1 3.22241 0.161728 2.438   V2 3.14444 0.166667 2.4 
+  N0 -0.00489618 0.939227 0.343261   N1 0.269127 0.933284 -0.237808   N2 0.250514 0.801644 -0.54278 
+   txt003 
+STRI 
+  V0 3 0.1875 2.4   V1 2.85556 0.166667 2.4   V2 2.91474 0.161728 2.43361 
+  N0 0 1 -0   N1 -0.267368 0.855576 0.443288   N2 -0.215548 0.724209 0.655027 
+   txt003 
+STRI 
+  V0 2.91474 0.161728 2.43361   V1 3.06858 0.181944 2.43581   V2 3 0.1875 2.4 
+  N0 -0.215548 0.724209 0.655027   N1 -0.00489618 0.939227 0.343261   N2 0 1 -0 
+   txt003 
+STRI 
+  V0 2.85556 0.166667 2.4   V1 2.74444 0.104167 2.4   V2 2.79641 0.10108 2.43193 
+  N0 -0.267368 0.855576 0.443288   N1 -0.497164 0.497164 0.711095   N2 -0.387052 0.411886 0.824949 
+   txt003 
+STRI 
+  V0 2.79641 0.10108 2.43193   V1 2.91474 0.161728 2.43361   V2 2.85556 0.166667 2.4 
+  N0 -0.387052 0.411886 0.824949   N1 -0.215548 0.724209 0.655027   N2 -0.267368 0.855576 0.443288 
+   txt003 
+STRI 
+  V0 2.74444 0.104167 2.4   V1 2.7 0 2.4   V2 2.74907 0 2.43125 
+  N0 -0.497164 0.497164 0.711095   N1 -0.6 2.24387e-29 0.8   N2 -0.467888 -4.75841e-16 0.883788 
+   txt003 
+STRI 
+  V0 2.74907 0 2.43125   V1 2.79641 0.10108 2.43193   V2 2.74444 0.104167 2.4 
+  N0 -0.467888 -4.75841e-16 0.883788   N1 -0.387052 0.411886 0.824949   N2 -0.497164 0.497164 0.711095 
+   txt003 
+STRI 
+  V0 3.38808 0 2.44036   V1 3.34075 0.10108 2.43969   V2 3.38244 0.0933642 2.46543 
+  N0 0.463425 0 -0.886136   N1 0.442187 0.473386 -0.761824   N2 0.612385 0.714958 -0.337372 
+   txt003 
+STRI 
+  V0 3.38244 0.0933642 2.46543   V1 3.42963 0 2.46667   V2 3.38808 0 2.44036 
+  N0 0.612385 0.714958 -0.337372   N1 0.694136 0 -0.719844   N2 0.463425 0 -0.886136 
+   txt003 
+STRI 
+  V0 3.34075 0.10108 2.43969   V1 3.22241 0.161728 2.438   V2 3.26447 0.149383 2.46235 
+  N0 0.442187 0.473386 -0.761824   N1 0.269127 0.933284 -0.237808   N2 0.218115 0.87054 0.44112 
+   txt003 
+STRI 
+  V0 3.26447 0.149383 2.46235   V1 3.38244 0.0933642 2.46543   V2 3.34075 0.10108 2.43969 
+  N0 0.218115 0.87054 0.44112   N1 0.612385 0.714958 -0.337372   N2 0.442187 0.473386 -0.761824 
+   txt003 
+STRI 
+  V0 3.22241 0.161728 2.438   V1 3.06858 0.181944 2.43581   V2 3.11111 0.168056 2.45833 
+  N0 0.269127 0.933284 -0.237808   N1 -0.00489618 0.939227 0.343261   N2 -0.0195232 0.665415 0.746219 
+   txt003 
+STRI 
+  V0 3.11111 0.168056 2.45833   V1 3.26447 0.149383 2.46235   V2 3.22241 0.161728 2.438 
+  N0 -0.0195232 0.665415 0.746219   N1 0.218115 0.87054 0.44112   N2 0.269127 0.933284 -0.237808 
+   txt003 
+STRI 
+  V0 3.06858 0.181944 2.43581   V1 2.91474 0.161728 2.43361   V2 2.95775 0.149383 2.45432 
+  N0 -0.00489618 0.939227 0.343261   N1 -0.215548 0.724209 0.655027   N2 -0.14959 0.481391 0.863647 
+   txt003 
+STRI 
+  V0 2.95775 0.149383 2.45432   V1 3.11111 0.168056 2.45833   V2 3.06858 0.181944 2.43581 
+  N0 -0.14959 0.481391 0.863647   N1 -0.0195232 0.665415 0.746219   N2 -0.00489618 0.939227 0.343261 
+   txt003 
+STRI 
+  V0 2.91474 0.161728 2.43361   V1 2.79641 0.10108 2.43193   V2 2.83978 0.0933642 2.45123 
+  N0 -0.215548 0.724209 0.655027   N1 -0.387052 0.411886 0.824949   N2 -0.253997 0.272114 0.928138 
+   txt003 
+STRI 
+  V0 2.83978 0.0933642 2.45123   V1 2.95775 0.149383 2.45432   V2 2.91474 0.161728 2.43361 
+  N0 -0.253997 0.272114 0.928138   N1 -0.14959 0.481391 0.863647   N2 -0.215548 0.724209 0.655027 
+   txt003 
+STRI 
+  V0 2.79641 0.10108 2.43193   V1 2.74907 0 2.43125   V2 2.79259 0 2.45 
+  N0 -0.387052 0.411886 0.824949   N1 -0.467888 -4.75841e-16 0.883788   N2 -0.306009 -1.09783e-15 0.952029 
+   txt003 
+STRI 
+  V0 2.79259 0 2.45   V1 2.83978 0.0933642 2.45123   V2 2.79641 0.10108 2.43193 
+  N0 -0.306009 -1.09783e-15 0.952029   N1 -0.253997 0.272114 0.928138   N2 -0.387052 0.411886 0.824949 
+   txt003 
+STRI 
+  V0 3.42963 0 2.46667   V1 3.38244 0.0933642 2.46543   V2 3.38345 0.0833333 2.47578 
+  N0 0.694136 0 -0.719844   N1 0.612385 0.714958 -0.337372   N2 0.0539577 0.111406 0.992309 
+   txt003 
+STRI 
+  V0 3.38345 0.0833333 2.47578   V1 3.42813 0 2.47734   V2 3.42963 0 2.46667 
+  N0 0.0539577 0.111406 0.992309   N1 0.106533 -0 0.994309   N2 0.694136 0 -0.719844 
+   txt003 
+STRI 
+  V0 3.38244 0.0933642 2.46543   V1 3.26447 0.149383 2.46235   V2 3.27176 0.133333 2.47188 
+  N0 0.612385 0.714958 -0.337372   N1 0.218115 0.87054 0.44112   N2 -0.00787186 0.108144 0.994104 
+   txt003 
+STRI 
+  V0 3.27176 0.133333 2.47188   V1 3.38345 0.0833333 2.47578   V2 3.38244 0.0933642 2.46543 
+  N0 -0.00787186 0.108144 0.994104   N1 0.0539577 0.111406 0.992309   N2 0.612385 0.714958 -0.337372 
+   txt003 
+STRI 
+  V0 3.26447 0.149383 2.46235   V1 3.11111 0.168056 2.45833   V2 3.12656 0.15 2.4668 
+  N0 0.218115 0.87054 0.44112   N1 -0.0195232 0.665415 0.746219   N2 -0.0348909 0.0594438 0.997622 
+   txt003 
+STRI 
+  V0 3.12656 0.15 2.4668   V1 3.27176 0.133333 2.47188   V2 3.26447 0.149383 2.46235 
+  N0 -0.0348909 0.0594438 0.997622   N1 -0.00787186 0.108144 0.994104   N2 0.218115 0.87054 0.44112 
+   txt003 
+STRI 
+  V0 3.11111 0.168056 2.45833   V1 2.95775 0.149383 2.45432   V2 2.98137 0.133333 2.46172 
+  N0 -0.0195232 0.665415 0.746219   N1 -0.14959 0.481391 0.863647   N2 -0.0369301 0.00796532 0.999286 
+   txt003 
+STRI 
+  V0 2.98137 0.133333 2.46172   V1 3.12656 0.15 2.4668   V2 3.11111 0.168056 2.45833 
+  N0 -0.0369301 0.00796532 0.999286   N1 -0.0348909 0.0594438 0.997622   N2 -0.0195232 0.665415 0.746219 
+   txt003 
+STRI 
+  V0 2.95775 0.149383 2.45432   V1 2.83978 0.0933642 2.45123   V2 2.86968 0.0833333 2.45781 
+  N0 -0.14959 0.481391 0.863647   N1 -0.253997 0.272114 0.928138   N2 -0.0182321 -0.0210195 0.999613 
+   txt003 
+STRI 
+  V0 2.86968 0.0833333 2.45781   V1 2.98137 0.133333 2.46172   V2 2.95775 0.149383 2.45432 
+  N0 -0.0182321 -0.0210195 0.999613   N1 -0.0369301 0.00796532 0.999286   N2 -0.14959 0.481391 0.863647 
+   txt003 
+STRI 
+  V0 2.83978 0.0933642 2.45123   V1 2.79259 0 2.45   V2 2.825 0 2.45625 
+  N0 -0.253997 0.272114 0.928138   N1 -0.306009 -1.09783e-15 0.952029   N2 2.22045e-15 -2.22045e-15 1 
+   txt003 
+STRI 
+  V0 2.825 0 2.45625   V1 2.86968 0.0833333 2.45781   V2 2.83978 0.0933642 2.45123 
+  N0 2.22045e-15 -2.22045e-15 1   N1 -0.0182321 -0.0210195 0.999613   N2 -0.253997 0.272114 0.928138 
+   txt003 
+STRI 
+  V0 3.42813 0 2.47734   V1 3.38345 0.0833333 2.47578   V2 3.34657 0.0733025 2.46929 
+  N0 0.106533 -0 0.994309   N1 0.0539577 0.111406 0.992309   N2 -0.223743 -0.242919 0.943891 
+   txt003 
+STRI 
+  V0 3.34657 0.0733025 2.46929   V1 3.38704 0 2.47083   V2 3.42813 0 2.47734 
+  N0 -0.223743 -0.242919 0.943891   N1 -0.253109 0 0.967438   N2 0.106533 -0 0.994309 
+   txt003 
+STRI 
+  V0 3.38345 0.0833333 2.47578   V1 3.27176 0.133333 2.47188   V2 3.2454 0.117284 2.46543 
+  N0 0.0539577 0.111406 0.992309   N1 -0.00787186 0.108144 0.994104   N2 -0.144371 -0.459364 0.876437 
+   txt003 
+STRI 
+  V0 3.2454 0.117284 2.46543   V1 3.34657 0.0733025 2.46929   V2 3.38345 0.0833333 2.47578 
+  N0 -0.144371 -0.459364 0.876437   N1 -0.223743 -0.242919 0.943891   N2 0.0539577 0.111406 0.992309 
+   txt003 
+STRI 
+  V0 3.27176 0.133333 2.47188   V1 3.12656 0.15 2.4668   V2 3.11389 0.131944 2.46042 
+  N0 -0.00787186 0.108144 0.994104   N1 -0.0348909 0.0594438 0.997622   N2 -0.0300305 -0.615625 0.787467 
+   txt003 
+STRI 
+  V0 3.11389 0.131944 2.46042   V1 3.2454 0.117284 2.46543   V2 3.27176 0.133333 2.47188 
+  N0 -0.0300305 -0.615625 0.787467   N1 -0.144371 -0.459364 0.876437   N2 -0.00787186 0.108144 0.994104 
+   txt003 
+STRI 
+  V0 3.12656 0.15 2.4668   V1 2.98137 0.133333 2.46172   V2 2.98237 0.117284 2.4554 
+  N0 -0.0348909 0.0594438 0.997622   N1 -0.0369301 0.00796532 0.999286   N2 0.148477 -0.721529 0.676277 
+   txt003 
+STRI 
+  V0 2.98237 0.117284 2.4554   V1 3.11389 0.131944 2.46042   V2 3.12656 0.15 2.4668 
+  N0 0.148477 -0.721529 0.676277   N1 -0.0300305 -0.615625 0.787467   N2 -0.0348909 0.0594438 0.997622 
+   txt003 
+STRI 
+  V0 2.98137 0.133333 2.46172   V1 2.86968 0.0833333 2.45781   V2 2.88121 0.0733025 2.45154 
+  N0 -0.0369301 0.00796532 0.999286   N1 -0.0182321 -0.0210195 0.999613   N2 0.507715 -0.682832 0.525324 
+   txt003 
+STRI 
+  V0 2.88121 0.0733025 2.45154   V1 2.98237 0.117284 2.4554   V2 2.98137 0.133333 2.46172 
+  N0 0.507715 -0.682832 0.525324   N1 0.148477 -0.721529 0.676277   N2 -0.0369301 0.00796532 0.999286 
+   txt003 
+STRI 
+  V0 2.86968 0.0833333 2.45781   V1 2.825 0 2.45625   V2 2.84074 0 2.45 
+  N0 -0.0182321 -0.0210195 0.999613   N1 2.22045e-15 -2.22045e-15 1   N2 0.913812 -4.13289e-15 0.406138 
+   txt003 
+STRI 
+  V0 2.84074 0 2.45   V1 2.88121 0.0733025 2.45154   V2 2.86968 0.0833333 2.45781 
+  N0 0.913812 -4.13289e-15 0.406138   N1 0.507715 -0.682832 0.525324   N2 -0.0182321 -0.0210195 0.999613 
+   txt003 
+STRI 
+  V0 3.38704 0 2.47083   V1 3.34657 0.0733025 2.46929   V2 3.27461 0.0655864 2.44451 
+  N0 -0.253109 0 0.967438   N1 -0.223743 -0.242919 0.943891   N2 -0.316294 -0.364979 0.875641 
+   txt003 
+STRI 
+  V0 3.27461 0.0655864 2.44451   V1 3.30984 0 2.44557   V2 3.38704 0 2.47083 
+  N0 -0.316294 -0.364979 0.875641   N1 -0.349987 0 0.936755   N2 -0.253109 0 0.967438 
+   txt003 
+STRI 
+  V0 3.34657 0.0733025 2.46929   V1 3.2454 0.117284 2.46543   V2 3.18654 0.104938 2.44186 
+  N0 -0.223743 -0.242919 0.943891   N1 -0.144371 -0.459364 0.876437   N2 -0.199105 -0.721639 0.663019 
+   txt003 
+STRI 
+  V0 3.18654 0.104938 2.44186   V1 3.27461 0.0655864 2.44451   V2 3.34657 0.0733025 2.46929 
+  N0 -0.199105 -0.721639 0.663019   N1 -0.316294 -0.364979 0.875641   N2 -0.223743 -0.242919 0.943891 
+   txt003 
+STRI 
+  V0 3.2454 0.117284 2.46543   V1 3.11389 0.131944 2.46042   V2 3.07205 0.118056 2.43841 
+  N0 -0.144371 -0.459364 0.876437   N1 -0.0300305 -0.615625 0.787467   N2 -0.0103804 -0.938666 0.344672 
+   txt003 
+STRI 
+  V0 3.07205 0.118056 2.43841   V1 3.18654 0.104938 2.44186   V2 3.2454 0.117284 2.46543 
+  N0 -0.0103804 -0.938666 0.344672   N1 -0.199105 -0.721639 0.663019   N2 -0.144371 -0.459364 0.876437 
+   txt003 
+STRI 
+  V0 3.11389 0.131944 2.46042   V1 2.98237 0.117284 2.4554   V2 2.95756 0.104938 2.43496 
+  N0 -0.0300305 -0.615625 0.787467   N1 0.148477 -0.721529 0.676277   N2 0.241288 -0.970358 -0.0136399 
+   txt003 
+STRI 
+  V0 2.95756 0.104938 2.43496   V1 3.07205 0.118056 2.43841   V2 3.11389 0.131944 2.46042 
+  N0 0.241288 -0.970358 -0.0136399   N1 -0.0103804 -0.938666 0.344672   N2 -0.0300305 -0.615625 0.787467 
+   txt003 
+STRI 
+  V0 2.98237 0.117284 2.4554   V1 2.88121 0.0733025 2.45154   V2 2.86949 0.0655864 2.43231 
+  N0 0.148477 -0.721529 0.676277   N1 0.507715 -0.682832 0.525324   N2 0.577416 -0.711734 -0.400031 
+   txt003 
+STRI 
+  V0 2.86949 0.0655864 2.43231   V1 2.95756 0.104938 2.43496   V2 2.98237 0.117284 2.4554 
+  N0 0.577416 -0.711734 -0.400031   N1 0.241288 -0.970358 -0.0136399   N2 0.148477 -0.721529 0.676277 
+   txt003 
+STRI 
+  V0 2.88121 0.0733025 2.45154   V1 2.84074 0 2.45   V2 2.83426 0 2.43125 
+  N0 0.507715 -0.682832 0.525324   N1 0.913812 -4.13289e-15 0.406138   N2 0.789352 -1.30938e-15 -0.613941 
+   txt003 
+STRI 
+  V0 2.83426 0 2.43125   V1 2.86949 0.0655864 2.43231   V2 2.88121 0.0733025 2.45154 
+  N0 0.789352 -1.30938e-15 -0.613941   N1 0.577416 -0.711734 -0.400031   N2 0.507715 -0.682832 0.525324 
+   txt003 
+STRI 
+  V0 3.30984 0 2.44557   V1 3.27461 0.0655864 2.44451   V2 3.17037 0.0625 2.4 
+  N0 -0.349987 0 0.936755   N1 -0.316294 -0.364979 0.875641   N2 -0.378646 -0.420717 0.824393 
+   txt003 
+STRI 
+  V0 3.17037 0.0625 2.4   V1 3.2 0 2.4   V2 3.30984 0 2.44557 
+  N0 -0.378646 -0.420717 0.824393   N1 -0.410365 0 0.911922   N2 -0.349987 0 0.936755 
+   txt003 
+STRI 
+  V0 3.27461 0.0655864 2.44451   V1 3.18654 0.104938 2.44186   V2 3.0963 0.1 2.4 
+  N0 -0.316294 -0.364979 0.875641   N1 -0.199105 -0.721639 0.663019   N2 -0.236617 -0.841304 0.486024 
+   txt003 
+STRI 
+  V0 3.0963 0.1 2.4   V1 3.17037 0.0625 2.4   V2 3.27461 0.0655864 2.44451 
+  N0 -0.236617 -0.841304 0.486024   N1 -0.378646 -0.420717 0.824393   N2 -0.316294 -0.364979 0.875641 
+   txt003 
+STRI 
+  V0 3.18654 0.104938 2.44186   V1 3.07205 0.118056 2.43841   V2 3 0.1125 2.4 
+  N0 -0.199105 -0.721639 0.663019   N1 -0.0103804 -0.938666 0.344672   N2 0 -1 0 
+   txt003 
+STRI 
+  V0 3 0.1125 2.4   V1 3.0963 0.1 2.4   V2 3.18654 0.104938 2.44186 
+  N0 0 -1 0   N1 -0.236617 -0.841304 0.486024   N2 -0.199105 -0.721639 0.663019 
+   txt003 
+STRI 
+  V0 3.07205 0.118056 2.43841   V1 2.95756 0.104938 2.43496   V2 2.9037 0.1 2.4 
+  N0 -0.0103804 -0.938666 0.344672   N1 0.241288 -0.970358 -0.0136399   N2 0.247465 -0.879877 -0.405681 
+   txt003 
+STRI 
+  V0 2.9037 0.1 2.4   V1 3 0.1125 2.4   V2 3.07205 0.118056 2.43841 
+  N0 0.247465 -0.879877 -0.405681   N1 0 -1 0   N2 -0.0103804 -0.938666 0.344672 
+   txt003 
+STRI 
+  V0 2.95756 0.104938 2.43496   V1 2.86949 0.0655864 2.43231   V2 2.82963 0.0625 2.4 
+  N0 0.241288 -0.970358 -0.0136399   N1 0.577416 -0.711734 -0.400031   N2 0.483629 -0.537366 -0.690899 
+   txt003 
+STRI 
+  V0 2.82963 0.0625 2.4   V1 2.9037 0.1 2.4   V2 2.95756 0.104938 2.43496 
+  N0 0.483629 -0.537366 -0.690899   N1 0.247465 -0.879877 -0.405681   N2 0.241288 -0.970358 -0.0136399 
+   txt003 
+STRI 
+  V0 2.86949 0.0655864 2.43231   V1 2.83426 0 2.43125   V2 2.8 0 2.4 
+  N0 0.577416 -0.711734 -0.400031   N1 0.789352 -1.30938e-15 -0.613941   N2 0.6 -3.73979e-29 -0.8 
+   txt003 
+STRI 
+  V0 2.8 0 2.4   V1 2.82963 0.0625 2.4   V2 2.86949 0.0655864 2.43231 
+  N0 0.6 -3.73979e-29 -0.8   N1 0.483629 -0.537366 -0.690899   N2 0.577416 -0.711734 -0.400031 
+   txt003 
+STRI 
+  V0 0.268946 -0.0750782 3.12708   V1 0.278704 0 3.12708   V2 0 0 3.15 
+  N0 0.241077 -0.0645609 0.968356   N1 0.249998 0 0.968246   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0.241285 -0.141931 3.12708   V1 0.268946 -0.0750782 3.12708   V2 0 0 3.15 
+  N0 0.215548 -0.124615 0.968509   N1 0.241077 -0.0645609 0.968356   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0.19814 -0.19814 3.12708   V1 0.241285 -0.141931 3.12708   V2 0 0 3.15 
+  N0 0.175885 -0.175885 0.96857   N1 0.215548 -0.124615 0.968509   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0.141931 -0.241285 3.12708   V1 0.19814 -0.19814 3.12708   V2 0 0 3.15 
+  N0 0.124615 -0.215548 0.968509   N1 0.175885 -0.175885 0.96857   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0.0750782 -0.268946 3.12708   V1 0.141931 -0.241285 3.12708   V2 0 0 3.15 
+  N0 0.0645609 -0.241077 0.968356   N1 0.124615 -0.215548 0.968509   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0 -0.278704 3.12708   V1 0.0750782 -0.268946 3.12708   V2 0 0 3.15 
+  N0 -2.80184e-15 -0.249998 0.968246   N1 0.0645609 -0.241077 0.968356   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0.278704 0 3.12708   V1 0.268946 -0.0750782 3.12708   V2 0.350254 -0.0977709 3.06667 
+  N0 0.249998 0 0.968246   N1 0.241077 -0.0645609 0.968356   N2 0.955496 -0.255913 0.146755 
+   txt003 
+STRI 
+  V0 0.350254 -0.0977709 3.06667   V1 0.362963 0 3.06667   V2 0.278704 0 3.12708 
+  N0 0.955496 -0.255913 0.146755   N1 0.989203 0 0.146549   N2 0.249998 0 0.968246 
+   txt003 
+STRI 
+  V0 0.268946 -0.0750782 3.12708   V1 0.241285 -0.141931 3.12708   V2 0.314228 -0.184834 3.06667 
+  N0 0.241077 -0.0645609 0.968356   N1 0.215548 -0.124615 0.968509   N2 0.856312 -0.495088 0.147029 
+   txt003 
+STRI 
+  V0 0.314228 -0.184834 3.06667   V1 0.350254 -0.0977709 3.06667   V2 0.268946 -0.0750782 3.12708 
+  N0 0.856312 -0.495088 0.147029   N1 0.955496 -0.255913 0.146755   N2 0.241077 -0.0645609 0.968356 
+   txt003 
+STRI 
+  V0 0.241285 -0.141931 3.12708   V1 0.19814 -0.19814 3.12708   V2 0.258037 -0.258037 3.06667 
+  N0 0.215548 -0.124615 0.968509   N1 0.175885 -0.175885 0.96857   N2 0.699411 -0.699411 0.147135 
+   txt003 
+STRI 
+  V0 0.258037 -0.258037 3.06667   V1 0.314228 -0.184834 3.06667   V2 0.241285 -0.141931 3.12708 
+  N0 0.699411 -0.699411 0.147135   N1 0.856312 -0.495088 0.147029   N2 0.215548 -0.124615 0.968509 
+   txt003 
+STRI 
+  V0 0.19814 -0.19814 3.12708   V1 0.141931 -0.241285 3.12708   V2 0.184834 -0.314228 3.06667 
+  N0 0.175885 -0.175885 0.96857   N1 0.124615 -0.215548 0.968509   N2 0.495088 -0.856312 0.147029 
+   txt003 
+STRI 
+  V0 0.184834 -0.314228 3.06667   V1 0.258037 -0.258037 3.06667   V2 0.19814 -0.19814 3.12708 
+  N0 0.495088 -0.856312 0.147029   N1 0.699411 -0.699411 0.147135   N2 0.175885 -0.175885 0.96857 
+   txt003 
+STRI 
+  V0 0.141931 -0.241285 3.12708   V1 0.0750782 -0.268946 3.12708   V2 0.0977709 -0.350254 3.06667 
+  N0 0.124615 -0.215548 0.968509   N1 0.0645609 -0.241077 0.968356   N2 0.255913 -0.955496 0.146755 
+   txt003 
+STRI 
+  V0 0.0977709 -0.350254 3.06667   V1 0.184834 -0.314228 3.06667   V2 0.141931 -0.241285 3.12708 
+  N0 0.255913 -0.955496 0.146755   N1 0.495088 -0.856312 0.147029   N2 0.124615 -0.215548 0.968509 
+   txt003 
+STRI 
+  V0 0.0750782 -0.268946 3.12708   V1 0 -0.278704 3.12708   V2 0 -0.362963 3.06667 
+  N0 0.0645609 -0.241077 0.968356   N1 -2.80184e-15 -0.249998 0.968246   N2 -4.98112e-16 -0.989203 0.146549 
+   txt003 
+STRI 
+  V0 0 -0.362963 3.06667   V1 0.0977709 -0.350254 3.06667   V2 0.0750782 -0.268946 3.12708 
+  N0 -4.98112e-16 -0.989203 0.146549   N1 0.255913 -0.955496 0.146755   N2 0.0645609 -0.241077 0.968356 
+   txt003 
+STRI 
+  V0 0.362963 0 3.06667   V1 0.350254 -0.0977709 3.06667   V2 0.313617 -0.0875289 2.98125 
+  N0 0.989203 0 0.146549   N1 0.955496 -0.255913 0.146755   N2 0.753688 -0.201937 -0.625441 
+   txt003 
+STRI 
+  V0 0.313617 -0.0875289 2.98125   V1 0.325 0 2.98125   V2 0.362963 0 3.06667 
+  N0 0.753688 -0.201937 -0.625441   N1 0.780869 0 -0.624695   N2 0.989203 0 0.146549 
+   txt003 
+STRI 
+  V0 0.350254 -0.0977709 3.06667   V1 0.314228 -0.184834 3.06667   V2 0.281352 -0.165481 2.98125 
+  N0 0.955496 -0.255913 0.146755   N1 0.856312 -0.495088 0.147029   N2 0.674735 -0.390178 -0.626493 
+   txt003 
+STRI 
+  V0 0.281352 -0.165481 2.98125   V1 0.313617 -0.0875289 2.98125   V2 0.350254 -0.0977709 3.06667 
+  N0 0.674735 -0.390178 -0.626493   N1 0.753688 -0.201937 -0.625441   N2 0.955496 -0.255913 0.146755 
+   txt003 
+STRI 
+  V0 0.314228 -0.184834 3.06667   V1 0.258037 -0.258037 3.06667   V2 0.231031 -0.231031 2.98125 
+  N0 0.856312 -0.495088 0.147029   N1 0.699411 -0.699411 0.147135   N2 0.550896 -0.550896 -0.626919 
+   txt003 
+STRI 
+  V0 0.231031 -0.231031 2.98125   V1 0.281352 -0.165481 2.98125   V2 0.314228 -0.184834 3.06667 
+  N0 0.550896 -0.550896 -0.626919   N1 0.674735 -0.390178 -0.626493   N2 0.856312 -0.495088 0.147029 
+   txt003 
+STRI 
+  V0 0.258037 -0.258037 3.06667   V1 0.184834 -0.314228 3.06667   V2 0.165481 -0.281352 2.98125 
+  N0 0.699411 -0.699411 0.147135   N1 0.495088 -0.856312 0.147029   N2 0.390178 -0.674735 -0.626493 
+   txt003 
+STRI 
+  V0 0.165481 -0.281352 2.98125   V1 0.231031 -0.231031 2.98125   V2 0.258037 -0.258037 3.06667 
+  N0 0.390178 -0.674735 -0.626493   N1 0.550896 -0.550896 -0.626919   N2 0.699411 -0.699411 0.147135 
+   txt003 
+STRI 
+  V0 0.184834 -0.314228 3.06667   V1 0.0977709 -0.350254 3.06667   V2 0.0875289 -0.313617 2.98125 
+  N0 0.495088 -0.856312 0.147029   N1 0.255913 -0.955496 0.146755   N2 0.201937 -0.753688 -0.625441 
+   txt003 
+STRI 
+  V0 0.0875289 -0.313617 2.98125   V1 0.165481 -0.281352 2.98125   V2 0.184834 -0.314228 3.06667 
+  N0 0.201937 -0.753688 -0.625441   N1 0.390178 -0.674735 -0.626493   N2 0.495088 -0.856312 0.147029 
+   txt003 
+STRI 
+  V0 0.0977709 -0.350254 3.06667   V1 0 -0.362963 3.06667   V2 -1.11022e-16 -0.325 2.98125 
+  N0 0.255913 -0.955496 0.146755   N1 -4.98112e-16 -0.989203 0.146549   N2 1.51803e-15 -0.780869 -0.624695 
+   txt003 
+STRI 
+  V0 -1.11022e-16 -0.325 2.98125   V1 0.0875289 -0.313617 2.98125   V2 0.0977709 -0.350254 3.06667 
+  N0 1.51803e-15 -0.780869 -0.624695   N1 0.201937 -0.753688 -0.625441   N2 0.255913 -0.955496 0.146755 
+   txt003 
+STRI 
+  V0 0.325 0 2.98125   V1 0.313617 -0.0875289 2.98125   V2 0.228728 -0.0638032 2.88333 
+  N0 0.780869 0 -0.624695   N1 0.753688 -0.201937 -0.625441   N2 0.721244 -0.193465 -0.665116 
+   txt003 
+STRI 
+  V0 0.228728 -0.0638032 2.88333   V1 0.237037 0 2.88333   V2 0.325 0 2.98125 
+  N0 0.721244 -0.193465 -0.665116   N1 0.747409 0 -0.664364   N2 0.780869 0 -0.624695 
+   txt003 
+STRI 
+  V0 0.313617 -0.0875289 2.98125   V1 0.281352 -0.165481 2.98125   V2 0.20518 -0.120647 2.88333 
+  N0 0.753688 -0.201937 -0.625441   N1 0.674735 -0.390178 -0.626493   N2 0.645526 -0.373497 -0.66618 
+   txt003 
+STRI 
+  V0 0.20518 -0.120647 2.88333   V1 0.228728 -0.0638032 2.88333   V2 0.313617 -0.0875289 2.98125 
+  N0 0.645526 -0.373497 -0.66618   N1 0.721244 -0.193465 -0.665116   N2 0.753688 -0.201937 -0.625441 
+   txt003 
+STRI 
+  V0 0.281352 -0.165481 2.98125   V1 0.231031 -0.231031 2.98125   V2 0.168463 -0.168463 2.88333 
+  N0 0.674735 -0.390178 -0.626493   N1 0.550896 -0.550896 -0.626919   N2 0.527081 -0.527081 -0.666611 
+   txt003 
+STRI 
+  V0 0.168463 -0.168463 2.88333   V1 0.20518 -0.120647 2.88333   V2 0.281352 -0.165481 2.98125 
+  N0 0.527081 -0.527081 -0.666611   N1 0.645526 -0.373497 -0.66618   N2 0.674735 -0.390178 -0.626493 
+   txt003 
+STRI 
+  V0 0.231031 -0.231031 2.98125   V1 0.165481 -0.281352 2.98125   V2 0.120647 -0.20518 2.88333 
+  N0 0.550896 -0.550896 -0.626919   N1 0.390178 -0.674735 -0.626493   N2 0.373497 -0.645526 -0.66618 
+   txt003 
+STRI 
+  V0 0.120647 -0.20518 2.88333   V1 0.168463 -0.168463 2.88333   V2 0.231031 -0.231031 2.98125 
+  N0 0.373497 -0.645526 -0.66618   N1 0.527081 -0.527081 -0.666611   N2 0.550896 -0.550896 -0.626919 
+   txt003 
+STRI 
+  V0 0.165481 -0.281352 2.98125   V1 0.0875289 -0.313617 2.98125   V2 0.0638032 -0.228728 2.88333 
+  N0 0.390178 -0.674735 -0.626493   N1 0.201937 -0.753688 -0.625441   N2 0.193465 -0.721244 -0.665116 
+   txt003 
+STRI 
+  V0 0.0638032 -0.228728 2.88333   V1 0.120647 -0.20518 2.88333   V2 0.165481 -0.281352 2.98125 
+  N0 0.193465 -0.721244 -0.665116   N1 0.373497 -0.645526 -0.66618   N2 0.390178 -0.674735 -0.626493 
+   txt003 
+STRI 
+  V0 0.0875289 -0.313617 2.98125   V1 -1.11022e-16 -0.325 2.98125   V2 -1.11022e-16 -0.237037 2.88333 
+  N0 0.201937 -0.753688 -0.625441   N1 1.51803e-15 -0.780869 -0.624695   N2 2.42292e-15 -0.747409 -0.664364 
+   txt003 
+STRI 
+  V0 -1.11022e-16 -0.237037 2.88333   V1 0.0638032 -0.228728 2.88333   V2 0.0875289 -0.313617 2.98125 
+  N0 2.42292e-15 -0.747409 -0.664364   N1 0.193465 -0.721244 -0.665116   N2 0.201937 -0.753688 -0.625441 
+   txt003 
+STRI 
+  V0 0.237037 0 2.88333   V1 0.228728 -0.0638032 2.88333   V2 0.165279 -0.0460445 2.78542 
+  N0 0.747409 0 -0.664364   N1 0.721244 -0.193465 -0.665116   N2 0.917897 -0.246906 -0.310647 
+   txt003 
+STRI 
+  V0 0.165279 -0.0460445 2.78542   V1 0.171296 0 2.78542   V2 0.237037 0 2.88333 
+  N0 0.917897 -0.246906 -0.310647   N1 0.950775 0 -0.309882   N2 0.747409 0 -0.664364 
+   txt003 
+STRI 
+  V0 0.228728 -0.0638032 2.88333   V1 0.20518 -0.120647 2.88333   V2 0.148234 -0.0871056 2.78542 
+  N0 0.721244 -0.193465 -0.665116   N1 0.645526 -0.373497 -0.66618   N2 0.822132 -0.476337 -0.311772 
+   txt003 
+STRI 
+  V0 0.148234 -0.0871056 2.78542   V1 0.165279 -0.0460445 2.78542   V2 0.228728 -0.0638032 2.88333 
+  N0 0.822132 -0.476337 -0.311772   N1 0.917897 -0.246906 -0.310647   N2 0.721244 -0.193465 -0.665116 
+   txt003 
+STRI 
+  V0 0.20518 -0.120647 2.88333   V1 0.168463 -0.168463 2.88333   V2 0.121672 -0.121672 2.78542 
+  N0 0.645526 -0.373497 -0.66618   N1 0.527081 -0.527081 -0.666611   N2 0.671754 -0.671754 -0.312241 
+   txt003 
+STRI 
+  V0 0.121672 -0.121672 2.78542   V1 0.148234 -0.0871056 2.78542   V2 0.20518 -0.120647 2.88333 
+  N0 0.671754 -0.671754 -0.312241   N1 0.822132 -0.476337 -0.311772   N2 0.645526 -0.373497 -0.66618 
+   txt003 
+STRI 
+  V0 0.168463 -0.168463 2.88333   V1 0.120647 -0.20518 2.88333   V2 0.0871056 -0.148234 2.78542 
+  N0 0.527081 -0.527081 -0.666611   N1 0.373497 -0.645526 -0.66618   N2 0.476337 -0.822132 -0.311772 
+   txt003 
+STRI 
+  V0 0.0871056 -0.148234 2.78542   V1 0.121672 -0.121672 2.78542   V2 0.168463 -0.168463 2.88333 
+  N0 0.476337 -0.822132 -0.311772   N1 0.671754 -0.671754 -0.312241   N2 0.527081 -0.527081 -0.666611 
+   txt003 
+STRI 
+  V0 0.120647 -0.20518 2.88333   V1 0.0638032 -0.228728 2.88333   V2 0.0460445 -0.165279 2.78542 
+  N0 0.373497 -0.645526 -0.66618   N1 0.193465 -0.721244 -0.665116   N2 0.246906 -0.917897 -0.310647 
+   txt003 
+STRI 
+  V0 0.0460445 -0.165279 2.78542   V1 0.0871056 -0.148234 2.78542   V2 0.120647 -0.20518 2.88333 
+  N0 0.246906 -0.917897 -0.310647   N1 0.476337 -0.822132 -0.311772   N2 0.373497 -0.645526 -0.66618 
+   txt003 
+STRI 
+  V0 0.0638032 -0.228728 2.88333   V1 -1.11022e-16 -0.237037 2.88333   V2 -6.66134e-16 -0.171296 2.78542 
+  N0 0.193465 -0.721244 -0.665116   N1 2.42292e-15 -0.747409 -0.664364   N2 2.16507e-15 -0.950775 -0.309882 
+   txt003 
+STRI 
+  V0 -6.66134e-16 -0.171296 2.78542   V1 0.0460445 -0.165279 2.78542   V2 0.0638032 -0.228728 2.88333 
+  N0 2.16507e-15 -0.950775 -0.309882   N1 0.246906 -0.917897 -0.310647   N2 0.193465 -0.721244 -0.665116 
+   txt003 
+STRI 
+  V0 0.171296 0 2.78542   V1 0.165279 -0.0460445 2.78542   V2 0.192963 -0.0537037 2.7 
+  N0 0.950775 0 -0.309882   N1 0.917897 -0.246906 -0.310647   N2 0.578783 -0.15602 0.800417 
+   txt003 
+STRI 
+  V0 0.192963 -0.0537037 2.7   V1 0.2 0 2.7   V2 0.171296 0 2.78542 
+  N0 0.578783 -0.15602 0.800417   N1 0.6 0 0.8   N2 0.950775 0 -0.309882 
+   txt003 
+STRI 
+  V0 0.165279 -0.0460445 2.78542   V1 0.148234 -0.0871056 2.78542   V2 0.173037 -0.10163 2.7 
+  N0 0.917897 -0.246906 -0.310647   N1 0.822132 -0.476337 -0.311772   N2 0.517905 -0.300385 0.800964 
+   txt003 
+STRI 
+  V0 0.173037 -0.10163 2.7   V1 0.192963 -0.0537037 2.7   V2 0.165279 -0.0460445 2.78542 
+  N0 0.517905 -0.300385 0.800964   N1 0.578783 -0.15602 0.800417   N2 0.917897 -0.246906 -0.310647 
+   txt003 
+STRI 
+  V0 0.148234 -0.0871056 2.78542   V1 0.121672 -0.121672 2.78542   V2 0.142 -0.142 2.7 
+  N0 0.822132 -0.476337 -0.311772   N1 0.671754 -0.671754 -0.312241   N2 0.423155 -0.423155 0.801174 
+   txt003 
+STRI 
+  V0 0.142 -0.142 2.7   V1 0.173037 -0.10163 2.7   V2 0.148234 -0.0871056 2.78542 
+  N0 0.423155 -0.423155 0.801174   N1 0.517905 -0.300385 0.800964   N2 0.822132 -0.476337 -0.311772 
+   txt003 
+STRI 
+  V0 0.121672 -0.121672 2.78542   V1 0.0871056 -0.148234 2.78542   V2 0.10163 -0.173037 2.7 
+  N0 0.671754 -0.671754 -0.312241   N1 0.476337 -0.822132 -0.311772   N2 0.300385 -0.517905 0.800964 
+   txt003 
+STRI 
+  V0 0.10163 -0.173037 2.7   V1 0.142 -0.142 2.7   V2 0.121672 -0.121672 2.78542 
+  N0 0.300385 -0.517905 0.800964   N1 0.423155 -0.423155 0.801174   N2 0.671754 -0.671754 -0.312241 
+   txt003 
+STRI 
+  V0 0.0871056 -0.148234 2.78542   V1 0.0460445 -0.165279 2.78542   V2 0.0537037 -0.192963 2.7 
+  N0 0.476337 -0.822132 -0.311772   N1 0.246906 -0.917897 -0.310647   N2 0.15602 -0.578783 0.800417 
+   txt003 
+STRI 
+  V0 0.0537037 -0.192963 2.7   V1 0.10163 -0.173037 2.7   V2 0.0871056 -0.148234 2.78542 
+  N0 0.15602 -0.578783 0.800417   N1 0.300385 -0.517905 0.800964   N2 0.476337 -0.822132 -0.311772 
+   txt003 
+STRI 
+  V0 0.0460445 -0.165279 2.78542   V1 -6.66134e-16 -0.171296 2.78542   V2 0 -0.2 2.7 
+  N0 0.246906 -0.917897 -0.310647   N1 2.16507e-15 -0.950775 -0.309882   N2 -3.17207e-15 -0.6 0.8 
+   txt003 
+STRI 
+  V0 0 -0.2 2.7   V1 0.0537037 -0.192963 2.7   V2 0.0460445 -0.165279 2.78542 
+  N0 -3.17207e-15 -0.6 0.8   N1 0.15602 -0.578783 0.800417   N2 0.246906 -0.917897 -0.310647 
+   txt003 
+STRI 
+  V0 -0.0750782 -0.268946 3.12708   V1 0 -0.278704 3.12708   V2 0 0 3.15 
+  N0 -0.0645609 -0.241077 0.968356   N1 0 -0.249998 0.968246   N2 0 0 1 
+   txt003 
+STRI 
+  V0 -0.141931 -0.241285 3.12708   V1 -0.0750782 -0.268946 3.12708   V2 0 0 3.15 
+  N0 -0.124615 -0.215548 0.968509   N1 -0.0645609 -0.241077 0.968356   N2 0 0 1 
+   txt003 
+STRI 
+  V0 -0.19814 -0.19814 3.12708   V1 -0.141931 -0.241285 3.12708   V2 0 0 3.15 
+  N0 -0.175885 -0.175885 0.96857   N1 -0.124615 -0.215548 0.968509   N2 0 0 1 
+   txt003 
+STRI 
+  V0 -0.241285 -0.141931 3.12708   V1 -0.19814 -0.19814 3.12708   V2 0 0 3.15 
+  N0 -0.215548 -0.124615 0.968509   N1 -0.175885 -0.175885 0.96857   N2 0 0 1 
+   txt003 
+STRI 
+  V0 -0.268946 -0.0750782 3.12708   V1 -0.241285 -0.141931 3.12708   V2 0 0 3.15 
+  N0 -0.241077 -0.0645609 0.968356   N1 -0.215548 -0.124615 0.968509   N2 0 0 1 
+   txt003 
+STRI 
+  V0 -0.278704 0 3.12708   V1 -0.268946 -0.0750782 3.12708   V2 0 0 3.15 
+  N0 -0.249998 2.80184e-15 0.968246   N1 -0.241077 -0.0645609 0.968356   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0 -0.278704 3.12708   V1 -0.0750782 -0.268946 3.12708   V2 -0.0977709 -0.350254 3.06667 
+  N0 0 -0.249998 0.968246   N1 -0.0645609 -0.241077 0.968356   N2 -0.255913 -0.955496 0.146755 
+   txt003 
+STRI 
+  V0 -0.0977709 -0.350254 3.06667   V1 0 -0.362963 3.06667   V2 0 -0.278704 3.12708 
+  N0 -0.255913 -0.955496 0.146755   N1 0 -0.989203 0.146549   N2 0 -0.249998 0.968246 
+   txt003 
+STRI 
+  V0 -0.0750782 -0.268946 3.12708   V1 -0.141931 -0.241285 3.12708   V2 -0.184834 -0.314228 3.06667 
+  N0 -0.0645609 -0.241077 0.968356   N1 -0.124615 -0.215548 0.968509   N2 -0.495088 -0.856312 0.147029 
+   txt003 
+STRI 
+  V0 -0.184834 -0.314228 3.06667   V1 -0.0977709 -0.350254 3.06667   V2 -0.0750782 -0.268946 3.12708 
+  N0 -0.495088 -0.856312 0.147029   N1 -0.255913 -0.955496 0.146755   N2 -0.0645609 -0.241077 0.968356 
+   txt003 
+STRI 
+  V0 -0.141931 -0.241285 3.12708   V1 -0.19814 -0.19814 3.12708   V2 -0.258037 -0.258037 3.06667 
+  N0 -0.124615 -0.215548 0.968509   N1 -0.175885 -0.175885 0.96857   N2 -0.699411 -0.699411 0.147135 
+   txt003 
+STRI 
+  V0 -0.258037 -0.258037 3.06667   V1 -0.184834 -0.314228 3.06667   V2 -0.141931 -0.241285 3.12708 
+  N0 -0.699411 -0.699411 0.147135   N1 -0.495088 -0.856312 0.147029   N2 -0.124615 -0.215548 0.968509 
+   txt003 
+STRI 
+  V0 -0.19814 -0.19814 3.12708   V1 -0.241285 -0.141931 3.12708   V2 -0.314228 -0.184834 3.06667 
+  N0 -0.175885 -0.175885 0.96857   N1 -0.215548 -0.124615 0.968509   N2 -0.856312 -0.495088 0.147029 
+   txt003 
+STRI 
+  V0 -0.314228 -0.184834 3.06667   V1 -0.258037 -0.258037 3.06667   V2 -0.19814 -0.19814 3.12708 
+  N0 -0.856312 -0.495088 0.147029   N1 -0.699411 -0.699411 0.147135   N2 -0.175885 -0.175885 0.96857 
+   txt003 
+STRI 
+  V0 -0.241285 -0.141931 3.12708   V1 -0.268946 -0.0750782 3.12708   V2 -0.350254 -0.0977709 3.06667 
+  N0 -0.215548 -0.124615 0.968509   N1 -0.241077 -0.0645609 0.968356   N2 -0.955496 -0.255913 0.146755 
+   txt003 
+STRI 
+  V0 -0.350254 -0.0977709 3.06667   V1 -0.314228 -0.184834 3.06667   V2 -0.241285 -0.141931 3.12708 
+  N0 -0.955496 -0.255913 0.146755   N1 -0.856312 -0.495088 0.147029   N2 -0.215548 -0.124615 0.968509 
+   txt003 
+STRI 
+  V0 -0.268946 -0.0750782 3.12708   V1 -0.278704 0 3.12708   V2 -0.362963 0 3.06667 
+  N0 -0.241077 -0.0645609 0.968356   N1 -0.249998 2.80184e-15 0.968246   N2 -0.989203 4.98112e-16 0.146549 
+   txt003 
+STRI 
+  V0 -0.362963 0 3.06667   V1 -0.350254 -0.0977709 3.06667   V2 -0.268946 -0.0750782 3.12708 
+  N0 -0.989203 4.98112e-16 0.146549   N1 -0.955496 -0.255913 0.146755   N2 -0.241077 -0.0645609 0.968356 
+   txt003 
+STRI 
+  V0 0 -0.362963 3.06667   V1 -0.0977709 -0.350254 3.06667   V2 -0.0875289 -0.313617 2.98125 
+  N0 0 -0.989203 0.146549   N1 -0.255913 -0.955496 0.146755   N2 -0.201937 -0.753688 -0.625441 
+   txt003 
+STRI 
+  V0 -0.0875289 -0.313617 2.98125   V1 0 -0.325 2.98125   V2 0 -0.362963 3.06667 
+  N0 -0.201937 -0.753688 -0.625441   N1 -0 -0.780869 -0.624695   N2 0 -0.989203 0.146549 
+   txt003 
+STRI 
+  V0 -0.0977709 -0.350254 3.06667   V1 -0.184834 -0.314228 3.06667   V2 -0.165481 -0.281352 2.98125 
+  N0 -0.255913 -0.955496 0.146755   N1 -0.495088 -0.856312 0.147029   N2 -0.390178 -0.674735 -0.626493 
+   txt003 
+STRI 
+  V0 -0.165481 -0.281352 2.98125   V1 -0.0875289 -0.313617 2.98125   V2 -0.0977709 -0.350254 3.06667 
+  N0 -0.390178 -0.674735 -0.626493   N1 -0.201937 -0.753688 -0.625441   N2 -0.255913 -0.955496 0.146755 
+   txt003 
+STRI 
+  V0 -0.184834 -0.314228 3.06667   V1 -0.258037 -0.258037 3.06667   V2 -0.231031 -0.231031 2.98125 
+  N0 -0.495088 -0.856312 0.147029   N1 -0.699411 -0.699411 0.147135   N2 -0.550896 -0.550896 -0.626919 
+   txt003 
+STRI 
+  V0 -0.231031 -0.231031 2.98125   V1 -0.165481 -0.281352 2.98125   V2 -0.184834 -0.314228 3.06667 
+  N0 -0.550896 -0.550896 -0.626919   N1 -0.390178 -0.674735 -0.626493   N2 -0.495088 -0.856312 0.147029 
+   txt003 
+STRI 
+  V0 -0.258037 -0.258037 3.06667   V1 -0.314228 -0.184834 3.06667   V2 -0.281352 -0.165481 2.98125 
+  N0 -0.699411 -0.699411 0.147135   N1 -0.856312 -0.495088 0.147029   N2 -0.674735 -0.390178 -0.626493 
+   txt003 
+STRI 
+  V0 -0.281352 -0.165481 2.98125   V1 -0.231031 -0.231031 2.98125   V2 -0.258037 -0.258037 3.06667 
+  N0 -0.674735 -0.390178 -0.626493   N1 -0.550896 -0.550896 -0.626919   N2 -0.699411 -0.699411 0.147135 
+   txt003 
+STRI 
+  V0 -0.314228 -0.184834 3.06667   V1 -0.350254 -0.0977709 3.06667   V2 -0.313617 -0.0875289 2.98125 
+  N0 -0.856312 -0.495088 0.147029   N1 -0.955496 -0.255913 0.146755   N2 -0.753688 -0.201937 -0.625441 
+   txt003 
+STRI 
+  V0 -0.313617 -0.0875289 2.98125   V1 -0.281352 -0.165481 2.98125   V2 -0.314228 -0.184834 3.06667 
+  N0 -0.753688 -0.201937 -0.625441   N1 -0.674735 -0.390178 -0.626493   N2 -0.856312 -0.495088 0.147029 
+   txt003 
+STRI 
+  V0 -0.350254 -0.0977709 3.06667   V1 -0.362963 0 3.06667   V2 -0.325 1.11022e-16 2.98125 
+  N0 -0.955496 -0.255913 0.146755   N1 -0.989203 4.98112e-16 0.146549   N2 -0.780869 -1.51803e-15 -0.624695 
+   txt003 
+STRI 
+  V0 -0.325 1.11022e-16 2.98125   V1 -0.313617 -0.0875289 2.98125   V2 -0.350254 -0.0977709 3.06667 
+  N0 -0.780869 -1.51803e-15 -0.624695   N1 -0.753688 -0.201937 -0.625441   N2 -0.955496 -0.255913 0.146755 
+   txt003 
+STRI 
+  V0 0 -0.325 2.98125   V1 -0.0875289 -0.313617 2.98125   V2 -0.0638032 -0.228728 2.88333 
+  N0 -0 -0.780869 -0.624695   N1 -0.201937 -0.753688 -0.625441   N2 -0.193465 -0.721244 -0.665116 
+   txt003 
+STRI 
+  V0 -0.0638032 -0.228728 2.88333   V1 0 -0.237037 2.88333   V2 0 -0.325 2.98125 
+  N0 -0.193465 -0.721244 -0.665116   N1 -0 -0.747409 -0.664364   N2 -0 -0.780869 -0.624695 
+   txt003 
+STRI 
+  V0 -0.0875289 -0.313617 2.98125   V1 -0.165481 -0.281352 2.98125   V2 -0.120647 -0.20518 2.88333 
+  N0 -0.201937 -0.753688 -0.625441   N1 -0.390178 -0.674735 -0.626493   N2 -0.373497 -0.645526 -0.66618 
+   txt003 
+STRI 
+  V0 -0.120647 -0.20518 2.88333   V1 -0.0638032 -0.228728 2.88333   V2 -0.0875289 -0.313617 2.98125 
+  N0 -0.373497 -0.645526 -0.66618   N1 -0.193465 -0.721244 -0.665116   N2 -0.201937 -0.753688 -0.625441 
+   txt003 
+STRI 
+  V0 -0.165481 -0.281352 2.98125   V1 -0.231031 -0.231031 2.98125   V2 -0.168463 -0.168463 2.88333 
+  N0 -0.390178 -0.674735 -0.626493   N1 -0.550896 -0.550896 -0.626919   N2 -0.527081 -0.527081 -0.666611 
+   txt003 
+STRI 
+  V0 -0.168463 -0.168463 2.88333   V1 -0.120647 -0.20518 2.88333   V2 -0.165481 -0.281352 2.98125 
+  N0 -0.527081 -0.527081 -0.666611   N1 -0.373497 -0.645526 -0.66618   N2 -0.390178 -0.674735 -0.626493 
+   txt003 
+STRI 
+  V0 -0.231031 -0.231031 2.98125   V1 -0.281352 -0.165481 2.98125   V2 -0.20518 -0.120647 2.88333 
+  N0 -0.550896 -0.550896 -0.626919   N1 -0.674735 -0.390178 -0.626493   N2 -0.645526 -0.373497 -0.66618 
+   txt003 
+STRI 
+  V0 -0.20518 -0.120647 2.88333   V1 -0.168463 -0.168463 2.88333   V2 -0.231031 -0.231031 2.98125 
+  N0 -0.645526 -0.373497 -0.66618   N1 -0.527081 -0.527081 -0.666611   N2 -0.550896 -0.550896 -0.626919 
+   txt003 
+STRI 
+  V0 -0.281352 -0.165481 2.98125   V1 -0.313617 -0.0875289 2.98125   V2 -0.228728 -0.0638032 2.88333 
+  N0 -0.674735 -0.390178 -0.626493   N1 -0.753688 -0.201937 -0.625441   N2 -0.721244 -0.193465 -0.665116 
+   txt003 
+STRI 
+  V0 -0.228728 -0.0638032 2.88333   V1 -0.20518 -0.120647 2.88333   V2 -0.281352 -0.165481 2.98125 
+  N0 -0.721244 -0.193465 -0.665116   N1 -0.645526 -0.373497 -0.66618   N2 -0.674735 -0.390178 -0.626493 
+   txt003 
+STRI 
+  V0 -0.313617 -0.0875289 2.98125   V1 -0.325 1.11022e-16 2.98125   V2 -0.237037 1.11022e-16 2.88333 
+  N0 -0.753688 -0.201937 -0.625441   N1 -0.780869 -1.51803e-15 -0.624695   N2 -0.747409 -2.42292e-15 -0.664364 
+   txt003 
+STRI 
+  V0 -0.237037 1.11022e-16 2.88333   V1 -0.228728 -0.0638032 2.88333   V2 -0.313617 -0.0875289 2.98125 
+  N0 -0.747409 -2.42292e-15 -0.664364   N1 -0.721244 -0.193465 -0.665116   N2 -0.753688 -0.201937 -0.625441 
+   txt003 
+STRI 
+  V0 0 -0.237037 2.88333   V1 -0.0638032 -0.228728 2.88333   V2 -0.0460445 -0.165279 2.78542 
+  N0 -0 -0.747409 -0.664364   N1 -0.193465 -0.721244 -0.665116   N2 -0.246906 -0.917897 -0.310647 
+   txt003 
+STRI 
+  V0 -0.0460445 -0.165279 2.78542   V1 0 -0.171296 2.78542   V2 0 -0.237037 2.88333 
+  N0 -0.246906 -0.917897 -0.310647   N1 -0 -0.950775 -0.309882   N2 -0 -0.747409 -0.664364 
+   txt003 
+STRI 
+  V0 -0.0638032 -0.228728 2.88333   V1 -0.120647 -0.20518 2.88333   V2 -0.0871056 -0.148234 2.78542 
+  N0 -0.193465 -0.721244 -0.665116   N1 -0.373497 -0.645526 -0.66618   N2 -0.476337 -0.822132 -0.311772 
+   txt003 
+STRI 
+  V0 -0.0871056 -0.148234 2.78542   V1 -0.0460445 -0.165279 2.78542   V2 -0.0638032 -0.228728 2.88333 
+  N0 -0.476337 -0.822132 -0.311772   N1 -0.246906 -0.917897 -0.310647   N2 -0.193465 -0.721244 -0.665116 
+   txt003 
+STRI 
+  V0 -0.120647 -0.20518 2.88333   V1 -0.168463 -0.168463 2.88333   V2 -0.121672 -0.121672 2.78542 
+  N0 -0.373497 -0.645526 -0.66618   N1 -0.527081 -0.527081 -0.666611   N2 -0.671754 -0.671754 -0.312241 
+   txt003 
+STRI 
+  V0 -0.121672 -0.121672 2.78542   V1 -0.0871056 -0.148234 2.78542   V2 -0.120647 -0.20518 2.88333 
+  N0 -0.671754 -0.671754 -0.312241   N1 -0.476337 -0.822132 -0.311772   N2 -0.373497 -0.645526 -0.66618 
+   txt003 
+STRI 
+  V0 -0.168463 -0.168463 2.88333   V1 -0.20518 -0.120647 2.88333   V2 -0.148234 -0.0871056 2.78542 
+  N0 -0.527081 -0.527081 -0.666611   N1 -0.645526 -0.373497 -0.66618   N2 -0.822132 -0.476337 -0.311772 
+   txt003 
+STRI 
+  V0 -0.148234 -0.0871056 2.78542   V1 -0.121672 -0.121672 2.78542   V2 -0.168463 -0.168463 2.88333 
+  N0 -0.822132 -0.476337 -0.311772   N1 -0.671754 -0.671754 -0.312241   N2 -0.527081 -0.527081 -0.666611 
+   txt003 
+STRI 
+  V0 -0.20518 -0.120647 2.88333   V1 -0.228728 -0.0638032 2.88333   V2 -0.165279 -0.0460445 2.78542 
+  N0 -0.645526 -0.373497 -0.66618   N1 -0.721244 -0.193465 -0.665116   N2 -0.917897 -0.246906 -0.310647 
+   txt003 
+STRI 
+  V0 -0.165279 -0.0460445 2.78542   V1 -0.148234 -0.0871056 2.78542   V2 -0.20518 -0.120647 2.88333 
+  N0 -0.917897 -0.246906 -0.310647   N1 -0.822132 -0.476337 -0.311772   N2 -0.645526 -0.373497 -0.66618 
+   txt003 
+STRI 
+  V0 -0.228728 -0.0638032 2.88333   V1 -0.237037 1.11022e-16 2.88333   V2 -0.171296 6.66134e-16 2.78542 
+  N0 -0.721244 -0.193465 -0.665116   N1 -0.747409 -2.42292e-15 -0.664364   N2 -0.950775 -2.16507e-15 -0.309882 
+   txt003 
+STRI 
+  V0 -0.171296 6.66134e-16 2.78542   V1 -0.165279 -0.0460445 2.78542   V2 -0.228728 -0.0638032 2.88333 
+  N0 -0.950775 -2.16507e-15 -0.309882   N1 -0.917897 -0.246906 -0.310647   N2 -0.721244 -0.193465 -0.665116 
+   txt003 
+STRI 
+  V0 0 -0.171296 2.78542   V1 -0.0460445 -0.165279 2.78542   V2 -0.0537037 -0.192963 2.7 
+  N0 -0 -0.950775 -0.309882   N1 -0.246906 -0.917897 -0.310647   N2 -0.15602 -0.578783 0.800417 
+   txt003 
+STRI 
+  V0 -0.0537037 -0.192963 2.7   V1 0 -0.2 2.7   V2 0 -0.171296 2.78542 
+  N0 -0.15602 -0.578783 0.800417   N1 0 -0.6 0.8   N2 -0 -0.950775 -0.309882 
+   txt003 
+STRI 
+  V0 -0.0460445 -0.165279 2.78542   V1 -0.0871056 -0.148234 2.78542   V2 -0.10163 -0.173037 2.7 
+  N0 -0.246906 -0.917897 -0.310647   N1 -0.476337 -0.822132 -0.311772   N2 -0.300385 -0.517905 0.800964 
+   txt003 
+STRI 
+  V0 -0.10163 -0.173037 2.7   V1 -0.0537037 -0.192963 2.7   V2 -0.0460445 -0.165279 2.78542 
+  N0 -0.300385 -0.517905 0.800964   N1 -0.15602 -0.578783 0.800417   N2 -0.246906 -0.917897 -0.310647 
+   txt003 
+STRI 
+  V0 -0.0871056 -0.148234 2.78542   V1 -0.121672 -0.121672 2.78542   V2 -0.142 -0.142 2.7 
+  N0 -0.476337 -0.822132 -0.311772   N1 -0.671754 -0.671754 -0.312241   N2 -0.423155 -0.423155 0.801174 
+   txt003 
+STRI 
+  V0 -0.142 -0.142 2.7   V1 -0.10163 -0.173037 2.7   V2 -0.0871056 -0.148234 2.78542 
+  N0 -0.423155 -0.423155 0.801174   N1 -0.300385 -0.517905 0.800964   N2 -0.476337 -0.822132 -0.311772 
+   txt003 
+STRI 
+  V0 -0.121672 -0.121672 2.78542   V1 -0.148234 -0.0871056 2.78542   V2 -0.173037 -0.10163 2.7 
+  N0 -0.671754 -0.671754 -0.312241   N1 -0.822132 -0.476337 -0.311772   N2 -0.517905 -0.300385 0.800964 
+   txt003 
+STRI 
+  V0 -0.173037 -0.10163 2.7   V1 -0.142 -0.142 2.7   V2 -0.121672 -0.121672 2.78542 
+  N0 -0.517905 -0.300385 0.800964   N1 -0.423155 -0.423155 0.801174   N2 -0.671754 -0.671754 -0.312241 
+   txt003 
+STRI 
+  V0 -0.148234 -0.0871056 2.78542   V1 -0.165279 -0.0460445 2.78542   V2 -0.192963 -0.0537037 2.7 
+  N0 -0.822132 -0.476337 -0.311772   N1 -0.917897 -0.246906 -0.310647   N2 -0.578783 -0.15602 0.800417 
+   txt003 
+STRI 
+  V0 -0.192963 -0.0537037 2.7   V1 -0.173037 -0.10163 2.7   V2 -0.148234 -0.0871056 2.78542 
+  N0 -0.578783 -0.15602 0.800417   N1 -0.517905 -0.300385 0.800964   N2 -0.822132 -0.476337 -0.311772 
+   txt003 
+STRI 
+  V0 -0.165279 -0.0460445 2.78542   V1 -0.171296 6.66134e-16 2.78542   V2 -0.2 0 2.7 
+  N0 -0.917897 -0.246906 -0.310647   N1 -0.950775 -2.16507e-15 -0.309882   N2 -0.6 3.17207e-15 0.8 
+   txt003 
+STRI 
+  V0 -0.2 0 2.7   V1 -0.192963 -0.0537037 2.7   V2 -0.165279 -0.0460445 2.78542 
+  N0 -0.6 3.17207e-15 0.8   N1 -0.578783 -0.15602 0.800417   N2 -0.917897 -0.246906 -0.310647 
+   txt003 
+STRI 
+  V0 -0.268946 0.0750782 3.12708   V1 -0.278704 0 3.12708   V2 0 0 3.15 
+  N0 -0.241077 0.0645609 0.968356   N1 -0.249998 0 0.968246   N2 0 0 1 
+   txt003 
+STRI 
+  V0 -0.241285 0.141931 3.12708   V1 -0.268946 0.0750782 3.12708   V2 0 0 3.15 
+  N0 -0.215548 0.124615 0.968509   N1 -0.241077 0.0645609 0.968356   N2 0 0 1 
+   txt003 
+STRI 
+  V0 -0.19814 0.19814 3.12708   V1 -0.241285 0.141931 3.12708   V2 0 0 3.15 
+  N0 -0.175885 0.175885 0.96857   N1 -0.215548 0.124615 0.968509   N2 0 0 1 
+   txt003 
+STRI 
+  V0 -0.141931 0.241285 3.12708   V1 -0.19814 0.19814 3.12708   V2 0 0 3.15 
+  N0 -0.124615 0.215548 0.968509   N1 -0.175885 0.175885 0.96857   N2 0 0 1 
+   txt003 
+STRI 
+  V0 -0.0750782 0.268946 3.12708   V1 -0.141931 0.241285 3.12708   V2 0 0 3.15 
+  N0 -0.0645609 0.241077 0.968356   N1 -0.124615 0.215548 0.968509   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0 0.278704 3.12708   V1 -0.0750782 0.268946 3.12708   V2 0 0 3.15 
+  N0 2.80184e-15 0.249998 0.968246   N1 -0.0645609 0.241077 0.968356   N2 0 0 1 
+   txt003 
+STRI 
+  V0 -0.278704 0 3.12708   V1 -0.268946 0.0750782 3.12708   V2 -0.350254 0.0977709 3.06667 
+  N0 -0.249998 0 0.968246   N1 -0.241077 0.0645609 0.968356   N2 -0.955496 0.255913 0.146755 
+   txt003 
+STRI 
+  V0 -0.350254 0.0977709 3.06667   V1 -0.362963 0 3.06667   V2 -0.278704 0 3.12708 
+  N0 -0.955496 0.255913 0.146755   N1 -0.989203 0 0.146549   N2 -0.249998 0 0.968246 
+   txt003 
+STRI 
+  V0 -0.268946 0.0750782 3.12708   V1 -0.241285 0.141931 3.12708   V2 -0.314228 0.184834 3.06667 
+  N0 -0.241077 0.0645609 0.968356   N1 -0.215548 0.124615 0.968509   N2 -0.856312 0.495088 0.147029 
+   txt003 
+STRI 
+  V0 -0.314228 0.184834 3.06667   V1 -0.350254 0.0977709 3.06667   V2 -0.268946 0.0750782 3.12708 
+  N0 -0.856312 0.495088 0.147029   N1 -0.955496 0.255913 0.146755   N2 -0.241077 0.0645609 0.968356 
+   txt003 
+STRI 
+  V0 -0.241285 0.141931 3.12708   V1 -0.19814 0.19814 3.12708   V2 -0.258037 0.258037 3.06667 
+  N0 -0.215548 0.124615 0.968509   N1 -0.175885 0.175885 0.96857   N2 -0.699411 0.699411 0.147135 
+   txt003 
+STRI 
+  V0 -0.258037 0.258037 3.06667   V1 -0.314228 0.184834 3.06667   V2 -0.241285 0.141931 3.12708 
+  N0 -0.699411 0.699411 0.147135   N1 -0.856312 0.495088 0.147029   N2 -0.215548 0.124615 0.968509 
+   txt003 
+STRI 
+  V0 -0.19814 0.19814 3.12708   V1 -0.141931 0.241285 3.12708   V2 -0.184834 0.314228 3.06667 
+  N0 -0.175885 0.175885 0.96857   N1 -0.124615 0.215548 0.968509   N2 -0.495088 0.856312 0.147029 
+   txt003 
+STRI 
+  V0 -0.184834 0.314228 3.06667   V1 -0.258037 0.258037 3.06667   V2 -0.19814 0.19814 3.12708 
+  N0 -0.495088 0.856312 0.147029   N1 -0.699411 0.699411 0.147135   N2 -0.175885 0.175885 0.96857 
+   txt003 
+STRI 
+  V0 -0.141931 0.241285 3.12708   V1 -0.0750782 0.268946 3.12708   V2 -0.0977709 0.350254 3.06667 
+  N0 -0.124615 0.215548 0.968509   N1 -0.0645609 0.241077 0.968356   N2 -0.255913 0.955496 0.146755 
+   txt003 
+STRI 
+  V0 -0.0977709 0.350254 3.06667   V1 -0.184834 0.314228 3.06667   V2 -0.141931 0.241285 3.12708 
+  N0 -0.255913 0.955496 0.146755   N1 -0.495088 0.856312 0.147029   N2 -0.124615 0.215548 0.968509 
+   txt003 
+STRI 
+  V0 -0.0750782 0.268946 3.12708   V1 0 0.278704 3.12708   V2 0 0.362963 3.06667 
+  N0 -0.0645609 0.241077 0.968356   N1 2.80184e-15 0.249998 0.968246   N2 4.98112e-16 0.989203 0.146549 
+   txt003 
+STRI 
+  V0 0 0.362963 3.06667   V1 -0.0977709 0.350254 3.06667   V2 -0.0750782 0.268946 3.12708 
+  N0 4.98112e-16 0.989203 0.146549   N1 -0.255913 0.955496 0.146755   N2 -0.0645609 0.241077 0.968356 
+   txt003 
+STRI 
+  V0 -0.362963 0 3.06667   V1 -0.350254 0.0977709 3.06667   V2 -0.313617 0.0875289 2.98125 
+  N0 -0.989203 0 0.146549   N1 -0.955496 0.255913 0.146755   N2 -0.753688 0.201937 -0.625441 
+   txt003 
+STRI 
+  V0 -0.313617 0.0875289 2.98125   V1 -0.325 0 2.98125   V2 -0.362963 0 3.06667 
+  N0 -0.753688 0.201937 -0.625441   N1 -0.780869 0 -0.624695   N2 -0.989203 0 0.146549 
+   txt003 
+STRI 
+  V0 -0.350254 0.0977709 3.06667   V1 -0.314228 0.184834 3.06667   V2 -0.281352 0.165481 2.98125 
+  N0 -0.955496 0.255913 0.146755   N1 -0.856312 0.495088 0.147029   N2 -0.674735 0.390178 -0.626493 
+   txt003 
+STRI 
+  V0 -0.281352 0.165481 2.98125   V1 -0.313617 0.0875289 2.98125   V2 -0.350254 0.0977709 3.06667 
+  N0 -0.674735 0.390178 -0.626493   N1 -0.753688 0.201937 -0.625441   N2 -0.955496 0.255913 0.146755 
+   txt003 
+STRI 
+  V0 -0.314228 0.184834 3.06667   V1 -0.258037 0.258037 3.06667   V2 -0.231031 0.231031 2.98125 
+  N0 -0.856312 0.495088 0.147029   N1 -0.699411 0.699411 0.147135   N2 -0.550896 0.550896 -0.626919 
+   txt003 
+STRI 
+  V0 -0.231031 0.231031 2.98125   V1 -0.281352 0.165481 2.98125   V2 -0.314228 0.184834 3.06667 
+  N0 -0.550896 0.550896 -0.626919   N1 -0.674735 0.390178 -0.626493   N2 -0.856312 0.495088 0.147029 
+   txt003 
+STRI 
+  V0 -0.258037 0.258037 3.06667   V1 -0.184834 0.314228 3.06667   V2 -0.165481 0.281352 2.98125 
+  N0 -0.699411 0.699411 0.147135   N1 -0.495088 0.856312 0.147029   N2 -0.390178 0.674735 -0.626493 
+   txt003 
+STRI 
+  V0 -0.165481 0.281352 2.98125   V1 -0.231031 0.231031 2.98125   V2 -0.258037 0.258037 3.06667 
+  N0 -0.390178 0.674735 -0.626493   N1 -0.550896 0.550896 -0.626919   N2 -0.699411 0.699411 0.147135 
+   txt003 
+STRI 
+  V0 -0.184834 0.314228 3.06667   V1 -0.0977709 0.350254 3.06667   V2 -0.0875289 0.313617 2.98125 
+  N0 -0.495088 0.856312 0.147029   N1 -0.255913 0.955496 0.146755   N2 -0.201937 0.753688 -0.625441 
+   txt003 
+STRI 
+  V0 -0.0875289 0.313617 2.98125   V1 -0.165481 0.281352 2.98125   V2 -0.184834 0.314228 3.06667 
+  N0 -0.201937 0.753688 -0.625441   N1 -0.390178 0.674735 -0.626493   N2 -0.495088 0.856312 0.147029 
+   txt003 
+STRI 
+  V0 -0.0977709 0.350254 3.06667   V1 0 0.362963 3.06667   V2 1.11022e-16 0.325 2.98125 
+  N0 -0.255913 0.955496 0.146755   N1 4.98112e-16 0.989203 0.146549   N2 -1.51803e-15 0.780869 -0.624695 
+   txt003 
+STRI 
+  V0 1.11022e-16 0.325 2.98125   V1 -0.0875289 0.313617 2.98125   V2 -0.0977709 0.350254 3.06667 
+  N0 -1.51803e-15 0.780869 -0.624695   N1 -0.201937 0.753688 -0.625441   N2 -0.255913 0.955496 0.146755 
+   txt003 
+STRI 
+  V0 -0.325 0 2.98125   V1 -0.313617 0.0875289 2.98125   V2 -0.228728 0.0638032 2.88333 
+  N0 -0.780869 0 -0.624695   N1 -0.753688 0.201937 -0.625441   N2 -0.721244 0.193465 -0.665116 
+   txt003 
+STRI 
+  V0 -0.228728 0.0638032 2.88333   V1 -0.237037 0 2.88333   V2 -0.325 0 2.98125 
+  N0 -0.721244 0.193465 -0.665116   N1 -0.747409 0 -0.664364   N2 -0.780869 0 -0.624695 
+   txt003 
+STRI 
+  V0 -0.313617 0.0875289 2.98125   V1 -0.281352 0.165481 2.98125   V2 -0.20518 0.120647 2.88333 
+  N0 -0.753688 0.201937 -0.625441   N1 -0.674735 0.390178 -0.626493   N2 -0.645526 0.373497 -0.66618 
+   txt003 
+STRI 
+  V0 -0.20518 0.120647 2.88333   V1 -0.228728 0.0638032 2.88333   V2 -0.313617 0.0875289 2.98125 
+  N0 -0.645526 0.373497 -0.66618   N1 -0.721244 0.193465 -0.665116   N2 -0.753688 0.201937 -0.625441 
+   txt003 
+STRI 
+  V0 -0.281352 0.165481 2.98125   V1 -0.231031 0.231031 2.98125   V2 -0.168463 0.168463 2.88333 
+  N0 -0.674735 0.390178 -0.626493   N1 -0.550896 0.550896 -0.626919   N2 -0.527081 0.527081 -0.666611 
+   txt003 
+STRI 
+  V0 -0.168463 0.168463 2.88333   V1 -0.20518 0.120647 2.88333   V2 -0.281352 0.165481 2.98125 
+  N0 -0.527081 0.527081 -0.666611   N1 -0.645526 0.373497 -0.66618   N2 -0.674735 0.390178 -0.626493 
+   txt003 
+STRI 
+  V0 -0.231031 0.231031 2.98125   V1 -0.165481 0.281352 2.98125   V2 -0.120647 0.20518 2.88333 
+  N0 -0.550896 0.550896 -0.626919   N1 -0.390178 0.674735 -0.626493   N2 -0.373497 0.645526 -0.66618 
+   txt003 
+STRI 
+  V0 -0.120647 0.20518 2.88333   V1 -0.168463 0.168463 2.88333   V2 -0.231031 0.231031 2.98125 
+  N0 -0.373497 0.645526 -0.66618   N1 -0.527081 0.527081 -0.666611   N2 -0.550896 0.550896 -0.626919 
+   txt003 
+STRI 
+  V0 -0.165481 0.281352 2.98125   V1 -0.0875289 0.313617 2.98125   V2 -0.0638032 0.228728 2.88333 
+  N0 -0.390178 0.674735 -0.626493   N1 -0.201937 0.753688 -0.625441   N2 -0.193465 0.721244 -0.665116 
+   txt003 
+STRI 
+  V0 -0.0638032 0.228728 2.88333   V1 -0.120647 0.20518 2.88333   V2 -0.165481 0.281352 2.98125 
+  N0 -0.193465 0.721244 -0.665116   N1 -0.373497 0.645526 -0.66618   N2 -0.390178 0.674735 -0.626493 
+   txt003 
+STRI 
+  V0 -0.0875289 0.313617 2.98125   V1 1.11022e-16 0.325 2.98125   V2 1.11022e-16 0.237037 2.88333 
+  N0 -0.201937 0.753688 -0.625441   N1 -1.51803e-15 0.780869 -0.624695   N2 -2.42292e-15 0.747409 -0.664364 
+   txt003 
+STRI 
+  V0 1.11022e-16 0.237037 2.88333   V1 -0.0638032 0.228728 2.88333   V2 -0.0875289 0.313617 2.98125 
+  N0 -2.42292e-15 0.747409 -0.664364   N1 -0.193465 0.721244 -0.665116   N2 -0.201937 0.753688 -0.625441 
+   txt003 
+STRI 
+  V0 -0.237037 0 2.88333   V1 -0.228728 0.0638032 2.88333   V2 -0.165279 0.0460445 2.78542 
+  N0 -0.747409 0 -0.664364   N1 -0.721244 0.193465 -0.665116   N2 -0.917897 0.246906 -0.310647 
+   txt003 
+STRI 
+  V0 -0.165279 0.0460445 2.78542   V1 -0.171296 0 2.78542   V2 -0.237037 0 2.88333 
+  N0 -0.917897 0.246906 -0.310647   N1 -0.950775 0 -0.309882   N2 -0.747409 0 -0.664364 
+   txt003 
+STRI 
+  V0 -0.228728 0.0638032 2.88333   V1 -0.20518 0.120647 2.88333   V2 -0.148234 0.0871056 2.78542 
+  N0 -0.721244 0.193465 -0.665116   N1 -0.645526 0.373497 -0.66618   N2 -0.822132 0.476337 -0.311772 
+   txt003 
+STRI 
+  V0 -0.148234 0.0871056 2.78542   V1 -0.165279 0.0460445 2.78542   V2 -0.228728 0.0638032 2.88333 
+  N0 -0.822132 0.476337 -0.311772   N1 -0.917897 0.246906 -0.310647   N2 -0.721244 0.193465 -0.665116 
+   txt003 
+STRI 
+  V0 -0.20518 0.120647 2.88333   V1 -0.168463 0.168463 2.88333   V2 -0.121672 0.121672 2.78542 
+  N0 -0.645526 0.373497 -0.66618   N1 -0.527081 0.527081 -0.666611   N2 -0.671754 0.671754 -0.312241 
+   txt003 
+STRI 
+  V0 -0.121672 0.121672 2.78542   V1 -0.148234 0.0871056 2.78542   V2 -0.20518 0.120647 2.88333 
+  N0 -0.671754 0.671754 -0.312241   N1 -0.822132 0.476337 -0.311772   N2 -0.645526 0.373497 -0.66618 
+   txt003 
+STRI 
+  V0 -0.168463 0.168463 2.88333   V1 -0.120647 0.20518 2.88333   V2 -0.0871056 0.148234 2.78542 
+  N0 -0.527081 0.527081 -0.666611   N1 -0.373497 0.645526 -0.66618   N2 -0.476337 0.822132 -0.311772 
+   txt003 
+STRI 
+  V0 -0.0871056 0.148234 2.78542   V1 -0.121672 0.121672 2.78542   V2 -0.168463 0.168463 2.88333 
+  N0 -0.476337 0.822132 -0.311772   N1 -0.671754 0.671754 -0.312241   N2 -0.527081 0.527081 -0.666611 
+   txt003 
+STRI 
+  V0 -0.120647 0.20518 2.88333   V1 -0.0638032 0.228728 2.88333   V2 -0.0460445 0.165279 2.78542 
+  N0 -0.373497 0.645526 -0.66618   N1 -0.193465 0.721244 -0.665116   N2 -0.246906 0.917897 -0.310647 
+   txt003 
+STRI 
+  V0 -0.0460445 0.165279 2.78542   V1 -0.0871056 0.148234 2.78542   V2 -0.120647 0.20518 2.88333 
+  N0 -0.246906 0.917897 -0.310647   N1 -0.476337 0.822132 -0.311772   N2 -0.373497 0.645526 -0.66618 
+   txt003 
+STRI 
+  V0 -0.0638032 0.228728 2.88333   V1 1.11022e-16 0.237037 2.88333   V2 6.66134e-16 0.171296 2.78542 
+  N0 -0.193465 0.721244 -0.665116   N1 -2.42292e-15 0.747409 -0.664364   N2 -2.16507e-15 0.950775 -0.309882 
+   txt003 
+STRI 
+  V0 6.66134e-16 0.171296 2.78542   V1 -0.0460445 0.165279 2.78542   V2 -0.0638032 0.228728 2.88333 
+  N0 -2.16507e-15 0.950775 -0.309882   N1 -0.246906 0.917897 -0.310647   N2 -0.193465 0.721244 -0.665116 
+   txt003 
+STRI 
+  V0 -0.171296 0 2.78542   V1 -0.165279 0.0460445 2.78542   V2 -0.192963 0.0537037 2.7 
+  N0 -0.950775 0 -0.309882   N1 -0.917897 0.246906 -0.310647   N2 -0.578783 0.15602 0.800417 
+   txt003 
+STRI 
+  V0 -0.192963 0.0537037 2.7   V1 -0.2 0 2.7   V2 -0.171296 0 2.78542 
+  N0 -0.578783 0.15602 0.800417   N1 -0.6 0 0.8   N2 -0.950775 0 -0.309882 
+   txt003 
+STRI 
+  V0 -0.165279 0.0460445 2.78542   V1 -0.148234 0.0871056 2.78542   V2 -0.173037 0.10163 2.7 
+  N0 -0.917897 0.246906 -0.310647   N1 -0.822132 0.476337 -0.311772   N2 -0.517905 0.300385 0.800964 
+   txt003 
+STRI 
+  V0 -0.173037 0.10163 2.7   V1 -0.192963 0.0537037 2.7   V2 -0.165279 0.0460445 2.78542 
+  N0 -0.517905 0.300385 0.800964   N1 -0.578783 0.15602 0.800417   N2 -0.917897 0.246906 -0.310647 
+   txt003 
+STRI 
+  V0 -0.148234 0.0871056 2.78542   V1 -0.121672 0.121672 2.78542   V2 -0.142 0.142 2.7 
+  N0 -0.822132 0.476337 -0.311772   N1 -0.671754 0.671754 -0.312241   N2 -0.423155 0.423155 0.801174 
+   txt003 
+STRI 
+  V0 -0.142 0.142 2.7   V1 -0.173037 0.10163 2.7   V2 -0.148234 0.0871056 2.78542 
+  N0 -0.423155 0.423155 0.801174   N1 -0.517905 0.300385 0.800964   N2 -0.822132 0.476337 -0.311772 
+   txt003 
+STRI 
+  V0 -0.121672 0.121672 2.78542   V1 -0.0871056 0.148234 2.78542   V2 -0.10163 0.173037 2.7 
+  N0 -0.671754 0.671754 -0.312241   N1 -0.476337 0.822132 -0.311772   N2 -0.300385 0.517905 0.800964 
+   txt003 
+STRI 
+  V0 -0.10163 0.173037 2.7   V1 -0.142 0.142 2.7   V2 -0.121672 0.121672 2.78542 
+  N0 -0.300385 0.517905 0.800964   N1 -0.423155 0.423155 0.801174   N2 -0.671754 0.671754 -0.312241 
+   txt003 
+STRI 
+  V0 -0.0871056 0.148234 2.78542   V1 -0.0460445 0.165279 2.78542   V2 -0.0537037 0.192963 2.7 
+  N0 -0.476337 0.822132 -0.311772   N1 -0.246906 0.917897 -0.310647   N2 -0.15602 0.578783 0.800417 
+   txt003 
+STRI 
+  V0 -0.0537037 0.192963 2.7   V1 -0.10163 0.173037 2.7   V2 -0.0871056 0.148234 2.78542 
+  N0 -0.15602 0.578783 0.800417   N1 -0.300385 0.517905 0.800964   N2 -0.476337 0.822132 -0.311772 
+   txt003 
+STRI 
+  V0 -0.0460445 0.165279 2.78542   V1 6.66134e-16 0.171296 2.78542   V2 0 0.2 2.7 
+  N0 -0.246906 0.917897 -0.310647   N1 -2.16507e-15 0.950775 -0.309882   N2 3.17207e-15 0.6 0.8 
+   txt003 
+STRI 
+  V0 0 0.2 2.7   V1 -0.0537037 0.192963 2.7   V2 -0.0460445 0.165279 2.78542 
+  N0 3.17207e-15 0.6 0.8   N1 -0.15602 0.578783 0.800417   N2 -0.246906 0.917897 -0.310647 
+   txt003 
+STRI 
+  V0 0.0750782 0.268946 3.12708   V1 0 0.278704 3.12708   V2 0 0 3.15 
+  N0 0.0645609 0.241077 0.968356   N1 -0 0.249998 0.968246   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0.141931 0.241285 3.12708   V1 0.0750782 0.268946 3.12708   V2 0 0 3.15 
+  N0 0.124615 0.215548 0.968509   N1 0.0645609 0.241077 0.968356   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0.19814 0.19814 3.12708   V1 0.141931 0.241285 3.12708   V2 0 0 3.15 
+  N0 0.175885 0.175885 0.96857   N1 0.124615 0.215548 0.968509   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0.241285 0.141931 3.12708   V1 0.19814 0.19814 3.12708   V2 0 0 3.15 
+  N0 0.215548 0.124615 0.968509   N1 0.175885 0.175885 0.96857   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0.268946 0.0750782 3.12708   V1 0.241285 0.141931 3.12708   V2 0 0 3.15 
+  N0 0.241077 0.0645609 0.968356   N1 0.215548 0.124615 0.968509   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0.278704 0 3.12708   V1 0.268946 0.0750782 3.12708   V2 0 0 3.15 
+  N0 0.249998 -2.80184e-15 0.968246   N1 0.241077 0.0645609 0.968356   N2 0 0 1 
+   txt003 
+STRI 
+  V0 0 0.278704 3.12708   V1 0.0750782 0.268946 3.12708   V2 0.0977709 0.350254 3.06667 
+  N0 -0 0.249998 0.968246   N1 0.0645609 0.241077 0.968356   N2 0.255913 0.955496 0.146755 
+   txt003 
+STRI 
+  V0 0.0977709 0.350254 3.06667   V1 0 0.362963 3.06667   V2 0 0.278704 3.12708 
+  N0 0.255913 0.955496 0.146755   N1 -0 0.989203 0.146549   N2 -0 0.249998 0.968246 
+   txt003 
+STRI 
+  V0 0.0750782 0.268946 3.12708   V1 0.141931 0.241285 3.12708   V2 0.184834 0.314228 3.06667 
+  N0 0.0645609 0.241077 0.968356   N1 0.124615 0.215548 0.968509   N2 0.495088 0.856312 0.147029 
+   txt003 
+STRI 
+  V0 0.184834 0.314228 3.06667   V1 0.0977709 0.350254 3.06667   V2 0.0750782 0.268946 3.12708 
+  N0 0.495088 0.856312 0.147029   N1 0.255913 0.955496 0.146755   N2 0.0645609 0.241077 0.968356 
+   txt003 
+STRI 
+  V0 0.141931 0.241285 3.12708   V1 0.19814 0.19814 3.12708   V2 0.258037 0.258037 3.06667 
+  N0 0.124615 0.215548 0.968509   N1 0.175885 0.175885 0.96857   N2 0.699411 0.699411 0.147135 
+   txt003 
+STRI 
+  V0 0.258037 0.258037 3.06667   V1 0.184834 0.314228 3.06667   V2 0.141931 0.241285 3.12708 
+  N0 0.699411 0.699411 0.147135   N1 0.495088 0.856312 0.147029   N2 0.124615 0.215548 0.968509 
+   txt003 
+STRI 
+  V0 0.19814 0.19814 3.12708   V1 0.241285 0.141931 3.12708   V2 0.314228 0.184834 3.06667 
+  N0 0.175885 0.175885 0.96857   N1 0.215548 0.124615 0.968509   N2 0.856312 0.495088 0.147029 
+   txt003 
+STRI 
+  V0 0.314228 0.184834 3.06667   V1 0.258037 0.258037 3.06667   V2 0.19814 0.19814 3.12708 
+  N0 0.856312 0.495088 0.147029   N1 0.699411 0.699411 0.147135   N2 0.175885 0.175885 0.96857 
+   txt003 
+STRI 
+  V0 0.241285 0.141931 3.12708   V1 0.268946 0.0750782 3.12708   V2 0.350254 0.0977709 3.06667 
+  N0 0.215548 0.124615 0.968509   N1 0.241077 0.0645609 0.968356   N2 0.955496 0.255913 0.146755 
+   txt003 
+STRI 
+  V0 0.350254 0.0977709 3.06667   V1 0.314228 0.184834 3.06667   V2 0.241285 0.141931 3.12708 
+  N0 0.955496 0.255913 0.146755   N1 0.856312 0.495088 0.147029   N2 0.215548 0.124615 0.968509 
+   txt003 
+STRI 
+  V0 0.268946 0.0750782 3.12708   V1 0.278704 0 3.12708   V2 0.362963 0 3.06667 
+  N0 0.241077 0.0645609 0.968356   N1 0.249998 -2.80184e-15 0.968246   N2 0.989203 -4.98112e-16 0.146549 
+   txt003 
+STRI 
+  V0 0.362963 0 3.06667   V1 0.350254 0.0977709 3.06667   V2 0.268946 0.0750782 3.12708 
+  N0 0.989203 -4.98112e-16 0.146549   N1 0.955496 0.255913 0.146755   N2 0.241077 0.0645609 0.968356 
+   txt003 
+STRI 
+  V0 0 0.362963 3.06667   V1 0.0977709 0.350254 3.06667   V2 0.0875289 0.313617 2.98125 
+  N0 -0 0.989203 0.146549   N1 0.255913 0.955496 0.146755   N2 0.201937 0.753688 -0.625441 
+   txt003 
+STRI 
+  V0 0.0875289 0.313617 2.98125   V1 0 0.325 2.98125   V2 0 0.362963 3.06667 
+  N0 0.201937 0.753688 -0.625441   N1 0 0.780869 -0.624695   N2 -0 0.989203 0.146549 
+   txt003 
+STRI 
+  V0 0.0977709 0.350254 3.06667   V1 0.184834 0.314228 3.06667   V2 0.165481 0.281352 2.98125 
+  N0 0.255913 0.955496 0.146755   N1 0.495088 0.856312 0.147029   N2 0.390178 0.674735 -0.626493 
+   txt003 
+STRI 
+  V0 0.165481 0.281352 2.98125   V1 0.0875289 0.313617 2.98125   V2 0.0977709 0.350254 3.06667 
+  N0 0.390178 0.674735 -0.626493   N1 0.201937 0.753688 -0.625441   N2 0.255913 0.955496 0.146755 
+   txt003 
+STRI 
+  V0 0.184834 0.314228 3.06667   V1 0.258037 0.258037 3.06667   V2 0.231031 0.231031 2.98125 
+  N0 0.495088 0.856312 0.147029   N1 0.699411 0.699411 0.147135   N2 0.550896 0.550896 -0.626919 
+   txt003 
+STRI 
+  V0 0.231031 0.231031 2.98125   V1 0.165481 0.281352 2.98125   V2 0.184834 0.314228 3.06667 
+  N0 0.550896 0.550896 -0.626919   N1 0.390178 0.674735 -0.626493   N2 0.495088 0.856312 0.147029 
+   txt003 
+STRI 
+  V0 0.258037 0.258037 3.06667   V1 0.314228 0.184834 3.06667   V2 0.281352 0.165481 2.98125 
+  N0 0.699411 0.699411 0.147135   N1 0.856312 0.495088 0.147029   N2 0.674735 0.390178 -0.626493 
+   txt003 
+STRI 
+  V0 0.281352 0.165481 2.98125   V1 0.231031 0.231031 2.98125   V2 0.258037 0.258037 3.06667 
+  N0 0.674735 0.390178 -0.626493   N1 0.550896 0.550896 -0.626919   N2 0.699411 0.699411 0.147135 
+   txt003 
+STRI 
+  V0 0.314228 0.184834 3.06667   V1 0.350254 0.0977709 3.06667   V2 0.313617 0.0875289 2.98125 
+  N0 0.856312 0.495088 0.147029   N1 0.955496 0.255913 0.146755   N2 0.753688 0.201937 -0.625441 
+   txt003 
+STRI 
+  V0 0.313617 0.0875289 2.98125   V1 0.281352 0.165481 2.98125   V2 0.314228 0.184834 3.06667 
+  N0 0.753688 0.201937 -0.625441   N1 0.674735 0.390178 -0.626493   N2 0.856312 0.495088 0.147029 
+   txt003 
+STRI 
+  V0 0.350254 0.0977709 3.06667   V1 0.362963 0 3.06667   V2 0.325 -1.11022e-16 2.98125 
+  N0 0.955496 0.255913 0.146755   N1 0.989203 -4.98112e-16 0.146549   N2 0.780869 1.51803e-15 -0.624695 
+   txt003 
+STRI 
+  V0 0.325 -1.11022e-16 2.98125   V1 0.313617 0.0875289 2.98125   V2 0.350254 0.0977709 3.06667 
+  N0 0.780869 1.51803e-15 -0.624695   N1 0.753688 0.201937 -0.625441   N2 0.955496 0.255913 0.146755 
+   txt003 
+STRI 
+  V0 0 0.325 2.98125   V1 0.0875289 0.313617 2.98125   V2 0.0638032 0.228728 2.88333 
+  N0 0 0.780869 -0.624695   N1 0.201937 0.753688 -0.625441   N2 0.193465 0.721244 -0.665116 
+   txt003 
+STRI 
+  V0 0.0638032 0.228728 2.88333   V1 0 0.237037 2.88333   V2 0 0.325 2.98125 
+  N0 0.193465 0.721244 -0.665116   N1 0 0.747409 -0.664364   N2 0 0.780869 -0.624695 
+   txt003 
+STRI 
+  V0 0.0875289 0.313617 2.98125   V1 0.165481 0.281352 2.98125   V2 0.120647 0.20518 2.88333 
+  N0 0.201937 0.753688 -0.625441   N1 0.390178 0.674735 -0.626493   N2 0.373497 0.645526 -0.66618 
+   txt003 
+STRI 
+  V0 0.120647 0.20518 2.88333   V1 0.0638032 0.228728 2.88333   V2 0.0875289 0.313617 2.98125 
+  N0 0.373497 0.645526 -0.66618   N1 0.193465 0.721244 -0.665116   N2 0.201937 0.753688 -0.625441 
+   txt003 
+STRI 
+  V0 0.165481 0.281352 2.98125   V1 0.231031 0.231031 2.98125   V2 0.168463 0.168463 2.88333 
+  N0 0.390178 0.674735 -0.626493   N1 0.550896 0.550896 -0.626919   N2 0.527081 0.527081 -0.666611 
+   txt003 
+STRI 
+  V0 0.168463 0.168463 2.88333   V1 0.120647 0.20518 2.88333   V2 0.165481 0.281352 2.98125 
+  N0 0.527081 0.527081 -0.666611   N1 0.373497 0.645526 -0.66618   N2 0.390178 0.674735 -0.626493 
+   txt003 
+STRI 
+  V0 0.231031 0.231031 2.98125   V1 0.281352 0.165481 2.98125   V2 0.20518 0.120647 2.88333 
+  N0 0.550896 0.550896 -0.626919   N1 0.674735 0.390178 -0.626493   N2 0.645526 0.373497 -0.66618 
+   txt003 
+STRI 
+  V0 0.20518 0.120647 2.88333   V1 0.168463 0.168463 2.88333   V2 0.231031 0.231031 2.98125 
+  N0 0.645526 0.373497 -0.66618   N1 0.527081 0.527081 -0.666611   N2 0.550896 0.550896 -0.626919 
+   txt003 
+STRI 
+  V0 0.281352 0.165481 2.98125   V1 0.313617 0.0875289 2.98125   V2 0.228728 0.0638032 2.88333 
+  N0 0.674735 0.390178 -0.626493   N1 0.753688 0.201937 -0.625441   N2 0.721244 0.193465 -0.665116 
+   txt003 
+STRI 
+  V0 0.228728 0.0638032 2.88333   V1 0.20518 0.120647 2.88333   V2 0.281352 0.165481 2.98125 
+  N0 0.721244 0.193465 -0.665116   N1 0.645526 0.373497 -0.66618   N2 0.674735 0.390178 -0.626493 
+   txt003 
+STRI 
+  V0 0.313617 0.0875289 2.98125   V1 0.325 -1.11022e-16 2.98125   V2 0.237037 -1.11022e-16 2.88333 
+  N0 0.753688 0.201937 -0.625441   N1 0.780869 1.51803e-15 -0.624695   N2 0.747409 2.42292e-15 -0.664364 
+   txt003 
+STRI 
+  V0 0.237037 -1.11022e-16 2.88333   V1 0.228728 0.0638032 2.88333   V2 0.313617 0.0875289 2.98125 
+  N0 0.747409 2.42292e-15 -0.664364   N1 0.721244 0.193465 -0.665116   N2 0.753688 0.201937 -0.625441 
+   txt003 
+STRI 
+  V0 0 0.237037 2.88333   V1 0.0638032 0.228728 2.88333   V2 0.0460445 0.165279 2.78542 
+  N0 0 0.747409 -0.664364   N1 0.193465 0.721244 -0.665116   N2 0.246906 0.917897 -0.310647 
+   txt003 
+STRI 
+  V0 0.0460445 0.165279 2.78542   V1 0 0.171296 2.78542   V2 0 0.237037 2.88333 
+  N0 0.246906 0.917897 -0.310647   N1 0 0.950775 -0.309882   N2 0 0.747409 -0.664364 
+   txt003 
+STRI 
+  V0 0.0638032 0.228728 2.88333   V1 0.120647 0.20518 2.88333   V2 0.0871056 0.148234 2.78542 
+  N0 0.193465 0.721244 -0.665116   N1 0.373497 0.645526 -0.66618   N2 0.476337 0.822132 -0.311772 
+   txt003 
+STRI 
+  V0 0.0871056 0.148234 2.78542   V1 0.0460445 0.165279 2.78542   V2 0.0638032 0.228728 2.88333 
+  N0 0.476337 0.822132 -0.311772   N1 0.246906 0.917897 -0.310647   N2 0.193465 0.721244 -0.665116 
+   txt003 
+STRI 
+  V0 0.120647 0.20518 2.88333   V1 0.168463 0.168463 2.88333   V2 0.121672 0.121672 2.78542 
+  N0 0.373497 0.645526 -0.66618   N1 0.527081 0.527081 -0.666611   N2 0.671754 0.671754 -0.312241 
+   txt003 
+STRI 
+  V0 0.121672 0.121672 2.78542   V1 0.0871056 0.148234 2.78542   V2 0.120647 0.20518 2.88333 
+  N0 0.671754 0.671754 -0.312241   N1 0.476337 0.822132 -0.311772   N2 0.373497 0.645526 -0.66618 
+   txt003 
+STRI 
+  V0 0.168463 0.168463 2.88333   V1 0.20518 0.120647 2.88333   V2 0.148234 0.0871056 2.78542 
+  N0 0.527081 0.527081 -0.666611   N1 0.645526 0.373497 -0.66618   N2 0.822132 0.476337 -0.311772 
+   txt003 
+STRI 
+  V0 0.148234 0.0871056 2.78542   V1 0.121672 0.121672 2.78542   V2 0.168463 0.168463 2.88333 
+  N0 0.822132 0.476337 -0.311772   N1 0.671754 0.671754 -0.312241   N2 0.527081 0.527081 -0.666611 
+   txt003 
+STRI 
+  V0 0.20518 0.120647 2.88333   V1 0.228728 0.0638032 2.88333   V2 0.165279 0.0460445 2.78542 
+  N0 0.645526 0.373497 -0.66618   N1 0.721244 0.193465 -0.665116   N2 0.917897 0.246906 -0.310647 
+   txt003 
+STRI 
+  V0 0.165279 0.0460445 2.78542   V1 0.148234 0.0871056 2.78542   V2 0.20518 0.120647 2.88333 
+  N0 0.917897 0.246906 -0.310647   N1 0.822132 0.476337 -0.311772   N2 0.645526 0.373497 -0.66618 
+   txt003 
+STRI 
+  V0 0.228728 0.0638032 2.88333   V1 0.237037 -1.11022e-16 2.88333   V2 0.171296 -6.66134e-16 2.78542 
+  N0 0.721244 0.193465 -0.665116   N1 0.747409 2.42292e-15 -0.664364   N2 0.950775 2.16507e-15 -0.309882 
+   txt003 
+STRI 
+  V0 0.171296 -6.66134e-16 2.78542   V1 0.165279 0.0460445 2.78542   V2 0.228728 0.0638032 2.88333 
+  N0 0.950775 2.16507e-15 -0.309882   N1 0.917897 0.246906 -0.310647   N2 0.721244 0.193465 -0.665116 
+   txt003 
+STRI 
+  V0 0 0.171296 2.78542   V1 0.0460445 0.165279 2.78542   V2 0.0537037 0.192963 2.7 
+  N0 0 0.950775 -0.309882   N1 0.246906 0.917897 -0.310647   N2 0.15602 0.578783 0.800417 
+   txt003 
+STRI 
+  V0 0.0537037 0.192963 2.7   V1 0 0.2 2.7   V2 0 0.171296 2.78542 
+  N0 0.15602 0.578783 0.800417   N1 -0 0.6 0.8   N2 0 0.950775 -0.309882 
+   txt003 
+STRI 
+  V0 0.0460445 0.165279 2.78542   V1 0.0871056 0.148234 2.78542   V2 0.10163 0.173037 2.7 
+  N0 0.246906 0.917897 -0.310647   N1 0.476337 0.822132 -0.311772   N2 0.300385 0.517905 0.800964 
+   txt003 
+STRI 
+  V0 0.10163 0.173037 2.7   V1 0.0537037 0.192963 2.7   V2 0.0460445 0.165279 2.78542 
+  N0 0.300385 0.517905 0.800964   N1 0.15602 0.578783 0.800417   N2 0.246906 0.917897 -0.310647 
+   txt003 
+STRI 
+  V0 0.0871056 0.148234 2.78542   V1 0.121672 0.121672 2.78542   V2 0.142 0.142 2.7 
+  N0 0.476337 0.822132 -0.311772   N1 0.671754 0.671754 -0.312241   N2 0.423155 0.423155 0.801174 
+   txt003 
+STRI 
+  V0 0.142 0.142 2.7   V1 0.10163 0.173037 2.7   V2 0.0871056 0.148234 2.78542 
+  N0 0.423155 0.423155 0.801174   N1 0.300385 0.517905 0.800964   N2 0.476337 0.822132 -0.311772 
+   txt003 
+STRI 
+  V0 0.121672 0.121672 2.78542   V1 0.148234 0.0871056 2.78542   V2 0.173037 0.10163 2.7 
+  N0 0.671754 0.671754 -0.312241   N1 0.822132 0.476337 -0.311772   N2 0.517905 0.300385 0.800964 
+   txt003 
+STRI 
+  V0 0.173037 0.10163 2.7   V1 0.142 0.142 2.7   V2 0.121672 0.121672 2.78542 
+  N0 0.517905 0.300385 0.800964   N1 0.423155 0.423155 0.801174   N2 0.671754 0.671754 -0.312241 
+   txt003 
+STRI 
+  V0 0.148234 0.0871056 2.78542   V1 0.165279 0.0460445 2.78542   V2 0.192963 0.0537037 2.7 
+  N0 0.822132 0.476337 -0.311772   N1 0.917897 0.246906 -0.310647   N2 0.578783 0.15602 0.800417 
+   txt003 
+STRI 
+  V0 0.192963 0.0537037 2.7   V1 0.173037 0.10163 2.7   V2 0.148234 0.0871056 2.78542 
+  N0 0.578783 0.15602 0.800417   N1 0.517905 0.300385 0.800964   N2 0.822132 0.476337 -0.311772 
+   txt003 
+STRI 
+  V0 0.165279 0.0460445 2.78542   V1 0.171296 -6.66134e-16 2.78542   V2 0.2 0 2.7 
+  N0 0.917897 0.246906 -0.310647   N1 0.950775 2.16507e-15 -0.309882   N2 0.6 -3.17207e-15 0.8 
+   txt003 
+STRI 
+  V0 0.2 0 2.7   V1 0.192963 0.0537037 2.7   V2 0.165279 0.0460445 2.78542 
+  N0 0.6 -3.17207e-15 0.8   N1 0.578783 0.15602 0.800417   N2 0.917897 0.246906 -0.310647 
+   txt003 
+STRI 
+  V0 0.2 0 2.7   V1 0.192963 -0.0537037 2.7   V2 0.338579 -0.0942301 2.63611 
+  N0 0.6 0 0.8   N1 0.578783 -0.15602 0.800417   N2 0.258756 -0.0697517 0.963421 
+   txt003 
+STRI 
+  V0 0.338579 -0.0942301 2.63611   V1 0.350926 0 2.63611   V2 0.2 0 2.7 
+  N0 0.258756 -0.0697517 0.963421   N1 0.268354 0 0.96332   N2 0.6 0 0.8 
+   txt003 
+STRI 
+  V0 0.192963 -0.0537037 2.7   V1 0.173037 -0.10163 2.7   V2 0.303616 -0.178322 2.63611 
+  N0 0.578783 -0.15602 0.800417   N1 0.517905 -0.300385 0.800964   N2 0.231413 -0.134219 0.963552 
+   txt003 
+STRI 
+  V0 0.303616 -0.178322 2.63611   V1 0.338579 -0.0942301 2.63611   V2 0.192963 -0.0537037 2.7 
+  N0 0.231413 -0.134219 0.963552   N1 0.258756 -0.0697517 0.963421   N2 0.578783 -0.15602 0.800417 
+   txt003 
+STRI 
+  V0 0.173037 -0.10163 2.7   V1 0.142 -0.142 2.7   V2 0.249157 -0.249157 2.63611 
+  N0 0.517905 -0.300385 0.800964   N1 0.423155 -0.423155 0.801174   N2 0.189037 -0.189037 0.963603 
+   txt003 
+STRI 
+  V0 0.249157 -0.249157 2.63611   V1 0.303616 -0.178322 2.63611   V2 0.173037 -0.10163 2.7 
+  N0 0.189037 -0.189037 0.963603   N1 0.231413 -0.134219 0.963552   N2 0.517905 -0.300385 0.800964 
+   txt003 
+STRI 
+  V0 0.142 -0.142 2.7   V1 0.10163 -0.173037 2.7   V2 0.178322 -0.303616 2.63611 
+  N0 0.423155 -0.423155 0.801174   N1 0.300385 -0.517905 0.800964   N2 0.134219 -0.231413 0.963552 
+   txt003 
+STRI 
+  V0 0.178322 -0.303616 2.63611   V1 0.249157 -0.249157 2.63611   V2 0.142 -0.142 2.7 
+  N0 0.134219 -0.231413 0.963552   N1 0.189037 -0.189037 0.963603   N2 0.423155 -0.423155 0.801174 
+   txt003 
+STRI 
+  V0 0.10163 -0.173037 2.7   V1 0.0537037 -0.192963 2.7   V2 0.0942301 -0.338579 2.63611 
+  N0 0.300385 -0.517905 0.800964   N1 0.15602 -0.578783 0.800417   N2 0.0697517 -0.258756 0.963421 
+   txt003 
+STRI 
+  V0 0.0942301 -0.338579 2.63611   V1 0.178322 -0.303616 2.63611   V2 0.10163 -0.173037 2.7 
+  N0 0.0697517 -0.258756 0.963421   N1 0.134219 -0.231413 0.963552   N2 0.300385 -0.517905 0.800964 
+   txt003 
+STRI 
+  V0 0.0537037 -0.192963 2.7   V1 0 -0.2 2.7   V2 5.55112e-17 -0.350926 2.63611 
+  N0 0.15602 -0.578783 0.800417   N1 -9.91271e-17 -0.6 0.8   N2 0 -0.268354 0.96332 
+   txt003 
+STRI 
+  V0 5.55112e-17 -0.350926 2.63611   V1 0.0942301 -0.338579 2.63611   V2 0.0537037 -0.192963 2.7 
+  N0 0 -0.268354 0.96332   N1 0.0697517 -0.258756 0.963421   N2 0.15602 -0.578783 0.800417 
+   txt003 
+STRI 
+  V0 0.350926 0 2.63611   V1 0.338579 -0.0942301 2.63611   V2 0.553875 -0.15415 2.58889 
+  N0 0.268354 0 0.96332   N1 0.258756 -0.0697517 0.963421   N2 0.162011 -0.0436726 0.985822 
+   txt003 
+STRI 
+  V0 0.553875 -0.15415 2.58889   V1 0.574074 0 2.58889   V2 0.350926 0 2.63611 
+  N0 0.162011 -0.0436726 0.985822   N1 0.168031 0 0.985782   N2 0.268354 0 0.96332 
+   txt003 
+STRI 
+  V0 0.338579 -0.0942301 2.63611   V1 0.303616 -0.178322 2.63611   V2 0.49668 -0.291715 2.58889 
+  N0 0.258756 -0.0697517 0.963421   N1 0.231413 -0.134219 0.963552   N2 0.144879 -0.0840299 0.985875 
+   txt003 
+STRI 
+  V0 0.49668 -0.291715 2.58889   V1 0.553875 -0.15415 2.58889   V2 0.338579 -0.0942301 2.63611 
+  N0 0.144879 -0.0840299 0.985875   N1 0.162011 -0.0436726 0.985822   N2 0.258756 -0.0697517 0.963421 
+   txt003 
+STRI 
+  V0 0.303616 -0.178322 2.63611   V1 0.249157 -0.249157 2.63611   V2 0.407593 -0.407593 2.58889 
+  N0 0.231413 -0.134219 0.963552   N1 0.189037 -0.189037 0.963603   N2 0.118345 -0.118345 0.985895 
+   txt003 
+STRI 
+  V0 0.407593 -0.407593 2.58889   V1 0.49668 -0.291715 2.58889   V2 0.303616 -0.178322 2.63611 
+  N0 0.118345 -0.118345 0.985895   N1 0.144879 -0.0840299 0.985875   N2 0.231413 -0.134219 0.963552 
+   txt003 
+STRI 
+  V0 0.249157 -0.249157 2.63611   V1 0.178322 -0.303616 2.63611   V2 0.291715 -0.49668 2.58889 
+  N0 0.189037 -0.189037 0.963603   N1 0.134219 -0.231413 0.963552   N2 0.0840299 -0.144879 0.985875 
+   txt003 
+STRI 
+  V0 0.291715 -0.49668 2.58889   V1 0.407593 -0.407593 2.58889   V2 0.249157 -0.249157 2.63611 
+  N0 0.0840299 -0.144879 0.985875   N1 0.118345 -0.118345 0.985895   N2 0.189037 -0.189037 0.963603 
+   txt003 
+STRI 
+  V0 0.178322 -0.303616 2.63611   V1 0.0942301 -0.338579 2.63611   V2 0.15415 -0.553875 2.58889 
+  N0 0.134219 -0.231413 0.963552   N1 0.0697517 -0.258756 0.963421   N2 0.0436726 -0.162011 0.985822 
+   txt003 
+STRI 
+  V0 0.15415 -0.553875 2.58889   V1 0.291715 -0.49668 2.58889   V2 0.178322 -0.303616 2.63611 
+  N0 0.0436726 -0.162011 0.985822   N1 0.0840299 -0.144879 0.985875   N2 0.134219 -0.231413 0.963552 
+   txt003 
+STRI 
+  V0 0.0942301 -0.338579 2.63611   V1 5.55112e-17 -0.350926 2.63611   V2 2.22045e-16 -0.574074 2.58889 
+  N0 0.0697517 -0.258756 0.963421   N1 0 -0.268354 0.96332   N2 -1.93429e-17 -0.168031 0.985782 
+   txt003 
+STRI 
+  V0 2.22045e-16 -0.574074 2.58889   V1 0.15415 -0.553875 2.58889   V2 0.0942301 -0.338579 2.63611 
+  N0 -1.93429e-17 -0.168031 0.985782   N1 0.0436726 -0.162011 0.985822   N2 0.0697517 -0.258756 0.963421 
+   txt003 
+STRI 
+  V0 0.574074 0 2.58889   V1 0.553875 -0.15415 2.58889   V2 0.795972 -0.221528 2.55 
+  N0 0.168031 0 0.985782   N1 0.162011 -0.0436726 0.985822   N2 0.143025 -0.0385545 0.988968 
+   txt003 
+STRI 
+  V0 0.795972 -0.221528 2.55   V1 0.825 0 2.55   V2 0.574074 0 2.58889 
+  N0 0.143025 -0.0385545 0.988968   N1 0.14834 0 0.988936   N2 0.168031 0 0.985782 
+   txt003 
+STRI 
+  V0 0.553875 -0.15415 2.58889   V1 0.49668 -0.291715 2.58889   V2 0.713778 -0.419222 2.55 
+  N0 0.162011 -0.0436726 0.985822   N1 0.144879 -0.0840299 0.985875   N2 0.127899 -0.0741814 0.989009 
+   txt003 
+STRI 
+  V0 0.713778 -0.419222 2.55   V1 0.795972 -0.221528 2.55   V2 0.553875 -0.15415 2.58889 
+  N0 0.127899 -0.0741814 0.989009   N1 0.143025 -0.0385545 0.988968   N2 0.162011 -0.0436726 0.985822 
+   txt003 
+STRI 
+  V0 0.49668 -0.291715 2.58889   V1 0.407593 -0.407593 2.58889   V2 0.58575 -0.58575 2.55 
+  N0 0.144879 -0.0840299 0.985875   N1 0.118345 -0.118345 0.985895   N2 0.104474 -0.104474 0.989025 
+   txt003 
+STRI 
+  V0 0.58575 -0.58575 2.55   V1 0.713778 -0.419222 2.55   V2 0.49668 -0.291715 2.58889 
+  N0 0.104474 -0.104474 0.989025   N1 0.127899 -0.0741814 0.989009   N2 0.144879 -0.0840299 0.985875 
+   txt003 
+STRI 
+  V0 0.407593 -0.407593 2.58889   V1 0.291715 -0.49668 2.58889   V2 0.419222 -0.713778 2.55 
+  N0 0.118345 -0.118345 0.985895   N1 0.0840299 -0.144879 0.985875   N2 0.0741814 -0.127899 0.989009 
+   txt003 
+STRI 
+  V0 0.419222 -0.713778 2.55   V1 0.58575 -0.58575 2.55   V2 0.407593 -0.407593 2.58889 
+  N0 0.0741814 -0.127899 0.989009   N1 0.104474 -0.104474 0.989025   N2 0.118345 -0.118345 0.985895 
+   txt003 
+STRI 
+  V0 0.291715 -0.49668 2.58889   V1 0.15415 -0.553875 2.58889   V2 0.221528 -0.795972 2.55 
+  N0 0.0840299 -0.144879 0.985875   N1 0.0436726 -0.162011 0.985822   N2 0.0385545 -0.143025 0.988968 
+   txt003 
+STRI 
+  V0 0.221528 -0.795972 2.55   V1 0.419222 -0.713778 2.55   V2 0.291715 -0.49668 2.58889 
+  N0 0.0385545 -0.143025 0.988968   N1 0.0741814 -0.127899 0.989009   N2 0.0840299 -0.144879 0.985875 
+   txt003 
+STRI 
+  V0 0.15415 -0.553875 2.58889   V1 2.22045e-16 -0.574074 2.58889   V2 1.11022e-16 -0.825 2.55 
+  N0 0.0436726 -0.162011 0.985822   N1 -1.93429e-17 -0.168031 0.985782   N2 -2.37649e-17 -0.14834 0.988936 
+   txt003 
+STRI 
+  V0 1.11022e-16 -0.825 2.55   V1 0.221528 -0.795972 2.55   V2 0.15415 -0.553875 2.58889 
+  N0 -2.37649e-17 -0.14834 0.988936   N1 0.0385545 -0.143025 0.988968   N2 0.0436726 -0.162011 0.985822 
+   txt003 
+STRI 
+  V0 0.825 0 2.55   V1 0.795972 -0.221528 2.55   V2 1.02199 -0.284431 2.51111 
+  N0 0.14834 0 0.988936   N1 0.143025 -0.0385545 0.988968   N2 0.186699 -0.0503275 0.981127 
+   txt003 
+STRI 
+  V0 1.02199 -0.284431 2.51111   V1 1.05926 0 2.51111   V2 0.825 0 2.55 
+  N0 0.186699 -0.0503275 0.981127   N1 0.193633 0 0.981074   N2 0.14834 0 0.988936 
+   txt003 
+STRI 
+  V0 0.795972 -0.221528 2.55   V1 0.713778 -0.419222 2.55   V2 0.916455 -0.538261 2.51111 
+  N0 0.143025 -0.0385545 0.988968   N1 0.127899 -0.0741814 0.989009   N2 0.166959 -0.0968361 0.981197 
+   txt003 
+STRI 
+  V0 0.916455 -0.538261 2.51111   V1 1.02199 -0.284431 2.51111   V2 0.795972 -0.221528 2.55 
+  N0 0.166959 -0.0968361 0.981197   N1 0.186699 -0.0503275 0.981127   N2 0.143025 -0.0385545 0.988968 
+   txt003 
+STRI 
+  V0 0.713778 -0.419222 2.55   V1 0.58575 -0.58575 2.55   V2 0.752074 -0.752074 2.51111 
+  N0 0.127899 -0.0741814 0.989009   N1 0.104474 -0.104474 0.989025   N2 0.136382 -0.136382 0.981224 
+   txt003 
+STRI 
+  V0 0.752074 -0.752074 2.51111   V1 0.916455 -0.538261 2.51111   V2 0.713778 -0.419222 2.55 
+  N0 0.136382 -0.136382 0.981224   N1 0.166959 -0.0968361 0.981197   N2 0.127899 -0.0741814 0.989009 
+   txt003 
+STRI 
+  V0 0.58575 -0.58575 2.55   V1 0.419222 -0.713778 2.55   V2 0.538261 -0.916455 2.51111 
+  N0 0.104474 -0.104474 0.989025   N1 0.0741814 -0.127899 0.989009   N2 0.0968361 -0.166959 0.981197 
+   txt003 
+STRI 
+  V0 0.538261 -0.916455 2.51111   V1 0.752074 -0.752074 2.51111   V2 0.58575 -0.58575 2.55 
+  N0 0.0968361 -0.166959 0.981197   N1 0.136382 -0.136382 0.981224   N2 0.104474 -0.104474 0.989025 
+   txt003 
+STRI 
+  V0 0.419222 -0.713778 2.55   V1 0.221528 -0.795972 2.55   V2 0.284431 -1.02199 2.51111 
+  N0 0.0741814 -0.127899 0.989009   N1 0.0385545 -0.143025 0.988968   N2 0.0503275 -0.186699 0.981127 
+   txt003 
+STRI 
+  V0 0.284431 -1.02199 2.51111   V1 0.538261 -0.916455 2.51111   V2 0.419222 -0.713778 2.55 
+  N0 0.0503275 -0.186699 0.981127   N1 0.0968361 -0.166959 0.981197   N2 0.0741814 -0.127899 0.989009 
+   txt003 
+STRI 
+  V0 0.221528 -0.795972 2.55   V1 1.11022e-16 -0.825 2.55   V2 4.44089e-16 -1.05926 2.51111 
+  N0 0.0385545 -0.143025 0.988968   N1 -2.37649e-17 -0.14834 0.988936   N2 -7.24819e-17 -0.193633 0.981074 
+   txt003 
+STRI 
+  V0 4.44089e-16 -1.05926 2.51111   V1 0.284431 -1.02199 2.51111   V2 0.221528 -0.795972 2.55 
+  N0 -7.24819e-17 -0.193633 0.981074   N1 0.0503275 -0.186699 0.981127   N2 0.0385545 -0.143025 0.988968 
+   txt003 
+STRI 
+  V0 1.05926 0 2.51111   V1 1.02199 -0.284431 2.51111   V2 1.18904 -0.330924 2.46389 
+  N0 0.193633 0 0.981074   N1 0.186699 -0.0503275 0.981127   N2 0.376378 -0.101459 0.920894 
+   txt003 
+STRI 
+  V0 1.18904 -0.330924 2.46389   V1 1.23241 0 2.46389   V2 1.05926 0 2.51111 
+  N0 0.376378 -0.101459 0.920894   N1 0.390293 0 0.920691   N2 0.193633 0 0.981074 
+   txt003 
+STRI 
+  V0 1.02199 -0.284431 2.51111   V1 0.916455 -0.538261 2.51111   V2 1.06626 -0.626246 2.46389 
+  N0 0.186699 -0.0503275 0.981127   N1 0.166959 -0.0968361 0.981197   N2 0.336657 -0.195261 0.92116 
+   txt003 
+STRI 
+  V0 1.06626 -0.626246 2.46389   V1 1.18904 -0.330924 2.46389   V2 1.02199 -0.284431 2.51111 
+  N0 0.336657 -0.195261 0.92116   N1 0.376378 -0.101459 0.920894   N2 0.186699 -0.0503275 0.981127 
+   txt003 
+STRI 
+  V0 0.916455 -0.538261 2.51111   V1 0.752074 -0.752074 2.51111   V2 0.875009 -0.875009 2.46389 
+  N0 0.166959 -0.0968361 0.981197   N1 0.136382 -0.136382 0.981224   N2 0.275025 -0.275025 0.921262 
+   txt003 
+STRI 
+  V0 0.875009 -0.875009 2.46389   V1 1.06626 -0.626246 2.46389   V2 0.916455 -0.538261 2.51111 
+  N0 0.275025 -0.275025 0.921262   N1 0.336657 -0.195261 0.92116   N2 0.166959 -0.0968361 0.981197 
+   txt003 
+STRI 
+  V0 0.752074 -0.752074 2.51111   V1 0.538261 -0.916455 2.51111   V2 0.626246 -1.06626 2.46389 
+  N0 0.136382 -0.136382 0.981224   N1 0.0968361 -0.166959 0.981197   N2 0.195261 -0.336657 0.92116 
+   txt003 
+STRI 
+  V0 0.626246 -1.06626 2.46389   V1 0.875009 -0.875009 2.46389   V2 0.752074 -0.752074 2.51111 
+  N0 0.195261 -0.336657 0.92116   N1 0.275025 -0.275025 0.921262   N2 0.136382 -0.136382 0.981224 
+   txt003 
+STRI 
+  V0 0.538261 -0.916455 2.51111   V1 0.284431 -1.02199 2.51111   V2 0.330924 -1.18904 2.46389 
+  N0 0.0968361 -0.166959 0.981197   N1 0.0503275 -0.186699 0.981127   N2 0.101459 -0.376378 0.920894 
+   txt003 
+STRI 
+  V0 0.330924 -1.18904 2.46389   V1 0.626246 -1.06626 2.46389   V2 0.538261 -0.916455 2.51111 
+  N0 0.101459 -0.376378 0.920894   N1 0.195261 -0.336657 0.92116   N2 0.0968361 -0.166959 0.981197 
+   txt003 
+STRI 
+  V0 0.284431 -1.02199 2.51111   V1 4.44089e-16 -1.05926 2.51111   V2 4.44089e-16 -1.23241 2.46389 
+  N0 0.0503275 -0.186699 0.981127   N1 -7.24819e-17 -0.193633 0.981074   N2 -8.37138e-17 -0.390293 0.920691 
+   txt003 
+STRI 
+  V0 4.44089e-16 -1.23241 2.46389   V1 0.330924 -1.18904 2.46389   V2 0.284431 -1.02199 2.51111 
+  N0 -8.37138e-17 -0.390293 0.920691   N1 0.101459 -0.376378 0.920894   N2 0.0503275 -0.186699 0.981127 
+   txt003 
+STRI 
+  V0 1.23241 0 2.46389   V1 1.18904 -0.330924 2.46389   V2 1.25426 -0.349074 2.4 
+  N0 0.390293 0 0.920691   N1 0.376378 -0.101459 0.920894   N2 0.965535 -0.260275 -1.02004e-15 
+   txt003 
+STRI 
+  V0 1.25426 -0.349074 2.4   V1 1.3 0 2.4   V2 1.23241 0 2.46389 
+  N0 0.965535 -0.260275 -1.02004e-15   N1 1 0 -9.86865e-16   N2 0.390293 0 0.920691 
+   txt003 
+STRI 
+  V0 1.18904 -0.330924 2.46389   V1 1.06626 -0.626246 2.46389   V2 1.12474 -0.660593 2.4 
+  N0 0.376378 -0.101459 0.920894   N1 0.336657 -0.195261 0.92116   N2 0.865031 -0.501718 -9.69705e-16 
+   txt003 
+STRI 
+  V0 1.12474 -0.660593 2.4   V1 1.25426 -0.349074 2.4   V2 1.18904 -0.330924 2.46389 
+  N0 0.865031 -0.501718 -9.69705e-16   N1 0.965535 -0.260275 -1.02004e-15   N2 0.376378 -0.101459 0.920894 
+   txt003 
+STRI 
+  V0 1.06626 -0.626246 2.46389   V1 0.875009 -0.875009 2.46389   V2 0.923 -0.923 2.4 
+  N0 0.336657 -0.195261 0.92116   N1 0.275025 -0.275025 0.921262   N2 0.707107 -0.707107 -7.41433e-16 
+   txt003 
+STRI 
+  V0 0.923 -0.923 2.4   V1 1.12474 -0.660593 2.4   V2 1.06626 -0.626246 2.46389 
+  N0 0.707107 -0.707107 -7.41433e-16   N1 0.865031 -0.501718 -9.69705e-16   N2 0.336657 -0.195261 0.92116 
+   txt003 
+STRI 
+  V0 0.875009 -0.875009 2.46389   V1 0.626246 -1.06626 2.46389   V2 0.660593 -1.12474 2.4 
+  N0 0.275025 -0.275025 0.921262   N1 0.195261 -0.336657 0.92116   N2 0.501718 -0.865031 -4.67305e-16 
+   txt003 
+STRI 
+  V0 0.660593 -1.12474 2.4   V1 0.923 -0.923 2.4   V2 0.875009 -0.875009 2.46389 
+  N0 0.501718 -0.865031 -4.67305e-16   N1 0.707107 -0.707107 -7.41433e-16   N2 0.275025 -0.275025 0.921262 
+   txt003 
+STRI 
+  V0 0.626246 -1.06626 2.46389   V1 0.330924 -1.18904 2.46389   V2 0.349074 -1.25426 2.4 
+  N0 0.195261 -0.336657 0.92116   N1 0.101459 -0.376378 0.920894   N2 0.260275 -0.965535 -5.24893e-16 
+   txt003 
+STRI 
+  V0 0.349074 -1.25426 2.4   V1 0.660593 -1.12474 2.4   V2 0.626246 -1.06626 2.46389 
+  N0 0.260275 -0.965535 -5.24893e-16   N1 0.501718 -0.865031 -4.67305e-16   N2 0.195261 -0.336657 0.92116 
+   txt003 
+STRI 
+  V0 0.330924 -1.18904 2.46389   V1 4.44089e-16 -1.23241 2.46389   V2 6.66134e-16 -1.3 2.4 
+  N0 0.101459 -0.376378 0.920894   N1 -8.37138e-17 -0.390293 0.920691   N2 -4.06675e-16 -1 -1.4803e-15 
+   txt003 
+STRI 
+  V0 6.66134e-16 -1.3 2.4   V1 0.349074 -1.25426 2.4   V2 0.330924 -1.18904 2.46389 
+  N0 -4.06675e-16 -1 -1.4803e-15   N1 0.260275 -0.965535 -5.24893e-16   N2 0.101459 -0.376378 0.920894 
+   txt003 
+STRI 
+  V0 0 -0.2 2.7   V1 -0.0537037 -0.192963 2.7   V2 -0.0942301 -0.338579 2.63611 
+  N0 0 -0.6 0.8   N1 -0.15602 -0.578783 0.800417   N2 -0.0697517 -0.258756 0.963421 
+   txt003 
+STRI 
+  V0 -0.0942301 -0.338579 2.63611   V1 0 -0.350926 2.63611   V2 0 -0.2 2.7 
+  N0 -0.0697517 -0.258756 0.963421   N1 0 -0.268354 0.96332   N2 0 -0.6 0.8 
+   txt003 
+STRI 
+  V0 -0.0537037 -0.192963 2.7   V1 -0.10163 -0.173037 2.7   V2 -0.178322 -0.303616 2.63611 
+  N0 -0.15602 -0.578783 0.800417   N1 -0.300385 -0.517905 0.800964   N2 -0.134219 -0.231413 0.963552 
+   txt003 
+STRI 
+  V0 -0.178322 -0.303616 2.63611   V1 -0.0942301 -0.338579 2.63611   V2 -0.0537037 -0.192963 2.7 
+  N0 -0.134219 -0.231413 0.963552   N1 -0.0697517 -0.258756 0.963421   N2 -0.15602 -0.578783 0.800417 
+   txt003 
+STRI 
+  V0 -0.10163 -0.173037 2.7   V1 -0.142 -0.142 2.7   V2 -0.249157 -0.249157 2.63611 
+  N0 -0.300385 -0.517905 0.800964   N1 -0.423155 -0.423155 0.801174   N2 -0.189037 -0.189037 0.963603 
+   txt003 
+STRI 
+  V0 -0.249157 -0.249157 2.63611   V1 -0.178322 -0.303616 2.63611   V2 -0.10163 -0.173037 2.7 
+  N0 -0.189037 -0.189037 0.963603   N1 -0.134219 -0.231413 0.963552   N2 -0.300385 -0.517905 0.800964 
+   txt003 
+STRI 
+  V0 -0.142 -0.142 2.7   V1 -0.173037 -0.10163 2.7   V2 -0.303616 -0.178322 2.63611 
+  N0 -0.423155 -0.423155 0.801174   N1 -0.517905 -0.300385 0.800964   N2 -0.231413 -0.134219 0.963552 
+   txt003 
+STRI 
+  V0 -0.303616 -0.178322 2.63611   V1 -0.249157 -0.249157 2.63611   V2 -0.142 -0.142 2.7 
+  N0 -0.231413 -0.134219 0.963552   N1 -0.189037 -0.189037 0.963603   N2 -0.423155 -0.423155 0.801174 
+   txt003 
+STRI 
+  V0 -0.173037 -0.10163 2.7   V1 -0.192963 -0.0537037 2.7   V2 -0.338579 -0.0942301 2.63611 
+  N0 -0.517905 -0.300385 0.800964   N1 -0.578783 -0.15602 0.800417   N2 -0.258756 -0.0697517 0.963421 
+   txt003 
+STRI 
+  V0 -0.338579 -0.0942301 2.63611   V1 -0.303616 -0.178322 2.63611   V2 -0.173037 -0.10163 2.7 
+  N0 -0.258756 -0.0697517 0.963421   N1 -0.231413 -0.134219 0.963552   N2 -0.517905 -0.300385 0.800964 
+   txt003 
+STRI 
+  V0 -0.192963 -0.0537037 2.7   V1 -0.2 0 2.7   V2 -0.350926 -5.55112e-17 2.63611 
+  N0 -0.578783 -0.15602 0.800417   N1 -0.6 9.91271e-17 0.8   N2 -0.268354 0 0.96332 
+   txt003 
+STRI 
+  V0 -0.350926 -5.55112e-17 2.63611   V1 -0.338579 -0.0942301 2.63611   V2 -0.192963 -0.0537037 2.7 
+  N0 -0.268354 0 0.96332   N1 -0.258756 -0.0697517 0.963421   N2 -0.578783 -0.15602 0.800417 
+   txt003 
+STRI 
+  V0 0 -0.350926 2.63611   V1 -0.0942301 -0.338579 2.63611   V2 -0.15415 -0.553875 2.58889 
+  N0 0 -0.268354 0.96332   N1 -0.0697517 -0.258756 0.963421   N2 -0.0436726 -0.162011 0.985822 
+   txt003 
+STRI 
+  V0 -0.15415 -0.553875 2.58889   V1 0 -0.574074 2.58889   V2 0 -0.350926 2.63611 
+  N0 -0.0436726 -0.162011 0.985822   N1 0 -0.168031 0.985782   N2 0 -0.268354 0.96332 
+   txt003 
+STRI 
+  V0 -0.0942301 -0.338579 2.63611   V1 -0.178322 -0.303616 2.63611   V2 -0.291715 -0.49668 2.58889 
+  N0 -0.0697517 -0.258756 0.963421   N1 -0.134219 -0.231413 0.963552   N2 -0.0840299 -0.144879 0.985875 
+   txt003 
+STRI 
+  V0 -0.291715 -0.49668 2.58889   V1 -0.15415 -0.553875 2.58889   V2 -0.0942301 -0.338579 2.63611 
+  N0 -0.0840299 -0.144879 0.985875   N1 -0.0436726 -0.162011 0.985822   N2 -0.0697517 -0.258756 0.963421 
+   txt003 
+STRI 
+  V0 -0.178322 -0.303616 2.63611   V1 -0.249157 -0.249157 2.63611   V2 -0.407593 -0.407593 2.58889 
+  N0 -0.134219 -0.231413 0.963552   N1 -0.189037 -0.189037 0.963603   N2 -0.118345 -0.118345 0.985895 
+   txt003 
+STRI 
+  V0 -0.407593 -0.407593 2.58889   V1 -0.291715 -0.49668 2.58889   V2 -0.178322 -0.303616 2.63611 
+  N0 -0.118345 -0.118345 0.985895   N1 -0.0840299 -0.144879 0.985875   N2 -0.134219 -0.231413 0.963552 
+   txt003 
+STRI 
+  V0 -0.249157 -0.249157 2.63611   V1 -0.303616 -0.178322 2.63611   V2 -0.49668 -0.291715 2.58889 
+  N0 -0.189037 -0.189037 0.963603   N1 -0.231413 -0.134219 0.963552   N2 -0.144879 -0.0840299 0.985875 
+   txt003 
+STRI 
+  V0 -0.49668 -0.291715 2.58889   V1 -0.407593 -0.407593 2.58889   V2 -0.249157 -0.249157 2.63611 
+  N0 -0.144879 -0.0840299 0.985875   N1 -0.118345 -0.118345 0.985895   N2 -0.189037 -0.189037 0.963603 
+   txt003 
+STRI 
+  V0 -0.303616 -0.178322 2.63611   V1 -0.338579 -0.0942301 2.63611   V2 -0.553875 -0.15415 2.58889 
+  N0 -0.231413 -0.134219 0.963552   N1 -0.258756 -0.0697517 0.963421   N2 -0.162011 -0.0436726 0.985822 
+   txt003 
+STRI 
+  V0 -0.553875 -0.15415 2.58889   V1 -0.49668 -0.291715 2.58889   V2 -0.303616 -0.178322 2.63611 
+  N0 -0.162011 -0.0436726 0.985822   N1 -0.144879 -0.0840299 0.985875   N2 -0.231413 -0.134219 0.963552 
+   txt003 
+STRI 
+  V0 -0.338579 -0.0942301 2.63611   V1 -0.350926 -5.55112e-17 2.63611   V2 -0.574074 -2.22045e-16 2.58889 
+  N0 -0.258756 -0.0697517 0.963421   N1 -0.268354 0 0.96332   N2 -0.168031 1.93429e-17 0.985782 
+   txt003 
+STRI 
+  V0 -0.574074 -2.22045e-16 2.58889   V1 -0.553875 -0.15415 2.58889   V2 -0.338579 -0.0942301 2.63611 
+  N0 -0.168031 1.93429e-17 0.985782   N1 -0.162011 -0.0436726 0.985822   N2 -0.258756 -0.0697517 0.963421 
+   txt003 
+STRI 
+  V0 0 -0.574074 2.58889   V1 -0.15415 -0.553875 2.58889   V2 -0.221528 -0.795972 2.55 
+  N0 0 -0.168031 0.985782   N1 -0.0436726 -0.162011 0.985822   N2 -0.0385545 -0.143025 0.988968 
+   txt003 
+STRI 
+  V0 -0.221528 -0.795972 2.55   V1 0 -0.825 2.55   V2 0 -0.574074 2.58889 
+  N0 -0.0385545 -0.143025 0.988968   N1 0 -0.14834 0.988936   N2 0 -0.168031 0.985782 
+   txt003 
+STRI 
+  V0 -0.15415 -0.553875 2.58889   V1 -0.291715 -0.49668 2.58889   V2 -0.419222 -0.713778 2.55 
+  N0 -0.0436726 -0.162011 0.985822   N1 -0.0840299 -0.144879 0.985875   N2 -0.0741814 -0.127899 0.989009 
+   txt003 
+STRI 
+  V0 -0.419222 -0.713778 2.55   V1 -0.221528 -0.795972 2.55   V2 -0.15415 -0.553875 2.58889 
+  N0 -0.0741814 -0.127899 0.989009   N1 -0.0385545 -0.143025 0.988968   N2 -0.0436726 -0.162011 0.985822 
+   txt003 
+STRI 
+  V0 -0.291715 -0.49668 2.58889   V1 -0.407593 -0.407593 2.58889   V2 -0.58575 -0.58575 2.55 
+  N0 -0.0840299 -0.144879 0.985875   N1 -0.118345 -0.118345 0.985895   N2 -0.104474 -0.104474 0.989025 
+   txt003 
+STRI 
+  V0 -0.58575 -0.58575 2.55   V1 -0.419222 -0.713778 2.55   V2 -0.291715 -0.49668 2.58889 
+  N0 -0.104474 -0.104474 0.989025   N1 -0.0741814 -0.127899 0.989009   N2 -0.0840299 -0.144879 0.985875 
+   txt003 
+STRI 
+  V0 -0.407593 -0.407593 2.58889   V1 -0.49668 -0.291715 2.58889   V2 -0.713778 -0.419222 2.55 
+  N0 -0.118345 -0.118345 0.985895   N1 -0.144879 -0.0840299 0.985875   N2 -0.127899 -0.0741814 0.989009 
+   txt003 
+STRI 
+  V0 -0.713778 -0.419222 2.55   V1 -0.58575 -0.58575 2.55   V2 -0.407593 -0.407593 2.58889 
+  N0 -0.127899 -0.0741814 0.989009   N1 -0.104474 -0.104474 0.989025   N2 -0.118345 -0.118345 0.985895 
+   txt003 
+STRI 
+  V0 -0.49668 -0.291715 2.58889   V1 -0.553875 -0.15415 2.58889   V2 -0.795972 -0.221528 2.55 
+  N0 -0.144879 -0.0840299 0.985875   N1 -0.162011 -0.0436726 0.985822   N2 -0.143025 -0.0385545 0.988968 
+   txt003 
+STRI 
+  V0 -0.795972 -0.221528 2.55   V1 -0.713778 -0.419222 2.55   V2 -0.49668 -0.291715 2.58889 
+  N0 -0.143025 -0.0385545 0.988968   N1 -0.127899 -0.0741814 0.989009   N2 -0.144879 -0.0840299 0.985875 
+   txt003 
+STRI 
+  V0 -0.553875 -0.15415 2.58889   V1 -0.574074 -2.22045e-16 2.58889   V2 -0.825 -1.11022e-16 2.55 
+  N0 -0.162011 -0.0436726 0.985822   N1 -0.168031 1.93429e-17 0.985782   N2 -0.14834 2.37649e-17 0.988936 
+   txt003 
+STRI 
+  V0 -0.825 -1.11022e-16 2.55   V1 -0.795972 -0.221528 2.55   V2 -0.553875 -0.15415 2.58889 
+  N0 -0.14834 2.37649e-17 0.988936   N1 -0.143025 -0.0385545 0.988968   N2 -0.162011 -0.0436726 0.985822 
+   txt003 
+STRI 
+  V0 0 -0.825 2.55   V1 -0.221528 -0.795972 2.55   V2 -0.284431 -1.02199 2.51111 
+  N0 0 -0.14834 0.988936   N1 -0.0385545 -0.143025 0.988968   N2 -0.0503275 -0.186699 0.981127 
+   txt003 
+STRI 
+  V0 -0.284431 -1.02199 2.51111   V1 0 -1.05926 2.51111   V2 0 -0.825 2.55 
+  N0 -0.0503275 -0.186699 0.981127   N1 0 -0.193633 0.981074   N2 0 -0.14834 0.988936 
+   txt003 
+STRI 
+  V0 -0.221528 -0.795972 2.55   V1 -0.419222 -0.713778 2.55   V2 -0.538261 -0.916455 2.51111 
+  N0 -0.0385545 -0.143025 0.988968   N1 -0.0741814 -0.127899 0.989009   N2 -0.0968361 -0.166959 0.981197 
+   txt003 
+STRI 
+  V0 -0.538261 -0.916455 2.51111   V1 -0.284431 -1.02199 2.51111   V2 -0.221528 -0.795972 2.55 
+  N0 -0.0968361 -0.166959 0.981197   N1 -0.0503275 -0.186699 0.981127   N2 -0.0385545 -0.143025 0.988968 
+   txt003 
+STRI 
+  V0 -0.419222 -0.713778 2.55   V1 -0.58575 -0.58575 2.55   V2 -0.752074 -0.752074 2.51111 
+  N0 -0.0741814 -0.127899 0.989009   N1 -0.104474 -0.104474 0.989025   N2 -0.136382 -0.136382 0.981224 
+   txt003 
+STRI 
+  V0 -0.752074 -0.752074 2.51111   V1 -0.538261 -0.916455 2.51111   V2 -0.419222 -0.713778 2.55 
+  N0 -0.136382 -0.136382 0.981224   N1 -0.0968361 -0.166959 0.981197   N2 -0.0741814 -0.127899 0.989009 
+   txt003 
+STRI 
+  V0 -0.58575 -0.58575 2.55   V1 -0.713778 -0.419222 2.55   V2 -0.916455 -0.538261 2.51111 
+  N0 -0.104474 -0.104474 0.989025   N1 -0.127899 -0.0741814 0.989009   N2 -0.166959 -0.0968361 0.981197 
+   txt003 
+STRI 
+  V0 -0.916455 -0.538261 2.51111   V1 -0.752074 -0.752074 2.51111   V2 -0.58575 -0.58575 2.55 
+  N0 -0.166959 -0.0968361 0.981197   N1 -0.136382 -0.136382 0.981224   N2 -0.104474 -0.104474 0.989025 
+   txt003 
+STRI 
+  V0 -0.713778 -0.419222 2.55   V1 -0.795972 -0.221528 2.55   V2 -1.02199 -0.284431 2.51111 
+  N0 -0.127899 -0.0741814 0.989009   N1 -0.143025 -0.0385545 0.988968   N2 -0.186699 -0.0503275 0.981127 
+   txt003 
+STRI 
+  V0 -1.02199 -0.284431 2.51111   V1 -0.916455 -0.538261 2.51111   V2 -0.713778 -0.419222 2.55 
+  N0 -0.186699 -0.0503275 0.981127   N1 -0.166959 -0.0968361 0.981197   N2 -0.127899 -0.0741814 0.989009 
+   txt003 
+STRI 
+  V0 -0.795972 -0.221528 2.55   V1 -0.825 -1.11022e-16 2.55   V2 -1.05926 -4.44089e-16 2.51111 
+  N0 -0.143025 -0.0385545 0.988968   N1 -0.14834 2.37649e-17 0.988936   N2 -0.193633 7.24819e-17 0.981074 
+   txt003 
+STRI 
+  V0 -1.05926 -4.44089e-16 2.51111   V1 -1.02199 -0.284431 2.51111   V2 -0.795972 -0.221528 2.55 
+  N0 -0.193633 7.24819e-17 0.981074   N1 -0.186699 -0.0503275 0.981127   N2 -0.143025 -0.0385545 0.988968 
+   txt003 
+STRI 
+  V0 0 -1.05926 2.51111   V1 -0.284431 -1.02199 2.51111   V2 -0.330924 -1.18904 2.46389 
+  N0 0 -0.193633 0.981074   N1 -0.0503275 -0.186699 0.981127   N2 -0.101459 -0.376378 0.920894 
+   txt003 
+STRI 
+  V0 -0.330924 -1.18904 2.46389   V1 0 -1.23241 2.46389   V2 0 -1.05926 2.51111 
+  N0 -0.101459 -0.376378 0.920894   N1 0 -0.390293 0.920691   N2 0 -0.193633 0.981074 
+   txt003 
+STRI 
+  V0 -0.284431 -1.02199 2.51111   V1 -0.538261 -0.916455 2.51111   V2 -0.626246 -1.06626 2.46389 
+  N0 -0.0503275 -0.186699 0.981127   N1 -0.0968361 -0.166959 0.981197   N2 -0.195261 -0.336657 0.92116 
+   txt003 
+STRI 
+  V0 -0.626246 -1.06626 2.46389   V1 -0.330924 -1.18904 2.46389   V2 -0.284431 -1.02199 2.51111 
+  N0 -0.195261 -0.336657 0.92116   N1 -0.101459 -0.376378 0.920894   N2 -0.0503275 -0.186699 0.981127 
+   txt003 
+STRI 
+  V0 -0.538261 -0.916455 2.51111   V1 -0.752074 -0.752074 2.51111   V2 -0.875009 -0.875009 2.46389 
+  N0 -0.0968361 -0.166959 0.981197   N1 -0.136382 -0.136382 0.981224   N2 -0.275025 -0.275025 0.921262 
+   txt003 
+STRI 
+  V0 -0.875009 -0.875009 2.46389   V1 -0.626246 -1.06626 2.46389   V2 -0.538261 -0.916455 2.51111 
+  N0 -0.275025 -0.275025 0.921262   N1 -0.195261 -0.336657 0.92116   N2 -0.0968361 -0.166959 0.981197 
+   txt003 
+STRI 
+  V0 -0.752074 -0.752074 2.51111   V1 -0.916455 -0.538261 2.51111   V2 -1.06626 -0.626246 2.46389 
+  N0 -0.136382 -0.136382 0.981224   N1 -0.166959 -0.0968361 0.981197   N2 -0.336657 -0.195261 0.92116 
+   txt003 
+STRI 
+  V0 -1.06626 -0.626246 2.46389   V1 -0.875009 -0.875009 2.46389   V2 -0.752074 -0.752074 2.51111 
+  N0 -0.336657 -0.195261 0.92116   N1 -0.275025 -0.275025 0.921262   N2 -0.136382 -0.136382 0.981224 
+   txt003 
+STRI 
+  V0 -0.916455 -0.538261 2.51111   V1 -1.02199 -0.284431 2.51111   V2 -1.18904 -0.330924 2.46389 
+  N0 -0.166959 -0.0968361 0.981197   N1 -0.186699 -0.0503275 0.981127   N2 -0.376378 -0.101459 0.920894 
+   txt003 
+STRI 
+  V0 -1.18904 -0.330924 2.46389   V1 -1.06626 -0.626246 2.46389   V2 -0.916455 -0.538261 2.51111 
+  N0 -0.376378 -0.101459 0.920894   N1 -0.336657 -0.195261 0.92116   N2 -0.166959 -0.0968361 0.981197 
+   txt003 
+STRI 
+  V0 -1.02199 -0.284431 2.51111   V1 -1.05926 -4.44089e-16 2.51111   V2 -1.23241 -4.44089e-16 2.46389 
+  N0 -0.186699 -0.0503275 0.981127   N1 -0.193633 7.24819e-17 0.981074   N2 -0.390293 8.37138e-17 0.920691 
+   txt003 
+STRI 
+  V0 -1.23241 -4.44089e-16 2.46389   V1 -1.18904 -0.330924 2.46389   V2 -1.02199 -0.284431 2.51111 
+  N0 -0.390293 8.37138e-17 0.920691   N1 -0.376378 -0.101459 0.920894   N2 -0.186699 -0.0503275 0.981127 
+   txt003 
+STRI 
+  V0 0 -1.23241 2.46389   V1 -0.330924 -1.18904 2.46389   V2 -0.349074 -1.25426 2.4 
+  N0 0 -0.390293 0.920691   N1 -0.101459 -0.376378 0.920894   N2 -0.260275 -0.965535 -1.02004e-15 
+   txt003 
+STRI 
+  V0 -0.349074 -1.25426 2.4   V1 0 -1.3 2.4   V2 0 -1.23241 2.46389 
+  N0 -0.260275 -0.965535 -1.02004e-15   N1 -0 -1 -9.86865e-16   N2 0 -0.390293 0.920691 
+   txt003 
+STRI 
+  V0 -0.330924 -1.18904 2.46389   V1 -0.626246 -1.06626 2.46389   V2 -0.660593 -1.12474 2.4 
+  N0 -0.101459 -0.376378 0.920894   N1 -0.195261 -0.336657 0.92116   N2 -0.501718 -0.865031 -9.69705e-16 
+   txt003 
+STRI 
+  V0 -0.660593 -1.12474 2.4   V1 -0.349074 -1.25426 2.4   V2 -0.330924 -1.18904 2.46389 
+  N0 -0.501718 -0.865031 -9.69705e-16   N1 -0.260275 -0.965535 -1.02004e-15   N2 -0.101459 -0.376378 0.920894 
+   txt003 
+STRI 
+  V0 -0.626246 -1.06626 2.46389   V1 -0.875009 -0.875009 2.46389   V2 -0.923 -0.923 2.4 
+  N0 -0.195261 -0.336657 0.92116   N1 -0.275025 -0.275025 0.921262   N2 -0.707107 -0.707107 -7.41433e-16 
+   txt003 
+STRI 
+  V0 -0.923 -0.923 2.4   V1 -0.660593 -1.12474 2.4   V2 -0.626246 -1.06626 2.46389 
+  N0 -0.707107 -0.707107 -7.41433e-16   N1 -0.501718 -0.865031 -9.69705e-16   N2 -0.195261 -0.336657 0.92116 
+   txt003 
+STRI 
+  V0 -0.875009 -0.875009 2.46389   V1 -1.06626 -0.626246 2.46389   V2 -1.12474 -0.660593 2.4 
+  N0 -0.275025 -0.275025 0.921262   N1 -0.336657 -0.195261 0.92116   N2 -0.865031 -0.501718 -4.67305e-16 
+   txt003 
+STRI 
+  V0 -1.12474 -0.660593 2.4   V1 -0.923 -0.923 2.4   V2 -0.875009 -0.875009 2.46389 
+  N0 -0.865031 -0.501718 -4.67305e-16   N1 -0.707107 -0.707107 -7.41433e-16   N2 -0.275025 -0.275025 0.921262 
+   txt003 
+STRI 
+  V0 -1.06626 -0.626246 2.46389   V1 -1.18904 -0.330924 2.46389   V2 -1.25426 -0.349074 2.4 
+  N0 -0.336657 -0.195261 0.92116   N1 -0.376378 -0.101459 0.920894   N2 -0.965535 -0.260275 -5.24893e-16 
+   txt003 
+STRI 
+  V0 -1.25426 -0.349074 2.4   V1 -1.12474 -0.660593 2.4   V2 -1.06626 -0.626246 2.46389 
+  N0 -0.965535 -0.260275 -5.24893e-16   N1 -0.865031 -0.501718 -4.67305e-16   N2 -0.336657 -0.195261 0.92116 
+   txt003 
+STRI 
+  V0 -1.18904 -0.330924 2.46389   V1 -1.23241 -4.44089e-16 2.46389   V2 -1.3 -6.66134e-16 2.4 
+  N0 -0.376378 -0.101459 0.920894   N1 -0.390293 8.37138e-17 0.920691   N2 -1 4.06675e-16 -1.4803e-15 
+   txt003 
+STRI 
+  V0 -1.3 -6.66134e-16 2.4   V1 -1.25426 -0.349074 2.4   V2 -1.18904 -0.330924 2.46389 
+  N0 -1 4.06675e-16 -1.4803e-15   N1 -0.965535 -0.260275 -5.24893e-16   N2 -0.376378 -0.101459 0.920894 
+   txt003 
+STRI 
+  V0 -0.2 0 2.7   V1 -0.192963 0.0537037 2.7   V2 -0.338579 0.0942301 2.63611 
+  N0 -0.6 0 0.8   N1 -0.578783 0.15602 0.800417   N2 -0.258756 0.0697517 0.963421 
+   txt003 
+STRI 
+  V0 -0.338579 0.0942301 2.63611   V1 -0.350926 0 2.63611   V2 -0.2 0 2.7 
+  N0 -0.258756 0.0697517 0.963421   N1 -0.268354 0 0.96332   N2 -0.6 0 0.8 
+   txt003 
+STRI 
+  V0 -0.192963 0.0537037 2.7   V1 -0.173037 0.10163 2.7   V2 -0.303616 0.178322 2.63611 
+  N0 -0.578783 0.15602 0.800417   N1 -0.517905 0.300385 0.800964   N2 -0.231413 0.134219 0.963552 
+   txt003 
+STRI 
+  V0 -0.303616 0.178322 2.63611   V1 -0.338579 0.0942301 2.63611   V2 -0.192963 0.0537037 2.7 
+  N0 -0.231413 0.134219 0.963552   N1 -0.258756 0.0697517 0.963421   N2 -0.578783 0.15602 0.800417 
+   txt003 
+STRI 
+  V0 -0.173037 0.10163 2.7   V1 -0.142 0.142 2.7   V2 -0.249157 0.249157 2.63611 
+  N0 -0.517905 0.300385 0.800964   N1 -0.423155 0.423155 0.801174   N2 -0.189037 0.189037 0.963603 
+   txt003 
+STRI 
+  V0 -0.249157 0.249157 2.63611   V1 -0.303616 0.178322 2.63611   V2 -0.173037 0.10163 2.7 
+  N0 -0.189037 0.189037 0.963603   N1 -0.231413 0.134219 0.963552   N2 -0.517905 0.300385 0.800964 
+   txt003 
+STRI 
+  V0 -0.142 0.142 2.7   V1 -0.10163 0.173037 2.7   V2 -0.178322 0.303616 2.63611 
+  N0 -0.423155 0.423155 0.801174   N1 -0.300385 0.517905 0.800964   N2 -0.134219 0.231413 0.963552 
+   txt003 
+STRI 
+  V0 -0.178322 0.303616 2.63611   V1 -0.249157 0.249157 2.63611   V2 -0.142 0.142 2.7 
+  N0 -0.134219 0.231413 0.963552   N1 -0.189037 0.189037 0.963603   N2 -0.423155 0.423155 0.801174 
+   txt003 
+STRI 
+  V0 -0.10163 0.173037 2.7   V1 -0.0537037 0.192963 2.7   V2 -0.0942301 0.338579 2.63611 
+  N0 -0.300385 0.517905 0.800964   N1 -0.15602 0.578783 0.800417   N2 -0.0697517 0.258756 0.963421 
+   txt003 
+STRI 
+  V0 -0.0942301 0.338579 2.63611   V1 -0.178322 0.303616 2.63611   V2 -0.10163 0.173037 2.7 
+  N0 -0.0697517 0.258756 0.963421   N1 -0.134219 0.231413 0.963552   N2 -0.300385 0.517905 0.800964 
+   txt003 
+STRI 
+  V0 -0.0537037 0.192963 2.7   V1 0 0.2 2.7   V2 -5.55112e-17 0.350926 2.63611 
+  N0 -0.15602 0.578783 0.800417   N1 9.91271e-17 0.6 0.8   N2 -0 0.268354 0.96332 
+   txt003 
+STRI 
+  V0 -5.55112e-17 0.350926 2.63611   V1 -0.0942301 0.338579 2.63611   V2 -0.0537037 0.192963 2.7 
+  N0 -0 0.268354 0.96332   N1 -0.0697517 0.258756 0.963421   N2 -0.15602 0.578783 0.800417 
+   txt003 
+STRI 
+  V0 -0.350926 0 2.63611   V1 -0.338579 0.0942301 2.63611   V2 -0.553875 0.15415 2.58889 
+  N0 -0.268354 0 0.96332   N1 -0.258756 0.0697517 0.963421   N2 -0.162011 0.0436726 0.985822 
+   txt003 
+STRI 
+  V0 -0.553875 0.15415 2.58889   V1 -0.574074 0 2.58889   V2 -0.350926 0 2.63611 
+  N0 -0.162011 0.0436726 0.985822   N1 -0.168031 0 0.985782   N2 -0.268354 0 0.96332 
+   txt003 
+STRI 
+  V0 -0.338579 0.0942301 2.63611   V1 -0.303616 0.178322 2.63611   V2 -0.49668 0.291715 2.58889 
+  N0 -0.258756 0.0697517 0.963421   N1 -0.231413 0.134219 0.963552   N2 -0.144879 0.0840299 0.985875 
+   txt003 
+STRI 
+  V0 -0.49668 0.291715 2.58889   V1 -0.553875 0.15415 2.58889   V2 -0.338579 0.0942301 2.63611 
+  N0 -0.144879 0.0840299 0.985875   N1 -0.162011 0.0436726 0.985822   N2 -0.258756 0.0697517 0.963421 
+   txt003 
+STRI 
+  V0 -0.303616 0.178322 2.63611   V1 -0.249157 0.249157 2.63611   V2 -0.407593 0.407593 2.58889 
+  N0 -0.231413 0.134219 0.963552   N1 -0.189037 0.189037 0.963603   N2 -0.118345 0.118345 0.985895 
+   txt003 
+STRI 
+  V0 -0.407593 0.407593 2.58889   V1 -0.49668 0.291715 2.58889   V2 -0.303616 0.178322 2.63611 
+  N0 -0.118345 0.118345 0.985895   N1 -0.144879 0.0840299 0.985875   N2 -0.231413 0.134219 0.963552 
+   txt003 
+STRI 
+  V0 -0.249157 0.249157 2.63611   V1 -0.178322 0.303616 2.63611   V2 -0.291715 0.49668 2.58889 
+  N0 -0.189037 0.189037 0.963603   N1 -0.134219 0.231413 0.963552   N2 -0.0840299 0.144879 0.985875 
+   txt003 
+STRI 
+  V0 -0.291715 0.49668 2.58889   V1 -0.407593 0.407593 2.58889   V2 -0.249157 0.249157 2.63611 
+  N0 -0.0840299 0.144879 0.985875   N1 -0.118345 0.118345 0.985895   N2 -0.189037 0.189037 0.963603 
+   txt003 
+STRI 
+  V0 -0.178322 0.303616 2.63611   V1 -0.0942301 0.338579 2.63611   V2 -0.15415 0.553875 2.58889 
+  N0 -0.134219 0.231413 0.963552   N1 -0.0697517 0.258756 0.963421   N2 -0.0436726 0.162011 0.985822 
+   txt003 
+STRI 
+  V0 -0.15415 0.553875 2.58889   V1 -0.291715 0.49668 2.58889   V2 -0.178322 0.303616 2.63611 
+  N0 -0.0436726 0.162011 0.985822   N1 -0.0840299 0.144879 0.985875   N2 -0.134219 0.231413 0.963552 
+   txt003 
+STRI 
+  V0 -0.0942301 0.338579 2.63611   V1 -5.55112e-17 0.350926 2.63611   V2 -2.22045e-16 0.574074 2.58889 
+  N0 -0.0697517 0.258756 0.963421   N1 -0 0.268354 0.96332   N2 1.93429e-17 0.168031 0.985782 
+   txt003 
+STRI 
+  V0 -2.22045e-16 0.574074 2.58889   V1 -0.15415 0.553875 2.58889   V2 -0.0942301 0.338579 2.63611 
+  N0 1.93429e-17 0.168031 0.985782   N1 -0.0436726 0.162011 0.985822   N2 -0.0697517 0.258756 0.963421 
+   txt003 
+STRI 
+  V0 -0.574074 0 2.58889   V1 -0.553875 0.15415 2.58889   V2 -0.795972 0.221528 2.55 
+  N0 -0.168031 0 0.985782   N1 -0.162011 0.0436726 0.985822   N2 -0.143025 0.0385545 0.988968 
+   txt003 
+STRI 
+  V0 -0.795972 0.221528 2.55   V1 -0.825 0 2.55   V2 -0.574074 0 2.58889 
+  N0 -0.143025 0.0385545 0.988968   N1 -0.14834 0 0.988936   N2 -0.168031 0 0.985782 
+   txt003 
+STRI 
+  V0 -0.553875 0.15415 2.58889   V1 -0.49668 0.291715 2.58889   V2 -0.713778 0.419222 2.55 
+  N0 -0.162011 0.0436726 0.985822   N1 -0.144879 0.0840299 0.985875   N2 -0.127899 0.0741814 0.989009 
+   txt003 
+STRI 
+  V0 -0.713778 0.419222 2.55   V1 -0.795972 0.221528 2.55   V2 -0.553875 0.15415 2.58889 
+  N0 -0.127899 0.0741814 0.989009   N1 -0.143025 0.0385545 0.988968   N2 -0.162011 0.0436726 0.985822 
+   txt003 
+STRI 
+  V0 -0.49668 0.291715 2.58889   V1 -0.407593 0.407593 2.58889   V2 -0.58575 0.58575 2.55 
+  N0 -0.144879 0.0840299 0.985875   N1 -0.118345 0.118345 0.985895   N2 -0.104474 0.104474 0.989025 
+   txt003 
+STRI 
+  V0 -0.58575 0.58575 2.55   V1 -0.713778 0.419222 2.55   V2 -0.49668 0.291715 2.58889 
+  N0 -0.104474 0.104474 0.989025   N1 -0.127899 0.0741814 0.989009   N2 -0.144879 0.0840299 0.985875 
+   txt003 
+STRI 
+  V0 -0.407593 0.407593 2.58889   V1 -0.291715 0.49668 2.58889   V2 -0.419222 0.713778 2.55 
+  N0 -0.118345 0.118345 0.985895   N1 -0.0840299 0.144879 0.985875   N2 -0.0741814 0.127899 0.989009 
+   txt003 
+STRI 
+  V0 -0.419222 0.713778 2.55   V1 -0.58575 0.58575 2.55   V2 -0.407593 0.407593 2.58889 
+  N0 -0.0741814 0.127899 0.989009   N1 -0.104474 0.104474 0.989025   N2 -0.118345 0.118345 0.985895 
+   txt003 
+STRI 
+  V0 -0.291715 0.49668 2.58889   V1 -0.15415 0.553875 2.58889   V2 -0.221528 0.795972 2.55 
+  N0 -0.0840299 0.144879 0.985875   N1 -0.0436726 0.162011 0.985822   N2 -0.0385545 0.143025 0.988968 
+   txt003 
+STRI 
+  V0 -0.221528 0.795972 2.55   V1 -0.419222 0.713778 2.55   V2 -0.291715 0.49668 2.58889 
+  N0 -0.0385545 0.143025 0.988968   N1 -0.0741814 0.127899 0.989009   N2 -0.0840299 0.144879 0.985875 
+   txt003 
+STRI 
+  V0 -0.15415 0.553875 2.58889   V1 -2.22045e-16 0.574074 2.58889   V2 -1.11022e-16 0.825 2.55 
+  N0 -0.0436726 0.162011 0.985822   N1 1.93429e-17 0.168031 0.985782   N2 2.37649e-17 0.14834 0.988936 
+   txt003 
+STRI 
+  V0 -1.11022e-16 0.825 2.55   V1 -0.221528 0.795972 2.55   V2 -0.15415 0.553875 2.58889 
+  N0 2.37649e-17 0.14834 0.988936   N1 -0.0385545 0.143025 0.988968   N2 -0.0436726 0.162011 0.985822 
+   txt003 
+STRI 
+  V0 -0.825 0 2.55   V1 -0.795972 0.221528 2.55   V2 -1.02199 0.284431 2.51111 
+  N0 -0.14834 0 0.988936   N1 -0.143025 0.0385545 0.988968   N2 -0.186699 0.0503275 0.981127 
+   txt003 
+STRI 
+  V0 -1.02199 0.284431 2.51111   V1 -1.05926 0 2.51111   V2 -0.825 0 2.55 
+  N0 -0.186699 0.0503275 0.981127   N1 -0.193633 0 0.981074   N2 -0.14834 0 0.988936 
+   txt003 
+STRI 
+  V0 -0.795972 0.221528 2.55   V1 -0.713778 0.419222 2.55   V2 -0.916455 0.538261 2.51111 
+  N0 -0.143025 0.0385545 0.988968   N1 -0.127899 0.0741814 0.989009   N2 -0.166959 0.0968361 0.981197 
+   txt003 
+STRI 
+  V0 -0.916455 0.538261 2.51111   V1 -1.02199 0.284431 2.51111   V2 -0.795972 0.221528 2.55 
+  N0 -0.166959 0.0968361 0.981197   N1 -0.186699 0.0503275 0.981127   N2 -0.143025 0.0385545 0.988968 
+   txt003 
+STRI 
+  V0 -0.713778 0.419222 2.55   V1 -0.58575 0.58575 2.55   V2 -0.752074 0.752074 2.51111 
+  N0 -0.127899 0.0741814 0.989009   N1 -0.104474 0.104474 0.989025   N2 -0.136382 0.136382 0.981224 
+   txt003 
+STRI 
+  V0 -0.752074 0.752074 2.51111   V1 -0.916455 0.538261 2.51111   V2 -0.713778 0.419222 2.55 
+  N0 -0.136382 0.136382 0.981224   N1 -0.166959 0.0968361 0.981197   N2 -0.127899 0.0741814 0.989009 
+   txt003 
+STRI 
+  V0 -0.58575 0.58575 2.55   V1 -0.419222 0.713778 2.55   V2 -0.538261 0.916455 2.51111 
+  N0 -0.104474 0.104474 0.989025   N1 -0.0741814 0.127899 0.989009   N2 -0.0968361 0.166959 0.981197 
+   txt003 
+STRI 
+  V0 -0.538261 0.916455 2.51111   V1 -0.752074 0.752074 2.51111   V2 -0.58575 0.58575 2.55 
+  N0 -0.0968361 0.166959 0.981197   N1 -0.136382 0.136382 0.981224   N2 -0.104474 0.104474 0.989025 
+   txt003 
+STRI 
+  V0 -0.419222 0.713778 2.55   V1 -0.221528 0.795972 2.55   V2 -0.284431 1.02199 2.51111 
+  N0 -0.0741814 0.127899 0.989009   N1 -0.0385545 0.143025 0.988968   N2 -0.0503275 0.186699 0.981127 
+   txt003 
+STRI 
+  V0 -0.284431 1.02199 2.51111   V1 -0.538261 0.916455 2.51111   V2 -0.419222 0.713778 2.55 
+  N0 -0.0503275 0.186699 0.981127   N1 -0.0968361 0.166959 0.981197   N2 -0.0741814 0.127899 0.989009 
+   txt003 
+STRI 
+  V0 -0.221528 0.795972 2.55   V1 -1.11022e-16 0.825 2.55   V2 -4.44089e-16 1.05926 2.51111 
+  N0 -0.0385545 0.143025 0.988968   N1 2.37649e-17 0.14834 0.988936   N2 7.24819e-17 0.193633 0.981074 
+   txt003 
+STRI 
+  V0 -4.44089e-16 1.05926 2.51111   V1 -0.284431 1.02199 2.51111   V2 -0.221528 0.795972 2.55 
+  N0 7.24819e-17 0.193633 0.981074   N1 -0.0503275 0.186699 0.981127   N2 -0.0385545 0.143025 0.988968 
+   txt003 
+STRI 
+  V0 -1.05926 0 2.51111   V1 -1.02199 0.284431 2.51111   V2 -1.18904 0.330924 2.46389 
+  N0 -0.193633 0 0.981074   N1 -0.186699 0.0503275 0.981127   N2 -0.376378 0.101459 0.920894 
+   txt003 
+STRI 
+  V0 -1.18904 0.330924 2.46389   V1 -1.23241 0 2.46389   V2 -1.05926 0 2.51111 
+  N0 -0.376378 0.101459 0.920894   N1 -0.390293 0 0.920691   N2 -0.193633 0 0.981074 
+   txt003 
+STRI 
+  V0 -1.02199 0.284431 2.51111   V1 -0.916455 0.538261 2.51111   V2 -1.06626 0.626246 2.46389 
+  N0 -0.186699 0.0503275 0.981127   N1 -0.166959 0.0968361 0.981197   N2 -0.336657 0.195261 0.92116 
+   txt003 
+STRI 
+  V0 -1.06626 0.626246 2.46389   V1 -1.18904 0.330924 2.46389   V2 -1.02199 0.284431 2.51111 
+  N0 -0.336657 0.195261 0.92116   N1 -0.376378 0.101459 0.920894   N2 -0.186699 0.0503275 0.981127 
+   txt003 
+STRI 
+  V0 -0.916455 0.538261 2.51111   V1 -0.752074 0.752074 2.51111   V2 -0.875009 0.875009 2.46389 
+  N0 -0.166959 0.0968361 0.981197   N1 -0.136382 0.136382 0.981224   N2 -0.275025 0.275025 0.921262 
+   txt003 
+STRI 
+  V0 -0.875009 0.875009 2.46389   V1 -1.06626 0.626246 2.46389   V2 -0.916455 0.538261 2.51111 
+  N0 -0.275025 0.275025 0.921262   N1 -0.336657 0.195261 0.92116   N2 -0.166959 0.0968361 0.981197 
+   txt003 
+STRI 
+  V0 -0.752074 0.752074 2.51111   V1 -0.538261 0.916455 2.51111   V2 -0.626246 1.06626 2.46389 
+  N0 -0.136382 0.136382 0.981224   N1 -0.0968361 0.166959 0.981197   N2 -0.195261 0.336657 0.92116 
+   txt003 
+STRI 
+  V0 -0.626246 1.06626 2.46389   V1 -0.875009 0.875009 2.46389   V2 -0.752074 0.752074 2.51111 
+  N0 -0.195261 0.336657 0.92116   N1 -0.275025 0.275025 0.921262   N2 -0.136382 0.136382 0.981224 
+   txt003 
+STRI 
+  V0 -0.538261 0.916455 2.51111   V1 -0.284431 1.02199 2.51111   V2 -0.330924 1.18904 2.46389 
+  N0 -0.0968361 0.166959 0.981197   N1 -0.0503275 0.186699 0.981127   N2 -0.101459 0.376378 0.920894 
+   txt003 
+STRI 
+  V0 -0.330924 1.18904 2.46389   V1 -0.626246 1.06626 2.46389   V2 -0.538261 0.916455 2.51111 
+  N0 -0.101459 0.376378 0.920894   N1 -0.195261 0.336657 0.92116   N2 -0.0968361 0.166959 0.981197 
+   txt003 
+STRI 
+  V0 -0.284431 1.02199 2.51111   V1 -4.44089e-16 1.05926 2.51111   V2 -4.44089e-16 1.23241 2.46389 
+  N0 -0.0503275 0.186699 0.981127   N1 7.24819e-17 0.193633 0.981074   N2 8.37138e-17 0.390293 0.920691 
+   txt003 
+STRI 
+  V0 -4.44089e-16 1.23241 2.46389   V1 -0.330924 1.18904 2.46389   V2 -0.284431 1.02199 2.51111 
+  N0 8.37138e-17 0.390293 0.920691   N1 -0.101459 0.376378 0.920894   N2 -0.0503275 0.186699 0.981127 
+   txt003 
+STRI 
+  V0 -1.23241 0 2.46389   V1 -1.18904 0.330924 2.46389   V2 -1.25426 0.349074 2.4 
+  N0 -0.390293 0 0.920691   N1 -0.376378 0.101459 0.920894   N2 -0.965535 0.260275 -1.02004e-15 
+   txt003 
+STRI 
+  V0 -1.25426 0.349074 2.4   V1 -1.3 0 2.4   V2 -1.23241 0 2.46389 
+  N0 -0.965535 0.260275 -1.02004e-15   N1 -1 0 -9.86865e-16   N2 -0.390293 0 0.920691 
+   txt003 
+STRI 
+  V0 -1.18904 0.330924 2.46389   V1 -1.06626 0.626246 2.46389   V2 -1.12474 0.660593 2.4 
+  N0 -0.376378 0.101459 0.920894   N1 -0.336657 0.195261 0.92116   N2 -0.865031 0.501718 -9.69705e-16 
+   txt003 
+STRI 
+  V0 -1.12474 0.660593 2.4   V1 -1.25426 0.349074 2.4   V2 -1.18904 0.330924 2.46389 
+  N0 -0.865031 0.501718 -9.69705e-16   N1 -0.965535 0.260275 -1.02004e-15   N2 -0.376378 0.101459 0.920894 
+   txt003 
+STRI 
+  V0 -1.06626 0.626246 2.46389   V1 -0.875009 0.875009 2.46389   V2 -0.923 0.923 2.4 
+  N0 -0.336657 0.195261 0.92116   N1 -0.275025 0.275025 0.921262   N2 -0.707107 0.707107 -7.41433e-16 
+   txt003 
+STRI 
+  V0 -0.923 0.923 2.4   V1 -1.12474 0.660593 2.4   V2 -1.06626 0.626246 2.46389 
+  N0 -0.707107 0.707107 -7.41433e-16   N1 -0.865031 0.501718 -9.69705e-16   N2 -0.336657 0.195261 0.92116 
+   txt003 
+STRI 
+  V0 -0.875009 0.875009 2.46389   V1 -0.626246 1.06626 2.46389   V2 -0.660593 1.12474 2.4 
+  N0 -0.275025 0.275025 0.921262   N1 -0.195261 0.336657 0.92116   N2 -0.501718 0.865031 -4.67305e-16 
+   txt003 
+STRI 
+  V0 -0.660593 1.12474 2.4   V1 -0.923 0.923 2.4   V2 -0.875009 0.875009 2.46389 
+  N0 -0.501718 0.865031 -4.67305e-16   N1 -0.707107 0.707107 -7.41433e-16   N2 -0.275025 0.275025 0.921262 
+   txt003 
+STRI 
+  V0 -0.626246 1.06626 2.46389   V1 -0.330924 1.18904 2.46389   V2 -0.349074 1.25426 2.4 
+  N0 -0.195261 0.336657 0.92116   N1 -0.101459 0.376378 0.920894   N2 -0.260275 0.965535 -5.24893e-16 
+   txt003 
+STRI 
+  V0 -0.349074 1.25426 2.4   V1 -0.660593 1.12474 2.4   V2 -0.626246 1.06626 2.46389 
+  N0 -0.260275 0.965535 -5.24893e-16   N1 -0.501718 0.865031 -4.67305e-16   N2 -0.195261 0.336657 0.92116 
+   txt003 
+STRI 
+  V0 -0.330924 1.18904 2.46389   V1 -4.44089e-16 1.23241 2.46389   V2 -6.66134e-16 1.3 2.4 
+  N0 -0.101459 0.376378 0.920894   N1 8.37138e-17 0.390293 0.920691   N2 4.06675e-16 1 -1.4803e-15 
+   txt003 
+STRI 
+  V0 -6.66134e-16 1.3 2.4   V1 -0.349074 1.25426 2.4   V2 -0.330924 1.18904 2.46389 
+  N0 4.06675e-16 1 -1.4803e-15   N1 -0.260275 0.965535 -5.24893e-16   N2 -0.101459 0.376378 0.920894 
+   txt003 
+STRI 
+  V0 0 0.2 2.7   V1 0.0537037 0.192963 2.7   V2 0.0942301 0.338579 2.63611 
+  N0 -0 0.6 0.8   N1 0.15602 0.578783 0.800417   N2 0.0697517 0.258756 0.963421 
+   txt003 
+STRI 
+  V0 0.0942301 0.338579 2.63611   V1 0 0.350926 2.63611   V2 0 0.2 2.7 
+  N0 0.0697517 0.258756 0.963421   N1 -0 0.268354 0.96332   N2 -0 0.6 0.8 
+   txt003 
+STRI 
+  V0 0.0537037 0.192963 2.7   V1 0.10163 0.173037 2.7   V2 0.178322 0.303616 2.63611 
+  N0 0.15602 0.578783 0.800417   N1 0.300385 0.517905 0.800964   N2 0.134219 0.231413 0.963552 
+   txt003 
+STRI 
+  V0 0.178322 0.303616 2.63611   V1 0.0942301 0.338579 2.63611   V2 0.0537037 0.192963 2.7 
+  N0 0.134219 0.231413 0.963552   N1 0.0697517 0.258756 0.963421   N2 0.15602 0.578783 0.800417 
+   txt003 
+STRI 
+  V0 0.10163 0.173037 2.7   V1 0.142 0.142 2.7   V2 0.249157 0.249157 2.63611 
+  N0 0.300385 0.517905 0.800964   N1 0.423155 0.423155 0.801174   N2 0.189037 0.189037 0.963603 
+   txt003 
+STRI 
+  V0 0.249157 0.249157 2.63611   V1 0.178322 0.303616 2.63611   V2 0.10163 0.173037 2.7 
+  N0 0.189037 0.189037 0.963603   N1 0.134219 0.231413 0.963552   N2 0.300385 0.517905 0.800964 
+   txt003 
+STRI 
+  V0 0.142 0.142 2.7   V1 0.173037 0.10163 2.7   V2 0.303616 0.178322 2.63611 
+  N0 0.423155 0.423155 0.801174   N1 0.517905 0.300385 0.800964   N2 0.231413 0.134219 0.963552 
+   txt003 
+STRI 
+  V0 0.303616 0.178322 2.63611   V1 0.249157 0.249157 2.63611   V2 0.142 0.142 2.7 
+  N0 0.231413 0.134219 0.963552   N1 0.189037 0.189037 0.963603   N2 0.423155 0.423155 0.801174 
+   txt003 
+STRI 
+  V0 0.173037 0.10163 2.7   V1 0.192963 0.0537037 2.7   V2 0.338579 0.0942301 2.63611 
+  N0 0.517905 0.300385 0.800964   N1 0.578783 0.15602 0.800417   N2 0.258756 0.0697517 0.963421 
+   txt003 
+STRI 
+  V0 0.338579 0.0942301 2.63611   V1 0.303616 0.178322 2.63611   V2 0.173037 0.10163 2.7 
+  N0 0.258756 0.0697517 0.963421   N1 0.231413 0.134219 0.963552   N2 0.517905 0.300385 0.800964 
+   txt003 
+STRI 
+  V0 0.192963 0.0537037 2.7   V1 0.2 0 2.7   V2 0.350926 5.55112e-17 2.63611 
+  N0 0.578783 0.15602 0.800417   N1 0.6 -9.91271e-17 0.8   N2 0.268354 0 0.96332 
+   txt003 
+STRI 
+  V0 0.350926 5.55112e-17 2.63611   V1 0.338579 0.0942301 2.63611   V2 0.192963 0.0537037 2.7 
+  N0 0.268354 0 0.96332   N1 0.258756 0.0697517 0.963421   N2 0.578783 0.15602 0.800417 
+   txt003 
+STRI 
+  V0 0 0.350926 2.63611   V1 0.0942301 0.338579 2.63611   V2 0.15415 0.553875 2.58889 
+  N0 -0 0.268354 0.96332   N1 0.0697517 0.258756 0.963421   N2 0.0436726 0.162011 0.985822 
+   txt003 
+STRI 
+  V0 0.15415 0.553875 2.58889   V1 0 0.574074 2.58889   V2 0 0.350926 2.63611 
+  N0 0.0436726 0.162011 0.985822   N1 -0 0.168031 0.985782   N2 -0 0.268354 0.96332 
+   txt003 
+STRI 
+  V0 0.0942301 0.338579 2.63611   V1 0.178322 0.303616 2.63611   V2 0.291715 0.49668 2.58889 
+  N0 0.0697517 0.258756 0.963421   N1 0.134219 0.231413 0.963552   N2 0.0840299 0.144879 0.985875 
+   txt003 
+STRI 
+  V0 0.291715 0.49668 2.58889   V1 0.15415 0.553875 2.58889   V2 0.0942301 0.338579 2.63611 
+  N0 0.0840299 0.144879 0.985875   N1 0.0436726 0.162011 0.985822   N2 0.0697517 0.258756 0.963421 
+   txt003 
+STRI 
+  V0 0.178322 0.303616 2.63611   V1 0.249157 0.249157 2.63611   V2 0.407593 0.407593 2.58889 
+  N0 0.134219 0.231413 0.963552   N1 0.189037 0.189037 0.963603   N2 0.118345 0.118345 0.985895 
+   txt003 
+STRI 
+  V0 0.407593 0.407593 2.58889   V1 0.291715 0.49668 2.58889   V2 0.178322 0.303616 2.63611 
+  N0 0.118345 0.118345 0.985895   N1 0.0840299 0.144879 0.985875   N2 0.134219 0.231413 0.963552 
+   txt003 
+STRI 
+  V0 0.249157 0.249157 2.63611   V1 0.303616 0.178322 2.63611   V2 0.49668 0.291715 2.58889 
+  N0 0.189037 0.189037 0.963603   N1 0.231413 0.134219 0.963552   N2 0.144879 0.0840299 0.985875 
+   txt003 
+STRI 
+  V0 0.49668 0.291715 2.58889   V1 0.407593 0.407593 2.58889   V2 0.249157 0.249157 2.63611 
+  N0 0.144879 0.0840299 0.985875   N1 0.118345 0.118345 0.985895   N2 0.189037 0.189037 0.963603 
+   txt003 
+STRI 
+  V0 0.303616 0.178322 2.63611   V1 0.338579 0.0942301 2.63611   V2 0.553875 0.15415 2.58889 
+  N0 0.231413 0.134219 0.963552   N1 0.258756 0.0697517 0.963421   N2 0.162011 0.0436726 0.985822 
+   txt003 
+STRI 
+  V0 0.553875 0.15415 2.58889   V1 0.49668 0.291715 2.58889   V2 0.303616 0.178322 2.63611 
+  N0 0.162011 0.0436726 0.985822   N1 0.144879 0.0840299 0.985875   N2 0.231413 0.134219 0.963552 
+   txt003 
+STRI 
+  V0 0.338579 0.0942301 2.63611   V1 0.350926 5.55112e-17 2.63611   V2 0.574074 2.22045e-16 2.58889 
+  N0 0.258756 0.0697517 0.963421   N1 0.268354 0 0.96332   N2 0.168031 -1.93429e-17 0.985782 
+   txt003 
+STRI 
+  V0 0.574074 2.22045e-16 2.58889   V1 0.553875 0.15415 2.58889   V2 0.338579 0.0942301 2.63611 
+  N0 0.168031 -1.93429e-17 0.985782   N1 0.162011 0.0436726 0.985822   N2 0.258756 0.0697517 0.963421 
+   txt003 
+STRI 
+  V0 0 0.574074 2.58889   V1 0.15415 0.553875 2.58889   V2 0.221528 0.795972 2.55 
+  N0 -0 0.168031 0.985782   N1 0.0436726 0.162011 0.985822   N2 0.0385545 0.143025 0.988968 
+   txt003 
+STRI 
+  V0 0.221528 0.795972 2.55   V1 0 0.825 2.55   V2 0 0.574074 2.58889 
+  N0 0.0385545 0.143025 0.988968   N1 -0 0.14834 0.988936   N2 -0 0.168031 0.985782 
+   txt003 
+STRI 
+  V0 0.15415 0.553875 2.58889   V1 0.291715 0.49668 2.58889   V2 0.419222 0.713778 2.55 
+  N0 0.0436726 0.162011 0.985822   N1 0.0840299 0.144879 0.985875   N2 0.0741814 0.127899 0.989009 
+   txt003 
+STRI 
+  V0 0.419222 0.713778 2.55   V1 0.221528 0.795972 2.55   V2 0.15415 0.553875 2.58889 
+  N0 0.0741814 0.127899 0.989009   N1 0.0385545 0.143025 0.988968   N2 0.0436726 0.162011 0.985822 
+   txt003 
+STRI 
+  V0 0.291715 0.49668 2.58889   V1 0.407593 0.407593 2.58889   V2 0.58575 0.58575 2.55 
+  N0 0.0840299 0.144879 0.985875   N1 0.118345 0.118345 0.985895   N2 0.104474 0.104474 0.989025 
+   txt003 
+STRI 
+  V0 0.58575 0.58575 2.55   V1 0.419222 0.713778 2.55   V2 0.291715 0.49668 2.58889 
+  N0 0.104474 0.104474 0.989025   N1 0.0741814 0.127899 0.989009   N2 0.0840299 0.144879 0.985875 
+   txt003 
+STRI 
+  V0 0.407593 0.407593 2.58889   V1 0.49668 0.291715 2.58889   V2 0.713778 0.419222 2.55 
+  N0 0.118345 0.118345 0.985895   N1 0.144879 0.0840299 0.985875   N2 0.127899 0.0741814 0.989009 
+   txt003 
+STRI 
+  V0 0.713778 0.419222 2.55   V1 0.58575 0.58575 2.55   V2 0.407593 0.407593 2.58889 
+  N0 0.127899 0.0741814 0.989009   N1 0.104474 0.104474 0.989025   N2 0.118345 0.118345 0.985895 
+   txt003 
+STRI 
+  V0 0.49668 0.291715 2.58889   V1 0.553875 0.15415 2.58889   V2 0.795972 0.221528 2.55 
+  N0 0.144879 0.0840299 0.985875   N1 0.162011 0.0436726 0.985822   N2 0.143025 0.0385545 0.988968 
+   txt003 
+STRI 
+  V0 0.795972 0.221528 2.55   V1 0.713778 0.419222 2.55   V2 0.49668 0.291715 2.58889 
+  N0 0.143025 0.0385545 0.988968   N1 0.127899 0.0741814 0.989009   N2 0.144879 0.0840299 0.985875 
+   txt003 
+STRI 
+  V0 0.553875 0.15415 2.58889   V1 0.574074 2.22045e-16 2.58889   V2 0.825 1.11022e-16 2.55 
+  N0 0.162011 0.0436726 0.985822   N1 0.168031 -1.93429e-17 0.985782   N2 0.14834 -2.37649e-17 0.988936 
+   txt003 
+STRI 
+  V0 0.825 1.11022e-16 2.55   V1 0.795972 0.221528 2.55   V2 0.553875 0.15415 2.58889 
+  N0 0.14834 -2.37649e-17 0.988936   N1 0.143025 0.0385545 0.988968   N2 0.162011 0.0436726 0.985822 
+   txt003 
+STRI 
+  V0 0 0.825 2.55   V1 0.221528 0.795972 2.55   V2 0.284431 1.02199 2.51111 
+  N0 -0 0.14834 0.988936   N1 0.0385545 0.143025 0.988968   N2 0.0503275 0.186699 0.981127 
+   txt003 
+STRI 
+  V0 0.284431 1.02199 2.51111   V1 0 1.05926 2.51111   V2 0 0.825 2.55 
+  N0 0.0503275 0.186699 0.981127   N1 -0 0.193633 0.981074   N2 -0 0.14834 0.988936 
+   txt003 
+STRI 
+  V0 0.221528 0.795972 2.55   V1 0.419222 0.713778 2.55   V2 0.538261 0.916455 2.51111 
+  N0 0.0385545 0.143025 0.988968   N1 0.0741814 0.127899 0.989009   N2 0.0968361 0.166959 0.981197 
+   txt003 
+STRI 
+  V0 0.538261 0.916455 2.51111   V1 0.284431 1.02199 2.51111   V2 0.221528 0.795972 2.55 
+  N0 0.0968361 0.166959 0.981197   N1 0.0503275 0.186699 0.981127   N2 0.0385545 0.143025 0.988968 
+   txt003 
+STRI 
+  V0 0.419222 0.713778 2.55   V1 0.58575 0.58575 2.55   V2 0.752074 0.752074 2.51111 
+  N0 0.0741814 0.127899 0.989009   N1 0.104474 0.104474 0.989025   N2 0.136382 0.136382 0.981224 
+   txt003 
+STRI 
+  V0 0.752074 0.752074 2.51111   V1 0.538261 0.916455 2.51111   V2 0.419222 0.713778 2.55 
+  N0 0.136382 0.136382 0.981224   N1 0.0968361 0.166959 0.981197   N2 0.0741814 0.127899 0.989009 
+   txt003 
+STRI 
+  V0 0.58575 0.58575 2.55   V1 0.713778 0.419222 2.55   V2 0.916455 0.538261 2.51111 
+  N0 0.104474 0.104474 0.989025   N1 0.127899 0.0741814 0.989009   N2 0.166959 0.0968361 0.981197 
+   txt003 
+STRI 
+  V0 0.916455 0.538261 2.51111   V1 0.752074 0.752074 2.51111   V2 0.58575 0.58575 2.55 
+  N0 0.166959 0.0968361 0.981197   N1 0.136382 0.136382 0.981224   N2 0.104474 0.104474 0.989025 
+   txt003 
+STRI 
+  V0 0.713778 0.419222 2.55   V1 0.795972 0.221528 2.55   V2 1.02199 0.284431 2.51111 
+  N0 0.127899 0.0741814 0.989009   N1 0.143025 0.0385545 0.988968   N2 0.186699 0.0503275 0.981127 
+   txt003 
+STRI 
+  V0 1.02199 0.284431 2.51111   V1 0.916455 0.538261 2.51111   V2 0.713778 0.419222 2.55 
+  N0 0.186699 0.0503275 0.981127   N1 0.166959 0.0968361 0.981197   N2 0.127899 0.0741814 0.989009 
+   txt003 
+STRI 
+  V0 0.795972 0.221528 2.55   V1 0.825 1.11022e-16 2.55   V2 1.05926 4.44089e-16 2.51111 
+  N0 0.143025 0.0385545 0.988968   N1 0.14834 -2.37649e-17 0.988936   N2 0.193633 -7.24819e-17 0.981074 
+   txt003 
+STRI 
+  V0 1.05926 4.44089e-16 2.51111   V1 1.02199 0.284431 2.51111   V2 0.795972 0.221528 2.55 
+  N0 0.193633 -7.24819e-17 0.981074   N1 0.186699 0.0503275 0.981127   N2 0.143025 0.0385545 0.988968 
+   txt003 
+STRI 
+  V0 0 1.05926 2.51111   V1 0.284431 1.02199 2.51111   V2 0.330924 1.18904 2.46389 
+  N0 -0 0.193633 0.981074   N1 0.0503275 0.186699 0.981127   N2 0.101459 0.376378 0.920894 
+   txt003 
+STRI 
+  V0 0.330924 1.18904 2.46389   V1 0 1.23241 2.46389   V2 0 1.05926 2.51111 
+  N0 0.101459 0.376378 0.920894   N1 -0 0.390293 0.920691   N2 -0 0.193633 0.981074 
+   txt003 
+STRI 
+  V0 0.284431 1.02199 2.51111   V1 0.538261 0.916455 2.51111   V2 0.626246 1.06626 2.46389 
+  N0 0.0503275 0.186699 0.981127   N1 0.0968361 0.166959 0.981197   N2 0.195261 0.336657 0.92116 
+   txt003 
+STRI 
+  V0 0.626246 1.06626 2.46389   V1 0.330924 1.18904 2.46389   V2 0.284431 1.02199 2.51111 
+  N0 0.195261 0.336657 0.92116   N1 0.101459 0.376378 0.920894   N2 0.0503275 0.186699 0.981127 
+   txt003 
+STRI 
+  V0 0.538261 0.916455 2.51111   V1 0.752074 0.752074 2.51111   V2 0.875009 0.875009 2.46389 
+  N0 0.0968361 0.166959 0.981197   N1 0.136382 0.136382 0.981224   N2 0.275025 0.275025 0.921262 
+   txt003 
+STRI 
+  V0 0.875009 0.875009 2.46389   V1 0.626246 1.06626 2.46389   V2 0.538261 0.916455 2.51111 
+  N0 0.275025 0.275025 0.921262   N1 0.195261 0.336657 0.92116   N2 0.0968361 0.166959 0.981197 
+   txt003 
+STRI 
+  V0 0.752074 0.752074 2.51111   V1 0.916455 0.538261 2.51111   V2 1.06626 0.626246 2.46389 
+  N0 0.136382 0.136382 0.981224   N1 0.166959 0.0968361 0.981197   N2 0.336657 0.195261 0.92116 
+   txt003 
+STRI 
+  V0 1.06626 0.626246 2.46389   V1 0.875009 0.875009 2.46389   V2 0.752074 0.752074 2.51111 
+  N0 0.336657 0.195261 0.92116   N1 0.275025 0.275025 0.921262   N2 0.136382 0.136382 0.981224 
+   txt003 
+STRI 
+  V0 0.916455 0.538261 2.51111   V1 1.02199 0.284431 2.51111   V2 1.18904 0.330924 2.46389 
+  N0 0.166959 0.0968361 0.981197   N1 0.186699 0.0503275 0.981127   N2 0.376378 0.101459 0.920894 
+   txt003 
+STRI 
+  V0 1.18904 0.330924 2.46389   V1 1.06626 0.626246 2.46389   V2 0.916455 0.538261 2.51111 
+  N0 0.376378 0.101459 0.920894   N1 0.336657 0.195261 0.92116   N2 0.166959 0.0968361 0.981197 
+   txt003 
+STRI 
+  V0 1.02199 0.284431 2.51111   V1 1.05926 4.44089e-16 2.51111   V2 1.23241 4.44089e-16 2.46389 
+  N0 0.186699 0.0503275 0.981127   N1 0.193633 -7.24819e-17 0.981074   N2 0.390293 -8.37138e-17 0.920691 
+   txt003 
+STRI 
+  V0 1.23241 4.44089e-16 2.46389   V1 1.18904 0.330924 2.46389   V2 1.02199 0.284431 2.51111 
+  N0 0.390293 -8.37138e-17 0.920691   N1 0.376378 0.101459 0.920894   N2 0.186699 0.0503275 0.981127 
+   txt003 
+STRI 
+  V0 0 1.23241 2.46389   V1 0.330924 1.18904 2.46389   V2 0.349074 1.25426 2.4 
+  N0 -0 0.390293 0.920691   N1 0.101459 0.376378 0.920894   N2 0.260275 0.965535 -1.02004e-15 
+   txt003 
+STRI 
+  V0 0.349074 1.25426 2.4   V1 0 1.3 2.4   V2 0 1.23241 2.46389 
+  N0 0.260275 0.965535 -1.02004e-15   N1 0 1 -9.86865e-16   N2 -0 0.390293 0.920691 
+   txt003 
+STRI 
+  V0 0.330924 1.18904 2.46389   V1 0.626246 1.06626 2.46389   V2 0.660593 1.12474 2.4 
+  N0 0.101459 0.376378 0.920894   N1 0.195261 0.336657 0.92116   N2 0.501718 0.865031 -9.69705e-16 
+   txt003 
+STRI 
+  V0 0.660593 1.12474 2.4   V1 0.349074 1.25426 2.4   V2 0.330924 1.18904 2.46389 
+  N0 0.501718 0.865031 -9.69705e-16   N1 0.260275 0.965535 -1.02004e-15   N2 0.101459 0.376378 0.920894 
+   txt003 
+STRI 
+  V0 0.626246 1.06626 2.46389   V1 0.875009 0.875009 2.46389   V2 0.923 0.923 2.4 
+  N0 0.195261 0.336657 0.92116   N1 0.275025 0.275025 0.921262   N2 0.707107 0.707107 -7.41433e-16 
+   txt003 
+STRI 
+  V0 0.923 0.923 2.4   V1 0.660593 1.12474 2.4   V2 0.626246 1.06626 2.46389 
+  N0 0.707107 0.707107 -7.41433e-16   N1 0.501718 0.865031 -9.69705e-16   N2 0.195261 0.336657 0.92116 
+   txt003 
+STRI 
+  V0 0.875009 0.875009 2.46389   V1 1.06626 0.626246 2.46389   V2 1.12474 0.660593 2.4 
+  N0 0.275025 0.275025 0.921262   N1 0.336657 0.195261 0.92116   N2 0.865031 0.501718 -4.67305e-16 
+   txt003 
+STRI 
+  V0 1.12474 0.660593 2.4   V1 0.923 0.923 2.4   V2 0.875009 0.875009 2.46389 
+  N0 0.865031 0.501718 -4.67305e-16   N1 0.707107 0.707107 -7.41433e-16   N2 0.275025 0.275025 0.921262 
+   txt003 
+STRI 
+  V0 1.06626 0.626246 2.46389   V1 1.18904 0.330924 2.46389   V2 1.25426 0.349074 2.4 
+  N0 0.336657 0.195261 0.92116   N1 0.376378 0.101459 0.920894   N2 0.965535 0.260275 -5.24893e-16 
+   txt003 
+STRI 
+  V0 1.25426 0.349074 2.4   V1 1.12474 0.660593 2.4   V2 1.06626 0.626246 2.46389 
+  N0 0.965535 0.260275 -5.24893e-16   N1 0.865031 0.501718 -4.67305e-16   N2 0.336657 0.195261 0.92116 
+   txt003 
+STRI 
+  V0 1.18904 0.330924 2.46389   V1 1.23241 4.44089e-16 2.46389   V2 1.3 6.66134e-16 2.4 
+  N0 0.376378 0.101459 0.920894   N1 0.390293 -8.37138e-17 0.920691   N2 1 -4.06675e-16 -1.4803e-15 
+   txt003 
+STRI 
+  V0 1.3 6.66134e-16 2.4   V1 1.25426 0.349074 2.4   V2 1.18904 0.330924 2.46389 
+  N0 1 -4.06675e-16 -1.4803e-15   N1 0.965535 0.260275 -5.24893e-16   N2 0.376378 0.101459 0.920894 
+   txt003 
+STRI 
+  V0 0.584584 0.162696 0.00590278   V1 0.605903 0 0.00590278   V2 0 0 0 
+  N0 0.0218614 0.00589307 -0.999744   N1 0.0226746 0 -0.999743   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0.524218 0.307888 0.00590278   V1 0.584584 0.162696 0.00590278   V2 0 0 0 
+  N0 0.0195486 0.0113382 -0.999745   N1 0.0218614 0.00589307 -0.999744   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0.430191 0.430191 0.00590278   V1 0.524218 0.307888 0.00590278   V2 0 0 0 
+  N0 0.015968 0.015968 -0.999745   N1 0.0195486 0.0113382 -0.999745   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0.307888 0.524218 0.00590278   V1 0.430191 0.430191 0.00590278   V2 0 0 0 
+  N0 0.0113382 0.0195486 -0.999745   N1 0.015968 0.015968 -0.999745   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0.162696 0.584584 0.00590278   V1 0.307888 0.524218 0.00590278   V2 0 0 0 
+  N0 0.00589307 0.0218614 -0.999744   N1 0.0113382 0.0195486 -0.999745   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0 0.605903 0.00590278   V1 0.162696 0.584584 0.00590278   V2 0 0 0 
+  N0 4.94615e-18 0.0226746 -0.999743   N1 0.00589307 0.0218614 -0.999744   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0.605903 0 0.00590278   V1 0.584584 0.162696 0.00590278   V2 0.986255 0.274486 0.0222222 
+  N0 0.0226746 0 -0.999743   N1 0.0218614 0.00589307 -0.999744   N2 0.0601415 0.0162121 -0.998058 
+   txt003 
+STRI 
+  V0 0.986255 0.274486 0.0222222   V1 1.02222 0 0.0222222   V2 0.605903 0 0.00590278 
+  N0 0.0601415 0.0162121 -0.998058   N1 0.0623783 0 -0.998053   N2 0.0226746 0 -0.999743 
+   txt003 
+STRI 
+  V0 0.584584 0.162696 0.00590278   V1 0.524218 0.307888 0.00590278   V2 0.884412 0.51944 0.0222222 
+  N0 0.0218614 0.00589307 -0.999744   N1 0.0195486 0.0113382 -0.999745   N2 0.0537792 0.0311919 -0.998066 
+   txt003 
+STRI 
+  V0 0.884412 0.51944 0.0222222   V1 0.986255 0.274486 0.0222222   V2 0.584584 0.162696 0.00590278 
+  N0 0.0537792 0.0311919 -0.998066   N1 0.0601415 0.0162121 -0.998058   N2 0.0218614 0.00589307 -0.999744 
+   txt003 
+STRI 
+  V0 0.524218 0.307888 0.00590278   V1 0.430191 0.430191 0.00590278   V2 0.725778 0.725778 0.0222222 
+  N0 0.0195486 0.0113382 -0.999745   N1 0.015968 0.015968 -0.999745   N2 0.0439291 0.0439291 -0.998068 
+   txt003 
+STRI 
+  V0 0.725778 0.725778 0.0222222   V1 0.884412 0.51944 0.0222222   V2 0.524218 0.307888 0.00590278 
+  N0 0.0439291 0.0439291 -0.998068   N1 0.0537792 0.0311919 -0.998066   N2 0.0195486 0.0113382 -0.999745 
+   txt003 
+STRI 
+  V0 0.430191 0.430191 0.00590278   V1 0.307888 0.524218 0.00590278   V2 0.51944 0.884412 0.0222222 
+  N0 0.015968 0.015968 -0.999745   N1 0.0113382 0.0195486 -0.999745   N2 0.0311919 0.0537792 -0.998066 
+   txt003 
+STRI 
+  V0 0.51944 0.884412 0.0222222   V1 0.725778 0.725778 0.0222222   V2 0.430191 0.430191 0.00590278 
+  N0 0.0311919 0.0537792 -0.998066   N1 0.0439291 0.0439291 -0.998068   N2 0.015968 0.015968 -0.999745 
+   txt003 
+STRI 
+  V0 0.307888 0.524218 0.00590278   V1 0.162696 0.584584 0.00590278   V2 0.274486 0.986255 0.0222222 
+  N0 0.0113382 0.0195486 -0.999745   N1 0.00589307 0.0218614 -0.999744   N2 0.0162121 0.0601415 -0.998058 
+   txt003 
+STRI 
+  V0 0.274486 0.986255 0.0222222   V1 0.51944 0.884412 0.0222222   V2 0.307888 0.524218 0.00590278 
+  N0 0.0162121 0.0601415 -0.998058   N1 0.0311919 0.0537792 -0.998066   N2 0.0113382 0.0195486 -0.999745 
+   txt003 
+STRI 
+  V0 0.162696 0.584584 0.00590278   V1 0 0.605903 0.00590278   V2 -2.22045e-16 1.02222 0.0222222 
+  N0 0.00589307 0.0218614 -0.999744   N1 4.94615e-18 0.0226746 -0.999743   N2 0 0.0623783 -0.998053 
+   txt003 
+STRI 
+  V0 -2.22045e-16 1.02222 0.0222222   V1 0.274486 0.986255 0.0222222   V2 0.162696 0.584584 0.00590278 
+  N0 0 0.0623783 -0.998053   N1 0.0162121 0.0601415 -0.998058   N2 0.00589307 0.0218614 -0.999744 
+   txt003 
+STRI 
+  V0 1.02222 0 0.0222222   V1 0.986255 0.274486 0.0222222   V2 1.23918 0.344878 0.046875 
+  N0 0.0623783 0 -0.998053   N1 0.0601415 0.0162121 -0.998058   N2 0.136353 0.0367561 -0.989978 
+   txt003 
+STRI 
+  V0 1.23918 0.344878 0.046875   V1 1.28438 0 0.046875   V2 1.02222 0 0.0222222 
+  N0 0.136353 0.0367561 -0.989978   N1 0.141421 0 -0.989949   N2 0.0623783 0 -0.998053 
+   txt003 
+STRI 
+  V0 0.986255 0.274486 0.0222222   V1 0.884412 0.51944 0.0222222   V2 1.11122 0.652653 0.046875 
+  N0 0.0601415 0.0162121 -0.998058   N1 0.0537792 0.0311919 -0.998066   N2 0.121932 0.0707208 -0.990016 
+   txt003 
+STRI 
+  V0 1.11122 0.652653 0.046875   V1 1.23918 0.344878 0.046875   V2 0.986255 0.274486 0.0222222 
+  N0 0.121932 0.0707208 -0.990016   N1 0.136353 0.0367561 -0.989978   N2 0.0601415 0.0162121 -0.998058 
+   txt003 
+STRI 
+  V0 0.884412 0.51944 0.0222222   V1 0.725778 0.725778 0.0222222   V2 0.911906 0.911906 0.046875 
+  N0 0.0537792 0.0311919 -0.998066   N1 0.0439291 0.0439291 -0.998068   N2 0.0996006 0.0996006 -0.99003 
+   txt003 
+STRI 
+  V0 0.911906 0.911906 0.046875   V1 1.11122 0.652653 0.046875   V2 0.884412 0.51944 0.0222222 
+  N0 0.0996006 0.0996006 -0.99003   N1 0.121932 0.0707208 -0.990016   N2 0.0537792 0.0311919 -0.998066 
+   txt003 
+STRI 
+  V0 0.725778 0.725778 0.0222222   V1 0.51944 0.884412 0.0222222   V2 0.652653 1.11122 0.046875 
+  N0 0.0439291 0.0439291 -0.998068   N1 0.0311919 0.0537792 -0.998066   N2 0.0707208 0.121932 -0.990016 
+   txt003 
+STRI 
+  V0 0.652653 1.11122 0.046875   V1 0.911906 0.911906 0.046875   V2 0.725778 0.725778 0.0222222 
+  N0 0.0707208 0.121932 -0.990016   N1 0.0996006 0.0996006 -0.99003   N2 0.0439291 0.0439291 -0.998068 
+   txt003 
+STRI 
+  V0 0.51944 0.884412 0.0222222   V1 0.274486 0.986255 0.0222222   V2 0.344878 1.23918 0.046875 
+  N0 0.0311919 0.0537792 -0.998066   N1 0.0162121 0.0601415 -0.998058   N2 0.0367561 0.136353 -0.989978 
+   txt003 
+STRI 
+  V0 0.344878 1.23918 0.046875   V1 0.652653 1.11122 0.046875   V2 0.51944 0.884412 0.0222222 
+  N0 0.0367561 0.136353 -0.989978   N1 0.0707208 0.121932 -0.990016   N2 0.0311919 0.0537792 -0.998066 
+   txt003 
+STRI 
+  V0 0.274486 0.986255 0.0222222   V1 -2.22045e-16 1.02222 0.0222222   V2 2.22045e-16 1.28437 0.046875 
+  N0 0.0162121 0.0601415 -0.998058   N1 0 0.0623783 -0.998053   N2 0 0.141421 -0.989949 
+   txt003 
+STRI 
+  V0 2.22045e-16 1.28437 0.046875   V1 0.344878 1.23918 0.046875   V2 0.274486 0.986255 0.0222222 
+  N0 0 0.141421 -0.989949   N1 0.0367561 0.136353 -0.989978   N2 0.0162121 0.0601415 -0.998058 
+   txt003 
+STRI 
+  V0 1.28438 0 0.046875   V1 1.23918 0.344878 0.046875   V2 1.37754 0.383385 0.0777778 
+  N0 0.141421 0 -0.989949   N1 0.136353 0.0367561 -0.989978   N2 0.316788 0.085395 -0.944644 
+   txt003 
+STRI 
+  V0 1.37754 0.383385 0.0777778   V1 1.42778 0 0.0777778   V2 1.28438 0 0.046875 
+  N0 0.316788 0.085395 -0.944644   N1 0.328521 0 -0.944497   N2 0.141421 0 -0.989949 
+   txt003 
+STRI 
+  V0 1.23918 0.344878 0.046875   V1 1.11122 0.652653 0.046875   V2 1.23529 0.725523 0.0777778 
+  N0 0.136353 0.0367561 -0.989978   N1 0.121932 0.0707208 -0.990016   N2 0.283331 0.164332 -0.944838 
+   txt003 
+STRI 
+  V0 1.23529 0.725523 0.0777778   V1 1.37754 0.383385 0.0777778   V2 1.23918 0.344878 0.046875 
+  N0 0.283331 0.164332 -0.944838   N1 0.316788 0.085395 -0.944644   N2 0.136353 0.0367561 -0.989978 
+   txt003 
+STRI 
+  V0 1.11122 0.652653 0.046875   V1 0.911906 0.911906 0.046875   V2 1.01372 1.01372 0.0777778 
+  N0 0.121932 0.0707208 -0.990016   N1 0.0996006 0.0996006 -0.99003   N2 0.231454 0.231454 -0.944912 
+   txt003 
+STRI 
+  V0 1.01372 1.01372 0.0777778   V1 1.23529 0.725523 0.0777778   V2 1.11122 0.652653 0.046875 
+  N0 0.231454 0.231454 -0.944912   N1 0.283331 0.164332 -0.944838   N2 0.121932 0.0707208 -0.990016 
+   txt003 
+STRI 
+  V0 0.911906 0.911906 0.046875   V1 0.652653 1.11122 0.046875   V2 0.725523 1.23529 0.0777778 
+  N0 0.0996006 0.0996006 -0.99003   N1 0.0707208 0.121932 -0.990016   N2 0.164332 0.283331 -0.944838 
+   txt003 
+STRI 
+  V0 0.725523 1.23529 0.0777778   V1 1.01372 1.01372 0.0777778   V2 0.911906 0.911906 0.046875 
+  N0 0.164332 0.283331 -0.944838   N1 0.231454 0.231454 -0.944912   N2 0.0996006 0.0996006 -0.99003 
+   txt003 
+STRI 
+  V0 0.652653 1.11122 0.046875   V1 0.344878 1.23918 0.046875   V2 0.383385 1.37754 0.0777778 
+  N0 0.0707208 0.121932 -0.990016   N1 0.0367561 0.136353 -0.989978   N2 0.085395 0.316788 -0.944644 
+   txt003 
+STRI 
+  V0 0.383385 1.37754 0.0777778   V1 0.725523 1.23529 0.0777778   V2 0.652653 1.11122 0.046875 
+  N0 0.085395 0.316788 -0.944644   N1 0.164332 0.283331 -0.944838   N2 0.0707208 0.121932 -0.990016 
+   txt003 
+STRI 
+  V0 0.344878 1.23918 0.046875   V1 2.22045e-16 1.28437 0.046875   V2 -2.22045e-16 1.42778 0.0777778 
+  N0 0.0367561 0.136353 -0.989978   N1 0 0.141421 -0.989949   N2 6.08223e-17 0.328521 -0.944497 
+   txt003 
+STRI 
+  V0 -2.22045e-16 1.42778 0.0777778   V1 0.383385 1.37754 0.0777778   V2 0.344878 1.23918 0.046875 
+  N0 6.08223e-17 0.328521 -0.944497   N1 0.085395 0.316788 -0.944644   N2 0.0367561 0.136353 -0.989978 
+   txt003 
+STRI 
+  V0 1.42778 0 0.0777778   V1 1.37754 0.383385 0.0777778   V2 1.4355 0.399515 0.112847 
+  N0 0.328521 0 -0.944497   N1 0.316788 0.085395 -0.944644   N2 0.743044 0.200299 -0.638566 
+   txt003 
+STRI 
+  V0 1.4355 0.399515 0.112847   V1 1.48785 0 0.112847   V2 1.42778 0 0.0777778 
+  N0 0.743044 0.200299 -0.638566   N1 0.770022 0 -0.638018   N2 0.328521 0 -0.944497 
+   txt003 
+STRI 
+  V0 1.37754 0.383385 0.0777778   V1 1.23529 0.725523 0.0777778   V2 1.28726 0.756047 0.112847 
+  N0 0.316788 0.085395 -0.944644   N1 0.283331 0.164332 -0.944838   N2 0.665182 0.385806 -0.639286 
+   txt003 
+STRI 
+  V0 1.28726 0.756047 0.112847   V1 1.4355 0.399515 0.112847   V2 1.37754 0.383385 0.0777778 
+  N0 0.665182 0.385806 -0.639286   N1 0.743044 0.200299 -0.638566   N2 0.316788 0.085395 -0.944644 
+   txt003 
+STRI 
+  V0 1.23529 0.725523 0.0777778   V1 1.01372 1.01372 0.0777778   V2 1.05637 1.05637 0.112847 
+  N0 0.283331 0.164332 -0.944838   N1 0.231454 0.231454 -0.944912   N2 0.543581 0.543581 -0.639562 
+   txt003 
+STRI 
+  V0 1.05637 1.05637 0.112847   V1 1.28726 0.756047 0.112847   V2 1.23529 0.725523 0.0777778 
+  N0 0.543581 0.543581 -0.639562   N1 0.665182 0.385806 -0.639286   N2 0.283331 0.164332 -0.944838 
+   txt003 
+STRI 
+  V0 1.01372 1.01372 0.0777778   V1 0.725523 1.23529 0.0777778   V2 0.756047 1.28726 0.112847 
+  N0 0.231454 0.231454 -0.944912   N1 0.164332 0.283331 -0.944838   N2 0.385806 0.665182 -0.639286 
+   txt003 
+STRI 
+  V0 0.756047 1.28726 0.112847   V1 1.05637 1.05637 0.112847   V2 1.01372 1.01372 0.0777778 
+  N0 0.385806 0.665182 -0.639286   N1 0.543581 0.543581 -0.639562   N2 0.231454 0.231454 -0.944912 
+   txt003 
+STRI 
+  V0 0.725523 1.23529 0.0777778   V1 0.383385 1.37754 0.0777778   V2 0.399515 1.4355 0.112847 
+  N0 0.164332 0.283331 -0.944838   N1 0.085395 0.316788 -0.944644   N2 0.200299 0.743044 -0.638566 
+   txt003 
+STRI 
+  V0 0.399515 1.4355 0.112847   V1 0.756047 1.28726 0.112847   V2 0.725523 1.23529 0.0777778 
+  N0 0.200299 0.743044 -0.638566   N1 0.385806 0.665182 -0.639286   N2 0.164332 0.283331 -0.944838 
+   txt003 
+STRI 
+  V0 0.383385 1.37754 0.0777778   V1 -2.22045e-16 1.42778 0.0777778   V2 0 1.48785 0.112847 
+  N0 0.085395 0.316788 -0.944644   N1 6.08223e-17 0.328521 -0.944497   N2 1.36806e-16 0.770022 -0.638018 
+   txt003 
+STRI 
+  V0 0 1.48785 0.112847   V1 0.399515 1.4355 0.112847   V2 0.383385 1.37754 0.0777778 
+  N0 1.36806e-16 0.770022 -0.638018   N1 0.200299 0.743044 -0.638566   N2 0.085395 0.316788 -0.944644 
+   txt003 
+STRI 
+  V0 1.48785 0 0.112847   V1 1.4355 0.399515 0.112847   V2 1.44722 0.402778 0.15 
+  N0 0.770022 0 -0.638018   N1 0.743044 0.200299 -0.638566   N2 0.965535 0.260275 -2.07142e-16 
+   txt003 
+STRI 
+  V0 1.44722 0.402778 0.15   V1 1.5 0 0.15   V2 1.48785 0 0.112847 
+  N0 0.965535 0.260275 -2.07142e-16   N1 1 0 0   N2 0.770022 0 -0.638018 
+   txt003 
+STRI 
+  V0 1.4355 0.399515 0.112847   V1 1.28726 0.756047 0.112847   V2 1.29778 0.762222 0.15 
+  N0 0.743044 0.200299 -0.638566   N1 0.665182 0.385806 -0.639286   N2 0.865031 0.501718 -5.46348e-16 
+   txt003 
+STRI 
+  V0 1.29778 0.762222 0.15   V1 1.44722 0.402778 0.15   V2 1.4355 0.399515 0.112847 
+  N0 0.865031 0.501718 -5.46348e-16   N1 0.965535 0.260275 -2.07142e-16   N2 0.743044 0.200299 -0.638566 
+   txt003 
+STRI 
+  V0 1.28726 0.756047 0.112847   V1 1.05637 1.05637 0.112847   V2 1.065 1.065 0.15 
+  N0 0.665182 0.385806 -0.639286   N1 0.543581 0.543581 -0.639562   N2 0.707107 0.707107 -6.97819e-16 
+   txt003 
+STRI 
+  V0 1.065 1.065 0.15   V1 1.29778 0.762222 0.15   V2 1.28726 0.756047 0.112847 
+  N0 0.707107 0.707107 -6.97819e-16   N1 0.865031 0.501718 -5.46348e-16   N2 0.665182 0.385806 -0.639286 
+   txt003 
+STRI 
+  V0 1.05637 1.05637 0.112847   V1 0.756047 1.28726 0.112847   V2 0.762222 1.29778 0.15 
+  N0 0.543581 0.543581 -0.639562   N1 0.385806 0.665182 -0.639286   N2 0.501718 0.865031 -5.46348e-16 
+   txt003 
+STRI 
+  V0 0.762222 1.29778 0.15   V1 1.065 1.065 0.15   V2 1.05637 1.05637 0.112847 
+  N0 0.501718 0.865031 -5.46348e-16   N1 0.707107 0.707107 -6.97819e-16   N2 0.543581 0.543581 -0.639562 
+   txt003 
+STRI 
+  V0 0.756047 1.28726 0.112847   V1 0.399515 1.4355 0.112847   V2 0.402778 1.44722 0.15 
+  N0 0.385806 0.665182 -0.639286   N1 0.200299 0.743044 -0.638566   N2 0.260275 0.965535 -2.07142e-16 
+   txt003 
+STRI 
+  V0 0.402778 1.44722 0.15   V1 0.762222 1.29778 0.15   V2 0.756047 1.28726 0.112847 
+  N0 0.260275 0.965535 -2.07142e-16   N1 0.501718 0.865031 -5.46348e-16   N2 0.385806 0.665182 -0.639286 
+   txt003 
+STRI 
+  V0 0.399515 1.4355 0.112847   V1 0 1.48785 0.112847   V2 0 1.5 0.15 
+  N0 0.200299 0.743044 -0.638566   N1 1.36806e-16 0.770022 -0.638018   N2 0 1 -0 
+   txt003 
+STRI 
+  V0 0 1.5 0.15   V1 0.402778 1.44722 0.15   V2 0.399515 1.4355 0.112847 
+  N0 0 1 -0   N1 0.260275 0.965535 -2.07142e-16   N2 0.200299 0.743044 -0.638566 
+   txt003 
+STRI 
+  V0 -0.162696 0.584584 0.00590278   V1 0 0.605903 0.00590278   V2 0 0 0 
+  N0 -0.00589307 0.0218614 -0.999744   N1 0 0.0226746 -0.999743   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 -0.307888 0.524218 0.00590278   V1 -0.162696 0.584584 0.00590278   V2 0 0 0 
+  N0 -0.0113382 0.0195486 -0.999745   N1 -0.00589307 0.0218614 -0.999744   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 -0.430191 0.430191 0.00590278   V1 -0.307888 0.524218 0.00590278   V2 0 0 0 
+  N0 -0.015968 0.015968 -0.999745   N1 -0.0113382 0.0195486 -0.999745   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 -0.524218 0.307888 0.00590278   V1 -0.430191 0.430191 0.00590278   V2 0 0 0 
+  N0 -0.0195486 0.0113382 -0.999745   N1 -0.015968 0.015968 -0.999745   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 -0.584584 0.162696 0.00590278   V1 -0.524218 0.307888 0.00590278   V2 0 0 0 
+  N0 -0.0218614 0.00589307 -0.999744   N1 -0.0195486 0.0113382 -0.999745   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 -0.605903 0 0.00590278   V1 -0.584584 0.162696 0.00590278   V2 0 0 0 
+  N0 -0.0226746 4.94615e-18 -0.999743   N1 -0.0218614 0.00589307 -0.999744   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0 0.605903 0.00590278   V1 -0.162696 0.584584 0.00590278   V2 -0.274486 0.986255 0.0222222 
+  N0 0 0.0226746 -0.999743   N1 -0.00589307 0.0218614 -0.999744   N2 -0.0162121 0.0601415 -0.998058 
+   txt003 
+STRI 
+  V0 -0.274486 0.986255 0.0222222   V1 0 1.02222 0.0222222   V2 0 0.605903 0.00590278 
+  N0 -0.0162121 0.0601415 -0.998058   N1 0 0.0623783 -0.998053   N2 0 0.0226746 -0.999743 
+   txt003 
+STRI 
+  V0 -0.162696 0.584584 0.00590278   V1 -0.307888 0.524218 0.00590278   V2 -0.51944 0.884412 0.0222222 
+  N0 -0.00589307 0.0218614 -0.999744   N1 -0.0113382 0.0195486 -0.999745   N2 -0.0311919 0.0537792 -0.998066 
+   txt003 
+STRI 
+  V0 -0.51944 0.884412 0.0222222   V1 -0.274486 0.986255 0.0222222   V2 -0.162696 0.584584 0.00590278 
+  N0 -0.0311919 0.0537792 -0.998066   N1 -0.0162121 0.0601415 -0.998058   N2 -0.00589307 0.0218614 -0.999744 
+   txt003 
+STRI 
+  V0 -0.307888 0.524218 0.00590278   V1 -0.430191 0.430191 0.00590278   V2 -0.725778 0.725778 0.0222222 
+  N0 -0.0113382 0.0195486 -0.999745   N1 -0.015968 0.015968 -0.999745   N2 -0.0439291 0.0439291 -0.998068 
+   txt003 
+STRI 
+  V0 -0.725778 0.725778 0.0222222   V1 -0.51944 0.884412 0.0222222   V2 -0.307888 0.524218 0.00590278 
+  N0 -0.0439291 0.0439291 -0.998068   N1 -0.0311919 0.0537792 -0.998066   N2 -0.0113382 0.0195486 -0.999745 
+   txt003 
+STRI 
+  V0 -0.430191 0.430191 0.00590278   V1 -0.524218 0.307888 0.00590278   V2 -0.884412 0.51944 0.0222222 
+  N0 -0.015968 0.015968 -0.999745   N1 -0.0195486 0.0113382 -0.999745   N2 -0.0537792 0.0311919 -0.998066 
+   txt003 
+STRI 
+  V0 -0.884412 0.51944 0.0222222   V1 -0.725778 0.725778 0.0222222   V2 -0.430191 0.430191 0.00590278 
+  N0 -0.0537792 0.0311919 -0.998066   N1 -0.0439291 0.0439291 -0.998068   N2 -0.015968 0.015968 -0.999745 
+   txt003 
+STRI 
+  V0 -0.524218 0.307888 0.00590278   V1 -0.584584 0.162696 0.00590278   V2 -0.986255 0.274486 0.0222222 
+  N0 -0.0195486 0.0113382 -0.999745   N1 -0.0218614 0.00589307 -0.999744   N2 -0.0601415 0.0162121 -0.998058 
+   txt003 
+STRI 
+  V0 -0.986255 0.274486 0.0222222   V1 -0.884412 0.51944 0.0222222   V2 -0.524218 0.307888 0.00590278 
+  N0 -0.0601415 0.0162121 -0.998058   N1 -0.0537792 0.0311919 -0.998066   N2 -0.0195486 0.0113382 -0.999745 
+   txt003 
+STRI 
+  V0 -0.584584 0.162696 0.00590278   V1 -0.605903 0 0.00590278   V2 -1.02222 -2.22045e-16 0.0222222 
+  N0 -0.0218614 0.00589307 -0.999744   N1 -0.0226746 4.94615e-18 -0.999743   N2 -0.0623783 -0 -0.998053 
+   txt003 
+STRI 
+  V0 -1.02222 -2.22045e-16 0.0222222   V1 -0.986255 0.274486 0.0222222   V2 -0.584584 0.162696 0.00590278 
+  N0 -0.0623783 -0 -0.998053   N1 -0.0601415 0.0162121 -0.998058   N2 -0.0218614 0.00589307 -0.999744 
+   txt003 
+STRI 
+  V0 0 1.02222 0.0222222   V1 -0.274486 0.986255 0.0222222   V2 -0.344878 1.23918 0.046875 
+  N0 0 0.0623783 -0.998053   N1 -0.0162121 0.0601415 -0.998058   N2 -0.0367561 0.136353 -0.989978 
+   txt003 
+STRI 
+  V0 -0.344878 1.23918 0.046875   V1 0 1.28438 0.046875   V2 0 1.02222 0.0222222 
+  N0 -0.0367561 0.136353 -0.989978   N1 0 0.141421 -0.989949   N2 0 0.0623783 -0.998053 
+   txt003 
+STRI 
+  V0 -0.274486 0.986255 0.0222222   V1 -0.51944 0.884412 0.0222222   V2 -0.652653 1.11122 0.046875 
+  N0 -0.0162121 0.0601415 -0.998058   N1 -0.0311919 0.0537792 -0.998066   N2 -0.0707208 0.121932 -0.990016 
+   txt003 
+STRI 
+  V0 -0.652653 1.11122 0.046875   V1 -0.344878 1.23918 0.046875   V2 -0.274486 0.986255 0.0222222 
+  N0 -0.0707208 0.121932 -0.990016   N1 -0.0367561 0.136353 -0.989978   N2 -0.0162121 0.0601415 -0.998058 
+   txt003 
+STRI 
+  V0 -0.51944 0.884412 0.0222222   V1 -0.725778 0.725778 0.0222222   V2 -0.911906 0.911906 0.046875 
+  N0 -0.0311919 0.0537792 -0.998066   N1 -0.0439291 0.0439291 -0.998068   N2 -0.0996006 0.0996006 -0.99003 
+   txt003 
+STRI 
+  V0 -0.911906 0.911906 0.046875   V1 -0.652653 1.11122 0.046875   V2 -0.51944 0.884412 0.0222222 
+  N0 -0.0996006 0.0996006 -0.99003   N1 -0.0707208 0.121932 -0.990016   N2 -0.0311919 0.0537792 -0.998066 
+   txt003 
+STRI 
+  V0 -0.725778 0.725778 0.0222222   V1 -0.884412 0.51944 0.0222222   V2 -1.11122 0.652653 0.046875 
+  N0 -0.0439291 0.0439291 -0.998068   N1 -0.0537792 0.0311919 -0.998066   N2 -0.121932 0.0707208 -0.990016 
+   txt003 
+STRI 
+  V0 -1.11122 0.652653 0.046875   V1 -0.911906 0.911906 0.046875   V2 -0.725778 0.725778 0.0222222 
+  N0 -0.121932 0.0707208 -0.990016   N1 -0.0996006 0.0996006 -0.99003   N2 -0.0439291 0.0439291 -0.998068 
+   txt003 
+STRI 
+  V0 -0.884412 0.51944 0.0222222   V1 -0.986255 0.274486 0.0222222   V2 -1.23918 0.344878 0.046875 
+  N0 -0.0537792 0.0311919 -0.998066   N1 -0.0601415 0.0162121 -0.998058   N2 -0.136353 0.0367561 -0.989978 
+   txt003 
+STRI 
+  V0 -1.23918 0.344878 0.046875   V1 -1.11122 0.652653 0.046875   V2 -0.884412 0.51944 0.0222222 
+  N0 -0.136353 0.0367561 -0.989978   N1 -0.121932 0.0707208 -0.990016   N2 -0.0537792 0.0311919 -0.998066 
+   txt003 
+STRI 
+  V0 -0.986255 0.274486 0.0222222   V1 -1.02222 -2.22045e-16 0.0222222   V2 -1.28437 2.22045e-16 0.046875 
+  N0 -0.0601415 0.0162121 -0.998058   N1 -0.0623783 -0 -0.998053   N2 -0.141421 -0 -0.989949 
+   txt003 
+STRI 
+  V0 -1.28437 2.22045e-16 0.046875   V1 -1.23918 0.344878 0.046875   V2 -0.986255 0.274486 0.0222222 
+  N0 -0.141421 -0 -0.989949   N1 -0.136353 0.0367561 -0.989978   N2 -0.0601415 0.0162121 -0.998058 
+   txt003 
+STRI 
+  V0 0 1.28438 0.046875   V1 -0.344878 1.23918 0.046875   V2 -0.383385 1.37754 0.0777778 
+  N0 0 0.141421 -0.989949   N1 -0.0367561 0.136353 -0.989978   N2 -0.085395 0.316788 -0.944644 
+   txt003 
+STRI 
+  V0 -0.383385 1.37754 0.0777778   V1 0 1.42778 0.0777778   V2 0 1.28438 0.046875 
+  N0 -0.085395 0.316788 -0.944644   N1 0 0.328521 -0.944497   N2 0 0.141421 -0.989949 
+   txt003 
+STRI 
+  V0 -0.344878 1.23918 0.046875   V1 -0.652653 1.11122 0.046875   V2 -0.725523 1.23529 0.0777778 
+  N0 -0.0367561 0.136353 -0.989978   N1 -0.0707208 0.121932 -0.990016   N2 -0.164332 0.283331 -0.944838 
+   txt003 
+STRI 
+  V0 -0.725523 1.23529 0.0777778   V1 -0.383385 1.37754 0.0777778   V2 -0.344878 1.23918 0.046875 
+  N0 -0.164332 0.283331 -0.944838   N1 -0.085395 0.316788 -0.944644   N2 -0.0367561 0.136353 -0.989978 
+   txt003 
+STRI 
+  V0 -0.652653 1.11122 0.046875   V1 -0.911906 0.911906 0.046875   V2 -1.01372 1.01372 0.0777778 
+  N0 -0.0707208 0.121932 -0.990016   N1 -0.0996006 0.0996006 -0.99003   N2 -0.231454 0.231454 -0.944912 
+   txt003 
+STRI 
+  V0 -1.01372 1.01372 0.0777778   V1 -0.725523 1.23529 0.0777778   V2 -0.652653 1.11122 0.046875 
+  N0 -0.231454 0.231454 -0.944912   N1 -0.164332 0.283331 -0.944838   N2 -0.0707208 0.121932 -0.990016 
+   txt003 
+STRI 
+  V0 -0.911906 0.911906 0.046875   V1 -1.11122 0.652653 0.046875   V2 -1.23529 0.725523 0.0777778 
+  N0 -0.0996006 0.0996006 -0.99003   N1 -0.121932 0.0707208 -0.990016   N2 -0.283331 0.164332 -0.944838 
+   txt003 
+STRI 
+  V0 -1.23529 0.725523 0.0777778   V1 -1.01372 1.01372 0.0777778   V2 -0.911906 0.911906 0.046875 
+  N0 -0.283331 0.164332 -0.944838   N1 -0.231454 0.231454 -0.944912   N2 -0.0996006 0.0996006 -0.99003 
+   txt003 
+STRI 
+  V0 -1.11122 0.652653 0.046875   V1 -1.23918 0.344878 0.046875   V2 -1.37754 0.383385 0.0777778 
+  N0 -0.121932 0.0707208 -0.990016   N1 -0.136353 0.0367561 -0.989978   N2 -0.316788 0.085395 -0.944644 
+   txt003 
+STRI 
+  V0 -1.37754 0.383385 0.0777778   V1 -1.23529 0.725523 0.0777778   V2 -1.11122 0.652653 0.046875 
+  N0 -0.316788 0.085395 -0.944644   N1 -0.283331 0.164332 -0.944838   N2 -0.121932 0.0707208 -0.990016 
+   txt003 
+STRI 
+  V0 -1.23918 0.344878 0.046875   V1 -1.28437 2.22045e-16 0.046875   V2 -1.42778 -2.22045e-16 0.0777778 
+  N0 -0.136353 0.0367561 -0.989978   N1 -0.141421 -0 -0.989949   N2 -0.328521 6.08223e-17 -0.944497 
+   txt003 
+STRI 
+  V0 -1.42778 -2.22045e-16 0.0777778   V1 -1.37754 0.383385 0.0777778   V2 -1.23918 0.344878 0.046875 
+  N0 -0.328521 6.08223e-17 -0.944497   N1 -0.316788 0.085395 -0.944644   N2 -0.136353 0.0367561 -0.989978 
+   txt003 
+STRI 
+  V0 0 1.42778 0.0777778   V1 -0.383385 1.37754 0.0777778   V2 -0.399515 1.4355 0.112847 
+  N0 0 0.328521 -0.944497   N1 -0.085395 0.316788 -0.944644   N2 -0.200299 0.743044 -0.638566 
+   txt003 
+STRI 
+  V0 -0.399515 1.4355 0.112847   V1 0 1.48785 0.112847   V2 0 1.42778 0.0777778 
+  N0 -0.200299 0.743044 -0.638566   N1 0 0.770022 -0.638018   N2 0 0.328521 -0.944497 
+   txt003 
+STRI 
+  V0 -0.383385 1.37754 0.0777778   V1 -0.725523 1.23529 0.0777778   V2 -0.756047 1.28726 0.112847 
+  N0 -0.085395 0.316788 -0.944644   N1 -0.164332 0.283331 -0.944838   N2 -0.385806 0.665182 -0.639286 
+   txt003 
+STRI 
+  V0 -0.756047 1.28726 0.112847   V1 -0.399515 1.4355 0.112847   V2 -0.383385 1.37754 0.0777778 
+  N0 -0.385806 0.665182 -0.639286   N1 -0.200299 0.743044 -0.638566   N2 -0.085395 0.316788 -0.944644 
+   txt003 
+STRI 
+  V0 -0.725523 1.23529 0.0777778   V1 -1.01372 1.01372 0.0777778   V2 -1.05637 1.05637 0.112847 
+  N0 -0.164332 0.283331 -0.944838   N1 -0.231454 0.231454 -0.944912   N2 -0.543581 0.543581 -0.639562 
+   txt003 
+STRI 
+  V0 -1.05637 1.05637 0.112847   V1 -0.756047 1.28726 0.112847   V2 -0.725523 1.23529 0.0777778 
+  N0 -0.543581 0.543581 -0.639562   N1 -0.385806 0.665182 -0.639286   N2 -0.164332 0.283331 -0.944838 
+   txt003 
+STRI 
+  V0 -1.01372 1.01372 0.0777778   V1 -1.23529 0.725523 0.0777778   V2 -1.28726 0.756047 0.112847 
+  N0 -0.231454 0.231454 -0.944912   N1 -0.283331 0.164332 -0.944838   N2 -0.665182 0.385806 -0.639286 
+   txt003 
+STRI 
+  V0 -1.28726 0.756047 0.112847   V1 -1.05637 1.05637 0.112847   V2 -1.01372 1.01372 0.0777778 
+  N0 -0.665182 0.385806 -0.639286   N1 -0.543581 0.543581 -0.639562   N2 -0.231454 0.231454 -0.944912 
+   txt003 
+STRI 
+  V0 -1.23529 0.725523 0.0777778   V1 -1.37754 0.383385 0.0777778   V2 -1.4355 0.399515 0.112847 
+  N0 -0.283331 0.164332 -0.944838   N1 -0.316788 0.085395 -0.944644   N2 -0.743044 0.200299 -0.638566 
+   txt003 
+STRI 
+  V0 -1.4355 0.399515 0.112847   V1 -1.28726 0.756047 0.112847   V2 -1.23529 0.725523 0.0777778 
+  N0 -0.743044 0.200299 -0.638566   N1 -0.665182 0.385806 -0.639286   N2 -0.283331 0.164332 -0.944838 
+   txt003 
+STRI 
+  V0 -1.37754 0.383385 0.0777778   V1 -1.42778 -2.22045e-16 0.0777778   V2 -1.48785 0 0.112847 
+  N0 -0.316788 0.085395 -0.944644   N1 -0.328521 6.08223e-17 -0.944497   N2 -0.770022 1.36806e-16 -0.638018 
+   txt003 
+STRI 
+  V0 -1.48785 0 0.112847   V1 -1.4355 0.399515 0.112847   V2 -1.37754 0.383385 0.0777778 
+  N0 -0.770022 1.36806e-16 -0.638018   N1 -0.743044 0.200299 -0.638566   N2 -0.316788 0.085395 -0.944644 
+   txt003 
+STRI 
+  V0 0 1.48785 0.112847   V1 -0.399515 1.4355 0.112847   V2 -0.402778 1.44722 0.15 
+  N0 0 0.770022 -0.638018   N1 -0.200299 0.743044 -0.638566   N2 -0.260275 0.965535 -2.07142e-16 
+   txt003 
+STRI 
+  V0 -0.402778 1.44722 0.15   V1 0 1.5 0.15   V2 0 1.48785 0.112847 
+  N0 -0.260275 0.965535 -2.07142e-16   N1 0 1 -0   N2 0 0.770022 -0.638018 
+   txt003 
+STRI 
+  V0 -0.399515 1.4355 0.112847   V1 -0.756047 1.28726 0.112847   V2 -0.762222 1.29778 0.15 
+  N0 -0.200299 0.743044 -0.638566   N1 -0.385806 0.665182 -0.639286   N2 -0.501718 0.865031 -5.46348e-16 
+   txt003 
+STRI 
+  V0 -0.762222 1.29778 0.15   V1 -0.402778 1.44722 0.15   V2 -0.399515 1.4355 0.112847 
+  N0 -0.501718 0.865031 -5.46348e-16   N1 -0.260275 0.965535 -2.07142e-16   N2 -0.200299 0.743044 -0.638566 
+   txt003 
+STRI 
+  V0 -0.756047 1.28726 0.112847   V1 -1.05637 1.05637 0.112847   V2 -1.065 1.065 0.15 
+  N0 -0.385806 0.665182 -0.639286   N1 -0.543581 0.543581 -0.639562   N2 -0.707107 0.707107 -6.97819e-16 
+   txt003 
+STRI 
+  V0 -1.065 1.065 0.15   V1 -0.762222 1.29778 0.15   V2 -0.756047 1.28726 0.112847 
+  N0 -0.707107 0.707107 -6.97819e-16   N1 -0.501718 0.865031 -5.46348e-16   N2 -0.385806 0.665182 -0.639286 
+   txt003 
+STRI 
+  V0 -1.05637 1.05637 0.112847   V1 -1.28726 0.756047 0.112847   V2 -1.29778 0.762222 0.15 
+  N0 -0.543581 0.543581 -0.639562   N1 -0.665182 0.385806 -0.639286   N2 -0.865031 0.501718 -5.46348e-16 
+   txt003 
+STRI 
+  V0 -1.29778 0.762222 0.15   V1 -1.065 1.065 0.15   V2 -1.05637 1.05637 0.112847 
+  N0 -0.865031 0.501718 -5.46348e-16   N1 -0.707107 0.707107 -6.97819e-16   N2 -0.543581 0.543581 -0.639562 
+   txt003 
+STRI 
+  V0 -1.28726 0.756047 0.112847   V1 -1.4355 0.399515 0.112847   V2 -1.44722 0.402778 0.15 
+  N0 -0.665182 0.385806 -0.639286   N1 -0.743044 0.200299 -0.638566   N2 -0.965535 0.260275 -2.07142e-16 
+   txt003 
+STRI 
+  V0 -1.44722 0.402778 0.15   V1 -1.29778 0.762222 0.15   V2 -1.28726 0.756047 0.112847 
+  N0 -0.965535 0.260275 -2.07142e-16   N1 -0.865031 0.501718 -5.46348e-16   N2 -0.665182 0.385806 -0.639286 
+   txt003 
+STRI 
+  V0 -1.4355 0.399515 0.112847   V1 -1.48785 0 0.112847   V2 -1.5 0 0.15 
+  N0 -0.743044 0.200299 -0.638566   N1 -0.770022 1.36806e-16 -0.638018   N2 -1 0 0 
+   txt003 
+STRI 
+  V0 -1.5 0 0.15   V1 -1.44722 0.402778 0.15   V2 -1.4355 0.399515 0.112847 
+  N0 -1 0 0   N1 -0.965535 0.260275 -2.07142e-16   N2 -0.743044 0.200299 -0.638566 
+   txt003 
+STRI 
+  V0 -0.584584 -0.162696 0.00590278   V1 -0.605903 0 0.00590278   V2 0 0 0 
+  N0 -0.0218614 -0.00589307 -0.999744   N1 -0.0226746 -0 -0.999743   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 -0.524218 -0.307888 0.00590278   V1 -0.584584 -0.162696 0.00590278   V2 0 0 0 
+  N0 -0.0195486 -0.0113382 -0.999745   N1 -0.0218614 -0.00589307 -0.999744   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 -0.430191 -0.430191 0.00590278   V1 -0.524218 -0.307888 0.00590278   V2 0 0 0 
+  N0 -0.015968 -0.015968 -0.999745   N1 -0.0195486 -0.0113382 -0.999745   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 -0.307888 -0.524218 0.00590278   V1 -0.430191 -0.430191 0.00590278   V2 0 0 0 
+  N0 -0.0113382 -0.0195486 -0.999745   N1 -0.015968 -0.015968 -0.999745   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 -0.162696 -0.584584 0.00590278   V1 -0.307888 -0.524218 0.00590278   V2 0 0 0 
+  N0 -0.00589307 -0.0218614 -0.999744   N1 -0.0113382 -0.0195486 -0.999745   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0 -0.605903 0.00590278   V1 -0.162696 -0.584584 0.00590278   V2 0 0 0 
+  N0 -4.94615e-18 -0.0226746 -0.999743   N1 -0.00589307 -0.0218614 -0.999744   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 -0.605903 0 0.00590278   V1 -0.584584 -0.162696 0.00590278   V2 -0.986255 -0.274486 0.0222222 
+  N0 -0.0226746 -0 -0.999743   N1 -0.0218614 -0.00589307 -0.999744   N2 -0.0601415 -0.0162121 -0.998058 
+   txt003 
+STRI 
+  V0 -0.986255 -0.274486 0.0222222   V1 -1.02222 0 0.0222222   V2 -0.605903 0 0.00590278 
+  N0 -0.0601415 -0.0162121 -0.998058   N1 -0.0623783 -0 -0.998053   N2 -0.0226746 -0 -0.999743 
+   txt003 
+STRI 
+  V0 -0.584584 -0.162696 0.00590278   V1 -0.524218 -0.307888 0.00590278   V2 -0.884412 -0.51944 0.0222222 
+  N0 -0.0218614 -0.00589307 -0.999744   N1 -0.0195486 -0.0113382 -0.999745   N2 -0.0537792 -0.0311919 -0.998066 
+   txt003 
+STRI 
+  V0 -0.884412 -0.51944 0.0222222   V1 -0.986255 -0.274486 0.0222222   V2 -0.584584 -0.162696 0.00590278 
+  N0 -0.0537792 -0.0311919 -0.998066   N1 -0.0601415 -0.0162121 -0.998058   N2 -0.0218614 -0.00589307 -0.999744 
+   txt003 
+STRI 
+  V0 -0.524218 -0.307888 0.00590278   V1 -0.430191 -0.430191 0.00590278   V2 -0.725778 -0.725778 0.0222222 
+  N0 -0.0195486 -0.0113382 -0.999745   N1 -0.015968 -0.015968 -0.999745   N2 -0.0439291 -0.0439291 -0.998068 
+   txt003 
+STRI 
+  V0 -0.725778 -0.725778 0.0222222   V1 -0.884412 -0.51944 0.0222222   V2 -0.524218 -0.307888 0.00590278 
+  N0 -0.0439291 -0.0439291 -0.998068   N1 -0.0537792 -0.0311919 -0.998066   N2 -0.0195486 -0.0113382 -0.999745 
+   txt003 
+STRI 
+  V0 -0.430191 -0.430191 0.00590278   V1 -0.307888 -0.524218 0.00590278   V2 -0.51944 -0.884412 0.0222222 
+  N0 -0.015968 -0.015968 -0.999745   N1 -0.0113382 -0.0195486 -0.999745   N2 -0.0311919 -0.0537792 -0.998066 
+   txt003 
+STRI 
+  V0 -0.51944 -0.884412 0.0222222   V1 -0.725778 -0.725778 0.0222222   V2 -0.430191 -0.430191 0.00590278 
+  N0 -0.0311919 -0.0537792 -0.998066   N1 -0.0439291 -0.0439291 -0.998068   N2 -0.015968 -0.015968 -0.999745 
+   txt003 
+STRI 
+  V0 -0.307888 -0.524218 0.00590278   V1 -0.162696 -0.584584 0.00590278   V2 -0.274486 -0.986255 0.0222222 
+  N0 -0.0113382 -0.0195486 -0.999745   N1 -0.00589307 -0.0218614 -0.999744   N2 -0.0162121 -0.0601415 -0.998058 
+   txt003 
+STRI 
+  V0 -0.274486 -0.986255 0.0222222   V1 -0.51944 -0.884412 0.0222222   V2 -0.307888 -0.524218 0.00590278 
+  N0 -0.0162121 -0.0601415 -0.998058   N1 -0.0311919 -0.0537792 -0.998066   N2 -0.0113382 -0.0195486 -0.999745 
+   txt003 
+STRI 
+  V0 -0.162696 -0.584584 0.00590278   V1 0 -0.605903 0.00590278   V2 2.22045e-16 -1.02222 0.0222222 
+  N0 -0.00589307 -0.0218614 -0.999744   N1 -4.94615e-18 -0.0226746 -0.999743   N2 0 -0.0623783 -0.998053 
+   txt003 
+STRI 
+  V0 2.22045e-16 -1.02222 0.0222222   V1 -0.274486 -0.986255 0.0222222   V2 -0.162696 -0.584584 0.00590278 
+  N0 0 -0.0623783 -0.998053   N1 -0.0162121 -0.0601415 -0.998058   N2 -0.00589307 -0.0218614 -0.999744 
+   txt003 
+STRI 
+  V0 -1.02222 0 0.0222222   V1 -0.986255 -0.274486 0.0222222   V2 -1.23918 -0.344878 0.046875 
+  N0 -0.0623783 -0 -0.998053   N1 -0.0601415 -0.0162121 -0.998058   N2 -0.136353 -0.0367561 -0.989978 
+   txt003 
+STRI 
+  V0 -1.23918 -0.344878 0.046875   V1 -1.28438 0 0.046875   V2 -1.02222 0 0.0222222 
+  N0 -0.136353 -0.0367561 -0.989978   N1 -0.141421 -0 -0.989949   N2 -0.0623783 -0 -0.998053 
+   txt003 
+STRI 
+  V0 -0.986255 -0.274486 0.0222222   V1 -0.884412 -0.51944 0.0222222   V2 -1.11122 -0.652653 0.046875 
+  N0 -0.0601415 -0.0162121 -0.998058   N1 -0.0537792 -0.0311919 -0.998066   N2 -0.121932 -0.0707208 -0.990016 
+   txt003 
+STRI 
+  V0 -1.11122 -0.652653 0.046875   V1 -1.23918 -0.344878 0.046875   V2 -0.986255 -0.274486 0.0222222 
+  N0 -0.121932 -0.0707208 -0.990016   N1 -0.136353 -0.0367561 -0.989978   N2 -0.0601415 -0.0162121 -0.998058 
+   txt003 
+STRI 
+  V0 -0.884412 -0.51944 0.0222222   V1 -0.725778 -0.725778 0.0222222   V2 -0.911906 -0.911906 0.046875 
+  N0 -0.0537792 -0.0311919 -0.998066   N1 -0.0439291 -0.0439291 -0.998068   N2 -0.0996006 -0.0996006 -0.99003 
+   txt003 
+STRI 
+  V0 -0.911906 -0.911906 0.046875   V1 -1.11122 -0.652653 0.046875   V2 -0.884412 -0.51944 0.0222222 
+  N0 -0.0996006 -0.0996006 -0.99003   N1 -0.121932 -0.0707208 -0.990016   N2 -0.0537792 -0.0311919 -0.998066 
+   txt003 
+STRI 
+  V0 -0.725778 -0.725778 0.0222222   V1 -0.51944 -0.884412 0.0222222   V2 -0.652653 -1.11122 0.046875 
+  N0 -0.0439291 -0.0439291 -0.998068   N1 -0.0311919 -0.0537792 -0.998066   N2 -0.0707208 -0.121932 -0.990016 
+   txt003 
+STRI 
+  V0 -0.652653 -1.11122 0.046875   V1 -0.911906 -0.911906 0.046875   V2 -0.725778 -0.725778 0.0222222 
+  N0 -0.0707208 -0.121932 -0.990016   N1 -0.0996006 -0.0996006 -0.99003   N2 -0.0439291 -0.0439291 -0.998068 
+   txt003 
+STRI 
+  V0 -0.51944 -0.884412 0.0222222   V1 -0.274486 -0.986255 0.0222222   V2 -0.344878 -1.23918 0.046875 
+  N0 -0.0311919 -0.0537792 -0.998066   N1 -0.0162121 -0.0601415 -0.998058   N2 -0.0367561 -0.136353 -0.989978 
+   txt003 
+STRI 
+  V0 -0.344878 -1.23918 0.046875   V1 -0.652653 -1.11122 0.046875   V2 -0.51944 -0.884412 0.0222222 
+  N0 -0.0367561 -0.136353 -0.989978   N1 -0.0707208 -0.121932 -0.990016   N2 -0.0311919 -0.0537792 -0.998066 
+   txt003 
+STRI 
+  V0 -0.274486 -0.986255 0.0222222   V1 2.22045e-16 -1.02222 0.0222222   V2 -2.22045e-16 -1.28437 0.046875 
+  N0 -0.0162121 -0.0601415 -0.998058   N1 0 -0.0623783 -0.998053   N2 0 -0.141421 -0.989949 
+   txt003 
+STRI 
+  V0 -2.22045e-16 -1.28437 0.046875   V1 -0.344878 -1.23918 0.046875   V2 -0.274486 -0.986255 0.0222222 
+  N0 0 -0.141421 -0.989949   N1 -0.0367561 -0.136353 -0.989978   N2 -0.0162121 -0.0601415 -0.998058 
+   txt003 
+STRI 
+  V0 -1.28438 0 0.046875   V1 -1.23918 -0.344878 0.046875   V2 -1.37754 -0.383385 0.0777778 
+  N0 -0.141421 -0 -0.989949   N1 -0.136353 -0.0367561 -0.989978   N2 -0.316788 -0.085395 -0.944644 
+   txt003 
+STRI 
+  V0 -1.37754 -0.383385 0.0777778   V1 -1.42778 0 0.0777778   V2 -1.28438 0 0.046875 
+  N0 -0.316788 -0.085395 -0.944644   N1 -0.328521 -0 -0.944497   N2 -0.141421 -0 -0.989949 
+   txt003 
+STRI 
+  V0 -1.23918 -0.344878 0.046875   V1 -1.11122 -0.652653 0.046875   V2 -1.23529 -0.725523 0.0777778 
+  N0 -0.136353 -0.0367561 -0.989978   N1 -0.121932 -0.0707208 -0.990016   N2 -0.283331 -0.164332 -0.944838 
+   txt003 
+STRI 
+  V0 -1.23529 -0.725523 0.0777778   V1 -1.37754 -0.383385 0.0777778   V2 -1.23918 -0.344878 0.046875 
+  N0 -0.283331 -0.164332 -0.944838   N1 -0.316788 -0.085395 -0.944644   N2 -0.136353 -0.0367561 -0.989978 
+   txt003 
+STRI 
+  V0 -1.11122 -0.652653 0.046875   V1 -0.911906 -0.911906 0.046875   V2 -1.01372 -1.01372 0.0777778 
+  N0 -0.121932 -0.0707208 -0.990016   N1 -0.0996006 -0.0996006 -0.99003   N2 -0.231454 -0.231454 -0.944912 
+   txt003 
+STRI 
+  V0 -1.01372 -1.01372 0.0777778   V1 -1.23529 -0.725523 0.0777778   V2 -1.11122 -0.652653 0.046875 
+  N0 -0.231454 -0.231454 -0.944912   N1 -0.283331 -0.164332 -0.944838   N2 -0.121932 -0.0707208 -0.990016 
+   txt003 
+STRI 
+  V0 -0.911906 -0.911906 0.046875   V1 -0.652653 -1.11122 0.046875   V2 -0.725523 -1.23529 0.0777778 
+  N0 -0.0996006 -0.0996006 -0.99003   N1 -0.0707208 -0.121932 -0.990016   N2 -0.164332 -0.283331 -0.944838 
+   txt003 
+STRI 
+  V0 -0.725523 -1.23529 0.0777778   V1 -1.01372 -1.01372 0.0777778   V2 -0.911906 -0.911906 0.046875 
+  N0 -0.164332 -0.283331 -0.944838   N1 -0.231454 -0.231454 -0.944912   N2 -0.0996006 -0.0996006 -0.99003 
+   txt003 
+STRI 
+  V0 -0.652653 -1.11122 0.046875   V1 -0.344878 -1.23918 0.046875   V2 -0.383385 -1.37754 0.0777778 
+  N0 -0.0707208 -0.121932 -0.990016   N1 -0.0367561 -0.136353 -0.989978   N2 -0.085395 -0.316788 -0.944644 
+   txt003 
+STRI 
+  V0 -0.383385 -1.37754 0.0777778   V1 -0.725523 -1.23529 0.0777778   V2 -0.652653 -1.11122 0.046875 
+  N0 -0.085395 -0.316788 -0.944644   N1 -0.164332 -0.283331 -0.944838   N2 -0.0707208 -0.121932 -0.990016 
+   txt003 
+STRI 
+  V0 -0.344878 -1.23918 0.046875   V1 -2.22045e-16 -1.28437 0.046875   V2 2.22045e-16 -1.42778 0.0777778 
+  N0 -0.0367561 -0.136353 -0.989978   N1 0 -0.141421 -0.989949   N2 -6.08223e-17 -0.328521 -0.944497 
+   txt003 
+STRI 
+  V0 2.22045e-16 -1.42778 0.0777778   V1 -0.383385 -1.37754 0.0777778   V2 -0.344878 -1.23918 0.046875 
+  N0 -6.08223e-17 -0.328521 -0.944497   N1 -0.085395 -0.316788 -0.944644   N2 -0.0367561 -0.136353 -0.989978 
+   txt003 
+STRI 
+  V0 -1.42778 0 0.0777778   V1 -1.37754 -0.383385 0.0777778   V2 -1.4355 -0.399515 0.112847 
+  N0 -0.328521 -0 -0.944497   N1 -0.316788 -0.085395 -0.944644   N2 -0.743044 -0.200299 -0.638566 
+   txt003 
+STRI 
+  V0 -1.4355 -0.399515 0.112847   V1 -1.48785 0 0.112847   V2 -1.42778 0 0.0777778 
+  N0 -0.743044 -0.200299 -0.638566   N1 -0.770022 -0 -0.638018   N2 -0.328521 -0 -0.944497 
+   txt003 
+STRI 
+  V0 -1.37754 -0.383385 0.0777778   V1 -1.23529 -0.725523 0.0777778   V2 -1.28726 -0.756047 0.112847 
+  N0 -0.316788 -0.085395 -0.944644   N1 -0.283331 -0.164332 -0.944838   N2 -0.665182 -0.385806 -0.639286 
+   txt003 
+STRI 
+  V0 -1.28726 -0.756047 0.112847   V1 -1.4355 -0.399515 0.112847   V2 -1.37754 -0.383385 0.0777778 
+  N0 -0.665182 -0.385806 -0.639286   N1 -0.743044 -0.200299 -0.638566   N2 -0.316788 -0.085395 -0.944644 
+   txt003 
+STRI 
+  V0 -1.23529 -0.725523 0.0777778   V1 -1.01372 -1.01372 0.0777778   V2 -1.05637 -1.05637 0.112847 
+  N0 -0.283331 -0.164332 -0.944838   N1 -0.231454 -0.231454 -0.944912   N2 -0.543581 -0.543581 -0.639562 
+   txt003 
+STRI 
+  V0 -1.05637 -1.05637 0.112847   V1 -1.28726 -0.756047 0.112847   V2 -1.23529 -0.725523 0.0777778 
+  N0 -0.543581 -0.543581 -0.639562   N1 -0.665182 -0.385806 -0.639286   N2 -0.283331 -0.164332 -0.944838 
+   txt003 
+STRI 
+  V0 -1.01372 -1.01372 0.0777778   V1 -0.725523 -1.23529 0.0777778   V2 -0.756047 -1.28726 0.112847 
+  N0 -0.231454 -0.231454 -0.944912   N1 -0.164332 -0.283331 -0.944838   N2 -0.385806 -0.665182 -0.639286 
+   txt003 
+STRI 
+  V0 -0.756047 -1.28726 0.112847   V1 -1.05637 -1.05637 0.112847   V2 -1.01372 -1.01372 0.0777778 
+  N0 -0.385806 -0.665182 -0.639286   N1 -0.543581 -0.543581 -0.639562   N2 -0.231454 -0.231454 -0.944912 
+   txt003 
+STRI 
+  V0 -0.725523 -1.23529 0.0777778   V1 -0.383385 -1.37754 0.0777778   V2 -0.399515 -1.4355 0.112847 
+  N0 -0.164332 -0.283331 -0.944838   N1 -0.085395 -0.316788 -0.944644   N2 -0.200299 -0.743044 -0.638566 
+   txt003 
+STRI 
+  V0 -0.399515 -1.4355 0.112847   V1 -0.756047 -1.28726 0.112847   V2 -0.725523 -1.23529 0.0777778 
+  N0 -0.200299 -0.743044 -0.638566   N1 -0.385806 -0.665182 -0.639286   N2 -0.164332 -0.283331 -0.944838 
+   txt003 
+STRI 
+  V0 -0.383385 -1.37754 0.0777778   V1 2.22045e-16 -1.42778 0.0777778   V2 0 -1.48785 0.112847 
+  N0 -0.085395 -0.316788 -0.944644   N1 -6.08223e-17 -0.328521 -0.944497   N2 -1.36806e-16 -0.770022 -0.638018 
+   txt003 
+STRI 
+  V0 0 -1.48785 0.112847   V1 -0.399515 -1.4355 0.112847   V2 -0.383385 -1.37754 0.0777778 
+  N0 -1.36806e-16 -0.770022 -0.638018   N1 -0.200299 -0.743044 -0.638566   N2 -0.085395 -0.316788 -0.944644 
+   txt003 
+STRI 
+  V0 -1.48785 0 0.112847   V1 -1.4355 -0.399515 0.112847   V2 -1.44722 -0.402778 0.15 
+  N0 -0.770022 -0 -0.638018   N1 -0.743044 -0.200299 -0.638566   N2 -0.965535 -0.260275 -2.07142e-16 
+   txt003 
+STRI 
+  V0 -1.44722 -0.402778 0.15   V1 -1.5 0 0.15   V2 -1.48785 0 0.112847 
+  N0 -0.965535 -0.260275 -2.07142e-16   N1 -1 0 0   N2 -0.770022 -0 -0.638018 
+   txt003 
+STRI 
+  V0 -1.4355 -0.399515 0.112847   V1 -1.28726 -0.756047 0.112847   V2 -1.29778 -0.762222 0.15 
+  N0 -0.743044 -0.200299 -0.638566   N1 -0.665182 -0.385806 -0.639286   N2 -0.865031 -0.501718 -5.46348e-16 
+   txt003 
+STRI 
+  V0 -1.29778 -0.762222 0.15   V1 -1.44722 -0.402778 0.15   V2 -1.4355 -0.399515 0.112847 
+  N0 -0.865031 -0.501718 -5.46348e-16   N1 -0.965535 -0.260275 -2.07142e-16   N2 -0.743044 -0.200299 -0.638566 
+   txt003 
+STRI 
+  V0 -1.28726 -0.756047 0.112847   V1 -1.05637 -1.05637 0.112847   V2 -1.065 -1.065 0.15 
+  N0 -0.665182 -0.385806 -0.639286   N1 -0.543581 -0.543581 -0.639562   N2 -0.707107 -0.707107 -6.97819e-16 
+   txt003 
+STRI 
+  V0 -1.065 -1.065 0.15   V1 -1.29778 -0.762222 0.15   V2 -1.28726 -0.756047 0.112847 
+  N0 -0.707107 -0.707107 -6.97819e-16   N1 -0.865031 -0.501718 -5.46348e-16   N2 -0.665182 -0.385806 -0.639286 
+   txt003 
+STRI 
+  V0 -1.05637 -1.05637 0.112847   V1 -0.756047 -1.28726 0.112847   V2 -0.762222 -1.29778 0.15 
+  N0 -0.543581 -0.543581 -0.639562   N1 -0.385806 -0.665182 -0.639286   N2 -0.501718 -0.865031 -5.46348e-16 
+   txt003 
+STRI 
+  V0 -0.762222 -1.29778 0.15   V1 -1.065 -1.065 0.15   V2 -1.05637 -1.05637 0.112847 
+  N0 -0.501718 -0.865031 -5.46348e-16   N1 -0.707107 -0.707107 -6.97819e-16   N2 -0.543581 -0.543581 -0.639562 
+   txt003 
+STRI 
+  V0 -0.756047 -1.28726 0.112847   V1 -0.399515 -1.4355 0.112847   V2 -0.402778 -1.44722 0.15 
+  N0 -0.385806 -0.665182 -0.639286   N1 -0.200299 -0.743044 -0.638566   N2 -0.260275 -0.965535 -2.07142e-16 
+   txt003 
+STRI 
+  V0 -0.402778 -1.44722 0.15   V1 -0.762222 -1.29778 0.15   V2 -0.756047 -1.28726 0.112847 
+  N0 -0.260275 -0.965535 -2.07142e-16   N1 -0.501718 -0.865031 -5.46348e-16   N2 -0.385806 -0.665182 -0.639286 
+   txt003 
+STRI 
+  V0 -0.399515 -1.4355 0.112847   V1 0 -1.48785 0.112847   V2 0 -1.5 0.15 
+  N0 -0.200299 -0.743044 -0.638566   N1 -1.36806e-16 -0.770022 -0.638018   N2 0 -1 0 
+   txt003 
+STRI 
+  V0 0 -1.5 0.15   V1 -0.402778 -1.44722 0.15   V2 -0.399515 -1.4355 0.112847 
+  N0 0 -1 0   N1 -0.260275 -0.965535 -2.07142e-16   N2 -0.200299 -0.743044 -0.638566 
+   txt003 
+STRI 
+  V0 0.162696 -0.584584 0.00590278   V1 0 -0.605903 0.00590278   V2 0 0 0 
+  N0 0.00589307 -0.0218614 -0.999744   N1 0 -0.0226746 -0.999743   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0.307888 -0.524218 0.00590278   V1 0.162696 -0.584584 0.00590278   V2 0 0 0 
+  N0 0.0113382 -0.0195486 -0.999745   N1 0.00589307 -0.0218614 -0.999744   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0.430191 -0.430191 0.00590278   V1 0.307888 -0.524218 0.00590278   V2 0 0 0 
+  N0 0.015968 -0.015968 -0.999745   N1 0.0113382 -0.0195486 -0.999745   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0.524218 -0.307888 0.00590278   V1 0.430191 -0.430191 0.00590278   V2 0 0 0 
+  N0 0.0195486 -0.0113382 -0.999745   N1 0.015968 -0.015968 -0.999745   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0.584584 -0.162696 0.00590278   V1 0.524218 -0.307888 0.00590278   V2 0 0 0 
+  N0 0.0218614 -0.00589307 -0.999744   N1 0.0195486 -0.0113382 -0.999745   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0.605903 0 0.00590278   V1 0.584584 -0.162696 0.00590278   V2 0 0 0 
+  N0 0.0226746 -4.94615e-18 -0.999743   N1 0.0218614 -0.00589307 -0.999744   N2 0 0 -1 
+   txt003 
+STRI 
+  V0 0 -0.605903 0.00590278   V1 0.162696 -0.584584 0.00590278   V2 0.274486 -0.986255 0.0222222 
+  N0 0 -0.0226746 -0.999743   N1 0.00589307 -0.0218614 -0.999744   N2 0.0162121 -0.0601415 -0.998058 
+   txt003 
+STRI 
+  V0 0.274486 -0.986255 0.0222222   V1 0 -1.02222 0.0222222   V2 0 -0.605903 0.00590278 
+  N0 0.0162121 -0.0601415 -0.998058   N1 0 -0.0623783 -0.998053   N2 0 -0.0226746 -0.999743 
+   txt003 
+STRI 
+  V0 0.162696 -0.584584 0.00590278   V1 0.307888 -0.524218 0.00590278   V2 0.51944 -0.884412 0.0222222 
+  N0 0.00589307 -0.0218614 -0.999744   N1 0.0113382 -0.0195486 -0.999745   N2 0.0311919 -0.0537792 -0.998066 
+   txt003 
+STRI 
+  V0 0.51944 -0.884412 0.0222222   V1 0.274486 -0.986255 0.0222222   V2 0.162696 -0.584584 0.00590278 
+  N0 0.0311919 -0.0537792 -0.998066   N1 0.0162121 -0.0601415 -0.998058   N2 0.00589307 -0.0218614 -0.999744 
+   txt003 
+STRI 
+  V0 0.307888 -0.524218 0.00590278   V1 0.430191 -0.430191 0.00590278   V2 0.725778 -0.725778 0.0222222 
+  N0 0.0113382 -0.0195486 -0.999745   N1 0.015968 -0.015968 -0.999745   N2 0.0439291 -0.0439291 -0.998068 
+   txt003 
+STRI 
+  V0 0.725778 -0.725778 0.0222222   V1 0.51944 -0.884412 0.0222222   V2 0.307888 -0.524218 0.00590278 
+  N0 0.0439291 -0.0439291 -0.998068   N1 0.0311919 -0.0537792 -0.998066   N2 0.0113382 -0.0195486 -0.999745 
+   txt003 
+STRI 
+  V0 0.430191 -0.430191 0.00590278   V1 0.524218 -0.307888 0.00590278   V2 0.884412 -0.51944 0.0222222 
+  N0 0.015968 -0.015968 -0.999745   N1 0.0195486 -0.0113382 -0.999745   N2 0.0537792 -0.0311919 -0.998066 
+   txt003 
+STRI 
+  V0 0.884412 -0.51944 0.0222222   V1 0.725778 -0.725778 0.0222222   V2 0.430191 -0.430191 0.00590278 
+  N0 0.0537792 -0.0311919 -0.998066   N1 0.0439291 -0.0439291 -0.998068   N2 0.015968 -0.015968 -0.999745 
+   txt003 
+STRI 
+  V0 0.524218 -0.307888 0.00590278   V1 0.584584 -0.162696 0.00590278   V2 0.986255 -0.274486 0.0222222 
+  N0 0.0195486 -0.0113382 -0.999745   N1 0.0218614 -0.00589307 -0.999744   N2 0.0601415 -0.0162121 -0.998058 
+   txt003 
+STRI 
+  V0 0.986255 -0.274486 0.0222222   V1 0.884412 -0.51944 0.0222222   V2 0.524218 -0.307888 0.00590278 
+  N0 0.0601415 -0.0162121 -0.998058   N1 0.0537792 -0.0311919 -0.998066   N2 0.0195486 -0.0113382 -0.999745 
+   txt003 
+STRI 
+  V0 0.584584 -0.162696 0.00590278   V1 0.605903 0 0.00590278   V2 1.02222 2.22045e-16 0.0222222 
+  N0 0.0218614 -0.00589307 -0.999744   N1 0.0226746 -4.94615e-18 -0.999743   N2 0.0623783 0 -0.998053 
+   txt003 
+STRI 
+  V0 1.02222 2.22045e-16 0.0222222   V1 0.986255 -0.274486 0.0222222   V2 0.584584 -0.162696 0.00590278 
+  N0 0.0623783 0 -0.998053   N1 0.0601415 -0.0162121 -0.998058   N2 0.0218614 -0.00589307 -0.999744 
+   txt003 
+STRI 
+  V0 0 -1.02222 0.0222222   V1 0.274486 -0.986255 0.0222222   V2 0.344878 -1.23918 0.046875 
+  N0 0 -0.0623783 -0.998053   N1 0.0162121 -0.0601415 -0.998058   N2 0.0367561 -0.136353 -0.989978 
+   txt003 
+STRI 
+  V0 0.344878 -1.23918 0.046875   V1 0 -1.28438 0.046875   V2 0 -1.02222 0.0222222 
+  N0 0.0367561 -0.136353 -0.989978   N1 0 -0.141421 -0.989949   N2 0 -0.0623783 -0.998053 
+   txt003 
+STRI 
+  V0 0.274486 -0.986255 0.0222222   V1 0.51944 -0.884412 0.0222222   V2 0.652653 -1.11122 0.046875 
+  N0 0.0162121 -0.0601415 -0.998058   N1 0.0311919 -0.0537792 -0.998066   N2 0.0707208 -0.121932 -0.990016 
+   txt003 
+STRI 
+  V0 0.652653 -1.11122 0.046875   V1 0.344878 -1.23918 0.046875   V2 0.274486 -0.986255 0.0222222 
+  N0 0.0707208 -0.121932 -0.990016   N1 0.0367561 -0.136353 -0.989978   N2 0.0162121 -0.0601415 -0.998058 
+   txt003 
+STRI 
+  V0 0.51944 -0.884412 0.0222222   V1 0.725778 -0.725778 0.0222222   V2 0.911906 -0.911906 0.046875 
+  N0 0.0311919 -0.0537792 -0.998066   N1 0.0439291 -0.0439291 -0.998068   N2 0.0996006 -0.0996006 -0.99003 
+   txt003 
+STRI 
+  V0 0.911906 -0.911906 0.046875   V1 0.652653 -1.11122 0.046875   V2 0.51944 -0.884412 0.0222222 
+  N0 0.0996006 -0.0996006 -0.99003   N1 0.0707208 -0.121932 -0.990016   N2 0.0311919 -0.0537792 -0.998066 
+   txt003 
+STRI 
+  V0 0.725778 -0.725778 0.0222222   V1 0.884412 -0.51944 0.0222222   V2 1.11122 -0.652653 0.046875 
+  N0 0.0439291 -0.0439291 -0.998068   N1 0.0537792 -0.0311919 -0.998066   N2 0.121932 -0.0707208 -0.990016 
+   txt003 
+STRI 
+  V0 1.11122 -0.652653 0.046875   V1 0.911906 -0.911906 0.046875   V2 0.725778 -0.725778 0.0222222 
+  N0 0.121932 -0.0707208 -0.990016   N1 0.0996006 -0.0996006 -0.99003   N2 0.0439291 -0.0439291 -0.998068 
+   txt003 
+STRI 
+  V0 0.884412 -0.51944 0.0222222   V1 0.986255 -0.274486 0.0222222   V2 1.23918 -0.344878 0.046875 
+  N0 0.0537792 -0.0311919 -0.998066   N1 0.0601415 -0.0162121 -0.998058   N2 0.136353 -0.0367561 -0.989978 
+   txt003 
+STRI 
+  V0 1.23918 -0.344878 0.046875   V1 1.11122 -0.652653 0.046875   V2 0.884412 -0.51944 0.0222222 
+  N0 0.136353 -0.0367561 -0.989978   N1 0.121932 -0.0707208 -0.990016   N2 0.0537792 -0.0311919 -0.998066 
+   txt003 
+STRI 
+  V0 0.986255 -0.274486 0.0222222   V1 1.02222 2.22045e-16 0.0222222   V2 1.28437 -2.22045e-16 0.046875 
+  N0 0.0601415 -0.0162121 -0.998058   N1 0.0623783 0 -0.998053   N2 0.141421 0 -0.989949 
+   txt003 
+STRI 
+  V0 1.28437 -2.22045e-16 0.046875   V1 1.23918 -0.344878 0.046875   V2 0.986255 -0.274486 0.0222222 
+  N0 0.141421 0 -0.989949   N1 0.136353 -0.0367561 -0.989978   N2 0.0601415 -0.0162121 -0.998058 
+   txt003 
+STRI 
+  V0 0 -1.28438 0.046875   V1 0.344878 -1.23918 0.046875   V2 0.383385 -1.37754 0.0777778 
+  N0 0 -0.141421 -0.989949   N1 0.0367561 -0.136353 -0.989978   N2 0.085395 -0.316788 -0.944644 
+   txt003 
+STRI 
+  V0 0.383385 -1.37754 0.0777778   V1 0 -1.42778 0.0777778   V2 0 -1.28438 0.046875 
+  N0 0.085395 -0.316788 -0.944644   N1 0 -0.328521 -0.944497   N2 0 -0.141421 -0.989949 
+   txt003 
+STRI 
+  V0 0.344878 -1.23918 0.046875   V1 0.652653 -1.11122 0.046875   V2 0.725523 -1.23529 0.0777778 
+  N0 0.0367561 -0.136353 -0.989978   N1 0.0707208 -0.121932 -0.990016   N2 0.164332 -0.283331 -0.944838 
+   txt003 
+STRI 
+  V0 0.725523 -1.23529 0.0777778   V1 0.383385 -1.37754 0.0777778   V2 0.344878 -1.23918 0.046875 
+  N0 0.164332 -0.283331 -0.944838   N1 0.085395 -0.316788 -0.944644   N2 0.0367561 -0.136353 -0.989978 
+   txt003 
+STRI 
+  V0 0.652653 -1.11122 0.046875   V1 0.911906 -0.911906 0.046875   V2 1.01372 -1.01372 0.0777778 
+  N0 0.0707208 -0.121932 -0.990016   N1 0.0996006 -0.0996006 -0.99003   N2 0.231454 -0.231454 -0.944912 
+   txt003 
+STRI 
+  V0 1.01372 -1.01372 0.0777778   V1 0.725523 -1.23529 0.0777778   V2 0.652653 -1.11122 0.046875 
+  N0 0.231454 -0.231454 -0.944912   N1 0.164332 -0.283331 -0.944838   N2 0.0707208 -0.121932 -0.990016 
+   txt003 
+STRI 
+  V0 0.911906 -0.911906 0.046875   V1 1.11122 -0.652653 0.046875   V2 1.23529 -0.725523 0.0777778 
+  N0 0.0996006 -0.0996006 -0.99003   N1 0.121932 -0.0707208 -0.990016   N2 0.283331 -0.164332 -0.944838 
+   txt003 
+STRI 
+  V0 1.23529 -0.725523 0.0777778   V1 1.01372 -1.01372 0.0777778   V2 0.911906 -0.911906 0.046875 
+  N0 0.283331 -0.164332 -0.944838   N1 0.231454 -0.231454 -0.944912   N2 0.0996006 -0.0996006 -0.99003 
+   txt003 
+STRI 
+  V0 1.11122 -0.652653 0.046875   V1 1.23918 -0.344878 0.046875   V2 1.37754 -0.383385 0.0777778 
+  N0 0.121932 -0.0707208 -0.990016   N1 0.136353 -0.0367561 -0.989978   N2 0.316788 -0.085395 -0.944644 
+   txt003 
+STRI 
+  V0 1.37754 -0.383385 0.0777778   V1 1.23529 -0.725523 0.0777778   V2 1.11122 -0.652653 0.046875 
+  N0 0.316788 -0.085395 -0.944644   N1 0.283331 -0.164332 -0.944838   N2 0.121932 -0.0707208 -0.990016 
+   txt003 
+STRI 
+  V0 1.23918 -0.344878 0.046875   V1 1.28437 -2.22045e-16 0.046875   V2 1.42778 2.22045e-16 0.0777778 
+  N0 0.136353 -0.0367561 -0.989978   N1 0.141421 0 -0.989949   N2 0.328521 -6.08223e-17 -0.944497 
+   txt003 
+STRI 
+  V0 1.42778 2.22045e-16 0.0777778   V1 1.37754 -0.383385 0.0777778   V2 1.23918 -0.344878 0.046875 
+  N0 0.328521 -6.08223e-17 -0.944497   N1 0.316788 -0.085395 -0.944644   N2 0.136353 -0.0367561 -0.989978 
+   txt003 
+STRI 
+  V0 0 -1.42778 0.0777778   V1 0.383385 -1.37754 0.0777778   V2 0.399515 -1.4355 0.112847 
+  N0 0 -0.328521 -0.944497   N1 0.085395 -0.316788 -0.944644   N2 0.200299 -0.743044 -0.638566 
+   txt003 
+STRI 
+  V0 0.399515 -1.4355 0.112847   V1 0 -1.48785 0.112847   V2 0 -1.42778 0.0777778 
+  N0 0.200299 -0.743044 -0.638566   N1 0 -0.770022 -0.638018   N2 0 -0.328521 -0.944497 
+   txt003 
+STRI 
+  V0 0.383385 -1.37754 0.0777778   V1 0.725523 -1.23529 0.0777778   V2 0.756047 -1.28726 0.112847 
+  N0 0.085395 -0.316788 -0.944644   N1 0.164332 -0.283331 -0.944838   N2 0.385806 -0.665182 -0.639286 
+   txt003 
+STRI 
+  V0 0.756047 -1.28726 0.112847   V1 0.399515 -1.4355 0.112847   V2 0.383385 -1.37754 0.0777778 
+  N0 0.385806 -0.665182 -0.639286   N1 0.200299 -0.743044 -0.638566   N2 0.085395 -0.316788 -0.944644 
+   txt003 
+STRI 
+  V0 0.725523 -1.23529 0.0777778   V1 1.01372 -1.01372 0.0777778   V2 1.05637 -1.05637 0.112847 
+  N0 0.164332 -0.283331 -0.944838   N1 0.231454 -0.231454 -0.944912   N2 0.543581 -0.543581 -0.639562 
+   txt003 
+STRI 
+  V0 1.05637 -1.05637 0.112847   V1 0.756047 -1.28726 0.112847   V2 0.725523 -1.23529 0.0777778 
+  N0 0.543581 -0.543581 -0.639562   N1 0.385806 -0.665182 -0.639286   N2 0.164332 -0.283331 -0.944838 
+   txt003 
+STRI 
+  V0 1.01372 -1.01372 0.0777778   V1 1.23529 -0.725523 0.0777778   V2 1.28726 -0.756047 0.112847 
+  N0 0.231454 -0.231454 -0.944912   N1 0.283331 -0.164332 -0.944838   N2 0.665182 -0.385806 -0.639286 
+   txt003 
+STRI 
+  V0 1.28726 -0.756047 0.112847   V1 1.05637 -1.05637 0.112847   V2 1.01372 -1.01372 0.0777778 
+  N0 0.665182 -0.385806 -0.639286   N1 0.543581 -0.543581 -0.639562   N2 0.231454 -0.231454 -0.944912 
+   txt003 
+STRI 
+  V0 1.23529 -0.725523 0.0777778   V1 1.37754 -0.383385 0.0777778   V2 1.4355 -0.399515 0.112847 
+  N0 0.283331 -0.164332 -0.944838   N1 0.316788 -0.085395 -0.944644   N2 0.743044 -0.200299 -0.638566 
+   txt003 
+STRI 
+  V0 1.4355 -0.399515 0.112847   V1 1.28726 -0.756047 0.112847   V2 1.23529 -0.725523 0.0777778 
+  N0 0.743044 -0.200299 -0.638566   N1 0.665182 -0.385806 -0.639286   N2 0.283331 -0.164332 -0.944838 
+   txt003 
+STRI 
+  V0 1.37754 -0.383385 0.0777778   V1 1.42778 2.22045e-16 0.0777778   V2 1.48785 0 0.112847 
+  N0 0.316788 -0.085395 -0.944644   N1 0.328521 -6.08223e-17 -0.944497   N2 0.770022 -1.36806e-16 -0.638018 
+   txt003 
+STRI 
+  V0 1.48785 0 0.112847   V1 1.4355 -0.399515 0.112847   V2 1.37754 -0.383385 0.0777778 
+  N0 0.770022 -1.36806e-16 -0.638018   N1 0.743044 -0.200299 -0.638566   N2 0.316788 -0.085395 -0.944644 
+   txt003 
+STRI 
+  V0 0 -1.48785 0.112847   V1 0.399515 -1.4355 0.112847   V2 0.402778 -1.44722 0.15 
+  N0 0 -0.770022 -0.638018   N1 0.200299 -0.743044 -0.638566   N2 0.260275 -0.965535 -2.07142e-16 
+   txt003 
+STRI 
+  V0 0.402778 -1.44722 0.15   V1 0 -1.5 0.15   V2 0 -1.48785 0.112847 
+  N0 0.260275 -0.965535 -2.07142e-16   N1 0 -1 0   N2 0 -0.770022 -0.638018 
+   txt003 
+STRI 
+  V0 0.399515 -1.4355 0.112847   V1 0.756047 -1.28726 0.112847   V2 0.762222 -1.29778 0.15 
+  N0 0.200299 -0.743044 -0.638566   N1 0.385806 -0.665182 -0.639286   N2 0.501718 -0.865031 -5.46348e-16 
+   txt003 
+STRI 
+  V0 0.762222 -1.29778 0.15   V1 0.402778 -1.44722 0.15   V2 0.399515 -1.4355 0.112847 
+  N0 0.501718 -0.865031 -5.46348e-16   N1 0.260275 -0.965535 -2.07142e-16   N2 0.200299 -0.743044 -0.638566 
+   txt003 
+STRI 
+  V0 0.756047 -1.28726 0.112847   V1 1.05637 -1.05637 0.112847   V2 1.065 -1.065 0.15 
+  N0 0.385806 -0.665182 -0.639286   N1 0.543581 -0.543581 -0.639562   N2 0.707107 -0.707107 -6.97819e-16 
+   txt003 
+STRI 
+  V0 1.065 -1.065 0.15   V1 0.762222 -1.29778 0.15   V2 0.756047 -1.28726 0.112847 
+  N0 0.707107 -0.707107 -6.97819e-16   N1 0.501718 -0.865031 -5.46348e-16   N2 0.385806 -0.665182 -0.639286 
+   txt003 
+STRI 
+  V0 1.05637 -1.05637 0.112847   V1 1.28726 -0.756047 0.112847   V2 1.29778 -0.762222 0.15 
+  N0 0.543581 -0.543581 -0.639562   N1 0.665182 -0.385806 -0.639286   N2 0.865031 -0.501718 -5.46348e-16 
+   txt003 
+STRI 
+  V0 1.29778 -0.762222 0.15   V1 1.065 -1.065 0.15   V2 1.05637 -1.05637 0.112847 
+  N0 0.865031 -0.501718 -5.46348e-16   N1 0.707107 -0.707107 -6.97819e-16   N2 0.543581 -0.543581 -0.639562 
+   txt003 
+STRI 
+  V0 1.28726 -0.756047 0.112847   V1 1.4355 -0.399515 0.112847   V2 1.44722 -0.402778 0.15 
+  N0 0.665182 -0.385806 -0.639286   N1 0.743044 -0.200299 -0.638566   N2 0.965535 -0.260275 -2.07142e-16 
+   txt003 
+STRI 
+  V0 1.44722 -0.402778 0.15   V1 1.29778 -0.762222 0.15   V2 1.28726 -0.756047 0.112847 
+  N0 0.965535 -0.260275 -2.07142e-16   N1 0.865031 -0.501718 -5.46348e-16   N2 0.665182 -0.385806 -0.639286 
+   txt003 
+STRI 
+  V0 1.4355 -0.399515 0.112847   V1 1.48785 0 0.112847   V2 1.5 0 0.15 
+  N0 0.743044 -0.200299 -0.638566   N1 0.770022 -1.36806e-16 -0.638018   N2 1 0 0 
+   txt003 
+STRI 
+  V0 1.5 0 0.15   V1 1.44722 -0.402778 0.15   V2 1.4355 -0.399515 0.112847 
+  N0 1 0 0   N1 0.965535 -0.260275 -2.07142e-16   N2 0.743044 -0.200299 -0.638566 
+   txt003 
+
+END_SCENE
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/trypsin4pti.dat b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/dat/trypsin4pti.dat
new file mode 100644 (file)
index 0000000..7d547f2
--- /dev/null
@@ -0,0 +1,538 @@
+BEGIN_SCENE
+  OUTFILE /dev/null
+  RESOLUTION 768 768
+  VERBOSE 0
+
+CAMERA
+  ZOOM  1.0
+  ASPECTRATIO 1.0
+  ANTIALIASING 0
+  RAYDEPTH  4 
+  CENTER    15.0 20.0 -50.0
+  VIEWDIR   0.0 0.0 1.0
+  UPDIR     0.0 1.0 0.0
+END_CAMERA
+
+
+LIGHT
+  CENTER  40.0 50.0 -40.0  
+  RAD     0.2
+  COLOR   0.5 0.5  0.5
+
+LIGHT 
+  CENTER  -40.0 20.0  -40.0 
+  RAD     0.2
+  COLOR   0.5 0.5  0.5
+
+
+TEXDEF O AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 
+         PHONG PLASTIC 0.5 PHONG_SIZE 24.8
+         COLOR 1.0 0.0 0.0  TEXFUNC 0
+TEXALIAS OH O
+TEXALIAS OD1 O
+TEXALIAS OD2 O
+TEXALIAS OE1 O
+TEXALIAS OE2 O
+TEXALIAS OG O
+TEXALIAS OG1 O
+TEXALIAS OG2 O
+TEXALIAS OXT O
+
+TEXDEF C AMBIENT 0.1 DIFFUSE 0.5 SPECULAR 0.0 OPACITY 1.0 
+         PHONG PLASTIC 0.5 PHONG_SIZE 24.8
+         COLOR 0.5 0.5 0.5  TEXFUNC 0
+TEXALIAS CA C
+TEXALIAS CB C
+TEXALIAS CD C
+TEXALIAS CD1 C
+TEXALIAS CD2 C
+TEXALIAS CE C
+TEXALIAS CE1 C
+TEXALIAS CE2 C
+TEXALIAS CG C
+TEXALIAS CG1 C
+TEXALIAS CG2 C
+TEXALIAS CZ C
+
+TEXDEF N AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 
+         PHONG PLASTIC 0.5 PHONG_SIZE 24.8
+         COLOR 0.5 0.5 1.0  TEXFUNC 0
+TEXALIAS ND2 N
+TEXALIAS NH1 N
+TEXALIAS NH2 N
+TEXALIAS NE N
+TEXALIAS NE2 N
+TEXALIAS NZ N
+
+TEXDEF SD AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 
+         PHONG METAL 0.5 PHONG_SIZE 24.8
+         COLOR 1.0 1.0 1.0  TEXFUNC 0
+
+TEXDEF SG AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 
+         PHONG PLASTIC 0.5 PHONG_SIZE 24.8
+         COLOR 1.0 1.0 1.0  TEXFUNC 0
+
+SPHERE  CENTER 26.465000 27.452000 -2.490000  RAD 1.0  N 
+SPHERE  CENTER 25.497000 26.862000 -1.573000  RAD 1.0  CA 
+SPHERE  CENTER 26.193001 26.179001 -0.437000  RAD 1.0  C 
+SPHERE  CENTER 27.270000 25.549000 -0.624000  RAD 1.0  O 
+SPHERE  CENTER 24.583000 25.804001 -2.239000  RAD 1.0  CB 
+SPHERE  CENTER 25.091000 24.375000 -2.409000  RAD 1.0  CG 
+SPHERE  CENTER 24.018999 23.427999 -2.996000  RAD 1.0  CD 
+SPHERE  CENTER 23.591000 24.028000 -4.287000  RAD 1.0  NE 
+SPHERE  CENTER 24.299000 23.972000 -5.389000  RAD 1.0  CZ 
+SPHERE  CENTER 25.431999 23.261000 -5.440000  RAD 1.0  NH1 
+SPHERE  CENTER 23.721001 24.372999 -6.467000  RAD 1.0  NH2 
+SPHERE  CENTER 25.667000 26.396000 0.708000  RAD 1.0  N 
+SPHERE  CENTER 26.222000 25.760000 1.891000  RAD 1.0  CA 
+SPHERE  CENTER 26.207001 24.242001 1.830000  RAD 1.0  C 
+SPHERE  CENTER 25.400000 23.576000 1.139000  RAD 1.0  O 
+SPHERE  CENTER 25.260000 26.207001 3.033000  RAD 1.0  CB 
+SPHERE  CENTER 24.511999 27.427999 2.493000  RAD 1.0  CG 
+SPHERE  CENTER 24.606001 27.382000 0.978000  RAD 1.0  CD 
+SPHERE  CENTER 27.170000 23.634001 2.462000  RAD 1.0  N 
+SPHERE  CENTER 27.284000 22.163000 2.498000  RAD 1.0  CA 
+SPHERE  CENTER 26.042999 21.506001 3.085000  RAD 1.0  C 
+SPHERE  CENTER 25.752001 20.350000 2.705000  RAD 1.0  O 
+SPHERE  CENTER 28.424999 21.747000 3.461000  RAD 1.0  CB 
+SPHERE  CENTER 29.791000 21.886000 2.787000  RAD 1.0  CG 
+SPHERE  CENTER 29.875000 22.104000 1.543000  RAD 1.0  OD1 
+SPHERE  CENTER 30.806000 21.500999 3.431000  RAD 1.0  OD2 
+SPHERE  CENTER 25.393999 22.184000 4.041000  RAD 1.0  N 
+SPHERE  CENTER 24.172001 21.584999 4.618000  RAD 1.0  CA 
+SPHERE  CENTER 23.009001 21.375000 3.624000  RAD 1.0  C 
+SPHERE  CENTER 22.082001 20.603001 3.921000  RAD 1.0  O 
+SPHERE  CENTER 23.691999 22.330999 5.862000  RAD 1.0  CB 
+SPHERE  CENTER 23.191999 23.778999 5.639000  RAD 1.0  CG 
+SPHERE  CENTER 21.961000 24.002001 5.060000  RAD 1.0  CD1 
+SPHERE  CENTER 23.951000 24.841000 6.050000  RAD 1.0  CD2 
+SPHERE  CENTER 21.497000 25.281000 4.869000  RAD 1.0  CE1 
+SPHERE  CENTER 23.510000 26.124001 5.854000  RAD 1.0  CE2 
+SPHERE  CENTER 22.277000 26.363001 5.249000  RAD 1.0  CZ 
+SPHERE  CENTER 23.094999 22.004000 2.522000  RAD 1.0  N 
+SPHERE  CENTER 22.106001 21.863001 1.467000  RAD 1.0  CA 
+SPHERE  CENTER 22.191999 20.518000 0.830000  RAD 1.0  C 
+SPHERE  CENTER 21.230000 20.068001 0.167000  RAD 1.0  O 
+SPHERE  CENTER 22.358000 22.903999 0.371000  RAD 1.0  CB 
+SPHERE  CENTER 22.145000 24.591999 0.888000  RAD 1.0  SG 
+SPHERE  CENTER 23.326000 19.826000 1.008000  RAD 1.0  N 
+SPHERE  CENTER 23.436001 18.459999 0.459000  RAD 1.0  CA 
+SPHERE  CENTER 22.958000 17.365000 1.407000  RAD 1.0  C 
+SPHERE  CENTER 22.938000 16.180000 0.999000  RAD 1.0  O 
+SPHERE  CENTER 24.898001 18.084000 0.131000  RAD 1.0  CB 
+SPHERE  CENTER 25.572001 19.129000 -0.776000  RAD 1.0  CG 
+SPHERE  CENTER 27.037001 18.695000 -1.116000  RAD 1.0  CD1 
+SPHERE  CENTER 24.791000 19.488001 -2.049000  RAD 1.0  CD2 
+SPHERE  CENTER 22.545000 17.716000 2.628000  RAD 1.0  N 
+SPHERE  CENTER 22.039000 16.646000 3.528000  RAD 1.0  CA 
+SPHERE  CENTER 20.615999 16.285000 3.113000  RAD 1.0  C 
+SPHERE  CENTER 19.860001 17.136000 2.576000  RAD 1.0  O 
+SPHERE  CENTER 21.764000 17.216999 4.920000  RAD 1.0  CB 
+SPHERE  CENTER 22.813999 18.035000 5.647000  RAD 1.0  CG 
+SPHERE  CENTER 22.152000 18.707001 6.870000  RAD 1.0  CD 
+SPHERE  CENTER 22.980000 19.100000 7.718000  RAD 1.0  OE1 
+SPHERE  CENTER 21.086000 19.403999 6.779000  RAD 1.0  OE2 
+SPHERE  CENTER 20.254000 15.031000 3.334000  RAD 1.0  N 
+SPHERE  CENTER 18.892000 14.554000 3.034000  RAD 1.0  CA 
+SPHERE  CENTER 17.954000 15.160000 4.079000  RAD 1.0  C 
+SPHERE  CENTER 18.443001 15.606000 5.146000  RAD 1.0  O 
+SPHERE  CENTER 18.910000 13.045000 3.274000  RAD 1.0  CB 
+SPHERE  CENTER 20.226000 12.742000 4.021000  RAD 1.0  CG 
+SPHERE  CENTER 21.107000 14.009000 3.934000  RAD 1.0  CD 
+SPHERE  CENTER 16.681999 15.232000 3.767000  RAD 1.0  N 
+SPHERE  CENTER 15.690000 15.852000 4.661000  RAD 1.0  CA 
+SPHERE  CENTER 15.550000 15.006000 5.916000  RAD 1.0  C 
+SPHERE  CENTER 15.693000 13.769000 5.836000  RAD 1.0  O 
+SPHERE  CENTER 14.367000 15.707000 3.867000  RAD 1.0  CB 
+SPHERE  CENTER 14.571000 14.716000 2.710000  RAD 1.0  CG 
+SPHERE  CENTER 16.090000 14.597000 2.574000  RAD 1.0  CD 
+SPHERE  CENTER 15.365000 15.630000 7.042000  RAD 1.0  N 
+SPHERE  CENTER 15.310000 14.908000 8.298000  RAD 1.0  CA 
+SPHERE  CENTER 13.953000 15.177000 8.952000  RAD 1.0  C 
+SPHERE  CENTER 13.699000 16.320000 9.382000  RAD 1.0  O 
+SPHERE  CENTER 16.532000 15.383000 9.122000  RAD 1.0  CB 
+SPHERE  CENTER 16.608000 14.781000 10.525000  RAD 1.0  CG 
+SPHERE  CENTER 17.132000 13.535000 10.707000  RAD 1.0  CD1 
+SPHERE  CENTER 16.155001 15.523000 11.588000  RAD 1.0  CD2 
+SPHERE  CENTER 17.216000 12.999000 11.982000  RAD 1.0  CE1 
+SPHERE  CENTER 16.266001 14.985000 12.862000  RAD 1.0  CE2 
+SPHERE  CENTER 16.808001 13.746000 13.047000  RAD 1.0  CZ 
+SPHERE  CENTER 16.878000 13.192000 14.372000  RAD 1.0  OH 
+SPHERE  CENTER 13.161000 14.146000 9.088000  RAD 1.0  N 
+SPHERE  CENTER 11.802000 14.321000 9.642000  RAD 1.0  CA 
+SPHERE  CENTER 11.855000 14.484000 11.146000  RAD 1.0  C 
+SPHERE  CENTER 11.105000 15.314000 11.759000  RAD 1.0  O 
+SPHERE  CENTER 10.963000 13.105000 9.273000  RAD 1.0  CB 
+SPHERE  CENTER 10.706000 13.192000 7.854000  RAD 1.0  OG1 
+SPHERE  CENTER 9.611000 13.152000 10.045000  RAD 1.0  CG2 
+SPHERE  CENTER 12.789000 13.760000 11.726000  RAD 1.0  N 
+SPHERE  CENTER 13.002000 13.922000 13.198000  RAD 1.0  CA 
+SPHERE  CENTER 12.107000 12.944000 13.909000  RAD 1.0  C 
+SPHERE  CENTER 11.333000 12.212000 13.239000  RAD 1.0  O 
+SPHERE  CENTER 12.235000 12.905000 15.210000  RAD 1.0  N 
+SPHERE  CENTER 11.516000 11.958000 16.066999  RAD 1.0  CA 
+SPHERE  CENTER 10.094000 12.319000 16.468000  RAD 1.0  C 
+SPHERE  CENTER 9.440000 11.442000 17.052000  RAD 1.0  O 
+SPHERE  CENTER 12.272000 11.936000 17.370001  RAD 1.0  CB 
+SPHERE  CENTER 13.164000 13.172000 17.399000  RAD 1.0  CG 
+SPHERE  CENTER 13.281000 13.627000 15.925000  RAD 1.0  CD 
+SPHERE  CENTER 9.629000 13.519000 16.214001  RAD 1.0  N 
+SPHERE  CENTER 8.290000 13.980000 16.615999  RAD 1.0  CA 
+SPHERE  CENTER 7.268000 13.720000 15.515000  RAD 1.0  C 
+SPHERE  CENTER 7.672000 13.397000 14.387000  RAD 1.0  O 
+SPHERE  CENTER 8.279000 15.441000 16.966999  RAD 1.0  CB 
+SPHERE  CENTER 9.221000 15.735000 18.490000  RAD 1.0  SG 
+SPHERE  CENTER 6.027000 13.680000 15.869000  RAD 1.0  N 
+SPHERE  CENTER 5.005000 13.220000 14.945000  RAD 1.0  CA 
+SPHERE  CENTER 3.964000 14.283000 14.630000  RAD 1.0  C 
+SPHERE  CENTER 2.777000 13.949000 14.377000  RAD 1.0  O 
+SPHERE  CENTER 4.310000 11.998000 15.592000  RAD 1.0  CB 
+SPHERE  CENTER 5.273000 10.848000 15.913000  RAD 1.0  CG 
+SPHERE  CENTER 5.781000 10.034000 14.702000  RAD 1.0  CD 
+SPHERE  CENTER 6.855000 9.016000 15.126000  RAD 1.0  CE 
+SPHERE  CENTER 7.357000 8.291000 13.953000  RAD 1.0  NZ 
+SPHERE  CENTER 4.325000 15.549000 14.618000  RAD 1.0  N 
+SPHERE  CENTER 3.513000 16.639999 14.122000  RAD 1.0  CA 
+SPHERE  CENTER 3.561000 16.615000 12.586000  RAD 1.0  C 
+SPHERE  CENTER 4.270000 15.752000 12.023000  RAD 1.0  O 
+SPHERE  CENTER 3.984000 17.995001 14.670000  RAD 1.0  CB 
+SPHERE  CENTER 2.781000 17.424999 11.943000  RAD 1.0  N 
+SPHERE  CENTER 2.700000 17.355000 10.457000  RAD 1.0  CA 
+SPHERE  CENTER 2.875000 18.731001 9.887000  RAD 1.0  C 
+SPHERE  CENTER 1.878000 19.469999 9.653000  RAD 1.0  O 
+SPHERE  CENTER 1.320000 16.787001 9.970000  RAD 1.0  CB 
+SPHERE  CENTER 1.186000 15.339000 10.395000  RAD 1.0  CG 
+SPHERE  CENTER -0.170000 14.751000 9.963000  RAD 1.0  CD 
+SPHERE  CENTER -1.132000 15.455000 10.801000  RAD 1.0  NE 
+SPHERE  CENTER -1.531000 14.913000 11.939000  RAD 1.0  CZ 
+SPHERE  CENTER -1.172000 13.658000 12.165000  RAD 1.0  NH1 
+SPHERE  CENTER -2.202000 15.647000 12.795000  RAD 1.0  NH2 
+SPHERE  CENTER 4.154000 19.110001 9.817000  RAD 1.0  N 
+SPHERE  CENTER 4.595000 20.444000 9.391000  RAD 1.0  CA 
+SPHERE  CENTER 5.249000 20.388000 8.012000  RAD 1.0  C 
+SPHERE  CENTER 6.193000 19.612000 7.834000  RAD 1.0  O 
+SPHERE  CENTER 5.590000 20.988001 10.452000  RAD 1.0  CB 
+SPHERE  CENTER 4.792000 21.062000 11.815000  RAD 1.0  CG1 
+SPHERE  CENTER 5.985000 22.451000 10.085000  RAD 1.0  CG2 
+SPHERE  CENTER 5.689000 21.535999 12.955000  RAD 1.0  CD1 
+SPHERE  CENTER 4.586000 20.955999 7.035000  RAD 1.0  N 
+SPHERE  CENTER 5.154000 20.879000 5.697000  RAD 1.0  CA 
+SPHERE  CENTER 6.286000 21.912001 5.572000  RAD 1.0  C 
+SPHERE  CENTER 6.156000 23.146000 5.785000  RAD 1.0  O 
+SPHERE  CENTER 4.095000 21.205000 4.648000  RAD 1.0  CB 
+SPHERE  CENTER 2.836000 20.316999 4.886000  RAD 1.0  CG1 
+SPHERE  CENTER 4.655000 20.930000 3.250000  RAD 1.0  CG2 
+SPHERE  CENTER 3.122000 18.813999 4.850000  RAD 1.0  CD1 
+SPHERE  CENTER 7.451000 21.372000 5.297000  RAD 1.0  N 
+SPHERE  CENTER 8.602000 22.257000 5.060000  RAD 1.0  CA 
+SPHERE  CENTER 9.150000 21.950001 3.673000  RAD 1.0  C 
+SPHERE  CENTER 8.840000 20.896000 3.088000  RAD 1.0  O 
+SPHERE  CENTER 9.698000 21.896999 6.092000  RAD 1.0  CB 
+SPHERE  CENTER 9.226000 22.299999 7.493000  RAD 1.0  CG 
+SPHERE  CENTER 9.248000 23.850000 7.622000  RAD 1.0  CD 
+SPHERE  CENTER 8.810000 24.311001 8.962000  RAD 1.0  NE 
+SPHERE  CENTER 9.575000 24.336000 10.075000  RAD 1.0  CZ 
+SPHERE  CENTER 10.888000 24.077000 10.044000  RAD 1.0  NH1 
+SPHERE  CENTER 9.050000 24.893000 11.170000  RAD 1.0  NH2 
+SPHERE  CENTER 10.178000 22.695000 3.318000  RAD 1.0  N 
+SPHERE  CENTER 10.959000 22.444000 2.085000  RAD 1.0  CA 
+SPHERE  CENTER 12.407000 22.010000 2.386000  RAD 1.0  C 
+SPHERE  CENTER 12.987000 22.511999 3.378000  RAD 1.0  O 
+SPHERE  CENTER 10.997000 23.770000 1.282000  RAD 1.0  CB 
+SPHERE  CENTER 9.641000 24.038000 0.627000  RAD 1.0  CG 
+SPHERE  CENTER 8.639000 24.591999 1.399000  RAD 1.0  CD1 
+SPHERE  CENTER 9.451000 23.725000 -0.691000  RAD 1.0  CD2 
+SPHERE  CENTER 7.403000 24.861000 0.831000  RAD 1.0  CE1 
+SPHERE  CENTER 8.213000 23.993000 -1.249000  RAD 1.0  CE2 
+SPHERE  CENTER 7.215000 24.576000 -0.494000  RAD 1.0  CZ 
+SPHERE  CENTER 5.879000 24.768999 -1.060000  RAD 1.0  OH 
+SPHERE  CENTER 12.977000 21.141001 1.535000  RAD 1.0  N 
+SPHERE  CENTER 14.449000 20.892000 1.626000  RAD 1.0  CA 
+SPHERE  CENTER 15.018000 21.045000 0.237000  RAD 1.0  C 
+SPHERE  CENTER 14.250000 20.837000 -0.740000  RAD 1.0  O 
+SPHERE  CENTER 14.664000 19.434999 2.142000  RAD 1.0  CB 
+SPHERE  CENTER 14.283000 18.275999 1.191000  RAD 1.0  CG 
+SPHERE  CENTER 15.290000 17.639000 0.506000  RAD 1.0  CD1 
+SPHERE  CENTER 12.962000 17.907000 0.976000  RAD 1.0  CD2 
+SPHERE  CENTER 14.981000 16.632000 -0.392000  RAD 1.0  CE1 
+SPHERE  CENTER 12.638000 16.909000 0.061000  RAD 1.0  CE2 
+SPHERE  CENTER 13.673000 16.261999 -0.626000  RAD 1.0  CZ 
+SPHERE  CENTER 16.336000 21.281000 0.152000  RAD 1.0  N 
+SPHERE  CENTER 16.948000 21.292000 -1.153000  RAD 1.0  CA 
+SPHERE  CENTER 17.365000 19.888000 -1.542000  RAD 1.0  C 
+SPHERE  CENTER 18.009001 19.184000 -0.744000  RAD 1.0  O 
+SPHERE  CENTER 18.188000 22.194000 -1.071000  RAD 1.0  CB 
+SPHERE  CENTER 18.906000 22.263000 -2.442000  RAD 1.0  CG 
+SPHERE  CENTER 20.089001 21.621000 -2.663000  RAD 1.0  CD1 
+SPHERE  CENTER 18.361000 23.033001 -3.436000  RAD 1.0  CD2 
+SPHERE  CENTER 20.733000 21.778999 -3.896000  RAD 1.0  CE1 
+SPHERE  CENTER 18.990999 23.184999 -4.662000  RAD 1.0  CE2 
+SPHERE  CENTER 20.184999 22.562000 -4.864000  RAD 1.0  CZ 
+SPHERE  CENTER 20.826000 22.768000 -6.115000  RAD 1.0  OH 
+SPHERE  CENTER 16.913000 19.452999 -2.726000  RAD 1.0  N 
+SPHERE  CENTER 17.295000 18.160000 -3.291000  RAD 1.0  CA 
+SPHERE  CENTER 18.406000 18.332001 -4.341000  RAD 1.0  C 
+SPHERE  CENTER 18.166000 18.843000 -5.464000  RAD 1.0  O 
+SPHERE  CENTER 16.052000 17.558001 -3.946000  RAD 1.0  CB 
+SPHERE  CENTER 16.354000 16.226999 -4.626000  RAD 1.0  CG 
+SPHERE  CENTER 17.531000 15.754000 -4.725000  RAD 1.0  OD1 
+SPHERE  CENTER 15.234000 15.549000 -4.870000  RAD 1.0  ND2 
+SPHERE  CENTER 19.655001 18.124001 -3.871000  RAD 1.0  N 
+SPHERE  CENTER 20.851000 18.420000 -4.681000  RAD 1.0  CA 
+SPHERE  CENTER 20.920000 17.650000 -6.010000  RAD 1.0  C 
+SPHERE  CENTER 21.385000 18.257000 -6.997000  RAD 1.0  O 
+SPHERE  CENTER 22.112000 18.070999 -3.866000  RAD 1.0  CB 
+SPHERE  CENTER 20.333000 16.480000 -6.081000  RAD 1.0  N 
+SPHERE  CENTER 20.243999 15.784000 -7.383000  RAD 1.0  CA 
+SPHERE  CENTER 19.287001 16.482000 -8.327000  RAD 1.0  C 
+SPHERE  CENTER 19.478001 16.368999 -9.556000  RAD 1.0  O 
+SPHERE  CENTER 19.732000 14.353000 -7.259000  RAD 1.0  CB 
+SPHERE  CENTER 20.799999 13.485000 -6.626000  RAD 1.0  CG 
+SPHERE  CENTER 20.299000 12.037000 -6.533000  RAD 1.0  CD 
+SPHERE  CENTER 21.386999 11.067000 -6.033000  RAD 1.0  CE 
+SPHERE  CENTER 21.820999 11.437000 -4.681000  RAD 1.0  NZ 
+SPHERE  CENTER 18.212999 17.041000 -7.772000  RAD 1.0  N 
+SPHERE  CENTER 17.181999 17.617001 -8.631000  RAD 1.0  CA 
+SPHERE  CENTER 17.468000 19.070000 -8.921000  RAD 1.0  C 
+SPHERE  CENTER 16.909000 19.707001 -9.863000  RAD 1.0  O 
+SPHERE  CENTER 15.833000 17.423000 -7.901000  RAD 1.0  CB 
+SPHERE  CENTER 18.299000 19.622000 -8.061000  RAD 1.0  N 
+SPHERE  CENTER 18.625999 21.035999 -8.237000  RAD 1.0  CA 
+SPHERE  CENTER 17.587999 22.051001 -7.738000  RAD 1.0  C 
+SPHERE  CENTER 17.702000 23.257999 -8.056000  RAD 1.0  O 
+SPHERE  CENTER 16.632000 21.566000 -6.970000  RAD 1.0  N 
+SPHERE  CENTER 15.576000 22.431999 -6.478000  RAD 1.0  CA 
+SPHERE  CENTER 14.947000 21.879999 -5.199000  RAD 1.0  C 
+SPHERE  CENTER 15.304000 20.784000 -4.719000  RAD 1.0  O 
+SPHERE  CENTER 14.553000 22.764999 -7.568000  RAD 1.0  CB 
+SPHERE  CENTER 14.018000 21.514000 -8.283000  RAD 1.0  CG 
+SPHERE  CENTER 13.211000 20.593000 -7.394000  RAD 1.0  CD1 
+SPHERE  CENTER 13.189000 21.898001 -9.518000  RAD 1.0  CD2 
+SPHERE  CENTER 14.114000 22.691999 -4.605000  RAD 1.0  N 
+SPHERE  CENTER 13.591000 22.299999 -3.306000  RAD 1.0  CA 
+SPHERE  CENTER 12.246000 21.612000 -3.398000  RAD 1.0  C 
+SPHERE  CENTER 11.508000 21.862000 -4.381000  RAD 1.0  O 
+SPHERE  CENTER 13.406000 23.628000 -2.540000  RAD 1.0  CB 
+SPHERE  CENTER 14.977000 24.433001 -2.196000  RAD 1.0  SG 
+SPHERE  CENTER 12.005000 20.672001 -2.530000  RAD 1.0  N 
+SPHERE  CENTER 10.813000 19.820999 -2.569000  RAD 1.0  CA 
+SPHERE  CENTER 10.208000 19.822001 -1.167000  RAD 1.0  C 
+SPHERE  CENTER 10.918000 20.218000 -0.210000  RAD 1.0  O 
+SPHERE  CENTER 11.110000 18.377001 -3.007000  RAD 1.0  CB 
+SPHERE  CENTER 11.604000 18.464001 -4.496000  RAD 1.0  CG 
+SPHERE  CENTER 12.041000 17.093000 -4.992000  RAD 1.0  CD 
+SPHERE  CENTER 12.104000 16.884001 -6.223000  RAD 1.0  OE1 
+SPHERE  CENTER 12.461000 16.246000 -4.115000  RAD 1.0  NE2 
+SPHERE  CENTER 8.983000 19.459000 -1.072000  RAD 1.0  N 
+SPHERE  CENTER 8.377000 19.427999 0.280000  RAD 1.0  CA 
+SPHERE  CENTER 8.573000 18.100000 0.950000  RAD 1.0  C 
+SPHERE  CENTER 8.785000 17.013000 0.347000  RAD 1.0  O 
+SPHERE  CENTER 6.844000 19.700001 0.273000  RAD 1.0  CB 
+SPHERE  CENTER 6.304000 18.825001 -0.706000  RAD 1.0  OG1 
+SPHERE  CENTER 6.585000 21.149000 -0.177000  RAD 1.0  CG2 
+SPHERE  CENTER 8.526000 18.187000 2.280000  RAD 1.0  N 
+SPHERE  CENTER 8.582000 16.999001 3.087000  RAD 1.0  CA 
+SPHERE  CENTER 7.801000 17.273001 4.382000  RAD 1.0  C 
+SPHERE  CENTER 7.554000 18.469000 4.665000  RAD 1.0  O 
+SPHERE  CENTER 10.066000 16.503000 3.399000  RAD 1.0  CB 
+SPHERE  CENTER 10.840000 17.323999 4.462000  RAD 1.0  CG 
+SPHERE  CENTER 11.188000 16.711000 5.670000  RAD 1.0  CD1 
+SPHERE  CENTER 11.224000 18.618999 4.188000  RAD 1.0  CD2 
+SPHERE  CENTER 11.912000 17.452999 6.617000  RAD 1.0  CE1 
+SPHERE  CENTER 11.948000 19.333000 5.129000  RAD 1.0  CE2 
+SPHERE  CENTER 12.277000 18.763000 6.344000  RAD 1.0  CZ 
+SPHERE  CENTER 7.455000 16.219999 5.116000  RAD 1.0  N 
+SPHERE  CENTER 6.756000 16.414000 6.390000  RAD 1.0  CA 
+SPHERE  CENTER 7.798000 16.358999 7.491000  RAD 1.0  C 
+SPHERE  CENTER 8.422000 15.296000 7.692000  RAD 1.0  O 
+SPHERE  CENTER 5.716000 15.281000 6.557000  RAD 1.0  CB 
+SPHERE  CENTER 4.973000 15.432000 7.882000  RAD 1.0  CG1 
+SPHERE  CENTER 4.667000 15.326000 5.371000  RAD 1.0  CG2 
+SPHERE  CENTER 7.953000 17.509001 8.095000  RAD 1.0  N 
+SPHERE  CENTER 8.816000 17.659000 9.286000  RAD 1.0  CA 
+SPHERE  CENTER 7.941000 17.294001 10.498000  RAD 1.0  C 
+SPHERE  CENTER 6.818000 17.832001 10.661000  RAD 1.0  O 
+SPHERE  CENTER 9.260000 19.136000 9.274000  RAD 1.0  CB 
+SPHERE  CENTER 10.066000 19.506001 10.540000  RAD 1.0  CG 
+SPHERE  CENTER 11.058000 18.667999 11.032000  RAD 1.0  CD1 
+SPHERE  CENTER 9.728000 20.677999 11.181000  RAD 1.0  CD2 
+SPHERE  CENTER 11.713000 19.021999 12.217000  RAD 1.0  CE1 
+SPHERE  CENTER 10.401000 21.042000 12.346000  RAD 1.0  CE2 
+SPHERE  CENTER 11.371000 20.211000 12.851000  RAD 1.0  CZ 
+SPHERE  CENTER 12.040000 20.579000 14.049000  RAD 1.0  OH 
+SPHERE  CENTER 8.505000 16.504999 11.400000  RAD 1.0  N 
+SPHERE  CENTER 7.774000 16.076000 12.622000  RAD 1.0  CA 
+SPHERE  CENTER 7.696000 17.099001 13.728000  RAD 1.0  C 
+SPHERE  CENTER 6.978000 16.834999 14.718000  RAD 1.0  O 
+SPHERE  CENTER 8.385000 18.202000 13.646000  RAD 1.0  N 
+SPHERE  CENTER 8.275000 19.365999 14.533000  RAD 1.0  CA 
+SPHERE  CENTER 9.338000 19.430000 15.620000  RAD 1.0  C 
+SPHERE  CENTER 9.309000 20.379999 16.415001  RAD 1.0  O 
+SPHERE  CENTER 10.317000 18.555000 15.610000  RAD 1.0  N 
+SPHERE  CENTER 11.453000 18.707001 16.541000  RAD 1.0  CA 
+SPHERE  CENTER 12.763000 18.232000 15.950000  RAD 1.0  C 
+SPHERE  CENTER 12.753000 17.224001 15.201000  RAD 1.0  O 
+SPHERE  CENTER 11.179000 18.055000 17.937000  RAD 1.0  CB 
+SPHERE  CENTER 11.154000 16.283001 17.922001  RAD 1.0  SG 
+SPHERE  CENTER 13.828000 18.788000 16.528999  RAD 1.0  N 
+SPHERE  CENTER 15.222000 18.386999 16.261999  RAD 1.0  CA 
+SPHERE  CENTER 15.644000 18.605000 14.798000  RAD 1.0  C 
+SPHERE  CENTER 16.306000 17.708000 14.224000  RAD 1.0  O 
+SPHERE  CENTER 15.486000 16.941000 16.719000  RAD 1.0  CB 
+SPHERE  CENTER 14.949000 16.624001 18.146999  RAD 1.0  CG 
+SPHERE  CENTER 15.484000 17.593000 19.195000  RAD 1.0  CD 
+SPHERE  CENTER 15.081000 17.068001 20.497000  RAD 1.0  NE 
+SPHERE  CENTER 15.268000 17.830999 21.573999  RAD 1.0  CZ 
+SPHERE  CENTER 15.870000 19.020000 21.452999  RAD 1.0  NH1 
+SPHERE  CENTER 14.930000 17.320999 22.753000  RAD 1.0  NH2 
+SPHERE  CENTER 15.154000 19.670000 14.180000  RAD 1.0  N 
+SPHERE  CENTER 15.461000 19.893999 12.733000  RAD 1.0  CA 
+SPHERE  CENTER 16.969000 19.924000 12.482000  RAD 1.0  C 
+SPHERE  CENTER 17.752001 20.431000 13.327000  RAD 1.0  O 
+SPHERE  CENTER 14.918000 21.275000 12.366000  RAD 1.0  CB 
+SPHERE  CENTER 17.282000 19.622000 11.271000  RAD 1.0  N 
+SPHERE  CENTER 18.584999 19.886999 10.687000  RAD 1.0  CA 
+SPHERE  CENTER 18.461000 21.087000 9.753000  RAD 1.0  C 
+SPHERE  CENTER 17.371000 21.708000 9.790000  RAD 1.0  O 
+SPHERE  CENTER 18.961000 18.612000 9.934000  RAD 1.0  CB 
+SPHERE  CENTER 19.486000 17.514999 10.843000  RAD 1.0  CG 
+SPHERE  CENTER 20.042999 16.424999 9.926000  RAD 1.0  CD 
+SPHERE  CENTER 20.782000 15.386000 10.779000  RAD 1.0  CE 
+SPHERE  CENTER 20.985001 14.137000 10.021000  RAD 1.0  NZ 
+SPHERE  CENTER 19.577000 21.643999 9.215000  RAD 1.0  N 
+SPHERE  CENTER 19.570999 22.903000 8.543000  RAD 1.0  CA 
+SPHERE  CENTER 18.898001 22.847000 7.144000  RAD 1.0  C 
+SPHERE  CENTER 18.476000 23.930000 6.690000  RAD 1.0  O 
+SPHERE  CENTER 20.981001 23.469999 8.429000  RAD 1.0  CB 
+SPHERE  CENTER 21.461000 24.047001 9.786000  RAD 1.0  CG 
+SPHERE  CENTER 22.614000 25.047001 9.608000  RAD 1.0  CD 
+SPHERE  CENTER 22.118999 26.403999 9.384000  RAD 1.0  NE 
+SPHERE  CENTER 22.948000 27.426001 9.370000  RAD 1.0  CZ 
+SPHERE  CENTER 24.253000 27.187000 9.415000  RAD 1.0  NH1 
+SPHERE  CENTER 22.472000 28.634001 9.297000  RAD 1.0  NH2 
+SPHERE  CENTER 18.870001 21.715000 6.474000  RAD 1.0  N 
+SPHERE  CENTER 18.209999 21.712999 5.169000  RAD 1.0  CA 
+SPHERE  CENTER 16.671000 21.559000 5.372000  RAD 1.0  C 
+SPHERE  CENTER 16.068001 20.466000 5.197000  RAD 1.0  O 
+SPHERE  CENTER 18.745001 20.506001 4.379000  RAD 1.0  CB 
+SPHERE  CENTER 18.295000 20.591999 2.909000  RAD 1.0  CG 
+SPHERE  CENTER 17.721001 21.629000 2.499000  RAD 1.0  OD1 
+SPHERE  CENTER 18.664000 19.563999 2.134000  RAD 1.0  ND2 
+SPHERE  CENTER 16.097000 22.643000 5.820000  RAD 1.0  N 
+SPHERE  CENTER 14.676000 22.662001 6.349000  RAD 1.0  CA 
+SPHERE  CENTER 14.157000 24.101999 6.384000  RAD 1.0  C 
+SPHERE  CENTER 14.715000 24.959000 7.120000  RAD 1.0  O 
+SPHERE  CENTER 14.577000 21.951000 7.736000  RAD 1.0  CB 
+SPHERE  CENTER 13.128000 21.861000 8.301000  RAD 1.0  CG 
+SPHERE  CENTER 12.432000 22.889000 8.208000  RAD 1.0  OD1 
+SPHERE  CENTER 12.975000 21.035000 9.288000  RAD 1.0  ND2 
+SPHERE  CENTER 13.324000 24.438000 5.381000  RAD 1.0  N 
+SPHERE  CENTER 12.918000 25.816999 5.120000  RAD 1.0  CA 
+SPHERE  CENTER 11.388000 25.961000 5.164000  RAD 1.0  C 
+SPHERE  CENTER 10.669000 24.966000 4.915000  RAD 1.0  O 
+SPHERE  CENTER 13.372000 26.372999 3.741000  RAD 1.0  CB 
+SPHERE  CENTER 14.913000 26.191999 3.701000  RAD 1.0  CG 
+SPHERE  CENTER 15.492000 25.002001 3.268000  RAD 1.0  CD1 
+SPHERE  CENTER 15.705000 27.252001 4.053000  RAD 1.0  CD2 
+SPHERE  CENTER 16.877001 24.881001 3.132000  RAD 1.0  CE1 
+SPHERE  CENTER 17.108999 27.125999 3.941000  RAD 1.0  CE2 
+SPHERE  CENTER 17.659000 25.957001 3.487000  RAD 1.0  CZ 
+SPHERE  CENTER 10.949000 27.146999 5.460000  RAD 1.0  N 
+SPHERE  CENTER 9.480000 27.343000 5.498000  RAD 1.0  CA 
+SPHERE  CENTER 8.875000 27.670000 4.157000  RAD 1.0  C 
+SPHERE  CENTER 7.634000 27.622999 4.057000  RAD 1.0  O 
+SPHERE  CENTER 9.045000 28.475000 6.433000  RAD 1.0  CB 
+SPHERE  CENTER 9.258000 27.945999 7.875000  RAD 1.0  CG 
+SPHERE  CENTER 9.119000 29.052000 8.948000  RAD 1.0  CD 
+SPHERE  CENTER 10.025000 28.736000 10.167000  RAD 1.0  CE 
+SPHERE  CENTER 9.826000 29.728001 11.231000  RAD 1.0  NZ 
+SPHERE  CENTER 9.687000 27.909000 3.152000  RAD 1.0  N 
+SPHERE  CENTER 9.124000 28.167999 1.840000  RAD 1.0  CA 
+SPHERE  CENTER 10.108000 27.719000 0.765000  RAD 1.0  C 
+SPHERE  CENTER 11.332000 27.660000 1.047000  RAD 1.0  O 
+SPHERE  CENTER 8.778000 29.648001 1.642000  RAD 1.0  CB 
+SPHERE  CENTER 10.000000 30.391001 1.484000  RAD 1.0  OG 
+SPHERE  CENTER 9.604000 27.471001 -0.422000  RAD 1.0  N 
+SPHERE  CENTER 10.526000 27.160999 -1.512000  RAD 1.0  CA 
+SPHERE  CENTER 11.423000 28.346001 -1.863000  RAD 1.0  C 
+SPHERE  CENTER 12.634000 28.115000 -2.136000  RAD 1.0  O 
+SPHERE  CENTER 9.782000 26.679001 -2.783000  RAD 1.0  CB 
+SPHERE  CENTER 10.966000 29.570000 -1.682000  RAD 1.0  N 
+SPHERE  CENTER 11.751000 30.764000 -1.998000  RAD 1.0  CA 
+SPHERE  CENTER 12.900000 30.964001 -1.040000  RAD 1.0  C 
+SPHERE  CENTER 14.032000 31.282000 -1.463000  RAD 1.0  O 
+SPHERE  CENTER 10.871000 32.021999 -2.024000  RAD 1.0  CB 
+SPHERE  CENTER 9.868000 32.069000 -3.200000  RAD 1.0  CG 
+SPHERE  CENTER 8.525000 31.417000 -2.847000  RAD 1.0  CD 
+SPHERE  CENTER 7.573000 31.562000 -3.638000  RAD 1.0  OE1 
+SPHERE  CENTER 8.368000 30.636999 -1.865000  RAD 1.0  OE2 
+SPHERE  CENTER 12.658000 30.686001 0.225000  RAD 1.0  N 
+SPHERE  CENTER 13.804000 30.775000 1.163000  RAD 1.0  CA 
+SPHERE  CENTER 14.824000 29.667000 0.941000  RAD 1.0  C 
+SPHERE  CENTER 16.058001 29.903999 1.049000  RAD 1.0  O 
+SPHERE  CENTER 13.347000 30.500000 2.601000  RAD 1.0  CB 
+SPHERE  CENTER 12.813000 31.775999 3.236000  RAD 1.0  CG 
+SPHERE  CENTER 12.716000 32.875000 2.613000  RAD 1.0  OD1 
+SPHERE  CENTER 12.096000 31.598000 4.247000  RAD 1.0  OD2 
+SPHERE  CENTER 14.305000 28.478001 0.644000  RAD 1.0  N 
+SPHERE  CENTER 15.128000 27.301001 0.379000  RAD 1.0  CA 
+SPHERE  CENTER 16.006001 27.523001 -0.852000  RAD 1.0  C 
+SPHERE  CENTER 17.247999 27.267000 -0.809000  RAD 1.0  O 
+SPHERE  CENTER 14.238000 26.045000 0.259000  RAD 1.0  CB 
+SPHERE  CENTER 15.047000 24.530001 -0.176000  RAD 1.0  SG 
+SPHERE  CENTER 15.384000 28.062000 -1.870000  RAD 1.0  N 
+SPHERE  CENTER 16.191999 28.302000 -3.048000  RAD 1.0  CA 
+SPHERE  CENTER 17.171000 29.452999 -2.841000  RAD 1.0  C 
+SPHERE  CENTER 18.246000 29.474001 -3.490000  RAD 1.0  O 
+SPHERE  CENTER 15.267000 28.570999 -4.266000  RAD 1.0  CB 
+SPHERE  CENTER 14.634000 27.261000 -4.708000  RAD 1.0  CG 
+SPHERE  CENTER 15.759000 25.962000 -5.253000  RAD 1.0  SD 
+SPHERE  CENTER 16.306999 26.625000 -6.805000  RAD 1.0  CE 
+SPHERE  CENTER 16.775999 30.469999 -2.099000  RAD 1.0  N 
+SPHERE  CENTER 17.652000 31.617001 -1.869000  RAD 1.0  CA 
+SPHERE  CENTER 18.910000 31.125999 -1.141000  RAD 1.0  C 
+SPHERE  CENTER 20.049999 31.469999 -1.556000  RAD 1.0  O 
+SPHERE  CENTER 16.934000 32.595001 -0.930000  RAD 1.0  CB 
+SPHERE  CENTER 17.721001 33.839001 -0.540000  RAD 1.0  CG 
+SPHERE  CENTER 16.740999 35.039001 -0.291000  RAD 1.0  CD 
+SPHERE  CENTER 15.472000 34.667999 0.404000  RAD 1.0  NE 
+SPHERE  CENTER 14.256000 34.889999 -0.074000  RAD 1.0  CZ 
+SPHERE  CENTER 13.983000 35.465000 -1.233000  RAD 1.0  NH1 
+SPHERE  CENTER 13.260000 34.542999 0.660000  RAD 1.0  NH2 
+SPHERE  CENTER 18.726999 30.198999 -0.237000  RAD 1.0  N 
+SPHERE  CENTER 19.889999 29.693001 0.496000  RAD 1.0  CA 
+SPHERE  CENTER 20.636999 28.649000 -0.297000  RAD 1.0  C 
+SPHERE  CENTER 21.871000 28.686001 -0.287000  RAD 1.0  O 
+SPHERE  CENTER 19.416000 29.106001 1.823000  RAD 1.0  CB 
+SPHERE  CENTER 18.643999 30.132000 2.537000  RAD 1.0  OG1 
+SPHERE  CENTER 20.615999 28.506001 2.662000  RAD 1.0  CG2 
+SPHERE  CENTER 19.988001 27.747000 -0.961000  RAD 1.0  N 
+SPHERE  CENTER 20.669001 26.563999 -1.471000  RAD 1.0  CA 
+SPHERE  CENTER 20.773001 26.534000 -2.963000  RAD 1.0  C 
+SPHERE  CENTER 21.341000 25.552999 -3.498000  RAD 1.0  O 
+SPHERE  CENTER 19.955999 25.260000 -1.056000  RAD 1.0  CB 
+SPHERE  CENTER 20.128000 24.914000 0.713000  RAD 1.0  SG 
+SPHERE  CENTER 20.132000 27.441999 -3.608000  RAD 1.0  N 
+SPHERE  CENTER 19.987000 27.268000 -5.071000  RAD 1.0  CA 
+SPHERE  CENTER 21.257000 27.575001 -5.849000  RAD 1.0  C 
+SPHERE  CENTER 21.386000 27.129000 -7.018000  RAD 1.0  O 
+SPHERE  CENTER 22.225000 28.049999 -5.113000  RAD 1.0  N 
+SPHERE  CENTER 23.639000 28.131001 -5.505000  RAD 1.0  CA 
+SPHERE  CENTER 23.886999 29.393000 -6.316000  RAD 1.0  C 
+SPHERE  CENTER 22.948999 30.065001 -6.822000  RAD 1.0  O 
+SPHERE  CENTER 25.146000 29.681000 -6.493000  RAD 1.0  N 
+SPHERE  CENTER 25.617001 30.840000 -7.256000  RAD 1.0  CA 
+SPHERE  CENTER 25.247999 30.735001 -8.729000  RAD 1.0  C 
+SPHERE  CENTER 24.962000 31.791000 -9.369000  RAD 1.0  O 
+SPHERE  CENTER 27.160000 30.980000 -7.146000  RAD 1.0  CB 
+SPHERE  CENTER 24.919001 29.594000 -9.172000  RAD 1.0  OXT 
+
+PLANE 
+  CENTER 0.0 -25.0 0.0 
+  NORMAL 0.0  1.0 0.0  
+  TEXTURE 
+    AMBIENT  0.1 DIFFUSE  0.9 SPECULAR 0.0  OPACITY 1.0 
+    COLOR  1.0 1.0 1.0 
+    TEXFUNC 0 
+       
+END_SCENE
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/index.html
new file mode 100644 (file)
index 0000000..98d98bd
--- /dev/null
@@ -0,0 +1,202 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Parallel raytracer / renderer that demonstrates the use of parallel_for.
+
+<P><I>
+This example includes software developed by John E. Stone.  See
+<A HREF=#copyright>here</A> for copyright information.
+</I></P>
+
+<P>
+This example is a 2-D raytracer/renderer that visually shows different parallel scheduling
+methods and their resulting speedup.  The code was parallelized by speculating
+that each pixel could be rendered in parallel.  The resulting parallel code was
+then checked for correctness by using Intel&reg; Thread Checker, which
+pointed out where synchronization was needed.  Minimal synchronization was then
+inserted into the parallel code.  The resulting parallel code exhibits good speedup.
+</P>
+
+<P>
+The following versions of the example are provided:
+<DL>
+<DT>serial
+<DD>Original sequential version.
+<DT>tbb1d
+<DD>Parallel version that uses Threading Building Blocks and blocked_range to parallelize
+       over tasks that are groups of scan-lines.
+    <UL>
+    <LI>By default, this version uses one thread per available processor.  To change this
+       default, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.
+    <LI>This version uses the preview feature: auto_range_partitioner.  No grain size is provided to blocked_range.
+        The blocked_range class uses a default grain size of 1 when none is provided.  However, the auto_range_partitioner 
+        controls the amount of range splitting dynamically at runtime, resulting in sub-ranges of varying sizes.  
+    </UL>
+<DT>tbb
+<DD>Parallel version that uses Threading Building Blocks and blocked_range2d to parallelize
+       over tasks that are rectangular sub-areas.
+    <UL>
+    <LI>By default, this version uses one thread per available processor.  To change this
+       default, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.
+    <LI>This version uses a reasonable task grain size by default.  To change this default,
+       set the TBB_GRAINSIZE environment variable to the desired grain size before running.
+       The grain size corresponds to the number of pixels (in the X or Y direction, for a
+       rectangular sub-area) in each parallel task.
+    </UL>
+</DL>
+</P>
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="src/video.cpp">src/video.cpp</A>
+<DD>Source code for main program and GUI interfaces.
+<DT><A HREF="src/trace.serial.cpp">src/trace.serial.cpp</A>
+<DD>Source code for original sequential version of example.
+<DT><A HREF="src/trace.tbb1d.cpp">src/trace.tbb1d.cpp</A>
+<DD>Source code for Threading Building Blocks blocked_range (scan-line) version of example.
+<DT><A HREF="src/trace.tbb.cpp">src/trace.tbb.cpp</A>
+<DD>Source code for Threading Building Blocks blocked_range2d (rectangular sub-area) version of example.
+<DT>(src/*.cpp)
+<DD>Remainder of source code for example.
+<DT>(src/*.h)
+<DD>Remainder of include files for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="src">src</A>
+<DD>Contains source code and include files for the example.
+<DT><A HREF="dat">dat</A>
+<DD>Contains data sets for running the example.
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<P>
+For Windows* systems, Microsoft* Visual Studio* projects are provided for each of the above versions.
+</P>
+
+<P>
+The Makefile supports the following build targets (in addition to the <A HREF=../../index.html#build>general</A> ones).
+Here, &lt;<I>version</I>&gt; is one of the above versions of the example, i.e., {serial, tbb1d, tbb}.
+</P>
+<DL>
+<DT><TT>make &lt;<I>version</I>&gt;[_debug]</TT>
+<DD>Build and run a single version (release or debug).
+    Equivalent to 'make build_&lt;<I>version</I>&gt;[_debug] run_&lt;<I>version</I>&gt;'.
+<DT><TT>make build_&lt;<I>version</I>&gt;[_debug]</TT>
+<DD>Compile and link a single version (release or debug).
+    The resulting executable is left in the directory for the example.
+<DT><TT>make run_&lt;<I>version</I>&gt;</TT>
+<DD>Run a single version previously produced by one of the above commands.
+<DT><TT>make [(above options or targets)] DATASET={820spheres, balls, balls3, lattice, model2,
+    teapot, trypsin4pti}</TT>
+<DD>Build and run as above, but run with the specified data set.
+<DT><TT>make [(above options or targets)] ARGS=-D</TT>
+<DD>Build and run as above, but run with disabled run-time display updating for use in making performance measurements
+    <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
+<DT><TT>make [(above options or targets)] UI={con, gdi, dd, x, mac}</TT>
+<DD>Build and run as usual, but build with the specified GUI driver: console, GDI+*, Direct Draw*, X11, or OpenGL*
+       (see the description of the <A HREF=../../common/index.html>common GUI code</A>
+       for more information on available graphics support).
+    For Linux* and Mac OS* X systems, the best available driver is detected automatically by the Makefile.
+    For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=dd may offer superior
+       performance, but can only be used if the Microsoft* Direct Draw* SDK is installed on your system 
+       and if overlay is supported by your graphics card.
+    Use UI=con to build without the GUI for use in making performance measurements
+       <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
+<DT><TT>make [(above options or targets)] XARCH=x64</TT>
+<DD>Build and run as above, but
+    also specify XARCH=x64 (or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary.
+<DT><TT>make [(above options or targets)] DDLIB_DIR=&lt;<I>specify path to library directory of Direct Draw* SDK here</I>&gt;</TT>
+<DD>If you experience ddraw.lib linking problems, specify the correct library directory via this option.
+</DL>
+
+<H2>Usage</H2>
+Building via the above make commands, or via Visual Studio projects on Windows* systems, produces executable files
+named tachyon.&lt;<I>version</I>&gt;.exe.  To run these executables directly, use one or more of the following commands.
+<DL>
+<DT><TT>tachyon.&lt;<I>version</I>&gt;.exe &lt;<I>dataset</I>&gt;</TT>
+<DD>Run this version (release or debug), where &lt;<I>dataset</I>&gt; is the path/name of
+    one of the *.dat files in the <A HREF="dat">dat</A> directory for the example.
+<DT><TT>tachyon.&lt;<I>version</I>&gt;.exe -D &lt;<I>dataset</I>&gt;</TT>
+<DD>Run this version (release or debug), but run with disabled run-time display updating
+    for use in making performance measurements
+    <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
+<DT>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:
+<DD>Build a <I>debug</I> version of the <TT>tbb</TT> example with the GUI turned off
+    (e.g., <TT>make UI=con tbb_debug</TT>; see also the build directions above).
+    <BR>Run it with a small dataset, e.g., <TT>tachyon.tbb.exe -D dat/820spheres.dat</TT>.
+</DL>
+
+<H2>Notes</H2>
+<UL>
+<LI>While running with the GUI display turned on should yield reasonable performance in most cases, <I>running with the GUI
+    display turned off is strongly recommended</I> in order to demonstrate the full performance and scalability of the example.
+<LI>If using the X-windows (X11) GUI on Mac OS* X systems, X11 might not be installed on the system by default.
+    To install X11 on Mac OS* X systems, use the operating system install disk, choose "Optional installs" and select X11 from
+    the "Applications" list.  Alternatively, if X11 is not available, build without the GUI (see build targets above).
+</UL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+
+<I>
+<P>
+The original source for this example is
+Copyright (c) 1994-2008 John E. Stone
+All rights reserved.
+</P>
+
+<P>
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+<OL>
+<LI>Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+<LI>Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+<LI>The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+</OL>
+</P>
+
+<P>
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+</P>
+</I>
+
+</BODY>
+</HTML>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/api.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/api.cpp
new file mode 100644 (file)
index 0000000..b68ff8e
--- /dev/null
@@ -0,0 +1,428 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * api.c - This file contains all of the API calls that are defined for
+ *         external driver code to use.  
+ * 
+ *  $Id: api.cpp,v 1.5 2007-02-22 17:54:14 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+
+#include "box.h"
+#include "cylinder.h"
+#include "plane.h"
+#include "quadric.h"
+#include "ring.h"
+#include "sphere.h"
+#include "triangle.h"
+#include "vol.h"
+#include "extvol.h"
+
+#include "texture.h"
+#include "light.h"
+#include "render.h"
+#include "camera.h"
+#include "vector.h"
+#include "intersect.h"
+#include "shade.h"
+#include "util.h"
+#include "imap.h"
+#include "global.h"
+
+#include "video.h"
+
+typedef void * SceneHandle;
+#include "api.h"
+
+
+vector rt_vector(apiflt x, apiflt y, apiflt z) {
+  vector v;
+
+  v.x = x;
+  v.y = y;
+  v.z = z;
+
+  return v;
+}
+
+color rt_color(apiflt r, apiflt g, apiflt b) {
+  color c;
+  
+  c.r = r;
+  c.g = g;
+  c.b = b;
+  
+  return c;
+}
+
+void rt_initialize(int * argc, char ***argv) {
+  rpcmsg msg;
+
+  reset_object();
+  reset_lights();
+  InitTextures();
+
+  if (!parinitted) {
+    parinitted=1;
+
+    msg.type=1; /* setup a ping message */
+  }
+}
+
+void rt_renderscene(SceneHandle voidscene) {
+  scenedef * scene = (scenedef *) voidscene;
+  renderscene(*scene);
+}
+
+void rt_camerasetup(SceneHandle voidscene, apiflt zoom, apiflt aspectratio, 
+       int antialiasing, int raydepth, 
+       vector camcent, vector viewvec, vector upvec) {
+  scenedef * scene = (scenedef *) voidscene;
+
+  vector newupvec;
+  vector newviewvec;
+  vector newrightvec;
+  VCross((vector *) &upvec, &viewvec, &newrightvec);
+  VNorm(&newrightvec);
+
+  VCross((vector *) &viewvec, &newrightvec, &newupvec);
+  VNorm(&newupvec);
+
+  newviewvec=viewvec;
+  VNorm(&newviewvec);
+
+
+  scene->camzoom=zoom; 
+  scene->aspectratio=aspectratio;
+  scene->antialiasing=antialiasing;
+  scene->raydepth=raydepth; 
+  scene->camcent=camcent;
+  scene->camviewvec=newviewvec;
+  scene->camrightvec=newrightvec;
+  scene->camupvec=newupvec;
+}
+
+void rt_outputfile(SceneHandle voidscene, const char * outname) {
+  scenedef * scene = (scenedef *) voidscene;
+  strcpy((char *) &scene->outfilename, outname);
+}
+
+void rt_resolution(SceneHandle voidscene, int hres, int vres) {
+  scenedef * scene = (scenedef *) voidscene;
+  scene->hres=hres;
+  scene->vres=vres;
+}
+
+void rt_verbose(SceneHandle voidscene, int v) {
+  scenedef * scene = (scenedef *) voidscene;
+  scene->verbosemode = v;
+}
+
+void rt_rawimage(SceneHandle voidscene, unsigned char *rawimage) {
+  scenedef * scene = (scenedef *) voidscene;
+  scene->rawimage = rawimage;
+}
+
+void rt_background(SceneHandle voidscene, color col) {
+  scenedef * scene = (scenedef *) voidscene;
+  scene->background.r = col.r;
+  scene->background.g = col.g;
+  scene->background.b = col.b;
+}
+
+void rt_boundmode(SceneHandle voidscene, int mode) {
+  scenedef * scene = (scenedef *) voidscene;
+  scene->boundmode = mode;
+}
+
+void rt_boundthresh(SceneHandle voidscene, int threshold) {
+  scenedef * scene = (scenedef *) voidscene;
+  if (threshold > 1) {
+    scene->boundthresh = threshold;
+  }
+  else {
+    rtmesg("Ignoring out-of-range automatic bounding threshold.\n");
+    rtmesg("Automatic bounding threshold reset to default.\n");
+    scene->boundthresh = MAXOCTNODES;
+  }
+}
+
+void rt_displaymode(SceneHandle voidscene, int mode) {
+  scenedef * scene = (scenedef *) voidscene;
+  scene->displaymode = mode;
+}
+
+
+void rt_scenesetup(SceneHandle voidscene, char * outname, int hres, int vres, int verbose) {
+  rt_outputfile(voidscene, outname);
+  rt_resolution(voidscene, hres, vres);
+  rt_verbose(voidscene, verbose);
+}
+
+SceneHandle rt_newscene(void) {
+  scenedef * scene;
+  SceneHandle voidscene;
+
+  scene = (scenedef *) malloc(sizeof(scenedef));
+  memset(scene, 0, sizeof(scenedef));             /* clear all valuas to 0  */
+
+  voidscene = (SceneHandle) scene;
+
+  rt_outputfile(voidscene, "/dev/null");   /* default output file (.tga)   */
+  rt_resolution(voidscene, 512, 512);             /* 512x512 resolution     */
+  rt_verbose(voidscene, 0);                       /* verbose messages off   */
+  rt_rawimage(voidscene, NULL);                   /* raw image output off   */
+  rt_boundmode(voidscene, RT_BOUNDING_ENABLED);   /* spatial subdivision on */
+  rt_boundthresh(voidscene, MAXOCTNODES);         /* default threshold      */
+  rt_displaymode(voidscene, RT_DISPLAY_ENABLED);  /* video output on        */
+  rt_camerasetup(voidscene, 1.0, 1.0, 0, 6,
+                 rt_vector(0.0, 0.0, 0.0),
+                 rt_vector(0.0, 0.0, 1.0),
+                 rt_vector(0.0, 1.0, 0.0));
+  return scene;
+}
+
+void rt_deletescene(SceneHandle scene) {
+  if (scene != NULL)
+    free(scene);
+}
+
+void apitextotex(apitexture * apitex, texture * tex) {
+  switch(apitex->texturefunc) {
+    case 0: 
+      tex->texfunc=(color(*)(void *, void *, void *))(standard_texture);
+      break;
+
+    case 1: 
+      tex->texfunc=(color(*)(void *, void *, void *))(checker_texture);
+      break;
+
+    case 2: 
+      tex->texfunc=(color(*)(void *, void *, void *))(grit_texture);
+      break;
+
+    case 3: 
+      tex->texfunc=(color(*)(void *, void *, void *))(marble_texture);
+      break;
+
+    case 4: 
+      tex->texfunc=(color(*)(void *, void *, void *))(wood_texture);
+      break;
+
+    case 5: 
+      tex->texfunc=(color(*)(void *, void *, void *))(gnoise_texture);
+      break;
+       
+    case 6: 
+      tex->texfunc=(color(*)(void *, void *, void *))(cyl_checker_texture);
+      break;
+
+    case 7: 
+      tex->texfunc=(color(*)(void *, void *, void *))(image_sphere_texture);
+      tex->img=AllocateImage((char *)apitex->imap);
+      break;
+
+    case 8: 
+      tex->texfunc=(color(*)(void *, void *, void *))(image_cyl_texture);
+      tex->img=AllocateImage((char *)apitex->imap);
+      break;
+
+    case 9: 
+      tex->texfunc=(color(*)(void *, void *, void *))(image_plane_texture);
+      tex->img=AllocateImage((char *)apitex->imap);
+      break;
+
+    default: 
+      tex->texfunc=(color(*)(void *, void *, void *))(standard_texture);
+      break;
+  }
+
+       tex->ctr = apitex->ctr;
+       tex->rot = apitex->rot;
+     tex->scale = apitex->scale;
+      tex->uaxs = apitex->uaxs;
+      tex->vaxs = apitex->vaxs;
+   tex->ambient = apitex->ambient;
+   tex->diffuse = apitex->diffuse;
+  tex->specular = apitex->specular;
+   tex->opacity = apitex->opacity;
+       tex->col = apitex->col; 
+
+  tex->islight = 0;
+  tex->shadowcast = 1;
+  tex->phong = 0.0;
+  tex->phongexp = 0.0;
+  tex->phongtype = 0;
+}
+
+void * rt_texture(apitexture * apitex) {
+  texture * tex;
+
+  tex=(texture *)rt_getmem(sizeof(texture));
+  apitextotex(apitex, tex); 
+  return(tex);
+}
+
+void rt_tex_color(void * voidtex, color col) {
+  texture * tex = (texture *) voidtex;
+  tex->col = col;
+}
+
+void rt_tex_phong(void * voidtex, apiflt phong, apiflt phongexp, int type) {
+  texture * tex = (texture *) voidtex;
+  tex->phong = phong;
+  tex->phongexp = phongexp;
+  tex->phongtype = type;
+}
+
+void rt_light(void * tex, vector ctr, apiflt rad) {
+  point_light * li;
+
+  li=newlight(tex, (vector) ctr, rad);
+
+  li->tex->islight=1;
+  li->tex->shadowcast=1;
+  li->tex->diffuse=0.0;
+  li->tex->specular=0.0;
+  li->tex->opacity=1.0;
+
+  add_light(li);
+  add_object((object *)li);
+}
+
+void rt_scalarvol(void * tex, vector min, vector max,
+       int xs, int ys, int zs, char * fname, void * invol) {
+  add_object((object *) newscalarvol(tex, (vector)min, (vector)max, xs, ys, zs, fname, (scalarvol *) invol));
+}
+
+void rt_extvol(void * tex, vector min, vector max, int samples, flt (* evaluator)(flt, flt, flt)) {
+  add_object((object *) newextvol(tex, (vector)min, (vector)max, samples, evaluator));
+}
+
+void rt_box(void * tex, vector min, vector max) {
+  add_object((object *) newbox(tex, (vector)min, (vector)max));
+} 
+
+void rt_cylinder(void * tex, vector ctr, vector axis, apiflt rad) {
+  add_object(newcylinder(tex, (vector)ctr, (vector)axis, rad));
+}
+
+void rt_fcylinder(void * tex, vector ctr, vector axis, apiflt rad) {
+  add_object(newfcylinder(tex, (vector)ctr, (vector)axis, rad));
+}
+
+void rt_plane(void * tex, vector ctr, vector norm) {
+  add_object(newplane(tex, (vector)ctr, (vector)norm));
+} 
+
+void rt_ring(void * tex, vector ctr, vector norm, apiflt a, apiflt b) {
+  add_object(newring(tex, (vector)ctr, (vector)norm, a, b));
+} 
+
+void rt_sphere(void * tex, vector ctr, apiflt rad) {
+  add_object(newsphere(tex, (vector)ctr, rad));
+}
+
+void rt_tri(void * tex, vector v0, vector v1, vector v2) {
+  object * trn;
+
+  trn = newtri(tex, (vector)v0, (vector)v1, (vector)v2);
+
+  if (trn != NULL) { 
+    add_object(trn);
+  }
+} 
+
+void rt_stri(void * tex, vector v0, vector v1, vector v2, 
+               vector n0, vector n1, vector n2) {
+  object * trn;
+  trn = newstri(tex, (vector)v0, (vector)v1, (vector)v2, (vector)n0, (vector)n1, (vector)n2);
+
+  if (trn != NULL) { 
+    add_object(trn);
+  }
+} 
+
+void rt_quadsphere(void * tex, vector ctr, apiflt rad) {
+  quadric * q;
+  flt factor;
+  q=(quadric *) newquadric();
+  factor= 1.0 / (rad*rad);
+  q->tex=(texture *)tex;
+  q->ctr=ctr;
+  q->mat.a=factor;
+  q->mat.b=0.0;
+  q->mat.c=0.0;
+  q->mat.d=0.0;
+  q->mat.e=factor;
+  q->mat.f=0.0;
+  q->mat.g=0.0;
+  q->mat.h=factor;
+  q->mat.i=0.0;
+  q->mat.j=-1.0;
+  add_object((object *)q);
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/api.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/api.h
new file mode 100644 (file)
index 0000000..acd3830
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*****************************************************************************
+ * api.h - The declarations and prototypes needed so that 3rd party driver   *
+ *         code can run the raytracer.  Third party driver code should       * 
+ *         only use the functions in this header file to interface with      *
+ *         the rendering engine.                                             *
+ *************************************************************************** */
+
+
+/* 
+ *  $Id: api.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+
+/********************************************/
+/* Types defined for use with the API calls */
+/********************************************/
+
+#ifdef USESINGLEFLT
+typedef float apiflt;   /* generic floating point number */
+#else
+typedef double apiflt;  /* generic floating point number */
+#endif
+
+typedef void * SceneHandle;
+
+typedef struct {
+  int texturefunc; /* which texture function to use */
+  color col;    /* base object color */
+  int shadowcast;  /* does the object cast a shadow */
+  apiflt ambient;  /* ambient lighting */
+  apiflt diffuse;  /* diffuse reflection */
+  apiflt specular; /* specular reflection */
+  apiflt opacity;  /* how opaque the object is */ 
+  vector ctr;   /* origin of texture */
+  vector rot;   /* rotation of texture around origin */
+  vector scale; /* scale of texture in x,y,z */ 
+  vector uaxs;  /* planar map u axis */
+  vector vaxs;  /* planar map v axis */
+  char imap[96];   /* name of image map */ 
+} apitexture;
+
+
+/*******************************************************************
+ *  NOTE: The value passed in apitexture.texturefunc corresponds to 
+ *        the meanings given in this table:
+ *
+ *   0 - No texture function is applied other than standard lighting.
+ *   1 - 3D checkerboard texture.  Red & Blue checkers through 3d space.
+ *   2 - Grit texture, roughens up the surface of the object a bit.
+ *   3 - 3D marble texture.  Makes a 3D swirl pattern through the object.
+ *   4 - 3D wood texture.  Makes a 3D wood pattern through the object.
+ *   5 - 3D gradient noise function.
+ *   6 - I've forgotten :-)
+ *   7 - Cylindrical Image Map  **** IMAGE MAPS REQUIRE the filename 
+ *   8 - Spherical Image Map         of the image be put in imap[]
+ *   9 - Planar Image Map            part of the texture...
+ *        planar requires uaxs, and vaxs..
+ *
+ *******************************************************************/
+
+/********************************************/
+/* Functions implemented to provide the API */
+/********************************************/
+
+vector rt_vector(apiflt x, apiflt y, apiflt z); /* helper to make vectors */
+color  rt_color(apiflt r, apiflt g, apiflt b);  /* helper to make colors */
+
+void rt_initialize(int *, char ***);/* reset raytracer, memory deallocation */
+void rt_finalize(void); /* close down for good.. */
+
+SceneHandle rt_newscene(void);        /* allocate new scene */
+void rt_deletescene(SceneHandle); /* delete a scene */
+void rt_renderscene(SceneHandle); /* raytrace the current scene */  
+void rt_outputfile(SceneHandle, const char * outname); 
+void rt_resolution(SceneHandle, int hres, int vres);
+void rt_verbose(SceneHandle, int v);
+void rt_rawimage(SceneHandle, unsigned char *rawimage);
+void rt_background(SceneHandle, color);
+
+/* Parameter values for rt_boundmode() */
+#define RT_BOUNDING_DISABLED 0
+#define RT_BOUNDING_ENABLED  1
+
+void rt_boundmode(SceneHandle, int);
+void rt_boundthresh(SceneHandle, int);
+
+/* Parameter values for rt_displaymode() */
+#define RT_DISPLAY_DISABLED  0
+#define RT_DISPLAY_ENABLED   1
+
+void rt_displaymode(SceneHandle, int);
+
+void rt_scenesetup(SceneHandle, char *, int, int, int);
+  /* scene, output filename, horizontal resolution, vertical resolution,
+            verbose mode */
+
+
+void rt_camerasetup(SceneHandle, apiflt, apiflt, int, int,
+       vector, vector,  vector);
+  /* camera parms: scene, zoom, aspectratio, antialiasing, raydepth,
+               camera center, view direction, up direction */
+
+
+
+void * rt_texture(apitexture *);
+   /* pointer to the texture struct that would have been passed to each 
+      object() call in older revisions.. */
+
+
+
+
+void rt_light(void * , vector, apiflt);     /* add a light */
+  /* light parms: texture, center, radius */ 
+
+void rt_sphere(void *, vector, apiflt);    /* add a sphere */
+  /* sphere parms: texture, center, radius */
+
+void rt_scalarvol(void *, vector, vector,
+                int, int, int, char *, void *); 
+
+void rt_extvol(void *, vector, vector, int, apiflt (* evaluator)(apiflt, apiflt, apiflt)); 
+
+void rt_box(void *, vector, vector);  
+  /* box parms: texture, min, max */
+
+void rt_plane(void *, vector, vector);  
+  /* plane parms: texture, center, normal */
+
+void rt_ring(void *, vector, vector, apiflt, apiflt); 
+  /* ring parms: texture, center, normal, inner, outer */
+
+void rt_tri(void *, vector, vector, vector);  
+  /* tri parms: texture, vertex 0, vertex 1, vertex 2 */
+
+void rt_stri(void *, vector, vector, vector, 
+                       vector, vector, vector); 
+ /* stri parms: texture, vertex 0, vertex 1, vertex 2, norm 0, norm 1, norm 2 */
+
+void rt_heightfield(void *, vector, int, int, apiflt *, apiflt, apiflt);
+  /* field parms: texture, center, m, n, field, wx, wy */
+
+void rt_landscape(void *, int, int, vector,  apiflt, apiflt);
+
+void rt_quadsphere(void *, vector, apiflt); /* add quadric sphere */
+  /* sphere parms: texture, center, radius */
+
+void rt_cylinder(void *, vector, vector, apiflt);
+
+void rt_fcylinder(void *, vector, vector, apiflt);
+
+void rt_polycylinder(void *, vector *, int, apiflt);
+
+
+/* new texture handling routines */
+void rt_tex_color(void * voidtex, color col); 
+
+#define RT_PHONG_PLASTIC 0
+#define RT_PHONG_METAL   1
+void rt_tex_phong(void * voidtex, apiflt phong, apiflt phongexp, int type); 
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/apigeom.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/apigeom.cpp
new file mode 100644 (file)
index 0000000..e03c774
--- /dev/null
@@ -0,0 +1,278 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * api.c - This file contains all of the API calls that are defined for
+ *         external driver code to use.  
+ * 
+ *  $Id: apigeom.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "api.h"
+#include "macros.h"
+#include "vector.h"
+
+#define MyVNorm(a)             VNorm ((vector *) a)
+
+void rt_polycylinder(void * tex, vector * points, int numpts, apiflt rad) {
+  vector a;
+  int i;
+
+  if ((points == NULL) || (numpts == 0)) {
+    return;
+  }
+
+  if (numpts > 0) {
+    rt_sphere(tex, points[0], rad);
+    
+    if (numpts > 1) {
+      for (i=1; i<numpts; i++) {
+        a.x = points[i].x - points[i-1].x;
+        a.y = points[i].y - points[i-1].y;
+        a.z = points[i].z - points[i-1].z;
+        
+        rt_fcylinder(tex, points[i-1], a, rad);
+        rt_sphere(tex, points[i], rad);
+      }
+    }
+  }
+}
+
+void rt_heightfield(void * tex, vector ctr, int m, int n, 
+                    apiflt * field, apiflt wx, apiflt wy) {
+  int xx,yy; 
+  vector v0, v1, v2; 
+  apiflt xoff, yoff, zoff;
+
+  xoff=ctr.x - (wx / 2.0);
+  yoff=ctr.z - (wy / 2.0);
+  zoff=ctr.y;
+
+  for (yy=0; yy<(n-1); yy++) { 
+    for (xx=0; xx<(m-1); xx++) {
+      v0.x=wx*(xx    )/(m*1.0) + xoff; 
+      v0.y=field[(yy    )*m + (xx    )] + zoff;
+      v0.z=wy*(yy    )/(n*1.0) + yoff;
+
+      v1.x=wx*(xx + 1)/(m*1.0) + xoff; 
+      v1.y=field[(yy    )*m + (xx + 1)] + zoff;
+      v1.z=wy*(yy    )/(n*1.0) + yoff;
+
+      v2.x=wx*(xx + 1)/(m*1.0) + xoff; 
+      v2.y=field[(yy + 1)*m + (xx + 1)] + zoff;
+      v2.z=wy*(yy + 1)/(n*1.0) + yoff;
+
+      rt_tri(tex, v1, v0, v2);
+
+      v0.x=wx*(xx    )/(m*1.0) + xoff;
+      v0.y=field[(yy    )*m + (xx    )] + zoff;
+      v0.z=wy*(yy    )/(n*1.0) + yoff;
+
+      v1.x=wx*(xx    )/(m*1.0) + xoff;
+      v1.y=field[(yy + 1)*m + (xx    )] + zoff;
+      v1.z=wy*(yy + 1)/(n*1.0) + yoff;
+
+      v2.x=wx*(xx + 1)/(m*1.0) + xoff;
+      v2.y=field[(yy + 1)*m + (xx + 1)] + zoff;
+      v2.z=wy*(yy + 1)/(n*1.0) + yoff;
+      rt_tri(tex, v0, v1, v2);
+    }
+  } 
+} /* end of heightfield */
+
+
+static void rt_sheightfield(void * tex, vector ctr, int m, int n, 
+                    apiflt * field, apiflt wx, apiflt wy) {
+  vector * vertices;
+  vector * normals;
+  vector offset;
+  apiflt xinc, yinc;
+  int x, y, addr; 
+   
+  vertices = (vector *) malloc(m*n*sizeof(vector));
+  normals = (vector *) malloc(m*n*sizeof(vector));
+
+  offset.x = ctr.x - (wx / 2.0);
+  offset.y = ctr.z - (wy / 2.0);
+  offset.z = ctr.y;
+
+  xinc = wx / ((apiflt) m);
+  yinc = wy / ((apiflt) n);
+
+  /* build vertex list */
+  for (y=0; y<n; y++) { 
+    for (x=0; x<m; x++) {
+      addr = y*m + x;
+      vertices[addr] = rt_vector(
+        x * xinc + offset.x,
+        field[addr] + offset.z,
+        y * yinc + offset.y);
+    }
+  }
+
+  /* build normals from vertex list */
+  for (x=1; x<m; x++) {
+    normals[x] = normals[(n - 1)*m + x] = rt_vector(0.0, 1.0, 0.0);
+  }
+  for (y=1; y<n; y++) {
+    normals[y*m] = normals[y*m + (m-1)] = rt_vector(0.0, 1.0, 0.0);
+  }
+  for (y=1; y<(n-1); y++) {
+    for (x=1; x<(m-1); x++) {
+      addr = y*m + x;
+
+      normals[addr] = rt_vector(
+        -(field[addr + 1] - field[addr - 1]) / (2.0 * xinc), 
+        1.0, 
+        -(field[addr + m] - field[addr - m]) / (2.0 * yinc));
+
+      MyVNorm(&normals[addr]);
+    }
+  }    
+
+  /* generate actual triangles */
+  for (y=0; y<(n-1); y++) {
+    for (x=0; x<(m-1); x++) {
+      addr = y*m + x;
+
+      rt_stri(tex, vertices[addr], vertices[addr + 1 + m], vertices[addr + 1],
+                   normals[addr], normals[addr + 1 + m], normals[addr + 1]);
+      rt_stri(tex, vertices[addr], vertices[addr + m], vertices[addr + 1 + m],
+                   normals[addr], normals[addr + m], normals[addr + 1 + m]);
+    }
+  }
+
+  free(normals);
+  free(vertices);
+} /* end of smoothed heightfield */
+
+
+static void adjust(apiflt *base, int xres, int yres, apiflt wx, apiflt wy, 
+               int xa, int ya, int x, int y, int xb, int yb) {
+  apiflt d, v;
+  
+  if (base[x + (xres*y)]==0.0) { 
+
+    d=(abs(xa - xb) / (xres * 1.0))*wx + (abs(ya - yb) / (yres * 1.0))*wy; 
+
+    v=(base[xa + (xres*ya)] + base[xb + (xres*yb)]) / 2.0 +
+       (((((rand() % 1000) - 500.0)/500.0)*d) / 8.0);
+
+    if (v < 0.0) v=0.0; 
+    if (v > (xres + yres)) v=(xres + yres);
+    base[x + (xres * y)]=v; 
+ } 
+}
+
+static void subdivide(apiflt *base, int xres, int yres, apiflt wx, apiflt wy,
+                  int x1, int y1, int x2, int y2) {
+  long x,y;
+
+  if (((x2 - x1) < 2) && ((y2 - y1) < 2)) { return; }
+
+  x=(x1 + x2) / 2;
+  y=(y1 + y2) / 2;
+
+  adjust(base, xres, yres, wx, wy, x1, y1, x, y1, x2, y1);
+  adjust(base, xres, yres, wx, wy, x2, y1, x2, y, x2, y2);
+  adjust(base, xres, yres, wx, wy, x1, y2, x, y2, x2, y2);
+  adjust(base, xres, yres, wx, wy, x1, y1, x1, y, x1, y2);
+
+  if (base[x + xres*y]==0.0) {
+    base[x + (xres * y)]=(base[x1 + xres*y1] + base[x2 + xres*y1] +
+                          base[x2 + xres*y2] + base[x1 + xres*y2]   )/4.0;
+  }
+  subdivide(base, xres, yres, wx, wy, x1, y1 ,x ,y);
+  subdivide(base, xres, yres, wx, wy, x, y1, x2, y);
+  subdivide(base, xres, yres, wx, wy, x, y, x2, y2);
+  subdivide(base, xres, yres, wx, wy, x1, y, x, y2);
+}
+
+void rt_landscape(void * tex, int m, int n, 
+               vector ctr, apiflt wx, apiflt wy) {
+  int totalsize, x, y;
+  apiflt * field; 
+
+  totalsize=m*n;
+
+  srand(totalsize);
+
+  field=(apiflt *) malloc(totalsize*sizeof(apiflt));
+
+  for (y=0; y<n; y++) {
+    for (x=0; x<m; x++) {
+       field[x + y*m]=0.0;
+    }
+  }
+
+  field[0 + 0]=1.0 + (rand() % 100)/100.0;
+  field[m - 1]=1.0 + (rand() % 100)/100.0;
+  field[0     + m*(n - 1)]=1.0 + (rand() % 100)/100.0;
+  field[m - 1 + m*(n - 1)]=1.0 + (rand() % 100)/100.0;
+
+  subdivide(field, m, n, wx, wy, 0, 0, m-1, n-1);
+
+  rt_sheightfield(tex, ctr, m, n, field, wx, wy);
+
+  free(field);
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/apitrigeom.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/apitrigeom.cpp
new file mode 100644 (file)
index 0000000..bca7507
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * apitrigeom.c - This file contains code for generating triangle tesselated
+ *                geometry, for use with OpenGL, XGL, etc.
+ * 
+ *  $Id: apitrigeom.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "api.h"
+#include "macros.h"
+#include "vector.h"
+
+#define MyVNorm(a)             VNorm ((vector *) a)
+#define MyVCross(a,b,c)                VCross ((vector *) a, (vector *) b, (vector *) c)
+#define MyVAddS(x,a,b,c)       VAddS ((flt) x, (vector *) a, (vector *) b, (vector *) c)
+
+#define CYLFACETS 36
+#define RINGFACETS 36
+#define SPHEREFACETS 25
+
+void rt_tri_fcylinder(void * tex, vector ctr, vector axis, apiflt rad) {
+  vector x, y, z, tmp;
+  double u, v, u2, v2;
+  int j;
+  vector p1, p2, p3, p4;
+  vector n1, n2;
+
+  z = axis;
+  MyVNorm(&z);
+  tmp.x = z.y - 2.1111111;
+  tmp.y = -z.z + 3.14159267;
+  tmp.z = z.x - 3.915292342341;
+  MyVNorm(&z);
+  MyVNorm(&tmp);
+  MyVCross(&z, &tmp, &x);
+  MyVNorm(&x);
+  MyVCross(&x, &z, &y);
+  MyVNorm(&y);
+
+  for (j=0; j<CYLFACETS; j++) {
+     u = rad * sin((6.28 * j) / (CYLFACETS - 1.0));
+     v = rad * cos((6.28 * j) / (CYLFACETS - 1.0));
+    u2 = rad * sin((6.28 * (j + 1.0)) / (CYLFACETS - 1.0));
+    v2 = rad * cos((6.28 * (j + 1.0)) / (CYLFACETS - 1.0));
+
+    p1.x = p1.y = p1.z = 0.0;
+    p4 = p3 = p2 = p1;
+
+    MyVAddS(u, &x, &p1, &p1);
+    MyVAddS(v, &y, &p1, &p1);
+    n1 = p1;
+    MyVNorm(&n1);
+    MyVAddS(1.0, &ctr, &p1, &p1);
+  
+
+    MyVAddS(u2, &x, &p2, &p2);
+    MyVAddS(v2, &y, &p2, &p2);
+    n2 = p2;
+    MyVNorm(&n2);
+    MyVAddS(1.0, &ctr, &p2, &p2);
+
+    MyVAddS(1.0, &axis, &p1, &p3);
+    MyVAddS(1.0, &axis, &p2, &p4);
+
+    rt_stri(tex, p1, p2, p3, n1, n2, n1);
+    rt_stri(tex, p3, p2, p4, n1, n2, n2);
+  }
+}
+
+void rt_tri_cylinder(void * tex, vector ctr, vector axis, apiflt rad) {
+  rt_fcylinder(tex, ctr, axis, rad);
+}
+
+void rt_tri_ring(void * tex, vector ctr, vector norm, apiflt a, apiflt b) {
+  vector x, y, z, tmp;
+  double u, v, u2, v2;
+  int j;
+  vector p1, p2, p3, p4;
+  vector n1, n2;
+
+  z = norm;
+  MyVNorm(&z);
+  tmp.x = z.y - 2.1111111;
+  tmp.y = -z.z + 3.14159267;
+  tmp.z = z.x - 3.915292342341;
+  MyVNorm(&z);
+  MyVNorm(&tmp);
+  MyVCross(&z, &tmp, &x);
+  MyVNorm(&x);
+  MyVCross(&x, &z, &y);
+  MyVNorm(&y);
+
+  for (j=0; j<RINGFACETS; j++) {
+     u = sin((6.28 * j) / (RINGFACETS - 1.0));
+     v = cos((6.28 * j) / (RINGFACETS - 1.0));
+    u2 = sin((6.28 * (j + 1.0)) / (RINGFACETS - 1.0));
+    v2 = cos((6.28 * (j + 1.0)) / (RINGFACETS - 1.0));
+
+    p1.x = p1.y = p1.z = 0.0;
+    p4 = p3 = p2 = p1;
+
+    MyVAddS(u, &x, &p1, &p1);
+    MyVAddS(v, &y, &p1, &p1);
+    n1 = p1;
+    MyVNorm(&n1);
+    MyVAddS(a, &n1, &ctr, &p1);
+    MyVAddS(b, &n1, &ctr, &p3);
+
+    MyVAddS(u2, &x, &p2, &p2);
+    MyVAddS(v2, &y, &p2, &p2);
+    n2 = p2;
+    MyVNorm(&n2);
+    MyVAddS(a, &n2, &ctr, &p2);
+    MyVAddS(b, &n2, &ctr, &p4);
+
+    rt_stri(tex, p1, p2, p3, norm, norm, norm);
+    rt_stri(tex, p3, p2, p4, norm, norm, norm);
+
+  }
+} 
+
+void rt_tri_box(void * tex, vector min, vector max) {
+  /* -XY face */
+  rt_tri(tex, rt_vector(min.x, min.y, min.z),
+              rt_vector(min.x, max.y, min.z), 
+              rt_vector(max.x, max.y, min.z));
+  rt_tri(tex, rt_vector(min.x, min.y, min.z),
+              rt_vector(max.x, max.y, min.z), 
+              rt_vector(max.x, min.y, min.z));
+
+  /* +XY face */
+  rt_tri(tex, rt_vector(min.x, min.y, max.z),
+              rt_vector(max.x, max.y, max.z),
+              rt_vector(min.x, max.y, max.z)); 
+  rt_tri(tex, rt_vector(min.x, min.y, max.z),
+              rt_vector(max.x, min.y, max.z),
+              rt_vector(max.x, max.y, max.z)); 
+
+  /* -YZ face */
+  rt_tri(tex, rt_vector(min.x, min.y, min.z),
+              rt_vector(min.x, max.y, max.z),
+              rt_vector(min.x, min.y, max.z)); 
+  rt_tri(tex, rt_vector(min.x, min.y, min.z),
+              rt_vector(min.x, max.y, min.z),
+              rt_vector(min.x, max.y, max.z)); 
+
+  /* +YZ face */
+  rt_tri(tex, rt_vector(max.x, min.y, min.z),
+              rt_vector(max.x, min.y, max.z),
+              rt_vector(max.x, max.y, max.z));
+  rt_tri(tex, rt_vector(max.x, min.y, min.z),
+              rt_vector(max.x, max.y, max.z),
+              rt_vector(max.x, max.y, min.z));
+
+  /* -XZ face */
+  rt_tri(tex, rt_vector(min.x, min.y, min.z),
+              rt_vector(min.x, min.y, max.z), 
+              rt_vector(max.x, min.y, max.z));
+  rt_tri(tex, rt_vector(min.x, min.y, min.z),
+              rt_vector(max.x, min.y, max.z), 
+              rt_vector(max.x, min.y, min.z));
+
+  /* +XZ face */
+  rt_tri(tex, rt_vector(min.x, max.y, min.z),
+              rt_vector(max.x, max.y, max.z),
+              rt_vector(min.x, max.y, max.z)); 
+  rt_tri(tex, rt_vector(min.x, max.y, min.z),
+              rt_vector(max.x, max.y, min.z),
+              rt_vector(max.x, max.y, max.z)); 
+}
+
+void rt_tri_sphere(void * tex, vector ctr, apiflt rad) {
+}
+
+void rt_tri_plane(void * tex, vector ctr, vector norm) {
+  rt_tri_ring(tex, ctr, norm, 0.0, 10000.0);
+} 
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/apitrigeom.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/apitrigeom.h
new file mode 100644 (file)
index 0000000..a61d4c8
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * apitrigeom.h - header for functions to generate triangle tesselated 
+ *                geometry for use with OpenGL, XGL, etc.
+ *
+ */
+
+void rt_tri_fcylinder(void * tex, vector ctr, vector axis, apiflt rad);
+void rt_tri_cylinder(void * tex, vector ctr, vector axis, apiflt rad);
+void rt_tri_ring(void * tex, vector ctr, vector norm, apiflt a, apiflt b);
+void rt_tri_plane(void * tex, vector ctr, vector norm);
+void rt_tri_box(void * tex, vector min, vector max);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/bndbox.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/bndbox.cpp
new file mode 100644 (file)
index 0000000..8d57525
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * bndbox.c - This file contains the functions for dealing with bounding boxes.
+ *
+ *  $Id: bndbox.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define BNDBOX_PRIVATE
+#include "bndbox.h"
+
+static object_methods bndbox_methods = {
+  (void (*)(void *, void *))(bndbox_intersect),
+  (void (*)(void *, void *, void *, void *))(NULL),
+  bndbox_bbox, 
+  free_bndbox 
+};
+
+
+bndbox * newbndbox(vector min, vector max) {
+  bndbox * b;
+  
+  b=(bndbox *) rt_getmem(sizeof(bndbox));
+  memset(b, 0, sizeof(bndbox));
+  b->min=min;
+  b->max=max;
+  b->methods = &bndbox_methods;
+
+  b->objlist=NULL;
+  b->tex=NULL;
+  b->nextobj=NULL;
+  return b;
+}
+
+
+static int bndbox_bbox(void * obj, vector * min, vector * max) {
+  bndbox * b = (bndbox *) obj;
+
+  *min = b->min;
+  *max = b->max;
+
+  return 1;
+}
+
+
+static void free_bndbox(void * v) {
+  bndbox * b = (bndbox *) v; 
+
+  free_objects(b->objlist);  
+  free(b);
+}
+
+
+static void bndbox_intersect(bndbox * bx, ray * ry) {
+  flt a, tx1, tx2, ty1, ty2, tz1, tz2;
+  flt tnear, tfar;
+  object * obj;
+  ray newray; 
+
+  /* eliminate bounded rays whose bounds do not intersect  */
+  /* the bounds of the box..                               */
+  if (ry->flags |= RT_RAY_BOUNDED) {
+    if ((ry->s.x > bx->max.x) && (ry->e.x > bx->max.x)) return;
+    if ((ry->s.x < bx->min.x) && (ry->e.x < bx->min.x)) return;
+  
+    if ((ry->s.y > bx->max.y) && (ry->e.y > bx->max.y)) return;
+    if ((ry->s.y < bx->min.y) && (ry->e.y < bx->min.y)) return;
+
+    if ((ry->s.z > bx->max.z) && (ry->e.z > bx->max.z)) return;
+    if ((ry->s.z < bx->min.z) && (ry->e.z < bx->min.z)) return;
+  }
+
+  tnear= -FHUGE;
+  tfar= FHUGE;
+
+  if (ry->d.x == 0.0) {
+    if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return;
+  }
+  else { 
+    tx1 = (bx->min.x - ry->o.x) / ry->d.x;
+    tx2 = (bx->max.x - ry->o.x) / ry->d.x;
+    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; } 
+    if (tx1 > tnear) tnear=tx1;   
+    if (tx2 < tfar)   tfar=tx2;   
+  }  
+  if (tnear > tfar) return; 
+  if (tfar < 0.0) return;
+  
+  if (ry->d.y == 0.0) { 
+    if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return;
+  }
+  else { 
+    ty1 = (bx->min.y - ry->o.y) / ry->d.y;
+    ty2 = (bx->max.y - ry->o.y) / ry->d.y;
+    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; } 
+    if (ty1 > tnear) tnear=ty1;   
+    if (ty2 < tfar)   tfar=ty2;   
+  } 
+  if (tnear > tfar) return; 
+  if (tfar < 0.0) return;
+  if (ry->d.z == 0.0) { 
+    if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return;
+  }
+  else { 
+    tz1 = (bx->min.z - ry->o.z) / ry->d.z;
+    tz2 = (bx->max.z - ry->o.z) / ry->d.z;
+    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; } 
+    if (tz1 > tnear) tnear=tz1;   
+    if (tz2 < tfar)   tfar=tz2;   
+  } 
+  if (tnear > tfar) return; 
+  if (tfar < 0.0) return;
+
+
+  /* intersect all of the enclosed objects */
+  newray=*ry;
+  newray.flags |= RT_RAY_BOUNDED;
+
+  RAYPNT(newray.s , (*ry) , tnear); 
+  RAYPNT(newray.e , (*ry) , (tfar + EPSILON)); 
+  obj = bx->objlist;
+  while (obj != NULL) {
+    obj->methods->intersect(obj, &newray); 
+    obj = (object *)obj->nextobj;
+  }
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/bndbox.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/bndbox.h
new file mode 100644 (file)
index 0000000..3e5b265
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * bndbox.h - This file contains the defines for bounding boxes etc.
+ *
+ *  $Id: bndbox.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+typedef struct {
+  unsigned int id;                      /* Unique Object serial number    */
+  void * nextobj;                       /* pointer to next object in list */
+  object_methods * methods;             /* this object's methods          */
+  texture * tex;                        /* object texture                 */
+  vector min;
+  vector max;
+  object * objlist;
+} bndbox; 
+
+bndbox * newbndbox(vector min, vector max);
+
+#ifdef BNDBOX_PRIVATE
+
+static int bndbox_bbox(void * obj, vector * min, vector * max);
+static void free_bndbox(void * v);
+static void bndbox_intersect(bndbox *, ray *);
+
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/box.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/box.cpp
new file mode 100644 (file)
index 0000000..5a38650
--- /dev/null
@@ -0,0 +1,178 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * box.c - This file contains the functions for dealing with boxes.
+ *
+ *  $Id: box.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "box.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+int box_bbox(void * obj, vector * min, vector * max) {
+  box * b = (box *) obj;
+
+  *min = b->min;
+  *max = b->max;
+
+  return 1;
+}
+
+static object_methods box_methods = {
+  (void (*)(void *, void *))(box_intersect),
+  (void (*)(void *, void *, void *, void *))(box_normal),
+  box_bbox, 
+  free 
+};
+
+box * newbox(void * tex, vector min, vector max) {
+  box * b;
+  
+  b=(box *) rt_getmem(sizeof(box));
+  memset(b, 0, sizeof(box));
+  b->methods = &box_methods;
+  b->tex = (texture *)tex;
+  b->min = min; 
+  b->max = max;
+
+  return b;
+}
+
+void box_intersect(box * bx, ray * ry) {
+  flt a, tx1, tx2, ty1, ty2, tz1, tz2;
+  flt tnear, tfar;
+
+  tnear= -FHUGE;
+  tfar= FHUGE;
+
+  if (ry->d.x == 0.0) {
+    if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return;
+  }
+  else {
+    tx1 = (bx->min.x - ry->o.x) / ry->d.x;
+    tx2 = (bx->max.x - ry->o.x) / ry->d.x;
+    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; } 
+    if (tx1 > tnear) tnear=tx1;   
+    if (tx2 < tfar)   tfar=tx2;   
+  } 
+  if (tnear > tfar) return; 
+  if (tfar < 0.0) return;
+  
+  if (ry->d.y == 0.0) { 
+    if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return;
+  }
+  else {
+    ty1 = (bx->min.y - ry->o.y) / ry->d.y;
+    ty2 = (bx->max.y - ry->o.y) / ry->d.y;
+    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; } 
+    if (ty1 > tnear) tnear=ty1;   
+    if (ty2 < tfar)   tfar=ty2;   
+  }
+  if (tnear > tfar) return; 
+  if (tfar < 0.0) return;
+  if (ry->d.z == 0.0) { 
+    if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return;
+  }
+  else {
+    tz1 = (bx->min.z - ry->o.z) / ry->d.z;
+    tz2 = (bx->max.z - ry->o.z) / ry->d.z;
+    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; } 
+    if (tz1 > tnear) tnear=tz1;   
+    if (tz2 < tfar)   tfar=tz2;   
+  }
+  if (tnear > tfar) return; 
+  if (tfar < 0.0) return;
+
+  add_intersection(tnear, (object *) bx, ry);
+  add_intersection(tfar, (object *) bx, ry);
+}
+
+void box_normal(box * bx, vector  * pnt, ray * incident, vector * N) {
+  vector a, b, c; 
+  flt t;
+  c.x=(bx->max.x + bx->min.x) / 2.0;
+  c.y=(bx->max.y + bx->min.y) / 2.0;
+  c.z=(bx->max.z + bx->min.z) / 2.0;
+  VSub((vector *) pnt, &c, N);
+  b=(*N);
+
+  a.x=fabs(N->x);
+  a.y=fabs(N->y);
+  a.z=fabs(N->z);
+  N->x=0.0;  N->y=0.0;  N->z=0.0;
+
+  t=MYMAX(a.x, MYMAX(a.y, a.z));  
+
+  if (t==a.x) N->x=b.x;  
+
+  if (t==a.y) N->y=b.y; 
+
+  if (t==a.z) N->z=b.z;
+
+  VNorm(N);
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/box.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/box.h
new file mode 100644 (file)
index 0000000..33d72fd
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * box.h - This file contains the defines for boxes etc.
+ *
+ *  $Id: box.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+typedef struct {
+  unsigned int id;                      /* Unique Object serial number    */
+  void * nextobj;                       /* pointer to next object in list */
+  object_methods * methods;             /* this object's methods          */
+  texture * tex;                        /* object texture                 */
+  vector min;
+  vector max;
+} box; 
+
+
+box * newbox(void * tex, vector min, vector max);
+void box_intersect(box *, ray *);
+void box_normal(box *, vector *, ray * incident, vector *);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/camera.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/camera.cpp
new file mode 100644 (file)
index 0000000..4e63179
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * camera.c - This file contains all of the functions for doing camera work.
+ *
+ *  $Id: camera.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "camera.h"
+#include "util.h"
+
+ray camray(scenedef *scene, int x, int y) {
+  ray ray1, newray;
+  vector projcent;
+  vector projpixel;
+  flt px, py, sx, sy;
+
+  sx = (flt) scene->hres; 
+  sy = (flt) scene->vres;
+
+  /* calculate the width and height of the image plane given the */
+  /* aspect ratio, image resolution, and zoom factor */
+
+  px=((sx / sy) / scene->aspectratio) / scene->camzoom;
+  py=1.0 / scene->camzoom;    
+
+  /* assuming viewvec is a unit vector, then the center of the */
+  /* image plane is the camera center + vievec                 */
+  projcent.x = scene->camcent.x + scene->camviewvec.x;
+  projcent.y = scene->camcent.y + scene->camviewvec.y;
+  projcent.z = scene->camcent.z + scene->camviewvec.z;
+
+  /* starting from the center of the image plane, we move the   */
+  /* center of the pel we're calculating, to                    */ 
+  /* projcent + (rightvec * x distance)                         */
+  ray1.o=projcent;
+  ray1.d=scene->camrightvec;
+  projpixel=Raypnt(&ray1, ((x*px/sx) - (px / 2.0))); 
+
+  /* starting from the horizontally translated pel, we move the */
+  /* center of the pel we're calculating, to                    */ 
+  /* projcent + (upvec * y distance)                            */
+  ray1.o=projpixel;
+  ray1.d=scene->camupvec;
+  projpixel=Raypnt(&ray1, ((y*py/sy) - (py / 2.0)));
+
+  /* now that we have the exact pel center in the image plane */
+  /* we create the real primary ray that will be used by the  */
+  /* rest of the system.                                      */
+  /* The ray is expected to be re-normalized elsewhere, we're */
+  /* only really concerned about getting its direction right. */
+  newray.o=scene->camcent;
+  VSub(&projpixel, &scene->camcent, &newray.d);
+  newray.depth = scene->raydepth;
+  newray.flags = RT_RAY_REGULAR;  /* camera only generates primary rays */
+
+  return newray;
+}
+
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/camera.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/camera.h
new file mode 100644 (file)
index 0000000..646303c
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * camera.h - This file contains the defines for camera routines etc.
+ *
+ *  $Id: camera.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+ray  camray(scenedef *, int, int);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/coordsys.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/coordsys.cpp
new file mode 100644 (file)
index 0000000..860ae73
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * coordsys.c -  Routines to translate from one coordinate system to another.
+ *
+ *  $Id: coordsys.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "coordsys.h"
+
+void xytopolar(flt x, flt y, flt rad, flt * u, flt * v) {
+  flt r1;
+  r1=x*x + y*y;  
+  *v=sqrt(r1 / (rad*rad));
+  if (y<0.0) 
+    *u=1.0 - acos(x/sqrt(r1))/TWOPI;
+  else 
+    *u= acos(x/sqrt(r1))/TWOPI; 
+}
+
+void xyztocyl(vector pnt, flt height, flt * u, flt * v) {
+  flt r1;
+
+  r1=pnt.x*pnt.x + pnt.y*pnt.y;
+
+  *v=pnt.z / height;
+  if (pnt.y<0.0) 
+    *u=1.0 - acos(pnt.x/sqrt(r1))/TWOPI;
+  else 
+    *u=acos(pnt.x/sqrt(r1))/TWOPI;
+}
+
+void xyztospr(vector pnt, flt * u, flt * v) {
+  flt r1, phi, theta;
+  r1=sqrt(pnt.x*pnt.x + pnt.y*pnt.y + pnt.z*pnt.z);
+
+  phi=acos(-pnt.y/r1);   
+  *v=phi/3.1415926;
+
+  theta=acos((pnt.x/r1)/sin(phi))/TWOPI;
+
+  if (pnt.z > 0.0) 
+    *u = theta;
+  else 
+    *u = 1 - theta; 
+}
+
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/coordsys.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/coordsys.h
new file mode 100644 (file)
index 0000000..b938acb
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * coordsys.h - defines for coordinate system routines.
+ *  
+ *  $Id: coordsys.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+#define TWOPI 6.2831853
+
+void xytopolar(flt, flt, flt, flt *, flt *);
+void xyztocyl(vector, flt, flt *, flt *);
+void xyztospr(vector, flt *, flt *);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/cylinder.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/cylinder.cpp
new file mode 100644 (file)
index 0000000..2bf4702
--- /dev/null
@@ -0,0 +1,281 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * cylinder.c - This file contains the functions for dealing with cylinders.
+ *
+ *  $Id: cylinder.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define CYLINDER_PRIVATE 
+#include "cylinder.h"
+
+static object_methods cylinder_methods = {
+  (void (*)(void *, void *))(cylinder_intersect),
+  (void (*)(void *, void *, void *, void *))(cylinder_normal),
+  cylinder_bbox, 
+  free 
+};
+
+static object_methods fcylinder_methods = {
+  (void (*)(void *, void *))(fcylinder_intersect),
+  (void (*)(void *, void *, void *, void *))(cylinder_normal),
+  fcylinder_bbox, 
+  free 
+};
+
+
+object * newcylinder(void * tex, vector ctr, vector axis, flt rad) {
+  cylinder * c;
+  
+  c=(cylinder *) rt_getmem(sizeof(cylinder));
+  memset(c, 0, sizeof(cylinder));
+  c->methods = &cylinder_methods;
+
+  c->tex=(texture *) tex;
+  c->ctr=ctr;
+  c->axis=axis;
+  c->rad=rad;
+  return (object *) c;
+}
+
+static int cylinder_bbox(void * obj, vector * min, vector * max) {
+  return 0; /* infinite / unbounded object */
+}
+
+static void cylinder_intersect(cylinder * cyl, ray * ry) {
+  vector rc, n, D, O;  
+  flt t, s, tin, tout, ln, d; 
+
+  rc.x = ry->o.x - cyl->ctr.x;
+  rc.y = ry->o.y - cyl->ctr.y;
+  rc.z = ry->o.z - cyl->ctr.z; 
+
+  VCross(&ry->d, &cyl->axis, &n);
+
+  VDOT(ln, n, n);
+  ln=sqrt(ln);    /* finish length calculation */
+
+  if (ln == 0.0) {  /* ray is parallel to the cylinder.. */
+    VDOT(d, rc, cyl->axis);         
+    D.x = rc.x - d * cyl->axis.x; 
+    D.y = rc.y - d * cyl->axis.y;
+    D.z = rc.z - d * cyl->axis.z;
+    VDOT(d, D, D);
+    d = sqrt(d);
+    tin = -FHUGE;
+    tout = FHUGE;
+    /* if (d <= cyl->rad) then ray is inside cylinder.. else outside */
+  }
+
+  VNorm(&n);
+  VDOT(d, rc, n);
+  d = fabs(d); 
+
+  if (d <= cyl->rad) {  /* ray intersects cylinder.. */
+    VCross(&rc, &cyl->axis, &O);
+    VDOT(t, O, n);
+    t = - t / ln;
+    VCross(&n, &cyl->axis, &O); 
+    VNorm(&O);
+    VDOT(s, ry->d, O);
+    s = fabs(sqrt(cyl->rad*cyl->rad - d*d) / s);
+    tin = t - s;
+    add_intersection(tin, (object *) cyl, ry); 
+    tout = t + s;
+    add_intersection(tout, (object *) cyl, ry);
+  }
+}
+
+static void cylinder_normal(cylinder * cyl, vector * pnt, ray * incident, vector * N) {
+  vector a,b,c;
+  flt t;
+
+  VSub((vector *) pnt, &(cyl->ctr), &a);
+
+  c=cyl->axis;
+
+  VNorm(&c);
+  VDOT(t, a, c);
+
+  b.x = c.x * t + cyl->ctr.x; 
+  b.y = c.y * t + cyl->ctr.y;
+  b.z = c.z * t + cyl->ctr.z;
+
+  VSub(pnt, &b, N); 
+  VNorm(N);
+
+  if (VDot(N, &(incident->d)) > 0.0)  { /* make cylinder double sided */
+    N->x=-N->x;
+    N->y=-N->y;
+    N->z=-N->z;
+  } 
+}
+
+object * newfcylinder(void * tex, vector ctr, vector axis, flt rad) {
+  cylinder * c;
+  
+  c=(cylinder *) rt_getmem(sizeof(cylinder));
+  memset(c, 0, sizeof(cylinder));
+  c->methods = &fcylinder_methods;
+
+  c->tex=(texture *) tex;
+  c->ctr=ctr;
+  c->axis=axis;
+  c->rad=rad;
+
+  return (object *) c;
+}
+
+static int fcylinder_bbox(void * obj, vector * min, vector * max) {
+  cylinder * c = (cylinder *) obj;
+  vector mintmp, maxtmp;
+
+  mintmp.x = c->ctr.x;
+  mintmp.y = c->ctr.y;
+  mintmp.z = c->ctr.z;
+  maxtmp.x = c->ctr.x + c->axis.x;
+  maxtmp.y = c->ctr.y + c->axis.y;
+  maxtmp.z = c->ctr.z + c->axis.z;
+
+  min->x = MYMIN(mintmp.x, maxtmp.x);
+  min->y = MYMIN(mintmp.y, maxtmp.y);
+  min->z = MYMIN(mintmp.z, maxtmp.z);
+  min->x -= c->rad;
+  min->y -= c->rad;
+  min->z -= c->rad;
+
+  max->x = MYMAX(mintmp.x, maxtmp.x);
+  max->y = MYMAX(mintmp.y, maxtmp.y);
+  max->z = MYMAX(mintmp.z, maxtmp.z);
+  max->x += c->rad;
+  max->y += c->rad;
+  max->z += c->rad;
+
+  return 1;
+}
+
+
+static void fcylinder_intersect(cylinder * cyl, ray * ry) {
+  vector rc, n, O, hit, tmp2, ctmp4;
+  flt t, s, tin, tout, ln, d, tmp, tmp3;
+  rc.x = ry->o.x - cyl->ctr.x;  
+  rc.y = ry->o.y - cyl->ctr.y;
+  rc.z = ry->o.z - cyl->ctr.z;
+  VCross(&ry->d, &cyl->axis, &n);
+  VDOT(ln, n, n);
+  ln=sqrt(ln);    /* finish length calculation */
+  if (ln == 0.0) {  /* ray is parallel to the cylinder.. */
+    return;       /* in this case, we want to miss or go through the "hole" */
+  }
+  VNorm(&n);
+  VDOT(d, rc, n);
+  d = fabs(d);
+  if (d <= cyl->rad) {  /* ray intersects cylinder.. */
+    VCross(&rc, &cyl->axis, &O);
+    VDOT(t, O, n);
+    t = - t / ln;
+    VCross(&n, &cyl->axis, &O);
+    VNorm(&O);
+    VDOT(s, ry->d, O);
+    s = fabs(sqrt(cyl->rad*cyl->rad - d*d) / s);
+    tin = t - s;
+
+    RAYPNT(hit, (*ry), tin); 
+
+    ctmp4=cyl->axis;
+    VNorm(&ctmp4);
+
+    tmp2.x = hit.x - cyl->ctr.x;   
+    tmp2.y = hit.y - cyl->ctr.y;   
+    tmp2.z = hit.z - cyl->ctr.z;   
+
+    VDOT(tmp,  tmp2, ctmp4);
+    VDOT(tmp3, cyl->axis, cyl->axis);
+
+    if ((tmp > 0.0) && (tmp < sqrt(tmp3))) 
+      add_intersection(tin, (object *) cyl, ry);
+    tout = t + s;
+
+    RAYPNT(hit, (*ry), tout); 
+
+    tmp2.x = hit.x - cyl->ctr.x;   
+    tmp2.y = hit.y - cyl->ctr.y;   
+    tmp2.z = hit.z - cyl->ctr.z;   
+
+    VDOT(tmp,  tmp2, ctmp4); 
+    VDOT(tmp3, cyl->axis, cyl->axis);
+
+    if ((tmp > 0.0) && (tmp < sqrt(tmp3))) 
+      add_intersection(tout, (object *) cyl, ry);
+  }
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/cylinder.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/cylinder.h
new file mode 100644 (file)
index 0000000..6ec230a
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * cylinder.h - This file contains the defines for cylinders etc.
+ *
+ *  $Id: cylinder.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+object * newcylinder(void *, vector, vector, flt);
+object * newfcylinder(void *, vector, vector, flt);
+
+#ifdef CYLINDER_PRIVATE
+
+typedef struct {
+  unsigned int id;                      /* Unique Object serial number    */
+  void * nextobj;                       /* pointer to next object in list */
+  object_methods * methods;             /* this object's methods          */
+  texture * tex;                        /* object texture                 */
+  vector ctr;
+  vector axis;
+  flt rad;
+} cylinder;
+
+static void cylinder_intersect(cylinder *, ray *);
+static void fcylinder_intersect(cylinder *, ray *);
+
+static int cylinder_bbox(void * obj, vector * min, vector * max);
+static int fcylinder_bbox(void * obj, vector * min, vector * max);
+
+static void cylinder_normal(cylinder *, vector *, ray *, vector *);
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/extvol.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/extvol.cpp
new file mode 100644 (file)
index 0000000..dba8443
--- /dev/null
@@ -0,0 +1,321 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * extvol.c - Volume rendering helper routines etc.
+ *
+ *  $Id: extvol.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+#include<stdio.h>
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "util.h"
+#include "box.h"
+#include "extvol.h"
+#include "trace.h"
+#include "sphere.h"
+#include "light.h"
+#include "shade.h"
+#include "global.h"
+
+
+int extvol_bbox(void * obj, vector * min, vector * max) {
+  box * b = (box *) obj;
+
+  *min = b->min;
+  *max = b->max;
+
+  return 1;
+}
+
+static object_methods extvol_methods = {
+  (void (*)(void *, void *))(box_intersect),
+  (void (*)(void *, void *, void *, void *))(box_normal),
+  extvol_bbox, 
+  free 
+};
+
+extvol * newextvol(void * voidtex, vector min, vector max, 
+                   int samples, flt (* evaluator)(flt, flt, flt)) { 
+  extvol * xvol;
+  texture * tex;
+  
+  tex = (texture *) voidtex;
+
+  xvol = (extvol *) rt_getmem(sizeof(extvol));
+  memset(xvol, 0, sizeof(extvol));
+
+  xvol->methods = &extvol_methods;
+
+  xvol->min=min;
+  xvol->max=max;
+  xvol->evaluator = evaluator;
+  xvol->ambient = tex->ambient;
+  xvol->diffuse = tex->diffuse;
+  xvol->opacity = tex->opacity;  
+  xvol->samples = samples;
+
+  xvol->tex = (texture *)rt_getmem(sizeof(texture));
+  memset(xvol->tex, 0, sizeof(texture));
+
+  xvol->tex->ctr.x = 0.0;
+  xvol->tex->ctr.y = 0.0;
+  xvol->tex->ctr.z = 0.0;
+  xvol->tex->rot = xvol->tex->ctr;
+  xvol->tex->scale = xvol->tex->ctr;
+  xvol->tex->uaxs = xvol->tex->ctr;
+  xvol->tex->vaxs = xvol->tex->ctr;
+  xvol->tex->islight = 0;
+  xvol->tex->shadowcast = 0;
+
+  xvol->tex->col=tex->col;
+  xvol->tex->ambient=1.0;
+  xvol->tex->diffuse=0.0;
+  xvol->tex->specular=0.0;
+  xvol->tex->opacity=1.0;
+  xvol->tex->img=NULL;
+  xvol->tex->texfunc=(color(*)(void *, void *, void *))(ext_volume_texture);
+  xvol->tex->obj = (void *) xvol; /* XXX hack! */
+
+  return xvol;
+}
+
+color ExtVoxelColor(flt scalar) {
+  color col;
+
+  if (scalar > 1.0) 
+    scalar = 1.0;
+
+  if (scalar < 0.0)
+    scalar = 0.0;
+
+  if (scalar < 0.5) {
+    col.g = 0.0;
+  }
+  else {
+    col.g = (scalar - 0.5) * 2.0;
+  }
+
+  col.r = scalar;
+  col.b = 1.0 - (scalar / 2.0);
+
+  return col;
+} 
+
+color ext_volume_texture(vector * hit, texture * tex, ray * ry) {
+  color col, col2;
+  box * bx;
+  extvol * xvol;
+  flt a, tx1, tx2, ty1, ty2, tz1, tz2;
+  flt tnear, tfar;
+  flt t, tdist, dt, ddt, sum, tt; 
+  vector pnt, bln;
+  flt scalar, transval; 
+  int i;
+  point_light * li;
+  color diffint; 
+  vector N, L;
+  flt inten;
+
+  col.r = 0.0;
+  col.g = 0.0;
+  col.b = 0.0;
+
+    bx = (box *) tex->obj;
+  xvol = (extvol *) tex->obj;
+  tnear= -FHUGE;
+  tfar= FHUGE;
+  if (ry->d.x == 0.0) {
+    if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return col;
+  }
+  else {
+    tx1 = (bx->min.x - ry->o.x) / ry->d.x;
+    tx2 = (bx->max.x - ry->o.x) / ry->d.x;
+    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }
+    if (tx1 > tnear) tnear=tx1;
+    if (tx2 < tfar)   tfar=tx2;
+  }
+  if (tnear > tfar) return col;
+  if (tfar < 0.0) return col;
+ if (ry->d.y == 0.0) {
+    if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return col;
+  }
+  else {
+    ty1 = (bx->min.y - ry->o.y) / ry->d.y;
+    ty2 = (bx->max.y - ry->o.y) / ry->d.y;
+    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }
+    if (ty1 > tnear) tnear=ty1;
+    if (ty2 < tfar)   tfar=ty2;
+  }
+  if (tnear > tfar) return col;
+  if (tfar < 0.0) return col;
+  if (ry->d.z == 0.0) {
+    if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return col;
+  }
+  else {
+    tz1 = (bx->min.z - ry->o.z) / ry->d.z;
+    tz2 = (bx->max.z - ry->o.z) / ry->d.z;
+    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }
+    if (tz1 > tnear) tnear=tz1;
+    if (tz2 < tfar)   tfar=tz2;
+  }
+  if (tnear > tfar) return col;
+  if (tfar < 0.0) return col;
+  if (tnear < 0.0) tnear=0.0;
+  tdist = xvol->samples;
+
+  tt = (xvol->opacity / tdist); 
+
+  bln.x=fabs(bx->min.x - bx->max.x);
+  bln.y=fabs(bx->min.y - bx->max.y);
+  bln.z=fabs(bx->min.z - bx->max.z);
+  
+     dt = 1.0 / tdist; 
+    sum = 0.0;
+
+/* Accumulate color as the ray passes through the voxels */
+  for (t=tnear; t<=tfar; t+=dt) {
+    if (sum < 1.0) {
+      pnt.x=((ry->o.x + (ry->d.x * t)) - bx->min.x) / bln.x;
+      pnt.y=((ry->o.y + (ry->d.y * t)) - bx->min.y) / bln.y;
+      pnt.z=((ry->o.z + (ry->d.z * t)) - bx->min.z) / bln.z;
+
+      /* call external evaluator assume 0.0 -> 1.0 range.. */ 
+      scalar = xvol->evaluator(pnt.x, pnt.y, pnt.z);  
+
+      transval = tt * scalar; 
+      sum += transval; 
+
+      col2 = ExtVoxelColor(scalar);
+
+      col.r += transval * col2.r * xvol->ambient;
+      col.g += transval * col2.g * xvol->ambient;
+      col.b += transval * col2.b * xvol->ambient;
+
+      ddt = dt;
+
+      /* Add in diffuse shaded light sources (no shadows) */
+      if (xvol->diffuse > 0.0) {
+  
+        /* Calculate the Volume gradient at the voxel */
+        N.x = (xvol->evaluator(pnt.x - ddt, pnt.y, pnt.z)  -  
+              xvol->evaluator(pnt.x + ddt, pnt.y, pnt.z)) *  8.0 * tt; 
+  
+        N.y = (xvol->evaluator(pnt.x, pnt.y - ddt, pnt.z)  -  
+              xvol->evaluator(pnt.x, pnt.y + ddt, pnt.z)) *  8.0 * tt; 
+  
+        N.z = (xvol->evaluator(pnt.x, pnt.y, pnt.z - ddt)  -  
+              xvol->evaluator(pnt.x, pnt.y, pnt.z + ddt)) *  8.0 * tt; 
+        /* only light surfaces with enough of a normal.. */
+        if ((N.x*N.x + N.y*N.y + N.z*N.z) > 0.0) { 
+          diffint.r = 0.0; 
+          diffint.g = 0.0; 
+          diffint.b = 0.0; 
+    
+          /* add the contribution of each of the lights.. */
+          for (i=0; i<numlights; i++) {
+            li=lightlist[i];
+            VSUB(li->ctr, (*hit), L)
+            VNorm(&L);
+            VDOT(inten, N, L)
+    
+            /* only add light if its from the front of the surface */
+            /* could add back-lighting if we wanted to later.. */
+            if (inten > 0.0) {
+              diffint.r += inten*li->tex->col.r;
+              diffint.g += inten*li->tex->col.g;
+              diffint.b += inten*li->tex->col.b;
+            }
+          }   
+          col.r += col2.r * diffint.r * xvol->diffuse;
+          col.g += col2.g * diffint.g * xvol->diffuse;
+          col.b += col2.b * diffint.b * xvol->diffuse;
+        }
+      }
+    }   
+    else { 
+      sum=1.0;
+    }  
+  }
+
+  /* Add in transmitted ray from outside environment */
+  if (sum < 1.0) {      /* spawn transmission rays / refraction */
+    color transcol;
+
+    transcol = shade_transmission(ry, hit, 1.0 - sum);
+
+    col.r += transcol.r; /* add the transmitted ray  */
+    col.g += transcol.g; /* to the diffuse and       */
+    col.b += transcol.b; /* transmission total..     */
+  }
+
+  return col;
+}
+
+
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/extvol.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/extvol.h
new file mode 100644 (file)
index 0000000..7883769
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * vol.h - Volume rendering definitions etc.
+ *
+ *
+ *  $Id: extvol.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+typedef struct {
+  unsigned int id;                      /* Unique Object serial number    */
+  void * nextobj;                       /* pointer to next object in list */
+  object_methods * methods;             /* this object's methods          */
+  texture * tex;                        /* object texture                 */
+  vector min;
+  vector max;
+  flt ambient;
+  flt diffuse;
+  flt opacity;
+  int samples;
+  flt (* evaluator)(flt, flt, flt);
+} extvol;
+
+extvol * newextvol(void * voidtex, vector min, vector max, 
+                   int samples, flt (* evaluator)(flt, flt, flt));
+color ext_volume_texture(vector *, texture *, ray *);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/getargs.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/getargs.cpp
new file mode 100644 (file)
index 0000000..e3d6ca6
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "types.h"
+#include "api.h"
+#include "getargs.h"
+
+void printusage(char **argv) {
+  fprintf(stderr, "Usage: \n");
+  fprintf(stderr, "  %s modelfile [options] \n", argv[0]);
+  fprintf(stderr, "\n");
+  fprintf(stderr, "Model file formats supported:\n");
+  fprintf(stderr, "  filename.dat -- The model files originated with this package.\n");
+  fprintf(stderr, "  filaname.ac  -- AC3D model files.\n");
+  fprintf(stderr, "  filename.nff -- The NFF scene format used by Eric Haines' SPD.\n");
+  fprintf(stderr, "\n");
+  fprintf(stderr, "Valid options:  (** denotes default behaviour)\n");
+  fprintf(stderr, " +D enable run-time display updating (if build supports it) **\n");
+  fprintf(stderr, " -D disable run-time display updating\n");
+  fprintf(stderr, " -nobounding\n");
+  fprintf(stderr, " -boundthresh XXX  (** default threshold is 25)\n");
+  fprintf(stderr, "\n");
+}
+
+void initoptions(argoptions * opt) {
+  memset(opt, 0, sizeof(argoptions));
+  opt->foundfilename = -1;
+  opt->useoutfilename = -1;
+  opt->verbosemode = -1;
+  opt->antialiasing = -1;
+  opt->displaymode = -1;
+  opt->boundmode = -1; 
+  opt->boundthresh = -1; 
+  opt->usecamfile = -1;
+}
+
+int useoptions(argoptions * opt, SceneHandle scene) {
+  if (opt->useoutfilename == 1) {
+    rt_outputfile(scene, opt->outfilename);
+  }
+
+  if (opt->verbosemode == 1) {
+    rt_verbose(scene, 1);
+  }
+
+  if (opt->antialiasing != -1) {
+    /* need new api code for this */
+  } 
+
+  if (opt->displaymode != -1) {
+    rt_displaymode(scene, opt->displaymode);
+  }
+
+  if (opt->boundmode != -1) {
+    rt_boundmode(scene, opt->boundmode);
+  }
+
+  if (opt->boundthresh != -1) {
+    rt_boundthresh(scene, opt->boundthresh);
+  }
+
+  return 0;
+}    
+
+int getparm(int argc, char **argv, int num, argoptions * opt) {
+  if (!strcmp(argv[num], "+D")) {
+    /* turn video on */
+    opt->displaymode = RT_DISPLAY_ENABLED;
+    return 1;
+  }
+  if (!strcmp(argv[num], "-D")) {
+    /* turn video off */
+    opt->displaymode = RT_DISPLAY_DISABLED;
+    return 1;
+  }
+  if (!strcmp(argv[num], "-nobounding")) {
+    /* disable automatic spatial subdivision optimizations */
+    opt->boundmode = RT_BOUNDING_DISABLED;
+    return 1;
+  }
+  if (!strcmp(argv[num], "-boundthresh")) {
+    /* set automatic bounding threshold control value */
+    sscanf(argv[num + 1], "%d", &opt->boundthresh);
+    return 2;
+  }
+
+  /* unknown parameter setting */
+  fprintf(stderr, "Unrecognized parameter/option flag: %s\n", argv[num]);
+  return -1;
+}
+
+int getargs(int argc, char **argv, argoptions * opt) {
+  int i, rc, unknowncnt;
+
+  if (opt == NULL)
+    return -1;
+
+  initoptions(opt);  
+
+  if (argc < 2) {
+    printusage(argv);
+#ifndef DEFAULT_MODELFILE
+    return -1;
+#else
+    return 0;
+#endif//DEFAULT_MODELFILE
+  }
+
+  i = 1;
+  unknowncnt = 0;
+  while (i < argc) {
+    if (argv[i][0] == '-' || argv[i][0] == '+') {
+      rc = getparm(argc, argv, i, opt);
+      if (rc != -1) {
+        i += rc;
+      }
+      else {
+        printusage(argv);
+        return -1;
+      }
+    }
+    else {
+      unknowncnt++;
+      if (unknowncnt > 1) {
+        fprintf(stderr, "Too many model file names found!\n");
+        printusage(argv); 
+        return -1;
+      } 
+      else {
+        strcpy(opt->filename, argv[i]);        
+        opt->foundfilename = 1;
+        i++;
+      }
+    }
+  }
+
+  if (opt->foundfilename == -1) {
+    fprintf(stderr, "Missing model file name!\n");
+    printusage(argv);
+    return -1;
+  }
+
+  return 0;
+}
+
+
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/getargs.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/getargs.h
new file mode 100644 (file)
index 0000000..454557f
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+typedef struct {
+  int foundfilename;      /* was a model file name found in the args? */
+  char filename[1024];    /* model file to render */
+  int useoutfilename;     /* command line override of output filename */
+  char outfilename[1024]; /* name of output image file */
+  int verbosemode;        /* verbose flags */
+  int antialiasing;       /* antialiasing setting */
+  int displaymode;        /* display mode */
+  int boundmode;          /* bounding mode */
+  int boundthresh;        /* bounding threshold */
+  int usecamfile;         /* use camera file */
+  char camfilename[1024]; /* camera filename */
+} argoptions;
+
+
+int getargs(int argc, char **argv, argoptions * opt);
+int useoptions(argoptions * opt, SceneHandle scene);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/global.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/global.cpp
new file mode 100644 (file)
index 0000000..62695fd
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * global.c - any/all global data items etc should be in this file
+ *
+ *  $Id: global.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *
+ */
+
+#include "types.h"
+#include "machine.h"
+#include "sphere.h"
+#include "light.h"
+
+/* stuff moved from intersect.c */
+object * rootobj = NULL; /* starts out empty. */
+
+point_light * lightlist[MAXLIGHTS];
+int numlights = 0;
+
+unsigned int numobjects = 0; /* used to assign unique object ID's */
+
+/* used in util.c */
+unsigned int rt_mem_in_use = 0;
+
+/* used in api.c */
+int parinitted = 0;
+
+int graphicswindowopen = 0;
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/global.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/global.h
new file mode 100644 (file)
index 0000000..28b6239
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * global.h - any/all global data items etc should be in this file
+ *
+ *  $Id: global.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *
+ */
+
+/* stuff moved from intersect.c */
+extern object * rootobj;
+
+extern point_light * lightlist[MAXLIGHTS];
+extern int numlights;
+
+extern unsigned int numobjects;
+
+extern unsigned int rt_mem_in_use;
+extern int parinitted;
+
+extern int graphicswindowopen;
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/grid.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/grid.cpp
new file mode 100644 (file)
index 0000000..194c1a2
--- /dev/null
@@ -0,0 +1,687 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * grid.c - spatial subdivision efficiency structures
+ *
+ * $Id: grid.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ * 
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define GRID_PRIVATE
+#include "grid.h"
+
+#ifndef cbrt
+#define     cbrt(x)     ((x) > 0.0 ? pow((double)(x), 1.0/3.0) : \
+                          ((x) < 0.0 ? -pow((double)-(x), 1.0/3.0) : 0.0))
+
+#define     qbrt(x)     ((x) > 0.0 ? pow((double)(x), 1.0/4.0) : \
+                          ((x) < 0.0 ? -pow((double)-(x), 1.0/4.0) : 0.0))
+
+#endif
+
+static object_methods grid_methods = {
+  (void (*)(void *, void *))(grid_intersect),
+  (void (*)(void *, void *, void *, void *))(NULL),
+  grid_bbox, 
+  grid_free 
+};
+
+object * newgrid(int xsize, int ysize, int zsize, vector min, vector max) {
+  grid * g;
+
+  g = (grid *) rt_getmem(sizeof(grid));
+  memset(g, 0, sizeof(grid));  
+
+  g->methods = &grid_methods;
+  g->id = new_objectid();
+
+  g->xsize = xsize;
+  g->ysize = ysize;
+  g->zsize = zsize;
+
+  g->min = min;
+  g->max = max;
+
+  VSub(&g->max, &g->min, &g->voxsize);
+  g->voxsize.x /= (flt) g->xsize; 
+  g->voxsize.y /= (flt) g->ysize; 
+  g->voxsize.z /= (flt) g->zsize; 
+
+  g->cells = (objectlist **) rt_getmem(xsize*ysize*zsize*sizeof(objectlist *));
+  memset(g->cells, 0, xsize*ysize*zsize * sizeof(objectlist *));
+
+/* fprintf(stderr, "New grid, size: %8d %8d %8d\n", g->xsize, g->ysize, g->zsize); */
+
+  return (object *) g;
+}
+
+static int grid_bbox(void * obj, vector * min, vector * max) {
+  grid * g = (grid *) obj;
+  *min = g->min;
+  *max = g->max;
+
+  return 1;
+}
+
+static void grid_free(void * v) {
+  int i, numvoxels;
+  grid * g = (grid *) v;
+  /* loop through all voxels and free the object lists */
+  numvoxels = g->xsize * g->ysize * g->zsize; 
+  for (i=0; i<numvoxels; i++) {
+    objectlist * lcur, * lnext;
+
+    lcur = g->cells[i];
+    while (lcur != NULL) {
+      lnext = lcur->next;
+      free(lcur);
+    }
+  }
+
+  /* free the grid cells */ 
+  free(g->cells);
+
+  /* free all objects on the grid object list */
+  free_objects(g->objects);   
+
+  free(g);
+}
+
+static void globalbound(object ** rootlist, vector * gmin, vector * gmax) {
+  vector min, max;
+  object * cur;
+
+  if (*rootlist == NULL)  /* don't bound non-existant objects */
+    return;
+
+  gmin->x =  FHUGE;   gmin->y =  FHUGE;   gmin->z =  FHUGE;
+  gmax->x = -FHUGE;   gmax->y = -FHUGE;   gmax->z = -FHUGE;
+
+  cur=*rootlist;
+  while (cur != NULL)  {  /* Go! */
+    min.x = -FHUGE; min.y = -FHUGE; min.z = -FHUGE;
+    max.x =  FHUGE; max.y =  FHUGE; max.z =  FHUGE;
+
+    if (cur->methods->bbox((void *) cur, &min, &max)) {
+      gmin->x = MYMIN( gmin->x , min.x);
+      gmin->y = MYMIN( gmin->y , min.y);
+      gmin->z = MYMIN( gmin->z , min.z);
+
+      gmax->x = MYMAX( gmax->x , max.x);
+      gmax->y = MYMAX( gmax->y , max.y);
+      gmax->z = MYMAX( gmax->z , max.z);
+    }
+
+    cur=(object *)cur->nextobj;
+  }
+}
+
+
+static int cellbound(grid *g, gridindex *index, vector * cmin, vector * cmax) {
+  vector min, max, cellmin, cellmax;
+  objectlist * cur;
+  int numinbounds = 0;
+
+  cur = g->cells[index->z*g->xsize*g->ysize + index->y*g->xsize + index->x]; 
+
+  if (cur == NULL)  /* don't bound non-existant objects */
+    return 0;
+
+  cellmin.x = voxel2x(g, index->x); 
+  cellmin.y = voxel2y(g, index->y); 
+  cellmin.z = voxel2z(g, index->z); 
+
+  cellmax.x = cellmin.x + g->voxsize.x;
+  cellmax.y = cellmin.y + g->voxsize.y;
+  cellmax.z = cellmin.z + g->voxsize.z;
+
+  cmin->x =  FHUGE;   cmin->y =  FHUGE;   cmin->z =  FHUGE;
+  cmax->x = -FHUGE;   cmax->y = -FHUGE;   cmax->z = -FHUGE;
+
+  while (cur != NULL)  {  /* Go! */
+    min.x = -FHUGE; min.y = -FHUGE; min.z = -FHUGE;
+    max.x =  FHUGE; max.y =  FHUGE; max.z =  FHUGE;
+
+    if (cur->obj->methods->bbox((void *) cur->obj, &min, &max)) {
+      if ((min.x >= cellmin.x) && (max.x <= cellmax.x) &&
+          (min.y >= cellmin.y) && (max.y <= cellmax.y) &&
+          (min.z >= cellmin.z) && (max.z <= cellmax.z)) {
+      
+        cmin->x = MYMIN( cmin->x , min.x);
+        cmin->y = MYMIN( cmin->y , min.y);
+        cmin->z = MYMIN( cmin->z , min.z);
+
+        cmax->x = MYMAX( cmax->x , max.x);
+        cmax->y = MYMAX( cmax->y , max.y);
+        cmax->z = MYMAX( cmax->z , max.z);
+      
+        numinbounds++;
+      }
+    }
+
+    cur=cur->next;
+  }
+  /* in case we get a 0.0 sized axis on the cell bounds, we'll */
+  /* use the original cell bounds */
+  if ((cmax->x - cmin->x) < EPSILON) {
+    cmax->x += EPSILON;
+    cmin->x -= EPSILON;
+  }
+  if ((cmax->y - cmin->y) < EPSILON) {
+    cmax->y += EPSILON;
+    cmin->y -= EPSILON;
+  }
+  if ((cmax->z - cmin->z) < EPSILON) {
+    cmax->z += EPSILON;
+    cmin->z -= EPSILON;
+  }
+
+  return numinbounds;
+}
+
+static int countobj(object * root) {
+  object * cur;     /* counts the number of objects on a list */
+  int numobj;
+
+  numobj=0;
+  cur=root;
+
+  while (cur != NULL) {
+    cur=(object *)cur->nextobj;
+    numobj++;
+  }
+  return numobj;
+}
+
+static int countobjlist(objectlist * root) {
+  objectlist * cur;
+  int numobj;
+
+  numobj=0; 
+  cur = root;
+
+  while (cur != NULL) {
+    cur = cur->next;
+    numobj++;
+  }
+  return numobj;
+}
+
+int engrid_scene(object ** list) {
+  grid * g;
+  int numobj, numcbrt;
+  vector gmin, gmax;
+  gridindex index;
+  if (*list == NULL)
+    return 0;
+
+  numobj = countobj(*list);
+
+fprintf(stderr, "Scene contains %d bounded objects.\n", numobj);
+
+  if (numobj > 16) {
+    numcbrt = (int) cbrt(4*numobj);
+    globalbound(list, &gmin, &gmax);
+
+    g = (grid *) newgrid(numcbrt, numcbrt, numcbrt, gmin, gmax);
+    engrid_objlist(g, list);
+
+    numobj = countobj(*list);
+    g->nextobj = *list;
+    *list = (object *) g;
+
+    /* now create subgrids.. */
+    for (index.z=0; index.z<g->zsize; index.z++) {
+      for (index.y=0; index.y<g->ysize; index.y++) {
+        for (index.x=0; index.x<g->xsize; index.x++) {
+          engrid_cell(g, &index);
+        }
+      }
+    } 
+  }
+
+  return 1;
+}
+
+
+void engrid_objlist(grid * g, object ** list) {
+  object * cur, * next, **prev;
+
+  if (*list == NULL) 
+    return;
+  
+  prev = list; 
+  cur = *list;
+
+  while (cur != NULL) {
+    next = (object *)cur->nextobj;
+
+    if (engrid_object(g, cur)) 
+      *prev = next;
+    else 
+      prev = (object **) &cur->nextobj;
+
+    cur = next;
+  } 
+}
+
+static int engrid_cell(grid * gold, gridindex *index) {
+  vector gmin, gmax, gsize;
+  flt len;
+  int numobj, numcbrt, xs, ys, zs;
+  grid * g;
+  objectlist **list;
+  objectlist * newobj;
+
+  list = &gold->cells[index->z*gold->xsize*gold->ysize + 
+                     index->y*gold->xsize  + index->x];
+
+  if (*list == NULL)
+    return 0;
+
+  numobj =  cellbound(gold, index, &gmin, &gmax);
+
+  VSub(&gmax, &gmin, &gsize);
+  len = 1.0 / (MYMAX( MYMAX(gsize.x, gsize.y), gsize.z ));
+  gsize.x *= len;  
+  gsize.y *= len;  
+  gsize.z *= len;  
+
+  if (numobj > 16) {
+    numcbrt = (int) cbrt(2*numobj); 
+    
+    xs = (int) ((flt) numcbrt * gsize.x);
+    if (xs < 1) xs = 1;
+    ys = (int) ((flt) numcbrt * gsize.y);
+    if (ys < 1) ys = 1;
+    zs = (int) ((flt) numcbrt * gsize.z);
+    if (zs < 1) zs = 1;
+
+    g = (grid *) newgrid(xs, ys, zs, gmin, gmax);
+    engrid_objectlist(g, list);
+
+    newobj = (objectlist *) rt_getmem(sizeof(objectlist));    
+    newobj->obj = (object *) g;
+    newobj->next = *list;
+    *list = newobj;
+
+    g->nextobj = gold->objects;
+    gold->objects = (object *) g;
+  }
+
+  return 1;
+}
+
+static int engrid_objectlist(grid * g, objectlist ** list) {
+  objectlist * cur, * next, **prev;
+  int numsucceeded = 0; 
+
+  if (*list == NULL) 
+    return 0;
+  
+  prev = list; 
+  cur = *list;
+
+  while (cur != NULL) {
+    next = cur->next;
+
+    if (engrid_object(g, cur->obj)) {
+      *prev = next;
+      free(cur);
+      numsucceeded++;
+    }
+    else {
+      prev = &cur->next;
+    }
+
+    cur = next;
+  } 
+
+  return numsucceeded;
+}
+
+
+
+static int engrid_object(grid * g, object * obj) {
+  vector omin, omax; 
+  gridindex low, high;
+  int x, y, z, zindex, yindex, voxindex;
+  objectlist * tmp;
+  if (obj->methods->bbox(obj, &omin, &omax)) { 
+    if (!pos2grid(g, &omin, &low) || !pos2grid(g, &omax, &high)) {
+      return 0; /* object is not wholly contained in the grid */
+    }
+  }
+  else {
+    return 0; /* object is unbounded */
+  }
+
+  /* add the object to the complete list of objects in the grid */
+  obj->nextobj = g->objects;
+  g->objects = obj;
+
+  /* add this object to all voxels it inhabits */
+  for (z=low.z; z<=high.z; z++) {
+    zindex = z * g->xsize * g->ysize;
+    for (y=low.y; y<=high.y; y++) {
+      yindex = y * g->xsize;
+      for (x=low.x; x<=high.x; x++) {
+        voxindex = x + yindex + zindex; 
+        tmp = (objectlist *) rt_getmem(sizeof(objectlist));
+        tmp->next = g->cells[voxindex];
+        tmp->obj = obj;
+        g->cells[voxindex] = tmp;
+      }
+    }
+  }
+  return 1;
+}
+
+static int pos2grid(grid * g, vector * pos, gridindex * index) {
+  index->x = (int) ((pos->x - g->min.x) / g->voxsize.x);
+  index->y = (int) ((pos->y - g->min.y) / g->voxsize.y);
+  index->z = (int) ((pos->z - g->min.z) / g->voxsize.z);
+  
+  if (index->x == g->xsize)
+    index->x--;
+  if (index->y == g->ysize)
+    index->y--;
+  if (index->z == g->zsize)
+    index->z--;
+
+  if (index->x < 0 || index->x > g->xsize ||
+      index->y < 0 || index->y > g->ysize ||
+      index->z < 0 || index->z > g->zsize) 
+    return 0;
+
+  if (pos->x < g->min.x || pos->x > g->max.x ||
+      pos->y < g->min.y || pos->y > g->max.y ||
+      pos->z < g->min.z || pos->z > g->max.z) 
+    return 0; 
+
+  return 1;
+}
+
+
+/* the real thing */
+static void grid_intersect(grid * g, ray * ry) {
+  flt tnear, tfar, offset;
+  vector curpos, tmax, tdelta, pdeltaX, pdeltaY, pdeltaZ, nXp, nYp, nZp;
+  gridindex curvox, step, out; 
+  int voxindex;
+  objectlist * cur;
+
+  if (ry->flags & RT_RAY_FINISHED)
+    return;
+
+  if (!grid_bounds_intersect(g, ry, &tnear, &tfar))
+    return;
+  if (ry->maxdist < tnear)
+    return;
+  curpos = Raypnt(ry, tnear); 
+  pos2grid(g, &curpos, &curvox);
+  offset = tnear;
+
+  /* Setup X iterator stuff */
+  if (fabs(ry->d.x) < EPSILON) {
+    tmax.x = FHUGE;
+    tdelta.x = 0.0;
+    step.x = 0;
+    out.x = 0; /* never goes out of bounds on this axis */
+  }
+  else if (ry->d.x < 0.0) {
+    tmax.x = offset + ((voxel2x(g, curvox.x) - curpos.x) / ry->d.x); 
+    tdelta.x = g->voxsize.x / - ry->d.x;
+    step.x = out.x = -1;
+  }
+  else {
+    tmax.x = offset + ((voxel2x(g, curvox.x + 1) - curpos.x) / ry->d.x);
+    tdelta.x = g->voxsize.x / ry->d.x;
+    step.x = 1;
+    out.x = g->xsize;
+  }
+
+  /* Setup Y iterator stuff */
+  if (fabs(ry->d.y) < EPSILON) {
+    tmax.y = FHUGE;
+    tdelta.y = 0.0; 
+    step.y = 0;
+    out.y = 0; /* never goes out of bounds on this axis */
+  }
+  else if (ry->d.y < 0.0) {
+    tmax.y = offset + ((voxel2y(g, curvox.y) - curpos.y) / ry->d.y);
+    tdelta.y = g->voxsize.y / - ry->d.y;
+    step.y = out.y = -1;
+  }
+  else {
+    tmax.y = offset + ((voxel2y(g, curvox.y + 1) - curpos.y) / ry->d.y);
+    tdelta.y = g->voxsize.y / ry->d.y;
+    step.y = 1;
+    out.y = g->ysize;
+  }
+
+  /* Setup Z iterator stuff */
+  if (fabs(ry->d.z) < EPSILON) {
+    tmax.z = FHUGE;
+    tdelta.z = 0.0; 
+    step.z = 0;
+    out.z = 0; /* never goes out of bounds on this axis */
+  }
+  else if (ry->d.z < 0.0) {
+    tmax.z = offset + ((voxel2z(g, curvox.z) - curpos.z) / ry->d.z);
+    tdelta.z = g->voxsize.z / - ry->d.z;
+    step.z = out.z = -1;
+  }
+  else {
+    tmax.z = offset + ((voxel2z(g, curvox.z + 1) - curpos.z) / ry->d.z);
+    tdelta.z = g->voxsize.z / ry->d.z;
+    step.z = 1;
+    out.z = g->zsize;
+  }
+
+  pdeltaX = ry->d;
+  VScale(&pdeltaX, tdelta.x);
+  pdeltaY = ry->d;
+  VScale(&pdeltaY, tdelta.y);
+  pdeltaZ = ry->d;
+  VScale(&pdeltaZ, tdelta.z);
+
+  nXp = Raypnt(ry, tmax.x);
+  nYp = Raypnt(ry, tmax.y);
+  nZp = Raypnt(ry, tmax.z);
+
+  voxindex = curvox.z*g->xsize*g->ysize + curvox.y*g->xsize + curvox.x; 
+  while (1) {
+    if (tmax.x < tmax.y && tmax.x < tmax.z) {
+      cur = g->cells[voxindex];
+      while (cur != NULL) {
+        if (ry->mbox[cur->obj->id] != ry->serial) {
+          ry->mbox[cur->obj->id] = ry->serial; 
+          cur->obj->methods->intersect(cur->obj, ry);
+        }
+        cur = cur->next;
+      }
+      curvox.x += step.x;
+      if (ry->maxdist < tmax.x || curvox.x == out.x) 
+        break; 
+      voxindex += step.x;
+      tmax.x += tdelta.x;
+      curpos = nXp;
+      nXp.x += pdeltaX.x;
+      nXp.y += pdeltaX.y;
+      nXp.z += pdeltaX.z;
+    }
+    else if (tmax.z < tmax.y) {
+      cur = g->cells[voxindex];
+      while (cur != NULL) {
+        if (ry->mbox[cur->obj->id] != ry->serial) {
+          ry->mbox[cur->obj->id] = ry->serial; 
+          cur->obj->methods->intersect(cur->obj, ry);
+        }
+        cur = cur->next;
+      }
+      curvox.z += step.z;
+      if (ry->maxdist < tmax.z || curvox.z == out.z) 
+        break;
+      voxindex += step.z*g->xsize*g->ysize;
+      tmax.z += tdelta.z;
+      curpos = nZp;
+      nZp.x += pdeltaZ.x;
+      nZp.y += pdeltaZ.y;
+      nZp.z += pdeltaZ.z;
+    }
+    else {
+      cur = g->cells[voxindex];
+      while (cur != NULL) {
+        if (ry->mbox[cur->obj->id] != ry->serial) {
+          ry->mbox[cur->obj->id] = ry->serial; 
+          cur->obj->methods->intersect(cur->obj, ry);
+        }
+        cur = cur->next;
+      }
+      curvox.y += step.y;
+      if (ry->maxdist < tmax.y || curvox.y == out.y) 
+        break;
+      voxindex += step.y*g->xsize;
+      tmax.y += tdelta.y;
+      curpos = nYp;
+      nYp.x += pdeltaY.x;
+      nYp.y += pdeltaY.y;
+      nYp.z += pdeltaY.z;
+    }
+
+    if (ry->flags & RT_RAY_FINISHED)
+      break;
+  }
+}
+
+static void voxel_intersect(grid * g, ray * ry, int voxindex) {
+  objectlist * cur;
+
+  cur = g->cells[voxindex];
+  while (cur != NULL) {
+    cur->obj->methods->intersect(cur->obj, ry);
+    cur = cur->next;
+  }
+}
+
+static int grid_bounds_intersect(grid * g, ray * ry, flt *near, flt *far) {
+  flt a, tx1, tx2, ty1, ty2, tz1, tz2;
+  flt tnear, tfar;
+
+  tnear= -FHUGE;
+  tfar= FHUGE;
+
+  if (ry->d.x == 0.0) {
+    if ((ry->o.x < g->min.x) || (ry->o.x > g->max.x)) return 0;
+  }
+  else {
+    tx1 = (g->min.x - ry->o.x) / ry->d.x;
+    tx2 = (g->max.x - ry->o.x) / ry->d.x;
+    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }
+    if (tx1 > tnear) tnear=tx1;
+    if (tx2 < tfar)   tfar=tx2;
+  }
+  if (tnear > tfar) return 0;
+  if (tfar < 0.0) return 0;
+
+  if (ry->d.y == 0.0) {
+    if ((ry->o.y < g->min.y) || (ry->o.y > g->max.y)) return 0;
+  }
+  else {
+    ty1 = (g->min.y - ry->o.y) / ry->d.y;
+    ty2 = (g->max.y - ry->o.y) / ry->d.y;
+    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }
+    if (ty1 > tnear) tnear=ty1;
+    if (ty2 < tfar)   tfar=ty2;
+  }
+  if (tnear > tfar) return 0;
+  if (tfar < 0.0) return 0;
+
+  if (ry->d.z == 0.0) {
+    if ((ry->o.z < g->min.z) || (ry->o.z > g->max.z)) return 0;
+  }
+  else {
+    tz1 = (g->min.z - ry->o.z) / ry->d.z;
+    tz2 = (g->max.z - ry->o.z) / ry->d.z;
+    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }
+    if (tz1 > tnear) tnear=tz1;
+    if (tz2 < tfar)   tfar=tz2;
+  }
+  if (tnear > tfar) return 0;
+  if (tfar < 0.0) return 0;
+
+  *near = tnear;
+  *far = tfar; 
+  return 1;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/grid.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/grid.h
new file mode 100644 (file)
index 0000000..7243ac9
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * grid.h - spatial subdivision efficiency structures
+ *
+ * $Id: grid.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ * 
+ */
+
+int engrid_scene(object ** list);
+object * newgrid(int xsize, int ysize, int zsize, vector min, vector max);
+
+#ifdef GRID_PRIVATE
+
+typedef struct objectlist {
+  struct objectlist * next; /* next link in the list */
+  object * obj;             /* the actual object     */
+} objectlist; 
+
+typedef struct {
+  unsigned int id;                      /* Unique Object serial number    */
+  void * nextobj;                       /* pointer to next object in list */
+  object_methods * methods;             /* this object's methods          */
+  texture * tex;                        /* object texture                 */
+  int xsize;           /* number of cells along the X direction */
+  int ysize;           /* number of cells along the Y direction */
+  int zsize;           /* number of cells along the Z direction */
+  vector min;          /* the minimum coords for the box containing the grid */
+  vector max;          /* the maximum coords for the box containing the grid */
+  vector voxsize;      /* the size of a grid cell/voxel */
+  object * objects;    /* all objects contained in the grid */
+  objectlist ** cells; /* the grid cells themselves */
+} grid;
+
+typedef struct {
+  int x;         /* Voxel X address */
+  int y;         /* Voxel Y address */
+  int z;         /* Voxel Z address */
+} gridindex; 
+
+/*
+ * Convert from voxel number along X/Y/Z to corresponding coordinate.
+ */
+#define voxel2x(g,X)  ((X) * (g->voxsize.x) + (g->min.x))
+#define voxel2y(g,Y)  ((Y) * (g->voxsize.y) + (g->min.y))
+#define voxel2z(g,Z)  ((Z) * (g->voxsize.z) + (g->min.z))
+
+/*
+ * And vice-versa.
+ */
+#define x2voxel(g,x)            (((x) - g->min.x) / g->voxsize.x)
+#define y2voxel(g,y)            (((y) - g->min.y) / g->voxsize.y)
+#define z2voxel(g,z)            (((z) - g->min.z) / g->voxsize.z)
+
+
+static int grid_bbox(void * obj, vector * min, vector * max);
+static void grid_free(void * v);
+
+static int cellbound(grid *g, gridindex *index, vector * cmin, vector * cmax);
+
+void engrid_objlist(grid * g, object ** list);
+static int engrid_object(grid * g, object * obj);
+
+static int engrid_objectlist(grid * g, objectlist ** list);
+static int engrid_cell(grid *, gridindex *);
+
+static int pos2grid(grid * g, vector * pos, gridindex * index);
+static void grid_intersect(grid *, ray *);
+static void voxel_intersect(grid * g, ray * ry, int voxaddr);
+static int grid_bounds_intersect(grid * g, ray * ry, flt *near, flt *far); 
+
+
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/imageio.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/imageio.cpp
new file mode 100644 (file)
index 0000000..2fe1d3b
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ *  imageio.c - This file deals with reading/writing image files
+ *
+ *  $Id: imageio.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */ 
+
+/* For our puposes, we're interested only in the 3 byte per pixel 24 bit
+ * truecolor sort of file..
+ */
+
+#include <stdio.h>
+#include "machine.h"
+#include "types.h"
+#include "util.h"
+#include "imageio.h"
+#include "ppm.h"     /* PPM files */
+#include "tgafile.h" /* Truevision Targa files */
+#include "jpeg.h"    /* JPEG files */
+
+static 
+int fakeimage(char * name, int * xres, int * yres, unsigned char ** imgdata) {
+  int i, imgsize;
+
+  fprintf(stderr, "Error loading image %s.  Faking it.\n", name);
+   
+  *xres = 2;
+  *yres = 2;
+  imgsize = 3 * (*xres) * (*yres);
+  *imgdata = (unsigned char *)rt_getmem(imgsize);
+  for (i=0; i<imgsize; i++) {
+    (*imgdata)[i] = 255;
+  }
+
+  return IMAGENOERR;
+}
+
+
+int readimage(rawimage * img) {
+  int rc;
+  int xres, yres;
+  unsigned char * imgdata;
+  char * name = img->name;
+
+  if (strstr(name, ".ppm")) { 
+    rc = readppm(name, &xres, &yres, &imgdata);
+  }
+  else if (strstr(name, ".tga")) {
+    rc = readtga(name, &xres, &yres, &imgdata);
+  }
+  else if (strstr(name, ".jpg")) {
+    rc = readjpeg(name, &xres, &yres, &imgdata);
+  }
+  else if (strstr(name, ".gif")) {
+    rc = IMAGEUNSUP; 
+  }
+  else if (strstr(name, ".png")) {
+    rc = IMAGEUNSUP; 
+  }
+  else if (strstr(name, ".tiff")) {
+    rc = IMAGEUNSUP; 
+  }
+  else if (strstr(name, ".rgb")) {
+    rc = IMAGEUNSUP; 
+  }
+  else if (strstr(name, ".xpm")) {
+    rc = IMAGEUNSUP; 
+  }
+  else {
+    rc = readppm(name, &xres, &yres, &imgdata);
+  } 
+
+  switch (rc) {
+    case IMAGEREADERR:
+      fprintf(stderr, "Short read encountered while loading image %s\n", name);
+      rc = IMAGENOERR; /* remap to non-fatal error */
+      break;
+
+    case IMAGEUNSUP:
+      fprintf(stderr, "Cannot read unsupported image format for image %s\n", name);
+      break;
+  }    
+
+  /* If the image load failed, create a tiny white colored image to fake it */ 
+  /* this allows a scene to render even when a file can't be loaded */
+  if (rc != IMAGENOERR) {
+    rc = fakeimage(name, &xres, &yres, &imgdata);
+  }
+
+  /* If we succeeded in loading the image, return it. */
+  if (rc == IMAGENOERR) { 
+    img->xres = xres;
+    img->yres = yres;
+    img->bpp = 3;  
+    img->data = imgdata;
+  }
+
+  return rc;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/imageio.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/imageio.h
new file mode 100644 (file)
index 0000000..102cf66
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ *  imageio.h - This file deals with reading/writing image files 
+ *
+ *  $Id: imageio.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */ 
+
+/* For our puposes, we're interested only in the 3 byte per pixel 24 bit
+   truecolor sort of file.. */
+
+#define IMAGENOERR     0  /* no error */
+#define IMAGEBADFILE   1  /* can't find or can't open the file */
+#define IMAGEUNSUP     2  /* the image file is an unsupported format */
+#define IMAGEALLOCERR  3  /* not enough remaining memory to load this image */
+#define IMAGEREADERR   4  /* failed read, short reads etc */
+
+int readimage(rawimage *);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/imap.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/imap.cpp
new file mode 100644 (file)
index 0000000..285bdd4
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * imap.c - This file contains code for doing image map type things.  
+ *
+ *  $Id: imap.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "imap.h"
+#include "util.h"
+#include "imageio.h"
+
+rawimage * imagelist[MAXIMGS];
+int numimages;
+
+void ResetImages(void) {
+  int i;
+  numimages=0;
+  for (i=0; i<MAXIMGS; i++) {
+    imagelist[i]=NULL;
+  }
+}
+
+void LoadImage(rawimage * image) {
+  if (!image->loaded) {
+    readimage(image);
+    image->loaded=1;
+  }
+}
+
+color ImageMap(rawimage * image, flt u, flt v) {
+  color col, colx, colx2;
+  flt x,y, px, py;
+  int x1, x2, y1, y2;
+  unsigned char * ptr;
+  unsigned char * ptr2;
+
+  if (!image->loaded) {   
+    LoadImage(image);
+    image->loaded=1;
+  }
+
+  if ((u <= 1.0) && (u >=0.0) && (v <= 1.0) && (v >= 0.0)) {
+    x=(image->xres - 1.0) * u; /* floating point X location */
+    y=(image->yres - 1.0) * v; /* floating point Y location */
+
+    px = x - ((int) x);
+    py = y - ((int) y);
+
+    x1 = (int) x;
+    x2 = x1 + 1;
+
+    y1 = (int) y;
+    y2 = y1 + 1;
+
+    ptr  = image->data + ((image->xres * y1) + x1) * 3; 
+    ptr2 = image->data + ((image->xres * y1) + x2) * 3; 
+
+    colx.r = (flt) ((flt)ptr[0] + px*((flt)ptr2[0] - (flt) ptr[0])) / 255.0; 
+    colx.g = (flt) ((flt)ptr[1] + px*((flt)ptr2[1] - (flt) ptr[1])) / 255.0; 
+    colx.b = (flt) ((flt)ptr[2] + px*((flt)ptr2[2] - (flt) ptr[2])) / 255.0; 
+
+    ptr  = image->data + ((image->xres * y2) + x1) * 3; 
+    ptr2 = image->data + ((image->xres * y2) + x2) * 3; 
+
+    colx2.r = ((flt)ptr[0] + px*((flt)ptr2[0] - (flt)ptr[0])) / 255.0; 
+    colx2.g = ((flt)ptr[1] + px*((flt)ptr2[1] - (flt)ptr[1])) / 255.0; 
+    colx2.b = ((flt)ptr[2] + px*((flt)ptr2[2] - (flt)ptr[2])) / 255.0; 
+
+    col.r = colx.r + py*(colx2.r - colx.r);
+    col.g = colx.g + py*(colx2.g - colx.g);
+    col.b = colx.b + py*(colx2.b - colx.b);
+
+  }
+  else {
+    col.r=0.0;
+    col.g=0.0;
+    col.b=0.0;
+  }
+  return col;
+} 
+
+rawimage * AllocateImage(char * filename) { 
+  rawimage * newimage = NULL;
+  int i, len, intable;
+
+  intable=0;
+  if (numimages!=0) {
+    for (i=0; i<numimages; i++) {
+      if (!strcmp(filename, imagelist[i]->name)) {
+        newimage=imagelist[i];
+        intable=1;
+      }
+    }
+  }
+
+  if (!intable) {
+    newimage=(rawimage *)rt_getmem(sizeof(rawimage));
+    newimage->loaded=0;
+    newimage->xres=0;
+    newimage->yres=0;
+    newimage->bpp=0;
+    newimage->data=NULL;
+    len=strlen(filename);
+    if (len > 80) rtbomb("Filename too long in image map!!"); 
+    strcpy(newimage->name, filename);
+
+    imagelist[numimages]=newimage;  /* add new one to the table       */ 
+    numimages++;                    /* increment the number of images */
+  }
+  return newimage;
+}
+
+void DeallocateImage(rawimage * image) {
+  image->loaded=0;
+  rt_freemem(image->data);
+}
+
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/imap.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/imap.h
new file mode 100644 (file)
index 0000000..4590ddc
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * imap.h - This file contains defines etc for doing image map type things.  
+ *
+ *  $Id: imap.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+void       ResetImage(void);
+void       LoadImage(rawimage *);
+color      ImageMap(rawimage *, flt, flt);
+rawimage * AllocateImage(char *);
+void       DeallocateImage(rawimage *);
+void       ResetImages(void);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/intersect.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/intersect.cpp
new file mode 100644 (file)
index 0000000..6ac6d5d
--- /dev/null
@@ -0,0 +1,187 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * intersect.c - This file contains code for CSG and intersection routines.
+ *
+ *  $Id: intersect.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "intersect.h"
+#include "light.h"
+#include "util.h"
+#include "global.h"
+
+unsigned int new_objectid(void) {
+  return numobjects++; /* global used to generate unique object ID's */
+}
+
+unsigned int max_objectid(void) {
+  return numobjects;
+}
+
+void add_object(object * obj) {
+  object * objtemp;
+
+  if (obj == NULL)
+    return;
+
+  obj->id = new_objectid();
+
+  objtemp = rootobj;
+  rootobj = obj;
+  obj->nextobj = objtemp;
+}
+
+void free_objects(object * start) {
+  object * cur;
+  object * cur2;
+
+  cur=start; 
+  while (cur->nextobj != NULL) { 
+    cur2=(object *)cur->nextobj;
+    cur->methods->free(cur);
+    cur=cur2;
+  }
+  free(cur);
+
+}
+
+void reset_object(void) {
+  if (rootobj != NULL)
+    free_objects(rootobj);
+
+  rootobj = NULL;
+  numobjects = 0; /* set number of objects back to 0 */
+}
+
+void intersect_objects(ray * intray) {
+  object * cur;
+  object temp;
+
+  temp.nextobj = rootobj; /* setup the initial object pointers.. */
+  cur = &temp;            /* ready, set                          */
+
+  while ((cur=(object *)cur->nextobj) != NULL)          
+    cur->methods->intersect(cur, intray); 
+}
+
+void reset_intersection(intersectstruct * intstruct) {
+  intstruct->num = 0;
+  intstruct->list[0].t = FHUGE;
+  intstruct->list[0].obj = NULL;
+  intstruct->list[1].t = FHUGE;
+  intstruct->list[1].obj = NULL;
+}
+
+void add_intersection(flt t, object * obj, ray * ry) {
+  intersectstruct * intstruct = ry->intstruct;
+
+  if (t > EPSILON) {
+
+    /* if we hit something before maxdist update maxdist */
+    if (t < ry->maxdist) {
+      ry->maxdist = t;
+
+      /* if we hit *anything* before maxdist, and we're firing a */
+      /* shadow ray, then we are finished ray tracing the shadow */
+      if (ry->flags & RT_RAY_SHADOW)
+        ry->flags |= RT_RAY_FINISHED;
+    }
+
+    intstruct->num++;
+    intstruct->list[intstruct->num].obj = obj;
+    intstruct->list[intstruct->num].t = t;
+  }
+}
+
+
+int closest_intersection(flt * t, object ** obj, intersectstruct * intstruct) {
+  int i;
+  *t=FHUGE;
+
+  for (i=1; i<=intstruct->num; i++) {
+    if (intstruct->list[i].t < *t) {
+        *t=intstruct->list[i].t;
+      *obj=intstruct->list[i].obj;
+    }
+  } 
+
+  return intstruct->num;
+}
+
+int shadow_intersection(intersectstruct * intstruct, flt maxdist) {
+  int i;
+  
+  if (intstruct->num > 0) {
+    for (i=1; i<=intstruct->num; i++) {
+      if ((intstruct->list[i].t < maxdist) && 
+          (intstruct->list[i].obj->tex->shadowcast == 1)) {
+        return 1;
+      }
+    }
+  }
+  
+  return 0;
+}
+
+
+
+
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/intersect.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/intersect.h
new file mode 100644 (file)
index 0000000..f208c01
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * intersect.h - This file contains the declarations and defines for the
+ *               functions that manage intersection, bounding and CSG..
+ *
+ *  $Id: intersect.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+unsigned int  new_objectid(void);
+unsigned int max_objectid(void);  
+void add_object(object *);
+void reset_object(void);
+void free_objects(object *);
+void intersect_objects(ray *);
+void reset_intersection(intersectstruct *);
+void add_intersection(flt, object *, ray *);
+int closest_intersection(flt *, object **, intersectstruct *);
+int next_intersection(object **, object *, intersectstruct *);
+int shadow_intersection(intersectstruct * intstruct, flt maxdist);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/jpeg.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/jpeg.cpp
new file mode 100644 (file)
index 0000000..51a1497
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ *  jpeg.c - This file deals with JPEG format image files (reading/writing)
+ *
+ *  $Id: jpeg.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */ 
+
+/*
+ * This code requires support from the Independent JPEG Group's libjpeg.
+ * For our puposes, we're interested only in the 3 byte per pixel 24 bit
+ * RGB output.  Probably won't implement any decent checking at this point.
+ */ 
+
+#include <stdio.h>
+#include "machine.h"
+#include "types.h"
+#include "util.h"
+#include "imageio.h" /* error codes etc */
+#include "jpeg.h"    /* the protos for this file */
+
+#if !defined(USEJPEG)
+
+int readjpeg(char * name, int * xres, int * yres, unsigned char **imgdata) {
+  return IMAGEUNSUP;
+}
+
+#else
+
+#include "jpeglib.h" /* the IJG jpeg library headers */
+
+int readjpeg(char * name, int * xres, int * yres, unsigned char **imgdata) {
+  FILE * ifp;
+  struct jpeg_decompress_struct cinfo; /* JPEG decompression struct */
+  struct jpeg_error_mgr jerr;          /* JPEG Error handler */
+  JSAMPROW row_pointer[1];             /* output row buffer */
+  int row_stride;                      /* physical row width in output buf */
+
+  /* open input file before doing any JPEG decompression setup */
+  if ((ifp = fopen(name, "rb")) == NULL) 
+    return IMAGEBADFILE; /* Could not open image, return error */
+
+  /*
+   * Note: The Independent JPEG Group's library does not have a way
+   *       of returning errors without the use of setjmp/longjmp.
+   *       This is a problem in multi-threaded environment, since setjmp
+   *       and longjmp are declared thread-unsafe by many vendors currently.
+   *       For now, JPEG decompression errors will result in the "default"
+   *       error handling provided by the JPEG library, which is an error
+   *       message and a fatal call to exit().  I'll have to work around this
+   *       or find a reasonably thread-safe way of doing setjmp/longjmp..
+   */
+
+  cinfo.err = jpeg_std_error(&jerr); /* Set JPEG error handler to default */
+
+  jpeg_create_decompress(&cinfo);    /* Create decompression context      */ 
+  jpeg_stdio_src(&cinfo, ifp);       /* Set input mechanism to stdio type */
+  jpeg_read_header(&cinfo, TRUE);    /* Read the JPEG header for info     */
+  jpeg_start_decompress(&cinfo);     /* Prepare for actual decompression  */
+
+  *xres = cinfo.output_width;        /* set returned image width  */
+  *yres = cinfo.output_height;       /* set returned image height */
+
+  /* Calculate the size of a row in the image */
+  row_stride = cinfo.output_width * cinfo.output_components;
+
+  /* Allocate the image buffer which will be returned to the ray tracer */
+  *imgdata = (unsigned char *) malloc(row_stride * cinfo.output_height);
+
+  /* decompress the JPEG, one scanline at a time into the buffer */
+  while (cinfo.output_scanline < cinfo.output_height) {
+    row_pointer[0] = &((*imgdata)[(cinfo.output_scanline)*row_stride]);
+    jpeg_read_scanlines(&cinfo, row_pointer, 1);
+  }
+
+  jpeg_finish_decompress(&cinfo);   /* Tell the JPEG library to cleanup   */
+  jpeg_destroy_decompress(&cinfo);  /* Destroy JPEG decompression context */
+
+  fclose(ifp); /* Close the input file */
+
+  return IMAGENOERR;  /* No fatal errors */
+}
+
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/jpeg.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/jpeg.h
new file mode 100644 (file)
index 0000000..234e024
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ *  jpeg.h - This file deals with JPEG format image files (reading/writing)
+ *
+ *  $Id: jpeg.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */ 
+
+int readjpeg(char * name, int * xres, int * yres, unsigned char **imgdata);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/light.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/light.cpp
new file mode 100644 (file)
index 0000000..f7745f0
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * light.c - This file contains declarations and defines for light sources.
+ *
+ *  $Id: light.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define LIGHT_PRIVATE
+#include "light.h"
+
+static object_methods light_methods = {
+  (void (*)(void *, void *))(light_intersect),
+  (void (*)(void *, void *, void *, void *))(light_normal),
+  light_bbox, 
+  free 
+};
+
+point_light * newlight(void * tex, vector ctr, flt rad) {
+  point_light * l;
+  
+  l=(point_light *) rt_getmem(sizeof(point_light));
+  memset(l, 0, sizeof(point_light));
+  l->methods = &light_methods;
+
+  l->tex=(texture *)tex;
+  l->ctr=ctr;
+  l->rad=rad;
+
+  return l;
+}
+
+static int light_bbox(void * obj, vector * min, vector * max) {
+  return 0; /* lights are unbounded currently */
+}
+
+static void light_intersect(point_light * l, ray * ry) {
+  flt b, disc, t1, t2, temp;
+  vector V;
+
+  /* Lights do not cast shadows.. */
+  if (ry->flags & RT_RAY_SHADOW)
+    return;
+
+  VSUB(l->ctr, ry->o, V);
+  VDOT(b, V, ry->d); 
+  VDOT(temp, V, V);  
+
+  disc=b*b + l->rad*l->rad - temp;
+
+  if (disc<=0.0) return;
+  disc=sqrt(disc);
+
+  t2=b+disc;
+  if (t2 <= SPEPSILON) 
+    return;
+  add_intersection(t2, (object *) l, ry);  
+
+  t1=b-disc;
+  if (t1 > SPEPSILON) 
+    add_intersection(t1, (object *) l, ry);  
+}
+
+static void light_normal(point_light * l, vector * pnt, ray * incident, vector * N) {
+  VSub((vector *) pnt, &(l->ctr), N);
+
+  VNorm(N);
+
+  if (VDot(N, &(incident->d)) > 0.0)  {
+    N->x=-N->x;
+    N->y=-N->y;
+    N->z=-N->z;
+  } 
+}
+
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/light.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/light.h
new file mode 100644 (file)
index 0000000..a6a485f
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * light.h - this file includes declarations and defines for light sources.
+ *
+ *  $Id: light.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+typedef struct {
+  unsigned int id;                      /* Unique Object serial number    */
+  void * nextobj;                       /* pointer to next object in list */
+  object_methods * methods;             /* this object's methods          */
+  texture * tex;                        /* object texture                 */
+  vector ctr;
+  flt rad;
+} point_light; 
+
+point_light * newlight(void *, vector, flt);
+
+#ifdef LIGHT_PRIVATE
+static int light_bbox(void * obj, vector * min, vector * max);
+static void light_intersect(point_light *, ray *);
+static void light_normal(point_light *, vector *, ray *, vector *);
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/machine.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/machine.h
new file mode 100644 (file)
index 0000000..75c9571
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * machine.h - This is the machine specific include file
+ *
+ *  $Id: machine.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+#include <stdio.h>
+#include <cstdlib>
+#include <string.h>
+#include <math.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+using namespace std;
+
+#define STDTIME
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/macros.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/macros.h
new file mode 100644 (file)
index 0000000..87009ea
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * macros.h - This file contains macro versions of functions that would be best 
+ * used as inlined code rather than function calls.
+ *
+ *  $Id: macros.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+#define MYMAX(a , b) ((a) > (b) ? (a) : (b))
+#define MYMIN(a , b) ((a) < (b) ? (a) : (b))
+
+#define VDOT(return, a, b)                             \
+ return=(a.x * b.x  +  a.y * b.y  +  a.z * b.z);       \
+
+#define RAYPNT(c, a, b)                \
+c.x = a.o.x + ( a.d.x * b );   \
+c.y = a.o.y + ( a.d.y * b );   \
+c.z = a.o.z + ( a.d.z * b );   \
+
+
+#define VSUB(a, b, c)          \
+c.x = (a.x - b.x);             \
+c.y = (a.y - b.y);             \
+c.z = (a.z - b.z);             \
+
+
+#define VCROSS(a, b, c)                                \
+ c->x = (a->y * b->z) - (a->z * b->y);                 \
+ c->y = (a->z * b->x) - (a->x * b->z);                 \
+ c->z = (a->x * b->y) - (a->y * b->x);                 \
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/objbound.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/objbound.cpp
new file mode 100644 (file)
index 0000000..820afc2
--- /dev/null
@@ -0,0 +1,346 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * objbound.c - This file contains the functions to find bounding boxes
+ *              for the various primitives 
+ *
+ *  $Id: objbound.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "bndbox.h"
+
+#define OBJBOUND_PRIVATE
+#include "objbound.h"
+
+static void globalbound(object ** rootlist, vector * gmin, vector * gmax) {
+  vector min, max; 
+  object * cur;
+
+  if (*rootlist == NULL)  /* don't bound non-existant objects */
+    return;
+
+  gmin->x =  FHUGE;   gmin->y =  FHUGE;   gmin->z =  FHUGE;
+  gmax->x = -FHUGE;   gmax->y = -FHUGE;   gmax->z = -FHUGE;
+
+  cur=*rootlist;
+  while (cur != NULL)  {  /* Go! */ 
+    min.x = -FHUGE; min.y = -FHUGE; min.z = -FHUGE;
+    max.x =  FHUGE; max.y =  FHUGE; max.z =  FHUGE;
+
+    cur->methods->bbox((void *) cur, &min, &max);
+
+    gmin->x = MYMIN( gmin->x , min.x); 
+    gmin->y = MYMIN( gmin->y , min.y); 
+    gmin->z = MYMIN( gmin->z , min.z); 
+  
+    gmax->x = MYMAX( gmax->x , max.x); 
+    gmax->y = MYMAX( gmax->y , max.y); 
+    gmax->z = MYMAX( gmax->z , max.z); 
+
+    cur=(object *)cur->nextobj;
+  }
+}
+
+static int objinside(object * obj, vector * min, vector * max) {
+  vector omin, omax;
+
+  if (obj == NULL)  /* non-existant object, shouldn't get here */
+    return 0;
+
+  if (obj->methods->bbox((void *) obj, &omin, &omax)) {
+    if ((min->x <= omin.x) && (min->y <= omin.y) && (min->z <= omin.z) &&
+        (max->x >= omax.x) && (max->y >= omax.y) && (max->z >= omax.z)) { 
+      return 1;
+    }
+  }
+  return 0;
+}
+
+static int countobj(object * root) {
+  object * cur;     /* counts the number of objects on a list */
+  int numobj;
+
+  numobj=0;
+  cur=root;
+
+  while (cur != NULL) {
+    cur=(object *)cur->nextobj;
+    numobj++;
+  } 
+  return numobj;
+}
+
+static void movenextobj(object * thisobj, object ** root) {
+  object * cur, * tmp;
+
+  /* move the object after thisobj to the front of the object list  */
+  /*   headed by root */
+  if (thisobj != NULL) {
+    if (thisobj->nextobj != NULL) {
+      cur=(object *)thisobj->nextobj;            /* the object to be moved    */
+      thisobj->nextobj = cur->nextobj; /* link around the moved obj */
+      tmp=*root;                       /* store the root node       */
+      cur->nextobj=tmp;                /* attach root to cur        */ 
+      *root=cur;                       /* make cur, the new root    */
+    }
+  }
+}
+
+static void octreespace(object ** rootlist, int maxoctnodes) {
+  object * cur;
+  vector gmin, gmax, gctr;
+  vector cmin1, cmin2, cmin3, cmin4, cmin5, cmin6, cmin7, cmin8;
+  vector cmax1, cmax2, cmax3, cmax4, cmax5, cmax6, cmax7, cmax8;
+  bndbox * box1, * box2, * box3, * box4;
+  bndbox * box5, * box6, * box7, * box8;
+  int skipobj;
+
+  if (*rootlist == NULL)  /* don't subdivide non-existant data */
+    return;
+
+  skipobj=0;
+  globalbound(rootlist, &gmin, &gmax);  /* find global min and max */
+
+  gctr.x = ((gmax.x - gmin.x) / 2.0) + gmin.x;
+  gctr.y = ((gmax.y - gmin.y) / 2.0) + gmin.y;
+  gctr.z = ((gmax.z - gmin.z) / 2.0) + gmin.z;
+
+  cmin1=gmin;
+  cmax1=gctr;
+  box1 = newbndbox(cmin1, cmax1); 
+
+  cmin2=gmin;
+  cmin2.x=gctr.x;
+  cmax2=gmax;
+  cmax2.y=gctr.y;
+  cmax2.z=gctr.z;
+  box2 = newbndbox(cmin2, cmax2); 
+
+  cmin3=gmin;
+  cmin3.y=gctr.y;
+  cmax3=gmax;
+  cmax3.x=gctr.x;
+  cmax3.z=gctr.z;
+  box3 = newbndbox(cmin3, cmax3); 
+
+  cmin4=gmin;
+  cmin4.x=gctr.x;
+  cmin4.y=gctr.y;
+  cmax4=gmax;
+  cmax4.z=gctr.z;
+  box4 = newbndbox(cmin4, cmax4); 
+
+  cmin5=gmin;
+  cmin5.z=gctr.z;
+  cmax5=gctr;
+  cmax5.z=gmax.z;
+  box5 = newbndbox(cmin5, cmax5); 
+
+  cmin6=gctr;
+  cmin6.y=gmin.y;
+  cmax6=gmax;
+  cmax6.y=gctr.y;
+  box6 = newbndbox(cmin6, cmax6); 
+
+  cmin7=gctr;
+  cmin7.x=gmin.x;
+  cmax7=gctr;
+  cmax7.y=gmax.y;
+  cmax7.z=gmax.z;
+  box7 = newbndbox(cmin7, cmax7); 
+
+  cmin8=gctr;
+  cmax8=gmax;
+  box8 = newbndbox(cmin8, cmax8); 
+
+  cur = *rootlist;
+  while (cur != NULL)  {  
+    if (objinside((object *)cur->nextobj, &cmin1, &cmax1)) {
+      movenextobj(cur, &box1->objlist);  
+    }  
+    else if (objinside((object *)cur->nextobj, &cmin2, &cmax2)) {
+      movenextobj(cur, &box2->objlist);  
+    }  
+    else if (objinside((object *)cur->nextobj, &cmin3, &cmax3)) {
+      movenextobj(cur, &box3->objlist);  
+    }  
+    else if (objinside((object *)cur->nextobj, &cmin4, &cmax4)) {
+      movenextobj(cur, &box4->objlist);  
+    }  
+    else if (objinside((object *)cur->nextobj, &cmin5, &cmax5)) {
+      movenextobj(cur, &box5->objlist);  
+    }  
+    else if (objinside((object *)cur->nextobj, &cmin6, &cmax6)) {
+      movenextobj(cur, &box6->objlist);  
+    }  
+    else if (objinside((object *)cur->nextobj, &cmin7, &cmax7)) {
+      movenextobj(cur, &box7->objlist);  
+    }  
+    else if (objinside((object *)cur->nextobj, &cmin8, &cmax8)) {
+      movenextobj(cur, &box8->objlist);  
+    }  
+    else {
+      skipobj++; 
+      cur=(object *)cur->nextobj;
+    }
+  }     
+
+/* new scope, for redefinition of cur, and old */
+  { bndbox * cur, * old;
+  old=box1;
+  cur=box2; 
+  if (countobj(cur->objlist) > 0) {
+     old->nextobj=cur;
+     globalbound(&cur->objlist, &cur->min, &cur->max); 
+     old=cur; 
+  }      
+  cur=box3;
+  if (countobj(cur->objlist) > 0) {
+     old->nextobj=cur;
+     globalbound(&cur->objlist, &cur->min, &cur->max); 
+     old=cur; 
+  }      
+  cur=box4;
+  if (countobj(cur->objlist) > 0) {
+     old->nextobj=cur;
+     globalbound(&cur->objlist, &cur->min, &cur->max); 
+     old=cur; 
+  }      
+  cur=box5;
+  if (countobj(cur->objlist) > 0) {
+     old->nextobj=cur;
+     globalbound(&cur->objlist, &cur->min, &cur->max); 
+     old=cur; 
+  }      
+  cur=box6;
+  if (countobj(cur->objlist) > 0) {
+     old->nextobj=cur;
+     globalbound(&cur->objlist, &cur->min, &cur->max); 
+     old=cur; 
+  }      
+  cur=box7;
+  if (countobj(cur->objlist) > 0) {
+     old->nextobj=cur;
+     globalbound(&cur->objlist, &cur->min, &cur->max); 
+     old=cur; 
+  }      
+  cur=box8;
+  if (countobj(cur->objlist) > 0) {
+     old->nextobj=cur;
+     globalbound(&cur->objlist, &cur->min, &cur->max); 
+     old=cur; 
+  }      
+
+  old->nextobj=*rootlist;
+
+  if (countobj(box1->objlist) > 0) {
+    globalbound(&box1->objlist, &box1->min, &box1->max); 
+    *rootlist=(object *) box1;
+  }
+  else {
+    *rootlist=(object *) box1->nextobj;
+  }
+
+  } /**** end of special cur and old scope */
+
+  if (countobj(box1->objlist) > maxoctnodes) {
+    octreespace(&box1->objlist, maxoctnodes);
+  }
+  if (countobj(box2->objlist) > maxoctnodes) {
+    octreespace(&box2->objlist, maxoctnodes);
+  }
+  if (countobj(box3->objlist) > maxoctnodes) {
+    octreespace(&box3->objlist, maxoctnodes);
+  }
+  if (countobj(box4->objlist) > maxoctnodes) {
+    octreespace(&box4->objlist, maxoctnodes);
+  }
+  if (countobj(box5->objlist) > maxoctnodes) {
+    octreespace(&box5->objlist, maxoctnodes);
+  }
+  if (countobj(box6->objlist) > maxoctnodes) {
+    octreespace(&box6->objlist, maxoctnodes);
+  }
+  if (countobj(box7->objlist) > maxoctnodes) {
+    octreespace(&box7->objlist, maxoctnodes);
+  }
+  if (countobj(box8->objlist) > maxoctnodes) {
+    octreespace(&box8->objlist, maxoctnodes);
+  }
+}
+
+void dividespace(int maxoctnodes, object **toplist) {
+  bndbox * gbox;
+  vector gmin, gmax;
+
+  if (countobj(*toplist) > maxoctnodes) {
+    globalbound(toplist, &gmin, &gmax);  
+
+    octreespace(toplist, maxoctnodes); 
+
+    gbox = newbndbox(gmin, gmax);
+    gbox->objlist = NULL;
+    gbox->tex = NULL; 
+    gbox->nextobj=NULL;
+    gbox->objlist=*toplist;
+    *toplist=(object *) gbox;  
+  }
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/objbound.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/objbound.h
new file mode 100644 (file)
index 0000000..574aff5
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*  
+ * objbound.h - defines for object bounding code.
+ *
+ *  $Id: objbound.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+void dividespace(int, object **);
+
+#ifdef OBJBOUND_PRIVATE
+
+static void globalbound(object **, vector *, vector *);
+static int objinside(object * obj, vector * min, vector * max);
+static int countobj(object *);
+static void movenextobj(object *, object **);
+static void octreespace(object **, int);
+
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/parse.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/parse.cpp
new file mode 100644 (file)
index 0000000..12550f3
--- /dev/null
@@ -0,0 +1,857 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * parse.c - an UltraLame (tm) parser for simple data files...
+ *
+ *  $Id: parse.cpp,v 1.3 2007-02-22 17:54:15 dpoulsen Exp $
+ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h> /* needed for toupper(), macro.. */
+
+#include "types.h"
+#include "api.h"      /* rendering API */
+
+#define PARSE_INTERNAL
+#include "parse.h" /* self protos */
+#undef PARSE_INTERNAL
+
+static texentry textable[NUMTEXS]; /* texture lookup table */
+static texentry defaulttex;     /* The default texture when a lookup fails */
+static int numtextures;         /* number of TEXDEF textures               */
+static int numobjectsparsed;    /* total number of objects parsed so far   */
+static color scenebackcol;   /* scene background color                  */
+
+static int stringcmp(const char * a, const char * b) {
+  int i, s, l;
+
+  s=strlen(a);
+  l=strlen(b);
+
+  if (s != l) 
+    return 1;
+
+  for (i=0; i<s; i++) {
+    if (toupper(a[i]) != toupper(b[i])) {
+      return 1;
+    }
+  }
+  return 0;
+}
+
+static void reset_tex_table(void) {
+  apitexture apitex;
+  
+  numtextures=0; 
+  memset(&textable, 0, sizeof(textable));
+
+  apitex.col.r=1.0;
+  apitex.col.g=1.0; 
+  apitex.col.b=1.0; 
+  apitex.ambient=0.1;
+  apitex.diffuse=0.9;
+  apitex.specular=0.0;
+  apitex.opacity=1.0;
+  apitex.texturefunc=0;
+
+  defaulttex.tex=rt_texture(&apitex);
+}
+
+static errcode add_texture(void * tex, char name[TEXNAMELEN]) {
+  textable[numtextures].tex=tex;
+  strcpy(textable[numtextures].name, name); 
+
+  numtextures++;
+  if (numtextures > NUMTEXS) {
+    fprintf(stderr, "Parse: %d textures allocated, texture slots full!\n", numtextures);
+    numtextures--; /* keep writing over last texture if we've run out.. */
+    return PARSEALLOCERR;
+  }
+
+  return PARSENOERR;
+}
+
+static void * find_texture(char name[TEXNAMELEN]) {
+  int i;
+  
+  for (i=0; i<numtextures; i++) {
+    if (strcmp(name, textable[i].name) == 0) 
+       return textable[i].tex; 
+  }
+  fprintf(stderr, "Undefined texture '%s', using default. \n",name);
+  return(defaulttex.tex); 
+}
+
+apiflt degtorad(apiflt deg) {
+  apiflt tmp;
+  tmp=deg * 3.1415926 / 180.0;
+  return tmp;
+}
+
+static void degvectoradvec(vector * degvec) {
+  vector tmp;
+
+  tmp.x=degtorad(degvec->x);
+  tmp.y=degtorad(degvec->y);
+  tmp.z=degtorad(degvec->z);
+  *degvec=tmp;
+}
+
+static void InitRot3d(RotMat * rot, apiflt x, apiflt y, apiflt z) {
+  rot->rx1=cos(y)*cos(z);
+  rot->rx2=sin(x)*sin(y)*cos(z) - cos(x)*sin(z);
+  rot->rx3=sin(x)*sin(z) + cos(x)*cos(z)*sin(y);
+  
+  rot->ry1=cos(y)*sin(z);
+  rot->ry2=cos(x)*cos(z) + sin(x)*sin(y)*sin(z);
+  rot->ry3=cos(x)*sin(y)*sin(z) - sin(x)*cos(z);
+
+  rot->rz1=sin(y);
+  rot->rz2=sin(x)*cos(y);
+  rot->rz3=cos(x)*cos(y);
+}
+
+static void Rotate3d(RotMat * rot, vector * vec) {
+  vector tmp;
+  tmp.x=(vec->x*(rot->rx1) + vec->y*(rot->rx2) + vec->z*(rot->rx3));
+  tmp.y=(vec->x*(rot->ry1) + vec->y*(rot->ry2) + vec->z*(rot->ry3));
+  tmp.z=(vec->x*(rot->rz1) + vec->y*(rot->rz2) + vec->z*(rot->rz3));
+  *vec=tmp; 
+}
+
+static void Scale3d(vector * scale, vector * vec) {
+  vec->x=vec->x * scale->x;
+  vec->y=vec->y * scale->y;
+  vec->z=vec->z * scale->z;
+}
+
+static void Trans3d(vector * trans, vector * vec) {
+  vec->x+=trans->x;
+  vec->y+=trans->y;
+  vec->z+=trans->z;
+}
+
+static errcode GetString(FILE * dfile, const char * string) {
+  char data[255];
+
+  fscanf(dfile,"%s",data);
+  if (stringcmp(data, string) != 0) {
+    fprintf(stderr, "parse: Expected %s, got %s \n",string, data);
+    fprintf(stderr, "parse: Error while parsing object: %d \n",numobjectsparsed);
+    return PARSEBADSYNTAX;
+  }
+
+  return PARSENOERR;
+}
+
+unsigned int readmodel(char * modelfile, SceneHandle scene) {
+  FILE * dfile;
+  errcode rc;
+  reset_tex_table(); 
+  dfile=NULL;
+
+  dfile=fopen(modelfile,"r");
+  if (dfile==NULL) {
+    return PARSEBADFILE;
+  }
+
+  rc = GetScenedefs(dfile, scene); 
+  if (rc != PARSENOERR)
+    return rc;
+
+  scenebackcol.r = 0.0; /* default background is black */
+  scenebackcol.g = 0.0;
+  scenebackcol.b = 0.0;
+
+  numobjectsparsed=0;
+  while ((rc = GetObject(dfile, scene)) == PARSENOERR) {
+    numobjectsparsed++;
+  } 
+  fclose(dfile);
+
+  if (rc == PARSEEOF)
+    rc = PARSENOERR;
+
+  rt_background(scene, scenebackcol);
+
+  return rc;
+}
+
+
+static errcode GetScenedefs(FILE * dfile, SceneHandle scene) {
+  vector Ccenter, Cview, Cup;
+  apiflt zoom, aspectratio;
+  int raydepth, antialiasing;
+  char outfilename[200];
+  int xres, yres, verbose;
+  float a,b,c;
+  errcode rc = PARSENOERR;
+
+  rc |= GetString(dfile, "BEGIN_SCENE"); 
+
+  rc |= GetString(dfile, "OUTFILE");
+  fscanf(dfile, "%s", outfilename); 
+#ifdef _WIN32
+  if (strcmp (outfilename, "/dev/null") == 0) {
+    strcpy (outfilename, "NUL:");
+  }
+#endif
+  rc |= GetString(dfile, "RESOLUTION");
+  fscanf(dfile, "%d %d", &xres, &yres);
+
+  rc |= GetString(dfile, "VERBOSE");
+  fscanf(dfile, "%d", &verbose);
+
+  rt_scenesetup(scene, outfilename, xres, yres, verbose);
+
+  rc |= GetString(dfile, "CAMERA");
+
+  rc |= GetString(dfile, "ZOOM");
+  fscanf(dfile, "%f", &a);
+  zoom=a;
+
+  rc |= GetString(dfile, "ASPECTRATIO");
+  fscanf(dfile, "%f", &b);  
+  aspectratio=b;
+
+  rc |= GetString(dfile, "ANTIALIASING");
+  fscanf(dfile, "%d", &antialiasing);
+
+  rc |= GetString(dfile, "RAYDEPTH");
+  fscanf(dfile, "%d", &raydepth);
+
+  rc |= GetString(dfile, "CENTER");
+  fscanf(dfile,"%f %f %f", &a, &b, &c);
+  Ccenter.x = a;
+  Ccenter.y = b;
+  Ccenter.z = c;
+
+  rc |= GetString(dfile, "VIEWDIR");
+  fscanf(dfile,"%f %f %f", &a, &b, &c);
+  Cview.x = a;
+  Cview.y = b;
+  Cview.z = c;
+
+  rc |= GetString(dfile, "UPDIR");
+  fscanf(dfile,"%f %f %f", &a, &b, &c);
+  Cup.x = a;
+  Cup.y = b;
+  Cup.z = c;
+
+  rc |= GetString(dfile, "END_CAMERA");   
+
+  rt_camerasetup(scene, zoom, aspectratio, antialiasing, raydepth,
+              Ccenter, Cview, Cup);
+
+
+  return rc;
+}
+
+static errcode GetObject(FILE * dfile, SceneHandle scene) {
+  char objtype[80];
+  fscanf(dfile, "%s", objtype);
+  if (!stringcmp(objtype, "END_SCENE")) {
+    return PARSEEOF; /* end parsing */
+  }
+  if (!stringcmp(objtype, "TEXDEF")) {
+    return GetTexDef(dfile);
+  }    
+  if (!stringcmp(objtype, "TEXALIAS")) {
+    return GetTexAlias(dfile);
+  }
+  if (!stringcmp(objtype, "BACKGROUND")) {
+    return GetBackGnd(dfile);
+  }
+  if (!stringcmp(objtype, "CYLINDER")) {
+    return GetCylinder(dfile);
+  }
+  if (!stringcmp(objtype, "FCYLINDER")) {
+    return GetFCylinder(dfile);
+  }
+  if (!stringcmp(objtype, "POLYCYLINDER")) {
+    return GetPolyCylinder(dfile);
+  }
+  if (!stringcmp(objtype, "SPHERE")) {
+    return GetSphere(dfile);
+  }
+  if (!stringcmp(objtype, "PLANE")) {
+    return GetPlane(dfile);
+  }
+  if (!stringcmp(objtype, "RING")) {
+    return GetRing(dfile);
+  }
+  if (!stringcmp(objtype, "BOX")) {
+    return GetBox(dfile);
+  }
+  if (!stringcmp(objtype, "SCALARVOL")) {
+    return GetVol(dfile);
+  }
+  if (!stringcmp(objtype, "TRI")) {
+    return GetTri(dfile);
+  }
+  if (!stringcmp(objtype, "STRI")) {
+    return GetSTri(dfile);
+  }
+  if (!stringcmp(objtype, "LIGHT")) {
+    return GetLight(dfile);
+  }
+  if (!stringcmp(objtype, "SCAPE")) {
+    return GetLandScape(dfile);
+  }
+  if (!stringcmp(objtype, "TPOLYFILE")) {
+    return GetTPolyFile(dfile);
+  }
+
+  fprintf(stderr, "Found bad token: %s expected an object type\n", objtype);
+  return PARSEBADSYNTAX;
+}
+
+static errcode GetVector(FILE * dfile, vector * v1) {
+  float a, b, c;
+  
+  fscanf(dfile, "%f %f %f", &a, &b, &c); 
+  v1->x=a;
+  v1->y=b;
+  v1->z=c;
+
+  return PARSENOERR;
+}
+
+static errcode GetColor(FILE * dfile, color * c1) {
+  float r, g, b;
+  int rc; 
+
+  rc = GetString(dfile, "COLOR"); 
+  fscanf(dfile, "%f %f %f", &r, &g, &b);
+  c1->r=r;
+  c1->g=g;
+  c1->b=b;
+
+  return rc;
+}
+
+static errcode GetTexDef(FILE * dfile) {
+  char texname[TEXNAMELEN];
+
+  fscanf(dfile, "%s", texname);
+  add_texture(GetTexBody(dfile), texname); 
+
+  return PARSENOERR;
+}
+
+static errcode GetTexAlias(FILE * dfile) {
+  char texname[TEXNAMELEN];
+  char aliasname[TEXNAMELEN];
+
+  fscanf(dfile, "%s", texname);
+  fscanf(dfile, "%s", aliasname);
+  add_texture(find_texture(aliasname), texname); 
+
+  return PARSENOERR;
+}
+
+
+static errcode GetTexture(FILE * dfile, void ** tex) {
+  char tmp[255];
+  errcode rc = PARSENOERR;
+
+  fscanf(dfile, "%s", tmp);
+  if (!stringcmp("TEXTURE", tmp)) {    
+    *tex = GetTexBody(dfile);
+  }
+  else
+    *tex = find_texture(tmp);
+
+  return rc;
+}
+
+void * GetTexBody(FILE * dfile) {
+  char tmp[255];
+  float a,b,c,d, phong, phongexp, phongtype;
+  apitexture tex;
+  void * voidtex; 
+  errcode rc;
+
+  rc = GetString(dfile, "AMBIENT");
+  fscanf(dfile, "%f", &a); 
+  tex.ambient=a;
+
+  rc |= GetString(dfile, "DIFFUSE");
+  fscanf(dfile, "%f", &b);
+  tex.diffuse=b;
+
+  rc |= GetString(dfile, "SPECULAR");
+  fscanf(dfile, "%f", &c);
+  tex.specular=c;
+
+  rc |= GetString(dfile, "OPACITY");
+  fscanf(dfile, "%f", &d);  
+  tex.opacity=d;
+
+  fscanf(dfile, "%s", tmp);
+  if (!stringcmp("PHONG", tmp)) {
+    fscanf(dfile, "%s", tmp);
+    if (!stringcmp("METAL", tmp)) {
+      phongtype = RT_PHONG_METAL;
+    }
+    else if (!stringcmp("PLASTIC", tmp)) {
+      phongtype = RT_PHONG_PLASTIC;
+    }
+    else {
+      phongtype = RT_PHONG_PLASTIC;
+    } 
+
+    fscanf(dfile, "%f", &phong);
+    GetString(dfile, "PHONG_SIZE");
+    fscanf(dfile, "%f", &phongexp);
+    fscanf(dfile, "%s", tmp);
+  }     
+  else { 
+    phong = 0.0;
+    phongexp = 100.0;
+    phongtype = RT_PHONG_PLASTIC;
+  }
+  
+  fscanf(dfile, "%f %f %f", &a, &b, &c);
+  tex.col.r = a;
+  tex.col.g = b;
+  tex.col.b = c;
+  rc |= GetString(dfile, "TEXFUNC");
+  fscanf(dfile, "%d", &tex.texturefunc);
+  if (tex.texturefunc >= 7) {    /* if its an image map, we need a filename */
+    fscanf(dfile, "%s", tex.imap);
+  }
+  if (tex.texturefunc != 0) {
+    rc |= GetString(dfile, "CENTER");
+    rc |= GetVector(dfile, &tex.ctr);
+    rc |= GetString(dfile, "ROTATE");
+    rc |= GetVector(dfile, &tex.rot);
+    rc |= GetString(dfile, "SCALE");
+    rc |= GetVector(dfile, &tex.scale);
+  }
+  if (tex.texturefunc == 9) {
+    rc |= GetString(dfile, "UAXIS");
+    rc |= GetVector(dfile, &tex.uaxs);
+    rc |= GetString(dfile, "VAXIS");
+    rc |= GetVector(dfile, &tex.vaxs);
+  }
+
+  voidtex = rt_texture(&tex);
+  rt_tex_phong(voidtex, phong, phongexp, (int) phongtype);
+
+  return voidtex;
+}
+
+static errcode GetLight(FILE * dfile) {
+  apiflt rad;
+  vector ctr;
+  apitexture tex;
+  float a; 
+  errcode rc;
+
+  memset(&tex, 0, sizeof(apitexture)); 
+
+  rc = GetString(dfile,"CENTER"); 
+  rc |= GetVector(dfile, &ctr); 
+  rc |= GetString(dfile,"RAD");
+  fscanf(dfile,"%f",&a);  /* read in radius */ 
+  rad=a;
+
+  rc |= GetColor(dfile, &tex.col);
+  
+  rt_light(rt_texture(&tex), ctr, rad);
+
+  return rc;
+}
+
+static errcode GetBackGnd(FILE * dfile) {
+  float r,g,b;
+  
+  fscanf(dfile, "%f %f %f", &r, &g, &b);
+
+  scenebackcol.r=r;
+  scenebackcol.g=g;
+  scenebackcol.b=b;
+
+  return PARSENOERR;
+}
+
+static errcode GetCylinder(FILE * dfile) {
+  apiflt rad;
+  vector ctr, axis;
+  void * tex;
+  float a;
+  errcode rc;
+
+  rc = GetString(dfile, "CENTER");
+  rc |= GetVector(dfile, &ctr);
+  rc |= GetString(dfile, "AXIS");
+  rc |= GetVector(dfile, &axis);
+  rc |= GetString(dfile, "RAD");
+  fscanf(dfile, "%f", &a);
+  rad=a;
+
+  rc |= GetTexture(dfile, &tex);
+  rt_cylinder(tex, ctr, axis, rad); 
+
+  return rc;
+}
+
+static errcode GetFCylinder(FILE * dfile) {
+  apiflt rad;
+  vector ctr, axis;
+  vector pnt1, pnt2;
+  void * tex;
+  float a;
+  errcode rc;
+
+  rc = GetString(dfile, "BASE");
+  rc |= GetVector(dfile, &pnt1);
+  rc |= GetString(dfile, "APEX");
+  rc |= GetVector(dfile, &pnt2);
+
+  ctr=pnt1;
+  axis.x=pnt2.x - pnt1.x; 
+  axis.y=pnt2.y - pnt1.y;
+  axis.z=pnt2.z - pnt1.z;
+
+  rc |= GetString(dfile, "RAD");
+  fscanf(dfile, "%f", &a);
+  rad=a;
+
+  rc |= GetTexture(dfile, &tex);
+  rt_fcylinder(tex, ctr, axis, rad); 
+
+  return rc;
+}
+static errcode GetPolyCylinder(FILE * dfile) {
+  apiflt rad;
+  vector * temp;
+  void * tex;
+  float a;
+  int numpts, i;
+  errcode rc;
+
+  rc = GetString(dfile, "POINTS");
+  fscanf(dfile, "%d", &numpts);
+
+  temp = (vector *) malloc(numpts * sizeof(vector));
+
+  for (i=0; i<numpts; i++) {
+    rc |= GetVector(dfile, &temp[i]);
+  }         
+
+  rc |= GetString(dfile, "RAD");
+  fscanf(dfile, "%f", &a);
+  rad=a;
+
+  rc |= GetTexture(dfile, &tex);
+  rt_polycylinder(tex, temp, numpts, rad); 
+
+  free(temp);
+
+  return rc;
+}
+
+static errcode GetSphere(FILE * dfile) {
+  apiflt rad;
+  vector ctr;
+  void * tex;
+  float a;
+  errcode rc;
+  rc = GetString(dfile,"CENTER");
+  rc |= GetVector(dfile, &ctr); 
+  rc |= GetString(dfile, "RAD");
+  fscanf(dfile,"%f",&a); 
+  rad=a;
+
+  rc |= GetTexture(dfile, &tex); 
+  rt_sphere(tex, ctr, rad);
+
+  return rc;
+}
+
+static errcode GetPlane(FILE * dfile) {
+  vector normal;
+  vector ctr;
+  void * tex;
+  errcode rc;
+
+  rc = GetString(dfile, "CENTER");
+  rc |= GetVector(dfile, &ctr);
+  rc |= GetString(dfile, "NORMAL");
+  rc |= GetVector(dfile, &normal);
+  rc |= GetTexture(dfile, &tex);
+
+  rt_plane(tex, ctr, normal);
+
+  return rc;
+}
+
+static errcode GetVol(FILE * dfile) {
+  vector min, max;
+  int x,y,z;  
+  char fname[255];
+  void * tex;
+  errcode rc;
+  rc = GetString(dfile, "MIN");
+  rc |= GetVector(dfile, &min);
+  rc |= GetString(dfile, "MAX");
+  rc |= GetVector(dfile, &max);
+  rc |= GetString(dfile, "DIM");
+  fscanf(dfile, "%d %d %d ", &x, &y, &z);
+  rc |= GetString(dfile, "FILE");
+  fscanf(dfile, "%s", fname);  
+  rc |= GetTexture(dfile, &tex);
+  rt_scalarvol(tex, min, max, x, y, z, fname, NULL); 
+
+  return rc;
+}
+
+static errcode GetBox(FILE * dfile) {
+  vector min, max;
+  void * tex;
+  errcode rc;
+
+  rc = GetString(dfile, "MIN");
+  rc |= GetVector(dfile, &min);
+  rc |= GetString(dfile, "MAX");
+  rc |= GetVector(dfile, &max);
+  rc |= GetTexture(dfile, &tex);
+
+  rt_box(tex, min, max);
+
+  return rc;
+}
+
+static errcode GetRing(FILE * dfile) {
+  vector normal;
+  vector ctr;
+  void * tex;
+  float a,b;
+  errcode rc;
+  rc = GetString(dfile, "CENTER");
+  rc |= GetVector(dfile, &ctr);
+  rc |= GetString(dfile, "NORMAL");
+  rc |= GetVector(dfile, &normal);
+  rc |= GetString(dfile, "INNER");
+  fscanf(dfile, " %f ", &a);
+  rc |= GetString(dfile, "OUTER");
+  fscanf(dfile, " %f ", &b);
+  rc |= GetTexture(dfile, &tex);
+  rt_ring(tex, ctr, normal, a, b);
+
+  return rc;
+}
+
+static errcode GetTri(FILE * dfile) {
+  vector v0,v1,v2;
+  void * tex;
+  errcode rc;
+
+  rc = GetString(dfile, "V0");
+  rc |= GetVector(dfile, &v0);
+
+  rc |= GetString(dfile, "V1");
+  rc |= GetVector(dfile, &v1);
+
+  rc |= GetString(dfile, "V2");
+  rc |= GetVector(dfile, &v2);
+
+  rc |= GetTexture(dfile, &tex);
+
+  rt_tri(tex, v0, v1, v2);
+
+  return rc;
+}
+
+static errcode GetSTri(FILE * dfile) {
+  vector v0,v1,v2,n0,n1,n2;
+  void * tex;
+  errcode rc;
+
+  rc = GetString(dfile, "V0");
+  rc |= GetVector(dfile, &v0);
+
+  rc |= GetString(dfile, "V1");
+  rc |= GetVector(dfile, &v1);
+
+  rc |= GetString(dfile, "V2");
+  rc |= GetVector(dfile, &v2);
+  
+  rc |= GetString(dfile, "N0");
+  rc |= GetVector(dfile, &n0);
+
+  rc |= GetString(dfile, "N1");
+  rc |= GetVector(dfile, &n1);
+
+  rc |= GetString(dfile, "N2");
+  rc |= GetVector(dfile, &n2);
+
+  rc |= GetTexture(dfile, &tex);
+  
+  rt_stri(tex, v0, v1, v2, n0, n1, n2);
+
+  return rc;
+}
+
+static errcode GetLandScape(FILE * dfile) {
+  void * tex;
+  vector ctr;
+  apiflt wx, wy;
+  int m, n;
+  float a,b;
+  errcode rc;
+
+  rc = GetString(dfile, "RES");
+  fscanf(dfile, "%d %d", &m, &n);
+
+  rc |= GetString(dfile, "SCALE");
+  fscanf(dfile, "%f %f", &a, &b);   
+  wx=a;
+  wy=b;
+
+  rc |= GetString(dfile, "CENTER");
+  rc |= GetVector(dfile, &ctr);
+
+  rc |= GetTexture(dfile, &tex);
+
+  rt_landscape(tex, m, n, ctr, wx, wy);
+
+  return rc;
+}
+
+static errcode GetTPolyFile(FILE * dfile) {
+  void * tex;
+  vector ctr, rot, scale;
+  vector v1, v2, v0;
+  char ifname[255];
+  FILE *ifp;
+  int v, totalpolys;
+  RotMat RotA;
+  errcode rc;
+
+  totalpolys=0;
+
+  rc = GetString(dfile, "SCALE"); 
+  rc |= GetVector(dfile, &scale);
+
+  rc |= GetString(dfile, "ROT");
+  rc |= GetVector(dfile, &rot);
+
+  degvectoradvec(&rot); 
+  InitRot3d(&RotA, rot.x, rot.y, rot.z);
+
+  rc |= GetString(dfile, "CENTER");
+  rc |= GetVector(dfile, &ctr);
+
+  rc |= GetString(dfile, "FILE");
+  fscanf(dfile, "%s", ifname);
+
+  rc |= GetTexture(dfile, &tex);
+
+  if ((ifp=fopen(ifname, "r")) == NULL) {
+    fprintf(stderr, "Can't open data file %s for input!! Aborting...\n", ifname);
+    return PARSEBADSUBFILE;
+  }
+
+  while (!feof(ifp)) {
+    fscanf(ifp, "%d", &v);
+    if (v != 3) { break; }
+
+    totalpolys++;
+    v=0; 
+     
+    rc |= GetVector(ifp, &v0);
+    rc |= GetVector(ifp, &v1);
+    rc |= GetVector(ifp, &v2);
+
+    Scale3d(&scale, &v0);
+    Scale3d(&scale, &v1);
+    Scale3d(&scale, &v2);
+
+    Rotate3d(&RotA, &v0); 
+    Rotate3d(&RotA, &v1); 
+    Rotate3d(&RotA, &v2); 
+
+    Trans3d(&ctr, &v0);
+    Trans3d(&ctr, &v1);
+    Trans3d(&ctr, &v2);
+
+    rt_tri(tex, v1, v0, v2);
+  }
+
+  fclose(ifp);
+
+  return rc;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/parse.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/parse.h
new file mode 100644 (file)
index 0000000..8b1e76e
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * parse.h - this file contains defines for model file reading.
+ *
+ *  $Id: parse.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+#define PARSENOERR       0
+#define PARSEBADFILE     1
+#define PARSEBADSUBFILE  2
+#define PARSEBADSYNTAX   4
+#define PARSEEOF         8
+#define PARSEALLOCERR    16
+unsigned int readmodel(char *, SceneHandle);
+
+#ifdef PARSE_INTERNAL
+#define NUMTEXS 32768
+#define TEXNAMELEN 24
+
+typedef struct {
+   double rx1; double rx2; double rx3;
+   double ry1; double ry2; double ry3;
+   double rz1; double rz2; double rz3;
+} RotMat;
+
+typedef struct {
+        char name[TEXNAMELEN];
+        void * tex;
+} texentry;
+
+#ifdef _ERRCODE_DEFINED
+#define errcode errcode_t
+#endif//_ERRCODE_DEFINED
+typedef unsigned int errcode;
+
+static errcode add_texture(void * tex, char name[TEXNAMELEN]);
+static errcode GetString(FILE *, const char *);
+static errcode GetScenedefs(FILE *, SceneHandle);
+static errcode GetColor(FILE *, color *);
+static errcode GetVector(FILE *, vector *);
+static errcode GetTexDef(FILE *);
+static errcode GetTexAlias(FILE *);
+static errcode GetTexture(FILE *, void **);
+void * GetTexBody(FILE *);
+static errcode GetBackGnd(FILE *);
+static errcode GetCylinder(FILE *);
+static errcode GetFCylinder(FILE *);
+static errcode GetPolyCylinder(FILE *);
+static errcode GetSphere(FILE *);
+static errcode GetPlane(FILE *);
+static errcode GetRing(FILE *);
+static errcode GetBox(FILE *);
+static errcode GetVol(FILE *);
+static errcode GetTri(FILE *);
+static errcode GetSTri(FILE *);
+static errcode GetLight(FILE *);
+static errcode GetLandScape(FILE *);
+static errcode GetTPolyFile(FILE *);
+static errcode GetMGFFile(FILE *, SceneHandle);
+static errcode GetObject(FILE *, SceneHandle);
+
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/plane.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/plane.cpp
new file mode 100644 (file)
index 0000000..991470e
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * plane.c - This file contains the functions for dealing with planes.
+ *
+ *  $Id: plane.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define PLANE_PRIVATE
+#include "plane.h"
+
+static object_methods plane_methods = {
+  (void (*)(void *, void *))(plane_intersect),
+  (void (*)(void *, void *, void *, void *))(plane_normal),
+  plane_bbox, 
+  free 
+};
+
+object * newplane(void * tex, vector ctr, vector norm) {
+  plane * p;
+  
+  p=(plane *) rt_getmem(sizeof(plane));
+  memset(p, 0, sizeof(plane));
+  p->methods = &plane_methods;
+
+  p->tex = (texture *)tex;
+  p->norm = norm;
+  VNorm(&p->norm);
+  p->d = -VDot(&ctr, &p->norm);
+
+  return (object *) p;
+}
+
+static int plane_bbox(void * obj, vector * min, vector * max) {
+  return 0;
+}
+
+static void plane_intersect(plane * pln, ray * ry) {
+  flt t,td;
+   
+  t=-(pln->d + VDot(&pln->norm, &ry->o));
+  td=VDot(&pln->norm, &ry->d); 
+  if (td != 0.0) {
+    t /= td;
+    if (t > 0.0)
+      add_intersection(t,(object *) pln, ry);
+  }
+}
+
+static void plane_normal(plane * pln, vector  * pnt, ray * incident, vector * N) {
+  *N=pln->norm;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/plane.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/plane.h
new file mode 100644 (file)
index 0000000..173dc29
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * plane.h - This file contains the defines for planes etc.
+ *
+ *  $Id: plane.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+object * newplane(void * tex, vector ctr, vector norm);
+
+#ifdef PLANE_PRIVATE
+typedef struct {
+  unsigned int id;                      /* Unique Object serial number    */
+  void * nextobj;                       /* pointer to next object in list */
+  object_methods * methods;             /* this object's methods          */
+  texture * tex;                        /* object texture                 */
+  flt d;
+  vector norm;
+} plane; 
+
+static void plane_intersect(plane *, ray *);
+static int plane_bbox(void * obj, vector * min, vector * max);
+static void plane_normal(plane *, vector *, ray * incident, vector *);
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ppm.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ppm.cpp
new file mode 100644 (file)
index 0000000..687c614
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ *  ppm.c - This file deals with PPM format image files (reading/writing)
+ *
+ *  $Id: ppm.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */ 
+
+/* For our puposes, we're interested only in the 3 byte per pixel 24 bit
+   truecolor sort of file..  Probably won't implement any decent checking
+   at this point, probably choke on things like the # comments.. */
+
+#include <stdio.h>
+#include "machine.h"
+#include "types.h"
+#include "util.h"
+#include "imageio.h" /* error codes etc */
+#include "ppm.h"
+
+static int getint(FILE * dfile) {
+  char ch[200];
+  int i;
+  int num;
+
+  num=0; 
+  while (num==0) {
+    fscanf(dfile, "%s", ch);
+      while (ch[0]=='#') {
+        fgets(ch, 200, dfile);
+      }
+    num=sscanf(ch, "%d", &i);
+  }
+  return i;
+}
+
+int readppm(char * name, int * xres, int * yres, unsigned char **imgdata) {
+  char data[200];  
+  FILE * ifp;
+  int i, bytesread;
+  int datasize;
+  ifp=fopen(name, "r");  
+  if (ifp==NULL) {
+    return IMAGEBADFILE; /* couldn't open the file */
+  }
+  fscanf(ifp, "%s", data);
+  if (strcmp(data, "P6")) {
+     fclose(ifp);
+     return IMAGEUNSUP; /* not a format we support */
+  }
+
+  *xres=getint(ifp);
+  *yres=getint(ifp);
+      i=getint(ifp); /* eat the maxval number */
+  fread(&i, 1, 1, ifp); /* eat the newline */ 
+  datasize = 3 * (*xres) * (*yres);
+
+  *imgdata=(unsigned char *)rt_getmem(datasize); 
+
+  bytesread=fread(*imgdata, 1, datasize, ifp);   
+
+  fclose(ifp);
+
+  if (bytesread != datasize) 
+    return IMAGEREADERR;
+  
+  return IMAGENOERR;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ppm.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ppm.h
new file mode 100644 (file)
index 0000000..6d1cd03
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ *  ppm.h - This file deals with PPM format image files (reading/writing)
+ *
+ *  $Id: ppm.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */ 
+
+/* For our puposes, we're interested only in the 3 byte per pixel 24 bit
+   truecolor sort of file..  Probably won't implement any decent checking
+   at this point, probably choke on things like the # comments.. */
+
+int readppm(char * name, int * xres, int * yres, unsigned char **imgdata);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/pthread.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/pthread.cpp
new file mode 100644 (file)
index 0000000..8c75e13
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+#ifdef EMULATE_PTHREADS
+
+#include <assert.h>
+#include "pthread.h"
+
+/*
+    Basics
+*/
+
+int
+pthread_create (pthread_t *thread, pthread_attr_t *attr, void *(*start_routine) (void *), void *arg)
+{
+    pthread_t th;
+
+    if (thread == NULL) return EINVAL;
+    *thread = NULL;
+
+    if (start_routine == NULL) return EINVAL;
+
+    th = (pthread_t) malloc (sizeof (pthread_s));
+    memset (th, 0, sizeof (pthread_s));
+
+    th->winthread_handle = CreateThread (
+        NULL,
+        0,
+        (LPTHREAD_START_ROUTINE) start_routine,
+        arg,
+        0,
+        &th->winthread_id);
+    if (th->winthread_handle == NULL) return EAGAIN;  /*  GetLastError()  */
+
+    *thread = th;
+    return 0;
+}
+
+int
+pthread_join (pthread_t th, void **thread_return)
+{
+    BOOL b_ret;
+    DWORD dw_ret;
+
+    if (thread_return) *thread_return = NULL;
+
+    if ((th == NULL) || (th->winthread_handle == NULL)) return EINVAL;
+
+    dw_ret = WaitForSingleObject (th->winthread_handle, INFINITE);
+    if (dw_ret != WAIT_OBJECT_0) return ERROR_PTHREAD;  /*  dw_ret == WAIT_FAILED; GetLastError()  */
+
+    if (thread_return) {
+        BOOL e_ret;
+        DWORD exit_val;
+        e_ret = GetExitCodeThread (th->winthread_handle, &exit_val);
+        if (!e_ret) return ERROR_PTHREAD;  /*  GetLastError()  */
+        *thread_return = (void *)(size_t) exit_val;
+    }
+
+    b_ret = CloseHandle (th->winthread_handle);
+    if (!b_ret) return ERROR_PTHREAD;  /*  GetLastError()  */
+    memset (th, 0, sizeof (pthread_s));
+    free (th);
+    th = NULL;
+
+    return 0;
+}
+
+void
+pthread_exit (void *retval)
+{
+    /*  specific to PTHREAD_TO_WINTHREAD  */
+
+    ExitThread ((DWORD) ((size_t) retval));  /*  thread becomes signalled so its death can be waited upon  */
+    /*NOTREACHED*/
+    assert (0); return;  /*  void fnc; can't return an error code  */
+}
+
+/*
+    Mutex
+*/
+
+int
+pthread_mutex_init (pthread_mutex_t *mutex, pthread_mutexattr_t *mutex_attr)
+{
+    InitializeCriticalSection (&mutex->critsec);
+    return 0;
+}
+
+int
+pthread_mutex_destroy (pthread_mutex_t *mutex)
+{
+    return 0;
+}
+
+int
+pthread_mutex_lock (pthread_mutex_t *mutex)
+{
+    EnterCriticalSection (&mutex->critsec);
+    return 0;
+}
+
+int
+pthread_mutex_unlock (pthread_mutex_t *mutex)
+{
+    LeaveCriticalSection (&mutex->critsec);
+    return 0;
+}
+
+#endif  /*  EMULATE_PTHREADS  */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/pthread.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/pthread.h
new file mode 100644 (file)
index 0000000..7fc054b
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+#ifdef EMULATE_PTHREADS
+
+#ifndef _PTHREAD_H_DEFINED
+#define _PTHREAD_H_DEFINED
+
+#include <windows.h>
+#include <errno.h>
+#ifndef ENOTSUP
+#define ENOTSUP EPERM
+#endif
+
+/*  just need <stddef.h> on Windows to get size_t defined  */
+#include <stddef.h>
+
+#define ERROR_PTHREAD 1000
+#define ERROR_MODE 1001
+#define ERROR_UNIMPL 1002
+
+/*
+    Basics
+*/
+
+struct pthread_s {
+    HANDLE winthread_handle;
+    DWORD winthread_id;
+};
+typedef struct pthread_s *pthread_t;  /*  one of the few types that's pointer, not struct  */
+
+typedef struct {
+    int i;  /*  not yet defined...  */
+} pthread_attr_t;
+
+/*
+    Mutex
+*/
+
+typedef struct {
+    int i;  /*  not yet defined...  */
+} pthread_mutexattr_t;
+
+typedef struct {
+    CRITICAL_SECTION critsec;
+} pthread_mutex_t;
+
+/*
+    Function prototypes
+*/
+
+extern int pthread_create (pthread_t *thread, pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
+extern int pthread_join (pthread_t th, void **thread_return);
+extern void pthread_exit (void *retval);
+
+extern int pthread_mutex_init (pthread_mutex_t *mutex, pthread_mutexattr_t *mutex_attr);
+extern int pthread_mutex_destroy (pthread_mutex_t *mutex);
+extern int pthread_mutex_lock (pthread_mutex_t *mutex);
+extern int pthread_mutex_unlock (pthread_mutex_t *mutex);
+
+#endif  /*  _PTHREAD_H_DEFINED  */
+
+#endif  /*  EMULATE_PTHREADS  */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/quadric.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/quadric.cpp
new file mode 100644 (file)
index 0000000..5c586de
--- /dev/null
@@ -0,0 +1,180 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * quadric.c - This file contains the functions for dealing with quadrics.
+ *
+ *  $Id: quadric.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "quadric.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+int quadric_bbox(void * obj, vector * min, vector * max) {
+  return 0;
+}
+
+static object_methods quadric_methods = {
+  (void (*)(void *, void *))(quadric_intersect),
+  (void (*)(void *, void *, void *, void *))(quadric_normal),
+  quadric_bbox, 
+  free 
+};
+quadric * newquadric() {
+  quadric * q;
+  q=(quadric *) rt_getmem(sizeof(quadric));
+  memset(q, 0, sizeof(quadric));
+  q->ctr.x=0.0;
+  q->ctr.y=0.0;
+  q->ctr.z=0.0;
+  q->methods = &quadric_methods;
+  return q;
+}
+
+void quadric_intersect(quadric * q, ray * ry) {
+  flt Aq, Bq, Cq;
+  flt t1, t2;
+  flt disc;
+  vector rd;
+  vector ro;
+  rd=ry->d;
+  VNorm(&rd);
+
+  ro.x =  ry->o.x - q->ctr.x;
+  ro.y =  ry->o.y - q->ctr.y;
+  ro.z =  ry->o.z - q->ctr.z;
+
+
+  Aq = (q->mat.a*(rd.x * rd.x)) +
+        (2.0 * q->mat.b * rd.x * rd.y) +
+        (2.0 * q->mat.c * rd.x * rd.z) +
+        (q->mat.e * (rd.y * rd.y)) +
+        (2.0 * q->mat.f * rd.y * rd.z) +
+        (q->mat.h * (rd.z * rd.z));
+
+  Bq = 2.0 * (
+        (q->mat.a * ro.x * rd.x) +
+        (q->mat.b * ((ro.x * rd.y) + (rd.x * ro.y))) +
+        (q->mat.c * ((ro.x * rd.z) + (rd.x * ro.z))) +
+        (q->mat.d * rd.x) +
+        (q->mat.e * ro.y * rd.y) +
+        (q->mat.f * ((ro.y * rd.z) + (rd.y * ro.z))) +
+        (q->mat.g * rd.y) +
+        (q->mat.h * ro.z * rd.z) +
+        (q->mat.i * rd.z)
+        );
+
+  Cq = (q->mat.a * (ro.x * ro.x)) +
+        (2.0 * q->mat.b * ro.x * ro.y) +
+        (2.0 * q->mat.c * ro.x * ro.z) +
+        (2.0 * q->mat.d * ro.x) +
+        (q->mat.e * (ro.y * ro.y)) +
+        (2.0 * q->mat.f * ro.y * ro.z) +
+        (2.0 * q->mat.g * ro.y) +
+        (q->mat.h * (ro.z * ro.z)) +
+        (2.0 * q->mat.i * ro.z) +
+        q->mat.j;
+
+  if (Aq == 0.0) {
+          t1 = - Cq / Bq;
+          add_intersection(t1, (object *) q, ry);
+          }
+  else {
+    disc=(Bq*Bq - 4.0 * Aq * Cq);
+    if (disc > 0.0) {
+          disc=sqrt(disc);
+          t1 = (-Bq + disc) / (2.0 * Aq);
+          t2 = (-Bq - disc) / (2.0 * Aq);
+          add_intersection(t1, (object *) q, ry);
+          add_intersection(t2, (object *) q, ry); 
+          }
+  }
+}
+
+void quadric_normal(quadric * q, vector * pnt, ray * incident, vector * N) {
+
+  N->x = (q->mat.a*(pnt->x - q->ctr.x) + 
+         q->mat.b*(pnt->y - q->ctr.y) + 
+         q->mat.c*(pnt->z - q->ctr.z) + q->mat.d);
+
+  N->y = (q->mat.b*(pnt->x - q->ctr.x) + 
+         q->mat.e*(pnt->y - q->ctr.y) + 
+         q->mat.f*(pnt->z - q->ctr.z) + q->mat.g);
+
+  N->z = (q->mat.c*(pnt->x - q->ctr.x) + 
+         q->mat.f*(pnt->y - q->ctr.y) + 
+         q->mat.h*(pnt->z - q->ctr.z) + q->mat.i);
+
+  VNorm(N);
+
+  if (VDot(N, &(incident->d)) > 0.0)  {
+    N->x=-N->x;
+    N->y=-N->y;
+    N->z=-N->z;
+  } 
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/quadric.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/quadric.h
new file mode 100644 (file)
index 0000000..5dbd13e
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * quadric.h - This file contains the defines for quadrics.
+ *
+ *  $Id: quadric.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+typedef struct {
+  flt a; flt b; flt c;
+  flt d; flt e; flt f;
+  flt g; flt h; flt i; flt j;
+} quadmatrix;
+
+typedef struct {
+  unsigned int id;                      /* Unique Object serial number    */
+  void * nextobj;                       /* pointer to next object in list */
+  object_methods * methods;             /* this object's methods          */
+  texture * tex;                        /* object texture                 */
+  vector ctr;
+  quadmatrix mat;
+} quadric; 
+
+
+quadric * newquadric(void);
+void quadric_intersect(quadric *, ray *);
+void quadric_normal(quadric *, vector *, ray *, vector *);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/render.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/render.cpp
new file mode 100644 (file)
index 0000000..45c5e45
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * render.c - This file contains the main program and driver for the raytracer.
+ *
+ *  $Id: render.cpp,v 1.5 2007-02-22 18:17:51 amalakho Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "tgafile.h"
+#include "trace.h"
+#include "render.h"
+#include "util.h"
+#include "light.h"
+#include "global.h"
+#include "ui.h"
+#include "video.h"
+#include "objbound.h"
+#include "grid.h"
+
+/* how many pieces to divide each scanline into */
+#define NUMHORZDIV 1  
+
+void renderscene(scenedef scene) {
+  //char msgtxt[2048];
+  //void * outfile;
+  /* Grid based accerlation scheme */
+  if (scene.boundmode == RT_BOUNDING_ENABLED) 
+    engrid_scene(&rootobj); /* grid */
+  /* Not used now
+  if (scene.verbosemode) { 
+    sprintf(msgtxt, "Opening %s for output.", scene.outfilename); 
+    rt_ui_message(MSG_0, msgtxt);
+  }
+
+  createtgafile(scene.outfilename,  
+                  (unsigned short) scene.hres, 
+                  (unsigned short) scene.vres);
+  outfile = opentgafile(scene.outfilename);
+  */
+
+  timerstart();
+
+  trace_region (scene, 0/*outfile*/, 0, 0, scene.hres, scene.vres);
+  //fclose((FILE *)outfile);
+} /* end of renderscene() */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/render.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/render.h
new file mode 100644 (file)
index 0000000..4460d8d
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * render.h - This file contains the defines for the top level functions 
+ *
+ *  $Id: render.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+
+void renderscene(scenedef); 
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ring.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ring.cpp
new file mode 100644 (file)
index 0000000..1ef57eb
--- /dev/null
@@ -0,0 +1,141 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * ring.c - This file contains the functions for dealing with rings.
+ *
+ *  $Id: ring.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define RING_PRIVATE
+#include "ring.h"
+
+static object_methods ring_methods = {
+  (void (*)(void *, void *))(ring_intersect),
+  (void (*)(void *, void *, void *, void *))(ring_normal),
+  ring_bbox, 
+  free 
+};
+
+object * newring(void * tex, vector ctr, vector norm, flt inrad, flt outrad) {
+  ring * r;
+  
+  r=(ring *) rt_getmem(sizeof(ring));
+  memset(r, 0, sizeof(ring));
+  r->methods = &ring_methods;
+
+  r->tex = (texture *)tex;
+  r->ctr = ctr;
+  r->norm = norm;
+  r->inrad = inrad;
+  r->outrad= outrad;
+
+  return (object *) r;
+}
+
+static int ring_bbox(void * obj, vector * min, vector * max) {
+  ring * r = (ring *) obj;
+
+  min->x = r->ctr.x - r->outrad;
+  min->y = r->ctr.y - r->outrad;
+  min->z = r->ctr.z - r->outrad;
+  max->x = r->ctr.x + r->outrad;
+  max->y = r->ctr.y + r->outrad;
+  max->z = r->ctr.z + r->outrad;
+
+  return 1;
+}
+
+static void ring_intersect(ring * rng, ray * ry) {
+  flt d;
+  flt t,td;
+  vector hit, pnt;
+  
+  d = -VDot(&(rng->ctr), &(rng->norm));
+   
+  t=-(d+VDot(&(rng->norm), &(ry->o)));
+  td=VDot(&(rng->norm),&(ry->d)); 
+  if (td != 0.0) {
+    t= t / td;
+    if (t>=0.0) {
+      hit=Raypnt(ry, t);
+      VSUB(hit, rng->ctr, pnt);
+      VDOT(td, pnt, pnt);
+      td=sqrt(td);
+      if ((td > rng->inrad) && (td < rng->outrad)) 
+        add_intersection(t,(object *) rng, ry);
+    }
+  }
+}
+
+static void ring_normal(ring * rng, vector  * pnt, ray * incident, vector * N) {
+  *N=rng->norm;
+  VNorm(N);
+  if (VDot(N, &(incident->d)) > 0.0)  {
+    N->x=-N->x;
+    N->y=-N->y;
+    N->z=-N->z;
+  } 
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ring.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ring.h
new file mode 100644 (file)
index 0000000..2192598
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * ring.h - This file contains the defines for rings etc.
+ *
+ *  $Id: ring.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+object * newring(void * tex, vector ctr, vector norm, flt in, flt out);
+
+#ifdef RING_PRIVATE 
+typedef struct {
+  unsigned int id;                      /* Unique Object serial number    */
+  void * nextobj;                       /* pointer to next object in list */
+  object_methods * methods;             /* this object's methods          */
+  texture * tex;                        /* object texture                 */
+  vector ctr;
+  vector norm;
+  flt inrad;
+  flt outrad;
+} ring; 
+
+static int ring_bbox(void * obj, vector * min, vector * max);
+static void ring_intersect(ring *, ray *);
+static void ring_normal(ring *, vector *, ray * incident, vector *);
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/shade.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/shade.cpp
new file mode 100644 (file)
index 0000000..f24d308
--- /dev/null
@@ -0,0 +1,268 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * shade.c - This file contains the functions that perform surface shading.
+ *
+ *  $Id: shade.cpp,v 1.3 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "light.h"
+#include "intersect.h"
+#include "vector.h"
+#include "trace.h"
+#include "global.h"
+#include "shade.h"
+
+void reset_lights(void) {
+  numlights=0;
+}
+
+void add_light(point_light * li) {
+  lightlist[numlights]=li;
+  numlights++;
+}
+
+color shader(ray * incident) {
+  color col, diffuse, phongcol; 
+  vector N, L, hit;
+  ray shadowray;
+  flt inten, t, Llen;
+  object * obj;
+  int numints, i;
+  point_light * li;
+
+
+  numints=closest_intersection(&t, &obj, incident->intstruct);  
+               /* find the number of intersections */
+                /* and return the closest one.      */
+
+  if (numints < 1) {         
+    /* if there weren't any object intersections then return the */
+    /* background color for the pixel color.                     */
+    return incident->scene->background;
+  }
+
+  if (obj->tex->islight) {  /* if the current object is a light, then we  */
+    return obj->tex->col;   /* will only use the objects ambient color    */
+  }
+
+  RAYPNT(hit, (*incident), t)       /* find the point of intersection from t */ 
+  obj->methods->normal(obj, &hit, incident, &N);  /* find the surface normal */
+
+  /* execute the object's texture function */
+  col = obj->tex->texfunc(&hit, obj->tex, incident); 
+
+  diffuse.r = 0.0; 
+  diffuse.g = 0.0; 
+  diffuse.b = 0.0; 
+  phongcol = diffuse;
+
+  if ((obj->tex->diffuse > 0.0) || (obj->tex->phong > 0.0)) {  
+    for (i=0; i<numlights; i++) {   /* loop for light contributions */
+      li=lightlist[i];              /* set li=to the current light  */
+      VSUB(li->ctr, hit, L)         /* find the light vector        */
+
+      /* calculate the distance to the light from the hit point */
+      Llen = sqrt(L.x*L.x + L.y*L.y + L.z*L.z) + EPSILON;
+
+      L.x /= Llen; /* normalize the light direction vector */
+      L.y /= Llen;
+      L.z /= Llen;
+
+      VDOT(inten, N, L)             /* light intensity              */
+
+      /* add in diffuse lighting for this light if we're facing it */ 
+      if (inten > 0.0) {            
+        /* test for a shadow */
+        shadowray.intstruct = incident->intstruct;
+        shadowray.flags = RT_RAY_SHADOW | RT_RAY_BOUNDED; 
+        incident->serial++;
+        shadowray.serial = incident->serial;
+        shadowray.mbox = incident->mbox;
+        shadowray.o   = hit;
+        shadowray.d   = L;      
+        shadowray.maxdist = Llen;
+        shadowray.s   = hit;
+        shadowray.e = li->ctr;
+        shadowray.scene = incident->scene;
+        reset_intersection(incident->intstruct);
+        intersect_objects(&shadowray);
+
+        if (!shadow_intersection(incident->intstruct, Llen)) {
+          /* XXX now that opacity is in the code, have to be more careful */
+          ColorAddS(&diffuse, &li->tex->col, inten);
+
+          /* phong type specular highlights */
+          if (obj->tex->phong > 0.0) {
+            flt phongval;
+            phongval = shade_phong(incident, &hit, &N, &L, obj->tex->phongexp); 
+            if (obj->tex->phongtype) 
+              ColorAddS(&phongcol, &col, phongval);
+            else
+              ColorAddS(&phongcol, &(li->tex->col), phongval);
+          }
+        }
+      }  
+    } 
+  }
+
+  ColorScale(&diffuse, obj->tex->diffuse);
+
+  col.r *= (diffuse.r + obj->tex->ambient); /* do a product of the */
+  col.g *= (diffuse.g + obj->tex->ambient); /* diffuse intensity with  */
+  col.b *= (diffuse.b + obj->tex->ambient); /* object color + ambient  */
+
+  if (obj->tex->phong > 0.0) {
+    ColorAccum(&col, &phongcol);
+  }
+
+  /* spawn reflection rays if necessary */
+  /* note: this will overwrite the old intersection list */
+  if (obj->tex->specular > 0.0) {    
+    color specol;
+    specol = shade_reflection(incident, &hit, &N, obj->tex->specular);
+    ColorAccum(&col, &specol);
+  }
+
+  /* spawn transmission rays / refraction */
+  /* note: this will overwrite the old intersection list */
+  if (obj->tex->opacity < 1.0) {      
+    color transcol;
+    transcol = shade_transmission(incident, &hit, 1.0 - obj->tex->opacity);
+    ColorAccum(&col, &transcol);
+  }
+
+  return col;    /* return the color of the shaded pixel... */
+}
+
+
+color shade_reflection(ray * incident, vector * hit, vector * N, flt specular) {
+  ray specray;
+  color col;
+  vector R;
+  VAddS(-2.0 * (incident->d.x * N->x + 
+                incident->d.y * N->y + 
+                incident->d.z * N->z), N, &incident->d, &R);
+
+  specray.intstruct=incident->intstruct; /* what thread are we   */
+  specray.depth=incident->depth - 1;   /* go up a level in recursion depth */
+  specray.flags = RT_RAY_REGULAR;      /* infinite ray, to start with */
+  specray.serial = incident->serial + 1; /* next serial number */
+  specray.mbox = incident->mbox; 
+  specray.o=*hit; 
+  specray.d=R;                        /* reflect incident ray about normal */
+  specray.o=Raypnt(&specray, EPSILON); /* avoid numerical precision bugs */
+  specray.maxdist = FHUGE;             /* take any intersection */
+  specray.scene=incident->scene;       /* global scenedef info */
+  col=trace(&specray);                 /* trace specular reflection ray */ 
+
+  incident->serial = specray.serial;    /* update the serial number */
+
+  ColorScale(&col, specular);
+
+  return col;
+}
+
+
+color shade_transmission(ray * incident, vector * hit, flt trans) {
+  ray transray;
+  color col;
+
+  transray.intstruct=incident->intstruct; /* what thread are we   */
+  transray.depth=incident->depth - 1;    /* go up a level in recursion depth */
+  transray.flags = RT_RAY_REGULAR;       /* infinite ray, to start with */
+  transray.serial = incident->serial + 1; /* update serial number */
+  transray.mbox = incident->mbox;
+  transray.o=*hit; 
+  transray.d=incident->d;                /* ray continues along incident path */
+  transray.o=Raypnt(&transray, EPSILON); /* avoid numerical precision bugs */
+  transray.maxdist = FHUGE;              /* take any intersection */
+  transray.scene=incident->scene;        /* global scenedef info */
+  col=trace(&transray);                  /* trace transmission ray */  
+
+  incident->serial = transray.serial;
+
+  ColorScale(&col, trans);
+
+  return col;
+}
+
+flt shade_phong(ray * incident, vector * hit, 
+  vector * N, vector * L, flt specpower){
+  vector H, V;
+  flt inten;
+
+  V = incident->d;
+  VScale(&V, -1.0);
+  VAdd(&V, L, &H);
+  VScale(&H, 0.5);   
+  VNorm(&H);
+  inten = VDot(N, &H);
+  if (inten > 0.0) 
+    inten = pow(inten, specpower);
+  else 
+    inten = 0.0;
+
+  return inten;
+} 
+
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/shade.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/shade.h
new file mode 100644 (file)
index 0000000..cc8fe7a
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * shade.h - This file contains declarations and definitions for the shader.
+ *
+ *  $Id: shade.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+void reset_lights(void);
+void add_light(point_light *);
+
+color shader(ray *);
+color shade_reflection(ray *, vector *, vector *, flt);
+color shade_transmission(ray *, vector *, flt);
+flt shade_phong(ray * incident, vector * hit, vector * N, vector * L, flt specpower);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/sphere.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/sphere.cpp
new file mode 100644 (file)
index 0000000..1816954
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * sphere.c - This file contains the functions for dealing with spheres.
+ *
+ *  $Id: sphere.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define SPHERE_PRIVATE
+#include "sphere.h"
+
+static object_methods sphere_methods = {
+  (void (*)(void *, void *))(sphere_intersect),
+  (void (*)(void *, void *, void *, void *))(sphere_normal),
+  sphere_bbox, 
+  free 
+};
+
+object * newsphere(void * tex, vector ctr, flt rad) {
+  sphere * s;
+  
+  s=(sphere *) rt_getmem(sizeof(sphere));
+  memset(s, 0, sizeof(sphere));
+  s->methods = &sphere_methods;
+
+  s->tex=(texture *)tex;
+  s->ctr=ctr;
+  s->rad=rad;
+
+  return (object *) s;
+}
+
+static int sphere_bbox(void * obj, vector * min, vector * max) {
+  sphere * s = (sphere *) obj;
+
+  min->x = s->ctr.x - s->rad;
+  min->y = s->ctr.y - s->rad;
+  min->z = s->ctr.z - s->rad;
+  max->x = s->ctr.x + s->rad;
+  max->y = s->ctr.y + s->rad;
+  max->z = s->ctr.z + s->rad;
+
+  return 1;
+}
+
+static void sphere_intersect(sphere * spr, ray * ry) {
+  flt b, disc, t1, t2, temp;
+  vector V;
+
+  VSUB(spr->ctr, ry->o, V);
+  VDOT(b, V, ry->d); 
+  VDOT(temp, V, V);  
+
+  disc=b*b + spr->rad*spr->rad - temp;
+
+  if (disc<=0.0) return;
+  disc=sqrt(disc);
+
+  t2=b+disc;
+  if (t2 <= SPEPSILON) 
+    return;
+  add_intersection(t2, (object *) spr, ry);  
+
+  t1=b-disc;
+  if (t1 > SPEPSILON) 
+    add_intersection(t1, (object *) spr, ry);  
+}
+
+static void sphere_normal(sphere * spr, vector * pnt, ray * incident, vector * N) {
+  VSub((vector *) pnt, &(spr->ctr), N);
+
+  VNorm(N);
+
+  if (VDot(N, &(incident->d)) > 0.0)  {
+    N->x=-N->x;
+    N->y=-N->y;
+    N->z=-N->z;
+  } 
+}
+
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/sphere.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/sphere.h
new file mode 100644 (file)
index 0000000..0056d01
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * sphere.h - This file contains the defines for spheres etc.
+ *
+ *  $Id: sphere.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+object * newsphere(void *, vector, flt);
+
+#ifdef SPHERE_PRIVATE
+
+typedef struct {
+  unsigned int id;                      /* Unique Object serial number    */
+  void * nextobj;                       /* pointer to next object in list */
+  object_methods * methods;             /* this object's methods          */
+  texture * tex;                        /* object texture                 */
+  vector ctr;
+  flt rad;
+} sphere;
+
+static int sphere_bbox(void * obj, vector * min, vector * max);
+static void sphere_intersect(sphere *, ray *);
+static void sphere_normal(sphere *, vector *, ray *, vector *);
+
+#endif /* SPHERE_PRIVATE */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/texture.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/texture.cpp
new file mode 100644 (file)
index 0000000..d8d931f
--- /dev/null
@@ -0,0 +1,395 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * texture.c - This file contains functions for implementing textures.
+ * 
+ *  $Id: texture.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $ 
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "texture.h"
+#include "coordsys.h"
+#include "imap.h"
+#include "vector.h"
+#include "box.h"
+
+/* plain vanilla texture solely based on object color */
+color standard_texture(vector * hit, texture * tex, ray * ry) {
+  return tex->col;
+}
+
+/* cylindrical image map */
+color image_cyl_texture(vector * hit, texture * tex, ray * ry) {
+  vector rh;
+  flt u,v;
+  rh.x=hit->x - tex->ctr.x;
+  rh.z=hit->y - tex->ctr.y;
+  rh.y=hit->z - tex->ctr.z;
+  xyztocyl(rh, 1.0, &u, &v);
+
+  u = u * tex->scale.x;  
+  u = u + tex->rot.x;
+  u=fmod(u, 1.0);
+  if (u < 0.0) u+=1.0; 
+
+  v = v * tex->scale.y; 
+  v = v + tex->rot.y;
+  v=fmod(v, 1.0);
+  if (v < 0.0) v+=1.0; 
+
+  return ImageMap((rawimage *)tex->img, u, v); 
+}  
+
+/* spherical image map */
+color image_sphere_texture(vector * hit, texture * tex, ray * ry) {
+  vector rh;
+  flt u,v;
+  rh.x=hit->x - tex->ctr.x;
+  rh.y=hit->y - tex->ctr.y;
+  rh.z=hit->z - tex->ctr.z;
+  xyztospr(rh, &u, &v);
+
+  u = u * tex->scale.x;
+  u = u + tex->rot.x;
+  u=fmod(u, 1.0);
+  if (u < 0.0) u+=1.0;
+  v = v * tex->scale.y;
+  v = v + tex->rot.y;
+  v=fmod(v, 1.0);
+  if (v < 0.0) v+=1.0;
+  return ImageMap((rawimage *)tex->img, u, v);
+}
+
+/* planar image map */
+color image_plane_texture(vector * hit, texture * tex, ray * ry) {
+  vector pnt;
+  flt u,v;
+  pnt.x=hit->x - tex->ctr.x;
+  pnt.y=hit->y - tex->ctr.y;
+  pnt.z=hit->z - tex->ctr.z;
+
+  VDOT(u, tex->uaxs, pnt);
+/*  VDOT(len, tex->uaxs, tex->uaxs);
+  u = u / sqrt(len); */
+
+  VDOT(v, tex->vaxs, pnt); 
+/*  VDOT(len, tex->vaxs, tex->vaxs);
+  v = v / sqrt(len); */
+    
+
+  u = u * tex->scale.x;
+  u = u + tex->rot.x;
+  u = fmod(u, 1.0);
+  if (u < 0.0) u += 1.0;
+
+  v = v * tex->scale.y;
+  v = v + tex->rot.y;
+  v = fmod(v, 1.0);
+  if (v < 0.0) v += 1.0;
+
+  return ImageMap((rawimage *)tex->img, u, v);
+}
+
+color grit_texture(vector * hit, texture * tex, ray * ry) {
+  int rnum;
+  flt fnum;
+  color col;
+
+  rnum=rand() % 4096;
+  fnum=(rnum / 4096.0 * 0.2) + 0.8;
+
+  col.r=tex->col.r * fnum;
+  col.g=tex->col.g * fnum;
+  col.b=tex->col.b * fnum;
+
+  return col;
+}
+
+color checker_texture(vector * hit, texture * tex, ray * ry) {
+  long x,y,z;
+  flt xh,yh,zh;
+  color col;
+
+  xh=hit->x - tex->ctr.x; 
+  x=(long) ((fabs(xh) * 3) + 0.5);
+  x=x % 2;
+  yh=hit->y - tex->ctr.y;
+  y=(long) ((fabs(yh) * 3) + 0.5);
+  y=y % 2;
+  zh=hit->z - tex->ctr.z;
+  z=(long) ((fabs(zh) * 3) + 0.5);
+  z=z % 2;
+
+  if (((x + y + z) % 2)==1) {
+    col.r=1.0;
+    col.g=0.2;
+    col.b=0.0;
+  }
+  else {
+    col.r=0.0;
+    col.g=0.2;
+    col.b=1.0;
+  }
+
+  return col;
+}
+
+color cyl_checker_texture(vector * hit, texture * tex, ray * ry) {
+  long x,y;
+  vector rh;
+  flt u,v;
+  color col;
+  rh.x=hit->x - tex->ctr.x;
+  rh.y=hit->y - tex->ctr.y;
+  rh.z=hit->z - tex->ctr.z;
+
+  xyztocyl(rh, 1.0, &u, &v); 
+
+  x=(long) (fabs(u) * 18.0);
+  x=x % 2;
+  y=(long) (fabs(v) * 10.0);
+  y=y % 2;
+  if (((x + y) % 2)==1) {
+    col.r=1.0;
+    col.g=0.2;
+    col.b=0.0;
+  }
+  else {
+    col.r=0.0;
+    col.g=0.2;
+    col.b=1.0;
+  }
+  return col;
+}
+
+
+color wood_texture(vector * hit, texture * tex, ray * ry) {
+  flt radius, angle;
+  int grain;
+  color col;
+  flt x,y,z;
+
+  x=(hit->x - tex->ctr.x) * 1000;
+  y=(hit->y - tex->ctr.y) * 1000;
+  z=(hit->z - tex->ctr.z) * 1000;
+
+  radius=sqrt(x*x + z*z);
+  if (z == 0.0) 
+    angle=3.1415926/2.0;
+  else 
+    angle=atan(x / z);
+
+  radius=radius + 3.0 * sin(20 * angle + y / 150.0);
+  grain=((int) (radius + 0.5)) % 60;
+  if (grain < 40) {
+    col.r=0.8;
+    col.g=1.0;
+    col.b=0.2;
+  }
+  else {
+    col.r=0.0;
+    col.g=0.0;
+    col.b=0.0;
+  }     
+
+  return col;
+} 
+
+
+
+#define NMAX 28
+short int NoiseMatrix[NMAX][NMAX][NMAX];
+
+void InitNoise(void) {
+  byte x,y,z,i,j,k;
+
+  for (x=0; x<NMAX; x++) {
+    for (y=0; y<NMAX; y++) {
+      for (z=0; z<NMAX; z++) {
+        NoiseMatrix[x][y][z]=rand() % 12000;
+
+        if (x==NMAX-1) i=0; 
+        else i=x;
+
+        if (y==NMAX-1) j=0;
+        else j=y;
+
+        if (z==NMAX-1) k=0;
+        else k=z;
+
+        NoiseMatrix[x][y][z]=NoiseMatrix[i][j][k];
+      }
+    }
+  }
+}
+
+int Noise(flt x, flt y, flt z) {
+  byte ix, iy, iz;
+  flt ox, oy, oz;
+  int p000, p001, p010, p011;
+  int p100, p101, p110, p111;
+  int p00, p01, p10, p11;
+  int p0, p1;
+  int d00, d01, d10, d11;
+  int d0, d1, d;
+
+  x=fabs(x);
+  y=fabs(y);
+  z=fabs(z);
+
+  ix=((int) x) % (NMAX-1);
+  iy=((int) y) % (NMAX-1);
+  iz=((int) z) % (NMAX-1);
+
+  ox=(x - ((int) x));
+  oy=(y - ((int) y));
+  oz=(z - ((int) z));
+
+  p000=NoiseMatrix[ix][iy][iz];
+  p001=NoiseMatrix[ix][iy][iz+1];
+  p010=NoiseMatrix[ix][iy+1][iz];
+  p011=NoiseMatrix[ix][iy+1][iz+1];
+  p100=NoiseMatrix[ix+1][iy][iz];
+  p101=NoiseMatrix[ix+1][iy][iz+1];
+  p110=NoiseMatrix[ix+1][iy+1][iz];
+  p111=NoiseMatrix[ix+1][iy+1][iz+1];
+
+  d00=p100-p000;
+  d01=p101-p001;
+  d10=p110-p010;
+  d11=p111-p011;
+
+  p00=(int) ((int) d00*ox) + p000;
+  p01=(int) ((int) d01*ox) + p001;
+  p10=(int) ((int) d10*ox) + p010;
+  p11=(int) ((int) d11*ox) + p011;
+  d0=p10-p00;
+  d1=p11-p01;
+  p0=(int) ((int) d0*oy) + p00;
+  p1=(int) ((int) d1*oy) + p01;
+  d=p1-p0;
+
+  return (int) ((int) d*oz) + p0;
+}
+
+color marble_texture(vector * hit, texture * tex, ray * ry) {
+  flt i,d;
+  flt x,y,z;
+  color col;
+  x=hit->x;
+  y=hit->y; 
+  z=hit->z;
+
+  x=x * 1.0;
+
+  d=x + 0.0006 * Noise(x, (y * 1.0), (z * 1.0));
+  d=d*(((int) d) % 25);
+  i=0.0 + 0.10 * fabs(d - 10.0 - 20.0 * ((int) d * 0.05));
+  if (i > 1.0) i=1.0;
+  if (i < 0.0) i=0.0;  
+
+/*
+  col.r=i * tex->col.r;
+  col.g=i * tex->col.g;
+  col.b=i * tex->col.b;
+*/
+
+  col.r = (1.0 + sin(i * 6.28)) / 2.0;
+  col.g = (1.0 + sin(i * 16.28)) / 2.0;
+  col.b = (1.0 + cos(i * 30.28)) / 2.0;
+
+  return col;      
+}
+
+
+color gnoise_texture(vector * hit, texture * tex, ray * ry) {
+  color col;
+  flt f;
+
+  f=Noise((hit->x - tex->ctr.x), 
+          (hit->y - tex->ctr.y), 
+         (hit->z - tex->ctr.z));
+
+  if (f < 0.01) f=0.01;
+  if (f > 1.0) f=1.0;
+
+  col.r=tex->col.r * f;
+  col.g=tex->col.g * f;
+  col.b=tex->col.b * f;
+
+  return col;
+}
+
+void InitTextures(void) {
+  InitNoise();
+  ResetImages();
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/texture.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/texture.h
new file mode 100644 (file)
index 0000000..1abfa44
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * texture.h This file contains all of the includes and defines for the texture 
+ * mapping part of the shader.
+ *
+ *  $Id: texture.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+void InitTextures(void);
+color     standard_texture(vector *, texture *, ray *);
+color    image_cyl_texture(vector *, texture *, ray *);
+color image_sphere_texture(vector *, texture *, ray *);
+color  image_plane_texture(vector *, texture *, ray *);
+color      checker_texture(vector *, texture *, ray *);
+color  cyl_checker_texture(vector *, texture *, ray *);
+color         grit_texture(vector *, texture *, ray *);
+color         wood_texture(vector *, texture *, ray *);
+color       marble_texture(vector *, texture *, ray *);
+color       gnoise_texture(vector *, texture *, ray *);
+int Noise(flt, flt, flt);
+void InitTextures(void);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/tgafile.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/tgafile.cpp
new file mode 100644 (file)
index 0000000..99d0aa9
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * tgafile.c - This file contains the code to write 24 bit targa files...
+ *
+ *  $Id: tgafile.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "util.h"
+#include "ui.h"
+#include "imageio.h"
+#include "tgafile.h"
+
+void createtgafile(char *name, unsigned short width, unsigned short height) {
+  int filesize;
+  FILE * ofp;
+
+  filesize = 3*width*height + 18 - 10;
+  
+  if (name==NULL) 
+    exit(1);
+  else {
+    ofp=fopen(name, "w+b");
+    if (ofp == NULL) {
+      char msgtxt[2048];
+      sprintf(msgtxt, "Cannot create %s for output!", name);
+      rt_ui_message(MSG_ERR, msgtxt);
+      rt_ui_message(MSG_ABORT, "Rendering Aborted.");
+      exit(1);
+    } 
+
+    fputc(0, ofp); /* IdLength      */
+    fputc(0, ofp); /* ColorMapType  */
+    fputc(2, ofp); /* ImageTypeCode */
+    fputc(0, ofp); /* ColorMapOrigin, low byte */
+    fputc(0, ofp); /* ColorMapOrigin, high byte */
+    fputc(0, ofp); /* ColorMapLength, low byte */
+    fputc(0, ofp); /* ColorMapLength, high byte */
+    fputc(0, ofp); /* ColorMapEntrySize */
+    fputc(0, ofp); /* XOrigin, low byte */
+    fputc(0, ofp); /* XOrigin, high byte */
+    fputc(0, ofp); /* YOrigin, low byte */
+    fputc(0, ofp); /* YOrigin, high byte */
+    fputc((width & 0xff),         ofp); /* Width, low byte */
+    fputc(((width >> 8) & 0xff),  ofp); /* Width, high byte */
+    fputc((height & 0xff),        ofp); /* Height, low byte */
+    fputc(((height >> 8) & 0xff), ofp); /* Height, high byte */
+    fputc(24, ofp);   /* ImagePixelSize */
+    fputc(0x20, ofp); /* ImageDescriptorByte 0x20 == flip vertically */
+
+    fseek(ofp, filesize, 0);
+    fprintf(ofp, "9876543210"); 
+
+    fclose(ofp);
+  } 
+}    
+
+void * opentgafile(char * filename) {
+  FILE * ofp;
+
+  ofp=fopen(filename, "r+b");
+  if (ofp == NULL) {
+    char msgtxt[2048];
+    sprintf(msgtxt, "Cannot open %s for output!", filename);
+    rt_ui_message(MSG_ERR, msgtxt);
+    rt_ui_message(MSG_ABORT, "Rendering Aborted.");
+    exit(1);
+  } 
+
+  return ofp;
+} 
+
+void writetgaregion(void * voidofp, 
+                    int iwidth, int iheight,
+                    int startx, int starty, 
+                    int stopx, int stopy, char * buffer) {
+  int y, totalx, totaly;
+  char * bufpos;
+  int filepos, numbytes;
+  FILE * ofp = (FILE *) voidofp;
+  totalx = stopx - startx + 1;
+  totaly = stopy - starty + 1;
+
+  for (y=0; y<totaly; y++) {
+    bufpos=buffer + (totalx*3)*(totaly-y-1);
+    filepos=18 + iwidth*3*(iheight - starty - totaly + y + 1) + (startx - 1)*3; 
+
+    if (filepos >= 18) {
+      fseek(ofp, filepos, 0); 
+      numbytes = fwrite(bufpos, 3, totalx, ofp);
+
+      if (numbytes != totalx) {
+        char msgtxt[256];
+       sprintf(msgtxt, "File write problem, %d bytes written.", numbytes);  
+        rt_ui_message(MSG_ERR, msgtxt);
+      }
+    }
+    else {
+      rt_ui_message(MSG_ERR, "writetgaregion: file ptr out of range!!!\n");
+      return;  /* don't try to continue */
+    }
+  }
+}
+
+
+int readtga(char * name, int * xres, int * yres, unsigned char **imgdata) {
+  int format, width, height, w1, w2, h1, h2, depth, flags;
+  int imgsize, bytesread, i, tmp;
+  FILE * ifp;
+
+  ifp=fopen(name, "r");  
+  if (ifp==NULL) {
+    return IMAGEBADFILE; /* couldn't open the file */
+  }
+
+  /* read the targa header */
+  getc(ifp); /* ID length */
+  getc(ifp); /* colormap type */
+  format = getc(ifp); /* image type */
+  getc(ifp); /* color map origin */
+  getc(ifp); /* color map origin */
+  getc(ifp); /* color map length */
+  getc(ifp); /* color map length */
+  getc(ifp); /* color map entry size */
+  getc(ifp); /* x origin */
+  getc(ifp); /* x origin */
+  getc(ifp); /* y origin */
+  getc(ifp); /* y origin */
+  w1 = getc(ifp); /* width (low) */
+  w2 = getc(ifp); /* width (hi) */
+  h1 = getc(ifp); /* height (low) */
+  h2 = getc(ifp); /* height (hi) */
+  depth = getc(ifp); /* image pixel size */
+  flags = getc(ifp); /* image descriptor byte */
+
+  if ((format != 2) || (depth != 24)) {
+    fclose(ifp);
+    return IMAGEUNSUP; /* unsupported targa format */
+  }
+    
+
+  width = ((w2 << 8) | w1);
+  height = ((h2 << 8) | h1);
+
+  imgsize = 3 * width * height;
+  *imgdata = (unsigned char *)rt_getmem(imgsize);
+  bytesread = fread(*imgdata, 1, imgsize, ifp);
+  fclose(ifp);
+
+  /* flip image vertically */
+  if (flags == 0x20) {
+    int rowsize = 3 * width;
+    unsigned char * copytmp;
+
+    copytmp = (unsigned char *)malloc(rowsize);
+
+    for (i=0; i<height / 2; i++) {
+      memcpy(copytmp, &((*imgdata)[rowsize*i]), rowsize);
+      memcpy(&(*imgdata)[rowsize*i], &(*imgdata)[rowsize*(height - 1 - i)], rowsize);
+      memcpy(&(*imgdata)[rowsize*(height - 1 - i)], copytmp, rowsize);
+    }
+
+    free(copytmp);       
+  }
+
+
+  /* convert from BGR order to RGB order */
+  for (i=0; i<imgsize; i+=3) {
+    tmp = (*imgdata)[i]; /* Blue */
+    (*imgdata)[i] = (*imgdata)[i+2]; /* Red */
+    (*imgdata)[i+2] = tmp; /* Blue */    
+  }
+
+  *xres = width;
+  *yres = height;
+
+  if (bytesread != imgsize) 
+    return IMAGEREADERR;
+
+  return IMAGENOERR;
+}
+
+
+
+
+
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/tgafile.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/tgafile.h
new file mode 100644 (file)
index 0000000..78c7c9a
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * tgafile.h - this file contains defines and structures for tgafile.c
+ *
+ *  $Id: tgafile.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+/* declare other functions */
+void createtgafile(char *, unsigned short, unsigned short);
+void * opentgafile(char *);
+void writetgaregion(void *, int, int, int, int, int, int, char *);
+
+int readtga(char * name, int * xres, int * yres, unsigned char **imgdata);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace.h
new file mode 100644 (file)
index 0000000..1afc930
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * trace.h - This file contains the declarations and defines for the trace module
+ *
+ *   $Id: trace.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+extern char *global_buffer;
+
+typedef struct {
+        int tid;
+        int nthr;
+        scenedef scene;
+        char * buffer;
+        int startx;
+        int stopx;
+        int starty;
+        int stopy;
+        } thr_parms;
+
+typedef struct {
+        int startx;
+        int stopx;
+        int starty;
+        int stopy;
+        } patch;
+
+typedef struct {
+       void * tga;
+       int iwidth;
+       int iheight;
+       int startx;
+       int starty;
+       int stopx;
+       int stopy;
+       char * buffer;
+       } thr_io_parms;
+
+color trace(ray *);
+
+void * thread_trace(thr_parms * parms);
+
+void thread_trace1(thr_parms *, patch *, int depth); 
+void thread_trace2(thr_parms *, patch *); 
+
+void * thread_io(void *);
+
+void trace_shm(scenedef, /*char *,*/ int, int, int, int);
+
+void trace_region(scenedef, void *, int, int, int, int);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace.serial.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace.serial.cpp
new file mode 100644 (file)
index 0000000..613e090
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "tgafile.h"
+#include "trace.h"
+#include "light.h"
+#include "shade.h"
+#include "camera.h"
+#include "util.h"
+#include "intersect.h"
+#include "global.h"
+#include "ui.h"
+#include "video.h"
+
+// shared but read-only so could be private too
+static thr_parms *all_parms;
+static scenedef scene;
+static int startx;
+static int stopx;
+static int starty;
+static int stopy;
+static flt jitterscale;
+static int totaly;
+
+static color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,
+                                 int startx, int stopx, int starty, int stopy)
+{
+    /* private vars moved inside loop */
+    ray primary, sample;
+    color col, avcol;
+    int R,G,B;
+    intersectstruct local_intersections;    
+    int alias;
+    /* end private */
+
+    primary=camray(&scene, x, y);
+    primary.intstruct = &local_intersections;
+    primary.flags = RT_RAY_REGULAR;
+
+    serial++;
+    primary.serial = serial;  
+    primary.mbox = local_mbox;
+    primary.maxdist = FHUGE;
+    primary.scene = &scene;
+    col=trace(&primary);  
+
+    serial = primary.serial;
+
+    /* perform antialiasing if enabled.. */
+    if (scene.antialiasing > 0) {
+        for (alias=0; alias < scene.antialiasing; alias++) {
+
+            serial++; /* increment serial number */
+            sample=primary;  /* copy the regular primary ray to start with */
+            sample.serial = serial; 
+
+            {
+                sample.d.x+=((std::rand() % 100) - 50) / jitterscale;
+                sample.d.y+=((std::rand() % 100) - 50) / jitterscale;
+                sample.d.z+=((std::rand() % 100) - 50) / jitterscale;
+            }
+
+            avcol=trace(&sample);  
+
+            serial = sample.serial; /* update our overall serial # */
+
+            col.r += avcol.r;
+            col.g += avcol.g;
+            col.b += avcol.b;
+        }
+
+        col.r /= (scene.antialiasing + 1.0);
+        col.g /= (scene.antialiasing + 1.0);
+        col.b /= (scene.antialiasing + 1.0);
+    }
+
+    /* Handle overexposure and underexposure here... */
+    R=(int) (col.r*255);
+    if (R > 255) R = 255;
+    else if (R < 0) R = 0;
+
+    G=(int) (col.g*255);
+    if (G > 255) G = 255;
+    else if (G < 0) G = 0;
+
+    B=(int) (col.b*255);
+    if (B > 255) B = 255;
+    else if (B < 0) B = 0;
+
+    return video->get_color(R, G, B);
+
+}
+
+static void parallel_thread (void)
+{
+    // thread-local storage
+    unsigned int serial = 1;
+    unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);
+    unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);
+    memset(local_mbox,0,mboxsize);
+
+    for (int y = starty; y < stopy; y++) { {
+        drawing_area drawing(startx, totaly-y, stopx-startx, 1);
+        for (int x = startx; x < stopx; x++) {
+            color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);
+            drawing.put_pixel(c);
+        } }
+        if(!video->next_frame()) return;
+    }
+}
+
+void * thread_trace(thr_parms * parms)
+{
+    // shared but read-only so could be private too
+    all_parms = parms;
+    scene = parms->scene;
+    startx = parms->startx;
+    stopx = parms->stopx;
+    starty = parms->starty;
+    stopy = parms->stopy;
+    jitterscale = 40.0*(scene.hres + scene.vres);
+    totaly = parms->scene.vres-1;
+
+    parallel_thread ();
+
+    return(NULL);  
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace.tbb.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace.tbb.cpp
new file mode 100644 (file)
index 0000000..095a9c2
--- /dev/null
@@ -0,0 +1,207 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "tgafile.h"
+#include "trace.h"
+#include "light.h"
+#include "shade.h"
+#include "camera.h"
+#include "util.h"
+#include "intersect.h"
+#include "global.h"
+#include "ui.h"
+#include "video.h"
+
+// shared but read-only so could be private too
+static thr_parms *all_parms;
+static scenedef scene;
+static int startx;
+static int stopx;
+static int starty;
+static int stopy;
+static flt jitterscale;
+static int totaly;
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/blocked_range2d.h"
+
+static tbb::spin_mutex MyMutex, MyMutex2;
+
+static color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,
+                                 int startx, int stopx, int starty, int stopy)
+{
+    /* private vars moved inside loop */
+    ray primary, sample;
+    color col, avcol;
+    int R,G,B;
+    intersectstruct local_intersections;    
+    int alias;
+    /* end private */
+
+    primary=camray(&scene, x, y);
+    primary.intstruct = &local_intersections;
+    primary.flags = RT_RAY_REGULAR;
+
+    serial++;
+    primary.serial = serial;  
+    primary.mbox = local_mbox;
+    primary.maxdist = FHUGE;
+    primary.scene = &scene;
+    col=trace(&primary);  
+
+    serial = primary.serial;
+
+    /* perform antialiasing if enabled.. */
+    if (scene.antialiasing > 0) {
+        for (alias=0; alias < scene.antialiasing; alias++) {
+
+            serial++; /* increment serial number */
+            sample=primary;  /* copy the regular primary ray to start with */
+            sample.serial = serial; 
+
+            {
+                tbb::spin_mutex::scoped_lock lock (MyMutex);
+                sample.d.x+=((rand() % 100) - 50) / jitterscale;
+                sample.d.y+=((rand() % 100) - 50) / jitterscale;
+                sample.d.z+=((rand() % 100) - 50) / jitterscale;
+            }
+
+            avcol=trace(&sample);  
+
+            serial = sample.serial; /* update our overall serial # */
+
+            col.r += avcol.r;
+            col.g += avcol.g;
+            col.b += avcol.b;
+        }
+
+        col.r /= (scene.antialiasing + 1.0);
+        col.g /= (scene.antialiasing + 1.0);
+        col.b /= (scene.antialiasing + 1.0);
+    }
+
+    /* Handle overexposure and underexposure here... */
+    R=(int) (col.r*255);
+    if (R > 255) R = 255;
+    else if (R < 0) R = 0;
+
+    G=(int) (col.g*255);
+    if (G > 255) G = 255;
+    else if (G < 0) G = 0;
+
+    B=(int) (col.b*255);
+    if (B > 255) B = 255;
+    else if (B < 0) B = 0;
+
+    return video->get_color(R, G, B);
+}
+
+class parallel_task {
+public:
+    void operator() (const tbb::blocked_range2d<int> &r) const
+    {
+        // task-local storage
+        unsigned int serial = 1;
+        unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);
+        unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);
+        memset(local_mbox,0,mboxsize);
+        if(video->next_frame())
+        {
+            drawing_area drawing(r.cols().begin(), totaly-r.rows().end(), r.cols().end() - r.cols().begin(), r.rows().end()-r.rows().begin());
+            for (int i = 1, y = r.rows().begin(); y != r.rows().end(); ++y, i++) {
+                drawing.set_pos(0, drawing.size_y-i);
+                for (int x = r.cols().begin(); x != r.cols().end(); x++) {
+                    color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);
+                    drawing.put_pixel(c);
+                }
+            }
+        }
+    }
+
+    parallel_task () {}
+};
+
+void * thread_trace(thr_parms * parms)
+{
+    int n, nthreads = tbb::task_scheduler_init::automatic;
+    char *nthreads_str = getenv ("TBB_NUM_THREADS");
+    if (nthreads_str && (sscanf (nthreads_str, "%d", &n) > 0) && (n > 0)) nthreads = n;
+    tbb::task_scheduler_init init (nthreads);
+
+    // shared but read-only so could be private too
+    all_parms = parms;
+    scene = parms->scene;
+    startx = parms->startx;
+    stopx = parms->stopx;
+    starty = parms->starty;
+    stopy = parms->stopy;
+    jitterscale = 40.0*(scene.hres + scene.vres);
+    totaly = parms->scene.vres;
+
+    int g, grain_size = 50;
+    char *grain_str = getenv ("TBB_GRAINSIZE");
+    if (grain_str && (sscanf (grain_str, "%d", &g) > 0) && (g > 0)) grain_size = g;
+    tbb::parallel_for (tbb::blocked_range2d<int> (starty, stopy, grain_size, startx, stopx, grain_size), parallel_task (), tbb::simple_partitioner());
+
+    return(NULL);  
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace.tbb1d.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace.tbb1d.cpp
new file mode 100644 (file)
index 0000000..aacb9c7
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "tgafile.h"
+#include "trace.h"
+#include "light.h"
+#include "shade.h"
+#include "camera.h"
+#include "util.h"
+#include "intersect.h"
+#include "global.h"
+#include "ui.h"
+#include "video.h"
+
+// shared but read-only so could be private too
+static thr_parms *all_parms;
+static scenedef scene;
+static int startx;
+static int stopx;
+static int starty;
+static int stopy;
+static flt jitterscale;
+static int totaly;
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/blocked_range.h"
+
+static tbb::spin_mutex MyMutex, MyMutex2;
+
+static color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,
+                                 int startx, int stopx, int starty, int stopy)
+{
+    /* private vars moved inside loop */
+    ray primary, sample;
+    color col, avcol;
+    int R,G,B;
+    intersectstruct local_intersections;    
+    int alias;
+    /* end private */
+
+    primary=camray(&scene, x, y);
+    primary.intstruct = &local_intersections;
+    primary.flags = RT_RAY_REGULAR;
+
+    serial++;
+    primary.serial = serial;  
+    primary.mbox = local_mbox;
+    primary.maxdist = FHUGE;
+    primary.scene = &scene;
+    col=trace(&primary);  
+
+    serial = primary.serial;
+
+    /* perform antialiasing if enabled.. */
+    if (scene.antialiasing > 0) {
+        for (alias=0; alias < scene.antialiasing; alias++) {
+
+            serial++; /* increment serial number */
+            sample=primary;  /* copy the regular primary ray to start with */
+            sample.serial = serial; 
+
+            {
+                tbb::spin_mutex::scoped_lock lock (MyMutex);
+                sample.d.x+=((rand() % 100) - 50) / jitterscale;
+                sample.d.y+=((rand() % 100) - 50) / jitterscale;
+                sample.d.z+=((rand() % 100) - 50) / jitterscale;
+            }
+
+            avcol=trace(&sample);  
+
+            serial = sample.serial; /* update our overall serial # */
+
+            col.r += avcol.r;
+            col.g += avcol.g;
+            col.b += avcol.b;
+        }
+
+        col.r /= (scene.antialiasing + 1.0);
+        col.g /= (scene.antialiasing + 1.0);
+        col.b /= (scene.antialiasing + 1.0);
+    }
+
+    /* Handle overexposure and underexposure here... */
+    R=(int) (col.r*255);
+    if (R > 255) R = 255;
+    else if (R < 0) R = 0;
+
+    G=(int) (col.g*255);
+    if (G > 255) G = 255;
+    else if (G < 0) G = 0;
+
+    B=(int) (col.b*255);
+    if (B > 255) B = 255;
+    else if (B < 0) B = 0;
+
+    return video->get_color(R, G, B);
+
+}
+
+class parallel_task {
+public:
+    void operator() (const tbb::blocked_range<int> &r) const
+    {
+        // task-local storage
+        unsigned int serial = 1;
+        unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);
+        unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);
+        memset(local_mbox,0,mboxsize);
+
+        for (int y = r.begin(); y != r.end(); ++y) { {
+            drawing_area drawing(startx, totaly-y, stopx-startx, 1);
+            for (int x = startx; x < stopx; x++) {
+                color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);
+                drawing.put_pixel(c);
+            } }
+            if(!video->next_frame()) return;
+        }
+    }
+
+    parallel_task () {}
+};
+
+void * thread_trace(thr_parms * parms)
+{
+    int n, nthreads = tbb::task_scheduler_init::automatic;
+    char *nthreads_str = getenv ("TBB_NUM_THREADS");
+    if (nthreads_str && (sscanf (nthreads_str, "%d", &n) > 0) && (n > 0)) nthreads = n;
+    tbb::task_scheduler_init init (nthreads);
+
+    // shared but read-only so could be private too
+    all_parms = parms;
+    scene = parms->scene;
+    startx = parms->startx;
+    stopx = parms->stopx;
+    starty = parms->starty;
+    stopy = parms->stopy;
+    jitterscale = 40.0*(scene.hres + scene.vres);
+    totaly = parms->scene.vres-1;
+
+    int g, grain_size = 50;
+    char *grain_str = getenv ("TBB_GRAINSIZE");
+    if (grain_str && (sscanf (grain_str, "%d", &g) > 0) && (g > 0)) grain_size = g;
+  
+    // Uses the preview feature: auto_partitioner.
+    // Note that no grainsize is provided to the blocked_range object.
+    tbb::parallel_for (tbb::blocked_range<int> (starty, stopy), parallel_task (), tbb::auto_partitioner() );
+
+    return(NULL);  
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace_rest.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/trace_rest.cpp
new file mode 100644 (file)
index 0000000..c3b7f73
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * trace.c - This file contains the functions for firing primary rays
+ *           and handling subsequent calculations
+ *
+ *   $Id: trace_rest.cpp,v 1.4 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "tgafile.h"
+#include "trace.h"
+#include "light.h"
+#include "shade.h"
+#include "camera.h"
+#include "util.h"
+#include "intersect.h"
+#include "global.h"
+#include "ui.h"
+#include "video.h"
+
+color trace(ray * primary) {
+  if (primary->depth > 0) {
+    VNorm(&primary->d);
+    reset_intersection(primary->intstruct);
+    intersect_objects(primary);
+    return shader(primary);
+  }
+
+  /* if ray is truncated, return the background as its color */
+  return primary->scene->background;
+}
+
+void * thread_io(void * parms) {
+  thr_io_parms p;
+
+  p= *((thr_io_parms *) parms);
+  writetgaregion(p.tga, p.iwidth, p.iheight, p.startx, p.starty, 
+               p.stopx, p.stopy, p.buffer);
+  free(p.buffer); /* free the buffer once we are done with it.. */
+  free(parms);
+
+  return(NULL);
+}
+
+void trace_shm(scenedef scene, /*char * buffer,  */ int startx, int stopx, int starty, int stopy) {
+
+  thr_parms * parms;
+
+  parms = (thr_parms *) rt_getmem(sizeof(thr_parms));  
+
+  parms->tid=0;
+  parms->nthr=1;
+  parms->scene=scene;
+  parms->startx=startx;
+  parms->stopx=stopx;
+  parms->starty=starty;
+  parms->stopy=stopy;
+
+  thread_trace(parms);
+
+  rt_freemem(parms);
+}
+
+void trace_region(scenedef scene, void * tga, int startx, int starty, int stopx, int stopy) {
+
+  if (scene.verbosemode) {
+    char msgtxt[2048];
+    sprintf(msgtxt, "Node %3d tracing region  %4d, %4d  --->  %4d, %4d \n", 0, startx,starty,stopx,stopy);
+    rt_ui_message(MSG_0, msgtxt);
+  }
+
+  trace_shm(scene, /*buffer,*/ startx, stopx, starty, stopy);
+/* not used now
+  writetgaregion(tga, scene.hres, scene.vres, 
+                 startx, starty, stopx, stopy, global_buffer);
+
+  if (scene.rawimage != NULL) {
+    int x, y;
+    int totalx = stopx - startx + 1;
+    for (y=starty; y<=stopy; y++) {
+      for (x=0; x<scene.hres; x++) {
+        scene.rawimage[(scene.vres-y)*scene.hres*3 + x*3] = global_buffer[(y-starty)*totalx*3 + x*3 + 2];
+        scene.rawimage[(scene.vres-y)*scene.hres*3 + x*3 +1] = global_buffer[(y-starty)*totalx*3 + x*3 + 1];
+        scene.rawimage[(scene.vres-y)*scene.hres*3 + x*3 +2] = global_buffer[(y-starty)*totalx*3 + x*3];
+      }
+    }
+  }
+*/
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/triangle.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/triangle.cpp
new file mode 100644 (file)
index 0000000..9a9ffbb
--- /dev/null
@@ -0,0 +1,255 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * triangle.c - This file contains the functions for dealing with triangles.
+ *
+ *  $Id: triangle.cpp,v 1.3 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+#include "machine.h"
+#include "types.h"
+#include "vector.h"
+#include "macros.h"
+#include "intersect.h"
+#include "util.h"
+
+#define TRIANGLE_PRIVATE
+#include "triangle.h"
+
+static object_methods tri_methods = {
+  (void (*)(void *, void *))(tri_intersect),
+  (void (*)(void *, void *, void *, void *))(tri_normal),
+  tri_bbox, 
+  free 
+};
+
+static object_methods stri_methods = {
+  (void (*)(void *, void *))(tri_intersect),
+  (void (*)(void *, void *, void *, void *))(stri_normal),
+  tri_bbox, 
+  free 
+};
+
+object * newtri(void * tex, vector v0, vector v1, vector v2) {
+  tri * t;
+  vector edge1, edge2, edge3;
+
+  VSub(&v1, &v0, &edge1);
+  VSub(&v2, &v0, &edge2);
+  VSub(&v2, &v1, &edge3);
+
+  /* check to see if this will be a degenerate triangle before creation */
+  if ((VLength(&edge1) >= EPSILON) && 
+      (VLength(&edge2) >= EPSILON) && 
+      (VLength(&edge3) >= EPSILON)) {
+
+    t=(tri *) rt_getmem(sizeof(tri));
+
+    t->nextobj = NULL;
+    t->methods = &tri_methods;
+
+    t->tex = (texture *)tex;
+    t->v0 = v0;
+    t->edge1 = edge1;
+    t->edge2 = edge2;
+    return (object *) t;
+  }
+  
+  return NULL; /* was a degenerate triangle */
+}
+
+
+object * newstri(void * tex, vector v0, vector v1, vector v2,
+                           vector n0, vector n1, vector n2) {
+  stri * t;
+  vector edge1, edge2, edge3;
+
+  VSub(&v1, &v0, &edge1);
+  VSub(&v2, &v0, &edge2);
+  VSub(&v2, &v1, &edge3);
+
+  /* check to see if this will be a degenerate triangle before creation */
+  if ((VLength(&edge1) >= EPSILON) && 
+      (VLength(&edge2) >= EPSILON) &&
+      (VLength(&edge3) >= EPSILON)) {
+
+    t=(stri *) rt_getmem(sizeof(stri));
+
+    t->nextobj = NULL;
+    t->methods = &stri_methods;
+    t->tex = (texture *)tex;
+    t->v0 = v0;
+    t->edge1 = edge1;
+    t->edge2 = edge2;
+    t->n0 = n0;
+    t->n1 = n1;
+    t->n2 = n2;
+
+    return (object *) t;
+  }
+
+  return NULL; /* was a degenerate triangle */
+}
+
+#define CROSS(dest,v1,v2) \
+          dest.x=v1.y*v2.z-v1.z*v2.y; \
+          dest.y=v1.z*v2.x-v1.x*v2.z; \
+          dest.z=v1.x*v2.y-v1.y*v2.x;
+
+#define DOT(v1,v2) (v1.x*v2.x+v1.y*v2.y+v1.z*v2.z)
+
+#define SUB(dest,v1,v2) \
+          dest.x=v1.x-v2.x; \
+          dest.y=v1.y-v2.y; \
+          dest.z=v1.z-v2.z;
+
+static int tri_bbox(void * obj, vector * min, vector * max) {
+  tri * t = (tri *) obj;
+  vector v1, v2;
+
+  VAdd(&t->v0, &t->edge1, &v1); 
+  VAdd(&t->v0, &t->edge2, &v2); 
+
+  min->x = MYMIN( t->v0.x , MYMIN( v1.x , v2.x ));
+  min->y = MYMIN( t->v0.y , MYMIN( v1.y , v2.y ));
+  min->z = MYMIN( t->v0.z , MYMIN( v1.z , v2.z ));
+
+  max->x = MYMAX( t->v0.x , MYMAX( v1.x , v2.x ));
+  max->y = MYMAX( t->v0.y , MYMAX( v1.y , v2.y ));
+  max->z = MYMAX( t->v0.z , MYMAX( v1.z , v2.z ));
+
+  return 1;
+}
+
+static void tri_intersect(tri * trn, ray * ry) {
+  vector tvec, pvec, qvec;
+  flt det, inv_det, t, u, v;
+
+  /* begin calculating determinant - also used to calculate U parameter */
+  CROSS(pvec, ry->d, trn->edge2);
+
+  /* if determinant is near zero, ray lies in plane of triangle */
+  det = DOT(trn->edge1, pvec);
+
+   if (det > -EPSILON && det < EPSILON)
+     return;
+
+   inv_det = 1.0 / det;
+
+   /* calculate distance from vert0 to ray origin */
+   SUB(tvec, ry->o, trn->v0);
+
+   /* calculate U parameter and test bounds */
+   u = DOT(tvec, pvec) * inv_det;
+   if (u < 0.0 || u > 1.0)
+     return;
+
+   /* prepare to test V parameter */
+   CROSS(qvec, tvec, trn->edge1);
+
+   /* calculate V parameter and test bounds */
+   v = DOT(ry->d, qvec) * inv_det;
+   if (v < 0.0 || u + v > 1.0)
+     return;
+
+   /* calculate t, ray intersects triangle */
+   t = DOT(trn->edge2, qvec) * inv_det;
+
+  add_intersection(t,(object *) trn, ry);
+}
+
+
+static void tri_normal(tri * trn, vector  * pnt, ray * incident, vector * N) {
+
+  CROSS((*N), trn->edge1, trn->edge2);
+
+  VNorm(N);
+
+  if (VDot(N, &(incident->d)) > 0.0)  {
+    N->x=-N->x;
+    N->y=-N->y;
+    N->z=-N->z;
+  }
+}
+
+static void stri_normal(stri * trn, vector  * pnt, ray * incident, vector * N) {
+  flt U, V, W, lensqr;
+  vector P, tmp, norm;
+  
+  CROSS(norm, trn->edge1, trn->edge2);
+  lensqr = DOT(norm, norm); 
+
+  VSUB((*pnt), trn->v0, P);
+
+  CROSS(tmp, P, trn->edge2);
+  U = DOT(tmp, norm) / lensqr;   
+
+  CROSS(tmp, trn->edge1, P);
+  V = DOT(tmp, norm) / lensqr;   
+
+  W = 1.0 - (U + V);
+
+  N->x = W*trn->n0.x + U*trn->n1.x + V*trn->n2.x;
+  N->y = W*trn->n0.y + U*trn->n1.y + V*trn->n2.y;
+  N->z = W*trn->n0.z + U*trn->n1.z + V*trn->n2.z;
+
+  VNorm(N);
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/triangle.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/triangle.h
new file mode 100644 (file)
index 0000000..ec536fc
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * triangle.h - This file contains the defines for triangles etc.
+ *
+ *  $Id: triangle.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+object * newtri(void *, vector, vector, vector);
+object * newstri(void *, vector, vector, vector, vector, vector, vector);
+
+#ifdef TRIANGLE_PRIVATE
+
+#define TRIXMAJOR 0
+#define TRIYMAJOR 1
+#define TRIZMAJOR 2
+typedef struct {
+  unsigned int id;                      /* Unique Object serial number    */
+  void * nextobj;                       /* pointer to next object in list */
+  object_methods * methods;             /* this object's methods          */
+  texture * tex;                        /* object texture                 */
+  vector edge2;
+  vector edge1;
+  vector v0;
+} tri; 
+
+typedef struct {
+  unsigned int id;                      /* Unique Object serial number    */
+  void * nextobj;                       /* pointer to next object in list */
+  object_methods * methods;             /* this object's methods          */
+  texture * tex;                        /* object texture                 */
+  vector edge2;
+  vector edge1;
+  vector v0;
+  vector n0;
+  vector n1;
+  vector n2;
+} stri; 
+
+static int tri_bbox(void * obj, vector * min, vector * max);
+
+static void tri_intersect(tri *, ray *);
+
+static void tri_normal(tri *, vector *, ray *, vector *);
+static void stri_normal(stri *, vector *, ray *, vector *);
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/types.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/types.h
new file mode 100644 (file)
index 0000000..4685acc
--- /dev/null
@@ -0,0 +1,234 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+#if __MINGW32__
+#include <malloc.h>
+#elif _WIN32
+#include <malloc.h>
+#define alloca _alloca
+#elif __FreeBSD__
+#include <stdlib.h>
+#else
+#include <alloca.h>
+#endif
+
+/* 
+ * types.h - This file contains all of the type definitions for the raytracer
+ *
+ *  $Id: types.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+#define MAXOCTNODES 25       /* subdivide octants /w > # of children */
+#define SPEPSILON 0.000001   /* amount to crawl down a ray           */
+#define EPSILON   0.000001   /* amount to crawl down a ray           */
+#define TWOPI 6.2831853      /* guess                                */
+#define FHUGE 1e18           /* biggest fp number we can represent   */
+
+/* Maximum internal table sizes */
+/* Use prime numbers for best memory system performance */
+#define INTTBSIZE 1024       /* maximum intersections we can hold    */ 
+#define MAXLIGHTS 39         /* maximum number of lights in a scene  */
+#define MAXIMGS   39         /* maxiumum number of distinct images   */
+#define RPCQSIZE  113       /* number of RPC messages to queue      */
+
+/* Parameter values for rt_boundmode() */
+#define RT_BOUNDING_DISABLED 0  /* spatial subdivision/bounding disabled */
+#define RT_BOUNDING_ENABLED  1  /* spatial subdivision/bounding enabled  */
+
+/* Parameter values for rt_displaymode() */
+#define RT_DISPLAY_DISABLED  0  /* video output enabled  */
+#define RT_DISPLAY_ENABLED   1  /* video output disabled */
+
+/* Ray flags */
+#define RT_RAY_REGULAR   1
+#define RT_RAY_SHADOW    2
+#define RT_RAY_BOUNDED   4
+#define RT_RAY_FINISHED  8
+
+#ifdef USESINGLEFLT
+typedef float flt;   /* generic floating point number, using float */
+#else
+typedef double flt;  /* generic floating point number, using double */
+#endif
+
+typedef unsigned char byte; /* 1 byte */
+typedef signed int word;    /* 32 bit integer */
+
+typedef struct {
+   flt x;        /* X coordinate value */
+   flt y;        /* Y coordinate value */
+   flt z;        /* Z coordinate value */
+} vector;
+
+typedef struct {
+   flt r;        /* Red component   */
+   flt g;        /* Green component */
+   flt b;        /* Blue component  */
+} color;
+
+typedef struct {
+   byte r;       /* Red component   */
+   byte g;       /* Green component */
+   byte b;       /* Blue component  */
+} bytecolor;
+
+typedef struct {         /* Raw 24 bit image structure, for tga, ppm etc */
+  int loaded;            /* image memory residence flag    */
+  int xres;              /* image X axis size              */
+  int yres;              /* image Y axis size              */
+  int bpp;               /* image bits per pixel           */
+  char name[96];         /* image filename (with path)     */
+  unsigned char * data;  /* pointer to raw byte image data */
+} rawimage;
+
+typedef struct {         /* Scalar Volume Data */
+  int loaded;            /* Volume data memory residence flag */
+  int xres;             /* volume X axis size                */
+  int yres;             /* volume Y axis size                */
+  int zres;             /* volume Z axis size                */
+  flt opacity;          /* opacity per unit length           */
+  char name[96];         /* Volume data filename              */
+  unsigned char * data;  /* pointer to raw byte volume data   */
+} scalarvol;
+typedef struct {
+  color (* texfunc)(void *, void *, void *);
+  int shadowcast;  /* does the object cast a shadow */
+  int islight;    /* light flag... */
+  color col;       /* base object color */
+  flt ambient;     /* ambient lighting */
+  flt diffuse;            /* diffuse reflection */
+  flt phong;       /* phong specular highlights */
+  flt phongexp;    /* phong exponent/shininess factor */
+  int phongtype;   /* phong type: 0 == plastic, nonzero == metal */
+  flt specular;    /* specular reflection */
+  flt opacity;     /* how opaque the object is */ 
+  vector ctr;      /* origin of texture */
+  vector rot;      /* rotation of texture about origin */
+  vector scale;    /* scale of texture in x,y,z */
+  vector uaxs;    /* planar map U axis */
+  vector vaxs;    /* planar map V axis */
+  void * img;      /* pointer to image for image mapping */
+  void * obj;      /* object ptr, hack for volume shaders for now */
+} texture;
+
+typedef struct {
+  void (* intersect)(void *, void *);              /* intersection func ptr  */
+  void (* normal)(void *, void *, void *, void *); /* normal function ptr    */
+  int (* bbox)(void *, vector *, vector *);        /* return the object bbox */
+  void (* free)(void *);                           /* free the object        */
+} object_methods;
+typedef struct {
+  unsigned int id;                      /* Unique Object serial number    */
+  void * nextobj;                       /* pointer to next object in list */ 
+  object_methods * methods;             /* this object's methods          */
+  texture * tex;                        /* object texture                 */
+} object; 
+
+typedef struct {
+  object * obj;  /* to object we hit                        */ 
+  flt t;         /* distance along the ray to the hit point */
+} intersection;
+
+typedef struct {
+  int num;                      /* number of intersections    */
+  intersection closest;         /* closest intersection > 0.0 */
+  intersection list[INTTBSIZE]; /* list of all intersections  */ 
+} intersectstruct;
+
+typedef struct {
+  char outfilename[200];     /* name of the output image                */
+  unsigned char * rawimage;  /* pointer to a raw rgb image to be stored */
+  int hres;                  /* horizontal output image resolution      */
+  int vres;                  /* vertical output image resolution        */
+  flt aspectratio;           /* aspect ratio of output image            */
+  int raydepth;              /* maximum recursion depth                 */
+  int antialiasing;          /* number of antialiasing rays to fire     */
+  int verbosemode;           /* verbose reporting flag                  */
+  int boundmode;             /* automatic spatial subdivision flag      */
+  int boundthresh;           /* threshold number of subobjects          */
+  int displaymode;           /* run-time X11 display flag               */
+  vector camcent;            /* center of the camera in world coords    */
+  vector camviewvec;         /* view direction of the camera  (Z axis)  */
+  vector camrightvec;        /* right axis for the camera     (X axis)  */
+  vector camupvec;           /* up axis for the camera        (Y axis)  */
+  flt camzoom;               /* zoom factor for the camera              */
+  color background;          /* scene background color                  */
+} scenedef;
+
+typedef struct {
+   intersectstruct * intstruct; /* ptr to thread's intersection data       */ 
+   unsigned int depth;   /* levels left to recurse.. (maxdepth - curdepth) */
+   unsigned int flags;   /* ray flags, any special treatment needed etc    */
+   unsigned int serial;  /* serial number of the ray                       */
+   unsigned int * mbox;  /* mailbox array for optimizing intersections     */
+   vector o;             /* origin of the ray X,Y,Z                        */
+   vector d;             /* normalized direction of the ray                */
+   flt maxdist;          /* maximum distance to search for intersections   */
+   vector s;            /* startpoint of the ray (may differ from origin  */
+   vector e;             /* endpoint of the ray if bounded                 */
+   scenedef * scene;     /* pointer to the scene, for global parms such as */
+                         /* background colors etc                          */
+} ray;
+
+typedef struct {
+  int type;      /* RPC call type            */
+  int from;      /* Sending processor        */
+  int len;       /* length of parms in bytes */
+  void * parms;  /* Parameters to RPC        */
+} rpcmsg;
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ui.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ui.cpp
new file mode 100644 (file)
index 0000000..0c24231
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * ui.c - Contains functions for dealing with user interfaces
+ *
+ *  $Id: ui.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "util.h"
+#include "ui.h"
+
+static void (* rt_static_ui_message) (int, const char *) = NULL;
+static void (* rt_static_ui_progress) (int) = NULL;
+static int (* rt_static_ui_checkaction) (void) = NULL;
+
+void set_rt_ui_message(void (* func) (int, const char *)) {
+  rt_static_ui_message = func;
+}
+
+void set_rt_ui_progress(void (* func) (int)) {
+  rt_static_ui_progress = func;
+}
+
+void rt_ui_message(int level, const char * msg) {
+  if (rt_static_ui_message == NULL) {
+    fprintf(stderr, "%s\n", msg);
+    fflush (stderr);
+  } else {
+    rt_static_ui_message(level, msg);
+  }
+}
+
+void rt_ui_progress(int percent) {
+  if (rt_static_ui_progress != NULL)
+    rt_static_ui_progress(percent);
+  else {
+    fprintf(stderr, "\r %3d%% Complete            \r", percent);
+    fflush(stderr);
+  }
+}
+
+int rt_ui_checkaction(void) {
+  if (rt_static_ui_checkaction != NULL) 
+    return rt_static_ui_checkaction();
+  else
+    return 0;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ui.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/ui.h
new file mode 100644 (file)
index 0000000..07a63c8
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * ui.h - defines for user interface functions
+ *
+ *  $Id: ui.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ */
+
+/* Different types of message, for levels of verbosity etc */
+#define MSG_0      100
+#define MSG_1      101
+#define MSG_2      102
+#define MSG_3      103
+#define MSG_4      104
+#define MSG_5      105
+#define MSG_ERR    200
+#define MSG_ABORT  300
+
+void rt_ui_message(int, const char *);
+void rt_ui_progress(int);
+int  rt_ui_checkaction(void);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/util.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/util.cpp
new file mode 100644 (file)
index 0000000..518d960
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * util.c - Contains all of the timing functions for various platforms.
+ *
+ *  $Id: util.cpp,v 1.6 2007-02-22 18:17:51 amalakho Exp $ 
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "util.h"
+#include "light.h"
+#include "global.h"
+#include "ui.h"
+
+void rt_finalize(void);
+
+#ifndef _WIN32
+#include <sys/time.h>
+#include <unistd.h>
+
+void rt_sleep(int msec) {
+    usleep(msec*1000);
+}
+
+#else //_WIN32
+
+#undef OLDUNIXTIME
+#undef STDTIME
+
+#include <windows.h>
+
+void rt_sleep(int msec) {
+    Sleep(msec);
+}
+
+DWORD starttime;
+DWORD stoptime;
+
+void timerstart(void) {
+    starttime = GetTickCount ();
+}
+
+void timerstop(void) {
+    stoptime = GetTickCount ();
+}
+
+flt timertime(void) {
+   double ttime, start, end;
+
+   start = ((double) starttime) / ((double) 1000.00);
+     end = ((double) stoptime) / ((double) 1000.00);
+   ttime = end - start;
+
+   return ttime;
+}
+#endif  /*  _WIN32  */
+
+/* if we're on a Unix with gettimeofday() we'll use newer timers */
+#ifdef STDTIME 
+  struct timeval starttime, endtime;
+  struct timezone tz;
+void timerstart(void) {
+  gettimeofday(&starttime, &tz);
+} 
+  
+void timerstop(void) {
+  gettimeofday(&endtime, &tz);
+} 
+  
+flt timertime(void) {
+   double ttime, start, end;
+
+   start = (starttime.tv_sec+1.0*starttime.tv_usec / 1000000.0);
+     end = (endtime.tv_sec+1.0*endtime.tv_usec / 1000000.0);
+   ttime = end - start;
+
+   return ttime;
+}  
+#endif  /*  STDTIME  */
+
+
+
+/* use the old fashioned Unix time functions */
+#ifdef OLDUNIXTIME
+time_t starttime;
+time_t stoptime;
+
+void timerstart(void) {
+  starttime=time(NULL);
+}
+
+void timerstop(void) {
+  stoptime=time(NULL);
+}
+
+flt timertime(void) {
+  flt a;
+  a = difftime(stoptime, starttime);
+  return a;
+}
+#endif  /*  OLDUNIXTIME  */
+
+
+
+/* random other helper utility functions */
+int rt_meminuse(void) {
+  return rt_mem_in_use;
+}  
+
+void * rt_getmem(unsigned int bytes) {
+  void * mem;
+
+  mem=malloc( bytes );
+  if (mem!=NULL) { 
+    rt_mem_in_use += bytes;
+  } 
+  else {
+    rtbomb("No more memory!!!!");
+  }
+  return mem;
+}
+
+unsigned int rt_freemem(void * addr) {
+  unsigned int bytes;
+
+  free(addr);
+
+  bytes=0;
+  rt_mem_in_use -= bytes; 
+  return bytes;
+}
+
+void rtbomb(const char * msg) {
+    rt_ui_message(MSG_ERR, msg);
+    rt_ui_message(MSG_ABORT, "Rendering Aborted.");
+
+  rt_finalize();
+  exit(1);
+}
+
+void rtmesg(const char * msg) {
+    rt_ui_message(MSG_0, msg);
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/util.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/util.h
new file mode 100644 (file)
index 0000000..a00889f
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * util.h - This file contains defines for the timer functions...
+ *
+ *  $Id: util.h,v 1.3 2007-02-22 17:54:17 dpoulsen Exp $
+ */
+
+void timerstart(void);
+void timerstop(void);
+flt timertime(void);
+void rt_sleep(int);
+int rt_meminuse(void);
+void * rt_getmem(unsigned int);
+unsigned int rt_freemem(void *); 
+void rtbomb(const char *);
+void rtmesg(const char *);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/vector.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/vector.cpp
new file mode 100644 (file)
index 0000000..b4d1fad
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/* 
+ * vector.c - This file contains all of the vector arithmetic functions.
+ *
+ *  $Id: vector.cpp,v 1.2 2007-02-22 17:54:17 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+
+flt VDot(vector *a, vector *b) {
+  return (a->x*b->x + a->y*b->y + a->z*b->z);
+}
+
+void VCross(vector * a, vector * b, vector * c) {
+  c->x = (a->y * b->z) - (a->z * b->y);
+  c->y = (a->z * b->x) - (a->x * b->z);
+  c->z = (a->x * b->y) - (a->y * b->x);
+}
+
+flt VLength(vector * a) {
+  return (flt) sqrt((a->x * a->x) + (a->y * a->y) + (a->z * a->z));
+}
+
+void VNorm(vector * a) {
+  flt len;
+
+  len=sqrt((a->x * a->x) + (a->y * a->y) + (a->z * a->z));
+  if (len != 0.0) {
+    a->x /= len;
+    a->y /= len;
+    a->z /= len;
+  }
+}
+
+void VAdd(vector * a, vector * b, vector * c) {
+  c->x = (a->x + b->x);
+  c->y = (a->y + b->y);
+  c->z = (a->z + b->z);
+}
+    
+void VSub(vector * a, vector * b, vector * c) {
+  c->x = (a->x - b->x);
+  c->y = (a->y - b->y);
+  c->z = (a->z - b->z);
+}
+
+void VAddS(flt a, vector * A, vector * B, vector * C) {
+  C->x = (a * A->x) + B->x;
+  C->y = (a * A->y) + B->y;
+  C->z = (a * A->z) + B->z;
+}
+
+vector Raypnt(ray * a, flt t) {
+  vector temp;
+
+  temp.x=a->o.x + (a->d.x * t);
+  temp.y=a->o.y + (a->d.y * t);
+  temp.z=a->o.z + (a->d.z * t);
+
+  return temp;
+}
+
+void VScale(vector * a, flt s) {
+  a->x *= s;
+  a->y *= s;
+  a->z *= s;
+}
+
+void ColorAddS(color * a, color * b, flt s) {
+  a->r += b->r * s;
+  a->g += b->g * s;
+  a->b += b->b * s;
+}
+
+void ColorAccum(color * a, color * b) {
+  a->r += b->r;
+  a->g += b->g;
+  a->b += b->b;
+}
+
+void ColorScale(color * a, flt s) {
+  a->r *= s;
+  a->g *= s;
+  a->b *= s;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/vector.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/vector.h
new file mode 100644 (file)
index 0000000..fddf584
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * vector.h - This file contains declarations of vector functions
+ *
+ *  $Id: vector.h,v 1.2 2007-02-22 17:54:17 dpoulsen Exp $
+ */
+
+flt VDot(vector *, vector *);
+void VCross(vector *, vector *, vector *);
+flt VLength(vector *);
+void VNorm(vector *);
+void VAdd(vector *, vector *, vector *);
+void VSub(vector *, vector *, vector *);
+void VAddS(flt, vector *, vector *, vector *);
+vector Raypnt(ray *, flt);
+void VScale(vector * a, flt s); 
+
+void ColorAddS(color * a, color * b, flt s); 
+void ColorAccum(color * a, color * b); 
+void ColorScale(color * a, flt s); 
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/video.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/video.cpp
new file mode 100644 (file)
index 0000000..4eed93d
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * video.c - routines for putting pixels on a screen if one is available.
+ *
+ *  $Id: video.cpp,v 1.20 2007-02-28 18:35:22 amalakho Exp $
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define VIDEO_WINMAIN_ARGS
+#include "types.h"
+#include "api.h"       /* The ray tracing library API */
+#include "getargs.h"   /* command line argument/option parsing */
+#include "parse.h"     /* Support for my own file format */
+#include "ui.h"
+#include "util.h"
+#include "video.h"
+
+static SceneHandle global_scene;
+static int global_xsize;     /*  size of graphic image rendered in window (from hres, vres)  */
+static int global_ysize;
+static int global_xwinsize;  /*  size of window (may be larger than above)  */
+static int global_ywinsize;
+static char *global_window_title;
+static bool global_usegraphics;
+
+static char *window_title_string (int argc, char **argv)
+{
+    int i;
+    char *name;
+
+    name = (char *) malloc (8192);
+    
+    if(strrchr(argv[0], '\\')) strcpy (name, strrchr(argv[0], '\\')+1);
+    else if(strrchr(argv[0], '/')) strcpy (name, strrchr(argv[0], '/')+1);
+    else strcpy (name, *argv[0]?argv[0]:"Tachyon");
+    for (i = 1; i < argc; i++) {
+        strcat (name, " ");
+        strcat (name, argv[i]);
+    }
+#ifdef _DEBUG
+    strcat (name, " (DEBUG BUILD)");
+#endif
+    return name;
+}
+
+static int main_init_parts (int argc, char **argv)
+{
+    int rc;
+    argoptions opt;
+    char * filename;
+
+    global_window_title = window_title_string (argc, argv);
+
+    global_scene = rt_newscene();
+
+    rt_initialize(&argc, &argv);
+
+    if ((rc = getargs(argc, argv, &opt)) == -1) {
+#if _WIN32||_WIN64
+        rt_sleep(10000);
+#endif
+        exit(rc);
+    }
+
+#ifdef DEFAULT_MODELFILE
+#if  _WIN32||_WIN64
+#define _GLUE_FILENAME(x) "..\\dat\\" #x
+#else
+#define _GLUE_FILENAME(x) #x
+#endif
+#define GLUE_FILENAME(x) _GLUE_FILENAME(x)
+    if(opt.foundfilename == -1)
+        filename = GLUE_FILENAME(DEFAULT_MODELFILE);
+    else
+#endif//DEFAULT_MODELFILE
+        filename = opt.filename;
+
+    rc = readmodel(filename, global_scene);
+
+    if (rc != 0) {
+        fprintf(stderr, "Parser returned a non-zero error code reading %s\n", filename);
+        fprintf(stderr, "Aborting Render...\n");
+        rt_finalize();
+        return -1;
+    }
+
+    /* process command line overrides */
+    useoptions(&opt, global_scene);
+
+    // need these early for create_graphics_window() so grab these here...
+    scenedef *scene = (scenedef *) global_scene;
+    global_xsize = scene->hres;
+    global_ysize = scene->vres;
+    global_xwinsize = global_xsize;
+    global_ywinsize = global_ysize;  // add some here to leave extra blank space on bottom for status etc.
+    global_usegraphics = (scene->displaymode == RT_DISPLAY_ENABLED);
+
+    return 0;
+}
+
+class tachyon_video : public video
+{
+    void on_process()
+    {
+        char buf[128];
+        flt runtime;
+        timerstart();
+        rt_renderscene(global_scene);
+        timerstop();
+        runtime=timertime();
+        sprintf(buf, "\nCPU Time: %.3f seconds.", runtime);
+        rt_ui_message(MSG_0, buf); buf[0] = ' ';
+        strcat(global_window_title, buf);
+        title = global_window_title; updating = true;
+        show_title();
+        rt_finalize();
+    }
+    void on_key(int key) {
+        key &= 0xff; if(key == 27) running = false;
+    }
+};
+class video *video = 0;
+
+void rt_finalize(void) {
+    timerstart();
+    if(global_usegraphics)
+        do { rt_sleep(10); timerstop(); }
+        while(timertime() < 10 && video->next_frame());
+#ifdef _WINDOWS
+    else rt_sleep(10000);
+#endif
+}
+
+int main (int argc, char **argv)
+{
+    int rc;
+
+    tachyon_video tachyon;
+    tachyon.threaded = true;
+    tachyon.init_console();
+
+    rc = main_init_parts (argc, argv);
+    if (rc) return rc;
+
+    tachyon.title = global_window_title;
+    tachyon.updating = global_usegraphics;
+    // always using window even if(!global_usegraphics)
+    global_usegraphics = 
+        tachyon.init_window(global_xwinsize, global_ywinsize);
+    if(!tachyon.running)
+        return -1;
+
+    video = &tachyon;
+    tachyon.main_loop();
+
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/video.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/video.h
new file mode 100644 (file)
index 0000000..9bc633b
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+#include "../../../common/gui/video.h"
+extern class video *video;
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/vol.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/vol.cpp
new file mode 100644 (file)
index 0000000..6fe32e3
--- /dev/null
@@ -0,0 +1,312 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * vol.c - Volume rendering helper routines etc.
+ *
+ *
+ *  $Id: vol.cpp,v 1.3 2007-02-22 18:17:51 amalakho Exp $
+ */
+
+#include<stdio.h>
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "util.h"
+#include "vol.h"
+#include "box.h"
+#include "trace.h"
+#include "ui.h"
+#include "light.h"
+#include "shade.h"
+
+int scalarvol_bbox(void * obj, vector * min, vector * max) {
+  box * b = (box *) obj;
+
+  *min = b->min;
+  *max = b->max;
+
+  return 1;
+}
+
+void * newscalarvol(void * intex, vector min, vector max, 
+                    int xs, int ys, int zs, char * fname, scalarvol * invol) {
+  box * bx;
+  texture * tx, * tex;
+  scalarvol * vol;
+
+  tex=(texture *)intex;
+  tex->shadowcast = 0; /* doesn't cast a shadow */
+
+  tx=(texture *)rt_getmem(sizeof(texture));
+
+  /* is the volume data already loaded? */
+  if (invol==NULL) {
+    vol=(scalarvol *)rt_getmem(sizeof(scalarvol));
+    vol->loaded=0;
+    vol->data=NULL;
+  }
+  else
+    vol=invol;
+
+  vol->opacity=tex->opacity;
+  vol->xres=xs;
+  vol->yres=ys;
+  vol->zres=zs;
+  strcpy(vol->name, fname);
+
+  tx->ctr.x = 0.0;
+  tx->ctr.y = 0.0;
+  tx->ctr.z = 0.0;
+  tx->rot   = tx->ctr;
+  tx->scale = tx->ctr;
+  tx->uaxs  = tx->ctr;
+  tx->vaxs  = tx->ctr;
+
+  tx->islight = 0;
+  tx->shadowcast = 0; /* doesn't cast a shadow */
+
+  tx->col = tex->col;
+  tx->ambient  = 1.0;
+  tx->diffuse  = 0.0;
+  tx->specular = 0.0;
+  tx->opacity  = 1.0;
+  tx->img = vol;
+  tx->texfunc = (color(*)(void *, void *, void *))(scalar_volume_texture);
+
+  bx=newbox(tx, min, max);
+  tx->obj = (void *) bx; /* XXX hack! */
+
+  return (void *) bx;
+}
+
+
+color VoxelColor(flt scalar) {
+  color col;
+
+  if (scalar > 1.0) 
+    scalar = 1.0;
+
+  if (scalar < 0.0)
+    scalar = 0.0;
+
+  if (scalar < 0.25) {
+    col.r = scalar * 4.0;
+    col.g = 0.0;
+    col.b = 0.0;
+  }
+  else {
+    if (scalar < 0.75) {
+      col.r = 1.0;
+      col.g = (scalar - 0.25) * 2.0;
+      col.b = 0.0;
+    }
+    else {
+      col.r = 1.0;
+      col.g = 1.0;
+      col.b = (scalar - 0.75) * 4.0;
+    }
+  }
+
+  return col;
+} 
+
+color scalar_volume_texture(vector * hit, texture * tex, ray * ry) {
+  color col, col2;
+  box * bx;
+  flt a, tx1, tx2, ty1, ty2, tz1, tz2;
+  flt tnear, tfar;
+  flt t, tdist, dt, sum, tt; 
+  vector pnt, bln;
+  scalarvol * vol;
+  flt scalar, transval; 
+  int x, y, z;
+  unsigned char * ptr;
+
+  bx=(box *) tex->obj;
+  vol=(scalarvol *)bx->tex->img;
+   
+  col.r=0.0;
+  col.g=0.0;
+  col.b=0.0;
+  tnear= -FHUGE;
+  tfar= FHUGE;
+  if (ry->d.x == 0.0) {
+    if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return col;
+  }
+  else {
+    tx1 = (bx->min.x - ry->o.x) / ry->d.x;
+    tx2 = (bx->max.x - ry->o.x) / ry->d.x;
+    if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }
+    if (tx1 > tnear) tnear=tx1;
+    if (tx2 < tfar)   tfar=tx2;
+  }
+  if (tnear > tfar) return col;
+  if (tfar < 0.0) return col;
+ if (ry->d.y == 0.0) {
+    if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return col;
+  }
+  else {
+    ty1 = (bx->min.y - ry->o.y) / ry->d.y;
+    ty2 = (bx->max.y - ry->o.y) / ry->d.y;
+    if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }
+    if (ty1 > tnear) tnear=ty1;
+    if (ty2 < tfar)   tfar=ty2;
+  }
+  if (tnear > tfar) return col;
+  if (tfar < 0.0) return col;
+  if (ry->d.z == 0.0) {
+    if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return col;
+  }
+  else {
+    tz1 = (bx->min.z - ry->o.z) / ry->d.z;
+    tz2 = (bx->max.z - ry->o.z) / ry->d.z;
+    if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }
+    if (tz1 > tnear) tnear=tz1;
+    if (tz2 < tfar)   tfar=tz2;
+  }
+  if (tnear > tfar) return col;
+  if (tfar < 0.0) return col;
+  if (tnear < 0.0) tnear=0.0;
+  tdist=sqrt((flt) (vol->xres*vol->xres + vol->yres*vol->yres + vol->zres*vol->zres));
+  tt = (vol->opacity / tdist); 
+
+  bln.x=fabs(bx->min.x - bx->max.x);
+  bln.y=fabs(bx->min.y - bx->max.y);
+  bln.z=fabs(bx->min.z - bx->max.z);
+  
+  dt=sqrt(bln.x*bln.x + bln.y*bln.y + bln.z*bln.z) / tdist; 
+  sum=0.0;
+
+  /* move the volume residency check out of loop.. */
+  if (!vol->loaded) {
+    LoadVol(vol);
+    vol->loaded=1;
+  }
+  for (t=tnear; t<=tfar; t+=dt) {
+    pnt.x=((ry->o.x + (ry->d.x * t)) - bx->min.x) / bln.x;
+    pnt.y=((ry->o.y + (ry->d.y * t)) - bx->min.y) / bln.y;
+    pnt.z=((ry->o.z + (ry->d.z * t)) - bx->min.z) / bln.z;
+    x=(int) ((vol->xres - 1.5) * pnt.x + 0.5);
+    y=(int) ((vol->yres - 1.5) * pnt.y + 0.5);
+    z=(int) ((vol->zres - 1.5) * pnt.z + 0.5);
+   
+    ptr = vol->data + ((vol->xres * vol->yres * z) + (vol->xres * y) + x);
+   
+    scalar = (flt) ((flt) 1.0 * ((int) ptr[0])) / 255.0;
+
+    sum += tt * scalar; 
+
+    transval = tt * scalar; 
+
+    col2 = VoxelColor(scalar);
+
+    if (sum < 1.0) {
+      col.r += transval * col2.r;
+      col.g += transval * col2.g;
+      col.b += transval * col2.b;
+      if (sum < 0.0) sum=0.0;
+    }  
+    else { 
+      sum=1.0;
+    }
+  }
+
+  if (sum < 1.0) {      /* spawn transmission rays / refraction */    
+    color transcol;
+
+    transcol = shade_transmission(ry, hit, 1.0 - sum);
+
+    col.r += transcol.r; /* add the transmitted ray  */    
+    col.g += transcol.g; /* to the diffuse and       */
+    col.b += transcol.b; /* transmission total..     */  
+  }
+
+  return col;
+}
+
+void LoadVol(scalarvol * vol) { 
+  FILE * dfile;
+  int status;
+  char msgtxt[2048];
+  dfile=fopen(vol->name, "r");
+  if (dfile==NULL) {
+    char msgtxt[2048];
+    sprintf(msgtxt, "Vol: can't open %s for input!!! Aborting\n",vol->name); 
+    rt_ui_message(MSG_ERR, msgtxt);
+    rt_ui_message(MSG_ABORT, "Rendering Aborted.");
+    exit(1);
+  }  
+  sprintf(msgtxt, "loading %dx%dx%d volume set from %s",
+      vol->xres, vol->yres, vol->zres, vol->name);
+  rt_ui_message(MSG_0, msgtxt);
+
+  vol->data = (unsigned char *)rt_getmem(vol->xres * vol->yres * vol->zres);
+
+  status=fread(vol->data, 1, (vol->xres * vol->yres * vol->zres), dfile);
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/vol.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/src/vol.h
new file mode 100644 (file)
index 0000000..14083f5
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+    The original source for this example is
+    Copyright (c) 1994-2008 John E. Stone
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * vol.h - Volume rendering definitions etc.
+ *
+ *
+ *  $Id: vol.h,v 1.2 2007-02-22 17:54:17 dpoulsen Exp $
+ */
+
+
+void * newscalarvol(void * intex, vector min, vector max, 
+                    int xs, int ys, int zs, 
+                    char * fname, scalarvol * invol);
+
+void  LoadVol(scalarvol *);
+color scalar_volume_texture(vector *, texture *, ray *);
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/gui.ico b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/gui.ico
new file mode 100644 (file)
index 0000000..d551aa3
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/gui.ico differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/gui.rc b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/gui.rc
new file mode 100644 (file)
index 0000000..5a13d04
--- /dev/null
@@ -0,0 +1,90 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_GUI   ICON                    "gui.ico"
+IDI_SMALL               ICON                    "small.ico"
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE 
+BEGIN
+    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+    "#include ""windows.h""\r\n"
+    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE 
+BEGIN
+    IDS_APP_TITLE           "gui"
+    IDC_GUI   "GUI"
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/resource.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/resource.h
new file mode 100644 (file)
index 0000000..5f70f0c
--- /dev/null
@@ -0,0 +1,8 @@
+#define IDC_MYICON                      2
+#define IDD_GUI                        102
+#define IDS_APP_TITLE                   103
+#define IDI_GUI                        107
+#define IDI_SMALL                       108
+#define IDC_GUI                        109
+#define IDR_MAINFRAME                   128
+#define IDC_STATIC                      -1
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/small.ico b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/small.ico
new file mode 100644 (file)
index 0000000..d551aa3
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/small.ico differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.serial.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.serial.vcproj
new file mode 100644 (file)
index 0000000..9e9b7d6
--- /dev/null
@@ -0,0 +1,247 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="tachyon.serial"
+       ProjectGUID="{1D7176EE-63B6-48F2-AB83-FFAD2048C25D}"
+       RootNamespace="tachyon.serial"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="$(OutDir)/tachyon.common.lib"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="TRUE"
+                               ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories=""
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="$(OutDir)/tachyon.common.lib"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="TRUE"
+                               ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories=""
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="$(OutDir)/tachyon.common.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+                               GenerateDebugInformation="TRUE"
+                               ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="$(OutDir)/tachyon.common.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+                               GenerateDebugInformation="TRUE"
+                               ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+               <ProjectReference
+                       ReferencedProjectIdentifier="{1D7176EE-63B6-48F2-AB83-FFAD2149C25E}"
+                       Name="tachyon.common"/>
+       </References>
+       <Files>
+               <File
+                       RelativePath="..\src\trace.serial.cpp">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.sln
new file mode 100644 (file)
index 0000000..0dc481b
--- /dev/null
@@ -0,0 +1,63 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.common", "tachyon.vcproj", "{1D7176EE-63B6-48F2-AB83-FFAD2149C25E}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.serial", "tachyon.serial.vcproj", "{1D7176EE-63B6-48F2-AB83-FFAD2048C25D}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.tbb1d", "tachyon.tbb1d.vcproj", "{1D7176EE-63B6-48F2-AB83-FFAD2348C25D}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.tbb", "tachyon.tbb.vcproj", "{1D7176EE-63B6-48F2-AB83-FFAD2448C25D}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               DD Debug = DD Debug
+               DD Release = DD Release
+               GDI Debug = GDI Debug
+               GDI Release = GDI Release
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.DD Debug.ActiveCfg = DD Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.DD Debug.Build.0 = DD Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.DD Release.ActiveCfg = DD Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.DD Release.Build.0 = DD Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.GDI Debug.ActiveCfg = Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.GDI Debug.Build.0 = Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.GDI Release.ActiveCfg = Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.GDI Release.Build.0 = Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.DD Debug.ActiveCfg = DD Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.DD Debug.Build.0 = DD Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.DD Release.ActiveCfg = DD Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.DD Release.Build.0 = DD Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.GDI Debug.ActiveCfg = Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.GDI Debug.Build.0 = Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.GDI Release.ActiveCfg = Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.GDI Release.Build.0 = Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.DD Debug.ActiveCfg = DD Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.DD Debug.Build.0 = DD Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.DD Release.ActiveCfg = DD Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.DD Release.Build.0 = DD Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.GDI Debug.ActiveCfg = Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.GDI Debug.Build.0 = Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.GDI Release.ActiveCfg = Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.GDI Release.Build.0 = Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.DD Debug.ActiveCfg = DD Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.DD Debug.Build.0 = DD Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.DD Release.ActiveCfg = DD Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.DD Release.Build.0 = DD Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.GDI Debug.ActiveCfg = Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.GDI Debug.Build.0 = Debug|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.GDI Release.ActiveCfg = Release|Win32
+               {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.GDI Release.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.suo
new file mode 100644 (file)
index 0000000..ddc558f
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.tbb.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.tbb.vcproj
new file mode 100644 (file)
index 0000000..6afd836
--- /dev/null
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="tachyon.tbb"
+       ProjectGUID="{1D7176EE-63B6-48F2-AB83-FFAD2448C25D}"
+       RootNamespace="tachyon.tbb"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="TRUE"
+                               ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="TRUE"
+                               ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+               <ProjectReference
+                       ReferencedProjectIdentifier="{1D7176EE-63B6-48F2-AB83-FFAD2149C25E}"
+                       Name="tachyon.common"/>
+       </References>
+       <Files>
+               <File
+                       RelativePath="..\src\trace.tbb.cpp">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.tbb1d.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.tbb1d.vcproj
new file mode 100644 (file)
index 0000000..c342be1
--- /dev/null
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="tachyon.tbb1d"
+       ProjectGUID="{1D7176EE-63B6-48F2-AB83-FFAD2348C25D}"
+       RootNamespace="tachyon.tbb1d"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               SubSystem="2"
+                               GenerateDebugInformation="TRUE"
+                               ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               SubSystem="2"
+                               GenerateDebugInformation="TRUE"
+                               ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="TRUE"
+                               ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+                               SubSystem="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+               <ProjectReference
+                       ReferencedProjectIdentifier="{1D7176EE-63B6-48F2-AB83-FFAD2149C25E}"
+                       Name="tachyon.common"/>
+       </References>
+       <Files>
+               <File
+                       RelativePath="..\src\trace.tbb1d.cpp">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc7.1/tachyon.vcproj
new file mode 100644 (file)
index 0000000..28d5bc1
--- /dev/null
@@ -0,0 +1,494 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="tachyon.common"
+       ProjectGUID="{1D7176EE-63B6-48F2-AB83-FFAD2149C25E}"
+       RootNamespace="tachyon.common"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLibrarianTool"
+                               AdditionalOptions="/LTCG"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories=""
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLibrarianTool"
+                               AdditionalOptions="/LTCG"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLibrarianTool"
+                               AdditionalOptions="/LTCG"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="TRUE">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="TRUE"
+                               AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="TRUE"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLibrarianTool"
+                               AdditionalOptions="/LTCG"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\src\api.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\apigeom.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\apitrigeom.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\bndbox.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\box.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\camera.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\coordsys.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\cylinder.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\extvol.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\getargs.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\global.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\grid.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\imageio.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\imap.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\intersect.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\jpeg.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\light.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\objbound.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\parse.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\plane.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\ppm.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\pthread.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\quadric.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\render.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\ring.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\shade.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\sphere.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\texture.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\tgafile.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\trace_rest.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\triangle.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\ui.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\util.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\vector.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\video.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\src\vol.cpp">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+                       <File
+                               RelativePath="..\src\api.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\apitrigeom.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\bndbox.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\box.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\camera.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\coordsys.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\cylinder.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\extvol.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\getargs.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\global.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\grid.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\imageio.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\imap.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\intersect.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\jpeg.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\light.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\machine.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\macros.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\objbound.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\parse.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\plane.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\ppm.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\pthread.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\quadric.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\render.h">
+                       </File>
+                       <File
+                               RelativePath=".\resource.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\ring.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\shade.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\sphere.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\texture.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\tgafile.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\trace.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\triangle.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\types.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\ui.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\util.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\vector.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\video.h">
+                       </File>
+                       <File
+                               RelativePath="..\src\vol.h">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+                       <File
+                               RelativePath=".\gui.ico">
+                       </File>
+                       <File
+                               RelativePath=".\gui.rc">
+                       </File>
+                       <File
+                               RelativePath=".\small.ico">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Video Layer"
+                       Filter="">
+                       <File
+                               RelativePath="..\..\..\common\gui\ddvideo.cpp">
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\gdivideo.cpp">
+                               <FileConfiguration
+                                       Name="DD Release|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|Win32"
+                                       ExcludedFromBuild="TRUE">
+                                       <Tool
+                                               Name="VCCLCompilerTool"/>
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\video.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\winvideo.h">
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.serial.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.serial.vcproj
new file mode 100644 (file)
index 0000000..b59c8ba
--- /dev/null
@@ -0,0 +1,695 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="tachyon.serial"
+       ProjectGUID="{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}"
+       RootNamespace="tachyon.serial"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN64;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN64;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x64"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x64"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+               <ProjectReference
+                       ReferencedProjectIdentifier="{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+                       CopyLocal="false"
+                       CopyLocalDependencies="false"
+                       CopyLocalSatelliteAssemblies="false"
+                       RelativePathToProject=".\tachyon.vcproj"
+               />
+       </References>
+       <Files>
+               <File
+                       RelativePath="..\src\trace.serial.cpp"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.sln
new file mode 100644 (file)
index 0000000..6cf6081
--- /dev/null
@@ -0,0 +1,92 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.common", "tachyon.vcproj", "{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.serial", "tachyon.serial.vcproj", "{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.tbb1d", "tachyon.tbb1d.vcproj", "{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.tbb", "tachyon.tbb.vcproj", "{6E9B1702-78E0-4D64-B771-8B274D963B58}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               DD Debug|Win32 = DD Debug|Win32
+               DD Debug|x64 = DD Debug|x64
+               DD Release|Win32 = DD Release|Win32
+               DD Release|x64 = DD Release|x64
+               GDI Debug|Win32 = GDI Debug|Win32
+               GDI Debug|x64 = GDI Debug|x64
+               GDI Release|Win32 = GDI Release|Win32
+               GDI Release|x64 = GDI Release|x64
+               Description = Tachyon ray-tracer example
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.Build.0 = DD Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.ActiveCfg = DD Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.Build.0 = DD Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.ActiveCfg = DD Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.Build.0 = DD Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.ActiveCfg = DD Release|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.Build.0 = DD Release|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.Build.0 = Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.ActiveCfg = Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.Build.0 = Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Release|Win32.ActiveCfg = Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Release|Win32.Build.0 = Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Release|x64.ActiveCfg = Release|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Release|x64.Build.0 = Release|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.Build.0 = DD Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.ActiveCfg = DD Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.Build.0 = DD Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.ActiveCfg = DD Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.Build.0 = DD Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.ActiveCfg = DD Release|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.Build.0 = DD Release|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Release|Win32.ActiveCfg = Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Release|Win32.Build.0 = Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Release|x64.ActiveCfg = Release|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Release|x64.Build.0 = Release|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.Build.0 = DD Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.ActiveCfg = DD Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.Build.0 = DD Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.ActiveCfg = DD Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.Build.0 = DD Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.ActiveCfg = DD Release|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.Build.0 = DD Release|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Release|Win32.ActiveCfg = Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Release|Win32.Build.0 = Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Release|x64.ActiveCfg = Release|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Release|x64.Build.0 = Release|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.Build.0 = DD Debug|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.ActiveCfg = DD Debug|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.Build.0 = DD Debug|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.ActiveCfg = DD Release|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.Build.0 = DD Release|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.ActiveCfg = DD Release|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.Build.0 = DD Release|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.Build.0 = Debug|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.ActiveCfg = Debug|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.Build.0 = Debug|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Release|Win32.ActiveCfg = Release|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Release|Win32.Build.0 = Release|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Release|x64.ActiveCfg = Release|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.suo
new file mode 100644 (file)
index 0000000..2171ff9
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.tbb.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.tbb.vcproj
new file mode 100644 (file)
index 0000000..7a5c4e4
--- /dev/null
@@ -0,0 +1,731 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="tachyon.tbb"
+       ProjectGUID="{6E9B1702-78E0-4D64-B771-8B274D963B58}"
+       RootNamespace="tachyon.tbb"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+               <ProjectReference
+                       ReferencedProjectIdentifier="{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+                       CopyLocal="false"
+                       CopyLocalDependencies="false"
+                       CopyLocalSatelliteAssemblies="false"
+                       RelativePathToProject=".\tachyon.vcproj"
+               />
+       </References>
+       <Files>
+               <File
+                       RelativePath="..\src\trace.tbb.cpp"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.tbb1d.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.tbb1d.vcproj
new file mode 100644 (file)
index 0000000..2f7ede0
--- /dev/null
@@ -0,0 +1,731 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="tachyon.tbb1d"
+       ProjectGUID="{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}"
+       RootNamespace="tachyon.tbb1d"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc8\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+               <ProjectReference
+                       ReferencedProjectIdentifier="{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+                       CopyLocal="false"
+                       CopyLocalDependencies="false"
+                       CopyLocalSatelliteAssemblies="false"
+                       RelativePathToProject=".\tachyon.vcproj"
+               />
+       </References>
+       <Files>
+               <File
+                       RelativePath="..\src\trace.tbb1d.cpp"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc8/tachyon.vcproj
new file mode 100644 (file)
index 0000000..5f48b4b
--- /dev/null
@@ -0,0 +1,1042 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="tachyon.common"
+       ProjectGUID="{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+       RootNamespace="tachyon.common"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\src\api.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\apigeom.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\apitrigeom.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\bndbox.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\box.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\camera.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\coordsys.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\cylinder.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\extvol.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\getargs.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\global.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\grid.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\imageio.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\imap.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\intersect.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\jpeg.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\light.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\objbound.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\parse.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\plane.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\ppm.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\pthread.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\quadric.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\render.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\ring.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\shade.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\sphere.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\texture.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\tgafile.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\trace_rest.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\triangle.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\ui.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\util.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\vector.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\video.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\vol.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+                       <File
+                               RelativePath="..\src\api.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\apitrigeom.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\bndbox.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\box.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\camera.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\coordsys.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\cylinder.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\extvol.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\getargs.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\global.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\grid.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\imageio.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\imap.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\intersect.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\jpeg.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\light.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\machine.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\macros.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\objbound.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\parse.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\plane.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\ppm.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\pthread.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\quadric.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\render.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\vc7.1\resource.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\ring.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\shade.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\sphere.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\texture.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\tgafile.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\trace.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\triangle.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\types.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\ui.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\util.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\vector.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\video.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\vol.h"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+                       >
+                       <File
+                               RelativePath="..\vc7.1\gui.ico"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\vc7.1\gui.rc"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\vc7.1\small.ico"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Video Layer"
+                       >
+                       <File
+                               RelativePath="..\..\..\common\gui\ddvideo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Release|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+                                               PreprocessorDefinitions="_WINDOWS;NDEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Release|x64"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+                                               PreprocessorDefinitions="_WINDOWS;NDEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+                                               PreprocessorDefinitions="_WINDOWS;_DEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|x64"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+                                               PreprocessorDefinitions="_WINDOWS;_DEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\gdivideo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions="_WINDOWS;_DEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug|x64"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions="_WINDOWS;_DEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions="_WINDOWS;NDEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|x64"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions="_WINDOWS;NDEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Release|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Release|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\video.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\winvideo.h"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.serial.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.serial.vcproj
new file mode 100644 (file)
index 0000000..81b5843
--- /dev/null
@@ -0,0 +1,687 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="tachyon.serial"
+       ProjectGUID="{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}"
+       RootNamespace="tachyon.serial"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN64;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN64;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x64"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x64"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+               <ProjectReference
+                       ReferencedProjectIdentifier="{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+                       CopyLocal="false"
+                       CopyLocalDependencies="false"
+                       CopyLocalSatelliteAssemblies="false"
+               />
+       </References>
+       <Files>
+               <File
+                       RelativePath="..\src\trace.serial.cpp"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.sln
new file mode 100644 (file)
index 0000000..1b379e3
--- /dev/null
@@ -0,0 +1,92 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.common", "tachyon.vcproj", "{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.serial", "tachyon.serial.vcproj", "{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.tbb1d", "tachyon.tbb1d.vcproj", "{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.tbb", "tachyon.tbb.vcproj", "{6E9B1702-78E0-4D64-B771-8B274D963B58}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               DD Debug|Win32 = DD Debug|Win32
+               DD Debug|x64 = DD Debug|x64
+               DD Release|Win32 = DD Release|Win32
+               DD Release|x64 = DD Release|x64
+               GDI Debug|Win32 = GDI Debug|Win32
+               GDI Debug|x64 = GDI Debug|x64
+               GDI Release|Win32 = GDI Release|Win32
+               GDI Release|x64 = GDI Release|x64
+               Description = Tachyon ray-tracer example
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.Build.0 = DD Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.ActiveCfg = DD Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.Build.0 = DD Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.ActiveCfg = DD Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.Build.0 = DD Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.ActiveCfg = DD Release|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.Build.0 = DD Release|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.Build.0 = Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.ActiveCfg = Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.Build.0 = Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Release|Win32.ActiveCfg = Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Release|Win32.Build.0 = Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Release|x64.ActiveCfg = Release|x64
+               {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Release|x64.Build.0 = Release|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.Build.0 = DD Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.ActiveCfg = DD Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.Build.0 = DD Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.ActiveCfg = DD Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.Build.0 = DD Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.ActiveCfg = DD Release|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.Build.0 = DD Release|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Release|Win32.ActiveCfg = Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Release|Win32.Build.0 = Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Release|x64.ActiveCfg = Release|x64
+               {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Release|x64.Build.0 = Release|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.Build.0 = DD Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.ActiveCfg = DD Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.Build.0 = DD Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.ActiveCfg = DD Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.Build.0 = DD Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.ActiveCfg = DD Release|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.Build.0 = DD Release|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Release|Win32.ActiveCfg = Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Release|Win32.Build.0 = Release|Win32
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Release|x64.ActiveCfg = Release|x64
+               {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Release|x64.Build.0 = Release|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.Build.0 = DD Debug|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.ActiveCfg = DD Debug|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.Build.0 = DD Debug|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.ActiveCfg = DD Release|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.Build.0 = DD Release|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.ActiveCfg = DD Release|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.Build.0 = DD Release|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.Build.0 = Debug|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.ActiveCfg = Debug|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.Build.0 = Debug|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Release|Win32.ActiveCfg = Release|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Release|Win32.Build.0 = Release|Win32
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Release|x64.ActiveCfg = Release|x64
+               {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.suo
new file mode 100644 (file)
index 0000000..866286b
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.tbb.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.tbb.vcproj
new file mode 100644 (file)
index 0000000..a42ddfb
--- /dev/null
@@ -0,0 +1,723 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="tachyon.tbb"
+       ProjectGUID="{6E9B1702-78E0-4D64-B771-8B274D963B58}"
+       RootNamespace="tachyon.tbb"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+               <ProjectReference
+                       ReferencedProjectIdentifier="{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+                       CopyLocal="false"
+                       CopyLocalDependencies="false"
+                       CopyLocalSatelliteAssemblies="false"
+               />
+       </References>
+       <Files>
+               <File
+                       RelativePath="..\src\trace.tbb.cpp"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.tbb1d.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.tbb1d.vcproj
new file mode 100644 (file)
index 0000000..125feee
--- /dev/null
@@ -0,0 +1,723 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="tachyon.tbb1d"
+       ProjectGUID="{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}"
+       RootNamespace="tachyon.tbb1d"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot;&quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\ia32\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x86&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               EnableIntrinsicFunctions="true"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="&quot;$(TBB22_INSTALL_DIR)\intel64\vc9\lib&quot;;&quot;$(DXSDK_DIR)\lib\x64&quot;"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+               <ProjectReference
+                       ReferencedProjectIdentifier="{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+                       CopyLocal="false"
+                       CopyLocalDependencies="false"
+                       CopyLocalSatelliteAssemblies="false"
+               />
+       </References>
+       <Files>
+               <File
+                       RelativePath="..\src\trace.tbb1d.cpp"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/vc9/tachyon.vcproj
new file mode 100644 (file)
index 0000000..249b8ce
--- /dev/null
@@ -0,0 +1,1039 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="tachyon.common"
+       ProjectGUID="{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+       RootNamespace="tachyon.common"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               EnableEnhancedInstructionSet="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="DD Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="2"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine="..\..\..\common\gui\dxcheck.bat"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               FavorSizeOrSpeed="1"
+                               OmitFramePointers="true"
+                               WholeProgramOptimization="true"
+                               PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="2"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\src\api.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\apigeom.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\apitrigeom.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\bndbox.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\box.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\camera.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\coordsys.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\cylinder.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\extvol.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\getargs.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\global.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\grid.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\imageio.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\imap.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\intersect.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\jpeg.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\light.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\objbound.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\parse.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\plane.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\ppm.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\pthread.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\quadric.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\render.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\ring.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\shade.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\sphere.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\texture.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\tgafile.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\trace_rest.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\triangle.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\ui.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\util.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\vector.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\video.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\vol.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+                       <File
+                               RelativePath="..\src\api.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\apitrigeom.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\bndbox.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\box.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\camera.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\coordsys.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\cylinder.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\extvol.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\getargs.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\global.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\grid.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\imageio.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\imap.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\intersect.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\jpeg.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\light.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\machine.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\macros.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\objbound.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\parse.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\plane.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\ppm.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\pthread.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\quadric.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\render.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\vc7.1\resource.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\ring.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\shade.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\sphere.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\texture.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\tgafile.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\trace.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\triangle.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\types.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\ui.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\util.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\vector.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\video.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\vol.h"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+                       >
+                       <File
+                               RelativePath="..\vc7.1\gui.ico"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\vc7.1\gui.rc"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\vc7.1\small.ico"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Video Layer"
+                       >
+                       <File
+                               RelativePath="..\..\..\common\gui\ddvideo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Release|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+                                               PreprocessorDefinitions="_WINDOWS;NDEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+                                               PreprocessorDefinitions="_WINDOWS;_DEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Release|x64"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+                                               PreprocessorDefinitions="_WINDOWS;NDEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|x64"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+                                               PreprocessorDefinitions="_WINDOWS;_DEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\gdivideo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions="_WINDOWS;_DEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions="_WINDOWS;NDEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Release|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|Win32"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug|x64"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions="_WINDOWS;_DEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|x64"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions="_WINDOWS;NDEBUG;$(NOINHERIT)"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Release|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="DD Debug|x64"
+                                       ExcludedFromBuild="true"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\video.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\..\..\common\gui\winvideo.h"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/classes.nib b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/classes.nib
new file mode 100644 (file)
index 0000000..ea58db1
--- /dev/null
@@ -0,0 +1,4 @@
+{
+IBClasses = ();
+IBVersion = 1;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/info.nib b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/info.nib
new file mode 100644 (file)
index 0000000..97a70e1
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>IBDocumentLocation</key>
+       <string>662 774 356 240 0 0 1680 1028 </string>
+       <key>IBEditorPositions</key>
+       <dict>
+               <key>29</key>
+               <string>863 618 271 44 0 0 1680 1028 </string>
+       </dict>
+       <key>IBFramework Version</key>
+       <string>446.1</string>
+       <key>IBOldestOS</key>
+       <integer>3</integer>
+       <key>IBOpenObjects</key>
+       <array>
+               <integer>29</integer>
+               <integer>166</integer>
+       </array>
+       <key>IBSystem Version</key>
+       <string>8J2135a</string>
+       <key>targetFramework</key>
+       <string>IBCarbonFramework</string>
+</dict>
+</plist>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/objects.xib b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/objects.xib
new file mode 100644 (file)
index 0000000..96b2990
--- /dev/null
@@ -0,0 +1,183 @@
+<?xml version="1.0" standalone="yes"?>
+<object class="NSIBObjectData">
+  <string name="targetFramework">IBCarbonFramework</string>
+  <object name="rootObject" class="NSCustomObject" id="1">
+    <string name="customClass">NSApplication</string>
+  </object>
+  <array count="22" name="allObjects">
+    <object class="IBCarbonMenu" id="29">
+      <string name="title">main</string>
+      <array count="3" name="items">
+        <object class="IBCarbonMenuItem" id="210">
+          <boolean name="updateSingleItem">TRUE</boolean>
+          <string name="title">Tachyon</string>
+          <object name="submenu" class="IBCarbonMenu" id="211">
+            <string name="title">Seismic Simulation</string>
+            <array count="7" name="items">
+              <object class="IBCarbonMenuItem" id="215">
+                <boolean name="checked">TRUE</boolean>
+                <boolean name="dynamic">TRUE</boolean>
+                <boolean name="autoDisable">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">Parallel</string>
+                <ostype name="command">para</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="214">
+                <boolean name="dynamic">TRUE</boolean>
+                <boolean name="autoDisable">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">Serial</string>
+                <ostype name="command">seri</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="216">
+                <boolean name="separator">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+              </object>
+              <object class="IBCarbonMenuItem" id="217">
+                <boolean name="checked">TRUE</boolean>
+                <boolean name="dynamic">TRUE</boolean>
+                <boolean name="autoDisable">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">Enable GUI</string>
+                <ostype name="command">egui</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="218">
+                <boolean name="dynamic">TRUE</boolean>
+                <boolean name="autoDisable">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">Disable GUI</string>
+                <ostype name="command">dgui</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="213">
+                <boolean name="separator">TRUE</boolean>
+                <boolean name="updateSingleItem">TRUE</boolean>
+              </object>
+              <object class="IBCarbonMenuItem" id="212">
+                <boolean name="updateSingleItem">TRUE</boolean>
+                <string name="title">About Tachyon</string>
+                <int name="keyEquivalentModifier">0</int>
+                <ostype name="command">abou</ostype>
+              </object>
+            </array>
+            <string name="name">_NSAppleMenu</string>
+          </object>
+        </object>
+        <object class="IBCarbonMenuItem" id="127">
+          <string name="title">File</string>
+          <object name="submenu" class="IBCarbonMenu" id="131">
+            <string name="title">File</string>
+            <array count="1" name="items">
+              <object class="IBCarbonMenuItem" id="200">
+                <string name="title">Close</string>
+                <string name="keyEquivalent">w</string>
+                <ostype name="command">clos</ostype>
+              </object>
+            </array>
+          </object>
+        </object>
+        <object class="IBCarbonMenuItem" id="192">
+          <string name="title">Window</string>
+          <object name="submenu" class="IBCarbonMenu" id="195">
+            <string name="title">Window</string>
+            <array count="5" name="items">
+              <object class="IBCarbonMenuItem" id="190">
+                <boolean name="dynamic">TRUE</boolean>
+                <string name="title">Minimize</string>
+                <string name="keyEquivalent">m</string>
+                <ostype name="command">mini</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="197">
+                <string name="title">Zoom</string>
+                <ostype name="command">zoom</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="194">
+                <boolean name="separator">TRUE</boolean>
+              </object>
+              <object class="IBCarbonMenuItem" id="196">
+                <boolean name="dynamic">TRUE</boolean>
+                <string name="title">Bring All to Front</string>
+                <ostype name="command">bfrt</ostype>
+              </object>
+              <object class="IBCarbonMenuItem" id="193">
+                <boolean name="dynamic">TRUE</boolean>
+                <string name="title">Arrange in Front</string>
+                <int name="keyEquivalentModifier">1572864</int>
+                <ostype name="command">frnt</ostype>
+              </object>
+            </array>
+            <string name="name">_NSWindowsMenu</string>
+          </object>
+        </object>
+      </array>
+      <string name="name">_NSMainMenu</string>
+    </object>
+    <reference idRef="127"/>
+    <reference idRef="131"/>
+    <object class="IBCarbonWindow" id="166">
+      <string name="windowRect">338 353 698 833 </string>
+      <string name="title">Tachyon</string>
+      <object name="rootControl" class="IBCarbonRootControl" id="167">
+        <string name="bounds">0 0 360 480 </string>
+        <string name="viewFrame">0 0 480 360 </string>
+      </object>
+      <boolean name="receiveUpdates">FALSE</boolean>
+      <boolean name="compositing">TRUE</boolean>
+      <int name="themeBrush">-1</int>
+      <boolean name="asyncDrag">TRUE</boolean>
+      <boolean name="doesNotCycle">TRUE</boolean>
+      <int name="WindowMinWidth">320</int>
+      <int name="WindowMinHeight">200</int>
+    </object>
+    <reference idRef="167"/>
+    <reference idRef="190"/>
+    <reference idRef="192"/>
+    <reference idRef="193"/>
+    <reference idRef="194"/>
+    <reference idRef="195"/>
+    <reference idRef="196"/>
+    <reference idRef="197"/>
+    <reference idRef="200"/>
+    <reference idRef="210"/>
+    <reference idRef="211"/>
+    <reference idRef="212"/>
+    <reference idRef="213"/>
+    <reference idRef="214"/>
+    <reference idRef="215"/>
+    <reference idRef="216"/>
+    <reference idRef="217"/>
+    <reference idRef="218"/>
+  </array>
+  <array count="22" name="allParents">
+    <reference idRef="1"/>
+    <reference idRef="29"/>
+    <reference idRef="127"/>
+    <reference idRef="1"/>
+    <reference idRef="166"/>
+    <reference idRef="195"/>
+    <reference idRef="29"/>
+    <reference idRef="195"/>
+    <reference idRef="195"/>
+    <reference idRef="192"/>
+    <reference idRef="195"/>
+    <reference idRef="195"/>
+    <reference idRef="131"/>
+    <reference idRef="29"/>
+    <reference idRef="210"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+    <reference idRef="211"/>
+  </array>
+  <dictionary count="3" name="nameTable">
+    <string>Files Owner</string>
+    <reference idRef="1"/>
+    <string>MainWindow</string>
+    <reference idRef="166"/>
+    <string>MenuBar</string>
+    <reference idRef="29"/>
+  </dictionary>
+  <unsigned_int name="nextObjectID">219</unsigned_int>
+</object>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/Info.plist b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/Info.plist
new file mode 100644 (file)
index 0000000..4ff1738
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>CFBundleDevelopmentRegion</key>
+       <string>English</string>
+       <key>CFBundleExecutable</key>
+       <string>${EXECUTABLE_NAME}</string>
+       <key>CFBundleIconFile</key>
+       <string></string>
+       <key>CFBundleIdentifier</key>
+       <string>com.intel.tbb.tachyon</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>${PRODUCT_NAME}</string>
+       <key>CFBundlePackageType</key>
+       <string>APPL</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string>1.0</string>
+       <key>CSResourcesFileMapped</key>
+       <true/>
+</dict>
+</plist>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/tachyon.pch b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/tachyon.pch
new file mode 100644 (file)
index 0000000..9d5e3ce
--- /dev/null
@@ -0,0 +1,5 @@
+//
+// Prefix header for all source files of the 'tachyon' target in the 'tachyon' project.
+//
+
+#include <Carbon/Carbon.h>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..d0ac70f
--- /dev/null
@@ -0,0 +1,914 @@
+// !$*UTF8*$!\r
+{\r
+       archiveVersion = 1;\r
+       classes = {\r
+       };\r
+       objectVersion = 42;\r
+       objects = {\r
+\r
+/* Begin PBXBuildFile section */\r
+               8D0C4E8E0486CD37000505A6 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };\r
+               8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };\r
+               A117DC7B0B8DC08100F62CED /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7A0B8DC08100F62CED /* AGL.framework */; };\r
+               A117DC800B8DC09300F62CED /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7F0B8DC09300F62CED /* OpenGL.framework */; };\r
+               A117DC850B8DC0EA00F62CED /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };\r
+               A117DC950B8DC5FB00F62CED /* libtbb.dylib in Copy TBB lib */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };\r
+               A1F58DCD0B8DF19700073279 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };\r
+               A1F58DCE0B8DF19800073279 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };\r
+               A1F58E8C0B8DF25800073279 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7F0B8DC09300F62CED /* OpenGL.framework */; };\r
+               A1F58E8D0B8DF25900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };\r
+               A1F58E8E0B8DF25A00073279 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };\r
+               A1F58E8F0B8DF25A00073279 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7A0B8DC08100F62CED /* AGL.framework */; };\r
+               A1F58E900B8DF25F00073279 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7A0B8DC08100F62CED /* AGL.framework */; };\r
+               A1F58E910B8DF26000073279 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };\r
+               A1F58E920B8DF26100073279 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7F0B8DC09300F62CED /* OpenGL.framework */; };\r
+               A1F58EA30B8DF32900073279 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };\r
+               A1F58EA40B8DF32A00073279 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };\r
+               A1F58EA60B8DF32B00073279 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };\r
+               A1F58EE80B8DF4F900073279 /* libtbb.dylib in Copy TBB lib */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };\r
+               A1F58F960B8DF63C00073279 /* trace.tbb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1A8FB5D0B8CBB8D001C55B1 /* trace.tbb.cpp */; };\r
+               A1F5902C0B8DF6A700073279 /* trace.tbb1d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F58D8B0B8DEFD900073279 /* trace.tbb1d.cpp */; };\r
+               A1F590300B8DF74600073279 /* trace.serial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F58D8C0B8DEFE900073279 /* trace.serial.cpp */; };\r
+               A1F590C30B8DF81800073279 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909E0B8DF81800073279 /* api.cpp */; };\r
+               A1F590C40B8DF81800073279 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909F0B8DF81800073279 /* apigeom.cpp */; };\r
+               A1F590C50B8DF81800073279 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A00B8DF81800073279 /* apitrigeom.cpp */; };\r
+               A1F590C60B8DF81800073279 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A10B8DF81800073279 /* bndbox.cpp */; };\r
+               A1F590C70B8DF81800073279 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A20B8DF81800073279 /* box.cpp */; };\r
+               A1F590C80B8DF81800073279 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A30B8DF81800073279 /* camera.cpp */; };\r
+               A1F590C90B8DF81800073279 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A40B8DF81800073279 /* coordsys.cpp */; };\r
+               A1F590CA0B8DF81800073279 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A50B8DF81800073279 /* cylinder.cpp */; };\r
+               A1F590CB0B8DF81800073279 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A60B8DF81800073279 /* extvol.cpp */; };\r
+               A1F590CC0B8DF81800073279 /* getargs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A70B8DF81800073279 /* getargs.cpp */; };\r
+               A1F590CD0B8DF81800073279 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A80B8DF81800073279 /* global.cpp */; };\r
+               A1F590CE0B8DF81800073279 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A90B8DF81800073279 /* grid.cpp */; };\r
+               A1F590CF0B8DF81800073279 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AA0B8DF81800073279 /* imageio.cpp */; };\r
+               A1F590D00B8DF81800073279 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AB0B8DF81800073279 /* imap.cpp */; };\r
+               A1F590D10B8DF81800073279 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AC0B8DF81800073279 /* intersect.cpp */; };\r
+               A1F590D20B8DF81800073279 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AD0B8DF81800073279 /* jpeg.cpp */; };\r
+               A1F590D30B8DF81800073279 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AE0B8DF81800073279 /* light.cpp */; };\r
+               A1F590D40B8DF81800073279 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AF0B8DF81800073279 /* objbound.cpp */; };\r
+               A1F590D50B8DF81800073279 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B00B8DF81800073279 /* parse.cpp */; };\r
+               A1F590D60B8DF81800073279 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B10B8DF81800073279 /* plane.cpp */; };\r
+               A1F590D70B8DF81800073279 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B20B8DF81800073279 /* ppm.cpp */; };\r
+               A1F590D80B8DF81800073279 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B30B8DF81800073279 /* quadric.cpp */; };\r
+               A1F590D90B8DF81800073279 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B40B8DF81800073279 /* render.cpp */; };\r
+               A1F590DA0B8DF81800073279 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B50B8DF81800073279 /* ring.cpp */; };\r
+               A1F590DB0B8DF81800073279 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B60B8DF81800073279 /* shade.cpp */; };\r
+               A1F590DC0B8DF81800073279 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B70B8DF81800073279 /* sphere.cpp */; };\r
+               A1F590DD0B8DF81800073279 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B80B8DF81800073279 /* texture.cpp */; };\r
+               A1F590DE0B8DF81800073279 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B90B8DF81800073279 /* tgafile.cpp */; };\r
+               A1F590DF0B8DF81800073279 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BA0B8DF81800073279 /* trace_rest.cpp */; };\r
+               A1F590E20B8DF81800073279 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BD0B8DF81800073279 /* triangle.cpp */; };\r
+               A1F590E30B8DF81800073279 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BE0B8DF81800073279 /* ui.cpp */; };\r
+               A1F590E40B8DF81800073279 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BF0B8DF81800073279 /* util.cpp */; };\r
+               A1F590E50B8DF81800073279 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C00B8DF81800073279 /* vector.cpp */; };\r
+               A1F590E60B8DF81800073279 /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C10B8DF81800073279 /* video.cpp */; };\r
+               A1F590E70B8DF81800073279 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C20B8DF81800073279 /* vol.cpp */; };\r
+               A1F5910D0B8DF81800073279 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909E0B8DF81800073279 /* api.cpp */; };\r
+               A1F5910E0B8DF81800073279 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909F0B8DF81800073279 /* apigeom.cpp */; };\r
+               A1F5910F0B8DF81800073279 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A00B8DF81800073279 /* apitrigeom.cpp */; };\r
+               A1F591100B8DF81800073279 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A10B8DF81800073279 /* bndbox.cpp */; };\r
+               A1F591110B8DF81800073279 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A20B8DF81800073279 /* box.cpp */; };\r
+               A1F591120B8DF81800073279 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A30B8DF81800073279 /* camera.cpp */; };\r
+               A1F591130B8DF81800073279 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A40B8DF81800073279 /* coordsys.cpp */; };\r
+               A1F591140B8DF81800073279 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A50B8DF81800073279 /* cylinder.cpp */; };\r
+               A1F591150B8DF81800073279 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A60B8DF81800073279 /* extvol.cpp */; };\r
+               A1F591160B8DF81800073279 /* getargs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A70B8DF81800073279 /* getargs.cpp */; };\r
+               A1F591170B8DF81800073279 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A80B8DF81800073279 /* global.cpp */; };\r
+               A1F591180B8DF81800073279 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A90B8DF81800073279 /* grid.cpp */; };\r
+               A1F591190B8DF81800073279 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AA0B8DF81800073279 /* imageio.cpp */; };\r
+               A1F5911A0B8DF81800073279 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AB0B8DF81800073279 /* imap.cpp */; };\r
+               A1F5911B0B8DF81800073279 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AC0B8DF81800073279 /* intersect.cpp */; };\r
+               A1F5911C0B8DF81800073279 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AD0B8DF81800073279 /* jpeg.cpp */; };\r
+               A1F5911D0B8DF81800073279 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AE0B8DF81800073279 /* light.cpp */; };\r
+               A1F5911E0B8DF81800073279 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AF0B8DF81800073279 /* objbound.cpp */; };\r
+               A1F5911F0B8DF81800073279 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B00B8DF81800073279 /* parse.cpp */; };\r
+               A1F591200B8DF81800073279 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B10B8DF81800073279 /* plane.cpp */; };\r
+               A1F591210B8DF81800073279 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B20B8DF81800073279 /* ppm.cpp */; };\r
+               A1F591220B8DF81800073279 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B30B8DF81800073279 /* quadric.cpp */; };\r
+               A1F591230B8DF81800073279 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B40B8DF81800073279 /* render.cpp */; };\r
+               A1F591240B8DF81800073279 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B50B8DF81800073279 /* ring.cpp */; };\r
+               A1F591250B8DF81800073279 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B60B8DF81800073279 /* shade.cpp */; };\r
+               A1F591260B8DF81800073279 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B70B8DF81800073279 /* sphere.cpp */; };\r
+               A1F591270B8DF81800073279 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B80B8DF81800073279 /* texture.cpp */; };\r
+               A1F591280B8DF81800073279 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B90B8DF81800073279 /* tgafile.cpp */; };\r
+               A1F591290B8DF81800073279 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BA0B8DF81800073279 /* trace_rest.cpp */; };\r
+               A1F5912C0B8DF81800073279 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BD0B8DF81800073279 /* triangle.cpp */; };\r
+               A1F5912D0B8DF81800073279 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BE0B8DF81800073279 /* ui.cpp */; };\r
+               A1F5912E0B8DF81800073279 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BF0B8DF81800073279 /* util.cpp */; };\r
+               A1F5912F0B8DF81800073279 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C00B8DF81800073279 /* vector.cpp */; };\r
+               A1F591300B8DF81800073279 /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C10B8DF81800073279 /* video.cpp */; };\r
+               A1F591310B8DF81800073279 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C20B8DF81800073279 /* vol.cpp */; };\r
+               A1F591320B8DF81800073279 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909E0B8DF81800073279 /* api.cpp */; };\r
+               A1F591330B8DF81800073279 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909F0B8DF81800073279 /* apigeom.cpp */; };\r
+               A1F591340B8DF81800073279 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A00B8DF81800073279 /* apitrigeom.cpp */; };\r
+               A1F591350B8DF81800073279 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A10B8DF81800073279 /* bndbox.cpp */; };\r
+               A1F591360B8DF81800073279 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A20B8DF81800073279 /* box.cpp */; };\r
+               A1F591370B8DF81800073279 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A30B8DF81800073279 /* camera.cpp */; };\r
+               A1F591380B8DF81800073279 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A40B8DF81800073279 /* coordsys.cpp */; };\r
+               A1F591390B8DF81800073279 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A50B8DF81800073279 /* cylinder.cpp */; };\r
+               A1F5913A0B8DF81800073279 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A60B8DF81800073279 /* extvol.cpp */; };\r
+               A1F5913B0B8DF81800073279 /* getargs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A70B8DF81800073279 /* getargs.cpp */; };\r
+               A1F5913C0B8DF81800073279 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A80B8DF81800073279 /* global.cpp */; };\r
+               A1F5913D0B8DF81800073279 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A90B8DF81800073279 /* grid.cpp */; };\r
+               A1F5913E0B8DF81800073279 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AA0B8DF81800073279 /* imageio.cpp */; };\r
+               A1F5913F0B8DF81800073279 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AB0B8DF81800073279 /* imap.cpp */; };\r
+               A1F591400B8DF81800073279 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AC0B8DF81800073279 /* intersect.cpp */; };\r
+               A1F591410B8DF81800073279 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AD0B8DF81800073279 /* jpeg.cpp */; };\r
+               A1F591420B8DF81800073279 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AE0B8DF81800073279 /* light.cpp */; };\r
+               A1F591430B8DF81800073279 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AF0B8DF81800073279 /* objbound.cpp */; };\r
+               A1F591440B8DF81800073279 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B00B8DF81800073279 /* parse.cpp */; };\r
+               A1F591450B8DF81800073279 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B10B8DF81800073279 /* plane.cpp */; };\r
+               A1F591460B8DF81800073279 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B20B8DF81800073279 /* ppm.cpp */; };\r
+               A1F591470B8DF81800073279 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B30B8DF81800073279 /* quadric.cpp */; };\r
+               A1F591480B8DF81800073279 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B40B8DF81800073279 /* render.cpp */; };\r
+               A1F591490B8DF81800073279 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B50B8DF81800073279 /* ring.cpp */; };\r
+               A1F5914A0B8DF81800073279 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B60B8DF81800073279 /* shade.cpp */; };\r
+               A1F5914B0B8DF81800073279 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B70B8DF81800073279 /* sphere.cpp */; };\r
+               A1F5914C0B8DF81800073279 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B80B8DF81800073279 /* texture.cpp */; };\r
+               A1F5914D0B8DF81800073279 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B90B8DF81800073279 /* tgafile.cpp */; };\r
+               A1F5914E0B8DF81800073279 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BA0B8DF81800073279 /* trace_rest.cpp */; };\r
+               A1F591510B8DF81800073279 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BD0B8DF81800073279 /* triangle.cpp */; };\r
+               A1F591520B8DF81800073279 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BE0B8DF81800073279 /* ui.cpp */; };\r
+               A1F591530B8DF81800073279 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BF0B8DF81800073279 /* util.cpp */; };\r
+               A1F591540B8DF81800073279 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C00B8DF81800073279 /* vector.cpp */; };\r
+               A1F591550B8DF81800073279 /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C10B8DF81800073279 /* video.cpp */; };\r
+               A1F591560B8DF81800073279 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C20B8DF81800073279 /* vol.cpp */; };\r
+               A1F5915D0B8DF94400073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5915C0B8DF94400073279 /* macvideo.cpp */; };\r
+               A1F5915E0B8DF94400073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5915C0B8DF94400073279 /* macvideo.cpp */; };\r
+               A1F591600B8DF94400073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5915C0B8DF94400073279 /* macvideo.cpp */; };\r
+/* End PBXBuildFile section */\r
+\r
+/* Begin PBXCopyFilesBuildPhase section */\r
+               A117DC910B8DC59A00F62CED /* Copy TBB lib */ = {\r
+                       isa = PBXCopyFilesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       dstPath = "";\r
+                       dstSubfolderSpec = 16;\r
+                       files = (\r
+                               A117DC950B8DC5FB00F62CED /* libtbb.dylib in Copy TBB lib */,\r
+                       );\r
+                       name = "Copy TBB lib";\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+               A1F58EE60B8DF4E100073279 /* Copy TBB lib */ = {\r
+                       isa = PBXCopyFilesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       dstPath = "";\r
+                       dstSubfolderSpec = 16;\r
+                       files = (\r
+                               A1F58EE80B8DF4F900073279 /* libtbb.dylib in Copy TBB lib */,\r
+                       );\r
+                       name = "Copy TBB lib";\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+/* End PBXCopyFilesBuildPhase section */\r
+\r
+/* Begin PBXFileReference section */\r
+               1870340FFE93FCAF11CA0CD7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = "<group>"; };\r
+               20286C33FDCF999611CA2CEA /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };\r
+               32DBCF6D0370B57F00C91783 /* tachyon.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tachyon.pch; sourceTree = "<group>"; };\r
+               8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };\r
+               A117DC7A0B8DC08100F62CED /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };\r
+               A117DC7F0B8DC09300F62CED /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };\r
+               A117DC830B8DC0DE00F62CED /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };\r
+               A1A8FB5D0B8CBB8D001C55B1 /* trace.tbb.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.tbb.cpp; path = ../src/trace.tbb.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F58CD90B8DE90E00073279 /* tachyon-tbb.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tachyon-tbb.app"; sourceTree = BUILT_PRODUCTS_DIR; };\r
+               A1F58D3D0B8DEB8E00073279 /* trace.threads.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.threads.cpp; path = ../src/trace.threads.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F58D8B0B8DEFD900073279 /* trace.tbb1d.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.tbb1d.cpp; path = ../src/trace.tbb1d.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F58D8C0B8DEFE900073279 /* trace.serial.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.serial.cpp; path = ../src/trace.serial.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F58D920B8DF03600073279 /* tachyon-tbb1d.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tachyon-tbb1d.app"; sourceTree = BUILT_PRODUCTS_DIR; };\r
+               A1F58D9C0B8DF06700073279 /* tachyon-serial.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tachyon-serial.app"; sourceTree = BUILT_PRODUCTS_DIR; };\r
+               A1F590320B8DF7D100073279 /* api.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = api.h; path = ../src/api.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590330B8DF7D100073279 /* apitrigeom.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = apitrigeom.h; path = ../src/apitrigeom.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590340B8DF7D100073279 /* bndbox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = bndbox.h; path = ../src/bndbox.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590350B8DF7D100073279 /* box.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = box.h; path = ../src/box.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590360B8DF7D100073279 /* camera.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = camera.h; path = ../src/camera.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590370B8DF7D100073279 /* coordsys.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = coordsys.h; path = ../src/coordsys.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590380B8DF7D100073279 /* cylinder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = cylinder.h; path = ../src/cylinder.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590390B8DF7D100073279 /* extvol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = extvol.h; path = ../src/extvol.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5903A0B8DF7D100073279 /* getargs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = getargs.h; path = ../src/getargs.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5903B0B8DF7D100073279 /* global.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = global.h; path = ../src/global.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5903C0B8DF7D100073279 /* grid.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = grid.h; path = ../src/grid.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5903D0B8DF7D100073279 /* imageio.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = imageio.h; path = ../src/imageio.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5903E0B8DF7D100073279 /* imap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = imap.h; path = ../src/imap.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5903F0B8DF7D100073279 /* intersect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = intersect.h; path = ../src/intersect.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590400B8DF7D100073279 /* jpeg.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jpeg.h; path = ../src/jpeg.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590410B8DF7D100073279 /* light.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = light.h; path = ../src/light.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590420B8DF7D100073279 /* machine.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = machine.h; path = ../src/machine.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590430B8DF7D100073279 /* macros.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macros.h; path = ../src/macros.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590440B8DF7D100073279 /* objbound.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = objbound.h; path = ../src/objbound.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590450B8DF7D100073279 /* parse.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = parse.h; path = ../src/parse.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590460B8DF7D100073279 /* plane.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = plane.h; path = ../src/plane.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590470B8DF7D100073279 /* ppm.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ppm.h; path = ../src/ppm.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590480B8DF7D100073279 /* quadric.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = quadric.h; path = ../src/quadric.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590490B8DF7D100073279 /* render.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = render.h; path = ../src/render.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5904A0B8DF7D100073279 /* ring.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ring.h; path = ../src/ring.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5904B0B8DF7D100073279 /* shade.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = shade.h; path = ../src/shade.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5904C0B8DF7D100073279 /* sphere.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sphere.h; path = ../src/sphere.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5904D0B8DF7D100073279 /* texture.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = texture.h; path = ../src/texture.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5904E0B8DF7D100073279 /* tgafile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = tgafile.h; path = ../src/tgafile.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5904F0B8DF7D100073279 /* trace.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = trace.h; path = ../src/trace.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590500B8DF7D100073279 /* types.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../src/types.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590510B8DF7D100073279 /* ui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ui.h; path = ../src/ui.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590520B8DF7D100073279 /* util.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = util.h; path = ../src/util.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590530B8DF7D100073279 /* vector.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = vector.h; path = ../src/vector.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590540B8DF7D100073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../src/video.h; sourceTree = SOURCE_ROOT; };\r
+               A1F590550B8DF7D100073279 /* vol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = vol.h; path = ../src/vol.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5909E0B8DF81800073279 /* api.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = api.cpp; path = ../src/api.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F5909F0B8DF81800073279 /* apigeom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = apigeom.cpp; path = ../src/apigeom.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590A00B8DF81800073279 /* apitrigeom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = apitrigeom.cpp; path = ../src/apitrigeom.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590A10B8DF81800073279 /* bndbox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = bndbox.cpp; path = ../src/bndbox.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590A20B8DF81800073279 /* box.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = box.cpp; path = ../src/box.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590A30B8DF81800073279 /* camera.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = camera.cpp; path = ../src/camera.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590A40B8DF81800073279 /* coordsys.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = coordsys.cpp; path = ../src/coordsys.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590A50B8DF81800073279 /* cylinder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = cylinder.cpp; path = ../src/cylinder.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590A60B8DF81800073279 /* extvol.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = extvol.cpp; path = ../src/extvol.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590A70B8DF81800073279 /* getargs.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = getargs.cpp; path = ../src/getargs.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590A80B8DF81800073279 /* global.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = global.cpp; path = ../src/global.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590A90B8DF81800073279 /* grid.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = grid.cpp; path = ../src/grid.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590AA0B8DF81800073279 /* imageio.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = imageio.cpp; path = ../src/imageio.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590AB0B8DF81800073279 /* imap.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = imap.cpp; path = ../src/imap.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590AC0B8DF81800073279 /* intersect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = intersect.cpp; path = ../src/intersect.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590AD0B8DF81800073279 /* jpeg.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = jpeg.cpp; path = ../src/jpeg.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590AE0B8DF81800073279 /* light.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = light.cpp; path = ../src/light.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590AF0B8DF81800073279 /* objbound.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = objbound.cpp; path = ../src/objbound.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590B00B8DF81800073279 /* parse.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parse.cpp; path = ../src/parse.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590B10B8DF81800073279 /* plane.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = plane.cpp; path = ../src/plane.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590B20B8DF81800073279 /* ppm.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ppm.cpp; path = ../src/ppm.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590B30B8DF81800073279 /* quadric.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = quadric.cpp; path = ../src/quadric.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590B40B8DF81800073279 /* render.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = render.cpp; path = ../src/render.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590B50B8DF81800073279 /* ring.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ring.cpp; path = ../src/ring.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590B60B8DF81800073279 /* shade.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = shade.cpp; path = ../src/shade.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590B70B8DF81800073279 /* sphere.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sphere.cpp; path = ../src/sphere.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590B80B8DF81800073279 /* texture.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = texture.cpp; path = ../src/texture.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590B90B8DF81800073279 /* tgafile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = tgafile.cpp; path = ../src/tgafile.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590BA0B8DF81800073279 /* trace_rest.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace_rest.cpp; path = ../src/trace_rest.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590BD0B8DF81800073279 /* triangle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = triangle.cpp; path = ../src/triangle.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590BE0B8DF81800073279 /* ui.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ui.cpp; path = ../src/ui.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590BF0B8DF81800073279 /* util.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = util.cpp; path = ../src/util.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590C00B8DF81800073279 /* vector.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vector.cpp; path = ../src/vector.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590C10B8DF81800073279 /* video.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = video.cpp; path = ../src/video.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F590C20B8DF81800073279 /* vol.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vol.cpp; path = ../src/vol.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F5915A0B8DF8FA00073279 /* triangle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = triangle.h; path = ../src/triangle.h; sourceTree = SOURCE_ROOT; };\r
+               A1F5915C0B8DF94400073279 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = SOURCE_ROOT; };\r
+               A1F591610B8DF96500073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../../../common/gui/video.h; sourceTree = SOURCE_ROOT; };\r
+/* End PBXFileReference section */\r
+\r
+/* Begin PBXFrameworksBuildPhase section */\r
+               8D0C4E910486CD37000505A6 /* Frameworks */ = {\r
+                       isa = PBXFrameworksBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */,\r
+                               A117DC7B0B8DC08100F62CED /* AGL.framework in Frameworks */,\r
+                               A117DC800B8DC09300F62CED /* OpenGL.framework in Frameworks */,\r
+                               A117DC850B8DC0EA00F62CED /* libtbb.dylib in Frameworks */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+               A1F58D900B8DF03600073279 /* Frameworks */ = {\r
+                       isa = PBXFrameworksBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               A1F58E8C0B8DF25800073279 /* OpenGL.framework in Frameworks */,\r
+                               A1F58E8D0B8DF25900073279 /* libtbb.dylib in Frameworks */,\r
+                               A1F58E8E0B8DF25A00073279 /* Carbon.framework in Frameworks */,\r
+                               A1F58E8F0B8DF25A00073279 /* AGL.framework in Frameworks */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+               A1F58D9A0B8DF06700073279 /* Frameworks */ = {\r
+                       isa = PBXFrameworksBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               A1F58E900B8DF25F00073279 /* AGL.framework in Frameworks */,\r
+                               A1F58E910B8DF26000073279 /* Carbon.framework in Frameworks */,\r
+                               A1F58E920B8DF26100073279 /* OpenGL.framework in Frameworks */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+/* End PBXFrameworksBuildPhase section */\r
+\r
+/* Begin PBXGroup section */\r
+               20286C29FDCF999611CA2CEA /* tachyon */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               20286C2AFDCF999611CA2CEA /* Sources */,\r
+                               20286C2CFDCF999611CA2CEA /* Resources */,\r
+                               20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,\r
+                               A1F58CD30B8DE85300073279 /* Products */,\r
+                       );\r
+                       name = tachyon;\r
+                       sourceTree = "<group>";\r
+               };\r
+               20286C2AFDCF999611CA2CEA /* Sources */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               A1F590310B8DF75E00073279 /* Tachyon */,\r
+                               A1A8FB5F0B8CBB9E001C55B1 /* Render */,\r
+                       );\r
+                       name = Sources;\r
+                       sourceTree = "<group>";\r
+               };\r
+               20286C2CFDCF999611CA2CEA /* Resources */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               8D0C4E960486CD37000505A6 /* Info.plist */,\r
+                               02345980000FD03B11CA0E72 /* main.nib */,\r
+                       );\r
+                       name = Resources;\r
+                       sourceTree = "<group>";\r
+               };\r
+               20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               A117DC830B8DC0DE00F62CED /* libtbb.dylib */,\r
+                               A117DC7F0B8DC09300F62CED /* OpenGL.framework */,\r
+                               A117DC7A0B8DC08100F62CED /* AGL.framework */,\r
+                               20286C33FDCF999611CA2CEA /* Carbon.framework */,\r
+                       );\r
+                       name = "External Frameworks and Libraries";\r
+                       sourceTree = "<group>";\r
+               };\r
+               A1A8FB5F0B8CBB9E001C55B1 /* Render */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               A1F5902F0B8DF71B00073279 /* Headers */,\r
+                               A1F5902E0B8DF71200073279 /* Sources */,\r
+                       );\r
+                       name = Render;\r
+                       sourceTree = "<group>";\r
+               };\r
+               A1F58CD30B8DE85300073279 /* Products */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               A1F58CD90B8DE90E00073279 /* tachyon-tbb.app */,\r
+                               A1F58D920B8DF03600073279 /* tachyon-tbb1d.app */,\r
+                               A1F58D9C0B8DF06700073279 /* tachyon-serial.app */,\r
+                       );\r
+                       name = Products;\r
+                       sourceTree = "<group>";\r
+               };\r
+               A1F5902E0B8DF71200073279 /* Sources */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               A1F5915C0B8DF94400073279 /* macvideo.cpp */,\r
+                               A1F5909E0B8DF81800073279 /* api.cpp */,\r
+                               A1F5909F0B8DF81800073279 /* apigeom.cpp */,\r
+                               A1F590A00B8DF81800073279 /* apitrigeom.cpp */,\r
+                               A1F590A10B8DF81800073279 /* bndbox.cpp */,\r
+                               A1F590A20B8DF81800073279 /* box.cpp */,\r
+                               A1F590A30B8DF81800073279 /* camera.cpp */,\r
+                               A1F590A40B8DF81800073279 /* coordsys.cpp */,\r
+                               A1F590A50B8DF81800073279 /* cylinder.cpp */,\r
+                               A1F590A60B8DF81800073279 /* extvol.cpp */,\r
+                               A1F590A70B8DF81800073279 /* getargs.cpp */,\r
+                               A1F590A80B8DF81800073279 /* global.cpp */,\r
+                               A1F590A90B8DF81800073279 /* grid.cpp */,\r
+                               A1F590AA0B8DF81800073279 /* imageio.cpp */,\r
+                               A1F590AB0B8DF81800073279 /* imap.cpp */,\r
+                               A1F590AC0B8DF81800073279 /* intersect.cpp */,\r
+                               A1F590AD0B8DF81800073279 /* jpeg.cpp */,\r
+                               A1F590AE0B8DF81800073279 /* light.cpp */,\r
+                               A1F590AF0B8DF81800073279 /* objbound.cpp */,\r
+                               A1F590B00B8DF81800073279 /* parse.cpp */,\r
+                               A1F590B10B8DF81800073279 /* plane.cpp */,\r
+                               A1F590B20B8DF81800073279 /* ppm.cpp */,\r
+                               A1F590B30B8DF81800073279 /* quadric.cpp */,\r
+                               A1F590B40B8DF81800073279 /* render.cpp */,\r
+                               A1F590B50B8DF81800073279 /* ring.cpp */,\r
+                               A1F590B60B8DF81800073279 /* shade.cpp */,\r
+                               A1F590B70B8DF81800073279 /* sphere.cpp */,\r
+                               A1F590B80B8DF81800073279 /* texture.cpp */,\r
+                               A1F590B90B8DF81800073279 /* tgafile.cpp */,\r
+                               A1F590BA0B8DF81800073279 /* trace_rest.cpp */,\r
+                               A1F590BD0B8DF81800073279 /* triangle.cpp */,\r
+                               A1F590BE0B8DF81800073279 /* ui.cpp */,\r
+                               A1F590BF0B8DF81800073279 /* util.cpp */,\r
+                               A1F590C00B8DF81800073279 /* vector.cpp */,\r
+                               A1F590C10B8DF81800073279 /* video.cpp */,\r
+                               A1F590C20B8DF81800073279 /* vol.cpp */,\r
+                       );\r
+                       name = Sources;\r
+                       sourceTree = "<group>";\r
+               };\r
+               A1F5902F0B8DF71B00073279 /* Headers */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               A1F591610B8DF96500073279 /* video.h */,\r
+                               A1F5915A0B8DF8FA00073279 /* triangle.h */,\r
+                               A1F590320B8DF7D100073279 /* api.h */,\r
+                               A1F590330B8DF7D100073279 /* apitrigeom.h */,\r
+                               A1F590340B8DF7D100073279 /* bndbox.h */,\r
+                               A1F590350B8DF7D100073279 /* box.h */,\r
+                               A1F590360B8DF7D100073279 /* camera.h */,\r
+                               A1F590370B8DF7D100073279 /* coordsys.h */,\r
+                               A1F590380B8DF7D100073279 /* cylinder.h */,\r
+                               A1F590390B8DF7D100073279 /* extvol.h */,\r
+                               A1F5903A0B8DF7D100073279 /* getargs.h */,\r
+                               A1F5903B0B8DF7D100073279 /* global.h */,\r
+                               A1F5903C0B8DF7D100073279 /* grid.h */,\r
+                               A1F5903D0B8DF7D100073279 /* imageio.h */,\r
+                               A1F5903E0B8DF7D100073279 /* imap.h */,\r
+                               A1F5903F0B8DF7D100073279 /* intersect.h */,\r
+                               A1F590400B8DF7D100073279 /* jpeg.h */,\r
+                               A1F590410B8DF7D100073279 /* light.h */,\r
+                               A1F590420B8DF7D100073279 /* machine.h */,\r
+                               A1F590430B8DF7D100073279 /* macros.h */,\r
+                               A1F590440B8DF7D100073279 /* objbound.h */,\r
+                               A1F590450B8DF7D100073279 /* parse.h */,\r
+                               A1F590460B8DF7D100073279 /* plane.h */,\r
+                               A1F590470B8DF7D100073279 /* ppm.h */,\r
+                               A1F590480B8DF7D100073279 /* quadric.h */,\r
+                               A1F590490B8DF7D100073279 /* render.h */,\r
+                               A1F5904A0B8DF7D100073279 /* ring.h */,\r
+                               A1F5904B0B8DF7D100073279 /* shade.h */,\r
+                               A1F5904C0B8DF7D100073279 /* sphere.h */,\r
+                               A1F5904D0B8DF7D100073279 /* texture.h */,\r
+                               A1F5904E0B8DF7D100073279 /* tgafile.h */,\r
+                               A1F5904F0B8DF7D100073279 /* trace.h */,\r
+                               A1F590500B8DF7D100073279 /* types.h */,\r
+                               A1F590510B8DF7D100073279 /* ui.h */,\r
+                               A1F590520B8DF7D100073279 /* util.h */,\r
+                               A1F590530B8DF7D100073279 /* vector.h */,\r
+                               A1F590540B8DF7D100073279 /* video.h */,\r
+                               A1F590550B8DF7D100073279 /* vol.h */,\r
+                       );\r
+                       name = Headers;\r
+                       sourceTree = "<group>";\r
+               };\r
+               A1F590310B8DF75E00073279 /* Tachyon */ = {\r
+                       isa = PBXGroup;\r
+                       children = (\r
+                               A1F58D8C0B8DEFE900073279 /* trace.serial.cpp */,\r
+                               A1F58D3D0B8DEB8E00073279 /* trace.threads.cpp */,\r
+                               A1F58D8B0B8DEFD900073279 /* trace.tbb1d.cpp */,\r
+                               A1A8FB5D0B8CBB8D001C55B1 /* trace.tbb.cpp */,\r
+                               32DBCF6D0370B57F00C91783 /* tachyon.pch */,\r
+                       );\r
+                       name = Tachyon;\r
+                       sourceTree = "<group>";\r
+               };\r
+/* End PBXGroup section */\r
+\r
+/* Begin PBXNativeTarget section */\r
+               8D0C4E890486CD37000505A6 /* tachyon-tbb */ = {\r
+                       isa = PBXNativeTarget;\r
+                       buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "tachyon-tbb" */;\r
+                       buildPhases = (\r
+                               8D0C4E8C0486CD37000505A6 /* Resources */,\r
+                               8D0C4E8F0486CD37000505A6 /* Sources */,\r
+                               8D0C4E910486CD37000505A6 /* Frameworks */,\r
+                               A117DC910B8DC59A00F62CED /* Copy TBB lib */,\r
+                       );\r
+                       buildRules = (\r
+                       );\r
+                       dependencies = (\r
+                       );\r
+                       name = "tachyon-tbb";\r
+                       productInstallPath = "$(HOME)/Applications";\r
+                       productName = tachyon;\r
+                       productReference = A1F58CD90B8DE90E00073279 /* tachyon-tbb.app */;\r
+                       productType = "com.apple.product-type.application";\r
+               };\r
+               A1F58D910B8DF03600073279 /* tachyon-tbb1d */ = {\r
+                       isa = PBXNativeTarget;\r
+                       buildConfigurationList = A1F58D950B8DF03600073279 /* Build configuration list for PBXNativeTarget "tachyon-tbb1d" */;\r
+                       buildPhases = (\r
+                               A1F58D8E0B8DF03600073279 /* Resources */,\r
+                               A1F58D8F0B8DF03600073279 /* Sources */,\r
+                               A1F58D900B8DF03600073279 /* Frameworks */,\r
+                               A1F58EE60B8DF4E100073279 /* Copy TBB lib */,\r
+                       );\r
+                       buildRules = (\r
+                       );\r
+                       dependencies = (\r
+                       );\r
+                       name = "tachyon-tbb1d";\r
+                       productName = "tachyon-tbb1d";\r
+                       productReference = A1F58D920B8DF03600073279 /* tachyon-tbb1d.app */;\r
+                       productType = "com.apple.product-type.application";\r
+               };\r
+               A1F58D9B0B8DF06700073279 /* tachyon-serial */ = {\r
+                       isa = PBXNativeTarget;\r
+                       buildConfigurationList = A1F58D9F0B8DF06700073279 /* Build configuration list for PBXNativeTarget "tachyon-serial" */;\r
+                       buildPhases = (\r
+                               A1F58D980B8DF06700073279 /* Resources */,\r
+                               A1F58D990B8DF06700073279 /* Sources */,\r
+                               A1F58D9A0B8DF06700073279 /* Frameworks */,\r
+                       );\r
+                       buildRules = (\r
+                       );\r
+                       dependencies = (\r
+                       );\r
+                       name = "tachyon-serial";\r
+                       productName = "tachyon-serial";\r
+                       productReference = A1F58D9C0B8DF06700073279 /* tachyon-serial.app */;\r
+                       productType = "com.apple.product-type.application";\r
+               };\r
+/* End PBXNativeTarget section */\r
+\r
+/* Begin PBXProject section */\r
+               20286C28FDCF999611CA2CEA /* Project object */ = {\r
+                       isa = PBXProject;\r
+                       buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "tachyon" */;\r
+                       hasScannedForEncodings = 1;\r
+                       mainGroup = 20286C29FDCF999611CA2CEA /* tachyon */;\r
+                       productRefGroup = A1F58CD30B8DE85300073279 /* Products */;\r
+                       projectDirPath = "";\r
+                       targets = (\r
+                               A1F58D9B0B8DF06700073279 /* tachyon-serial */,\r
+                               A1F58D910B8DF03600073279 /* tachyon-tbb1d */,\r
+                               8D0C4E890486CD37000505A6 /* tachyon-tbb */,\r
+                       );\r
+               };\r
+/* End PBXProject section */\r
+\r
+/* Begin PBXResourcesBuildPhase section */\r
+               8D0C4E8C0486CD37000505A6 /* Resources */ = {\r
+                       isa = PBXResourcesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               8D0C4E8E0486CD37000505A6 /* main.nib in Resources */,\r
+                               A1F58EA30B8DF32900073279 /* Info.plist in Resources */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+               A1F58D8E0B8DF03600073279 /* Resources */ = {\r
+                       isa = PBXResourcesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               A1F58DCD0B8DF19700073279 /* main.nib in Resources */,\r
+                               A1F58EA40B8DF32A00073279 /* Info.plist in Resources */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+               A1F58D980B8DF06700073279 /* Resources */ = {\r
+                       isa = PBXResourcesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               A1F58DCE0B8DF19800073279 /* main.nib in Resources */,\r
+                               A1F58EA60B8DF32B00073279 /* Info.plist in Resources */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+/* End PBXResourcesBuildPhase section */\r
+\r
+/* Begin PBXSourcesBuildPhase section */\r
+               8D0C4E8F0486CD37000505A6 /* Sources */ = {\r
+                       isa = PBXSourcesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               A1F58F960B8DF63C00073279 /* trace.tbb.cpp in Sources */,\r
+                               A1F591320B8DF81800073279 /* api.cpp in Sources */,\r
+                               A1F591330B8DF81800073279 /* apigeom.cpp in Sources */,\r
+                               A1F591340B8DF81800073279 /* apitrigeom.cpp in Sources */,\r
+                               A1F591350B8DF81800073279 /* bndbox.cpp in Sources */,\r
+                               A1F591360B8DF81800073279 /* box.cpp in Sources */,\r
+                               A1F591370B8DF81800073279 /* camera.cpp in Sources */,\r
+                               A1F591380B8DF81800073279 /* coordsys.cpp in Sources */,\r
+                               A1F591390B8DF81800073279 /* cylinder.cpp in Sources */,\r
+                               A1F5913A0B8DF81800073279 /* extvol.cpp in Sources */,\r
+                               A1F5913B0B8DF81800073279 /* getargs.cpp in Sources */,\r
+                               A1F5913C0B8DF81800073279 /* global.cpp in Sources */,\r
+                               A1F5913D0B8DF81800073279 /* grid.cpp in Sources */,\r
+                               A1F5913E0B8DF81800073279 /* imageio.cpp in Sources */,\r
+                               A1F5913F0B8DF81800073279 /* imap.cpp in Sources */,\r
+                               A1F591400B8DF81800073279 /* intersect.cpp in Sources */,\r
+                               A1F591410B8DF81800073279 /* jpeg.cpp in Sources */,\r
+                               A1F591420B8DF81800073279 /* light.cpp in Sources */,\r
+                               A1F591430B8DF81800073279 /* objbound.cpp in Sources */,\r
+                               A1F591440B8DF81800073279 /* parse.cpp in Sources */,\r
+                               A1F591450B8DF81800073279 /* plane.cpp in Sources */,\r
+                               A1F591460B8DF81800073279 /* ppm.cpp in Sources */,\r
+                               A1F591470B8DF81800073279 /* quadric.cpp in Sources */,\r
+                               A1F591480B8DF81800073279 /* render.cpp in Sources */,\r
+                               A1F591490B8DF81800073279 /* ring.cpp in Sources */,\r
+                               A1F5914A0B8DF81800073279 /* shade.cpp in Sources */,\r
+                               A1F5914B0B8DF81800073279 /* sphere.cpp in Sources */,\r
+                               A1F5914C0B8DF81800073279 /* texture.cpp in Sources */,\r
+                               A1F5914D0B8DF81800073279 /* tgafile.cpp in Sources */,\r
+                               A1F5914E0B8DF81800073279 /* trace_rest.cpp in Sources */,\r
+                               A1F591510B8DF81800073279 /* triangle.cpp in Sources */,\r
+                               A1F591520B8DF81800073279 /* ui.cpp in Sources */,\r
+                               A1F591530B8DF81800073279 /* util.cpp in Sources */,\r
+                               A1F591540B8DF81800073279 /* vector.cpp in Sources */,\r
+                               A1F591550B8DF81800073279 /* video.cpp in Sources */,\r
+                               A1F591560B8DF81800073279 /* vol.cpp in Sources */,\r
+                               A1F5915D0B8DF94400073279 /* macvideo.cpp in Sources */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+               A1F58D8F0B8DF03600073279 /* Sources */ = {\r
+                       isa = PBXSourcesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               A1F5902C0B8DF6A700073279 /* trace.tbb1d.cpp in Sources */,\r
+                               A1F5910D0B8DF81800073279 /* api.cpp in Sources */,\r
+                               A1F5910E0B8DF81800073279 /* apigeom.cpp in Sources */,\r
+                               A1F5910F0B8DF81800073279 /* apitrigeom.cpp in Sources */,\r
+                               A1F591100B8DF81800073279 /* bndbox.cpp in Sources */,\r
+                               A1F591110B8DF81800073279 /* box.cpp in Sources */,\r
+                               A1F591120B8DF81800073279 /* camera.cpp in Sources */,\r
+                               A1F591130B8DF81800073279 /* coordsys.cpp in Sources */,\r
+                               A1F591140B8DF81800073279 /* cylinder.cpp in Sources */,\r
+                               A1F591150B8DF81800073279 /* extvol.cpp in Sources */,\r
+                               A1F591160B8DF81800073279 /* getargs.cpp in Sources */,\r
+                               A1F591170B8DF81800073279 /* global.cpp in Sources */,\r
+                               A1F591180B8DF81800073279 /* grid.cpp in Sources */,\r
+                               A1F591190B8DF81800073279 /* imageio.cpp in Sources */,\r
+                               A1F5911A0B8DF81800073279 /* imap.cpp in Sources */,\r
+                               A1F5911B0B8DF81800073279 /* intersect.cpp in Sources */,\r
+                               A1F5911C0B8DF81800073279 /* jpeg.cpp in Sources */,\r
+                               A1F5911D0B8DF81800073279 /* light.cpp in Sources */,\r
+                               A1F5911E0B8DF81800073279 /* objbound.cpp in Sources */,\r
+                               A1F5911F0B8DF81800073279 /* parse.cpp in Sources */,\r
+                               A1F591200B8DF81800073279 /* plane.cpp in Sources */,\r
+                               A1F591210B8DF81800073279 /* ppm.cpp in Sources */,\r
+                               A1F591220B8DF81800073279 /* quadric.cpp in Sources */,\r
+                               A1F591230B8DF81800073279 /* render.cpp in Sources */,\r
+                               A1F591240B8DF81800073279 /* ring.cpp in Sources */,\r
+                               A1F591250B8DF81800073279 /* shade.cpp in Sources */,\r
+                               A1F591260B8DF81800073279 /* sphere.cpp in Sources */,\r
+                               A1F591270B8DF81800073279 /* texture.cpp in Sources */,\r
+                               A1F591280B8DF81800073279 /* tgafile.cpp in Sources */,\r
+                               A1F591290B8DF81800073279 /* trace_rest.cpp in Sources */,\r
+                               A1F5912C0B8DF81800073279 /* triangle.cpp in Sources */,\r
+                               A1F5912D0B8DF81800073279 /* ui.cpp in Sources */,\r
+                               A1F5912E0B8DF81800073279 /* util.cpp in Sources */,\r
+                               A1F5912F0B8DF81800073279 /* vector.cpp in Sources */,\r
+                               A1F591300B8DF81800073279 /* video.cpp in Sources */,\r
+                               A1F591310B8DF81800073279 /* vol.cpp in Sources */,\r
+                               A1F5915E0B8DF94400073279 /* macvideo.cpp in Sources */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+               A1F58D990B8DF06700073279 /* Sources */ = {\r
+                       isa = PBXSourcesBuildPhase;\r
+                       buildActionMask = 2147483647;\r
+                       files = (\r
+                               A1F590300B8DF74600073279 /* trace.serial.cpp in Sources */,\r
+                               A1F590C30B8DF81800073279 /* api.cpp in Sources */,\r
+                               A1F590C40B8DF81800073279 /* apigeom.cpp in Sources */,\r
+                               A1F590C50B8DF81800073279 /* apitrigeom.cpp in Sources */,\r
+                               A1F590C60B8DF81800073279 /* bndbox.cpp in Sources */,\r
+                               A1F590C70B8DF81800073279 /* box.cpp in Sources */,\r
+                               A1F590C80B8DF81800073279 /* camera.cpp in Sources */,\r
+                               A1F590C90B8DF81800073279 /* coordsys.cpp in Sources */,\r
+                               A1F590CA0B8DF81800073279 /* cylinder.cpp in Sources */,\r
+                               A1F590CB0B8DF81800073279 /* extvol.cpp in Sources */,\r
+                               A1F590CC0B8DF81800073279 /* getargs.cpp in Sources */,\r
+                               A1F590CD0B8DF81800073279 /* global.cpp in Sources */,\r
+                               A1F590CE0B8DF81800073279 /* grid.cpp in Sources */,\r
+                               A1F590CF0B8DF81800073279 /* imageio.cpp in Sources */,\r
+                               A1F590D00B8DF81800073279 /* imap.cpp in Sources */,\r
+                               A1F590D10B8DF81800073279 /* intersect.cpp in Sources */,\r
+                               A1F590D20B8DF81800073279 /* jpeg.cpp in Sources */,\r
+                               A1F590D30B8DF81800073279 /* light.cpp in Sources */,\r
+                               A1F590D40B8DF81800073279 /* objbound.cpp in Sources */,\r
+                               A1F590D50B8DF81800073279 /* parse.cpp in Sources */,\r
+                               A1F590D60B8DF81800073279 /* plane.cpp in Sources */,\r
+                               A1F590D70B8DF81800073279 /* ppm.cpp in Sources */,\r
+                               A1F590D80B8DF81800073279 /* quadric.cpp in Sources */,\r
+                               A1F590D90B8DF81800073279 /* render.cpp in Sources */,\r
+                               A1F590DA0B8DF81800073279 /* ring.cpp in Sources */,\r
+                               A1F590DB0B8DF81800073279 /* shade.cpp in Sources */,\r
+                               A1F590DC0B8DF81800073279 /* sphere.cpp in Sources */,\r
+                               A1F590DD0B8DF81800073279 /* texture.cpp in Sources */,\r
+                               A1F590DE0B8DF81800073279 /* tgafile.cpp in Sources */,\r
+                               A1F590DF0B8DF81800073279 /* trace_rest.cpp in Sources */,\r
+                               A1F590E20B8DF81800073279 /* triangle.cpp in Sources */,\r
+                               A1F590E30B8DF81800073279 /* ui.cpp in Sources */,\r
+                               A1F590E40B8DF81800073279 /* util.cpp in Sources */,\r
+                               A1F590E50B8DF81800073279 /* vector.cpp in Sources */,\r
+                               A1F590E60B8DF81800073279 /* video.cpp in Sources */,\r
+                               A1F590E70B8DF81800073279 /* vol.cpp in Sources */,\r
+                               A1F591600B8DF94400073279 /* macvideo.cpp in Sources */,\r
+                       );\r
+                       runOnlyForDeploymentPostprocessing = 0;\r
+               };\r
+/* End PBXSourcesBuildPhase section */\r
+\r
+/* Begin PBXVariantGroup section */\r
+               02345980000FD03B11CA0E72 /* main.nib */ = {\r
+                       isa = PBXVariantGroup;\r
+                       children = (\r
+                               1870340FFE93FCAF11CA0CD7 /* English */,\r
+                       );\r
+                       name = main.nib;\r
+                       sourceTree = "<group>";\r
+               };\r
+/* End PBXVariantGroup section */\r
+\r
+/* Begin XCBuildConfiguration section */\r
+               A1F58D960B8DF03600073279 /* Debug */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               ALWAYS_SEARCH_USER_PATHS = NO;\r
+                               COPY_PHASE_STRIP = NO;\r
+                               GCC_DYNAMIC_NO_PIC = NO;\r
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;\r
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = YES;\r
+                               GCC_OPTIMIZATION_LEVEL = 0;\r
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;\r
+                               GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";\r
+                               INFOPLIST_FILE = Info.plist;\r
+                               INSTALL_PATH = "$(HOME)/Applications";\r
+                               LIBRARY_SEARCH_PATHS = (\r
+                                       "$(inherited)",\r
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",\r
+                               );\r
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";\r
+                               PREBINDING = NO;\r
+                               PRODUCT_NAME = "tachyon-tbb1d";\r
+                               WRAPPER_EXTENSION = app;\r
+                               ZERO_LINK = NO;\r
+                       };\r
+                       name = Debug;\r
+               };\r
+               A1F58D970B8DF03600073279 /* Release */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               ALWAYS_SEARCH_USER_PATHS = NO;\r
+                               COPY_PHASE_STRIP = YES;\r
+                               GCC_ENABLE_FIX_AND_CONTINUE = NO;\r
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;\r
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;\r
+                               GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";\r
+                               INFOPLIST_FILE = Info.plist;\r
+                               INSTALL_PATH = "$(HOME)/Applications";\r
+                               LIBRARY_SEARCH_PATHS = (\r
+                                       "$(inherited)",\r
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",\r
+                               );\r
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";\r
+                               PREBINDING = NO;\r
+                               PRODUCT_NAME = "tachyon-tbb1d";\r
+                               WRAPPER_EXTENSION = app;\r
+                               ZERO_LINK = NO;\r
+                       };\r
+                       name = Release;\r
+               };\r
+               A1F58DA00B8DF06700073279 /* Debug */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               ALWAYS_SEARCH_USER_PATHS = NO;\r
+                               COPY_PHASE_STRIP = NO;\r
+                               GCC_DYNAMIC_NO_PIC = NO;\r
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;\r
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = YES;\r
+                               GCC_OPTIMIZATION_LEVEL = 0;\r
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;\r
+                               GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";\r
+                               INFOPLIST_FILE = Info.plist;\r
+                               INSTALL_PATH = "$(HOME)/Applications";\r
+                               PREBINDING = NO;\r
+                               PRODUCT_NAME = "tachyon-serial";\r
+                               WRAPPER_EXTENSION = app;\r
+                               ZERO_LINK = NO;\r
+                       };\r
+                       name = Debug;\r
+               };\r
+               A1F58DA10B8DF06700073279 /* Release */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               ALWAYS_SEARCH_USER_PATHS = NO;\r
+                               COPY_PHASE_STRIP = YES;\r
+                               GCC_ENABLE_FIX_AND_CONTINUE = NO;\r
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;\r
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;\r
+                               GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";\r
+                               INFOPLIST_FILE = Info.plist;\r
+                               INSTALL_PATH = "$(HOME)/Applications";\r
+                               PREBINDING = NO;\r
+                               PRODUCT_NAME = "tachyon-serial";\r
+                               WRAPPER_EXTENSION = app;\r
+                               ZERO_LINK = NO;\r
+                       };\r
+                       name = Release;\r
+               };\r
+               C0E91AC608A95435008D54AB /* Debug */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               ALWAYS_SEARCH_USER_PATHS = NO;\r
+                               ARCHS = i386;\r
+                               COPY_PHASE_STRIP = NO;\r
+                               GCC_DYNAMIC_NO_PIC = NO;\r
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;\r
+                               GCC_MODEL_TUNING = "";\r
+                               GCC_OPTIMIZATION_LEVEL = 0;\r
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;\r
+                               GCC_PREFIX_HEADER = tachyon.pch;\r
+                               INFOPLIST_FILE = Info.plist;\r
+                               INSTALL_PATH = "$(HOME)/Applications";\r
+                               LIBRARY_SEARCH_PATHS = (\r
+                                       "$(inherited)",\r
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",\r
+                               );\r
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";\r
+                               PRODUCT_NAME = "tachyon-tbb";\r
+                               WRAPPER_EXTENSION = app;\r
+                               ZERO_LINK = NO;\r
+                       };\r
+                       name = Debug;\r
+               };\r
+               C0E91AC708A95435008D54AB /* Release */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               ALWAYS_SEARCH_USER_PATHS = NO;\r
+                               ARCHS = i386;\r
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;\r
+                               GCC_MODEL_TUNING = "";\r
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;\r
+                               GCC_PREFIX_HEADER = tachyon.pch;\r
+                               INFOPLIST_FILE = Info.plist;\r
+                               INSTALL_PATH = "$(HOME)/Applications";\r
+                               LIBRARY_SEARCH_PATHS = (\r
+                                       "$(inherited)",\r
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",\r
+                               );\r
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";\r
+                               PRODUCT_NAME = "tachyon-tbb";\r
+                               WRAPPER_EXTENSION = app;\r
+                               ZERO_LINK = NO;\r
+                       };\r
+                       name = Release;\r
+               };\r
+               C0E91ACA08A95435008D54AB /* Debug */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               GCC_AUTO_VECTORIZATION = YES;\r
+                               GCC_ENABLE_CPP_RTTI = YES;\r
+                               GCC_ENABLE_SSE3_EXTENSIONS = YES;\r
+                               GCC_MODEL_TUNING = "";\r
+                               GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"/Library/Frameworks/TBB.framework/Versions/Current/examples/parallel_for/tachyon/dat/balls.dat\"";\r
+                               GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;\r
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;\r
+                               GCC_WARN_UNUSED_VARIABLE = YES;\r
+                               PREBINDING = NO;\r
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;\r
+                               SYMROOT = "/tmp/tbb-$(USER)";\r
+                       };\r
+                       name = Debug;\r
+               };\r
+               C0E91ACB08A95435008D54AB /* Release */ = {\r
+                       isa = XCBuildConfiguration;\r
+                       buildSettings = {\r
+                               GCC_AUTO_VECTORIZATION = YES;\r
+                               GCC_ENABLE_CPP_RTTI = YES;\r
+                               GCC_ENABLE_SSE3_EXTENSIONS = YES;\r
+                               GCC_MODEL_TUNING = "";\r
+                               GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"/Library/Frameworks/TBB.framework/Versions/Current/examples/parallel_for/tachyon/dat/balls.dat\"";\r
+                               GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;\r
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;\r
+                               GCC_WARN_UNUSED_VARIABLE = YES;\r
+                               PREBINDING = NO;\r
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;\r
+                               SYMROOT = "/tmp/tbb-$(USER)";\r
+                       };\r
+                       name = Release;\r
+               };\r
+/* End XCBuildConfiguration section */\r
+\r
+/* Begin XCConfigurationList section */\r
+               A1F58D950B8DF03600073279 /* Build configuration list for PBXNativeTarget "tachyon-tbb1d" */ = {\r
+                       isa = XCConfigurationList;\r
+                       buildConfigurations = (\r
+                               A1F58D960B8DF03600073279 /* Debug */,\r
+                               A1F58D970B8DF03600073279 /* Release */,\r
+                       );\r
+                       defaultConfigurationIsVisible = 0;\r
+                       defaultConfigurationName = Release;\r
+               };\r
+               A1F58D9F0B8DF06700073279 /* Build configuration list for PBXNativeTarget "tachyon-serial" */ = {\r
+                       isa = XCConfigurationList;\r
+                       buildConfigurations = (\r
+                               A1F58DA00B8DF06700073279 /* Debug */,\r
+                               A1F58DA10B8DF06700073279 /* Release */,\r
+                       );\r
+                       defaultConfigurationIsVisible = 0;\r
+                       defaultConfigurationName = Release;\r
+               };\r
+               C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "tachyon-tbb" */ = {\r
+                       isa = XCConfigurationList;\r
+                       buildConfigurations = (\r
+                               C0E91AC608A95435008D54AB /* Debug */,\r
+                               C0E91AC708A95435008D54AB /* Release */,\r
+                       );\r
+                       defaultConfigurationIsVisible = 0;\r
+                       defaultConfigurationName = Release;\r
+               };\r
+               C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "tachyon" */ = {\r
+                       isa = XCConfigurationList;\r
+                       buildConfigurations = (\r
+                               C0E91ACA08A95435008D54AB /* Debug */,\r
+                               C0E91ACB08A95435008D54AB /* Release */,\r
+                       );\r
+                       defaultConfigurationIsVisible = 0;\r
+                       defaultConfigurationName = Release;\r
+               };\r
+/* End XCConfigurationList section */\r
+       };\r
+       rootObject = 20286C28FDCF999611CA2CEA /* Project object */;\r
+}\r
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/Makefile
new file mode 100644 (file)
index 0000000..f3aa034
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=convex_hull_bench
+ARGS=
+
+# The C++ compiler
+#CXX=g++
+
+all:   release test
+
+release: *.cpp
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o convex_hull_sample convex_hull_sample.cpp -ltbb $(LIBS)
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o convex_hull_bench convex_hull_bench.cpp -ltbb $(LIBS)
+
+debug: *.cpp
+       $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o convex_hull_sample convex_hull_sample.cpp -ltbb_debug $(LIBS)
+       $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o convex_hull_bench convex_hull_bench.cpp -ltbb_debug $(LIBS)
+
+clean:
+       $(RM) convex_hull_bench convex_hull_sample *.o *.d
+
+test:
+       ./$(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/Makefile.windows
new file mode 100644 (file)
index 0000000..0ec6df8
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+PROG=convex_hull_bench
+ARGS=
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+release:
+       $(CXX) convex_hull_sample.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_sample.exe
+       $(CXX) convex_hull_bench.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_bench.exe
+debug:
+       $(CXX) convex_hull_sample.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_sample.exe
+       $(CXX) convex_hull_bench.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_bench.exe
+clean:
+       @cmd.exe /C del convex_hull*.exe *.obj *.?db *.manifest
+test:
+       $(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/convex_hull.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/convex_hull.h
new file mode 100644 (file)
index 0000000..392ee6e
--- /dev/null
@@ -0,0 +1,238 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __CONVEX_HULL_H__
+#define __CONVEX_HULL_H__
+
+#define _SCL_SECURE_NO_DEPRECATE
+#include <cstdlib>
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <vector>
+#include <string>
+#include <cstring>
+#include <algorithm>
+#include <functional>
+#include <assert.h>
+#include "tbb/tick_count.h"
+
+using namespace std;
+
+namespace cfg {
+    // convex hull problem parameter defaults
+    const long    NP = 5000000; // problem size
+    const int     SNT = 1;        // minimal number of threads
+    const int     ENT = 8;        // maximal number of threads
+
+    // convex hull problem user set parameters
+    long   MAXPOINTS         = NP;
+    int    NUM_THREADS_START = SNT;
+    int    NUM_THREADS_END   = ENT;
+
+    // convex hull grain sizes for 3 subproblems. Be sure 16*GS < 512Kb
+    const size_t GENERATE_GS = 25000;
+    const size_t FINDEXT_GS  = 25000;
+    const size_t DIVIDE_GS   = 25000;
+};
+
+namespace util {
+    bool                     VERBOSE = false;
+    vector<string> OUTPUT;
+
+    // utility functionality
+    void ParseInputArgs(int argc, char* argv[]) {
+        int numArgs = 1;
+        if(argc>numArgs) {
+            char delim = ':';
+            if(!strcmp(argv[numArgs], "-h")) {
+                cout << " Program usage is:" << endl
+                    << " " << argv[0] << " [NP] [SNT" << delim << "ENT] [-v]"
+                    << endl << endl
+                    << " where:" << endl
+                    << " NP  - number of points" << endl
+                    << " SNT - start with this number of threads" << endl
+                    << " ENT - end with this number of threads" << endl
+                    << "  -v - turns verbose ON" << endl;
+                exit(0);
+            } else {
+                while(argc>numArgs) {
+                    char* endptr;
+                    if(!strcmp(argv[numArgs], "-v")) {
+                        VERBOSE = true;
+                    } else if(!strchr(argv[numArgs], delim)) {
+                        cfg::MAXPOINTS = strtol(argv[numArgs], &endptr, 0);
+                        if(*endptr!='\0') {
+                            cout << " wrong parameter format for Number of Points" << endl;
+                            exit(1);
+                        }
+                        if(cfg::MAXPOINTS<=0) {
+                            cout
+                                << "  wrong value set for Number of Points" << endl
+                                << "  using default value: " << endl
+                                << "  Number of Points = " << cfg::NP << endl;
+                            cfg::MAXPOINTS = cfg::NP;
+                        }
+                    } else {
+                        cfg::NUM_THREADS_START=(int)strtol(argv[numArgs], &endptr, 0);
+                        if(*endptr==delim) {
+                            cfg::NUM_THREADS_END = (int)strtol(endptr+1, &endptr, 0);
+                        } else {
+                            cout << " wrong parameter format for Number of Threads" << endl;
+                            exit(1);
+                        }
+                        if(*endptr!='\0') {
+                            cout << " wrong parameter format for Number of Threads" << endl;
+                            exit(1);
+                        }    
+                        if((cfg::NUM_THREADS_START<=0)
+                            || (cfg::NUM_THREADS_END<cfg::NUM_THREADS_START)) {
+                                cout
+                                    << "  wrong values set for Number of Threads" << endl
+                                    << "  using default values: " << endl
+                                    << "  start NT = " << cfg::SNT << endl
+                                    << "  end   NT = " << cfg::ENT << endl;
+                                cfg::NUM_THREADS_START=cfg::SNT;
+                                cfg::NUM_THREADS_END  =cfg::ENT;
+                        }
+                    }
+                    ++numArgs;
+                }
+            }
+        }
+    }
+
+    template <typename T>
+    struct point {
+        T x;
+        T y;
+        point() : x(T()), y(T()) {}
+        point(T _x, T _y) : x(_x), y(_y) {}
+        //why do we need below line? it fails to compile with suncc
+           //point(const point<T>& _P) : x(_P.x), y(_P.y) {} 
+       };
+
+    int random(unsigned int& rseed) {
+#if __linux__ || __APPLE__ || __FreeBSD__ 
+            return rand_r(&rseed);
+#elif _WIN32 || __sun
+            return rand();
+#else
+#error Unknown/unsupported OS?
+#endif // __linux__ || __APPLE__ || __FreeBSD__ 
+    }
+
+    template < typename T >
+    point<T> GenerateRNDPoint(size_t& count, unsigned int& rseed) {
+        /* generates random points on 2D plane so that the cluster
+        is somewhat circle shaped */
+        const size_t maxsize=500;
+        T x = random(rseed)*2.0/(double)RAND_MAX - 1;
+        T y = random(rseed)*2.0/(double)RAND_MAX - 1;
+        T r = (x*x + y*y);
+        if(r>1) {
+            count++;
+            if(count>10) {
+                if (random(rseed)/(double)RAND_MAX > 0.5)
+                    x /= r;
+                if (random(rseed)/(double)RAND_MAX > 0.5)
+                    y /= r;
+                count = 0;
+            }
+            else {
+                x /= r;
+                y /= r;
+            }
+        }
+
+        x = (x+1)*0.5*maxsize;
+        y = (y+1)*0.5*maxsize;
+
+        return point<T>(x,y);
+    }
+
+    template <typename Index>
+    struct edge {
+        Index start;
+        Index end;
+        edge(Index _p1, Index _p2) : start(_p1), end(_p2) {};
+    };
+
+    template <typename T>
+    ostream& operator <<(ostream& _ostr, point<T> _p) {
+        return _ostr << '(' << _p.x << ',' << _p.y << ')';
+    }
+
+    template <typename T>
+    istream& operator >>(istream& _istr, point<T> _p) {
+        return _istr >> _p.x >> _p.y;
+    }
+
+    template <typename T>
+    bool operator ==(point<T> p1, point<T> p2) {
+        return (p1.x == p2.x && p1.y == p2.y);
+    }
+
+    template <typename T>
+    bool operator !=(point<T> p1, point<T> p2) {
+        return !(p1 == p2);
+    }
+
+    template <typename T>
+    double cross_product(const point<T>& start, const point<T>& end1, const point<T>& end2) {
+        return ((end1.x-start.x)*(end2.y-start.y)-(end2.x-start.x)*(end1.y-start.y));
+    }
+
+    // Timing functions are based on TBB to always obtain wall-clock time
+    typedef tbb::tick_count my_time_t;
+
+    my_time_t gettime() {
+        return tbb::tick_count::now();
+    }
+
+    double time_diff(my_time_t start, my_time_t end) {
+        return (end-start).seconds();
+    }
+
+    void WriteResults(int nthreads, double initTime, double calcTime) {
+        if(VERBOSE) {
+            cout << " Step by step hull construction:" << endl;
+            for(size_t i = 0; i < OUTPUT.size(); ++i)
+                cout << OUTPUT[i] << endl;
+        }
+
+        cout
+            << "  Number of nodes:" << cfg::MAXPOINTS
+            << "  Number of threads:" << nthreads 
+            << "  Initialization time:" << setw(10) << setprecision(3) << initTime 
+            << "  Calculation time:" << setw(10) << setprecision(3) << calcTime
+            << endl;
+    }
+};
+
+#endif // __CONVEX_HULL_H__
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp
new file mode 100644 (file)
index 0000000..0150bb1
--- /dev/null
@@ -0,0 +1,633 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "convex_hull.h"
+
+typedef util::point<double> point_t;
+
+#define USETBB      1
+#define USECONCVEC  1
+#define INIT_ONCE   1
+
+#if !USETBB // Serial implementation of Quick Hull algorithm
+
+typedef std::vector< point_t > pointVec_t;
+
+// C++ style serial code
+
+class FillRNDPointsVector : public std::unary_function<point_t&, void> {
+    unsigned int rseed;
+    size_t       count;
+public:
+    FillRNDPointsVector() : rseed(1), count(0) {}
+
+    void operator()(point_t& p) {
+        p = util::GenerateRNDPoint<double>(count, rseed);
+    }
+};
+
+void initialize(pointVec_t &points) {
+    points.clear();
+    points.resize(cfg::MAXPOINTS);
+
+    std::for_each(points.begin(), points.end(), FillRNDPointsVector());
+}
+
+class FindXExtremum : public std::unary_function<const point_t&, void> {
+public:
+    typedef enum {
+        minX, maxX
+    } extremumType;
+
+    FindXExtremum(const point_t& frstPoint, extremumType exType_)
+        : extrXPoint(frstPoint), exType(exType_) {}
+
+    void operator()(const point_t& p) {
+        if(closerToExtremum(p))
+            extrXPoint = p;
+    }
+
+    operator point_t () {
+        return extrXPoint;
+    }
+
+private:
+    const extremumType   exType;
+    point_t              extrXPoint;
+
+    bool closerToExtremum(const point_t &p) const {
+        switch(exType) {
+        case minX:
+            return p.x<extrXPoint.x; break;
+        case maxX:
+            return p.x>extrXPoint.x; break;
+        }
+    }
+};
+
+template <FindXExtremum::extremumType type>
+point_t extremum(const pointVec_t &points) {
+    assert(!points.empty());
+    return std::for_each(points.begin(), points.end(), FindXExtremum(points[0], type));
+}
+
+class SplitByCP : public std::unary_function<const point_t&, void> {
+    pointVec_t          &reducedSet;
+    point_t              p1, p2;
+    point_t              farPoint;
+    double               howFar;
+public:
+
+    SplitByCP( point_t _p1, point_t _p2, pointVec_t &_reducedSet)
+        : p1(_p1), p2(_p2), reducedSet(_reducedSet), howFar(0), farPoint(p1) {}
+
+    void operator()(const point_t& p) {
+        double cp;
+        if( (p != p1) && (p != p2) ) {
+            cp = util::cross_product(p1, p2, p);
+            if(cp>0) {
+                reducedSet.push_back(p);
+                if(cp>howFar) {
+                    farPoint = p;
+                    howFar   = cp;
+                }
+            }
+        }
+    }
+
+    operator point_t (){
+        return farPoint;
+    }
+};
+
+point_t divide(const pointVec_t &P, pointVec_t &P_reduced, const point_t &p1, const point_t &p2) {
+    SplitByCP splitByCP(p1, p2, P_reduced);
+    point_t farPoint = std::for_each(P.begin(), P.end(), splitByCP);
+
+    if(util::VERBOSE) {
+        std::stringstream ss;
+        ss << P.size() << " nodes in bucket"<< ", "
+            << "dividing by: [ " << p1 << ", " << p2 << " ], "
+            << "farthest node: " << farPoint;
+        util::OUTPUT.push_back(ss.str());
+    }
+
+    return farPoint;
+}
+
+void divide_and_conquer(const pointVec_t &P, pointVec_t &H, point_t p1, point_t p2) {
+    if (P.size()<2) {
+        H.push_back(p1);
+        H.insert(H.end(), P.begin(), P.end());
+    }
+    else {
+        pointVec_t P_reduced;
+        pointVec_t H1, H2;
+        point_t p_far;
+
+        p_far = divide(P, P_reduced, p1, p2);
+
+        divide_and_conquer(P_reduced, H1, p1, p_far);
+        divide_and_conquer(P_reduced, H2, p_far, p2);
+
+        H.insert(H.end(), H1.begin(), H1.end());
+        H.insert(H.end(), H2.begin(), H2.end());
+    }
+}
+
+void quickhull(const pointVec_t &points, pointVec_t &hull) {
+    hull.clear();
+
+    point_t p_maxx = extremum<FindXExtremum::maxX>(points);
+    point_t p_minx = extremum<FindXExtremum::minX>(points);
+
+    pointVec_t H;
+
+    divide_and_conquer(points, hull, p_maxx, p_minx);
+    divide_and_conquer(points, H, p_minx, p_maxx);
+    hull.insert(hull.end(), H.begin(), H.end());
+}
+
+
+int main(int argc, char* argv[]) {
+    util::ParseInputArgs(argc, argv);
+
+    pointVec_t      points;
+    pointVec_t      hull;
+    util::my_time_t tm_init, tm_start, tm_end;
+
+    std::cout << "Starting serial version of QUICK HULL algorithm" << std::endl;
+
+    tm_init = util::gettime();
+    initialize(points);
+    tm_start = util::gettime();
+    quickhull(points, hull);
+    tm_end = util::gettime();
+
+    util::WriteResults(1, util::time_diff(tm_init, tm_start),
+        util::time_diff(tm_start, tm_end));
+}
+
+#else // USETBB - parallel version of Quick Hull algorithm
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/parallel_reduce.h"
+#include "tbb/blocked_range.h"
+
+typedef tbb::blocked_range<size_t> range_t;
+
+#if USECONCVEC
+#include "tbb/concurrent_vector.h"
+
+typedef tbb::concurrent_vector<point_t> pointVec_t;
+
+void appendVector(const point_t* src, size_t srcSize, pointVec_t& dest) {
+    std::copy(src, src + srcSize, dest.grow_by(srcSize));
+}
+
+void appendVector(const pointVec_t& src, pointVec_t& dest) {
+    std::copy(src.begin(), src.end(), dest.grow_by(src.size()));
+}
+
+#else // USE STD::VECTOR - include spin_mutex.h and lock vector operations
+#include "tbb/spin_mutex.h"
+
+typedef tbb::spin_mutex      mutex_t;
+typedef std::vector<point_t> pointVec_t;
+
+void appendVector(mutex_t& insertMutex, const pointVec_t& src, pointVec_t& dest) {
+    mutex_t::scoped_lock lock(insertMutex);
+    dest.insert(dest.end(), src.begin(), src.end());
+}
+
+void appendVector(mutex_t& insertMutex, const point_t* src, size_t srcSize,
+                  pointVec_t& dest) {
+    mutex_t::scoped_lock lock(insertMutex);
+    dest.insert(dest.end(), src, src + srcSize);
+}
+
+#endif // USECONCVEC
+
+class FillRNDPointsVector {
+    pointVec_t          &points;
+    mutable unsigned int rseed;
+public:
+    static const size_t  grainSize = cfg::GENERATE_GS;
+#if !USECONCVEC
+    static mutex_t       pushBackMutex;
+#endif // USECONCVEC
+    FillRNDPointsVector(pointVec_t& _points)
+        : points(_points), rseed(1) {}
+
+    FillRNDPointsVector(const FillRNDPointsVector& other)
+        : points(other.points), rseed(other.rseed+1) {}
+
+    void operator()(const range_t& range) const {
+        const size_t i_end = range.end();
+        size_t count = 0;
+        for(size_t i = range.begin(); i != i_end; ++i) {
+#if USECONCVEC
+            points.push_back(util::GenerateRNDPoint<double>(count, rseed));
+#else // Locked push_back to a not thread-safe STD::VECTOR
+            {
+                mutex_t::scoped_lock lock(pushBackMutex);
+                points.push_back(util::GenerateRNDPoint<double>(count, rseed));
+            }
+#endif // USECONCVEC
+        }
+    }
+};
+
+class FillRNDPointsVector_buf {
+    pointVec_t          &points;
+    mutable unsigned int rseed;
+public:
+    static const size_t  grainSize = cfg::GENERATE_GS;
+#if !USECONCVEC
+    static mutex_t       insertMutex;
+#endif // USECONCVEC
+
+    FillRNDPointsVector_buf(pointVec_t& _points)
+        : points(_points), rseed(1) {}
+
+    FillRNDPointsVector_buf(const FillRNDPointsVector_buf& other)
+        : points(other.points), rseed(other.rseed+1) {}
+
+    void operator()(const range_t& range) const {
+        const size_t i_end = range.end();
+        size_t count = 0, j = 0;
+        point_t tmp_vec[grainSize];
+        for(size_t i=range.begin(); i!=i_end; ++i) {
+            tmp_vec[j++] = util::GenerateRNDPoint<double>(count, rseed);
+        }
+#if USECONCVEC
+        appendVector(tmp_vec, j, points);
+#else // USE STD::VECTOR
+        appendVector(insertMutex, tmp_vec, j, points);
+#endif // USECONCVEC
+    }   
+};
+
+#if !USECONCVEC
+mutex_t FillRNDPointsVector::pushBackMutex   = mutex_t();
+mutex_t FillRNDPointsVector_buf::insertMutex = mutex_t();
+#endif
+
+template<typename BodyType>
+void initialize(pointVec_t &points) {
+    points.clear();
+
+    tbb::parallel_for(range_t(0, cfg::MAXPOINTS, BodyType::grainSize),
+                      BodyType(points), tbb::simple_partitioner());
+}
+
+class FindXExtremum {
+public:
+    typedef enum {
+        minX, maxX
+    } extremumType;
+
+    static const size_t  grainSize = cfg::FINDEXT_GS;
+
+    FindXExtremum(const pointVec_t& points_, extremumType exType_)
+        : points(points_), exType(exType_), extrXPoint(points[0]) {}
+
+    FindXExtremum(const FindXExtremum& fxex, tbb::split)
+        : points(fxex.points), exType(fxex.exType), extrXPoint(fxex.extrXPoint) {}
+
+    void operator()(const range_t& range) {
+        const size_t i_end = range.end();
+        if(!range.empty()) {
+            for(size_t i = range.begin(); i != i_end; ++i) {
+                if(closerToExtremum(points[i])) {
+                    extrXPoint = points[i];
+                }
+            }
+        }
+    }
+
+    void join(const FindXExtremum &rhs) {
+        if(closerToExtremum(rhs.extrXPoint)) {
+            extrXPoint = rhs.extrXPoint;
+        }
+    }
+
+    point_t extremeXPoint() {
+        return extrXPoint;
+    }
+
+private:
+    const pointVec_t    &points;
+    const extremumType   exType;
+    point_t              extrXPoint;
+    bool closerToExtremum(const point_t &p) const {
+        switch(exType) {
+        case minX:
+            return p.x<extrXPoint.x; break;
+        case maxX:
+            return p.x>extrXPoint.x; break;
+        }
+        return false; // avoid warning
+    }
+};
+
+template <FindXExtremum::extremumType type>
+point_t extremum(const pointVec_t &P) {
+    FindXExtremum fxBody(P, type);
+    tbb::parallel_reduce(range_t(0, P.size(), FindXExtremum::grainSize), fxBody);
+    return fxBody.extremeXPoint();
+}
+
+class SplitByCP {
+    const pointVec_t    &initialSet;
+    pointVec_t          &reducedSet;
+    point_t              p1, p2;
+    point_t              farPoint;
+    double               howFar;
+public:
+    static const size_t grainSize = cfg::DIVIDE_GS;
+#if !USECONCVEC
+    static mutex_t      pushBackMutex;
+#endif // USECONCVEC
+
+    SplitByCP( point_t _p1, point_t _p2,
+        const pointVec_t &_initialSet, pointVec_t &_reducedSet)
+        : p1(_p1), p2(_p2),
+        initialSet(_initialSet), reducedSet(_reducedSet),
+        howFar(0), farPoint(p1) {
+    }
+
+    SplitByCP( SplitByCP& sbcp, tbb::split )
+        : p1(sbcp.p1), p2(sbcp.p2),
+        initialSet(sbcp.initialSet), reducedSet(sbcp.reducedSet),
+        howFar(0), farPoint(p1) {}
+
+    void operator()( const range_t& range ) {
+        const size_t i_end = range.end();
+        double cp;
+        for(size_t i=range.begin(); i!=i_end; ++i) {
+            if( (initialSet[i] != p1) && (initialSet[i] != p2) ) {
+                cp = util::cross_product(p1, p2, initialSet[i]);
+                if(cp>0) {
+#if USECONCVEC
+                    reducedSet.push_back(initialSet[i]);
+#else // Locked push_back to a not thread-safe STD::VECTOR
+                    {
+                        mutex_t::scoped_lock lock(pushBackMutex);
+                        reducedSet.push_back(initialSet[i]);
+                    }
+#endif // USECONCVEC
+                    if(cp>howFar) {
+                        farPoint = initialSet[i];
+                        howFar   = cp;
+                    }
+                }
+            }
+        }
+    }
+
+    void join(const SplitByCP& rhs) {
+        if(rhs.howFar>howFar) {
+            howFar   = rhs.howFar;
+            farPoint = rhs.farPoint;
+        }
+    }
+
+    point_t farthestPoint() const {
+        return farPoint;
+    }
+};
+
+class SplitByCP_buf {
+    const pointVec_t    &initialSet;
+    pointVec_t          &reducedSet;
+    point_t              p1, p2;
+    point_t              farPoint;
+    double               howFar;
+public:
+    static const size_t  grainSize = cfg::DIVIDE_GS;
+#if !USECONCVEC
+    static mutex_t       insertMutex;
+#endif // USECONCVEC
+
+    SplitByCP_buf( point_t _p1, point_t _p2,
+        const pointVec_t &_initialSet, pointVec_t &_reducedSet)
+        : p1(_p1), p2(_p2),
+        initialSet(_initialSet), reducedSet(_reducedSet),
+        howFar(0), farPoint(p1) {}
+
+    SplitByCP_buf(SplitByCP_buf& sbcp, tbb::split)
+        : p1(sbcp.p1), p2(sbcp.p2),
+        initialSet(sbcp.initialSet), reducedSet(sbcp.reducedSet),
+        howFar(0), farPoint(p1) {}
+
+    void operator()(const range_t& range) {
+        const size_t i_end = range.end();
+        size_t j = 0;
+        double cp;
+        point_t tmp_vec[grainSize];
+        for(size_t i = range.begin(); i != i_end; ++i) {
+            if( (initialSet[i] != p1) && (initialSet[i] != p2) ) {            
+                cp = util::cross_product(p1, p2, initialSet[i]);
+                if(cp>0) {
+                    tmp_vec[j++] = initialSet[i];
+                    if(cp>howFar) {
+                        farPoint = initialSet[i];
+                        howFar   = cp;
+                    }
+                }
+            }
+        }
+
+#if USECONCVEC
+        appendVector(tmp_vec, j, reducedSet);
+#else // USE STD::VECTOR
+        appendVector(insertMutex, tmp_vec, j, reducedSet);
+#endif // USECONCVEC
+    }
+
+    void join(const SplitByCP_buf& rhs) {
+        if(rhs.howFar>howFar) {
+            howFar   = rhs.howFar;
+            farPoint = rhs.farPoint;
+        }
+    }
+
+    point_t farthestPoint() const {
+        return farPoint;
+    }
+};
+
+#if !USECONCVEC
+mutex_t SplitByCP::pushBackMutex   = mutex_t();
+mutex_t SplitByCP_buf::insertMutex = mutex_t();
+#endif
+
+template <typename BodyType>
+point_t divide(const pointVec_t &P, pointVec_t &P_reduced,
+              const point_t &p1, const point_t &p2) {
+    BodyType body(p1, p2, P, P_reduced);
+    tbb::parallel_reduce(range_t(0, P.size(), BodyType::grainSize),
+                         body, tbb::simple_partitioner() );
+
+    if(util::VERBOSE) {
+        std::stringstream ss;
+        ss << P.size() << " nodes in bucket"<< ", "
+            << "dividing by: [ " << p1 << ", " << p2 << " ], "
+            << "farthest node: " << body.farthestPoint();
+        util::OUTPUT.push_back(ss.str());
+    }
+
+    return body.farthestPoint();
+}
+
+void divide_and_conquer(const pointVec_t &P, pointVec_t &H,
+                        point_t p1, point_t p2, bool buffered) {
+    if (P.size()<2) {
+        H.push_back(p1);
+#if USECONCVEC
+        appendVector(P, H);
+#else // insert into STD::VECTOR
+        H.insert(H.end(), P.begin(), P.end());
+#endif
+    }
+    else {
+        pointVec_t P_reduced;
+        pointVec_t H1, H2;
+        point_t p_far;
+
+        if(buffered) {
+            p_far = divide<SplitByCP_buf>(P, P_reduced, p1, p2);
+        } else {
+            p_far = divide<SplitByCP>(P, P_reduced, p1, p2);
+        }
+
+        divide_and_conquer(P_reduced, H1, p1, p_far, buffered);
+        divide_and_conquer(P_reduced, H2, p_far, p2, buffered);
+
+#if USECONCVEC
+        appendVector(H1, H);
+        appendVector(H2, H);
+#else // insert into STD::VECTOR
+        H.insert(H.end(), H1.begin(), H1.end());
+        H.insert(H.end(), H2.begin(), H2.end());
+#endif
+    }
+}
+
+void quickhull(const pointVec_t &points, pointVec_t &hull, bool buffered) {
+    hull.clear();
+
+    point_t p_maxx = extremum<FindXExtremum::maxX>(points);
+    point_t p_minx = extremum<FindXExtremum::minX>(points);
+
+    pointVec_t H;
+
+    divide_and_conquer(points, hull, p_maxx, p_minx, buffered);
+    divide_and_conquer(points, H, p_minx, p_maxx, buffered);
+#if USECONCVEC
+    appendVector(H, hull);
+#else // STD::VECTOR
+    hull.insert(hull.end(), H.begin(), H.end());
+#endif // USECONCVEC
+}
+
+int main(int argc, char* argv[]) {
+    util::ParseInputArgs(argc, argv);
+
+    pointVec_t      points;
+    pointVec_t      hull;
+    int             nthreads;
+    util::my_time_t tm_init, tm_start, tm_end;
+    pointVec_t      tmp_points;
+
+#if USECONCVEC
+    std::cout << "Starting TBB unbufferred push_back version of QUICK HULL algorithm" << std::endl;
+#else
+    std::cout << "Starting STL locked unbufferred push_back version of QUICK HULL algorithm" << std::endl;
+#endif // USECONCVEC
+
+    for(nthreads=cfg::NUM_THREADS_START; nthreads<=cfg::NUM_THREADS_END;
+        ++nthreads) {
+        tbb::task_scheduler_init init(nthreads);
+#if INIT_ONCE
+        if(nthreads==cfg::NUM_THREADS_START) {
+            tm_init = util::gettime();
+            initialize<FillRNDPointsVector>(points);
+        }
+        else /* timing generation for stats, but use original data set */ {
+            tm_init = util::gettime();
+            initialize<FillRNDPointsVector>(tmp_points);
+        }
+#else
+        tm_init = util::gettime();
+        initialize<FillRNDPointsVector>(points);
+#endif // INIT_ONCE
+        tm_start = util::gettime();
+        quickhull(points, hull, false);
+        tm_end = util::gettime();
+
+        util::WriteResults(nthreads, util::time_diff(tm_init, tm_start),
+            util::time_diff(tm_start, tm_end));
+    }
+
+#if USECONCVEC 
+    std::cout << "Starting TBB bufferred version of QUICK HULL algorithm" << std::endl;
+#else
+    std::cout << "Starting STL locked bufferred version of QUICK HULL algorithm" << std::endl;
+#endif
+
+    for(nthreads=cfg::NUM_THREADS_START; nthreads<=cfg::NUM_THREADS_END;
+        ++nthreads) {
+        tbb::task_scheduler_init init(nthreads);
+#if INIT_ONCE
+        if(nthreads==cfg::NUM_THREADS_START) {
+            tm_init = util::gettime();
+            initialize<FillRNDPointsVector_buf>(points);
+        }
+        else /* timing generation for stats, but use original data set */ {
+            tm_init = util::gettime();
+            initialize<FillRNDPointsVector_buf>(tmp_points);
+        }
+#else
+        tm_init = util::gettime();
+        initialize<FillRNDPointsVector_buf>(points);
+#endif // INIT_ONCE
+        tm_start = util::gettime();
+        quickhull(points, hull, true);
+        tm_end = util::gettime();
+
+        util::WriteResults(nthreads, util::time_diff(tm_init, tm_start),
+            util::time_diff(tm_start, tm_end));
+    }    
+
+    return 0;
+}
+
+#endif // USETBB
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp
new file mode 100644 (file)
index 0000000..c0204f7
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "convex_hull.h"
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/blocked_range.h"
+#include "tbb/parallel_for.h"
+#include "tbb/parallel_reduce.h"
+#include "tbb/tick_count.h"
+#include "tbb/concurrent_vector.h"
+
+typedef util::point<double>               point_t;
+typedef tbb::concurrent_vector< point_t > pointVec_t;
+typedef tbb::blocked_range<size_t>        range_t;
+
+void appendVector(const point_t* src, size_t srcSize, pointVec_t& dest) {
+    std::copy(src, src + srcSize, dest.grow_by(srcSize));
+}
+
+void appendVector(const pointVec_t& src, pointVec_t& dest) {
+    std::copy(src.begin(), src.end(), dest.grow_by(src.size()));
+}
+
+class FillRNDPointsVector_buf {
+    pointVec_t          &points;
+    mutable unsigned int rseed;
+public:
+    static const size_t  grainSize = cfg::GENERATE_GS;
+
+    FillRNDPointsVector_buf(pointVec_t& _points)
+        : points(_points), rseed(1) {}
+
+    FillRNDPointsVector_buf(const FillRNDPointsVector_buf& other)
+        : points(other.points), rseed(other.rseed+1) {}
+
+    void operator()(const range_t& range) const {
+        const size_t i_end = range.end();
+        size_t count = 0, j = 0;
+        point_t tmp_vec[grainSize];
+        for(size_t i=range.begin(); i!=i_end; ++i) {
+            tmp_vec[j++] = util::GenerateRNDPoint<double>(count, rseed);
+        }
+        appendVector(tmp_vec, j, points);
+    }
+};
+
+void initialize_buf(pointVec_t &points) {
+    points.clear();
+
+    tbb::parallel_for(range_t(0, cfg::MAXPOINTS,
+        FillRNDPointsVector_buf::grainSize), FillRNDPointsVector_buf(points));
+}
+
+class FindXExtremum {
+public:
+    typedef enum {
+        minX, maxX
+    } extremumType;
+
+    static const size_t  grainSize = cfg::FINDEXT_GS;
+
+    FindXExtremum(const pointVec_t& points_, extremumType exType_)
+        : points(points_), exType(exType_), extrXPoint(points[0]) {}
+
+    FindXExtremum(const FindXExtremum& fxex, tbb::split)
+        : points(fxex.points), exType(fxex.exType), extrXPoint(fxex.extrXPoint) {}
+
+    void operator()(const range_t& range) {
+        const size_t i_end = range.end();
+        if(!range.empty()) {
+            for(size_t i = range.begin(); i != i_end; ++i) {
+                if(closerToExtremum(points[i])) {
+                    extrXPoint = points[i];
+                }
+            }
+        }
+    }
+
+    void join(const FindXExtremum &rhs) {
+        if(closerToExtremum(rhs.extrXPoint)) {
+            extrXPoint = rhs.extrXPoint;
+        }
+    }
+
+    point_t extremeXPoint() {
+        return extrXPoint;
+    }
+
+private:
+    const pointVec_t    &points;
+    const extremumType   exType;
+    point_t              extrXPoint;
+    bool closerToExtremum(const point_t &p) const {
+        switch(exType) {
+        case minX:
+            return p.x<extrXPoint.x; break;
+        case maxX:
+            return p.x>extrXPoint.x; break;
+        }
+        return false; // avoid warning
+    }
+};
+
+template <FindXExtremum::extremumType type>
+point_t extremum(const pointVec_t &P) {
+    FindXExtremum fxBody(P, type);
+    tbb::parallel_reduce(range_t(0, P.size(), FindXExtremum::grainSize), fxBody);
+    return fxBody.extremeXPoint();
+}
+
+class SplitByCP_buf {
+    const pointVec_t    &initialSet;
+    pointVec_t          &reducedSet;
+    point_t              p1, p2;
+    point_t              farPoint;
+    double               howFar;
+public:
+    static const size_t  grainSize = cfg::DIVIDE_GS;
+
+    SplitByCP_buf( point_t _p1, point_t _p2,
+        const pointVec_t &_initialSet, pointVec_t &_reducedSet)
+        : p1(_p1), p2(_p2),
+        initialSet(_initialSet), reducedSet(_reducedSet),
+        howFar(0), farPoint(p1) {}
+
+    SplitByCP_buf(SplitByCP_buf& sbcp, tbb::split)
+        : p1(sbcp.p1), p2(sbcp.p2),
+        initialSet(sbcp.initialSet), reducedSet(sbcp.reducedSet),
+        howFar(0), farPoint(p1) {}
+
+    void operator()(const range_t& range) {
+        const size_t i_end = range.end();
+        size_t j = 0;
+        double cp;
+        point_t tmp_vec[grainSize];
+        for(size_t i = range.begin(); i != i_end; ++i) {
+            if( (initialSet[i] != p1) && (initialSet[i] != p2) ) {            
+                cp = util::cross_product(p1, p2, initialSet[i]);
+                if(cp>0) {
+                    tmp_vec[j++] = initialSet[i];
+                    if(cp>howFar) {
+                        farPoint = initialSet[i];
+                        howFar   = cp;
+                    }
+                }
+            }
+        }
+
+        appendVector(tmp_vec, j, reducedSet);
+    }
+
+    void join(const SplitByCP_buf& rhs) {
+        if(rhs.howFar>howFar) {
+            howFar   = rhs.howFar;
+            farPoint = rhs.farPoint;
+        }
+    }
+
+    point_t farthestPoint() const {
+        return farPoint;
+    }
+};
+
+point_t divide_buf(const pointVec_t &P, pointVec_t &P_reduced, 
+                  const point_t &p1, const point_t &p2) {
+    SplitByCP_buf sbcpb(p1, p2, P, P_reduced);
+    tbb::parallel_reduce(range_t(0, P.size(), SplitByCP_buf::grainSize), sbcpb);
+
+    if(util::VERBOSE) {
+        std::stringstream ss;
+        ss << P.size() << " nodes in bucket"<< ", "
+            << "dividing by: [ " << p1 << ", " << p2 << " ], "
+            << "farthest node: " << sbcpb.farthestPoint();
+        util::OUTPUT.push_back(ss.str());
+    }
+
+    return sbcpb.farthestPoint();
+}
+
+void divide_and_conquer_buf(const pointVec_t &P, pointVec_t &H,
+                            point_t p1, point_t p2) {
+    if (P.size()<2) {
+        H.push_back(p1);
+        appendVector(P, H);
+    }
+    else {
+        pointVec_t P_reduced;
+        pointVec_t H1, H2;
+
+        point_t p_far = divide_buf(P, P_reduced, p1, p2);
+
+        divide_and_conquer_buf(P_reduced, H1, p1, p_far);
+        divide_and_conquer_buf(P_reduced, H2, p_far, p2);
+
+        appendVector(H1, H);
+        appendVector(H2, H);
+    }
+}
+
+void quickhull_buf(const pointVec_t &points, pointVec_t &hull) {
+    hull.clear();
+
+    point_t p_maxx = extremum<FindXExtremum::maxX>(points);
+    point_t p_minx = extremum<FindXExtremum::minX>(points);
+
+    pointVec_t H;
+
+    divide_and_conquer_buf(points, hull, p_maxx, p_minx);
+    divide_and_conquer_buf(points, H, p_minx, p_maxx);
+
+    appendVector(H, hull);
+}
+
+int main(int argc, char* argv[]) {
+    util::ParseInputArgs(argc, argv);
+
+    pointVec_t      points;
+    pointVec_t      hull;
+    int             nthreads;
+    util::my_time_t tm_init, tm_start, tm_end;
+
+    std::cout << " Starting TBB-bufferred version of QUICK HULL algorithm" << std::endl;
+
+    for(nthreads=cfg::NUM_THREADS_START; nthreads<=cfg::NUM_THREADS_END;
+        ++nthreads) {
+        tbb::task_scheduler_init init(nthreads);
+        tm_init = util::gettime();
+        initialize_buf(points);
+        tm_start = util::gettime();
+        quickhull_buf(points, hull);
+        tm_end = util::gettime();
+
+        util::WriteResults(nthreads, util::time_diff(tm_init, tm_start),
+            util::time_diff(tm_start, tm_end));
+    }
+
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/index.html
new file mode 100644 (file)
index 0000000..3038b45
--- /dev/null
@@ -0,0 +1,57 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Parallel version of convex hull algorithm (quick hull).
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="convex_hull_sample.cpp">convex_hull_sample.cpp</A>
+<DD>Source code for TBB version of example.
+<DT><A HREF="convex_hull_bench.cpp">convex_hull_bench.cpp</A>
+<DD>Source code for version of example that compares serial and TBB buffered and unbuffered implementations.
+<DT><A HREF="convex_hull.h">convex_hull.h</A>
+<DD>Include file for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>convex_hull_sample [<I>S</I>] [<I>M</I>[:<I>N</I>]] [-v]</TT>
+<DD><I>S</I> is the number of points (problem size).
+    <I>M:N</I> are a range of numbers of threads to be used.
+    Use the -v option to turn on verbose output.
+<DT>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+    (see the <A HREF=../../index.html#build>build directions</A>).
+    <BR>Run it with a small problem size and the desired number of threads, e.g., <TT>convex_hull_sample 500000 4</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc7.1/convex_hull.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc7.1/convex_hull.sln
new file mode 100644 (file)
index 0000000..429292e
--- /dev/null
@@ -0,0 +1,32 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_bench", "convex_hull_bench.vcproj", "{6DF21C04-95F4-4FF0-89F3-3688888E10D5}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_sample", "convex_hull_sample.vcproj", "{B4A47D64-981B-4167-AE3D-CDAA8E18D2B3}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               Debug = Debug
+               Release = Release
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {6DF21C04-95F4-4FF0-89F3-3688888E10D5}.Debug.ActiveCfg = Debug|Win32
+               {6DF21C04-95F4-4FF0-89F3-3688888E10D5}.Debug.Build.0 = Debug|Win32
+               {6DF21C04-95F4-4FF0-89F3-3688888E10D5}.Release.ActiveCfg = Release|Win32
+               {6DF21C04-95F4-4FF0-89F3-3688888E10D5}.Release.Build.0 = Release|Win32
+               {B4A47D64-981B-4167-AE3D-CDAA8E18D2B3}.Debug.ActiveCfg = Debug|Win32
+               {B4A47D64-981B-4167-AE3D-CDAA8E18D2B3}.Debug.Build.0 = Debug|Win32
+               {B4A47D64-981B-4167-AE3D-CDAA8E18D2B3}.Release.ActiveCfg = Release|Win32
+               {B4A47D64-981B-4167-AE3D-CDAA8E18D2B3}.Release.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(SolutionItems) = postSolution
+               ..\index.html = ..\index.html
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc7.1/convex_hull.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc7.1/convex_hull.suo
new file mode 100644 (file)
index 0000000..601009e
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc7.1/convex_hull.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_bench.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_bench.vcproj
new file mode 100644 (file)
index 0000000..c9f8f34
--- /dev/null
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="convex_hull_bench"
+       ProjectGUID="{6DF21C04-95F4-4FF0-89F3-3688888E10D5}"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\convex_hull_bench.cpp">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+                       <File
+                               RelativePath="..\convex_hull.h">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_sample.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_sample.vcproj
new file mode 100644 (file)
index 0000000..6206b05
--- /dev/null
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="convex_hull_sample"
+       ProjectGUID="{B4A47D64-981B-4167-AE3D-CDAA8E18D2B3}"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\convex_hull_sample.cpp">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+                       <File
+                               RelativePath="..\convex_hull.h">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc8/convex_hull.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc8/convex_hull.sln
new file mode 100644 (file)
index 0000000..e567081
--- /dev/null
@@ -0,0 +1,35 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_benchmark", "convex_hull_benchmark.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_sample", "convex_hull_sample.vcproj", "{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|Win32.ActiveCfg = Debug|Win32
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|Win32.Build.0 = Debug|Win32
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|x64.ActiveCfg = Debug|x64
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|x64.Build.0 = Debug|x64
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|Win32.ActiveCfg = Release|Win32
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|Win32.Build.0 = Release|Win32
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|x64.ActiveCfg = Release|x64
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc8/convex_hull.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc8/convex_hull.suo
new file mode 100644 (file)
index 0000000..2e4ad4c
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc8/convex_hull.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc8/convex_hull_benchmark.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc8/convex_hull_benchmark.vcproj
new file mode 100644 (file)
index 0000000..9ae029b
--- /dev/null
@@ -0,0 +1,366 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="convex_hull_benchmark"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+       RootNamespace="convex_hull_benchmark"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="3"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="3"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\convex_hull_bench.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header files"
+                       >
+                       <File
+                               RelativePath="..\convex_hull.h"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc8/convex_hull_sample.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc8/convex_hull_sample.vcproj
new file mode 100644 (file)
index 0000000..df911b4
--- /dev/null
@@ -0,0 +1,364 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="convex_hull_sample"
+       ProjectGUID="{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}"
+       RootNamespace="convex_hull_sample"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="3"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="3"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\convex_hull_sample.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+                       <File
+                               RelativePath="..\convex_hull.h"
+                               >
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc9/convex_hull.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc9/convex_hull.sln
new file mode 100644 (file)
index 0000000..86067a1
--- /dev/null
@@ -0,0 +1,35 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_benchmark", "convex_hull_benchmark.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_sample", "convex_hull_sample.vcproj", "{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|Win32.ActiveCfg = Debug|Win32
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|Win32.Build.0 = Debug|Win32
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|x64.ActiveCfg = Debug|x64
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|x64.Build.0 = Debug|x64
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|Win32.ActiveCfg = Release|Win32
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|Win32.Build.0 = Release|Win32
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|x64.ActiveCfg = Release|x64
+               {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc9/convex_hull.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc9/convex_hull.suo
new file mode 100644 (file)
index 0000000..018a5f2
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc9/convex_hull.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc9/convex_hull_benchmark.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc9/convex_hull_benchmark.vcproj
new file mode 100644 (file)
index 0000000..9b8127c
--- /dev/null
@@ -0,0 +1,363 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="convex_hull_benchmark"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+       RootNamespace="convex_hull_benchmark"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="3"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="3"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\convex_hull_bench.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header files"
+                       >
+                       <File
+                               RelativePath="..\convex_hull.h"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc9/convex_hull_sample.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/vc9/convex_hull_sample.vcproj
new file mode 100644 (file)
index 0000000..d0494d7
--- /dev/null
@@ -0,0 +1,361 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="convex_hull_sample"
+       ProjectGUID="{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}"
+       RootNamespace="convex_hull_sample"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="3"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="3"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy /Y &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\convex_hull_sample.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+                       <File
+                               RelativePath="..\convex_hull.h"
+                               >
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..7c7f7d5
--- /dev/null
@@ -0,0 +1,434 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 42;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               A146114A0B94631F000C6B18 /* convex_hull_bench.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14611490B94631F000C6B18 /* convex_hull_bench.cpp */; };
+               A1F593A60B8F042A00073279 /* convex_hull_sample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* convex_hull_sample.cpp */; };
+               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F594FC0B8F4F1000073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F594FD0B8F4F1800073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+               8DD76F690486A84900D96B5E /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 12;
+                       dstPath = "";
+                       dstSubfolderSpec = 16;
+                       files = (
+                               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               A1F594F40B8F4E7700073279 /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = "";
+                       dstSubfolderSpec = 16;
+                       files = (
+                               A1F594FD0B8F4F1800073279 /* libtbb.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+               A14611490B94631F000C6B18 /* convex_hull_bench.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = convex_hull_bench.cpp; path = ../convex_hull_bench.cpp; sourceTree = SOURCE_ROOT; };
+               A146114C0B9463CB000C6B18 /* convex_hull.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = convex_hull.h; path = ../convex_hull.h; sourceTree = SOURCE_ROOT; };
+               A1F593A50B8F042A00073279 /* convex_hull_sample.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = convex_hull_sample.cpp; path = ../convex_hull_sample.cpp; sourceTree = SOURCE_ROOT; };
+               A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+               A1F594EB0B8F4B5600073279 /* convex_hull_bench */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = convex_hull_bench; sourceTree = BUILT_PRODUCTS_DIR; };
+               A1F594FA0B8F4EE000073279 /* convex_hull_sample */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = convex_hull_sample; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               8DD76F660486A84900D96B5E /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               A1F594E90B8F4B5600073279 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F594FC0B8F4F1000073279 /* libtbb.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               08FB7794FE84155DC02AAC07 /* convex_hull */ = {
+                       isa = PBXGroup;
+                       children = (
+                               08FB7795FE84155DC02AAC07 /* Source */,
+                               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+                               1AB674ADFE9D54B511CA2CBB /* Products */,
+                       );
+                       name = convex_hull;
+                       sourceTree = "<group>";
+               };
+               08FB7795FE84155DC02AAC07 /* Source */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A146114C0B9463CB000C6B18 /* convex_hull.h */,
+                               A14611490B94631F000C6B18 /* convex_hull_bench.cpp */,
+                               A1F593A50B8F042A00073279 /* convex_hull_sample.cpp */,
+                       );
+                       name = Source;
+                       sourceTree = "<group>";
+               };
+               1AB674ADFE9D54B511CA2CBB /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F594EB0B8F4B5600073279 /* convex_hull_bench */,
+                               A1F594FA0B8F4EE000073279 /* convex_hull_sample */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F593B30B8F06F900073279 /* libtbb.dylib */,
+                       );
+                       name = "External Frameworks and Libraries";
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+               8DD76F620486A84900D96B5E /* convex_hull_sample */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "convex_hull_sample" */;
+                       buildPhases = (
+                               8DD76F640486A84900D96B5E /* Sources */,
+                               8DD76F660486A84900D96B5E /* Frameworks */,
+                               8DD76F690486A84900D96B5E /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = convex_hull_sample;
+                       productInstallPath = "$(HOME)/bin";
+                       productName = convex_hull;
+                       productReference = A1F594FA0B8F4EE000073279 /* convex_hull_sample */;
+                       productType = "com.apple.product-type.tool";
+               };
+               A1F594EA0B8F4B5600073279 /* convex_hull_bench */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = A1F594EE0B8F4B8200073279 /* Build configuration list for PBXNativeTarget "convex_hull_bench" */;
+                       buildPhases = (
+                               A1F594E80B8F4B5600073279 /* Sources */,
+                               A1F594E90B8F4B5600073279 /* Frameworks */,
+                               A1F594F40B8F4E7700073279 /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = convex_hull_bench;
+                       productName = convex_hull_bench;
+                       productReference = A1F594EB0B8F4B5600073279 /* convex_hull_bench */;
+                       productType = "com.apple.product-type.tool";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               08FB7793FE84155DC02AAC07 /* Project object */ = {
+                       isa = PBXProject;
+                       buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "convex_hull" */;
+                       hasScannedForEncodings = 1;
+                       mainGroup = 08FB7794FE84155DC02AAC07 /* convex_hull */;
+                       projectDirPath = "";
+                       targets = (
+                               8DD76F620486A84900D96B5E /* convex_hull_sample */,
+                               A1F594EA0B8F4B5600073279 /* convex_hull_bench */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+               8DD76F640486A84900D96B5E /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593A60B8F042A00073279 /* convex_hull_sample.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               A1F594E80B8F4B5600073279 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A146114A0B94631F000C6B18 /* convex_hull_bench.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+               1DEB923208733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = convex_hull_sample;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug;
+               };
+               1DEB923308733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = convex_hull_sample;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               1DEB923608733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug;
+               };
+               1DEB923708733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release;
+               };
+               A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = convex_hull_sample;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug64;
+               };
+               A1F593C70B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = convex_hull_sample;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release64;
+               };
+               A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug64;
+               };
+               A1F593C90B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release64;
+               };
+               A1F594EF0B8F4B8200073279 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = convex_hull_bench;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug;
+               };
+               A1F594F00B8F4B8200073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = convex_hull_bench;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug64;
+               };
+               A1F594F10B8F4B8200073279 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = YES;
+                               GCC_ENABLE_FIX_AND_CONTINUE = NO;
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = convex_hull_bench;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               A1F594F20B8F4B8200073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_ENABLE_FIX_AND_CONTINUE = NO;
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = convex_hull_bench;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release64;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "convex_hull_sample" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923208733DC60010E9CD /* Debug */,
+                               A1F593C60B8F0E6E00073279 /* Debug64 */,
+                               1DEB923308733DC60010E9CD /* Release */,
+                               A1F593C70B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "convex_hull" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923608733DC60010E9CD /* Debug */,
+                               A1F593C80B8F0E6E00073279 /* Debug64 */,
+                               1DEB923708733DC60010E9CD /* Release */,
+                               A1F593C90B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               A1F594EE0B8F4B8200073279 /* Build configuration list for PBXNativeTarget "convex_hull_bench" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               A1F594EF0B8F4B8200073279 /* Debug */,
+                               A1F594F00B8F4B8200073279 /* Debug64 */,
+                               A1F594F10B8F4B8200073279 /* Release */,
+                               A1F594F20B8F4B8200073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/index.html
new file mode 100644 (file)
index 0000000..6843c14
--- /dev/null
@@ -0,0 +1,27 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of the template <code>parallel_reduce</code>.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="convex_hull/index.html">convex_hull</A>
+<DD>Parallel version of convex hull algorithm (quick hull).
+<DT><A HREF="primes/index.html">primes</A>
+<DD>Parallel version of the Sieve of Eratosthenes.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/Makefile
new file mode 100644 (file)
index 0000000..9524ba5
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=primes
+ARGS=100000000 0:4
+
+# The C++ compiler
+#CXX=g++
+
+all:   release test
+
+release: *.cpp
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
+
+debug: *.cpp
+       $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+
+clean:
+       $(RM) $(PROG) *.o *.d
+
+test:
+       ./$(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/Makefile.windows
new file mode 100644 (file)
index 0000000..444696d
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Primes
+ARGS=100000000 0:4
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+release:
+       $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+debug:
+       $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+clean:
+       @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+       $(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/index.html
new file mode 100644 (file)
index 0000000..d3e7a88
--- /dev/null
@@ -0,0 +1,54 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Parallel version of the Sieve of Eratosthenes.
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="primes.cpp">primes.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>primes [<I>S</I>] [<I>M</I>[:<I>N</I>]] [<I>G</I>]</TT>
+<DD><I>S</I> is the problem size (number of primes).
+    <I>M</I> and <I>N</I> are a range of numbers of threads to be used.
+    <I>G</I> is an optional grain size.
+<DT>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+    (see the <A HREF=../../index.html#build>build directions</A>).
+    <BR>Run it with a small problem size and the desired number of threads, e.g., <TT>primes 100000 4</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/primes.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/primes.cpp
new file mode 100644 (file)
index 0000000..55ddfa1
--- /dev/null
@@ -0,0 +1,403 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Example program that computes number of prime numbers up to n, 
+// where n is a command line argument.  The algorithm here is a 
+// fairly efficient version of the sieve of Eratosthenes. 
+// The parallel version demonstrates how to use parallel_reduce,
+// and in particular how to exploit lazy splitting.
+
+#include <cassert>
+#include <cstdio>
+#include <cstring>
+#include <math.h>
+#include <cstdlib>
+#include <cctype>
+#include "tbb/parallel_reduce.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+
+using namespace std;
+using namespace tbb;
+
+typedef unsigned long Number;
+
+//! If true, then print primes on stdout.
+static bool PrintPrimes = false;
+
+//! Grainsize parameter
+static Number GrainSize = 1000;
+
+class Multiples {
+    inline Number strike( Number start, Number limit, Number stride ) {
+        // Hoist "my_is_composite" into register for sake of speed.
+        bool* is_composite = my_is_composite;
+        assert( stride>=2 );
+        for( ;start<limit; start+=stride ) 
+            is_composite[start] = true;
+        return start;
+    }
+    //! Window into conceptual sieve 
+    bool* my_is_composite;
+
+    //! Indexes into window
+    /** my_striker[k] is an index into my_composite corresponding to
+        an odd multiple multiple of my_factor[k]. */
+    Number* my_striker;
+
+    //! Prime numbers less than m.
+    Number* my_factor;
+public:
+    //! Number of factors in my_factor.
+    Number n_factor;
+    Number m;
+    Multiples( Number n ) : 
+        is_forked_copy(false) 
+    {
+        m = Number(sqrt(double(n)));
+        // Round up to even
+        m += m&1;
+        my_is_composite = new bool[m/2];
+        my_striker = new Number[m/2];
+        my_factor = new Number[m/2];
+        n_factor = 0;
+        memset( my_is_composite, 0, m/2 );
+        for( Number i=3; i<m; i+=2 ) {
+            if( !my_is_composite[i/2] ) {
+                if( PrintPrimes )
+                    printf("%d\n",(int)i);
+                my_striker[n_factor] = strike( i/2, m/2, i );
+                my_factor[n_factor++] = i;
+            }
+        }
+    }
+
+    //! Find primes in range [start,window_size), advancing my_striker as we go.
+    /** Returns number of primes found. */
+    Number find_primes_in_window( Number start, Number window_size ) {
+        bool* is_composite = my_is_composite;
+        memset( is_composite, 0, window_size/2 );
+        for( size_t k=0; k<n_factor; ++k )
+            my_striker[k] = strike( my_striker[k]-m/2, window_size/2, my_factor[k] );
+        Number count = 0;
+        for( Number k=0; k<window_size/2; ++k ) {
+            if( !is_composite[k] ) {
+                if( PrintPrimes )
+                    printf("%ld\n",long(start+2*k+1));
+                ++count;
+            }
+        }
+        return count;
+    }
+
+    ~Multiples() {
+        if( !is_forked_copy )
+            delete[] my_factor;
+        delete[] my_striker;
+        delete[] my_is_composite;
+    }
+
+    //------------------------------------------------------------------------
+    // Begin extra members required by parallel version
+    //------------------------------------------------------------------------
+
+    //! True if this instance was forked from another instance.
+    const bool is_forked_copy;
+
+    Multiples( const Multiples& f, split ) :
+        n_factor(f.n_factor),
+        m(f.m),
+        my_is_composite(NULL),
+        my_striker(NULL),
+        my_factor(f.my_factor),
+        is_forked_copy(true)
+    {}
+
+    bool is_initialized() const {
+        return my_is_composite!=NULL;
+    }
+
+    void initialize( Number start ) { 
+        assert( start>=1 );
+        my_is_composite = new bool[m/2];
+        my_striker = new Number[m/2];
+        for( size_t k=0; k<n_factor; ++k ) {
+            Number f = my_factor[k];
+            Number p = (start-1)/f*f % m;
+            my_striker[k] = (p&1 ? p+2*f : p+f)/2;
+            assert( m/2<=my_striker[k] );
+        }
+    }
+    //------------------------------------------------------------------------
+    // End extra methods required by parallel version
+    //------------------------------------------------------------------------
+};
+
+//! Count number of primes between 0 and n
+/** This is the serial version. */
+Number SerialCountPrimes( Number n ) {
+    // Two is special case
+    Number count = n>=2;
+    if( n>=3 ) {
+        Multiples multiples(n);
+        count += multiples.n_factor;
+        if( PrintPrimes ) 
+            printf("---\n");
+        Number window_size = multiples.m;
+        for( Number j=multiples.m; j<=n; j+=window_size ) { 
+            if( j+window_size>n+1 ) 
+                window_size = n+1-j;
+            count += multiples.find_primes_in_window( j, window_size );
+        }
+    }
+    return count;
+}
+
+//! Range of a sieve window.
+class SieveRange {
+    //! Width of full-size window into sieve.
+    const Number my_stride;
+
+    //! Always multiple of my_stride
+    Number my_begin;
+
+    //! One past last number in window.
+    Number my_end;
+
+    //! Width above which it is worth forking.
+    const Number my_grainsize;
+
+    bool assert_okay() const {
+        assert( my_begin%my_stride==0 );
+        assert( my_begin<=my_end );
+        assert( my_stride<=my_grainsize );
+        return true;
+    } 
+public:
+    //------------------------------------------------------------------------
+    // Begin signatures required by parallel_reduce
+    //------------------------------------------------------------------------
+    bool is_divisible() const {return my_end-my_begin>my_grainsize;}
+    bool empty() const {return my_end<=my_begin;}
+    SieveRange( SieveRange& r, split ) : 
+        my_stride(r.my_stride), 
+        my_grainsize(r.my_grainsize),
+        my_end(r.my_end)
+    {
+        assert( r.is_divisible() );
+        assert( r.assert_okay() );
+        Number middle = r.my_begin + (r.my_end-r.my_begin+r.my_stride-1)/2;
+        middle = middle/my_stride*my_stride;
+        my_begin = middle;
+        r.my_end = middle;
+        assert( assert_okay() );
+        assert( r.assert_okay() );
+    }
+    //------------------------------------------------------------------------
+    // End of signatures required by parallel_reduce
+    //------------------------------------------------------------------------
+    Number begin() const {return my_begin;}
+    Number end() const {return my_end;}
+    SieveRange( Number begin, Number end, Number stride, Number grainsize ) :
+        my_begin(begin),
+        my_end(end),
+        my_stride(stride),      
+        my_grainsize(grainsize<stride?stride:grainsize)
+    {
+        assert( assert_okay() );
+    }
+};
+
+//! Loop body for parallel_reduce.
+/** parallel_reduce splits the sieve into subsieves.
+    Each subsieve handles a subrange of [0..n]. */
+class Sieve {
+public:
+    //! Prime multiples to consider, and working storage for this subsieve.
+    Multiples multiples;
+
+    //! Number of primes found so far by this subsieve.
+    Number count;
+
+    //! Construct Sieve for counting primes in [0..n].
+    Sieve( Number n ) : 
+        multiples(n),
+        count(0)
+    {}
+
+    //------------------------------------------------------------------------
+    // Begin signatures required by parallel_reduce
+    //------------------------------------------------------------------------
+    void operator()( const SieveRange& r ) {
+        Number m = multiples.m;
+        if( multiples.is_initialized() ) { 
+            // Simply reuse "multiples" structure from previous window
+            // This works because parallel_reduce always applies
+            // *this from left to right.
+        } else {
+            // Need to initialize "multiples" because *this is a forked copy
+            // that needs to be set up to start at r.begin().
+            multiples.initialize( r.begin() );
+        }
+        Number window_size = m;
+        for( Number j=r.begin(); j<r.end(); j+=window_size ) { 
+            assert( j%multiples.m==0 );
+            if( j+window_size>r.end() ) 
+                window_size = r.end()-j;
+            count += multiples.find_primes_in_window( j, window_size );
+        }
+    }
+    void join( Sieve& other ) {
+        count += other.count;
+    }
+    Sieve( Sieve& other, split ) : 
+        multiples(other.multiples,split()),
+        count(0)
+    {}
+    //------------------------------------------------------------------------
+    // End of signatures required by parallel_reduce
+    //------------------------------------------------------------------------
+};
+
+//! Count number of primes between 0 and n
+/** This is the parallel version. */
+Number ParallelCountPrimes( Number n ) {
+    // Two is special case
+    Number count = n>=2;
+    if( n>=3 ) {
+        Sieve s(n);
+        count += s.multiples.n_factor;
+        if( PrintPrimes ) 
+            printf("---\n");
+        // Explicit grain size and simple_partitioner() used here instead of automatic grainsize 
+        // determination becase we want SieveRange to be decomposed down to GrainSize or smaller.  
+        // Doing so improves odds that the working set fits in cache when evaluating Sieve::operator().
+        parallel_reduce( SieveRange( s.multiples.m, n, s.multiples.m, GrainSize ), s, simple_partitioner() );
+        count += s.count;
+    }
+    return count;
+}
+
+//------------------------------------------------------------------------
+// Code below this line constitutes the driver that calls SerialCountPrimes
+// and ParallelCountPrimes.
+//------------------------------------------------------------------------
+
+//! A closed range of Number.
+struct NumberRange {
+    Number low;
+    Number high;
+    void set_from_string( const char* s );
+    NumberRange( Number low_, Number high_ ) : low(low_), high(high_) {}
+};
+
+void NumberRange::set_from_string( const char* s ) {
+    char* end;
+    high = low = strtol(s,&end,0);
+    switch( *end ) {
+    case ':': 
+        high = strtol(end+1,0,0); 
+        break;
+    case '\0':
+        break;
+    default:
+        printf("unexpected character = %c\n",*end);
+    }
+    
+}
+
+//! Number of threads to use.
+static NumberRange NThread(0,4);
+
+//! If true, then at end wait for user to hit return
+static bool PauseFlag = false;
+
+//! Parse the command line.
+static Number ParseCommandLine( int argc, char* argv[] ) {
+    Number n = 100000000;
+    int i = 1;
+    if( i<argc && strcmp( argv[i], "pause" )==0 ) {
+        PauseFlag = true;
+        ++i;
+    }
+    if( i<argc && !isdigit(argv[i][0]) ) { 
+        // Command line is garbled.
+        fprintf(stderr,"Usage: %s [['pause'] n [nthread [grainsize]]]\n", argv[0]);
+        fprintf(stderr,"where n is a positive integer [%lu]\n",n);
+        fprintf(stderr,"      nthread is a non-negative integer, or range of the form low:high [%ld:%lu]\n",NThread.low,NThread.high);
+        fprintf(stderr,"      grainsize is an optional postive integer [%lu]\n",GrainSize);
+        exit(1);
+    }
+    if( i<argc )
+        n = strtol(argv[i++],0,0);
+    if( i<argc )
+        NThread.set_from_string(argv[i++]);
+    if( i<argc )
+        GrainSize = strtol(argv[i++],0,0);
+    return n;
+}
+
+static void WaitForUser() {
+    char c;
+    printf("Press return to continue\n");
+    do {
+        c = getchar();
+    } while( c!='\n' );
+}
+
+int main( int argc, char* argv[] ) {
+    Number n = ParseCommandLine(argc,argv);
+
+    // Try different numbers of threads
+    for( Number p=NThread.low; p<=NThread.high; ++p ) {
+        task_scheduler_init init(task_scheduler_init::deferred);
+        // If p!=0, we are doing a parallel run
+        if( p ) 
+            init.initialize(p);
+
+        Number count;
+        tick_count t0 = tick_count::now();
+        if( p==0 ) {
+            count = SerialCountPrimes(n);
+        } else {
+            count = ParallelCountPrimes(n);
+        }
+        tick_count t1 = tick_count::now();
+
+        printf("#primes from [2..%lu] = %lu (%.2f sec with ",
+            (unsigned long)n, (unsigned long)count, (t1-t0).seconds());
+        if( p ) 
+            printf("%lu-way parallelism)\n", p );
+        else 
+            printf("serial code)\n");
+    }
+    if( PauseFlag ) {
+        WaitForUser();
+    }
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc7.1/primes.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc7.1/primes.sln
new file mode 100644 (file)
index 0000000..0e51661
--- /dev/null
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "primes", "primes.vcproj", "{519446A2-AF27-429B-A5DF-625B8F034024}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               Debug = Debug
+               Release = Release
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {519446A2-AF27-429B-A5DF-625B8F034024}.Debug.ActiveCfg = Debug|Win32
+               {519446A2-AF27-429B-A5DF-625B8F034024}.Debug.Build.0 = Debug|Win32
+               {519446A2-AF27-429B-A5DF-625B8F034024}.Release.ActiveCfg = Release|Win32
+               {519446A2-AF27-429B-A5DF-625B8F034024}.Release.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc7.1/primes.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc7.1/primes.suo
new file mode 100644 (file)
index 0000000..2e62696
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc7.1/primes.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc7.1/primes.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc7.1/primes.vcproj
new file mode 100644 (file)
index 0000000..ba8b9a2
--- /dev/null
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="primes"
+       ProjectGUID="{519446A2-AF27-429B-A5DF-625B8F034024}"
+       RootNamespace="primes"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\primes.cpp">
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc8/primes.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc8/primes.sln
new file mode 100644 (file)
index 0000000..089aa4f
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "primes", "primes.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc8/primes.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc8/primes.suo
new file mode 100644 (file)
index 0000000..f3a244e
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc8/primes.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc8/primes.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc8/primes.vcproj
new file mode 100644 (file)
index 0000000..c183a09
--- /dev/null
@@ -0,0 +1,356 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="primes"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+       RootNamespace="primes"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\primes.cpp"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc9/primes.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc9/primes.sln
new file mode 100644 (file)
index 0000000..420543b
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "primes", "primes.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc9/primes.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc9/primes.suo
new file mode 100644 (file)
index 0000000..2d61b3d
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc9/primes.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc9/primes.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/vc9/primes.vcproj
new file mode 100644 (file)
index 0000000..d0224ca
--- /dev/null
@@ -0,0 +1,353 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="primes"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+       RootNamespace="primes"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\primes.cpp"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..02e2a41
--- /dev/null
@@ -0,0 +1,296 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 42;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               A1F593A60B8F042A00073279 /* primes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* primes.cpp */; };
+               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+               8DD76F690486A84900D96B5E /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 12;
+                       dstPath = "";
+                       dstSubfolderSpec = 16;
+                       files = (
+                               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+               8DD76F6C0486A84900D96B5E /* primes */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = primes; sourceTree = BUILT_PRODUCTS_DIR; };
+               A1F593A50B8F042A00073279 /* primes.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = primes.cpp; path = ../primes.cpp; sourceTree = SOURCE_ROOT; };
+               A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               8DD76F660486A84900D96B5E /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               08FB7794FE84155DC02AAC07 /* primes */ = {
+                       isa = PBXGroup;
+                       children = (
+                               08FB7795FE84155DC02AAC07 /* Source */,
+                               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+                               1AB674ADFE9D54B511CA2CBB /* Products */,
+                       );
+                       name = primes;
+                       sourceTree = "<group>";
+               };
+               08FB7795FE84155DC02AAC07 /* Source */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F593A50B8F042A00073279 /* primes.cpp */,
+                       );
+                       name = Source;
+                       sourceTree = "<group>";
+               };
+               1AB674ADFE9D54B511CA2CBB /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               8DD76F6C0486A84900D96B5E /* primes */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F593B30B8F06F900073279 /* libtbb.dylib */,
+                       );
+                       name = "External Frameworks and Libraries";
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+               8DD76F620486A84900D96B5E /* primes */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "primes" */;
+                       buildPhases = (
+                               8DD76F640486A84900D96B5E /* Sources */,
+                               8DD76F660486A84900D96B5E /* Frameworks */,
+                               8DD76F690486A84900D96B5E /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = primes;
+                       productInstallPath = "$(HOME)/bin";
+                       productName = primes;
+                       productReference = 8DD76F6C0486A84900D96B5E /* primes */;
+                       productType = "com.apple.product-type.tool";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               08FB7793FE84155DC02AAC07 /* Project object */ = {
+                       isa = PBXProject;
+                       buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "primes" */;
+                       hasScannedForEncodings = 1;
+                       mainGroup = 08FB7794FE84155DC02AAC07 /* primes */;
+                       projectDirPath = "";
+                       targets = (
+                               8DD76F620486A84900D96B5E /* primes */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+               8DD76F640486A84900D96B5E /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593A60B8F042A00073279 /* primes.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+               1DEB923208733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = primes;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug;
+               };
+               1DEB923308733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = primes;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               1DEB923608733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug;
+               };
+               1DEB923708733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release;
+               };
+               A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = primes;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug64;
+               };
+               A1F593C70B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = primes;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release64;
+               };
+               A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug64;
+               };
+               A1F593C90B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release64;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "primes" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923208733DC60010E9CD /* Debug */,
+                               A1F593C60B8F0E6E00073279 /* Debug64 */,
+                               1DEB923308733DC60010E9CD /* Release */,
+                               A1F593C70B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "primes" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923608733DC60010E9CD /* Debug */,
+                               A1F593C80B8F0E6E00073279 /* Debug64 */,
+                               1DEB923708733DC60010E9CD /* Release */,
+                               A1F593C90B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/index.html
new file mode 100644 (file)
index 0000000..a7b7d78
--- /dev/null
@@ -0,0 +1,25 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of the template <code>parallel_while</code>.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="parallel_preorder/index.html">parallel_preorder</A>
+<DD>Parallel preorder traversal of a graph.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Graph.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Graph.cpp
new file mode 100644 (file)
index 0000000..e642745
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <cstdio>
+#include <cstdlib>
+#include "Graph.h"
+
+using namespace std;
+
+void Graph::create_random_dag( size_t number_of_nodes ) {
+    my_vertex_set.resize(number_of_nodes);
+    for( size_t k=0; k<number_of_nodes; ++k ) {
+        Cell& c = my_vertex_set[k];
+        int op = int((rand()>>8)%5u);
+        if( op>int(k) ) op = int(k);
+        switch( op ) {
+            default:
+                c.op = OP_VALUE;
+                c.value = Cell::value_type((float)k);
+                break;
+            case 1:
+                c.op = OP_NEGATE;
+                break;
+            case 2:
+                c.op = OP_SUB;
+                break;
+            case 3: 
+                c.op = OP_ADD;
+                break;
+            case 4: 
+                c.op = OP_MUL;
+                break;
+        }
+        for( int j=0; j<ArityOfOp[c.op]; ++j ) {
+            Cell& input = my_vertex_set[rand()%k];
+            c.input[j] = &input;
+        }
+    }
+}
+
+void Graph::print() {
+    for( size_t k=0; k<my_vertex_set.size(); ++k ) {
+        printf("Cell %d:",int(k));
+        for( size_t j=0; j<my_vertex_set[k].successor.size(); ++j )
+            printf(" %d",int(my_vertex_set[k].successor[j] - &my_vertex_set[0]));
+        printf("\n");
+    }
+}
+
+void Graph::get_root_set( vector<Cell*>& root_set ) {
+    for( size_t k=0; k<my_vertex_set.size(); ++k ) {
+        my_vertex_set[k].successor.clear();
+    }
+    root_set.clear();
+    for( size_t k=0; k<my_vertex_set.size(); ++k ) {
+        Cell& c = my_vertex_set[k];
+        c.ref_count = ArityOfOp[c.op];
+        for( int j=0; j<ArityOfOp[c.op]; ++j ) {
+            c.input[j]->successor.push_back(&c);
+        }
+        if( ArityOfOp[c.op]==0 )
+            root_set.push_back(&my_vertex_set[k]);
+    }
+}
+
+void Cell::update() {
+    switch( op ) {
+        case OP_VALUE:
+            break;
+        case OP_NEGATE:
+            value = -(input[0]->value);
+            break;
+        case OP_ADD:
+            value = input[0]->value + input[1]->value;
+            break;
+        case OP_SUB:
+            value = input[0]->value - input[1]->value;
+            break;
+        case OP_MUL:
+            value = input[0]->value * input[1]->value;
+            break;
+    }
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Graph.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Graph.h
new file mode 100644 (file)
index 0000000..efab9a1
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "Matrix.h"
+#include "tbb/atomic.h"
+#include <vector>
+
+namespace TBB = tbb;
+
+enum OpKind {
+    // Use Cell's value
+    OP_VALUE,
+    // Unary negation
+    OP_NEGATE,
+    // Addition
+    OP_ADD,
+    // Subtraction
+    OP_SUB,
+    // Multiplication
+    OP_MUL
+};
+
+static const int ArityOfOp[] = {0,1,2,2,2};
+
+class Cell {
+public:
+    //! Operation for this cell
+    OpKind op;
+
+    //! Inputs to this cell
+    Cell* input[2];
+   
+    //! Type of value stored in a Cell
+    typedef Matrix value_type;
+
+    //! Value associated with this Cell
+    value_type value;
+
+    //! Set of cells that use this Cell as an input
+    std::vector<Cell*> successor;
+
+    //! Reference count of number of inputs that are not yet updated.
+    TBB::atomic<int> ref_count;
+
+    //! Update the Cell's value.
+    void update();
+
+    //! Default construtor
+    Cell() {}
+};
+
+//! A directed graph where the vertices are Cells.
+class Graph {
+    std::vector<Cell> my_vertex_set;
+public:
+    //! Create a random acyclic directed graph
+    void create_random_dag( size_t number_of_nodes );
+
+    //! Print the graph
+    void print();
+
+    //! Get set of cells that have no inputs.
+    void get_root_set( std::vector<Cell*>& root_set );
+};
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Makefile
new file mode 100644 (file)
index 0000000..251ce6e
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=parallel_preorder
+ARGS=1:4
+
+# The C++ compiler
+#CXX=g++
+
+all:   release test
+
+release: *.cpp
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
+
+debug: *.cpp
+       $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+
+clean:
+       rm -f $(PROG) *.o *.d
+
+test:
+       ./$(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Makefile.windows
new file mode 100644 (file)
index 0000000..0abd775
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Parallel_Preorder
+ARGS=1:4
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+release:
+       $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+debug:
+       $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+clean:
+       @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+       $(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Matrix.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/Matrix.h
new file mode 100644 (file)
index 0000000..b7b47e6
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+class Matrix {
+    static const int n = 10;
+    float array[n][n];
+public:
+    Matrix() {}
+    Matrix( float z ) {
+        for( int i=0; i<n; ++i )
+            for( int j=0; j<n; ++j )
+                array[i][j] = i==j ? z : 0;
+    }
+    friend Matrix operator-( const Matrix& x ) {
+        Matrix result;
+        for( int i=0; i<n; ++i )
+            for( int j=0; j<n; ++j )
+                result.array[i][j] = -x.array[i][j];
+        return result;
+    }
+    friend Matrix operator+( const Matrix& x, const Matrix& y ) {
+        Matrix result;
+        for( int i=0; i<n; ++i )
+            for( int j=0; j<n; ++j )
+                result.array[i][j] = x.array[i][j] + y.array[i][j];
+        return result;
+    }
+    friend Matrix operator-( const Matrix& x, const Matrix& y ) {
+        Matrix result;
+        for( int i=0; i<n; ++i )
+            for( int j=0; j<n; ++j )
+                result.array[i][j] = x.array[i][j] - y.array[i][j];
+        return result;
+    }
+    friend Matrix operator*( const Matrix& x, const Matrix& y ) {
+        Matrix result(0);
+        for( int i=0; i<n; ++i ) 
+            for( int k=0; k<n; ++k )
+                for( int j=0; j<n; ++j )
+                    result.array[i][j] += x.array[i][k] * y.array[k][j];
+        return result;
+    }
+};
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/index.html
new file mode 100644 (file)
index 0000000..4a64acb
--- /dev/null
@@ -0,0 +1,95 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Example that uses parallel_while to do parallel preorder traversal of a sparse graph.
+<P>
+Each vertex in the graph is called a "cell".  
+Each cell has a value. 
+The value is a matrix. 
+Some of the cells have operators
+that compute the cell's value, using other cell's values as input.
+A cell that uses the value of cell x is called a successor of x.
+</P><P>
+The algorithm works as follows. 
+<OL>
+<LI> Compute the set of cells that have no inputs. This set is called <TT>root_set</TT>.
+<LI> Each cell has an associated field <TT>ref_count</TT> that is an atomic integer.
+     Initialize <TT>ref_count</TT> to the number of inputs for the Cell.
+<LI> Update each cell in <TT>root_set</TT>, by applying a <TT>parallel_while</TT> to a stream 
+     that iterates over <TT>root_set</TT>
+<LI> After updating a cell, for each of its successors 
+<OL>
+<LI> Atomically decrement the successor's <TT>ref_count</TT>
+<LI> If the count became zero, add the cell to the set of cells to be updated,
+     by calling <TT>parallel_while::add</TT>.
+</OL>
+</OL>
+</P><P>
+The times printed are for the traversal and update, 
+and do not include time for computing the root_set.
+</P>
+<B>NOTE: </B>It is important to understand that this example is unlikely to show speedup 
+if the cell values are changed to type "float".  The reason is twofold.
+<UL>
+<LI> The smaller value type causes each Cell to be significantly smaller than a cache line,
+     which leads to false sharing conflicts.
+<LI> The time to update the cells becomes very small, and consequently the overhead of
+     parallel_while swamps the useful work.
+</UL>
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="parallel_preorder.cpp">parallel_preorder.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Graph.cpp">Graph.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Graph.h">Graph.h</A>
+<DD>Source code for example.
+<DT><A HREF="Matrix.h">Matrix.h</A>
+<DD>Source code for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>parallel_preorder [<I>M</I>[:<I>N</I>] [<I>Rounds</I> [<I>'pause'</I>]]]</TT>
+<DD><I>M</I> and <I>N</I> are a range of numbers of threads to be used.
+<DD><I>Rounds</I> is the number of rounds the example runs internally. Default value 
+    is 50; reduce it to shorten example run time.
+<DD>If 'pause' is specified, the application will wait for a user to hit return before it exits.
+<DT>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+    (see the <A HREF=../../index.html#build>build directions</A>).
+    <BR>Run it with the desired number of threads and smaller number of rounds, e.g., <TT>parallel_preorder 4 5</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/parallel_preorder.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/parallel_preorder.cpp
new file mode 100644 (file)
index 0000000..f129b75
--- /dev/null
@@ -0,0 +1,196 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/* Example program that shows how to use parallel_while to do parallel preorder 
+   traversal of a directed acyclic graph. */
+
+#include "tbb/parallel_while.h"
+#include "tbb/atomic.h"
+#include <vector>
+#include <algorithm>
+#include <cstring>
+#include <cstdio>
+#include "Graph.h"
+
+using namespace std;
+
+//! Number of trials. Can be changed from command line
+int ntrial = 50;
+
+class Body {
+    tbb::parallel_while<Body>& my_while; 
+public:
+    Body( tbb::parallel_while<Body>& w ) : my_while(w) {};
+
+    //------------------------------------------------------------------------
+    // Following signatures required by parallel_while
+    //------------------------------------------------------------------------
+    typedef Cell* argument_type;
+    void operator()( Cell* c ) const {
+        c->update();
+        // Restore ref_count in preparation for subsequent traversal.
+        c->ref_count = ArityOfOp[c->op];
+        for( size_t k=0; k<c->successor.size(); ++k ) {
+            Cell* successor = c->successor[k];
+            if( 0 == --(successor->ref_count) ) {
+                my_while.add( successor );
+            }
+        }
+    }
+};   
+
+class Stream {
+    size_t k;
+    const vector<Cell*>& my_roots;
+public:
+    Stream( const vector<Cell*>& root_set ) : my_roots(root_set), k(0) {}
+    bool pop_if_present( Cell*& item ) {
+        bool result = k<my_roots.size();
+        if( result ) 
+            item = my_roots[k++];
+        return result;
+    }
+};    
+
+void ParallelPreorderTraversal( const vector<Cell*>& root_set ) {
+    tbb::parallel_while<Body> w;
+    Stream s(root_set);
+    w.run(s,Body(w));
+}
+
+//------------------------------------------------------------------------
+// Test driver
+//------------------------------------------------------------------------
+
+#include <cctype>
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+
+//! A closed range of int.
+struct IntRange {
+    int low;
+    int high;
+    void set_from_string( const char* s );
+    IntRange( int low_, int high_ ) : low(low_), high(high_) {}
+};
+
+void IntRange::set_from_string( const char* s ) {
+    char* end;
+    high = low = strtol(s,&end,0);
+    switch( *end ) {
+    case ':': 
+        high = strtol(end+1,0,0); 
+        break;
+    case '\0':
+        break;
+    default:
+        printf("unexpected character = %c\n",*end);
+    }
+}
+
+//! Number of threads to use.
+static IntRange NThread(1,4);
+
+//! If true, then at end wait for user to hit return
+static bool PauseFlag = false;
+
+//! Displays usage message
+void Usage(char * argv0) {
+    fprintf(stderr, "Usage: %s [nthread [ntrials ['pause']]]\n", argv0);
+    fprintf(stderr, "where nthread is a non-negative integer, or range of the form low:high [%d:%d]\n", NThread.low, NThread.high);
+    fprintf(stderr, "ntrials is a positive integer. Default value is 50, reduce it (e.g. to 5) to shorten example run time\n");
+    fprintf(stderr, "The application waits for user to hit return if 'pause' is specified\n");
+}
+
+//! Parse the command line.
+static void ParseCommandLine( int argc, char* argv[] ) {
+    int i = 1;
+        if( i<argc && !isdigit(argv[i][0]) ) { 
+        // Command line is garbled.
+        Usage(argv[0]);
+        exit(1);
+    }
+    if( i<argc )
+        NThread.set_from_string(argv[i++]);
+    if( i<argc && !isdigit(argv[i][0]) ) { 
+        // Command line is garbled.
+        Usage(argv[0]);
+        exit(1);
+    }
+    if (i<argc) {
+        ntrial = strtol(argv[i++], 0, 0);
+    }
+    if (ntrial == 0) {
+        // Command line is garbled.
+        Usage(argv[0]);
+        exit(1);
+    }
+    if (i<argc && strcmp( argv[i], "pause" )==0 ) {
+        PauseFlag = true;
+    }
+}
+
+int main( int argc, char* argv[] ) {
+    ParseCommandLine(argc,argv);
+
+    // Start scheduler with given number of threads.
+    for( int p=NThread.low; p<=NThread.high; ++p ) {
+        tbb::task_scheduler_init init(p);
+        srand(2);
+        tbb::tick_count::interval_t interval;
+        size_t total_root_set_size = 0;
+        for( int trial=0; trial<ntrial; ++trial ) {
+            Graph g;
+            g.create_random_dag(1000);
+            vector<Cell*> root_set;
+            g.get_root_set(root_set);
+            total_root_set_size += root_set.size();
+
+            tbb::tick_count t0 = tbb::tick_count::now();
+            for( int i=0; i<10; ++i ) {
+                ParallelPreorderTraversal(root_set);
+            }
+            tbb::tick_count t1 = tbb::tick_count::now();
+
+            interval += t1-t0;
+        }
+        printf("%g seconds using %d threads (average of %g nodes in root_set)\n",interval.seconds(),p,(double)total_root_set_size/ntrial);
+    }
+
+    if (PauseFlag) {
+        printf ("Press return key to exit");
+        char c;
+        int n = scanf("%c", &c);
+        if( n!=1 ) {
+            fprintf(stderr,"Fatal error: unexpected end of input\n");
+            exit(1);
+        }
+    }
+
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.sln
new file mode 100644 (file)
index 0000000..1cda54a
--- /dev/null
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "parallel_preorder", "parallel_preorder.vcproj", "{519446A2-AF27-429B-A5DF-625B8F034021}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               Debug = Debug
+               Release = Release
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {519446A2-AF27-429B-A5DF-625B8F034021}.Debug.ActiveCfg = Debug|Win32
+               {519446A2-AF27-429B-A5DF-625B8F034021}.Debug.Build.0 = Debug|Win32
+               {519446A2-AF27-429B-A5DF-625B8F034021}.Release.ActiveCfg = Release|Win32
+               {519446A2-AF27-429B-A5DF-625B8F034021}.Release.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.suo
new file mode 100644 (file)
index 0000000..ffa0587
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.vcproj
new file mode 100644 (file)
index 0000000..5b7c292
--- /dev/null
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="parallel_preorder"
+       ProjectGUID="{519446A2-AF27-429B-A5DF-625B8F034021}"
+       RootNamespace="parallel_preorder"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\Graph.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\parallel_preorder.cpp">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+                       <File
+                               RelativePath="..\Graph.h">
+                       </File>
+                       <File
+                               RelativePath="..\Matrix.h">
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.sln
new file mode 100644 (file)
index 0000000..6b466e9
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "parallel_preorder", "parallel_preorder.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252B}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.suo
new file mode 100644 (file)
index 0000000..5395b93
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.vcproj
new file mode 100644 (file)
index 0000000..057930b
--- /dev/null
@@ -0,0 +1,374 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="parallel_preorder"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252B}"
+       RootNamespace="parallel_preorder"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\Graph.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\parallel_preorder.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+                       <File
+                               RelativePath="..\Graph.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Matrix.h"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.sln
new file mode 100644 (file)
index 0000000..178fea0
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "parallel_preorder", "parallel_preorder.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252B}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.suo
new file mode 100644 (file)
index 0000000..14402b5
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.vcproj
new file mode 100644 (file)
index 0000000..d9e48f5
--- /dev/null
@@ -0,0 +1,371 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="parallel_preorder"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252B}"
+       RootNamespace="parallel_preorder"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\Graph.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\parallel_preorder.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+                       <File
+                               RelativePath="..\Graph.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Matrix.h"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/parallel_while/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..c89f216
--- /dev/null
@@ -0,0 +1,304 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 42;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */; };
+               05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA40B8F55D500DE73AB /* Graph.cpp */; };
+               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+               8DD76F690486A84900D96B5E /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 12;
+                       dstPath = "";
+                       dstSubfolderSpec = 16;
+                       files = (
+                               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+               8DD76F6C0486A84900D96B5E /* parallel_preorder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = parallel_preorder; sourceTree = BUILT_PRODUCTS_DIR; };
+               05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parallel_preorder.cpp; path = ../parallel_preorder.cpp; sourceTree = SOURCE_ROOT; };
+               05593AA40B8F55D500DE73AB /* Graph.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Graph.cpp; path = ../Graph.cpp; sourceTree = SOURCE_ROOT; };
+               05593AA50B8F55D500DE73AB /* Graph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Graph.h; path = ../Graph.h; sourceTree = SOURCE_ROOT; };
+               05593AA60B8F55D500DE73AB /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Matrix.h; path = ../Matrix.h; sourceTree = SOURCE_ROOT; };
+               A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               8DD76F660486A84900D96B5E /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               08FB7794FE84155DC02AAC07 /* parallel_preorder */ = {
+                       isa = PBXGroup;
+                       children = (
+                               08FB7795FE84155DC02AAC07 /* Source */,
+                               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+                               1AB674ADFE9D54B511CA2CBB /* Products */,
+                       );
+                       name = parallel_preorder;
+                       sourceTree = "<group>";
+               };
+               08FB7795FE84155DC02AAC07 /* Source */ = {
+                       isa = PBXGroup;
+                       children = (
+                               05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */,
+                               05593AA40B8F55D500DE73AB /* Graph.cpp */,
+                               05593AA50B8F55D500DE73AB /* Graph.h */,
+                               05593AA60B8F55D500DE73AB /* Matrix.h */,
+                       );
+                       name = Source;
+                       sourceTree = "<group>";
+               };
+               1AB674ADFE9D54B511CA2CBB /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               8DD76F6C0486A84900D96B5E /* parallel_preorder */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F593B30B8F06F900073279 /* libtbb.dylib */,
+                       );
+                       name = "External Frameworks and Libraries";
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+               8DD76F620486A84900D96B5E /* parallel_preorder */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "parallel_preorder" */;
+                       buildPhases = (
+                               8DD76F640486A84900D96B5E /* Sources */,
+                               8DD76F660486A84900D96B5E /* Frameworks */,
+                               8DD76F690486A84900D96B5E /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = parallel_preorder;
+                       productInstallPath = "$(HOME)/bin";
+                       productName = parallel_preorder;
+                       productReference = 8DD76F6C0486A84900D96B5E /* parallel_preorder */;
+                       productType = "com.apple.product-type.tool";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               08FB7793FE84155DC02AAC07 /* Project object */ = {
+                       isa = PBXProject;
+                       buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "parallel_preorder" */;
+                       hasScannedForEncodings = 1;
+                       mainGroup = 08FB7794FE84155DC02AAC07 /* parallel_preorder */;
+                       projectDirPath = "";
+                       targets = (
+                               8DD76F620486A84900D96B5E /* parallel_preorder */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+               8DD76F640486A84900D96B5E /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */,
+                               05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+               1DEB923208733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = parallel_preorder;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug;
+               };
+               1DEB923308733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = parallel_preorder;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               1DEB923608733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug;
+               };
+               1DEB923708733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release;
+               };
+               A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = parallel_preorder;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug64;
+               };
+               A1F593C70B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = parallel_preorder;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release64;
+               };
+               A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug64;
+               };
+               A1F593C90B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release64;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "parallel_preorder" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923208733DC60010E9CD /* Debug */,
+                               A1F593C60B8F0E6E00073279 /* Debug64 */,
+                               1DEB923308733DC60010E9CD /* Release */,
+                               A1F593C70B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "parallel_preorder" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923608733DC60010E9CD /* Debug */,
+                               A1F593C80B8F0E6E00073279 /* Debug64 */,
+                               1DEB923708733DC60010E9CD /* Release */,
+                               A1F593C90B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/index.html
new file mode 100644 (file)
index 0000000..dfa089e
--- /dev/null
@@ -0,0 +1,27 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of the template <code>pipeline</code>.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="text_filter/index.html">text_filter</A>
+<DD>A simple text filter that capitalizes words in a text.
+<DT><A HREF="square/index.html">square</A>
+<DD>Another simple string transformation example that squares numbers read from a file.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/Makefile
new file mode 100644 (file)
index 0000000..0ec518c
--- /dev/null
@@ -0,0 +1,55 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=square
+ARGS=input.txt output.txt
+GEN=gen_input
+
+# The C++ compiler
+#CXX=g++
+
+SQUARE = square.cpp
+
+all:   release test
+
+release: $(SQUARE)
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
+
+debug: $(SQUARE)
+       $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+
+clean:
+       $(RM) $(PROG) $(GEN) *.o *.d input.txt output.txt
+
+$(GEN): gen_input.cpp 
+       $(CXX) -O2 $(CXXFLAGS) -o $(GEN) $^ $(LIBS)
+
+input.txt: $(GEN)
+       ./$(GEN)  >input.txt
+
+test: input.txt
+       ./$(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/Makefile.windows
new file mode 100644 (file)
index 0000000..15e6fe6
--- /dev/null
@@ -0,0 +1,51 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=square
+ARGS=input.txt output.txt
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS) /D _CRT_SECURE_NO_DEPRECATE
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+SQUARE = square.cpp
+
+all: release test
+release:
+       $(CXX) $(SQUARE) /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+debug:
+       $(CXX) $(SQUARE) /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+clean:
+       @cmd.exe /C del $(PROG).exe input.txt output.txt *.obj *.?db *.manifest gen_input.exe
+gen_input.exe: gen_input.cpp
+       $(CXX) gen_input.cpp
+input.txt: gen_input.exe
+       gen_input.exe > input.txt
+test: input.txt
+       $(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/gen_input.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/gen_input.cpp
new file mode 100644 (file)
index 0000000..e46706d
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+
+//! Generates sample input for square.cpp
+int main( int argc, char* argv[] ) {
+    long num = argc>1 ? atol(argv[1]) : 1000000;
+    int a=0;
+    int b=1;
+    for( long j=0; j<num; ++j ) {
+        printf("%u\n",a);
+        b+=a;
+        a=(b-a)%10000;
+    }
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/index.html
new file mode 100644 (file)
index 0000000..a2205eb
--- /dev/null
@@ -0,0 +1,72 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Text filter that demonstrates class pipeline. Example program reads a file 
+containing decimal integers in text format, and changes each to its square.
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="square.cpp">square.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="gen_input.cpp">gen_input.cpp </A>
+<DD>Source code for sample input generation.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+<P></P>
+Two additional targets for this example:
+<DL>
+    <DT><TT>make gen_input</TT>
+    <DD>Create an input generator program that prints out a sequence of integers.
+    <DT><TT>make input.txt</TT>
+    <DD>Create an input file for the example (with help of <TT>gen_input</TT>).
+</DL>
+<P></P>
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>square <I>inputfile</I> <I>outputfile</I> <I>N</I></TT>
+<DD>Run the example on the named <I>inputfile</I> (optional, default value is "input.txt") and produce the named <I>outputfile</I> (optional, default value is "output.txt").
+    <I>N</I> is the number of threads to be used (optional).
+    
+<DT><TT>gen_input [<I>LN</I>] &gt; <I>inputfile</I></TT>
+<DD>Generate a file named <I>inputfile</I> consisting of <I>LN</I> lines each containing one integer.
+    If not specified, <I>LN</I> is assumed to be 1000000.
+    
+<DT>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+    (see the <A HREF=../../index.html#build>build directions</A>).
+    <BR>Prepare an <I>inputfile</I> with about 5,000 lines of text (see the instruction above).
+    <BR>Run it with this <I>inputfile</I> and the desired number of threads,
+       e.g., <TT>square <I>inputfile</I> <I>outputfile</I> 4</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/square.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/square.cpp
new file mode 100644 (file)
index 0000000..d518d6d
--- /dev/null
@@ -0,0 +1,293 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+//
+// Example program that reads a file of decimal integers in text format
+// and changes each to its square.
+// 
+#include "tbb/pipeline.h"
+#include "tbb/tick_count.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tbb_allocator.h"
+#include <cstring>
+#include <cstdlib>
+#include <cstdio>
+#include <cctype>
+
+using namespace std;
+
+//! Holds a slice of text.
+/** Instances *must* be allocated/freed using methods herein, because the C++ declaration
+    represents only the header of a much larger object in memory. */
+class TextSlice {
+    //! Pointer to one past last character in slice
+    char* logical_end;
+    //! Pionter to one past last available byte in slice.
+    char* physical_end;
+public:
+    //! Allocate a TextSlice object that can hold up to max_size characters.
+    static TextSlice* allocate( size_t max_size ) {
+        // +1 leaves room for a terminating null character.
+        TextSlice* t = (TextSlice*)tbb::tbb_allocator<char>().allocate( sizeof(TextSlice)+max_size+1 );
+        t->logical_end = t->begin();
+        t->physical_end = t->begin()+max_size;
+        return t;
+    }
+    //! Free a TextSlice object 
+    void free() {
+        tbb::tbb_allocator<char>().deallocate((char*)this,size());
+    } 
+    //! Pointer to beginning of sequence
+    char* begin() {return (char*)(this+1);}
+    //! Pointer to one past last character in sequence
+    char* end() {return logical_end;}
+    //! Length of sequence
+    size_t size() const {return logical_end-(char*)(this+1);}
+    //! Maximum number of characters that can be appended to sequkence
+    size_t avail() const {return physical_end-logical_end;}
+    //! Append sequence [first,last) to this sequence.
+    void append( char* first, char* last ) {
+        memcpy( logical_end, first, last-first );
+        logical_end += last-first;
+    }
+    //! Set end to given value.
+    void set_end( char* p ) {logical_end=p;}
+};
+
+const size_t MAX_CHAR_PER_INPUT_SLICE = 4000;
+static const char* InputFileName = "input.txt";
+static const char* OutputFileName = "output.txt";
+
+class MyInputFilter: public tbb::filter {
+public:
+    MyInputFilter( FILE* input_file_ );
+    ~MyInputFilter();
+private:
+    FILE* input_file;
+    TextSlice* next_slice;
+    /*override*/ void* operator()(void*);
+};
+
+MyInputFilter::MyInputFilter( FILE* input_file_ ) : 
+    filter(/*is_serial=*/true),
+    input_file(input_file_),
+    next_slice( TextSlice::allocate( MAX_CHAR_PER_INPUT_SLICE ) )
+{ 
+}
+
+MyInputFilter::~MyInputFilter() {
+    next_slice->free();
+}
+void* MyInputFilter::operator()(void*) {
+    // Read characters into space that is available in the next slice.
+    size_t m = next_slice->avail();
+    size_t n = fread( next_slice->end(), 1, m, input_file );
+    if( !n && next_slice->size()==0 ) {
+        // No more characters to process
+        return NULL;
+    } else {
+        // Have more characters to process.
+        TextSlice& t = *next_slice;
+        next_slice = TextSlice::allocate( MAX_CHAR_PER_INPUT_SLICE );
+        char* p = t.end()+n;
+        if( n==m ) {
+            // Might have read partial number.  If so, transfer characters of partial number to next slice.
+            while( p>t.begin() && isdigit(p[-1]) ) 
+                --p;
+            next_slice->append( p, t.end()+n );
+        }
+        t.set_end(p);
+        return &t;
+    }
+}
+    
+//! Filter that changes each decimal number to its square.
+class MyTransformFilter: public tbb::filter {
+public:
+    MyTransformFilter();
+    /*override*/void* operator()( void* item );
+};
+
+MyTransformFilter::MyTransformFilter() : 
+    tbb::filter(/*ordered=*/false) 
+{}  
+
+/*override*/void* MyTransformFilter::operator()( void* item ) {
+    TextSlice& input = *static_cast<TextSlice*>(item);
+    // Add terminating NULL so that strtol works right even if number is at end of the input.
+    *input.end() = '\0';
+    char* p = input.begin();
+    TextSlice& output = *TextSlice::allocate( 2*MAX_CHAR_PER_INPUT_SLICE );
+    char* q = output.begin();
+    for(;;) {
+        while( p<input.end() && !isdigit(*p) ) 
+            *q++ = *p++; 
+        if( p==input.end() ) 
+            break;
+        long x = strtol( p, &p, 10 );
+        // Note: no overflow checking is needed here, as we have twice the 
+        // input string length, but the square of a non-negative integer n 
+        // cannot have more than twice as many digits as n.
+        long y = x*x; 
+        sprintf(q,"%ld",y);
+        q = strchr(q,0);
+    }
+    output.set_end(q);
+    input.free();
+    return &output;
+}
+         
+//! Filter that writes each buffer to a file.
+class MyOutputFilter: public tbb::filter {
+    FILE* my_output_file;
+public:
+    MyOutputFilter( FILE* output_file );
+    /*override*/void* operator()( void* item );
+};
+
+MyOutputFilter::MyOutputFilter( FILE* output_file ) : 
+    tbb::filter(/*is_serial=*/true),
+    my_output_file(output_file)
+{
+}
+
+void* MyOutputFilter::operator()( void* item ) {
+    TextSlice& output = *static_cast<TextSlice*>(item);
+    size_t n = fwrite( output.begin(), 1, output.size(), my_output_file );
+    if( n!=output.size() ) {
+        fprintf(stderr,"Can't write into %s file\n", OutputFileName);
+        exit(1);
+    }
+    output.free();
+    return NULL;
+}
+
+static int NThread = tbb::task_scheduler_init::automatic;
+static bool is_number_of_threads_set = false;
+
+void Usage()
+{
+    fprintf( stderr, "Usage:\tsquare [input-file [output-file [nthread]]]\n");
+}
+
+int ParseCommandLine(  int argc, char* argv[] ) {
+    // Parse command line
+    if( argc> 4 ){
+        Usage();
+        return 0;
+    }
+    if( argc>=2 ) InputFileName = argv[1];
+    if( argc>=3 ) OutputFileName = argv[2];
+    if( argc>=4 ) {
+        NThread = strtol(argv[3],0,0);
+        if( NThread<1 ) {
+            fprintf(stderr,"nthread set to %d, but must be at least 1\n",NThread);
+            return 0;
+        }
+        is_number_of_threads_set = true; //Number of threads is set explicitly
+    }
+    return 1;
+}
+
+int run_pipeline( int nthreads )
+{
+    FILE* input_file = fopen(InputFileName,"r");
+    if( !input_file ) {
+        perror( InputFileName );
+        Usage();
+        return 0;
+    }
+    FILE* output_file = fopen(OutputFileName,"w");
+    if( !output_file ) {
+        perror( OutputFileName );
+        return 0;
+    }
+
+    // Create the pipeline
+    tbb::pipeline pipeline;
+
+    // Create file-reading writing stage and add it to the pipeline
+    MyInputFilter input_filter( input_file );
+    pipeline.add_filter( input_filter );
+
+    // Create capitalization stage and add it to the pipeline
+    MyTransformFilter transform_filter; 
+    pipeline.add_filter( transform_filter );
+
+    // Create file-writing stage and add it to the pipeline
+    MyOutputFilter output_filter( output_file );
+    pipeline.add_filter( output_filter );
+
+    // Run the pipeline
+    tbb::tick_count t0 = tbb::tick_count::now();
+    // Need more than one token in flight per thread to keep all threads 
+    // busy; 2-4 works
+    pipeline.run( nthreads*4 );
+    tbb::tick_count t1 = tbb::tick_count::now();
+
+    // Remove filters from pipeline before they are implicitly destroyed.
+    pipeline.clear(); 
+
+    fclose( output_file );
+    fclose( input_file );
+
+    if (is_number_of_threads_set) {
+        printf("threads = %d time = %g\n", nthreads, (t1-t0).seconds());
+    } else {
+        if ( nthreads == 1 ){
+            printf("serial run   time = %g\n", (t1-t0).seconds());
+        } else {
+            printf("parallel run time = %g\n", (t1-t0).seconds());
+        }
+    }
+    return 1;
+}
+
+int main( int argc, char* argv[] ) {
+    if(!ParseCommandLine( argc, argv ))
+        return 1;
+    if (is_number_of_threads_set) {
+        // Start task scheduler
+        tbb::task_scheduler_init init( NThread );
+        if(!run_pipeline (NThread))
+            return 1;
+    } else { // Number of threads wasn't set explicitly. Run serial and parallel version
+        { // serial run
+            tbb::task_scheduler_init init_serial(1);
+            if(!run_pipeline (1))
+                return 1;
+        }
+        { // parallel run (number of threads is selected automatically)
+            tbb::task_scheduler_init init_parallel;
+            if(!run_pipeline (init_parallel.default_num_threads()))
+                return 1;
+        }
+    }
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc7.1/gen_input.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc7.1/gen_input.vcproj
new file mode 100644 (file)
index 0000000..32faff4
--- /dev/null
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="gen_input"
+       ProjectGUID="{9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+                               MinimalRebuild="TRUE"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="5"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="4"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               OutputFile="$(OutDir)/gen_input.exe"
+                               LinkIncremental="2"
+                               GenerateDebugInformation="TRUE"
+                               ProgramDatabaseFile="$(OutDir)/gen_input.pdb"
+                               SubSystem="1"
+                               TargetMachine="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="4"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               OutputFile="$(OutDir)/gen_input.exe"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\gen_input.cpp">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc7.1/square.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc7.1/square.sln
new file mode 100644 (file)
index 0000000..ddfee6a
--- /dev/null
@@ -0,0 +1,30 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "square", "square.vcproj", "{4A021AFA-E254-4BCE-918D-377DF1C0BEEF}"
+       ProjectSection(ProjectDependencies) = postProject
+               {9B2DC020-BBF7-463B-AD0B-0D4ACF49100B} = {9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gen_input", "gen_input.vcproj", "{9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               Debug = Debug
+               Release = Release
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Debug.ActiveCfg = Debug|Win32
+               {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Debug.Build.0 = Debug|Win32
+               {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Release.ActiveCfg = Release|Win32
+               {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Release.Build.0 = Release|Win32
+               {9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}.Debug.ActiveCfg = Debug|Win32
+               {9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}.Debug.Build.0 = Debug|Win32
+               {9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}.Release.ActiveCfg = Release|Win32
+               {9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}.Release.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc7.1/square.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc7.1/square.vcproj
new file mode 100644 (file)
index 0000000..c816f1b
--- /dev/null
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="square"
+       ProjectGUID="{4A021AFA-E254-4BCE-918D-377DF1C0BEEF}"
+       RootNamespace="square"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="$(OutDir)\gen_input &gt;input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+                               AdditionalDependencies="gen_input.exe"
+                               Outputs="&quot;$(OutDir)\input.txt&quot;"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="$(OutDir)\gen_input &gt;input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+                               Outputs="&quot;$(OutDir)\input.txt&quot;"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\square.cpp">
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc8/gen_input.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc8/gen_input.vcproj
new file mode 100644 (file)
index 0000000..a066160
--- /dev/null
@@ -0,0 +1,354 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="gen_input"
+       ProjectGUID="{25A46A49-406F-4681-8AC9-5FE46F38E5A7}"
+       RootNamespace="gen_input"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+                               MinimalRebuild="true"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="4"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="2"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+                               MinimalRebuild="true"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="2"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\gen_input.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+                       >
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc8/square.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc8/square.sln
new file mode 100644 (file)
index 0000000..d9ce229
--- /dev/null
@@ -0,0 +1,38 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "square", "square.vcproj", "{A21C0AEE-ADDC-45F0-A668-58FF10351D23}"
+       ProjectSection(ProjectDependencies) = postProject
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7} = {25A46A49-406F-4681-8AC9-5FE46F38E5A7}
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gen_input", "gen_input.vcproj", "{25A46A49-406F-4681-8AC9-5FE46F38E5A7}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.ActiveCfg = Debug|Win32
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.Build.0 = Debug|Win32
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.ActiveCfg = Debug|x64
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.Build.0 = Debug|x64
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.ActiveCfg = Release|Win32
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.Build.0 = Release|Win32
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.ActiveCfg = Release|x64
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.Build.0 = Release|x64
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|Win32.ActiveCfg = Debug|Win32
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|Win32.Build.0 = Debug|Win32
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|x64.ActiveCfg = Debug|x64
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|x64.Build.0 = Debug|x64
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|Win32.ActiveCfg = Release|Win32
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|Win32.Build.0 = Release|Win32
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|x64.ActiveCfg = Release|x64
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc8/square.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc8/square.vcproj
new file mode 100644 (file)
index 0000000..7b30327
--- /dev/null
@@ -0,0 +1,380 @@
+<?xml version="1.0" encoding="windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="square"
+       ProjectGUID="{A21C0AEE-ADDC-45F0-A668-58FF10351D23}"
+       RootNamespace="square"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="$(OutDir)\gen_input &gt;input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+                               AdditionalDependencies="gen_input.exe"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A;copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="$(OutDir)\gen_input &gt;input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+                               AdditionalDependencies="gen_input.exe"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="$(OutDir)\gen_input &gt;input.txt&#x0D;&#x0A;"
+                               AdditionalDependencies="gen_input.exe"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="$(OutDir)\gen_input &gt;input.txt&#x0D;&#x0A;"
+                               AdditionalDependencies="gen_input.exe"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\square.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+                       >
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc9/gen_input.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc9/gen_input.vcproj
new file mode 100644 (file)
index 0000000..a9f3d1d
--- /dev/null
@@ -0,0 +1,347 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9,00"
+       Name="gen_input"
+       ProjectGUID="{25A46A49-406F-4681-8AC9-5FE46F38E5A7}"
+       RootNamespace="gen_input"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+                               MinimalRebuild="true"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                               DebugInformationFormat="4"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="2"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+                               MinimalRebuild="true"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="2"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="1"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               LinkIncremental="1"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\gen_input.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+                       >
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc9/square.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc9/square.sln
new file mode 100644 (file)
index 0000000..6e44ca3
--- /dev/null
@@ -0,0 +1,38 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "square", "square.vcproj", "{A21C0AEE-ADDC-45F0-A668-58FF10351D23}"
+       ProjectSection(ProjectDependencies) = postProject
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7} = {25A46A49-406F-4681-8AC9-5FE46F38E5A7}
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gen_input", "gen_input.vcproj", "{25A46A49-406F-4681-8AC9-5FE46F38E5A7}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.ActiveCfg = Debug|Win32
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.Build.0 = Debug|Win32
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.ActiveCfg = Debug|x64
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.Build.0 = Debug|x64
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.ActiveCfg = Release|Win32
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.Build.0 = Release|Win32
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.ActiveCfg = Release|x64
+               {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.Build.0 = Release|x64
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|Win32.ActiveCfg = Debug|Win32
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|Win32.Build.0 = Debug|Win32
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|x64.ActiveCfg = Debug|x64
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|x64.Build.0 = Debug|x64
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|Win32.ActiveCfg = Release|Win32
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|Win32.Build.0 = Release|Win32
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|x64.ActiveCfg = Release|x64
+               {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc9/square.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/vc9/square.vcproj
new file mode 100644 (file)
index 0000000..dbedc38
--- /dev/null
@@ -0,0 +1,375 @@
+<?xml version="1.0" encoding="windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9,00"
+       Name="square"
+       ProjectGUID="{A21C0AEE-ADDC-45F0-A668-58FF10351D23}"
+       RootNamespace="square"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="$(OutDir)\gen_input &gt;input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+                               AdditionalDependencies="gen_input.exe"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="$(OutDir)\gen_input &gt;input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+                               AdditionalDependencies="gen_input.exe"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="$(OutDir)\gen_input &gt;input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+                               AdditionalDependencies="gen_input.exe"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="$(OutDir)\gen_input &gt;input.txt&#x0D;&#x0A;copy input.txt $(OutDir)"
+                               AdditionalDependencies="gen_input.exe"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\square.cpp"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+                       >
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..e6abea8
--- /dev/null
@@ -0,0 +1,437 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 42;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               6DA3F3EC0DE5D3D80039CADE /* gen_input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D0FC7170DE5BA4D0026B02B /* gen_input.cpp */; };
+               A1F593A60B8F042A00073279 /* square.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* square.cpp */; };
+               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+               6DA3F3ED0DE5D4090039CADE /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 6DA3F3E10DE5D34A0039CADE;
+                       remoteInfo = "gen-input";
+               };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+               8DD76F690486A84900D96B5E /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 12;
+                       dstPath = "";
+                       dstSubfolderSpec = 16;
+                       files = (
+                               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+               6D0FC7170DE5BA4D0026B02B /* gen_input.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = gen_input.cpp; path = ../gen_input.cpp; sourceTree = SOURCE_ROOT; };
+               6DA3F3E20DE5D34A0039CADE /* gen-input */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gen-input"; sourceTree = BUILT_PRODUCTS_DIR; };
+               8DD76F6C0486A84900D96B5E /* square */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = square; sourceTree = BUILT_PRODUCTS_DIR; };
+               A1F593A50B8F042A00073279 /* square.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = square.cpp; path = ../square.cpp; sourceTree = SOURCE_ROOT; };
+               A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               6DA3F3E00DE5D34A0039CADE /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               8DD76F660486A84900D96B5E /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               08FB7794FE84155DC02AAC07 /* square */ = {
+                       isa = PBXGroup;
+                       children = (
+                               08FB7795FE84155DC02AAC07 /* Source */,
+                               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+                               1AB674ADFE9D54B511CA2CBB /* Products */,
+                       );
+                       name = square;
+                       sourceTree = "<group>";
+               };
+               08FB7795FE84155DC02AAC07 /* Source */ = {
+                       isa = PBXGroup;
+                       children = (
+                               6D0FC7170DE5BA4D0026B02B /* gen_input.cpp */,
+                               A1F593A50B8F042A00073279 /* square.cpp */,
+                       );
+                       name = Source;
+                       sourceTree = "<group>";
+               };
+               1AB674ADFE9D54B511CA2CBB /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               8DD76F6C0486A84900D96B5E /* square */,
+                               6DA3F3E20DE5D34A0039CADE /* gen-input */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F593B30B8F06F900073279 /* libtbb.dylib */,
+                       );
+                       name = "External Frameworks and Libraries";
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+               6DA3F3E10DE5D34A0039CADE /* gen-input */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 6DA3F3E40DE5D36B0039CADE /* Build configuration list for PBXNativeTarget "gen-input" */;
+                       buildPhases = (
+                               6DA3F3DF0DE5D34A0039CADE /* Sources */,
+                               6DA3F3E00DE5D34A0039CADE /* Frameworks */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = "gen-input";
+                       productName = "gen-input";
+                       productReference = 6DA3F3E20DE5D34A0039CADE /* gen-input */;
+                       productType = "com.apple.product-type.tool";
+               };
+               8DD76F620486A84900D96B5E /* square */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "square" */;
+                       buildPhases = (
+                               8DD76F640486A84900D96B5E /* Sources */,
+                               8DD76F660486A84900D96B5E /* Frameworks */,
+                               8DD76F690486A84900D96B5E /* CopyFiles */,
+                               6D3576C90DE5C7A500C03B6D /* ShellScript */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               6DA3F3EE0DE5D4090039CADE /* PBXTargetDependency */,
+                       );
+                       name = square;
+                       productInstallPath = "$(HOME)/bin";
+                       productName = square;
+                       productReference = 8DD76F6C0486A84900D96B5E /* square */;
+                       productType = "com.apple.product-type.tool";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               08FB7793FE84155DC02AAC07 /* Project object */ = {
+                       isa = PBXProject;
+                       buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "square" */;
+                       compatibilityVersion = "Xcode 2.4";
+                       hasScannedForEncodings = 1;
+                       mainGroup = 08FB7794FE84155DC02AAC07 /* square */;
+                       projectDirPath = "";
+                       projectRoot = "";
+                       targets = (
+                               8DD76F620486A84900D96B5E /* square */,
+                               6DA3F3E10DE5D34A0039CADE /* gen-input */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+               6D3576C90DE5C7A500C03B6D /* ShellScript */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       outputPaths = (
+                               "$(TARGET_BUILD_DIR)/input.txt",
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "$TARGET_BUILD_DIR/gen-input >$TARGET_BUILD_DIR/input.txt";
+               };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+               6DA3F3DF0DE5D34A0039CADE /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               6DA3F3EC0DE5D3D80039CADE /* gen_input.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               8DD76F640486A84900D96B5E /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593A60B8F042A00073279 /* square.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+               6DA3F3EE0DE5D4090039CADE /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 6DA3F3E10DE5D34A0039CADE /* gen-input */;
+                       targetProxy = 6DA3F3ED0DE5D4090039CADE /* PBXContainerItemProxy */;
+               };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+               1DEB923208733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = square;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug;
+               };
+               1DEB923308733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = square;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               1DEB923608733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug;
+               };
+               1DEB923708733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release;
+               };
+               6DA3F3E50DE5D36B0039CADE /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+                               GCC_MODEL_TUNING = G5;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = "gen-input";
+                               ZERO_LINK = YES;
+                       };
+                       name = Debug;
+               };
+               6DA3F3E60DE5D36B0039CADE /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_MODEL_TUNING = G5;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = "gen-input";
+                               ZERO_LINK = YES;
+                       };
+                       name = Debug64;
+               };
+               6DA3F3E70DE5D36B0039CADE /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = YES;
+                               GCC_ENABLE_FIX_AND_CONTINUE = NO;
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               GCC_MODEL_TUNING = G5;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = "gen-input";
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               6DA3F3E80DE5D36B0039CADE /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_MODEL_TUNING = G5;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = "gen-input";
+                               ZERO_LINK = YES;
+                       };
+                       name = Release64;
+               };
+               A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = square;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug64;
+               };
+               A1F593C70B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = square;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release64;
+               };
+               A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug64;
+               };
+               A1F593C90B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release64;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "square" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923208733DC60010E9CD /* Debug */,
+                               A1F593C60B8F0E6E00073279 /* Debug64 */,
+                               1DEB923308733DC60010E9CD /* Release */,
+                               A1F593C70B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "square" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923608733DC60010E9CD /* Debug */,
+                               A1F593C80B8F0E6E00073279 /* Debug64 */,
+                               1DEB923708733DC60010E9CD /* Release */,
+                               A1F593C90B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               6DA3F3E40DE5D36B0039CADE /* Build configuration list for PBXNativeTarget "gen-input" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               6DA3F3E50DE5D36B0039CADE /* Debug */,
+                               6DA3F3E60DE5D36B0039CADE /* Debug64 */,
+                               6DA3F3E70DE5D36B0039CADE /* Release */,
+                               6DA3F3E80DE5D36B0039CADE /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/Makefile
new file mode 100644 (file)
index 0000000..53a2425
--- /dev/null
@@ -0,0 +1,49 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=text_filter
+ARGS=input.txt output.txt
+
+# The C++ compiler
+#CXX=g++
+
+all:   release test
+
+release: *.cpp
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
+
+debug: *.cpp
+       $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+
+clean:
+       $(RM) $(PROG) *.o *.d input.txt output.txt
+
+test:
+       @echo Constructing input.txt
+       @cat index.html > input.txt
+       @-csh -c "repeat 500 cat index.html >> input.txt" 2>/dev/null
+       ./$(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/Makefile.windows
new file mode 100644 (file)
index 0000000..1025132
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Text_Filter
+ARGS=input.txt output.txt
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+release:
+       $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+debug:
+       $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+clean:
+       @cmd.exe /C del $(PROG).exe input.txt output.txt *.obj *.?db *.manifest
+input.txt:
+       @echo Constructing input.txt
+       @cmd.exe /C "@type index.html >input.txt"
+       @-cmd.exe /C "for /L %%a in (1,1,500) do @type index.html >> input.txt"
+test: input.txt
+       $(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/index.html
new file mode 100644 (file)
index 0000000..e6907f9
--- /dev/null
@@ -0,0 +1,58 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Text filter that demonstrates class pipeline.  
+The <A href=" ../../../doc/Tutorial.pdf">Tutorial</A> explains this example in detail.
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="text_filter.cpp">text_filter.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+<P></P>
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>text_filter <I>inputfile</I> <I>outputfile</I> <I>N</I></TT>
+<DD>Run the example on the named <I>inputfile</I> and produce the named <I>outputfile</I>.
+    <I>N</I> is the number of threads to be used.
+<DT>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+    (see the <A HREF=../../index.html#build>build directions</A>).
+    <BR>Prepare an <I>inputfile</I> with about 5,000 lines of text (e.g., by concatenating all the index.html
+       files in the examples/ directory tree).
+    <BR>Run it with this <I>inputfile</I> and the desired number of threads,
+       e.g., <TT>text_filter <I>inputfile</I> <I>outputfile</I> 4</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/text_filter.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/text_filter.cpp
new file mode 100644 (file)
index 0000000..bd5247b
--- /dev/null
@@ -0,0 +1,247 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+//
+// Example program that reads a file of text and changes the first letter
+// of each word to upper case.
+// 
+#include "tbb/pipeline.h"
+#include "tbb/tick_count.h"
+#include "tbb/task_scheduler_init.h"
+#include <cstring>
+#include <cstdlib>
+#include <cstdio>
+#include <cctype>
+
+using namespace std;
+
+//! Buffer that holds block of characters and last character of previous buffer.
+class MyBuffer {
+    static const size_t buffer_size = 10000;
+    char* my_end;
+    //! storage[0] holds the last character of the previous buffer.
+    char storage[1+buffer_size];
+public:
+    //! Pointer to first character in the buffer
+    char* begin() {return storage+1;}
+    const char* begin() const {return storage+1;}
+    //! Pointer to one past last character in the buffer
+    char* end() const {return my_end;}
+    //! Set end of buffer.
+    void set_end( char* new_ptr ) {my_end=new_ptr;}
+    //! Number of bytes a buffer can hold
+    size_t max_size() const {return buffer_size;}
+    //! Number of bytes appended to buffer.
+    size_t size() const {return my_end-begin();}
+};
+
+static const char* InputFileName = "input.txt";
+static const char* OutputFileName = "output.txt";
+
+class MyInputFilter: public tbb::filter {
+public:
+    static const size_t n_buffer = 8;
+    MyInputFilter( FILE* input_file_ );
+private:
+    FILE* input_file;
+    size_t next_buffer;
+    char last_char_of_previous_buffer;
+    MyBuffer buffer[n_buffer];
+    /*override*/ void* operator()(void*);
+};
+
+MyInputFilter::MyInputFilter( FILE* input_file_ ) : 
+    filter(serial_in_order),
+    next_buffer(0),
+    input_file(input_file_),
+    last_char_of_previous_buffer(' ')
+{ 
+}
+
+void* MyInputFilter::operator()(void*) {
+    MyBuffer& b = buffer[next_buffer];
+    next_buffer = (next_buffer+1) % n_buffer;
+    size_t n = fread( b.begin(), 1, b.max_size(), input_file );
+    if( !n ) {
+        // end of file
+        return NULL;
+    } else {
+        b.begin()[-1] = last_char_of_previous_buffer;
+        last_char_of_previous_buffer = b.begin()[n-1];
+        b.set_end( b.begin()+n );
+        return &b;
+    }
+}
+
+//! Filter that changes the first letter of each word from lower case to upper case.
+class MyTransformFilter: public tbb::filter {
+public:
+    MyTransformFilter();
+    /*override*/void* operator()( void* item );
+};
+
+MyTransformFilter::MyTransformFilter() : 
+    tbb::filter(parallel) 
+{}  
+
+/*override*/void* MyTransformFilter::operator()( void* item ) {
+    MyBuffer& b = *static_cast<MyBuffer*>(item);
+    int prev_char_is_space = b.begin()[-1]==' ';
+    for( char* s=b.begin(); s!=b.end(); ++s ) {
+        if( prev_char_is_space && islower((unsigned char)*s) )
+            *s = toupper(*s);
+        prev_char_is_space = isspace((unsigned char)*s);
+    }
+    return &b;  
+}
+         
+//! Filter that writes each buffer to a file.
+class MyOutputFilter: public tbb::filter {
+    FILE* my_output_file;
+public:
+    MyOutputFilter( FILE* output_file );
+    /*override*/void* operator()( void* item );
+};
+
+MyOutputFilter::MyOutputFilter( FILE* output_file ) : 
+    tbb::filter(serial_in_order),
+    my_output_file(output_file)
+{
+}
+
+void* MyOutputFilter::operator()( void* item ) {
+    MyBuffer& b = *static_cast<MyBuffer*>(item);
+    int n = (int) fwrite( b.begin(), 1, b.size(), my_output_file );
+    if( n<=0 ) {
+        fprintf(stderr,"Can't write into %s file\n", OutputFileName);
+        exit(1);
+    }
+    return NULL;
+}
+
+static int NThread = tbb::task_scheduler_init::automatic;
+static bool is_number_of_threads_set = false;
+
+void Usage()
+{
+    fprintf( stderr, "Usage:\ttext_filter [input-file [output-file [nthread]]]\n");
+}
+
+int ParseCommandLine(  int argc, char* argv[] ) {
+    // Parse command line
+    if( argc> 4 ){
+        Usage();
+        return 0;
+    }
+    if( argc>=2 ) InputFileName = argv[1];
+    if( argc>=3 ) OutputFileName = argv[2];
+    if( argc>=4 ) {
+        NThread = strtol(argv[3],0,0);
+        if( NThread<1 ) {
+            fprintf(stderr,"nthread set to %d, but must be at least 1\n",NThread);
+            return 0;
+        }
+        is_number_of_threads_set = true; //Number of threads is set explicitly
+    }
+    return 1;
+}
+
+int run_pipeline( int nthreads )
+{
+    FILE* input_file = fopen(InputFileName,"r");
+    if( !input_file ) {
+        perror( InputFileName );
+        Usage();
+        return 0;
+    }
+    FILE* output_file = fopen(OutputFileName,"w");
+    if( !output_file ) {
+        perror( OutputFileName );
+        return 0;
+    }
+
+    // Create the pipeline
+    tbb::pipeline pipeline;
+
+    // Create file-reading writing stage and add it to the pipeline
+    MyInputFilter input_filter( input_file );
+    pipeline.add_filter( input_filter );
+
+    // Create capitalization stage and add it to the pipeline
+    MyTransformFilter transform_filter; 
+    pipeline.add_filter( transform_filter );
+
+    // Create file-writing stage and add it to the pipeline
+    MyOutputFilter output_filter( output_file );
+    pipeline.add_filter( output_filter );
+
+    // Run the pipeline
+    tbb::tick_count t0 = tbb::tick_count::now();
+    pipeline.run( MyInputFilter::n_buffer );
+    tbb::tick_count t1 = tbb::tick_count::now();
+
+    // Remove filters from pipeline before they are implicitly destroyed.
+    pipeline.clear(); 
+
+    fclose( output_file );
+    fclose( input_file );
+
+    if (is_number_of_threads_set) {
+        printf("threads = %d time = %g\n", nthreads, (t1-t0).seconds());
+    } else {
+        if ( nthreads == 1 ){
+            printf("single thread run time = %g\n", (t1-t0).seconds());
+        } else {
+            printf("parallel run time = %g\n", (t1-t0).seconds());
+        }
+    }
+    return 1;
+}
+
+int main( int argc, char* argv[] ) {
+    if(!ParseCommandLine( argc, argv ))
+        return 1;
+    if (is_number_of_threads_set) {
+        // Start task scheduler
+        tbb::task_scheduler_init init( NThread );
+        if(!run_pipeline (NThread))
+            return 1;
+    } else { // Number of threads wasn't set explicitly. Run single-thread and fully subscribed parallel versions
+        { // single-threaded run
+            tbb::task_scheduler_init init_serial(1);
+            if(!run_pipeline (1))
+                return 1;
+        }
+        { // parallel run (number of threads is selected automatically)
+            tbb::task_scheduler_init init_parallel;
+            if(!run_pipeline (0))
+                return 1;
+        }
+    }
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc7.1/text_filter.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc7.1/text_filter.sln
new file mode 100644 (file)
index 0000000..1ca790a
--- /dev/null
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "text_filter", "text_filter.vcproj", "{4A021AFA-E254-4BCE-918D-377DF1C0BEEF}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               Debug = Debug
+               Release = Release
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Debug.ActiveCfg = Debug|Win32
+               {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Debug.Build.0 = Debug|Win32
+               {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Release.ActiveCfg = Release|Win32
+               {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Release.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc7.1/text_filter.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc7.1/text_filter.suo
new file mode 100644 (file)
index 0000000..022ecbc
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc7.1/text_filter.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc7.1/text_filter.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc7.1/text_filter.vcproj
new file mode 100644 (file)
index 0000000..6a44177
--- /dev/null
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="text_filter"
+       ProjectGUID="{4A021AFA-E254-4BCE-918D-377DF1C0BEEF}"
+       RootNamespace="text_filter"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="type ..\index.html &gt;input.txt&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html &gt;&gt; input.txt"
+                               Outputs="&quot;$(OutDir)\input.txt&quot;"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="type ..\index.html &gt;input.txt&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html &gt;&gt; input.txt"
+                               Outputs="&quot;$(OutDir)\input.txt&quot;"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\text_filter.cpp">
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc8/text_filter.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc8/text_filter.sln
new file mode 100644 (file)
index 0000000..735b680
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "text_filter", "text_filter.vcproj", "{C931C7A2-074E-4150-9E7A-39A03250411D}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug|Win32.ActiveCfg = Debug|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug|Win32.Build.0 = Debug|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug|x64.ActiveCfg = Debug|x64
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug|x64.Build.0 = Debug|x64
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Release|Win32.ActiveCfg = Release|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Release|Win32.Build.0 = Release|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Release|x64.ActiveCfg = Release|x64
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc8/text_filter.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc8/text_filter.suo
new file mode 100644 (file)
index 0000000..c5ebac8
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc8/text_filter.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc8/text_filter.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc8/text_filter.vcproj
new file mode 100644 (file)
index 0000000..b021e71
--- /dev/null
@@ -0,0 +1,368 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="text_filter"
+       ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411D}"
+       RootNamespace="text_filter"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="type ..\index.html &gt;input.txt&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html &gt;&gt; input.txt"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="type ..\index.html &gt;input.txt&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html &gt;&gt; input.txt"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="type ..\index.html &gt;input.txt&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html &gt;&gt; input.txt"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="type ..\index.html &gt;input.txt&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html &gt;&gt; input.txt"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\text_filter.cpp"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc9/text_filter.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc9/text_filter.sln
new file mode 100644 (file)
index 0000000..52cd61c
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "text_filter", "text_filter.vcproj", "{C931C7A2-074E-4150-9E7A-39A03250411D}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug|Win32.ActiveCfg = Debug|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug|Win32.Build.0 = Debug|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug|x64.ActiveCfg = Debug|x64
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug|x64.Build.0 = Debug|x64
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Release|Win32.ActiveCfg = Release|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Release|Win32.Build.0 = Release|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Release|x64.ActiveCfg = Release|x64
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc9/text_filter.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc9/text_filter.suo
new file mode 100644 (file)
index 0000000..b84c9a7
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc9/text_filter.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc9/text_filter.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/vc9/text_filter.vcproj
new file mode 100644 (file)
index 0000000..4d9f192
--- /dev/null
@@ -0,0 +1,365 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="text_filter"
+       ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411D}"
+       RootNamespace="text_filter"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="type ..\index.html &gt;input.txt&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html &gt;&gt; input.txt"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="type ..\index.html &gt;input.txt&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html &gt;&gt; input.txt"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="type ..\index.html &gt;input.txt&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html &gt;&gt; input.txt"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                               Description="Constructing input.txt"
+                               CommandLine="type ..\index.html &gt;input.txt&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html &gt;&gt; input.txt"
+                               Outputs="input.txt"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\text_filter.cpp"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/xcode/text_filter.xcodeproj/project.pbxproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/pipeline/text_filter/xcode/text_filter.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..af35b4e
--- /dev/null
@@ -0,0 +1,314 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 42;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               A1F593A60B8F042A00073279 /* text_filter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* text_filter.cpp */; };
+               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+               8DD76F690486A84900D96B5E /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 12;
+                       dstPath = "";
+                       dstSubfolderSpec = 16;
+                       files = (
+                               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+               8DD76F6C0486A84900D96B5E /* text_filter */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = text_filter; sourceTree = BUILT_PRODUCTS_DIR; };
+               A1F593A50B8F042A00073279 /* text_filter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = text_filter.cpp; path = ../text_filter.cpp; sourceTree = SOURCE_ROOT; };
+               A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               8DD76F660486A84900D96B5E /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               08FB7794FE84155DC02AAC07 /* text_filter */ = {
+                       isa = PBXGroup;
+                       children = (
+                               08FB7795FE84155DC02AAC07 /* Source */,
+                               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+                               1AB674ADFE9D54B511CA2CBB /* Products */,
+                       );
+                       name = text_filter;
+                       sourceTree = "<group>";
+               };
+               08FB7795FE84155DC02AAC07 /* Source */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F593A50B8F042A00073279 /* text_filter.cpp */,
+                       );
+                       name = Source;
+                       sourceTree = "<group>";
+               };
+               1AB674ADFE9D54B511CA2CBB /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               8DD76F6C0486A84900D96B5E /* text_filter */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F593B30B8F06F900073279 /* libtbb.dylib */,
+                       );
+                       name = "External Frameworks and Libraries";
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+               8DD76F620486A84900D96B5E /* text_filter */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "text_filter" */;
+                       buildPhases = (
+                               8DD76F640486A84900D96B5E /* Sources */,
+                               8DD76F660486A84900D96B5E /* Frameworks */,
+                               8DD76F690486A84900D96B5E /* CopyFiles */,
+                               A1F594850B8F293800073279 /* ShellScript */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = text_filter;
+                       productInstallPath = "$(HOME)/bin";
+                       productName = text_filter;
+                       productReference = 8DD76F6C0486A84900D96B5E /* text_filter */;
+                       productType = "com.apple.product-type.tool";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               08FB7793FE84155DC02AAC07 /* Project object */ = {
+                       isa = PBXProject;
+                       buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "text_filter" */;
+                       hasScannedForEncodings = 1;
+                       mainGroup = 08FB7794FE84155DC02AAC07 /* text_filter */;
+                       projectDirPath = "";
+                       targets = (
+                               8DD76F620486A84900D96B5E /* text_filter */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+               A1F594850B8F293800073279 /* ShellScript */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       outputPaths = (
+                               "$(TARGET_BUILD_DIR)/input.txt",
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "cat ../../index.html >$TARGET_BUILD_DIR/input.txt; for ((a=1; a <= 500 ; a++)); do cat ../../index.html >>$TARGET_BUILD_DIR/input.txt; done";
+               };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+               8DD76F640486A84900D96B5E /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593A60B8F042A00073279 /* text_filter.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+               1DEB923208733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = text_filter;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug;
+               };
+               1DEB923308733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = text_filter;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               1DEB923608733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug;
+               };
+               1DEB923708733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release;
+               };
+               A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = text_filter;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug64;
+               };
+               A1F593C70B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = text_filter;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release64;
+               };
+               A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug64;
+               };
+               A1F593C90B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release64;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "text_filter" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923208733DC60010E9CD /* Debug */,
+                               A1F593C60B8F0E6E00073279 /* Debug64 */,
+                               1DEB923308733DC60010E9CD /* Release */,
+                               A1F593C70B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "text_filter" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923608733DC60010E9CD /* Debug */,
+                               A1F593C80B8F0E6E00073279 /* Debug64 */,
+                               1DEB923708733DC60010E9CD /* Release */,
+                               A1F593C90B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/index.html
new file mode 100644 (file)
index 0000000..9de11f8
--- /dev/null
@@ -0,0 +1,25 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of how to use the raw task scheduler.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="tree_sum/index.html">tree_sum</A>
+<DD>Sum values in a tree.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/Makefile
new file mode 100644 (file)
index 0000000..ad97fe2
--- /dev/null
@@ -0,0 +1,47 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=tree_sum
+ARGS=
+
+# The C++ compiler
+#CXX=g++
+
+all:   release test
+
+release: *.cpp
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbbmalloc -ltbb $(LIBS)
+
+debug: *.cpp
+       $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbbmalloc_debug -ltbb_debug $(LIBS)
+
+clean:
+       $(RM) $(PROG) *.o *.d
+
+test:
+       ./$(PROG) $(ARGS)
+       ./$(PROG) -stdmalloc $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/Makefile.windows
new file mode 100644 (file)
index 0000000..4ecb59b
--- /dev/null
@@ -0,0 +1,47 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Tree_sum
+ARGS=
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+release:
+       $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbbmalloc.lib tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+debug:
+       $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbbmalloc_debug.lib tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+clean:
+       @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+       $(PROG) $(ARGS)
+       $(PROG) -stdmalloc $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/OptimizedParallelSumTree.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/OptimizedParallelSumTree.cpp
new file mode 100644 (file)
index 0000000..4445c28
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "common.h"
+#include "tbb/task.h"
+
+class OptimizedSumTask: public tbb::task {
+    Value* const sum;
+    TreeNode* root;
+    bool is_continuation;
+    Value x, y;
+public:
+    OptimizedSumTask( TreeNode* root_, Value* sum_ ) : root(root_), sum(sum_), is_continuation(false) {
+    }
+    tbb::task* execute() {
+        tbb::task* next = NULL;
+        if( !is_continuation ) {
+            if( root->node_count<1000 ) {
+                *sum = SerialSumTree(root);
+            } else {
+                // Create tasks before spawning any of them.
+                tbb::task* a = NULL;
+                tbb::task* b = NULL;
+                if( root->left )
+                    a = new( allocate_child() ) OptimizedSumTask(root->left,&x);
+                if( root->right )
+                    b = new( allocate_child() ) OptimizedSumTask(root->right,&y);
+                recycle_as_continuation();
+                is_continuation = true;
+                set_ref_count( (a!=NULL)+(b!=NULL) );
+                if( a )
+                    if( b ) spawn(*b);
+                else 
+                    a = b;
+                next = a;
+            }
+        } else {
+            *sum = root->value;
+            if( root->left ) *sum += x;
+            if( root->right ) *sum += y;
+        } 
+        return next;
+    }
+};
+
+Value OptimizedParallelSumTree( TreeNode* root ) {
+    Value sum;
+    OptimizedSumTask& a = *new(tbb::task::allocate_root()) OptimizedSumTask(root,&sum);
+    tbb::task::spawn_root_and_wait(a);
+    return sum;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/SerialSumTree.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/SerialSumTree.cpp
new file mode 100644 (file)
index 0000000..2f39bae
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "common.h"
+
+Value SerialSumTree( TreeNode* root ) {
+    Value result = root->value;
+    if( root->left )
+        result += SerialSumTree(root->left);
+    if( root->right )
+        result += SerialSumTree(root->right);
+    return result;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/SimpleParallelSumTree.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/SimpleParallelSumTree.cpp
new file mode 100644 (file)
index 0000000..33e34b1
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "common.h"
+#include "tbb/task.h"
+
+class SimpleSumTask: public tbb::task {
+    Value* const sum;
+    TreeNode* root;
+public:
+    SimpleSumTask( TreeNode* root_, Value* sum_ ) : root(root_), sum(sum_) {}
+    task* execute() {
+        if( root->node_count<1000 ) {
+            *sum = SerialSumTree(root);
+        } else {
+            Value x, y;
+            int count = 1; 
+            tbb::task_list list;
+            if( root->left ) {
+                ++count;
+                list.push_back( *new( allocate_child() ) SimpleSumTask(root->left,&x) );
+            }
+            if( root->right ) {
+                ++count;
+                list.push_back( *new( allocate_child() ) SimpleSumTask(root->right,&y) );
+            }
+            // Argument to set_ref_count is one more than size of the list,
+            // because spawn_and_wait_for_all expects an augmented ref_count.
+            set_ref_count(count);
+            spawn_and_wait_for_all(list);
+            *sum = root->value;
+            if( root->left ) *sum += x;
+            if( root->right ) *sum += y;
+        }
+        return NULL;
+    }
+};
+
+Value SimpleParallelSumTree( TreeNode* root ) {
+    Value sum;
+    SimpleSumTask& a = *new(tbb::task::allocate_root()) SimpleSumTask(root,&sum);
+    tbb::task::spawn_root_and_wait(a);
+    return sum;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/common.h b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/common.h
new file mode 100644 (file)
index 0000000..c51248f
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+typedef float Value;
+
+struct TreeNode {
+    //! Pointer to left subtree
+    TreeNode* left; 
+    //! Pointer to right subtree
+    TreeNode* right;
+    //! Number of nodes in this subtree, including this node.
+    long node_count;
+    //! Value associated with the node.
+    Value value;
+};
+
+Value SerialSumTree( TreeNode* root );
+Value SimpleParallelSumTree( TreeNode* root );
+Value OptimizedParallelSumTree( TreeNode* root );
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/index.html
new file mode 100644 (file)
index 0000000..259691e
--- /dev/null
@@ -0,0 +1,79 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains a simple example that sums values in a tree.
+The example exhibits some speedup, but not a lot,  because it quickly saturates 
+the system bus on a multiprocessor.  For good speedup, there needs to be 
+more computation cycles per memory reference.  The point of the example 
+is to teach how to use the raw task interface, so the computation is
+deliberately trivial.
+<P>
+The performance of this example is better when objects are allocated
+by the Threading Building Blocks scalable_allocator instead of
+the default "operator new".  The reason is that the scalable_allocator typically
+packs small objects more tightly than the default "operator new", resulting in
+a smaller memory footprint, and thus more efficient use of cache and virtual memory.
+In addition, the scalable_allocator performs better for multi-threaded allocations.
+</P>
+<H2>Files</H2>
+<DL>
+<DT><A HREF="SerialSumTree.cpp">SerialSumTree.cpp</A>
+<DD>Sums sequentially.
+<DT><A HREF="SimpleParallelSumTree.cpp">SimpleParallelSumTree.cpp</A><DT>
+<DD>Sums in parallel without any fancy tricks.
+<DT><A HREF="OptimizedParallelSumTree.cpp">OptimizedParallelSumTree.cpp</A><DT>
+<DD>Sums in parallel, using "recycling" and "continuation-passing" tricks. 
+    In this case, it is only slightly faster than the simple version.  
+<DT><A HREF="common.h">common.h</A>
+<DD>Shared declarations.
+<DT><A HREF="main.cpp">main.cpp</A>
+<DD>Driver.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+<P></P>
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>tree_sum [-stdmalloc] <I>S</I> <I>N</I></TT>
+<DD><I>S</I> is the problem size (the number of nodes in the tree).
+    <I>N</I> is the number of threads to be used.
+    <BR>
+    Passing "-stdmalloc" as the 1st parameter causes the default "operator new"
+    to be used for memory allocations instead of the TBB scalable_allocator.
+
+<DT>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+    (see the <A HREF=../../index.html#build>build directions</A>).
+    <BR>Run it with a small problem size and the desired number of threads, e.g., <TT>tree_sum 100000 4</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/main.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/main.cpp
new file mode 100644 (file)
index 0000000..338b36a
--- /dev/null
@@ -0,0 +1,193 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "common.h"
+#include "tbb/tick_count.h"
+#include "tbb/task.h"
+#include "tbb/task_scheduler_init.h"
+#include <cstdlib>
+#include <cstdio>
+#include <cstring>
+
+// The performance of this example can be significantly better when
+// the objects are allocated by the scalable_allocator instead of the
+// default "operator new".  The reason is that the scalable_allocator
+// typically packs small objects more tightly than the default "operator new",
+// resulting in a smaller memory footprint, and thus more efficient use of
+// cache and virtual memory.  Also the scalable_allocator works faster for
+// multi-threaded allocations.
+//
+// Pass -stdmalloc as the 1st command line parameter to use the default "operator new"
+// and see the performance difference.
+
+#include "tbb/scalable_allocator.h"
+
+using namespace std;
+
+static double Pi = 3.14159265358979;
+
+const bool tbbmalloc = true;
+const bool stdmalloc = false;
+
+template<bool use_tbbmalloc>
+class TreeMaker {
+
+    class SubTreeCreationTask: public tbb::task {
+        TreeNode*& my_root;
+        bool is_continuation;
+        typedef TreeMaker<use_tbbmalloc> MyTreeMaker;
+
+    public:
+        SubTreeCreationTask( TreeNode*& root, long number_of_nodes ) : my_root(root), is_continuation(false) {
+            my_root = MyTreeMaker::allocate_node();
+            my_root->node_count = number_of_nodes;
+            my_root->value = Value(Pi*number_of_nodes);
+        }
+
+        tbb::task* execute() {
+            tbb::task* next = NULL;
+            if( !is_continuation ) {
+                long subtree_size = my_root->node_count - 1;
+                if( subtree_size<1000 ) { /* grainsize */
+                    my_root->left  = MyTreeMaker::do_in_one_thread(subtree_size/2);
+                    my_root->right = MyTreeMaker::do_in_one_thread(subtree_size - subtree_size/2);
+                } else {
+                    // Create tasks before spawning any of them.
+                    tbb::task* a = new( allocate_child() ) SubTreeCreationTask(my_root->left,subtree_size/2);
+                    tbb::task* b = new( allocate_child() ) SubTreeCreationTask(my_root->right,subtree_size - subtree_size/2);
+                    recycle_as_continuation();
+                    is_continuation = true;
+                    set_ref_count(2);
+                    spawn(*b);
+                    next = a;
+                }
+            } 
+            return next;
+        }
+    };
+
+public:
+    static TreeNode* allocate_node() {
+        return use_tbbmalloc? tbb::scalable_allocator<TreeNode>().allocate(1) : new TreeNode;
+    }
+
+    static TreeNode* do_in_one_thread( long number_of_nodes ) {
+        if( number_of_nodes==0 ) {
+            return NULL;
+        } else {
+            TreeNode* n = allocate_node();
+            n->node_count = number_of_nodes;
+            n->value = Value(Pi*number_of_nodes);
+            --number_of_nodes;
+            n->left  = do_in_one_thread( number_of_nodes/2 ); 
+            n->right = do_in_one_thread( number_of_nodes - number_of_nodes/2 );
+            return n;
+        }
+    }
+
+    static TreeNode* do_in_parallel( long number_of_nodes ) {
+        TreeNode* root_node;
+        SubTreeCreationTask& a = *new(tbb::task::allocate_root()) SubTreeCreationTask(root_node, number_of_nodes);
+        tbb::task::spawn_root_and_wait(a);
+        return root_node;
+    }
+
+    static TreeNode* create_and_time( long number_of_nodes ) {
+        tbb::tick_count t0, t1;
+        TreeNode* root = allocate_node();
+        root->node_count = number_of_nodes;
+        root->value = Value(Pi*number_of_nodes);
+        --number_of_nodes;
+
+        t0 = tbb::tick_count::now();
+        root->left  = do_in_one_thread( number_of_nodes/2 );
+        t1 = tbb::tick_count::now();
+        printf ("%24s: time = %.1f msec\n", "half created serially", (t1-t0).seconds()*1000);
+
+        t0 = tbb::tick_count::now();
+        root->right = do_in_parallel( number_of_nodes - number_of_nodes/2 );
+        t1 = tbb::tick_count::now();
+        printf ("%24s: time = %.1f msec\n", "half done in parallel", (t1-t0).seconds()*1000);
+
+        return root;
+    }
+};
+
+int main( int argc, char *argv[] ) {
+    // Parse command line parameters
+    // The format is: <exe_name> [-stdmalloc] [num_of_nodes [num_of_threads]]
+    bool use_tbbmalloc = true;
+    int arg_idx = 1;
+    if( argc>1 && strcmp(argv[1], "-stdmalloc")==0 ) {
+        use_tbbmalloc = false;
+        arg_idx = 2;
+    }
+    long number_of_nodes = argc>arg_idx ? strtol(argv[arg_idx],0,0) : 10000000;
+    ++arg_idx;
+    int nthread = argc>arg_idx ? strtol(argv[arg_idx],0,0) : tbb::task_scheduler_init::automatic;
+
+    // Start up scheduler
+    // For production, no argument should be provided to the constructor, so that
+    // the application gets the number of threads that are physically available.
+    tbb::task_scheduler_init init(nthread);
+
+    TreeNode* root;
+    if( use_tbbmalloc ) {
+        printf("Tree creation using TBB scalable allocator\n");
+        root = TreeMaker<tbbmalloc>::create_and_time( number_of_nodes );
+    } else {
+        printf("Tree creation using standard operator new\n");
+        root = TreeMaker<stdmalloc>::create_and_time( number_of_nodes );
+    }
+
+    // Warm up caches
+    SerialSumTree(root);
+    printf("Calculations:\n");
+    const char* which;
+    for( int i=0; i<3; ++i ) {
+        tbb::tick_count t0 = tbb::tick_count::now();
+        Value result;
+        switch( i ) {
+            case 0: 
+                which = "SerialSumTree";
+                result = SerialSumTree(root); 
+                break;
+            case 1: 
+                which = "SimpleParallelSumTree";
+                result = SimpleParallelSumTree(root); 
+                break;
+            case 2: 
+                which = "OptimizedParallelSumTree";
+                result = OptimizedParallelSumTree(root); 
+                break;
+        }
+        tbb::tick_count t1 = tbb::tick_count::now();
+        printf ("%24s: time = %.1f msec, sum=%g\n", which, (t1-t0).seconds()*1000, result);
+    }
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc7.1/tree_sum.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc7.1/tree_sum.sln
new file mode 100644 (file)
index 0000000..2c1d774
--- /dev/null
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tree_sum", "tree_sum.vcproj", "{C931C7A2-074E-4150-9E7A-39A03250411D}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               Debug = Debug
+               Release = Release
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug.ActiveCfg = Debug|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug.Build.0 = Debug|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Release.ActiveCfg = Release|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411D}.Release.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc7.1/tree_sum.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc7.1/tree_sum.suo
new file mode 100644 (file)
index 0000000..60eb2f2
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc7.1/tree_sum.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc7.1/tree_sum.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc7.1/tree_sum.vcproj
new file mode 100644 (file)
index 0000000..c2e575a
--- /dev/null
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="tree_sum"
+       ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411D}"
+       RootNamespace="tree_sum"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot; &amp;&amp; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot; &amp;&amp; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+                       <File
+                               RelativePath="..\main.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\OptimizedParallelSumTree.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\SerialSumTree.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\SimpleParallelSumTree.cpp">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="">
+                       <File
+                               RelativePath="..\common.h">
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc8/tree_sum.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc8/tree_sum.sln
new file mode 100644 (file)
index 0000000..d417699
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tree_sum", "tree_sum.vcproj", "{C931C7A2-074E-4150-9E7A-39A03250411E}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc8/tree_sum.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc8/tree_sum.suo
new file mode 100644 (file)
index 0000000..d03bcea
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc8/tree_sum.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc8/tree_sum.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc8/tree_sum.vcproj
new file mode 100644 (file)
index 0000000..85f23de
--- /dev/null
@@ -0,0 +1,372 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="tree_sum"
+       ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411E}"
+       RootNamespace="tree_sum"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot; &amp;&amp; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot; &amp;&amp; copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot; &amp;&amp; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot; &amp;&amp; copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\common.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\main.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\OptimizedParallelSumTree.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\SerialSumTree.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\SimpleParallelSumTree.cpp"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc9/tree_sum.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc9/tree_sum.sln
new file mode 100644 (file)
index 0000000..6a573d9
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tree_sum", "tree_sum.vcproj", "{C931C7A2-074E-4150-9E7A-39A03250411E}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64
+               {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc9/tree_sum.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc9/tree_sum.suo
new file mode 100644 (file)
index 0000000..2daf57a
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc9/tree_sum.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc9/tree_sum.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/vc9/tree_sum.vcproj
new file mode 100644 (file)
index 0000000..d2549df
--- /dev/null
@@ -0,0 +1,369 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="tree_sum"
+       ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411E}"
+       RootNamespace="tree_sum"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot; &amp;&amp; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot; &amp;&amp; copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot; &amp;&amp; copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbbmalloc_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbbmalloc_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib tbbmalloc.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot; &amp;&amp; copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbbmalloc.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbbmalloc.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\common.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\main.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\OptimizedParallelSumTree.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\SerialSumTree.cpp"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\SimpleParallelSumTree.cpp"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..618ee0b
--- /dev/null
@@ -0,0 +1,325 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 42;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               05593A100B8F4F4500DE73AB /* common.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 05593A0B0B8F4F4500DE73AB /* common.h */; };
+               05593A110B8F4F4500DE73AB /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0C0B8F4F4500DE73AB /* main.cpp */; };
+               05593A120B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */; };
+               05593A130B8F4F4500DE73AB /* SerialSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */; };
+               05593A140B8F4F4500DE73AB /* SimpleParallelSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0F0B8F4F4500DE73AB /* SimpleParallelSumTree.cpp */; };
+               05593A160B8F4F5D00DE73AB /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */; };
+               05593A170B8F4F6E00DE73AB /* libtbbmalloc.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */; };
+               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+               8DD76F690486A84900D96B5E /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 12;
+                       dstPath = "";
+                       dstSubfolderSpec = 16;
+                       files = (
+                               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+                               05593A170B8F4F6E00DE73AB /* libtbbmalloc.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+               05593A4A0B8F51E000DE73AB /* tree_sum */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tree_sum; sourceTree = BUILT_PRODUCTS_DIR; };
+               05593A0B0B8F4F4500DE73AB /* common.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = common.h; path = ../common.h; sourceTree = SOURCE_ROOT; };
+               05593A0C0B8F4F4500DE73AB /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = SOURCE_ROOT; };
+               05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = OptimizedParallelSumTree.cpp; path = ../OptimizedParallelSumTree.cpp; sourceTree = SOURCE_ROOT; };
+               05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SerialSumTree.cpp; path = ../SerialSumTree.cpp; sourceTree = SOURCE_ROOT; };
+               05593A0F0B8F4F4500DE73AB /* SimpleParallelSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SimpleParallelSumTree.cpp; path = ../SimpleParallelSumTree.cpp; sourceTree = SOURCE_ROOT; };
+               05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbbmalloc.dylib; sourceTree = "<absolute>"; };
+               A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               8DD76F660486A84900D96B5E /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+                               05593A160B8F4F5D00DE73AB /* libtbbmalloc.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               08FB7794FE84155DC02AAC07 /* tree_sum */ = {
+                       isa = PBXGroup;
+                       children = (
+                               08FB7795FE84155DC02AAC07 /* Source */,
+                               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+                               1AB674ADFE9D54B511CA2CBB /* Products */,
+                       );
+                       name = tree_sum;
+                       sourceTree = "<group>";
+               };
+               08FB7795FE84155DC02AAC07 /* Source */ = {
+                       isa = PBXGroup;
+                       children = (
+                               05593A0B0B8F4F4500DE73AB /* common.h */,
+                               05593A0C0B8F4F4500DE73AB /* main.cpp */,
+                               05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */,
+                               05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */,
+                               05593A0F0B8F4F4500DE73AB /* SimpleParallelSumTree.cpp */,
+                       );
+                       name = Source;
+                       sourceTree = "<group>";
+               };
+               1AB674ADFE9D54B511CA2CBB /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               05593A4A0B8F51E000DE73AB /* tree_sum */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+                       isa = PBXGroup;
+                       children = (
+                               05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */,
+                               A1F593B30B8F06F900073279 /* libtbb.dylib */,
+                       );
+                       name = "External Frameworks and Libraries";
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+               8DD76F620486A84900D96B5E /* tree_sum */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "tree_sum" */;
+                       buildPhases = (
+                               8DD76F640486A84900D96B5E /* Sources */,
+                               8DD76F660486A84900D96B5E /* Frameworks */,
+                               8DD76F690486A84900D96B5E /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = tree_sum;
+                       productInstallPath = "$(HOME)/bin";
+                       productName = tree_sum;
+                       productReference = 05593A4A0B8F51E000DE73AB /* tree_sum */;
+                       productType = "com.apple.product-type.tool";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               08FB7793FE84155DC02AAC07 /* Project object */ = {
+                       isa = PBXProject;
+                       buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "tree_sum" */;
+                       hasScannedForEncodings = 1;
+                       mainGroup = 08FB7794FE84155DC02AAC07 /* tree_sum */;
+                       projectDirPath = "";
+                       targets = (
+                               8DD76F620486A84900D96B5E /* tree_sum */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+               8DD76F640486A84900D96B5E /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               05593A110B8F4F4500DE73AB /* main.cpp in Sources */,
+                               05593A120B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp in Sources */,
+                               05593A130B8F4F4500DE73AB /* SerialSumTree.cpp in Sources */,
+                               05593A140B8F4F4500DE73AB /* SimpleParallelSumTree.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+               1DEB923208733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = tree_sum;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug;
+               };
+               1DEB923308733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = tree_sum;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               1DEB923608733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug;
+               };
+               1DEB923708733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release;
+               };
+               A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = tree_sum;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug64;
+               };
+               A1F593C70B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = tree_sum;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release64;
+               };
+               A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug64;
+               };
+               A1F593C90B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release64;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "tree_sum" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923208733DC60010E9CD /* Debug */,
+                               A1F593C60B8F0E6E00073279 /* Debug64 */,
+                               1DEB923308733DC60010E9CD /* Release */,
+                               A1F593C70B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "tree_sum" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923608733DC60010E9CD /* Debug */,
+                               A1F593C80B8F0E6E00073279 /* Debug64 */,
+                               1DEB923708733DC60010E9CD /* Release */,
+                               A1F593C90B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/Fibonacci.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/Fibonacci.cpp
new file mode 100644 (file)
index 0000000..232122f
--- /dev/null
@@ -0,0 +1,601 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/* Example program that computes Fibonacci numbers in different ways.
+   Arguments are: [ Number [Threads [Repeats]]]
+   The defaults are Number=500 Threads=1:4 Repeats=1.
+
+   The point of this program is to check that the library is working properly.
+   Most of the computations are deliberately silly and not expected to
+   show any speedup on multiprocessors.
+*/
+
+// enable assertions
+#ifdef NDEBUG
+#undef NDEBUG
+#endif
+
+#include <cstdio>
+#include <cstdlib>
+#include <cassert>
+#include <utility>
+#include "tbb/task.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+#include "tbb/blocked_range.h"
+#include "tbb/concurrent_vector.h"
+#include "tbb/concurrent_queue.h"
+#include "tbb/concurrent_hash_map.h"
+#include "tbb/parallel_while.h"
+#include "tbb/parallel_for.h"
+#include "tbb/parallel_reduce.h"
+#include "tbb/parallel_scan.h"
+#include "tbb/pipeline.h"
+#include "tbb/atomic.h"
+#include "tbb/mutex.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/queuing_mutex.h"
+#include "tbb/tbb_thread.h"
+
+using namespace std;
+using namespace tbb;
+
+//! type used for Fibonacci number computations
+typedef long long value;
+
+//! Matrix 2x2 class
+struct Matrix2x2
+{
+    //! Array of values
+    value v[2][2];
+    Matrix2x2() {}
+    Matrix2x2(value v00, value v01, value v10, value v11) {
+        v[0][0] = v00; v[0][1] = v01; v[1][0] = v10; v[1][1] = v11;
+    }
+    Matrix2x2 operator * (const Matrix2x2 &to) const; //< Multiply two Matrices
+};
+//! Default matrix to multiply
+static const Matrix2x2 Matrix1110(1, 1, 1, 0);
+//! Raw arrays matrices multiply
+void Matrix2x2Multiply(const value a[2][2], const value b[2][2], value c[2][2]);
+
+/////////////////////// Serial methods ////////////////////////
+
+//! Plain serial sum
+value SerialFib(int n)
+{
+    if(n < 2)
+        return n;
+    value a = 0, b = 1, sum; int i;
+    for( i = 2; i <= n; i++ )
+    {   // n is really index of Fibonacci number
+        sum = a + b; a = b; b = sum;
+    }
+    return sum;
+}
+//! Serial n-1 matrices multiplication
+value SerialMatrixFib(int n)
+{
+    value c[2][2], a[2][2] = {{1, 1}, {1, 0}}, b[2][2] = {{1, 1}, {1, 0}}; int i;
+    for(i = 2; i < n; i++)
+    {   // Using condition to prevent copying of values
+        if(i & 1) Matrix2x2Multiply(a, c, b);
+        else      Matrix2x2Multiply(a, b, c);
+    }
+    return (i & 1) ? c[0][0] : b[0][0]; // get result from upper left cell
+}
+//! Recursive summing. Just for complete list of serial algorithms, not used
+value SerialRecursiveFib(int n)
+{
+    value result;
+    if(n < 2)
+        result = n;
+    else
+        result = SerialRecursiveFib(n - 1) + SerialRecursiveFib(n - 2);
+    return result;
+}
+//! Introducing of queue method in serial
+value SerialQueueFib(int n)
+{
+    concurrent_queue<Matrix2x2> Q;
+    for(int i = 1; i < n; i++)
+        Q.push(Matrix1110);
+    Matrix2x2 A, B;
+    while(true) {
+        while( !Q.try_pop(A) ) this_tbb_thread::yield();
+        if(Q.empty()) break;
+        while( !Q.try_pop(B) ) this_tbb_thread::yield();
+        Q.push(A * B);
+    }
+    return A.v[0][0];
+}
+//! Trying to use concurrent_vector
+value SerialVectorFib(int n)
+{
+    concurrent_vector<value> A;
+    A.grow_by(2);
+    A[0] = 0; A[1] = 1;
+    for( int i = 2; i <= n; i++)
+    {
+        A.grow_to_at_least(i+1);
+        A[i] = A[i-1] + A[i-2];
+    }
+    return A[n];
+}
+
+///////////////////// Parallel methods ////////////////////////
+
+// *** Serial shared by mutexes *** //
+
+//! Shared glabals
+value SharedA = 0, SharedB = 1; int SharedI = 1, SharedN;
+
+//! Template task class which computes Fibonacci numbers with shared globals
+template<typename M>
+class SharedSerialFibBody {
+    M &mutex;
+public:
+    SharedSerialFibBody( M &m ) : mutex( m ) {}
+    //! main loop
+    void operator()( const blocked_range<int>& range ) const {
+        for(;;) {
+            typename M::scoped_lock lock( mutex );
+            if(SharedI >= SharedN) break;
+            value sum = SharedA + SharedB;
+            SharedA = SharedB; SharedB = sum;
+            ++SharedI;
+        }
+    }
+};
+
+//! Root function
+template<class M>
+value SharedSerialFib(int n)
+{
+    SharedA = 0; SharedB = 1; SharedI = 1; SharedN = n; M mutex;
+    parallel_for( blocked_range<int>(0,4,1), SharedSerialFibBody<M>( mutex ) );
+    return SharedB;
+}
+
+// *** Serial shared by concurrent hash map *** //
+
+//! Hash comparer
+struct IntHashCompare {
+    bool equal( const int j, const int k ) const { return j == k; }
+    unsigned long hash( const int k ) const { return (unsigned long)k; }   
+};
+//! NumbersTable type based on concurrent_hash_map
+typedef concurrent_hash_map<int, value, IntHashCompare> NumbersTable;
+//! task for serial method using shared concurrent_hash_map
+class ConcurrentHashSerialFibTask: public task {
+    NumbersTable &Fib;
+    int my_n;
+public:
+    //! constructor
+    ConcurrentHashSerialFibTask( NumbersTable &cht, int n ) : Fib(cht), my_n(n) { }
+    //! executing task
+    /*override*/ task* execute()
+    {
+        for( int i = 2; i <= my_n; ++i ) { // there is no difference in to recycle or to make loop
+            NumbersTable::const_accessor f1, f2; // same as iterators
+            if( !Fib.find(f1, i-1) || !Fib.find(f2, i-2) ) {
+                // Something is seriously wrong, because i-1 and i-2 must have been inserted 
+                // earlier by this thread or another thread.
+                assert(0);
+            }
+            value sum = f1->second + f2->second;
+            NumbersTable::const_accessor fsum;
+            Fib.insert(fsum, make_pair(i, sum)); // inserting
+            assert( fsum->second == sum ); // check value
+        }
+        return 0;
+    }
+};
+
+//! Root function
+value ConcurrentHashSerialFib(int n)
+{
+    NumbersTable Fib; 
+    bool okay;
+    okay = Fib.insert( make_pair(0, 0) ); assert(okay); // assign initial values
+    okay = Fib.insert( make_pair(1, 1) ); assert(okay);
+
+    task_list list;
+    // allocate tasks
+    list.push_back(*new(task::allocate_root()) ConcurrentHashSerialFibTask(Fib, n));
+    list.push_back(*new(task::allocate_root()) ConcurrentHashSerialFibTask(Fib, n));
+    task::spawn_root_and_wait(list);
+    NumbersTable::const_accessor fresult;
+    okay = Fib.find( fresult, n );
+    assert(okay);
+    return fresult->second;
+}
+
+// *** Queue with parallel_for and parallel_while *** //
+
+//! Stream of matrices
+struct QueueStream {
+    volatile bool producer_is_done;
+    concurrent_queue<Matrix2x2> Queue;
+    //! Get pair of matricies if present
+    bool pop_if_present( pair<Matrix2x2, Matrix2x2> &mm ) {
+        // get first matrix if present
+        if(!Queue.try_pop(mm.first)) return false;
+        // get second matrix if present
+        if(!Queue.try_pop(mm.second)) {
+            // if not, then push back first matrix
+            Queue.push(mm.first); return false;
+        }
+        return true;
+    }
+};
+
+//! Functor for parallel_for which fills the queue
+struct parallel_forFibBody { 
+    QueueStream &my_stream;
+    //! fill functor arguments
+    parallel_forFibBody(QueueStream &s) : my_stream(s) { }
+    //! iterate thorough range
+    void operator()( const blocked_range<int> &range ) const {
+        int i_end = range.end();
+        for( int i = range.begin(); i != i_end; ++i ) {
+            my_stream.Queue.push( Matrix1110 ); // push initial matrix
+        }
+    }
+};
+//! Functor for parallel_while which process the queue
+class parallel_whileFibBody
+{
+    QueueStream &my_stream;
+    parallel_while<parallel_whileFibBody> &my_while;
+public:
+    typedef pair<Matrix2x2, Matrix2x2> argument_type;
+    //! fill functor arguments
+    parallel_whileFibBody(parallel_while<parallel_whileFibBody> &w, QueueStream &s)
+        : my_while(w), my_stream(s) { }
+    //! process pair of matrices
+    void operator() (argument_type mm) const {
+        mm.first = mm.first * mm.second;
+        // note: it can run concurrently with QueueStream::pop_if_present()
+        if(my_stream.Queue.try_pop(mm.second))
+             my_while.add( mm ); // now, two matrices available. Add next iteration.
+        else my_stream.Queue.push( mm.first ); // or push back calculated value if queue is empty
+    }
+};
+
+//! Parallel queue's filling task
+struct QueueInsertTask: public task {
+    QueueStream &my_stream;
+    int my_n;
+    //! fill task arguments
+    QueueInsertTask( int n, QueueStream &s ) : my_n(n), my_stream(s) { }
+    //! executing task
+    /*override*/ task* execute() {
+        // Execute of parallel pushing of n-1 initial matrices
+        parallel_for( blocked_range<int>( 1, my_n, 10 ), parallel_forFibBody(my_stream) ); 
+        my_stream.producer_is_done = true; 
+        return 0;
+    }
+};
+//! Parallel queue's processing task
+struct QueueProcessTask: public task {
+    QueueStream &my_stream;
+    //! fill task argument
+    QueueProcessTask( QueueStream &s ) : my_stream(s) { }
+    //! executing task
+    /*override*/ task* execute() {
+        while( !my_stream.producer_is_done || my_stream.Queue.unsafe_size()>1 ) {
+            parallel_while<parallel_whileFibBody> w; // run while loop in parallel
+            w.run( my_stream, parallel_whileFibBody( w, my_stream ) );
+        }
+        return 0;
+    }
+};
+//! Root function
+value ParallelQueueFib(int n)
+{
+    QueueStream stream;
+    stream.producer_is_done = false;
+    task_list list;
+    list.push_back(*new(task::allocate_root()) QueueInsertTask( n, stream ));
+    list.push_back(*new(task::allocate_root()) QueueProcessTask( stream ));
+    // If there is only a single thread, the first task in the list runs to completion
+    // before the second task in the list starts.
+    task::spawn_root_and_wait(list);
+    assert(stream.Queue.unsafe_size() == 1); // it is easy to lose some work
+    Matrix2x2 M; 
+    bool result = stream.Queue.try_pop( M ); // get last matrix
+    assert( result );
+    return M.v[0][0]; // and result number
+}
+
+// *** Queue with pipeline *** //
+
+//! filter to fills queue
+class InputFilter: public filter {
+    atomic<int> N; //< index of Fibonacci number minus 1
+public:
+    concurrent_queue<Matrix2x2> Queue;
+    //! fill filter arguments
+    InputFilter( int n ) : filter(false /*is not serial*/) { N = n; }
+    //! executing filter
+    /*override*/ void* operator()(void*)
+    {
+        int n = --N;
+        if(n <= 0) return 0;
+        Queue.push( Matrix1110 );
+        return &Queue;
+    }
+};
+//! filter to process queue
+class MultiplyFilter: public filter {
+public:
+    MultiplyFilter( ) : filter(false /*is not serial*/) { }
+    //! executing filter
+    /*override*/ void* operator()(void*p)
+    {
+        concurrent_queue<Matrix2x2> &Queue = *static_cast<concurrent_queue<Matrix2x2> *>(p);
+        Matrix2x2 m1, m2;
+        // get two elements
+        while( !Queue.try_pop( m1 ) ) this_tbb_thread::yield(); 
+        while( !Queue.try_pop( m2 ) ) this_tbb_thread::yield();
+        m1 = m1 * m2; // process them
+        Queue.push( m1 ); // and push back
+        return this; // just nothing
+    }
+};
+//! Root function
+value ParallelPipeFib(int n)
+{
+    InputFilter input( n-1 );
+    MultiplyFilter process;
+    // Create the pipeline
+    pipeline pipeline;
+    // add filters
+    pipeline.add_filter( input ); // first
+    pipeline.add_filter( process ); // second
+
+    input.Queue.push( Matrix1110 );
+    // Run the pipeline
+    pipeline.run( n ); // must be larger then max threads number
+    pipeline.clear(); // do not forget clear the pipeline
+
+    assert( input.Queue.unsafe_size()==1 );
+    Matrix2x2 M; 
+    bool result = input.Queue.try_pop( M ); // get last element
+    assert( result );
+    return M.v[0][0]; // get value
+}
+
+// *** parallel_reduce *** //
+
+//! Functor for parallel_reduce
+struct parallel_reduceFibBody {
+    Matrix2x2 sum;
+    int splitted;  //< flag to make one less operation for splitted bodies
+    //! Constructor fills sum with initial matrix
+    parallel_reduceFibBody() : sum( Matrix1110 ), splitted(0) { }
+    //! Splitting constructor
+    parallel_reduceFibBody( parallel_reduceFibBody& other, split ) : sum( Matrix1110 ), splitted(1/*note that it is splitted*/) {}
+    //! Join point
+    void join( parallel_reduceFibBody &s ) {
+        sum = sum * s.sum;
+    }
+    //! Process multiplications
+    void operator()( const blocked_range<int> &r ) {
+        for( int k = r.begin() + splitted; k < r.end(); ++k )
+            sum = sum * Matrix1110;
+        splitted = 0; // reset flag, because this method can be reused for next range
+    }
+};
+//! Root function
+value parallel_reduceFib(int n)
+{
+    parallel_reduceFibBody b;
+    parallel_reduce(blocked_range<int>(2, n, 3), b); // do parallel reduce on range [2, n) for b
+    return b.sum.v[0][0];
+}
+
+// *** parallel_scan *** //
+
+//! Functor for parallel_scan
+struct parallel_scanFibBody {
+    Matrix2x2 sum;
+    int first;  // flag to make one less operation for first range
+    //! Constructor fills sum with initial matrix
+    parallel_scanFibBody() : sum( Matrix1110 ), first(1) {}
+    //! Splitting constructor
+    parallel_scanFibBody( parallel_scanFibBody &b, split) : sum( Matrix1110 ), first(1) {}
+    //! Join point
+    void reverse_join( parallel_scanFibBody &a ) {
+        sum = sum * a.sum;
+    }
+    //! Assign point
+    void assign( parallel_scanFibBody &b ) {
+        sum = b.sum;
+    }
+    //! Process multiplications. For two tags
+    template<typename T>
+    void operator()( const blocked_range<int> &r, T) {
+        // see tag.is_final_scan() for what tag is used
+        for( int k = r.begin() + first; k < r.end(); ++k )
+            sum = sum * Matrix1110;
+        first = 0; // reset flag, because this method can be reused for next range
+    }
+};
+//! Root function
+value parallel_scanFib(int n)
+{
+    parallel_scanFibBody b;
+    parallel_scan(blocked_range<int>(1/*one less, because body skip first*/, n, 3), b);
+    return b.sum.v[0][0];
+}
+
+// *** Raw tasks *** //
+
+//! task class which computes Fibonacci numbers by Lucas formula
+struct FibTask: public task {
+    const int n;
+    value& sum;
+    value x, y;
+    bool second_phase; //< flag of continuation
+    // task arguments
+    FibTask( int n_, value& sum_ ) : 
+        n(n_), sum(sum_), second_phase(false)
+    {}
+    //! Execute task
+    /*override*/ task* execute() {
+        // Using Lucas' formula here
+        if( second_phase ) { // children finished
+            sum = n&1 ? x*x + y*y : x*x - y*y;
+            return NULL;
+        }
+        if( n <= 2 ) {
+            sum = n!=0;
+            return NULL;
+        } else {
+            recycle_as_continuation();  // repeat this task when children finish
+            second_phase = true; // mark second phase
+            FibTask& a = *new( allocate_child() ) FibTask( n/2 + 1, x );
+            FibTask& b = *new( allocate_child() ) FibTask( n/2 - 1 + (n&1), y );
+            set_ref_count(2);
+            spawn( a );
+            return &b;
+        }
+    }
+};
+//! Root function
+value ParallelTaskFib(int n) { 
+    value sum;
+    FibTask& a = *new(task::allocate_root()) FibTask(n, sum);
+    task::spawn_root_and_wait(a);
+    return sum;
+}
+
+/////////////////////////// Main ////////////////////////////////////////////////////
+
+//! A closed range of int.
+struct IntRange {
+    int low;
+    int high;
+    void set_from_string( const char* s );
+    IntRange( int low_, int high_ ) : low(low_), high(high_) {}
+};
+
+void IntRange::set_from_string( const char* s ) {
+    char* end;
+    high = low = strtol(s,&end,0);
+    switch( *end ) {
+    case ':': 
+        high = strtol(end+1,0,0); 
+        break;
+    case '\0':
+        break;
+    default:
+        printf("unexpected character = %c\n",*end);
+    }
+}
+
+//! Tick count for start
+static tick_count t0;
+
+//! Verbose output flag
+static bool Verbose = false;
+
+typedef value (*MeasureFunc)(int);
+//! Measure ticks count in loop [2..n]
+value Measure(const char *name, MeasureFunc func, int n)
+{
+    value result;
+    if(Verbose) printf("%s",name);
+    t0 = tick_count::now();
+    for(int number = 2; number <= n; number++)
+        result = func(number);
+    if(Verbose) printf("\t- in %f msec\n", (tick_count::now() - t0).seconds()*1000);
+    return result;
+}
+
+//! program entry
+int main(int argc, char* argv[])
+{
+    if(argc>1) Verbose = true;
+    int NumbersCount = argc>1 ? strtol(argv[1],0,0) : 500;
+    IntRange NThread(1,4);// Number of threads to use.
+    if(argc>2) NThread.set_from_string(argv[2]);
+    unsigned long ntrial = argc>3? (unsigned long)strtoul(argv[3],0,0) : 1;
+    value result, sum;
+
+    if(Verbose) printf("Fibonacci numbers example. Generating %d numbers..\n",  NumbersCount);
+
+    result = Measure("Serial loop", SerialFib, NumbersCount);
+    sum = Measure("Serial matrix", SerialMatrixFib, NumbersCount); assert(result == sum);
+    sum = Measure("Serial vector", SerialVectorFib, NumbersCount); assert(result == sum);
+    sum = Measure("Serial queue", SerialQueueFib, NumbersCount); assert(result == sum);
+    // now in parallel
+    for( unsigned long i=0; i<ntrial; ++i ) {
+        for(int threads = NThread.low; threads <= NThread.high; threads *= 2)
+        {
+            task_scheduler_init scheduler_init(threads);
+            if(Verbose) printf("\nThreads number is %d\n", threads);
+
+            sum = Measure("Shared serial (mutex)\t", SharedSerialFib<mutex>, NumbersCount); assert(result == sum);
+            sum = Measure("Shared serial (spin_mutex)", SharedSerialFib<spin_mutex>, NumbersCount); assert(result == sum);
+            sum = Measure("Shared serial (queuing_mutex)", SharedSerialFib<queuing_mutex>, NumbersCount); assert(result == sum);
+            sum = Measure("Shared serial (Conc.HashTable)", ConcurrentHashSerialFib, NumbersCount); assert(result == sum);
+            sum = Measure("Parallel while+for/queue", ParallelQueueFib, NumbersCount); assert(result == sum);
+            sum = Measure("Parallel pipe/queue\t", ParallelPipeFib, NumbersCount); assert(result == sum);
+            sum = Measure("Parallel reduce\t\t", parallel_reduceFib, NumbersCount); assert(result == sum);
+            sum = Measure("Parallel scan\t\t", parallel_scanFib, NumbersCount); assert(result == sum);
+            sum = Measure("Parallel tasks\t\t", ParallelTaskFib, NumbersCount); assert(result == sum);
+        }
+
+    #ifdef __GNUC__
+        if(Verbose) printf("Fibonacci number #%d modulo 2^64 is %lld\n\n", NumbersCount, result);
+    #else
+        if(Verbose) printf("Fibonacci number #%d modulo 2^64 is %I64d\n\n", NumbersCount, result);
+    #endif
+    }
+    if(!Verbose) printf("TEST PASSED\n");
+    return 0;
+}
+
+// Utils
+
+void Matrix2x2Multiply(const value a[2][2], const value b[2][2], value c[2][2])
+{
+    for( int i = 0; i <= 1; i++)
+        for( int j = 0; j <= 1; j++)
+            c[i][j] = a[i][0]*b[0][j] + a[i][1]*b[1][j];
+}
+
+Matrix2x2 Matrix2x2::operator *(const Matrix2x2 &to) const
+{
+    Matrix2x2 result;
+    Matrix2x2Multiply(v, to.v, result.v);
+    return result;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/Makefile
new file mode 100644 (file)
index 0000000..5112fe0
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=fibonacci
+ARGS=
+
+# The C++ compiler
+#CXX=g++
+
+all:   release test
+
+release: *.cpp
+       $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
+
+debug: *.cpp
+       $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+
+clean:
+       $(RM) $(PROG) *.o *.d
+
+test:
+       ./$(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/Makefile.windows b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/Makefile.windows
new file mode 100644 (file)
index 0000000..c75face
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Fibonacci
+ARGS=
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+release:
+       $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+debug:
+       $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+clean:
+       @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+       $(PROG) $(ARGS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/index.html
new file mode 100644 (file)
index 0000000..12c3462
--- /dev/null
@@ -0,0 +1,56 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains an example that computes Fibonacci numbers in several
+different ways. The purpose of the example is to exercise every include file
+and class in Threading Building Blocks.
+Most of the computations are deliberately silly and not expected to
+show any speedup on multiprocessors.
+<H2>Files</H2>
+<DL>
+<DT><A HREF="Fibonacci.cpp">Fibonacci.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A> 
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="vc9">vc9</A> 
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>fibonacci <I>K</I> [<I>M</I>[:<I>N</I>]] [<I>R</I>]</TT>
+<DD>Calculates the <I>K</I>-th fibonacci number.
+    <I>M</I> and <I>N</I> are a range of numbers of threads to be used.
+    <I>R</I> is the number of times to repeat the calculation.
+<DT>To run a short version of this example, e.g., for use with Intel&reg; Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+    (see the <A HREF=../../index.html#build>build directions</A>).
+    <BR>Run it with a small fibonacci number and the desired number of threads, e.g., <TT>fibonacci 100 4</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc7.1/fibonacci.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc7.1/fibonacci.sln
new file mode 100644 (file)
index 0000000..7fc4219
--- /dev/null
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Fibonacci", "Fibonacci.vcproj", "{D3A5A89E-2165-45AD-97D4-1AB22D852826}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               Debug = Debug
+               Release = Release
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {D3A5A89E-2165-45AD-97D4-1AB22D852826}.Debug.ActiveCfg = Debug|Win32
+               {D3A5A89E-2165-45AD-97D4-1AB22D852826}.Debug.Build.0 = Debug|Win32
+               {D3A5A89E-2165-45AD-97D4-1AB22D852826}.Release.ActiveCfg = Release|Win32
+               {D3A5A89E-2165-45AD-97D4-1AB22D852826}.Release.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc7.1/fibonacci.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc7.1/fibonacci.suo
new file mode 100644 (file)
index 0000000..74b19c3
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc7.1/fibonacci.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc7.1/fibonacci.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc7.1/fibonacci.vcproj
new file mode 100644 (file)
index 0000000..7504126
--- /dev/null
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="fibonacci"
+       ProjectGUID="{D3A5A89E-2165-45AD-97D4-1AB22D852826}"
+       RootNamespace="fibonacci"
+       Keyword="Win32Proj">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="TRUE"
+                               DebugInformationFormat="3"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc7.1\lib"
+                               GenerateDebugInformation="TRUE"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc7.1\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCWebDeploymentTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx">
+                       <File
+                               RelativePath="..\fibonacci.cpp">
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html">
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc8/fibonacci.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc8/fibonacci.sln
new file mode 100644 (file)
index 0000000..b2cb826
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fibonacci", "fibonacci.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252E}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc8/fibonacci.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc8/fibonacci.suo
new file mode 100644 (file)
index 0000000..dd720db
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc8/fibonacci.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc8/fibonacci.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc8/fibonacci.vcproj
new file mode 100644 (file)
index 0000000..d46a39f
--- /dev/null
@@ -0,0 +1,356 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8,00"
+       Name="fibonacci"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252E}"
+       RootNamespace="fibonacci"
+       Keyword="Win32Proj"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="1"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc8\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc8\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\Fibonacci.cpp"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc9/fibonacci.sln b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc9/fibonacci.sln
new file mode 100644 (file)
index 0000000..46a07de
--- /dev/null
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fibonacci", "fibonacci.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252E}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.ActiveCfg = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.Build.0 = Debug|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.ActiveCfg = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.Build.0 = Debug|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.ActiveCfg = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.Build.0 = Release|Win32
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.ActiveCfg = Release|x64
+               {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.Build.0 = Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc9/fibonacci.suo b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc9/fibonacci.suo
new file mode 100644 (file)
index 0000000..c80da6b
Binary files /dev/null and b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc9/fibonacci.suo differ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc9/fibonacci.vcproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/vc9/fibonacci.vcproj
new file mode 100644 (file)
index 0000000..941c14f
--- /dev/null
@@ -0,0 +1,353 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="fibonacci"
+       ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252E}"
+       RootNamespace="fibonacci"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+               <Platform
+                       Name="x64"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\ia32\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               RandomizedBaseAddress="1"
+                               FixedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\ia32\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb_debug.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb_debug.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+                       ConfigurationType="1"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalIncludeDirectories="$(TBB22_INSTALL_DIR)\include"
+                               PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="tbb.lib"
+                               LinkIncremental="1"
+                               AdditionalLibraryDirectories="$(TBB22_INSTALL_DIR)\intel64\vc9\lib"
+                               GenerateDebugInformation="true"
+                               SubSystem="1"
+                               OptimizeReferences="2"
+                               EnableCOMDATFolding="2"
+                               TargetMachine="17"
+                               FixedBaseAddress="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying DLLs and PDBs"
+                               CommandLine="copy &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.dll&quot; &quot;$(OutDir)&quot;&#x0D;&#x0A; copy  &quot;$(TBB22_INSTALL_DIR)\intel64\vc9\bin\tbb.pdb&quot; &quot;$(OutDir)&quot;"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\Fibonacci.cpp"
+                               >
+                       </File>
+               </Filter>
+               <File
+                       RelativePath="..\index.html"
+                       >
+               </File>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..daabb37
--- /dev/null
@@ -0,0 +1,296 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 42;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               A1F593A60B8F042A00073279 /* Fibonacci.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* Fibonacci.cpp */; };
+               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+               8DD76F690486A84900D96B5E /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 12;
+                       dstPath = "";
+                       dstSubfolderSpec = 16;
+                       files = (
+                               A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+               8DD76F6C0486A84900D96B5E /* Fibonacci */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Fibonacci; sourceTree = BUILT_PRODUCTS_DIR; };
+               A1F593A50B8F042A00073279 /* Fibonacci.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Fibonacci.cpp; path = ../Fibonacci.cpp; sourceTree = SOURCE_ROOT; };
+               A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               8DD76F660486A84900D96B5E /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               08FB7794FE84155DC02AAC07 /* Fibonacci */ = {
+                       isa = PBXGroup;
+                       children = (
+                               08FB7795FE84155DC02AAC07 /* Source */,
+                               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+                               1AB674ADFE9D54B511CA2CBB /* Products */,
+                       );
+                       name = Fibonacci;
+                       sourceTree = "<group>";
+               };
+               08FB7795FE84155DC02AAC07 /* Source */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F593A50B8F042A00073279 /* Fibonacci.cpp */,
+                       );
+                       name = Source;
+                       sourceTree = "<group>";
+               };
+               1AB674ADFE9D54B511CA2CBB /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               8DD76F6C0486A84900D96B5E /* Fibonacci */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+                       isa = PBXGroup;
+                       children = (
+                               A1F593B30B8F06F900073279 /* libtbb.dylib */,
+                       );
+                       name = "External Frameworks and Libraries";
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+               8DD76F620486A84900D96B5E /* Fibonacci */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Fibonacci" */;
+                       buildPhases = (
+                               8DD76F640486A84900D96B5E /* Sources */,
+                               8DD76F660486A84900D96B5E /* Frameworks */,
+                               8DD76F690486A84900D96B5E /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = Fibonacci;
+                       productInstallPath = "$(HOME)/bin";
+                       productName = Fibonacci;
+                       productReference = 8DD76F6C0486A84900D96B5E /* Fibonacci */;
+                       productType = "com.apple.product-type.tool";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               08FB7793FE84155DC02AAC07 /* Project object */ = {
+                       isa = PBXProject;
+                       buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "Fibonacci" */;
+                       hasScannedForEncodings = 1;
+                       mainGroup = 08FB7794FE84155DC02AAC07 /* Fibonacci */;
+                       projectDirPath = "";
+                       targets = (
+                               8DD76F620486A84900D96B5E /* Fibonacci */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+               8DD76F640486A84900D96B5E /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A1F593A60B8F042A00073279 /* Fibonacci.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+               1DEB923208733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = Fibonacci;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug;
+               };
+               1DEB923308733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = Fibonacci;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
+               1DEB923608733DC60010E9CD /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug;
+               };
+               1DEB923708733DC60010E9CD /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release;
+               };
+               A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = Fibonacci;
+                               ZERO_LINK = NO;
+                       };
+                       name = Debug64;
+               };
+               A1F593C70B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               INSTALL_PATH = "$(HOME)/bin";
+                               LIBRARY_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+                               PRODUCT_NAME = Fibonacci;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release64;
+               };
+               A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Debug64;
+               };
+               A1F593C90B8F0E6E00073279 /* Release64 */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = i386;
+                               GCC_ENABLE_CPP_RTTI = YES;
+                               GCC_MODEL_TUNING = "";
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-m64",
+                               );
+                               OTHER_LDFLAGS = "-m64";
+                               PREBINDING = NO;
+                               PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+                               SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+                               SYMROOT = "/tmp/tbb-$(USER)";
+                       };
+                       name = Release64;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Fibonacci" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923208733DC60010E9CD /* Debug */,
+                               A1F593C60B8F0E6E00073279 /* Debug64 */,
+                               1DEB923308733DC60010E9CD /* Release */,
+                               A1F593C70B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "Fibonacci" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               1DEB923608733DC60010E9CD /* Debug */,
+                               A1F593C80B8F0E6E00073279 /* Debug64 */,
+                               1DEB923708733DC60010E9CD /* Release */,
+                               A1F593C90B8F0E6E00073279 /* Release64 */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/examples/test_all/index.html
new file mode 100644 (file)
index 0000000..ac1d3a5
--- /dev/null
@@ -0,0 +1,25 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains programs that exercise all the components of Threading Building Blocks.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="fibonacci/index.html">fibonacci</A>
+<DD>Compute Fibonacci numbers in different ways.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/include/index.html
new file mode 100644 (file)
index 0000000..f80c5d4
--- /dev/null
@@ -0,0 +1,24 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Include files for Threading Building Blocks.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="tbb/index.html">tbb</A>
+<DD>Include files for Threading Building Blocks classes and functions.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/_concurrent_queue_internal.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/_concurrent_queue_internal.h
new file mode 100644 (file)
index 0000000..418065d
--- /dev/null
@@ -0,0 +1,973 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_concurrent_queue_internal_H
+#define __TBB_concurrent_queue_internal_H
+
+#include "tbb_stddef.h"
+#include "tbb_machine.h"
+#include "atomic.h"
+#include "spin_mutex.h"
+#include "cache_aligned_allocator.h"
+#include "tbb_exception.h"
+#include <iterator>
+#include <new>
+
+namespace tbb {
+
+#if !__TBB_TEMPLATE_FRIENDS_BROKEN
+
+// forward declaration
+namespace strict_ppl {
+template<typename T, typename A> class concurrent_queue;
+}
+
+template<typename T, typename A> class concurrent_bounded_queue;
+
+namespace deprecated {
+template<typename T, typename A> class concurrent_queue;
+}
+#endif
+
+//! For internal use only.
+namespace strict_ppl {
+
+//! @cond INTERNAL
+namespace internal {
+
+using namespace tbb::internal;
+
+typedef size_t ticket;
+
+static void* invalid_page;
+
+template<typename T> class micro_queue ;
+template<typename T> class micro_queue_pop_finalizer ;
+template<typename T> class concurrent_queue_base_v3;
+
+//! parts of concurrent_queue_rep that do not have references to micro_queue
+/**
+ * For internal use only.
+ */
+struct concurrent_queue_rep_base : no_copy {
+    template<typename T> friend class micro_queue;
+    template<typename T> friend class concurrent_queue_base_v3;
+
+protected:
+    //! Approximately n_queue/golden ratio
+    static const size_t phi = 3;
+
+public:
+    // must be power of 2
+    static const size_t n_queue = 8;
+
+    //! Prefix on a page
+    struct page {
+        page* next;
+        uintptr_t mask; 
+    };
+
+    atomic<ticket> head_counter;
+    char pad1[NFS_MaxLineSize-sizeof(atomic<ticket>)];
+    atomic<ticket> tail_counter;
+    char pad2[NFS_MaxLineSize-sizeof(atomic<ticket>)];
+
+    //! Always a power of 2
+    size_t items_per_page;
+
+    //! Size of an item
+    size_t item_size;
+
+    //! number of invalid entries in the queue
+    atomic<size_t> n_invalid_entries;
+
+    char pad3[NFS_MaxLineSize-sizeof(size_t)-sizeof(size_t)-sizeof(atomic<size_t>)];
+} ;
+
+//! Abstract class to define interface for page allocation/deallocation
+/**
+ * For internal use only.
+ */
+class concurrent_queue_page_allocator
+{
+    template<typename T> friend class micro_queue ;
+    template<typename T> friend class micro_queue_pop_finalizer ;
+protected:
+    virtual ~concurrent_queue_page_allocator() {}
+private:
+    virtual concurrent_queue_rep_base::page* allocate_page() = 0;
+    virtual void deallocate_page( concurrent_queue_rep_base::page* p ) = 0;
+} ;
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+// unary minus operator applied to unsigned type, result still unsigned
+#pragma warning( push )
+#pragma warning( disable: 4146 )
+#endif
+
+//! A queue using simple locking.
+/** For efficient, this class has no constructor.  
+    The caller is expected to zero-initialize it. */
+template<typename T>
+class micro_queue : no_copy {
+    typedef concurrent_queue_rep_base::page page;
+
+    //! Class used to ensure exception-safety of method "pop" 
+    class destroyer: no_copy {
+        T& my_value;
+    public:
+        destroyer( T& value ) : my_value(value) {}
+        ~destroyer() {my_value.~T();}          
+    };
+
+    T& get_ref( page& page, size_t index ) {
+        return static_cast<T*>(static_cast<void*>(&page+1))[index];
+    }
+
+    void copy_item( page& dst, size_t index, const void* src ) {
+        new( &get_ref(dst,index) ) T(*static_cast<const T*>(src)); 
+    }
+
+    void copy_item( page& dst, size_t dindex, const page& src, size_t sindex ) {
+        new( &get_ref(dst,dindex) ) T( static_cast<const T*>(static_cast<const void*>(&src+1))[sindex] );
+    }
+
+    void assign_and_destroy_item( void* dst, page& src, size_t index ) {
+        T& from = get_ref(src,index);
+        destroyer d(from);
+        *static_cast<T*>(dst) = from;
+    }
+
+    void spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb ) const ;
+
+public:
+    friend class micro_queue_pop_finalizer<T>;
+
+    atomic<page*> head_page;
+    atomic<ticket> head_counter;
+
+    atomic<page*> tail_page;
+    atomic<ticket> tail_counter;
+
+    spin_mutex page_mutex;
+    
+    void push( const void* item, ticket k, concurrent_queue_base_v3<T>& base ) ;
+
+    bool pop( void* dst, ticket k, concurrent_queue_base_v3<T>& base ) ;
+
+    micro_queue& assign( const micro_queue& src, concurrent_queue_base_v3<T>& base ) ;
+
+    page* make_copy( concurrent_queue_base_v3<T>& base, const page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index ) ;
+
+    void make_invalid( ticket k ) ;
+};
+
+template<typename T>
+void micro_queue<T>::spin_wait_until_my_turn( atomic<ticket>& counter, ticket k, concurrent_queue_rep_base& rb ) const {
+    atomic_backoff backoff;
+    do {
+        backoff.pause();
+        if( counter&0x1 ) {
+            ++rb.n_invalid_entries;
+            throw_bad_last_alloc_exception_v4();
+        }
+    } while( counter!=k ) ;
+}
+
+template<typename T>
+void micro_queue<T>::push( const void* item, ticket k, concurrent_queue_base_v3<T>& base ) {
+    k &= -concurrent_queue_rep_base::n_queue;
+    page* p = NULL;
+    size_t index = k/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
+    if( !index ) {
+        try {
+            concurrent_queue_page_allocator& pa = base;
+            p = pa.allocate_page();
+        } catch (...) {
+            ++base.my_rep->n_invalid_entries;
+            make_invalid( k );
+        }
+        p->mask = 0;
+        p->next = NULL;
+    }
+    
+    if( tail_counter!=k ) spin_wait_until_my_turn( tail_counter, k, *base.my_rep );
+        
+    if( p ) {
+        spin_mutex::scoped_lock lock( page_mutex );
+        if( page* q = tail_page )
+            q->next = p;
+        else
+            head_page = p; 
+        tail_page = p;
+    } else {
+        p = tail_page;
+    }
+   
+    try {
+        copy_item( *p, index, item );
+        // If no exception was thrown, mark item as present.
+        p->mask |= uintptr_t(1)<<index;
+        tail_counter += concurrent_queue_rep_base::n_queue; 
+    } catch (...) {
+        ++base.my_rep->n_invalid_entries;
+        tail_counter += concurrent_queue_rep_base::n_queue; 
+        throw;
+    }
+}
+
+template<typename T>
+bool micro_queue<T>::pop( void* dst, ticket k, concurrent_queue_base_v3<T>& base ) {
+    k &= -concurrent_queue_rep_base::n_queue;
+    if( head_counter!=k ) spin_wait_until_eq( head_counter, k );
+    if( tail_counter==k ) spin_wait_while_eq( tail_counter, k );
+    page& p = *head_page;
+    __TBB_ASSERT( &p, NULL );
+    size_t index = k/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
+    bool success = false; 
+    {
+        micro_queue_pop_finalizer<T> finalizer( *this, base, k+concurrent_queue_rep_base::n_queue, index==base.my_rep->items_per_page-1 ? &p : NULL ); 
+        if( p.mask & uintptr_t(1)<<index ) {
+            success = true;
+            assign_and_destroy_item( dst, p, index );
+        } else {
+            --base.my_rep->n_invalid_entries;
+        }
+    }
+    return success;
+}
+
+template<typename T>
+micro_queue<T>& micro_queue<T>::assign( const micro_queue<T>& src, concurrent_queue_base_v3<T>& base ) {
+    head_counter = src.head_counter;
+    tail_counter = src.tail_counter;
+    page_mutex   = src.page_mutex;
+
+    const page* srcp = src.head_page;
+    if( srcp ) {
+        ticket g_index = head_counter;
+        try {
+            size_t n_items  = (tail_counter-head_counter)/concurrent_queue_rep_base::n_queue;
+            size_t index = head_counter/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
+            size_t end_in_first_page = (index+n_items<base.my_rep->items_per_page)?(index+n_items):base.my_rep->items_per_page;
+
+            head_page = make_copy( base, srcp, index, end_in_first_page, g_index );
+            page* cur_page = head_page;
+
+            if( srcp != src.tail_page ) {
+                for( srcp = srcp->next; srcp!=src.tail_page; srcp=srcp->next ) {
+                    cur_page->next = make_copy( base, srcp, 0, base.my_rep->items_per_page, g_index );
+                    cur_page = cur_page->next;
+                }
+
+                __TBB_ASSERT( srcp==src.tail_page, NULL );
+                size_t last_index = tail_counter/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
+                if( last_index==0 ) last_index = base.my_rep->items_per_page;
+
+                cur_page->next = make_copy( base, srcp, 0, last_index, g_index );
+                cur_page = cur_page->next;
+            }
+            tail_page = cur_page;
+        } catch (...) {
+            make_invalid( g_index );
+        }
+    } else {
+        head_page = tail_page = NULL;
+    }
+    return *this;
+}
+
+template<typename T>
+void micro_queue<T>::make_invalid( ticket k ) {
+    static page dummy = {static_cast<page*>((void*)1), 0};
+    // mark it so that no more pushes are allowed.
+    invalid_page = &dummy;
+    {
+        spin_mutex::scoped_lock lock( page_mutex );
+        tail_counter = k+concurrent_queue_rep_base::n_queue+1;
+        if( page* q = tail_page )
+            q->next = static_cast<page*>(invalid_page);
+        else
+            head_page = static_cast<page*>(invalid_page); 
+        tail_page = static_cast<page*>(invalid_page);
+    }
+    throw;
+}
+
+template<typename T>
+concurrent_queue_rep_base::page* micro_queue<T>::make_copy( concurrent_queue_base_v3<T>& base, const concurrent_queue_rep_base::page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index ) {
+    concurrent_queue_page_allocator& pa = base;
+    page* new_page = pa.allocate_page();
+    new_page->next = NULL;
+    new_page->mask = src_page->mask;
+    for( ; begin_in_page!=end_in_page; ++begin_in_page, ++g_index )
+        if( new_page->mask & uintptr_t(1)<<begin_in_page )
+            copy_item( *new_page, begin_in_page, *src_page, begin_in_page );
+    return new_page;
+}
+
+template<typename T>
+class micro_queue_pop_finalizer: no_copy {
+    typedef concurrent_queue_rep_base::page page;
+    ticket my_ticket;
+    micro_queue<T>& my_queue;
+    page* my_page; 
+    concurrent_queue_page_allocator& allocator;
+public:
+    micro_queue_pop_finalizer( micro_queue<T>& queue, concurrent_queue_base_v3<T>& b, ticket k, page* p ) :
+        my_ticket(k), my_queue(queue), my_page(p), allocator(b)
+    {}
+    ~micro_queue_pop_finalizer() ;
+};
+
+template<typename T>
+micro_queue_pop_finalizer<T>::~micro_queue_pop_finalizer() {
+    page* p = my_page;
+    if( p ) {
+        spin_mutex::scoped_lock lock( my_queue.page_mutex );
+        page* q = p->next;
+        my_queue.head_page = q;
+        if( !q ) {
+            my_queue.tail_page = NULL;
+        }
+    }
+    my_queue.head_counter = my_ticket;
+    if( p ) {
+        allocator.deallocate_page( p );
+    }
+}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning( pop )
+#endif // warning 4146 is back
+
+template<typename T> class concurrent_queue_iterator_rep ;
+template<typename T> class concurrent_queue_iterator_base_v3;
+
+//! representation of concurrent_queue_base
+/**
+ * the class inherits from concurrent_queue_rep_base and defines an array of micro_queue<T>'s
+ */
+template<typename T>
+struct concurrent_queue_rep : public concurrent_queue_rep_base {
+    micro_queue<T> array[n_queue];
+
+    //! Map ticket to an array index
+    static size_t index( ticket k ) {
+        return k*phi%n_queue;
+    }
+
+    micro_queue<T>& choose( ticket k ) {
+        // The formula here approximates LRU in a cache-oblivious way.
+        return array[index(k)];
+    }
+};
+
+//! base class of concurrent_queue
+/**
+ * The class implements the interface defined by concurrent_queue_page_allocator
+ * and has a pointer to an instance of concurrent_queue_rep.
+ */
+template<typename T>
+class concurrent_queue_base_v3: public concurrent_queue_page_allocator {
+    //! Internal representation
+    concurrent_queue_rep<T>* my_rep;
+
+    friend struct concurrent_queue_rep<T>;
+    friend class micro_queue<T>;
+    friend class concurrent_queue_iterator_rep<T>;
+    friend class concurrent_queue_iterator_base_v3<T>;
+
+protected:
+    typedef typename concurrent_queue_rep<T>::page page;
+
+private:
+    /* override */ virtual page *allocate_page() {
+        concurrent_queue_rep<T>& r = *my_rep;
+        size_t n = sizeof(page) + r.items_per_page*r.item_size;
+        return reinterpret_cast<page*>(allocate_block ( n ));
+    }
+
+    /* override */ virtual void deallocate_page( concurrent_queue_rep_base::page *p ) {
+        concurrent_queue_rep<T>& r = *my_rep;
+        size_t n = sizeof(page) + r.items_per_page*r.item_size;
+        deallocate_block( reinterpret_cast<void*>(p), n );
+    }
+
+    //! custom allocator
+    virtual void *allocate_block( size_t n ) = 0;
+
+    //! custom de-allocator
+    virtual void deallocate_block( void *p, size_t n ) = 0;
+
+protected:
+    concurrent_queue_base_v3( size_t item_size ) ;
+
+    /* override */ virtual ~concurrent_queue_base_v3() {
+        size_t nq = my_rep->n_queue;
+        for( size_t i=0; i<nq; i++ )
+            __TBB_ASSERT( my_rep->array[i].tail_page==NULL, "pages were not freed properly" );
+        cache_aligned_allocator<concurrent_queue_rep<T> >().deallocate(my_rep,1);
+    }
+
+    //! Enqueue item at tail of queue
+    void internal_push( const void* src ) {
+        concurrent_queue_rep<T>& r = *my_rep;
+        ticket k = r.tail_counter++;
+        r.choose(k).push( src, k, *this );
+    }
+
+    //! Attempt to dequeue item from queue.
+    /** NULL if there was no item to dequeue. */
+    bool internal_try_pop( void* dst ) ;
+
+    //! Get size of queue; result may be invalid if queue is modified concurrently
+    size_t internal_size() const ;
+
+    //! check if the queue is empty; thread safe
+    bool internal_empty() const ;
+
+    //! free any remaining pages
+    /* note that the name may be misleading, but it remains so due to a historical accident. */
+    void internal_finish_clear() ;
+
+    //! throw an exception
+    void internal_throw_exception() const {
+        throw std::bad_alloc();
+    }
+
+    //! copy internal representation
+    void assign( const concurrent_queue_base_v3& src ) ;
+};
+
+template<typename T>
+concurrent_queue_base_v3<T>::concurrent_queue_base_v3( size_t item_size ) {
+    my_rep = cache_aligned_allocator<concurrent_queue_rep<T> >().allocate(1);
+    __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, "alignment error" );
+    __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, "alignment error" );
+    __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, "alignment error" );
+    __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, "alignment error" );
+    memset(my_rep,0,sizeof(concurrent_queue_rep<T>));
+    my_rep->item_size = item_size;
+    my_rep->items_per_page = item_size<=8 ? 32 :
+                             item_size<=16 ? 16 : 
+                             item_size<=32 ? 8 :
+                             item_size<=64 ? 4 :
+                             item_size<=128 ? 2 :
+                             1;
+}
+
+template<typename T>
+bool concurrent_queue_base_v3<T>::internal_try_pop( void* dst ) {
+    concurrent_queue_rep<T>& r = *my_rep;
+    ticket k;
+    do {
+        k = r.head_counter;
+        for(;;) {
+            if( r.tail_counter<=k ) {
+                // Queue is empty 
+                return false;
+            }
+            // Queue had item with ticket k when we looked.  Attempt to get that item.
+            ticket tk=k;
+#if defined(_MSC_VER) && defined(_Wp64)
+    #pragma warning (push)
+    #pragma warning (disable: 4267)
+#endif
+            k = r.head_counter.compare_and_swap( tk+1, tk );
+#if defined(_MSC_VER) && defined(_Wp64)
+    #pragma warning (pop)
+#endif
+            if( k==tk )
+                break;
+            // Another thread snatched the item, retry.
+        }
+    } while( !r.choose( k ).pop( dst, k, *this ) );
+    return true;
+}
+
+template<typename T>
+size_t concurrent_queue_base_v3<T>::internal_size() const {
+    concurrent_queue_rep<T>& r = *my_rep;
+    __TBB_ASSERT( sizeof(ptrdiff_t)<=sizeof(size_t), NULL );
+    ticket hc = r.head_counter;
+    size_t nie = r.n_invalid_entries;
+    ticket tc = r.tail_counter;
+    __TBB_ASSERT( hc!=tc || !nie, NULL );
+    ptrdiff_t sz = tc-hc-nie;
+    return sz<0 ? 0 :  size_t(sz);
+}
+
+template<typename T>
+bool concurrent_queue_base_v3<T>::internal_empty() const {
+    concurrent_queue_rep<T>& r = *my_rep;
+    ticket tc = r.tail_counter;
+    ticket hc = r.head_counter;
+    // if tc!=r.tail_counter, the queue was not empty at some point between the two reads.
+    return tc==r.tail_counter && tc==hc+r.n_invalid_entries ;
+}
+
+template<typename T>
+void concurrent_queue_base_v3<T>::internal_finish_clear() {
+    concurrent_queue_rep<T>& r = *my_rep;
+    size_t nq = r.n_queue;
+    for( size_t i=0; i<nq; ++i ) {
+        page* tp = r.array[i].tail_page;
+        __TBB_ASSERT( r.array[i].head_page==tp, "at most one page should remain" );
+        if( tp!=NULL) {
+            if( tp!=invalid_page ) deallocate_page( tp );
+            r.array[i].tail_page = NULL;
+        }
+    }
+}
+
+template<typename T>
+void concurrent_queue_base_v3<T>::assign( const concurrent_queue_base_v3& src ) {
+    concurrent_queue_rep<T>& r = *my_rep;
+    r.items_per_page = src.my_rep->items_per_page;
+
+    // copy concurrent_queue_rep.
+    r.head_counter = src.my_rep->head_counter;
+    r.tail_counter = src.my_rep->tail_counter;
+    r.n_invalid_entries = src.my_rep->n_invalid_entries;
+
+    // copy micro_queues
+    for( size_t i = 0; i<r.n_queue; ++i )
+        r.array[i].assign( src.my_rep->array[i], *this);
+
+    __TBB_ASSERT( r.head_counter==src.my_rep->head_counter && r.tail_counter==src.my_rep->tail_counter, 
+            "the source concurrent queue should not be concurrently modified." );
+}
+
+template<typename Container, typename Value> class concurrent_queue_iterator;
+
+template<typename T>
+class concurrent_queue_iterator_rep: no_assign {
+public:
+    ticket head_counter;
+    const concurrent_queue_base_v3<T>& my_queue;
+    typename concurrent_queue_base_v3<T>::page* array[concurrent_queue_rep<T>::n_queue];
+    concurrent_queue_iterator_rep( const concurrent_queue_base_v3<T>& queue ) :
+        head_counter(queue.my_rep->head_counter),
+        my_queue(queue)
+    {
+        for( size_t k=0; k<concurrent_queue_rep<T>::n_queue; ++k )
+            array[k] = queue.my_rep->array[k].head_page;
+    }
+
+    //! Set item to point to kth element.  Return true if at end of queue or item is marked valid; false otherwise.
+    bool get_item( void*& item, size_t k ) ;
+};
+
+template<typename T>
+bool concurrent_queue_iterator_rep<T>::get_item( void*& item, size_t k ) {
+    if( k==my_queue.my_rep->tail_counter ) {
+        item = NULL;
+        return true;
+    } else {
+        typename concurrent_queue_base_v3<T>::page* p = array[concurrent_queue_rep<T>::index(k)];
+        __TBB_ASSERT(p,NULL);
+        size_t i = k/concurrent_queue_rep<T>::n_queue & (my_queue.my_rep->items_per_page-1);
+        item = static_cast<unsigned char*>(static_cast<void*>(p+1)) + my_queue.my_rep->item_size*i;
+        return (p->mask & uintptr_t(1)<<i)!=0;
+    }
+}
+
+//! Type-independent portion of concurrent_queue_iterator.
+/** @ingroup containers */
+template<typename Value>
+class concurrent_queue_iterator_base_v3 : no_assign {
+    //! Concurrentconcurrent_queue over which we are iterating.
+    /** NULL if one past last element in queue. */
+    concurrent_queue_iterator_rep<Value>* my_rep;
+
+    template<typename C, typename T, typename U>
+    friend bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );
+
+    template<typename C, typename T, typename U>
+    friend bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );
+protected:
+    //! Pointer to current item
+    mutable void* my_item;
+
+public:
+    //! Default constructor
+    concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {
+#if __GNUC__==4&&__GNUC_MINOR__==3
+        // to get around a possible gcc 4.3 bug
+        __asm__ __volatile__("": : :"memory");
+#endif
+    }
+
+    //! Copy constructor
+    concurrent_queue_iterator_base_v3( const concurrent_queue_iterator_base_v3& i ) : my_rep(NULL), my_item(NULL) {
+        assign(i);
+    }
+
+    //! Construct iterator pointing to head of queue.
+    concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3<Value>& queue ) ;
+
+protected:
+    //! Assignment
+    void assign( const concurrent_queue_iterator_base_v3<Value>& other ) ;
+
+    //! Advance iterator one step towards tail of queue.
+    void advance() ;
+
+    //! Destructor
+    ~concurrent_queue_iterator_base_v3() {
+        cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);
+        my_rep = NULL;
+    }
+};
+
+template<typename Value>
+concurrent_queue_iterator_base_v3<Value>::concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3<Value>& queue ) {
+    my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);
+    new( my_rep ) concurrent_queue_iterator_rep<Value>(queue);
+    size_t k = my_rep->head_counter;
+    if( !my_rep->get_item(my_item, k) ) advance();
+}
+
+template<typename Value>
+void concurrent_queue_iterator_base_v3<Value>::assign( const concurrent_queue_iterator_base_v3<Value>& other ) {
+    if( my_rep!=other.my_rep ) {
+        if( my_rep ) {
+            cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().deallocate(my_rep, 1);
+            my_rep = NULL;
+        }
+        if( other.my_rep ) {
+            my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep<Value> >().allocate(1);
+            new( my_rep ) concurrent_queue_iterator_rep<Value>( *other.my_rep );
+        }
+    }
+    my_item = other.my_item;
+}
+
+template<typename Value>
+void concurrent_queue_iterator_base_v3<Value>::advance() {
+    __TBB_ASSERT( my_item, "attempt to increment iterator past end of queue" );  
+    size_t k = my_rep->head_counter;
+    const concurrent_queue_base_v3<Value>& queue = my_rep->my_queue;
+#if TBB_USE_ASSERT
+    void* tmp;
+    my_rep->get_item(tmp,k);
+    __TBB_ASSERT( my_item==tmp, NULL );
+#endif /* TBB_USE_ASSERT */
+    size_t i = k/concurrent_queue_rep<Value>::n_queue & (queue.my_rep->items_per_page-1);
+    if( i==queue.my_rep->items_per_page-1 ) {
+        typename concurrent_queue_base_v3<Value>::page*& root = my_rep->array[concurrent_queue_rep<Value>::index(k)];
+        root = root->next;
+    }
+    // advance k
+    my_rep->head_counter = ++k;
+    if( !my_rep->get_item(my_item, k) ) advance();
+}
+
+template<typename T>
+static inline const concurrent_queue_iterator_base_v3<const T>& add_constness( const concurrent_queue_iterator_base_v3<T>& q )
+{
+    return *reinterpret_cast<const concurrent_queue_iterator_base_v3<const T> *>(&q) ;
+}
+
+//! Meets requirements of a forward iterator for STL.
+/** Value is either the T or const T type of the container.
+    @ingroup containers */
+template<typename Container, typename Value>
+class concurrent_queue_iterator: public concurrent_queue_iterator_base_v3<Value>,
+        public std::iterator<std::forward_iterator_tag,Value> {
+#if !__TBB_TEMPLATE_FRIENDS_BROKEN
+    template<typename T, class A>
+    friend class ::tbb::strict_ppl::concurrent_queue;
+#else
+public: // workaround for MSVC
+#endif 
+    //! Construct iterator pointing to head of queue.
+    concurrent_queue_iterator( const concurrent_queue_base_v3<Value>& queue ) :
+        concurrent_queue_iterator_base_v3<Value>(queue)
+    {
+    }
+
+public:
+    concurrent_queue_iterator() {}
+
+    //! Copy constructor
+    concurrent_queue_iterator( const concurrent_queue_iterator<Container,Value>& other ) :
+        concurrent_queue_iterator_base_v3<Value>(other)
+    {
+    }
+
+    template<typename T>
+    concurrent_queue_iterator( const concurrent_queue_iterator<Container,T>& other ) :
+        concurrent_queue_iterator_base_v3<Value>(add_constness(other))
+    {
+    }
+
+    //! Iterator assignment
+    concurrent_queue_iterator& operator=( const concurrent_queue_iterator& other ) {
+        assign(other);
+        return *this;
+    }
+
+    //! Reference to current item 
+    Value& operator*() const {
+        return *static_cast<Value*>(this->my_item);
+    }
+
+    Value* operator->() const {return &operator*();}
+
+    //! Advance to next item in queue
+    concurrent_queue_iterator& operator++() {
+        this->advance();
+        return *this;
+    }
+
+    //! Post increment
+    Value* operator++(int) {
+        Value* result = &operator*();
+        operator++();
+        return result;
+    }
+}; // concurrent_queue_iterator
+
+
+template<typename C, typename T, typename U>
+bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {
+    return i.my_item==j.my_item;
+}
+
+template<typename C, typename T, typename U>
+bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {
+    return i.my_item!=j.my_item;
+}
+
+} // namespace internal
+
+//! @endcond
+
+} // namespace strict_ppl
+
+//! @cond INTERNAL
+namespace internal {
+
+class concurrent_queue_rep;
+class concurrent_queue_iterator_rep;
+class concurrent_queue_iterator_base_v3;
+template<typename Container, typename Value> class concurrent_queue_iterator;
+
+//! For internal use only.
+/** Type-independent portion of concurrent_queue.
+    @ingroup containers */
+class concurrent_queue_base_v3: no_copy {
+    //! Internal representation
+    concurrent_queue_rep* my_rep;
+
+    friend class concurrent_queue_rep;
+    friend struct micro_queue;
+    friend class micro_queue_pop_finalizer;
+    friend class concurrent_queue_iterator_rep;
+    friend class concurrent_queue_iterator_base_v3;
+protected:
+    //! Prefix on a page
+    struct page {
+        page* next;
+        uintptr_t mask; 
+    };
+
+    //! Capacity of the queue
+    ptrdiff_t my_capacity;
+   
+    //! Always a power of 2
+    size_t items_per_page;
+
+    //! Size of an item
+    size_t item_size;
+
+private:
+    virtual void copy_item( page& dst, size_t index, const void* src ) = 0;
+    virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) = 0;
+protected:
+    __TBB_EXPORTED_METHOD concurrent_queue_base_v3( size_t item_size );
+    virtual __TBB_EXPORTED_METHOD ~concurrent_queue_base_v3();
+
+    //! Enqueue item at tail of queue
+    void __TBB_EXPORTED_METHOD internal_push( const void* src );
+
+    //! Dequeue item from head of queue
+    void __TBB_EXPORTED_METHOD internal_pop( void* dst );
+
+    //! Attempt to enqueue item onto queue.
+    bool __TBB_EXPORTED_METHOD internal_push_if_not_full( const void* src );
+
+    //! Attempt to dequeue item from queue.
+    /** NULL if there was no item to dequeue. */
+    bool __TBB_EXPORTED_METHOD internal_pop_if_present( void* dst );
+
+    //! Get size of queue
+    ptrdiff_t __TBB_EXPORTED_METHOD internal_size() const;
+
+    //! Check if the queue is emtpy
+    bool __TBB_EXPORTED_METHOD internal_empty() const;
+
+    //! Set the queue capacity
+    void __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );
+
+    //! custom allocator
+    virtual page *allocate_page() = 0;
+
+    //! custom de-allocator
+    virtual void deallocate_page( page *p ) = 0;
+
+    //! free any remaining pages
+    /* note that the name may be misleading, but it remains so due to a historical accident. */
+    void __TBB_EXPORTED_METHOD internal_finish_clear() ;
+
+    //! throw an exception
+    void __TBB_EXPORTED_METHOD internal_throw_exception() const;
+
+    //! copy internal representation
+    void __TBB_EXPORTED_METHOD assign( const concurrent_queue_base_v3& src ) ;
+
+private:
+    virtual void copy_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) = 0;
+};
+
+//! Type-independent portion of concurrent_queue_iterator.
+/** @ingroup containers */
+class concurrent_queue_iterator_base_v3 {
+    //! Concurrentconcurrent_queue over which we are iterating.
+    /** NULL if one past last element in queue. */
+    concurrent_queue_iterator_rep* my_rep;
+
+    template<typename C, typename T, typename U>
+    friend bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );
+
+    template<typename C, typename T, typename U>
+    friend bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );
+protected:
+    //! Pointer to current item
+    mutable void* my_item;
+
+    //! Default constructor
+    concurrent_queue_iterator_base_v3() : my_rep(NULL), my_item(NULL) {}
+
+    //! Copy constructor
+    concurrent_queue_iterator_base_v3( const concurrent_queue_iterator_base_v3& i ) : my_rep(NULL), my_item(NULL) {
+        assign(i);
+    }
+
+    //! Construct iterator pointing to head of queue.
+    __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( const concurrent_queue_base_v3& queue );
+
+    //! Assignment
+    void __TBB_EXPORTED_METHOD assign( const concurrent_queue_iterator_base_v3& i );
+
+    //! Advance iterator one step towards tail of queue.
+    void __TBB_EXPORTED_METHOD advance();
+
+    //! Destructor
+    __TBB_EXPORTED_METHOD ~concurrent_queue_iterator_base_v3();
+};
+
+typedef concurrent_queue_iterator_base_v3 concurrent_queue_iterator_base;
+
+//! Meets requirements of a forward iterator for STL.
+/** Value is either the T or const T type of the container.
+    @ingroup containers */
+template<typename Container, typename Value>
+class concurrent_queue_iterator: public concurrent_queue_iterator_base,
+        public std::iterator<std::forward_iterator_tag,Value> {
+#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)
+    template<typename T, class A>
+    friend class ::tbb::concurrent_bounded_queue;
+
+    template<typename T, class A>
+    friend class ::tbb::deprecated::concurrent_queue;
+#else
+public: // workaround for MSVC
+#endif 
+    //! Construct iterator pointing to head of queue.
+    concurrent_queue_iterator( const concurrent_queue_base_v3& queue ) :
+        concurrent_queue_iterator_base_v3(queue)
+    {
+    }
+
+public:
+    concurrent_queue_iterator() {}
+
+    /** If Value==Container::value_type, then this routine is the copy constructor. 
+        If Value==const Container::value_type, then this routine is a conversion constructor. */
+    concurrent_queue_iterator( const concurrent_queue_iterator<Container,typename Container::value_type>& other ) :
+        concurrent_queue_iterator_base_v3(other)
+    {}
+
+    //! Iterator assignment
+    concurrent_queue_iterator& operator=( const concurrent_queue_iterator& other ) {
+        assign(other);
+        return *this;
+    }
+
+    //! Reference to current item 
+    Value& operator*() const {
+        return *static_cast<Value*>(my_item);
+    }
+
+    Value* operator->() const {return &operator*();}
+
+    //! Advance to next item in queue
+    concurrent_queue_iterator& operator++() {
+        advance();
+        return *this;
+    }
+
+    //! Post increment
+    Value* operator++(int) {
+        Value* result = &operator*();
+        operator++();
+        return result;
+    }
+}; // concurrent_queue_iterator
+
+
+template<typename C, typename T, typename U>
+bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {
+    return i.my_item==j.my_item;
+}
+
+template<typename C, typename T, typename U>
+bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {
+    return i.my_item!=j.my_item;
+}
+
+} // namespace internal;
+
+//! @endcond
+
+} // namespace tbb
+
+#endif /* __TBB_concurrent_queue_internal_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/_tbb_windef.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/_tbb_windef.h
new file mode 100644 (file)
index 0000000..ceb697d
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_tbb_windef_H
+#error Do not #include this file directly.  Use "#include tbb/tbb_stddef.h" instead.
+#endif /* __TBB_tbb_windef_H */
+
+// Check that the target Windows version has all API calls requried for TBB.
+// Do not increase the version in condition beyond 0x0500 without prior discussion!
+#if defined(_WIN32_WINNT) && _WIN32_WINNT<0x0400
+#error TBB is unable to run on old Windows versions; _WIN32_WINNT must be 0x0400 or greater.
+#endif
+
+#if !defined(_MT)
+#error TBB requires linkage with multithreaded C/C++ runtime library. \
+       Choose multithreaded DLL runtime in project settings, or use /MD[d] compiler switch.
+#elif !defined(_DLL)
+#pragma message("Warning: Using TBB together with static C/C++ runtime library is not recommended. " \
+                "Consider switching your project to multithreaded DLL runtime used by TBB.")
+#endif
+
+// Workaround for the problem with MVSC headers failing to define namespace std
+namespace std {
+  using ::size_t; using ::ptrdiff_t;
+}
+
+#define __TBB_STRING_AUX(x) #x
+#define __TBB_STRING(x) __TBB_STRING_AUX(x)
+
+// Default setting of TBB_USE_DEBUG
+#ifdef TBB_USE_DEBUG
+#    if TBB_USE_DEBUG 
+#        if !defined(_DEBUG)
+#            pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MDd if compiling with TBB_USE_DEBUG!=0")
+#        endif
+#    else
+#        if defined(_DEBUG)
+#            pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MD if compiling with TBB_USE_DEBUG==0")
+#        endif
+#    endif
+#else
+#    ifdef _DEBUG
+#        define TBB_USE_DEBUG 1
+#    endif
+#endif 
+
+#if __TBB_BUILD && !defined(__TBB_NO_IMPLICIT_LINKAGE)
+#define __TBB_NO_IMPLICIT_LINKAGE 1
+#endif
+
+#if _MSC_VER
+    #if !__TBB_NO_IMPLICIT_LINKAGE
+        #ifdef _DEBUG
+            #pragma comment(lib, "tbb_debug.lib")
+        #else
+            #pragma comment(lib, "tbb.lib")
+        #endif
+    #endif
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/aligned_space.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/aligned_space.h
new file mode 100644 (file)
index 0000000..f9a08df
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_aligned_space_H
+#define __TBB_aligned_space_H
+
+#include "tbb_stddef.h"
+#include "tbb_machine.h"
+
+namespace tbb {
+
+//! Block of space aligned sufficiently to construct an array T with N elements.
+/** The elements are not constructed or destroyed by this class.
+    @ingroup memory_allocation */
+template<typename T,size_t N>
+class aligned_space {
+private:
+    typedef __TBB_TypeWithAlignmentAtLeastAsStrict(T) element_type;
+    element_type array[(sizeof(T)*N+sizeof(element_type)-1)/sizeof(element_type)];
+public:
+    //! Pointer to beginning of array
+    T* begin() {return reinterpret_cast<T*>(this);}
+
+    //! Pointer to one past last element in array.
+    T* end() {return begin()+N;}
+};
+
+} // namespace tbb 
+
+#endif /* __TBB_aligned_space_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/atomic.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/atomic.h
new file mode 100644 (file)
index 0000000..8f3517f
--- /dev/null
@@ -0,0 +1,397 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_atomic_H
+#define __TBB_atomic_H
+
+#include <cstddef>
+#include "tbb_stddef.h"
+
+#if _MSC_VER 
+#define __TBB_LONG_LONG __int64
+#else
+#define __TBB_LONG_LONG long long
+#endif /* _MSC_VER */
+
+#include "tbb_machine.h"
+
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+    // Workaround for overzealous compiler warnings 
+    #pragma warning (push)
+    #pragma warning (disable: 4244 4267)
+#endif
+
+namespace tbb {
+
+//! Specifies memory fencing.
+enum memory_semantics {
+    //! For internal use only.
+    __TBB_full_fence,
+    //! Acquire fence
+    acquire,
+    //! Release fence
+    release
+};
+
+//! @cond INTERNAL
+namespace internal {
+
+#if __GNUC__ || __SUNPRO_CC
+#define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));
+#elif defined(__INTEL_COMPILER)||_MSC_VER >= 1300
+#define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;
+#else 
+#error Do not know syntax for forcing alignment.
+#endif /* __GNUC__ */
+
+template<size_t S>
+struct atomic_rep;           // Primary template declared, but never defined.
+
+template<>
+struct atomic_rep<1> {       // Specialization
+    typedef int8_t word;
+    int8_t value;
+};
+template<>
+struct atomic_rep<2> {       // Specialization
+    typedef int16_t word;
+    __TBB_DECL_ATOMIC_FIELD(int16_t,value,2)
+};
+template<>
+struct atomic_rep<4> {       // Specialization
+#if _MSC_VER && __TBB_WORDSIZE==4
+    // Work-around that avoids spurious /Wp64 warnings
+    typedef intptr_t word;
+#else
+    typedef int32_t word;
+#endif
+    __TBB_DECL_ATOMIC_FIELD(int32_t,value,4)
+};
+template<>
+struct atomic_rep<8> {       // Specialization
+    typedef int64_t word;
+    __TBB_DECL_ATOMIC_FIELD(int64_t,value,8)
+};
+
+template<size_t Size, memory_semantics M>
+struct atomic_traits;        // Primary template declared, but not defined.
+
+#define __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(S,M)                         \
+    template<> struct atomic_traits<S,M> {                               \
+        typedef atomic_rep<S>::word word;                               \
+        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\
+            return __TBB_CompareAndSwap##S##M(location,new_value,comparand);    \
+        }                                                                       \
+        inline static word fetch_and_add( volatile void* location, word addend ) { \
+            return __TBB_FetchAndAdd##S##M(location,addend);                    \
+        }                                                                       \
+        inline static word fetch_and_store( volatile void* location, word value ) {\
+            return __TBB_FetchAndStore##S##M(location,value);                   \
+        }                                                                       \
+    };
+
+#define __TBB_DECL_ATOMIC_PRIMITIVES(S)                                  \
+    template<memory_semantics M>                                         \
+    struct atomic_traits<S,M> {                                          \
+        typedef atomic_rep<S>::word word;                               \
+        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\
+            return __TBB_CompareAndSwap##S(location,new_value,comparand);       \
+        }                                                                       \
+        inline static word fetch_and_add( volatile void* location, word addend ) { \
+            return __TBB_FetchAndAdd##S(location,addend);                       \
+        }                                                                       \
+        inline static word fetch_and_store( volatile void* location, word value ) {\
+            return __TBB_FetchAndStore##S(location,value);                      \
+        }                                                                       \
+    };
+
+#if __TBB_DECL_FENCED_ATOMICS
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,__TBB_full_fence)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,__TBB_full_fence)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,__TBB_full_fence)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,__TBB_full_fence)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,acquire)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,acquire)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,acquire)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,acquire)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,release)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,release)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,release)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,release)
+#else
+__TBB_DECL_ATOMIC_PRIMITIVES(1)
+__TBB_DECL_ATOMIC_PRIMITIVES(2)
+__TBB_DECL_ATOMIC_PRIMITIVES(4)
+__TBB_DECL_ATOMIC_PRIMITIVES(8)
+#endif
+
+//! Additive inverse of 1 for type T.
+/** Various compilers issue various warnings if -1 is used with various integer types.
+    The baroque expression below avoids all the warnings (we hope). */
+#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))
+
+//! Base class that provides basic functionality for atomic<T> without fetch_and_add.
+/** Works for any type T that has the same size as an integral type, has a trivial constructor/destructor, 
+    and can be copied/compared by memcpy/memcmp. */
+template<typename T>
+struct atomic_impl {
+protected:
+    atomic_rep<sizeof(T)> rep;
+private:
+    //! Union type used to convert type T to underlying integral type.
+    union converter {
+        T value;
+        typename atomic_rep<sizeof(T)>::word bits;
+    };
+public:
+    typedef T value_type;
+
+    template<memory_semantics M>
+    value_type fetch_and_store( value_type value ) {
+        converter u, w;
+        u.value = value;
+        w.bits = internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&rep.value,u.bits);
+        return w.value;
+    }
+
+    value_type fetch_and_store( value_type value ) {
+        return fetch_and_store<__TBB_full_fence>(value);
+    }
+
+    template<memory_semantics M>
+    value_type compare_and_swap( value_type value, value_type comparand ) {
+        converter u, v, w;
+        u.value = value;
+        v.value = comparand;
+        w.bits = internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&rep.value,u.bits,v.bits);
+        return w.value;
+    }
+
+    value_type compare_and_swap( value_type value, value_type comparand ) {
+        return compare_and_swap<__TBB_full_fence>(value,comparand);
+    }
+
+    operator value_type() const volatile {                // volatile qualifier here for backwards compatibility 
+        converter w;
+        w.bits = __TBB_load_with_acquire( rep.value );
+        return w.value;
+    }
+
+protected:
+    value_type store_with_release( value_type rhs ) {
+        converter u;
+        u.value = rhs;
+        __TBB_store_with_release(rep.value,u.bits);
+        return rhs;
+    }
+};
+
+//! Base class that provides basic functionality for atomic<T> with fetch_and_add.
+/** I is the underlying type.
+    D is the difference type.
+    StepType should be char if I is an integral type, and T if I is a T*. */
+template<typename I, typename D, typename StepType>
+struct atomic_impl_with_arithmetic: atomic_impl<I> {
+public:
+    typedef I value_type;
+
+    template<memory_semantics M>
+    value_type fetch_and_add( D addend ) {
+        return value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_add( &this->rep.value, addend*sizeof(StepType) ));
+    }
+
+    value_type fetch_and_add( D addend ) {
+        return fetch_and_add<__TBB_full_fence>(addend);
+    }
+
+    template<memory_semantics M>
+    value_type fetch_and_increment() {
+        return fetch_and_add<M>(1);
+    }
+
+    value_type fetch_and_increment() {
+        return fetch_and_add(1);
+    }
+
+    template<memory_semantics M>
+    value_type fetch_and_decrement() {
+        return fetch_and_add<M>(__TBB_MINUS_ONE(D));
+    }
+
+    value_type fetch_and_decrement() {
+        return fetch_and_add(__TBB_MINUS_ONE(D));
+    }
+
+public:
+    value_type operator+=( D addend ) {
+        return fetch_and_add(addend)+addend;
+    }
+
+    value_type operator-=( D addend ) {
+        // Additive inverse of addend computed using binary minus,
+        // instead of unary minus, for sake of avoiding compiler warnings.
+        return operator+=(D(0)-addend);    
+    }
+
+    value_type operator++() {
+        return fetch_and_add(1)+1;
+    }
+
+    value_type operator--() {
+        return fetch_and_add(__TBB_MINUS_ONE(D))-1;
+    }
+
+    value_type operator++(int) {
+        return fetch_and_add(1);
+    }
+
+    value_type operator--(int) {
+        return fetch_and_add(__TBB_MINUS_ONE(D));
+    }
+};
+
+#if __TBB_WORDSIZE == 4
+// Plaforms with 32-bit hardware require special effort for 64-bit loads and stores.
+#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400
+
+template<>
+inline atomic_impl<__TBB_LONG_LONG>::operator atomic_impl<__TBB_LONG_LONG>::value_type() const volatile {
+    return __TBB_Load8(&rep.value);
+}
+
+template<>
+inline atomic_impl<unsigned __TBB_LONG_LONG>::operator atomic_impl<unsigned __TBB_LONG_LONG>::value_type() const volatile {
+    return __TBB_Load8(&rep.value);
+}
+
+template<>
+inline atomic_impl<__TBB_LONG_LONG>::value_type atomic_impl<__TBB_LONG_LONG>::store_with_release( value_type rhs ) {
+    __TBB_Store8(&rep.value,rhs);
+    return rhs;
+}
+
+template<>
+inline atomic_impl<unsigned __TBB_LONG_LONG>::value_type atomic_impl<unsigned __TBB_LONG_LONG>::store_with_release( value_type rhs ) {
+    __TBB_Store8(&rep.value,rhs);
+    return rhs;
+}
+
+#endif /* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */
+#endif /* __TBB_WORDSIZE==4 */
+
+} /* Internal */
+//! @endcond
+
+//! Primary template for atomic.
+/** See the Reference for details.
+    @ingroup synchronization */
+template<typename T>
+struct atomic: internal::atomic_impl<T> {
+    T operator=( T rhs ) {
+        // "this" required here in strict ISO C++ because store_with_release is a dependent name
+        return this->store_with_release(rhs);
+    }
+    atomic<T>& operator=( const atomic<T>& rhs ) {this->store_with_release(rhs); return *this;}
+};
+
+#define __TBB_DECL_ATOMIC(T) \
+    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \
+        T operator=( T rhs ) {return store_with_release(rhs);}  \
+        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \
+    };
+
+#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400
+__TBB_DECL_ATOMIC(__TBB_LONG_LONG)
+__TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG)
+#else
+// Some old versions of MVSC cannot correctly compile templates with "long long".
+#endif /* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */
+
+__TBB_DECL_ATOMIC(long)
+__TBB_DECL_ATOMIC(unsigned long)
+
+#if defined(_MSC_VER) && __TBB_WORDSIZE==4
+/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option. 
+   It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T) 
+   with an operator=(U) that explicitly converts the U to a T.  Types T and U should be
+   type synonyms on the platform.  Type U should be the wider variant of T from the
+   perspective of /Wp64. */
+#define __TBB_DECL_ATOMIC_ALT(T,U) \
+    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \
+        T operator=( U rhs ) {return store_with_release(T(rhs));}  \
+        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \
+    };
+__TBB_DECL_ATOMIC_ALT(unsigned,size_t)
+__TBB_DECL_ATOMIC_ALT(int,ptrdiff_t)
+#else
+__TBB_DECL_ATOMIC(unsigned)
+__TBB_DECL_ATOMIC(int)
+#endif /* defined(_MSC_VER) && __TBB_WORDSIZE==4 */
+
+__TBB_DECL_ATOMIC(unsigned short)
+__TBB_DECL_ATOMIC(short)
+__TBB_DECL_ATOMIC(char)
+__TBB_DECL_ATOMIC(signed char)
+__TBB_DECL_ATOMIC(unsigned char)
+
+#if !defined(_MSC_VER)||defined(_NATIVE_WCHAR_T_DEFINED) 
+__TBB_DECL_ATOMIC(wchar_t)
+#endif /* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */
+
+//! Specialization for atomic<T*> with arithmetic and operator->.
+template<typename T> struct atomic<T*>: internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T> {
+    T* operator=( T* rhs ) {
+        // "this" required here in strict ISO C++ because store_with_release is a dependent name
+        return this->store_with_release(rhs);
+    }
+    atomic<T*>& operator=( const atomic<T*>& rhs ) {
+        this->store_with_release(rhs); return *this;
+    }
+    T* operator->() const {
+        return (*this);
+    }
+};
+
+//! Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->.
+template<> struct atomic<void*>: internal::atomic_impl<void*> {
+    void* operator=( void* rhs ) {
+        // "this" required here in strict ISO C++ because store_with_release is a dependent name
+        return this->store_with_release(rhs);
+    }
+    atomic<void*>& operator=( const atomic<void*>& rhs ) {
+        this->store_with_release(rhs); return *this;
+    }
+};
+
+} // namespace tbb
+
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+    #pragma warning (pop)
+#endif // warnings 4244, 4267 are back
+
+#endif /* __TBB_atomic_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/blocked_range.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/blocked_range.h
new file mode 100644 (file)
index 0000000..fd20aa0
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_blocked_range_H
+#define __TBB_blocked_range_H
+
+#include "tbb_stddef.h"
+
+namespace tbb {
+
+/** \page range_req Requirements on range concept
+    Class \c R implementing the concept of range must define:
+    - \code R::R( const R& ); \endcode               Copy constructor
+    - \code R::~R(); \endcode                        Destructor
+    - \code bool R::is_divisible() const; \endcode   True if range can be partitioned into two subranges
+    - \code bool R::empty() const; \endcode          True if range is empty
+    - \code R::R( R& r, split ); \endcode            Split range \c r into two subranges.
+**/
+
+//! A range over which to iterate.
+/** @ingroup algorithms */
+template<typename Value>
+class blocked_range {
+public:
+    //! Type of a value
+    /** Called a const_iterator for sake of algorithms that need to treat a blocked_range
+        as an STL container. */
+    typedef Value const_iterator;
+
+    //! Type for size of a range
+    typedef std::size_t size_type;
+
+    //! Construct range with default-constructed values for begin and end.
+    /** Requires that Value have a default constructor. */
+    blocked_range() : my_begin(), my_end() {}
+
+    //! Construct range over half-open interval [begin,end), with the given grainsize.
+    blocked_range( Value begin_, Value end_, size_type grainsize_=1 ) : 
+        my_end(end_), my_begin(begin_), my_grainsize(grainsize_) 
+    {
+        __TBB_ASSERT( my_grainsize>0, "grainsize must be positive" );
+    }
+
+    //! Beginning of range.
+    const_iterator begin() const {return my_begin;}
+
+    //! One past last value in range.
+    const_iterator end() const {return my_end;}
+
+    //! Size of the range
+    /** Unspecified if end()<begin(). */
+    size_type size() const {
+        __TBB_ASSERT( !(end()<begin()), "size() unspecified if end()<begin()" );
+        return size_type(my_end-my_begin);
+    }
+
+    //! The grain size for this range.
+    size_type grainsize() const {return my_grainsize;}
+
+    //------------------------------------------------------------------------
+    // Methods that implement Range concept
+    //------------------------------------------------------------------------
+
+    //! True if range is empty.
+    bool empty() const {return !(my_begin<my_end);}
+
+    //! True if range is divisible.
+    /** Unspecified if end()<begin(). */
+    bool is_divisible() const {return my_grainsize<size();}
+
+    //! Split range.  
+    /** The new Range *this has the second half, the old range r has the first half. 
+        Unspecified if end()<begin() or !is_divisible(). */
+    blocked_range( blocked_range& r, split ) : 
+        my_end(r.my_end),
+        my_begin(do_split(r)),
+        my_grainsize(r.my_grainsize)
+    {}
+
+private:
+    /** NOTE: my_end MUST be declared before my_begin, otherwise the forking constructor will break. */
+    Value my_end;
+    Value my_begin;
+    size_type my_grainsize;
+
+    //! Auxilary function used by forking constructor.
+    /** Using this function lets us not require that Value support assignment or default construction. */
+    static Value do_split( blocked_range& r ) {
+        __TBB_ASSERT( r.is_divisible(), "cannot split blocked_range that is not divisible" );
+        Value middle = r.my_begin + (r.my_end-r.my_begin)/2u;
+        r.my_end = middle;
+        return middle;
+    }
+
+    template<typename RowValue, typename ColValue>
+    friend class blocked_range2d;
+
+    template<typename RowValue, typename ColValue, typename PageValue>
+    friend class blocked_range3d;
+};
+
+} // namespace tbb 
+
+#endif /* __TBB_blocked_range_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/blocked_range2d.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/blocked_range2d.h
new file mode 100644 (file)
index 0000000..d0e48b9
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_blocked_range2d_H
+#define __TBB_blocked_range2d_H
+
+#include "tbb_stddef.h"
+#include "blocked_range.h"
+
+namespace tbb {
+
+//! A 2-dimensional range that models the Range concept.
+/** @ingroup algorithms */
+template<typename RowValue, typename ColValue=RowValue>
+class blocked_range2d {
+public:
+    //! Type for size of an iteation range
+    typedef blocked_range<RowValue> row_range_type;
+    typedef blocked_range<ColValue> col_range_type;
+private:
+    row_range_type my_rows;
+    col_range_type my_cols;
+
+public:
+
+    blocked_range2d( RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize,
+                     ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize ) : 
+        my_rows(row_begin,row_end,row_grainsize),
+        my_cols(col_begin,col_end,col_grainsize)
+    {
+    }
+
+    blocked_range2d( RowValue row_begin, RowValue row_end,
+                     ColValue col_begin, ColValue col_end ) : 
+        my_rows(row_begin,row_end),
+        my_cols(col_begin,col_end)
+    {
+    }
+
+    //! True if range is empty
+    bool empty() const {
+        // Yes, it is a logical OR here, not AND.
+        return my_rows.empty() || my_cols.empty();
+    }
+
+    //! True if range is divisible into two pieces.
+    bool is_divisible() const {
+        return my_rows.is_divisible() || my_cols.is_divisible();
+    }
+
+    blocked_range2d( blocked_range2d& r, split ) : 
+        my_rows(r.my_rows),
+        my_cols(r.my_cols)
+    {
+        if( my_rows.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_rows.grainsize()) ) {
+            my_cols.my_begin = col_range_type::do_split(r.my_cols);
+        } else {
+            my_rows.my_begin = row_range_type::do_split(r.my_rows);
+        }
+    }
+
+    //! The rows of the iteration space 
+    const row_range_type& rows() const {return my_rows;}
+
+    //! The columns of the iteration space 
+    const col_range_type& cols() const {return my_cols;}
+};
+
+} // namespace tbb 
+
+#endif /* __TBB_blocked_range2d_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/blocked_range3d.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/blocked_range3d.h
new file mode 100644 (file)
index 0000000..6b6742f
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_blocked_range3d_H
+#define __TBB_blocked_range3d_H
+
+#include "tbb_stddef.h"
+#include "blocked_range.h"
+
+namespace tbb {
+
+//! A 3-dimensional range that models the Range concept.
+/** @ingroup algorithms */
+template<typename PageValue, typename RowValue=PageValue, typename ColValue=RowValue>
+class blocked_range3d {
+public:
+    //! Type for size of an iteation range
+    typedef blocked_range<PageValue> page_range_type;
+    typedef blocked_range<RowValue>  row_range_type;
+    typedef blocked_range<ColValue>  col_range_type;
+private:
+    page_range_type my_pages;
+    row_range_type  my_rows;
+    col_range_type  my_cols;
+
+public:
+
+    blocked_range3d( PageValue page_begin, PageValue page_end,
+                     RowValue  row_begin,  RowValue row_end,
+                     ColValue  col_begin,  ColValue col_end ) : 
+        my_pages(page_begin,page_end),
+        my_rows(row_begin,row_end),
+        my_cols(col_begin,col_end)
+    {
+    }
+
+    blocked_range3d( PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize, 
+                     RowValue  row_begin,  RowValue row_end,   typename row_range_type::size_type row_grainsize,
+                     ColValue  col_begin,  ColValue col_end,   typename col_range_type::size_type col_grainsize ) :  
+        my_pages(page_begin,page_end,page_grainsize),
+        my_rows(row_begin,row_end,row_grainsize),
+        my_cols(col_begin,col_end,col_grainsize)
+    {
+    }
+
+    //! True if range is empty
+    bool empty() const {
+        // Yes, it is a logical OR here, not AND.
+        return my_pages.empty() || my_rows.empty() || my_cols.empty();
+    }
+
+    //! True if range is divisible into two pieces.
+    bool is_divisible() const {
+        return  my_pages.is_divisible() || my_rows.is_divisible() || my_cols.is_divisible();
+    }
+
+    blocked_range3d( blocked_range3d& r, split ) : 
+        my_pages(r.my_pages),
+        my_rows(r.my_rows),
+        my_cols(r.my_cols)
+    {
+        if( my_pages.size()*double(my_rows.grainsize()) < my_rows.size()*double(my_pages.grainsize()) ) {
+            if ( my_rows.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_rows.grainsize()) ) {
+                my_cols.my_begin = col_range_type::do_split(r.my_cols);
+            } else {
+                my_rows.my_begin = row_range_type::do_split(r.my_rows);
+            }
+       } else {
+            if ( my_pages.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_pages.grainsize()) ) {
+                my_cols.my_begin = col_range_type::do_split(r.my_cols);
+            } else {
+                    my_pages.my_begin = page_range_type::do_split(r.my_pages);
+            }
+        }
+    }
+
+    //! The pages of the iteration space 
+    const page_range_type& pages() const {return my_pages;}
+
+    //! The rows of the iteration space 
+    const row_range_type& rows() const {return my_rows;}
+
+    //! The columns of the iteration space 
+    const col_range_type& cols() const {return my_cols;}
+
+};
+
+} // namespace tbb 
+
+#endif /* __TBB_blocked_range3d_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/cache_aligned_allocator.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/cache_aligned_allocator.h
new file mode 100644 (file)
index 0000000..1a7671e
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_cache_aligned_allocator_H
+#define __TBB_cache_aligned_allocator_H
+
+#include <new>
+#include "tbb_stddef.h"
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+    //! Compile-time constant that is upper bound on cache line/sector size.
+    /** It should be used only in situations where having a compile-time upper 
+        bound is more useful than a run-time exact answer.
+        @ingroup memory_allocation */
+    const size_t NFS_MaxLineSize = 128;
+
+    //! Cache/sector line size.
+    /** @ingroup memory_allocation */
+    size_t __TBB_EXPORTED_FUNC NFS_GetLineSize();
+
+    //! Allocate memory on cache/sector line boundary.
+    /** @ingroup memory_allocation */
+    void* __TBB_EXPORTED_FUNC NFS_Allocate( size_t n_element, size_t element_size, void* hint );
+
+    //! Free memory allocated by NFS_Allocate.
+    /** Freeing a NULL pointer is allowed, but has no effect.
+        @ingroup memory_allocation */
+    void __TBB_EXPORTED_FUNC NFS_Free( void* );
+}
+//! @endcond
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Workaround for erroneous "unreferenced parameter" warning in method destroy.
+    #pragma warning (push)
+    #pragma warning (disable: 4100)
+#endif
+
+//! Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
+/** The members are ordered the same way they are in section 20.4.1
+    of the ISO C++ standard.
+    @ingroup memory_allocation */
+template<typename T>
+class cache_aligned_allocator {
+public:
+    typedef typename internal::allocator_type<T>::value_type value_type;
+    typedef value_type* pointer;
+    typedef const value_type* const_pointer;
+    typedef value_type& reference;
+    typedef const value_type& const_reference;
+    typedef size_t size_type;
+    typedef ptrdiff_t difference_type;
+    template<typename U> struct rebind {
+        typedef cache_aligned_allocator<U> other;
+    };
+
+    cache_aligned_allocator() throw() {}
+    cache_aligned_allocator( const cache_aligned_allocator& ) throw() {}
+    template<typename U> cache_aligned_allocator(const cache_aligned_allocator<U>&) throw() {}
+
+    pointer address(reference x) const {return &x;}
+    const_pointer address(const_reference x) const {return &x;}
+    
+    //! Allocate space for n objects, starting on a cache/sector line.
+    pointer allocate( size_type n, const void* hint=0 ) {
+        // The "hint" argument is always ignored in NFS_Allocate thus const_cast shouldn't hurt
+        return pointer(internal::NFS_Allocate( n, sizeof(value_type), const_cast<void*>(hint) ));
+    }
+
+    //! Free block of memory that starts on a cache line
+    void deallocate( pointer p, size_type ) {
+        internal::NFS_Free(p);
+    }
+
+    //! Largest value for which method allocate might succeed.
+    size_type max_size() const throw() {
+        return (~size_t(0)-internal::NFS_MaxLineSize)/sizeof(value_type);
+    }
+
+    //! Copy-construct value at location pointed to by p.
+    void construct( pointer p, const value_type& value ) {new(static_cast<void*>(p)) value_type(value);}
+
+    //! Destroy value at location pointed to by p.
+    void destroy( pointer p ) {p->~value_type();}
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning (pop)
+#endif // warning 4100 is back
+
+//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
+/** @ingroup memory_allocation */
+template<> 
+class cache_aligned_allocator<void> {
+public:
+    typedef void* pointer;
+    typedef const void* const_pointer;
+    typedef void value_type;
+    template<typename U> struct rebind {
+        typedef cache_aligned_allocator<U> other;
+    };
+};
+
+template<typename T, typename U>
+inline bool operator==( const cache_aligned_allocator<T>&, const cache_aligned_allocator<U>& ) {return true;}
+
+template<typename T, typename U>
+inline bool operator!=( const cache_aligned_allocator<T>&, const cache_aligned_allocator<U>& ) {return false;}
+
+} // namespace tbb
+
+#endif /* __TBB_cache_aligned_allocator_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/combinable.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/combinable.h
new file mode 100644 (file)
index 0000000..9122ffa
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_combinable_H
+#define __TBB_combinable_H
+
+#include "tbb/enumerable_thread_specific.h"
+#include "tbb/cache_aligned_allocator.h"
+
+namespace tbb {
+/** \name combinable
+    **/
+//@{
+//! Thread-local storage with optional reduction
+/** @ingroup containers */
+    template <typename T>
+        class combinable {
+    private:
+        typedef typename tbb::cache_aligned_allocator<T> my_alloc;
+
+        typedef typename tbb::enumerable_thread_specific<T, my_alloc, ets_no_key> my_ets_type;
+        my_ets_type my_ets; 
+    public:
+
+        combinable() { }
+
+        template <typename finit>
+        combinable( finit _finit) : my_ets(_finit) { }
+
+        //! destructor
+        ~combinable() { 
+        }
+
+        combinable(const combinable& other) : my_ets(other.my_ets) { }
+
+        combinable & operator=( const combinable & other) { my_ets = other.my_ets; return *this; }
+
+        void clear() { my_ets.clear(); }
+
+        T& local() { return my_ets.local(); }
+
+        T& local(bool & exists) { return my_ets.local(exists); }
+
+        template< typename FCombine>
+        T combine(FCombine fcombine) { return my_ets.combine(fcombine); }
+
+        template<typename FCombine>
+        void combine_each(FCombine fcombine) { my_ets.combine_each(fcombine); }
+
+    };
+} // namespace tbb
+#endif /* __TBB_combinable_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/compat/ppl.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/compat/ppl.h
new file mode 100644 (file)
index 0000000..624168e
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_compat_ppl_H
+#define __TBB_compat_ppl_H
+
+#include "../task_group.h"
+#include "../parallel_invoke.h"
+#include "../parallel_for_each.h"
+#include "../parallel_for.h"
+
+namespace Concurrency {
+
+    using tbb::task_handle;
+    using tbb::task_group_status;
+    using tbb::task_group;
+    using tbb::structured_task_group;
+    using tbb::missing_wait;
+
+    using tbb::not_complete;
+    using tbb::complete;
+    using tbb::canceled;
+
+    using tbb::is_current_task_group_canceling;
+
+    using tbb::parallel_invoke;
+    using tbb::strict_ppl::parallel_for;
+    using tbb::parallel_for_each;
+
+} // namespace Concurrency
+
+#endif /* __TBB_compat_ppl_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/concurrent_hash_map.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/concurrent_hash_map.h
new file mode 100644 (file)
index 0000000..08d7889
--- /dev/null
@@ -0,0 +1,1226 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_concurrent_hash_map_H
+#define __TBB_concurrent_hash_map_H
+
+#include <stdexcept>
+#include <iterator>
+#include <utility>      // Need std::pair
+#include <cstring>      // Need std::memset
+#include <string>
+#include "tbb_stddef.h"
+#include "cache_aligned_allocator.h"
+#include "tbb_allocator.h"
+#include "spin_rw_mutex.h"
+#include "atomic.h"
+#include "aligned_space.h"
+#if TBB_USE_PERFORMANCE_WARNINGS
+#include <typeinfo>
+#endif
+
+namespace tbb {
+
+template<typename T> struct tbb_hash_compare;
+template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> > >
+class concurrent_hash_map;
+
+//! @cond INTERNAL
+namespace internal {
+    //! ITT instrumented routine that loads pointer from location pointed to by src.
+    void* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3( const void* src );
+    //! ITT instrumented routine that stores src into location pointed to by dst.
+    void __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3( void* dst, void* src );
+    //! Routine that loads pointer from location pointed to by src without causing ITT to report a race.
+    void* __TBB_EXPORTED_FUNC itt_load_pointer_v3( const void* src );
+
+    //! Type of a hash code.
+    typedef size_t hashcode_t;
+    //! base class of concurrent_hash_map
+    class hash_map_base {
+    public:
+        //! Size type
+        typedef size_t size_type;
+        //! Type of a hash code.
+        typedef size_t hashcode_t;
+        //! Segment index type
+        typedef size_t segment_index_t;
+        //! Node base type
+        struct node_base : no_copy {
+            //! Mutex type
+            typedef spin_rw_mutex mutex_t;
+            //! Scoped lock type for mutex
+            typedef mutex_t::scoped_lock scoped_t;
+            //! Next node in chain
+            node_base *next;
+            mutex_t mutex;
+        };
+        //! Incompleteness flag value
+#       define __TBB_rehash_req reinterpret_cast<node_base*>(1)
+        //! Rehashed empty bucket flag
+#       define __TBB_empty_rehashed reinterpret_cast<node_base*>(0)
+        //! Bucket type
+        struct bucket : no_copy {
+            //! Mutex type for buckets
+            typedef spin_rw_mutex mutex_t;
+            //! Scoped lock type for mutex
+            typedef mutex_t::scoped_lock scoped_t;
+            mutex_t mutex;
+            node_base *node_list;
+        };
+        //! Count of segments in the first block
+        static size_type const embedded_block = 1;
+        //! Count of segments in the first block
+        static size_type const embedded_buckets = 1<<embedded_block;
+        //! Count of segments in the first block
+        static size_type const first_block = 8; //including embedded_block. perfect with bucket size 16, so the allocations are power of 4096
+        //! Size of a pointer / table size
+        static size_type const pointers_per_table = sizeof(segment_index_t) * 8; // one segment per bit
+        //! Segment pointer
+        typedef bucket *segment_ptr_t;
+        //! Segment pointers table type
+        typedef segment_ptr_t segments_table_t[pointers_per_table];
+        //! Hash mask = sum of allocated segments sizes - 1
+        atomic<hashcode_t> my_mask;
+        //! Segment pointers table. Also prevents false sharing between my_mask and my_size
+        segments_table_t my_table;
+        //! Size of container in stored items
+        atomic<size_type> my_size; // It must be in separate cache line from my_mask due to performance effects
+        //! Zero segment
+        bucket my_embedded_segment[embedded_buckets];
+
+        //! Constructor
+        hash_map_base() {
+            std::memset( this, 0, pointers_per_table*sizeof(segment_ptr_t) // 32*4=128   or 64*8=512
+                + sizeof(my_size) + sizeof(my_mask)  // 4+4 or 8+8
+                + embedded_buckets*sizeof(bucket) ); // n*8 or n*16
+            for( size_type i = 0; i < embedded_block; i++ ) // fill the table
+                my_table[i] = my_embedded_segment + segment_base(i);
+            my_mask = embedded_buckets - 1;
+            __TBB_ASSERT( embedded_block <= first_block, "The first block number must include embedded blocks");
+        }
+
+        //! @return segment index of given index in the array
+        static segment_index_t segment_index_of( size_type index ) {
+            return segment_index_t( __TBB_Log2( index|1 ) );
+        }
+
+        //! @return the first array index of given segment
+        static segment_index_t segment_base( segment_index_t k ) {
+            return (segment_index_t(1)<<k & ~segment_index_t(1));
+        }
+
+        //! @return segment size except for @arg k == 0
+        static size_type segment_size( segment_index_t k ) {
+            return size_type(1)<<k; // fake value for k==0
+        }
+        
+        //! @return true if @arg ptr is valid pointer
+        static bool is_valid( void *ptr ) {
+            return ptr > reinterpret_cast<void*>(1);
+        }
+
+        //! Initialize buckets
+        static void init_buckets( segment_ptr_t ptr, size_type sz, bool is_initial ) {
+            if( is_initial ) std::memset(ptr, 0, sz*sizeof(bucket) );
+            else for(size_type i = 0; i < sz; i++, ptr++) {
+                    *reinterpret_cast<intptr_t*>(&ptr->mutex) = 0;
+                    ptr->node_list = __TBB_rehash_req;
+                }
+        }
+        
+        //! Add node @arg n to bucket @arg b
+        static void add_to_bucket( bucket *b, node_base *n ) {
+            n->next = b->node_list;
+            b->node_list = n; // its under lock and flag is set
+        }
+
+        //! Exception safety helper
+        struct enable_segment_failsafe {
+            segment_ptr_t *my_segment_ptr;
+            enable_segment_failsafe(segments_table_t &table, segment_index_t k) : my_segment_ptr(&table[k]) {}
+            ~enable_segment_failsafe() {
+                if( my_segment_ptr ) *my_segment_ptr = 0; // indicate no allocation in progress
+            }
+        };
+
+        //! Enable segment
+        void enable_segment( segment_index_t k, bool is_initial = false ) {
+            __TBB_ASSERT( k, "Zero segment must be embedded" );
+            enable_segment_failsafe watchdog( my_table, k );
+            cache_aligned_allocator<bucket> alloc;
+            size_type sz;
+            __TBB_ASSERT( !is_valid(my_table[k]), "Wrong concurrent assignment");
+            if( k >= first_block ) {
+                sz = segment_size( k );
+                segment_ptr_t ptr = alloc.allocate( sz );
+                init_buckets( ptr, sz, is_initial );
+#if TBB_USE_THREADING_TOOLS
+                // TODO: actually, fence and notification are unneccessary here and below
+                itt_store_pointer_with_release_v3( my_table + k, ptr );
+#else
+                my_table[k] = ptr;// my_mask has release fence
+#endif
+                sz <<= 1;// double it to get entire capacity of the container
+            } else { // the first block
+                __TBB_ASSERT( k == embedded_block, "Wrong segment index" );
+                sz = segment_size( first_block );
+                segment_ptr_t ptr = alloc.allocate( sz - embedded_buckets );
+                init_buckets( ptr, sz - embedded_buckets, is_initial );
+                ptr -= segment_base(embedded_block);
+                for(segment_index_t i = embedded_block; i < first_block; i++) // calc the offsets
+#if TBB_USE_THREADING_TOOLS
+                    itt_store_pointer_with_release_v3( my_table + i, ptr + segment_base(i) );
+#else
+                    my_table[i] = ptr + segment_base(i);
+#endif
+            }
+#if TBB_USE_THREADING_TOOLS
+            itt_store_pointer_with_release_v3( &my_mask, (void*)(sz-1) );
+#else
+            my_mask = sz - 1;
+#endif
+            watchdog.my_segment_ptr = 0;
+        }
+
+        //! Get bucket by (masked) hashcode
+        bucket *get_bucket( hashcode_t h ) const throw() { // TODO: add throw() everywhere?
+            segment_index_t s = segment_index_of( h );
+            h -= segment_base(s);
+            segment_ptr_t seg = my_table[s];
+            __TBB_ASSERT( is_valid(seg), "hashcode must be cut by valid mask for allocated segments" );
+            return &seg[h];
+        }
+
+        //! Check for mask race
+        // Splitting into two functions should help inlining
+        inline bool check_mask_race( const hashcode_t h, hashcode_t &m ) const {
+            hashcode_t m_now, m_old = m;
+#if TBB_USE_THREADING_TOOLS
+            m_now = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
+#else
+            m_now = my_mask;
+#endif
+            if( m_old != m_now )
+                return check_rehashing_collision( h, m_old, m = m_now );
+            return false;
+        }
+
+        //! Process mask race, check for rehashing collision
+        bool check_rehashing_collision( const hashcode_t h, hashcode_t m_old, hashcode_t m ) const {
+            __TBB_ASSERT(m_old != m, NULL); // TODO?: m arg could be optimized out by passing h = h&m
+            if( (h & m_old) != (h & m) ) { // mask changed for this hashcode, rare event
+                // condition above proves that 'h' has some other bits set beside 'm_old'
+                // find next applicable mask after m_old    //TODO: look at bsl instruction
+                for( ++m_old; !(h & m_old); m_old <<= 1 ); // at maximum few rounds depending on the first block size
+                m_old = (m_old<<1) - 1; // get full mask from a bit
+                __TBB_ASSERT((m_old&(m_old+1))==0 && m_old <= m, NULL);
+                // check whether it is rehashing/ed
+#if TBB_USE_THREADING_TOOLS
+                if( itt_load_pointer_with_acquire_v3(&( get_bucket(h & m_old)->node_list )) != __TBB_rehash_req )
+#else
+                if( __TBB_load_with_acquire(get_bucket( h & m_old )->node_list) != __TBB_rehash_req )
+#endif
+                    return true;
+            }
+            return false;
+        }
+
+        //! Insert a node and check for load factor. @return segment index to enable.
+        segment_index_t insert_new_node( bucket *b, node_base *n, hashcode_t mask ) {
+            size_type sz = ++my_size; // prefix form is to enforce allocation after the first item inserted
+            add_to_bucket( b, n );
+            // check load factor
+            if( sz >= mask ) { // TODO: add custom load_factor 
+                segment_index_t new_seg = segment_index_of( mask+1 );
+                __TBB_ASSERT( is_valid(my_table[new_seg-1]), "new allocations must not publish new mask until segment has allocated");
+#if TBB_USE_THREADING_TOOLS
+                if( !itt_load_pointer_v3(my_table+new_seg)
+#else
+                if( !my_table[new_seg]
+#endif
+                                 && __TBB_CompareAndSwapW(&my_table[new_seg], 1, 0) == 0 )
+                    return new_seg; // The value must be processed
+            }
+            return 0;
+        }
+
+        //! Prepare enough segments for number of buckets
+        void reserve(size_type buckets) {
+            if( !buckets-- ) return;
+            bool is_initial = !my_size;
+            for( size_type m = my_mask; buckets > m; m = my_mask )
+                enable_segment( segment_index_of( m+1 ), is_initial );
+        }
+        //! Swap hash_map_bases
+        void internal_swap(hash_map_base &table) {
+            std::swap(this->my_mask, table.my_mask);
+            std::swap(this->my_size, table.my_size);
+            for(size_type i = 0; i < embedded_buckets; i++)
+                std::swap(this->my_embedded_segment[i].node_list, table.my_embedded_segment[i].node_list);
+            for(size_type i = embedded_block; i < pointers_per_table; i++)
+                std::swap(this->my_table[i], table.my_table[i]);
+        }
+    };
+
+    template<typename Iterator>
+    class hash_map_range;
+
+    //! Meets requirements of a forward iterator for STL */
+    /** Value is either the T or const T type of the container.
+        @ingroup containers */ 
+    template<typename Container, typename Value>
+    class hash_map_iterator
+        : public std::iterator<std::forward_iterator_tag,Value>
+    {
+        typedef Container map_type;
+        typedef typename Container::node node;
+        typedef hash_map_base::node_base node_base;
+        typedef hash_map_base::bucket bucket;
+
+        template<typename C, typename T, typename U>
+        friend bool operator==( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );
+
+        template<typename C, typename T, typename U>
+        friend bool operator!=( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );
+
+        template<typename C, typename T, typename U>
+        friend ptrdiff_t operator-( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );
+    
+        template<typename C, typename U>
+        friend class internal::hash_map_iterator;
+
+        template<typename I>
+        friend class internal::hash_map_range;
+
+        void advance_to_next_bucket() { // TODO?: refactor to iterator_base class
+            size_t k = my_index+1;
+            while( my_bucket && k <= my_map->my_mask ) {
+                // Following test uses 2's-complement wizardry
+                if( k& (k-2) ) // not the begining of a segment
+                    ++my_bucket;
+                else my_bucket = my_map->get_bucket( k );
+                my_node = static_cast<node*>( my_bucket->node_list );
+                if( hash_map_base::is_valid(my_node) ) {
+                    my_index = k; return;
+                }
+                ++k;
+            }
+            my_bucket = 0; my_node = 0; my_index = k; // the end
+        }
+#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)
+        template<typename Key, typename T, typename HashCompare, typename A>
+        friend class tbb::concurrent_hash_map;
+#else
+    public: // workaround
+#endif
+        //! concurrent_hash_map over which we are iterating.
+        const Container *my_map;
+
+        //! Index in hash table for current item
+        size_t my_index;
+
+        //! Pointer to bucket
+        const bucket *my_bucket;
+
+        //! Pointer to node that has current item
+        node *my_node;
+
+        hash_map_iterator( const Container &map, size_t index, const bucket *b, node_base *n );
+
+    public:
+        //! Construct undefined iterator
+        hash_map_iterator() {}
+        hash_map_iterator( const hash_map_iterator<Container,typename Container::value_type> &other ) :
+            my_map(other.my_map),
+            my_index(other.my_index),
+            my_bucket(other.my_bucket),
+            my_node(other.my_node)
+        {}
+        Value& operator*() const {
+            __TBB_ASSERT( hash_map_base::is_valid(my_node), "iterator uninitialized or at end of container?" );
+            return my_node->item;
+        }
+        Value* operator->() const {return &operator*();}
+        hash_map_iterator& operator++();
+        
+        //! Post increment
+        Value* operator++(int) {
+            Value* result = &operator*();
+            operator++();
+            return result;
+        }
+    };
+
+    template<typename Container, typename Value>
+    hash_map_iterator<Container,Value>::hash_map_iterator( const Container &map, size_t index, const bucket *b, node_base *n ) :
+        my_map(&map),
+        my_index(index),
+        my_bucket(b),
+        my_node( static_cast<node*>(n) )
+    {
+        if( b && !hash_map_base::is_valid(n) )
+            advance_to_next_bucket();
+    }
+
+    template<typename Container, typename Value>
+    hash_map_iterator<Container,Value>& hash_map_iterator<Container,Value>::operator++() {
+        my_node = static_cast<node*>( my_node->next );
+        if( !my_node ) advance_to_next_bucket();
+        return *this;
+    }
+
+    template<typename Container, typename T, typename U>
+    bool operator==( const hash_map_iterator<Container,T>& i, const hash_map_iterator<Container,U>& j ) {
+        return i.my_node == j.my_node && i.my_map == j.my_map;
+    }
+
+    template<typename Container, typename T, typename U>
+    bool operator!=( const hash_map_iterator<Container,T>& i, const hash_map_iterator<Container,U>& j ) {
+        return i.my_node != j.my_node || i.my_map != j.my_map;
+    }
+
+    //! Range class used with concurrent_hash_map
+    /** @ingroup containers */ 
+    template<typename Iterator>
+    class hash_map_range {
+        typedef typename Iterator::map_type map_type;
+        Iterator my_begin;
+        Iterator my_end;
+        mutable Iterator my_midpoint;
+        size_t my_grainsize;
+        //! Set my_midpoint to point approximately half way between my_begin and my_end.
+        void set_midpoint() const;
+        template<typename U> friend class hash_map_range;
+    public:
+        //! Type for size of a range
+        typedef std::size_t size_type;
+        typedef typename Iterator::value_type value_type;
+        typedef typename Iterator::reference reference;
+        typedef typename Iterator::difference_type difference_type;
+        typedef Iterator iterator;
+
+        //! True if range is empty.
+        bool empty() const {return my_begin==my_end;}
+
+        //! True if range can be partitioned into two subranges.
+        bool is_divisible() const {
+            return my_midpoint!=my_end;
+        }
+        //! Split range.
+        hash_map_range( hash_map_range& r, split ) : 
+            my_end(r.my_end),
+            my_grainsize(r.my_grainsize)
+        {
+            r.my_end = my_begin = r.my_midpoint;
+            __TBB_ASSERT( !empty(), "Splitting despite the range is not divisible" );
+            __TBB_ASSERT( !r.empty(), "Splitting despite the range is not divisible" );
+            set_midpoint();
+            r.set_midpoint();
+        }
+        //! type conversion
+        template<typename U>
+        hash_map_range( hash_map_range<U>& r) : 
+            my_begin(r.my_begin),
+            my_end(r.my_end),
+            my_midpoint(r.my_midpoint),
+            my_grainsize(r.my_grainsize)
+        {}
+#if TBB_DEPRECATED
+        //! Init range with iterators and grainsize specified
+        hash_map_range( const Iterator& begin_, const Iterator& end_, size_type grainsize = 1 ) : 
+            my_begin(begin_), 
+            my_end(end_),
+            my_grainsize(grainsize)
+        {
+            if(!my_end.my_index && !my_end.my_bucket) // end
+                my_end.my_index = my_end.my_map->my_mask + 1;
+            set_midpoint();
+            __TBB_ASSERT( grainsize>0, "grainsize must be positive" );
+        }
+#endif
+        //! Init range with container and grainsize specified
+        hash_map_range( const map_type &map, size_type grainsize = 1 ) : 
+            my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),
+            my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),
+            my_grainsize( grainsize )
+        {
+            __TBB_ASSERT( grainsize>0, "grainsize must be positive" );
+            set_midpoint();
+        }
+        const Iterator& begin() const {return my_begin;}
+        const Iterator& end() const {return my_end;}
+        //! The grain size for this range.
+        size_type grainsize() const {return my_grainsize;}
+    };
+
+    template<typename Iterator>
+    void hash_map_range<Iterator>::set_midpoint() const {
+        // Split by groups of nodes
+        size_t m = my_end.my_index-my_begin.my_index;
+        if( m > my_grainsize ) {
+            m = my_begin.my_index + m/2u;
+            hash_map_base::bucket *b = my_begin.my_map->get_bucket(m);
+            my_midpoint = Iterator(*my_begin.my_map,m,b,b->node_list);
+        } else {
+            my_midpoint = my_end;
+        }
+        __TBB_ASSERT( my_begin.my_index <= my_midpoint.my_index,
+            "my_begin is after my_midpoint" );
+        __TBB_ASSERT( my_midpoint.my_index <= my_end.my_index,
+            "my_midpoint is after my_end" );
+        __TBB_ASSERT( my_begin != my_midpoint || my_begin == my_end,
+            "[my_begin, my_midpoint) range should not be empty" );
+    }
+} // namespace internal
+//! @endcond
+
+//! Hash multiplier
+static const size_t hash_multiplier = sizeof(size_t)==4? 2654435769U : 11400714819323198485ULL;
+//! Hasher functions
+template<typename T>
+inline static size_t tbb_hasher( const T& t ) {
+    return static_cast<size_t>( t ) * hash_multiplier;
+}
+template<typename P>
+inline static size_t tbb_hasher( P* ptr ) {
+    size_t const h = reinterpret_cast<size_t>( ptr );
+    return (h >> 3) ^ h;
+}
+template<typename E, typename S, typename A>
+inline static size_t tbb_hasher( const std::basic_string<E,S,A>& s ) {
+    size_t h = 0;
+    for( const E* c = s.c_str(); *c; c++ )
+        h = static_cast<size_t>(*c) ^ (h * hash_multiplier);
+    return h;
+}
+template<typename F, typename S>
+inline static size_t tbb_hasher( const std::pair<F,S>& p ) {
+    return tbb_hasher(p.first) ^ tbb_hasher(p.second);
+}
+
+//! hash_compare - default argument
+template<typename T>
+struct tbb_hash_compare {
+    static size_t hash( const T& t ) { return tbb_hasher(t); }
+    static bool equal( const T& a, const T& b ) { return a == b; }
+};
+
+//! Unordered map from Key to T.
+/** concurrent_hash_map is associative container with concurrent access.
+
+@par Compatibility
+    The class meets all Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1).
+
+@par Exception Safety
+    - Hash function is not permitted to throw an exception. User-defined types Key and T are forbidden from throwing an exception in destructors.
+    - If exception happens during insert() operations, it has no effect (unless exception raised by HashCompare::hash() function during grow_segment).
+    - If exception happens during operator=() operation, the container can have a part of source items, and methods size() and empty() can return wrong results.
+
+@par Changes since TBB 2.1
+    - Replaced internal algorithm and data structure. Patent is pending.
+
+@par Changes since TBB 2.0
+    - Fixed exception-safety
+    - Added template argument for allocator
+    - Added allocator argument in constructors
+    - Added constructor from a range of iterators
+    - Added several new overloaded insert() methods
+    - Added get_allocator()
+    - Added swap()
+    - Added count()
+    - Added overloaded erase(accessor &) and erase(const_accessor&)
+    - Added equal_range() [const]
+    - Added [const_]pointer, [const_]reference, and allocator_type types
+    - Added global functions: operator==(), operator!=(), and swap() 
+
+    @ingroup containers */
+template<typename Key, typename T, typename HashCompare, typename Allocator>
+class concurrent_hash_map : protected internal::hash_map_base {
+    template<typename Container, typename Value>
+    friend class internal::hash_map_iterator;
+
+    template<typename I>
+    friend class internal::hash_map_range;
+
+public:
+    typedef Key key_type;
+    typedef T mapped_type;
+    typedef std::pair<const Key,T> value_type;
+    typedef internal::hash_map_base::size_type size_type;
+    typedef ptrdiff_t difference_type;
+    typedef value_type *pointer;
+    typedef const value_type *const_pointer;
+    typedef value_type &reference;
+    typedef const value_type &const_reference;
+    typedef internal::hash_map_iterator<concurrent_hash_map,value_type> iterator;
+    typedef internal::hash_map_iterator<concurrent_hash_map,const value_type> const_iterator;
+    typedef internal::hash_map_range<iterator> range_type;
+    typedef internal::hash_map_range<const_iterator> const_range_type;
+    typedef Allocator allocator_type;
+
+protected:
+    friend class const_accessor;
+    struct node;
+    typedef typename Allocator::template rebind<node>::other node_allocator_type;
+    node_allocator_type my_allocator;
+    HashCompare my_hash_compare;
+
+    struct node : public node_base {
+        value_type item;
+        node( const Key &key ) : item(key, T()) {}
+        node( const Key &key, const T &t ) : item(key, t) {}
+        // exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17
+        void *operator new( size_t /*size*/, node_allocator_type &a ) {
+            void *ptr = a.allocate(1);
+            if(!ptr) throw std::bad_alloc();
+            return ptr;
+        }
+        // match placement-new form above to be called if exception thrown in constructor
+        void operator delete( void *ptr, node_allocator_type &a ) {return a.deallocate(static_cast<node*>(ptr),1); }
+    };
+
+    void delete_node( node_base *n ) {
+        my_allocator.destroy( static_cast<node*>(n) );
+        my_allocator.deallocate( static_cast<node*>(n), 1);
+    }
+
+    node *search_bucket( const key_type &key, bucket *b ) const {
+        node *n = static_cast<node*>( b->node_list );
+        while( is_valid(n) && !my_hash_compare.equal(key, n->item.first) )
+            n = static_cast<node*>( n->next );
+        __TBB_ASSERT(n != __TBB_rehash_req, "Search can be executed only for rehashed bucket");
+        return n;
+    }
+
+    //! bucket accessor is to find, rehash, acquire a lock, and access a bucket
+    class bucket_accessor : public bucket::scoped_t {
+        bool my_is_writer; // TODO: use it from base type
+        bucket *my_b;
+    public:
+        bucket_accessor( concurrent_hash_map *base, const hashcode_t h, bool writer = false ) { acquire( base, h, writer ); }
+        //! find a bucket by maksed hashcode, optionally rehash, and acquire the lock
+        inline void acquire( concurrent_hash_map *base, const hashcode_t h, bool writer = false ) {
+            my_b = base->get_bucket( h );
+#if TBB_USE_THREADING_TOOLS
+            // TODO: actually, notification is unneccessary here, just hiding double-check
+            if( itt_load_pointer_with_acquire_v3(&my_b->node_list) == __TBB_rehash_req
+#else
+            if( __TBB_load_with_acquire(my_b->node_list) == __TBB_rehash_req
+#endif
+                && try_acquire( my_b->mutex, /*write=*/true ) )
+            {
+                if( my_b->node_list == __TBB_rehash_req ) base->rehash_bucket( my_b, h ); //recursive rehashing
+                my_is_writer = true;
+            }
+            else bucket::scoped_t::acquire( my_b->mutex, /*write=*/my_is_writer = writer );
+            __TBB_ASSERT( my_b->node_list != __TBB_rehash_req, NULL);
+        }
+        //! check whether bucket is locked for write
+        bool is_writer() { return my_is_writer; }
+        //! get bucket pointer
+        bucket *operator() () { return my_b; }
+        // TODO: optimize out
+        bool upgrade_to_writer() { my_is_writer = true; return bucket::scoped_t::upgrade_to_writer(); }
+    };
+
+    // TODO refactor to hash_base
+    void rehash_bucket( bucket *b_new, const hashcode_t h ) {
+        __TBB_ASSERT( *(intptr_t*)(&b_new->mutex), "b_new must be locked (for write)");
+        __TBB_ASSERT( h > 1, "The lowermost buckets can't be rehashed" );
+        __TBB_store_with_release(b_new->node_list, __TBB_empty_rehashed); // mark rehashed
+        hashcode_t mask = ( 1u<<__TBB_Log2( h ) ) - 1; // get parent mask from the topmost bit
+
+        bucket_accessor b_old( this, h & mask );
+
+        mask = (mask<<1) | 1; // get full mask for new bucket
+        __TBB_ASSERT( (mask&(mask+1))==0 && (h & mask) == h, NULL );
+    restart:
+        for( node_base **p = &b_old()->node_list, *n = __TBB_load_with_acquire(*p); is_valid(n); n = *p ) {
+            hashcode_t c = my_hash_compare.hash( static_cast<node*>(n)->item.first );
+            if( (c & mask) == h ) {
+                if( !b_old.is_writer() )
+                    if( !b_old.upgrade_to_writer() ) {
+                        goto restart; // node ptr can be invalid due to concurrent erase
+                    }
+                *p = n->next; // exclude from b_old
+                add_to_bucket( b_new, n );
+            } else p = &n->next; // iterate to next item
+        }
+    }
+
+public:
+    
+    class accessor;
+    //! Combines data access, locking, and garbage collection.
+    class const_accessor {
+        friend class concurrent_hash_map<Key,T,HashCompare,Allocator>;
+        friend class accessor;
+        void operator=( const accessor & ) const; // Deny access
+        const_accessor( const accessor & );       // Deny access
+    public:
+        //! Type of value
+        typedef const typename concurrent_hash_map::value_type value_type;
+
+        //! True if result is empty.
+        bool empty() const {return !my_node;}
+
+        //! Set to null
+        void release() {
+            if( my_node ) {
+                my_lock.release();
+                my_node = 0;
+            }
+        }
+
+        //! Return reference to associated value in hash table.
+        const_reference operator*() const {
+            __TBB_ASSERT( my_node, "attempt to dereference empty accessor" );
+            return my_node->item;
+        }
+
+        //! Return pointer to associated value in hash table.
+        const_pointer operator->() const {
+            return &operator*();
+        }
+
+        //! Create empty result
+        const_accessor() : my_node(NULL) {}
+
+        //! Destroy result after releasing the underlying reference.
+        ~const_accessor() {
+            my_node = NULL; // my_lock.release() is called in scoped_lock destructor
+        }
+    private:
+        node *my_node;
+        typename node::scoped_t my_lock;
+        hashcode_t my_hash;
+    };
+
+    //! Allows write access to elements and combines data access, locking, and garbage collection.
+    class accessor: public const_accessor {
+    public:
+        //! Type of value
+        typedef typename concurrent_hash_map::value_type value_type;
+
+        //! Return reference to associated value in hash table.
+        reference operator*() const {
+            __TBB_ASSERT( this->my_node, "attempt to dereference empty accessor" );
+            return this->my_node->item;
+        }
+
+        //! Return pointer to associated value in hash table.
+        pointer operator->() const {
+            return &operator*();
+        }
+    };
+
+    //! Construct empty table.
+    concurrent_hash_map(const allocator_type &a = allocator_type())
+        : my_allocator(a)
+    {}
+
+    //! Copy constructor
+    concurrent_hash_map( const concurrent_hash_map& table, const allocator_type &a = allocator_type())
+        : my_allocator(a)
+    {
+        internal_copy(table);
+    }
+
+    //! Construction with copying iteration range and given allocator instance
+    template<typename I>
+    concurrent_hash_map(I first, I last, const allocator_type &a = allocator_type())
+        : my_allocator(a)
+    {
+        reserve( std::distance(first, last) ); // TODO: load_factor?
+        internal_copy(first, last);
+    }
+
+    //! Assignment
+    concurrent_hash_map& operator=( const concurrent_hash_map& table ) {
+        if( this!=&table ) {
+            clear();
+            internal_copy(table);
+        } 
+        return *this;
+    }
+
+
+    //! Clear table
+    void clear();
+
+    //! Clear table and destroy it.  
+    ~concurrent_hash_map() { clear(); }
+
+    //------------------------------------------------------------------------
+    // Parallel algorithm support
+    //------------------------------------------------------------------------
+    range_type range( size_type grainsize=1 ) {
+        return range_type( *this, grainsize );
+    }
+    const_range_type range( size_type grainsize=1 ) const {
+        return const_range_type( *this, grainsize );
+    }
+
+    //------------------------------------------------------------------------
+    // STL support - not thread-safe methods
+    //------------------------------------------------------------------------
+    iterator begin() {return iterator(*this,0,my_embedded_segment,my_embedded_segment->node_list);}
+    iterator end() {return iterator(*this,0,0,0);}
+    const_iterator begin() const {return const_iterator(*this,0,my_embedded_segment,my_embedded_segment->node_list);}
+    const_iterator end() const {return const_iterator(*this,0,0,0);}
+    std::pair<iterator, iterator> equal_range( const Key& key ) { return internal_equal_range(key, end()); }
+    std::pair<const_iterator, const_iterator> equal_range( const Key& key ) const { return internal_equal_range(key, end()); }
+    
+    //! Number of items in table.
+    size_type size() const { return my_size; }
+
+    //! True if size()==0.
+    bool empty() const { return my_size == 0; }
+
+    //! Upper bound on size.
+    size_type max_size() const {return (~size_type(0))/sizeof(node);}
+
+    //! return allocator object
+    allocator_type get_allocator() const { return this->my_allocator; }
+
+    //! swap two instances. Iterators are invalidated
+    void swap(concurrent_hash_map &table);
+
+    //------------------------------------------------------------------------
+    // concurrent map operations
+    //------------------------------------------------------------------------
+
+    //! Return count of items (0 or 1)
+    size_type count( const Key &key ) const {
+        return const_cast<concurrent_hash_map*>(this)->lookup(/*insert*/false, key, NULL, NULL, /*write=*/false );
+    }
+
+    //! Find item and acquire a read lock on the item.
+    /** Return true if item is found, false otherwise. */
+    bool find( const_accessor &result, const Key &key ) const {
+        result.release();
+        return const_cast<concurrent_hash_map*>(this)->lookup(/*insert*/false, key, NULL, &result, /*write=*/false );
+    }
+
+    //! Find item and acquire a write lock on the item.
+    /** Return true if item is found, false otherwise. */
+    bool find( accessor &result, const Key &key ) {
+        result.release();
+        return lookup(/*insert*/false, key, NULL, &result, /*write=*/true );
+    }
+        
+    //! Insert item (if not already present) and acquire a read lock on the item.
+    /** Returns true if item is new. */
+    bool insert( const_accessor &result, const Key &key ) {
+        result.release();
+        return lookup(/*insert*/true, key, NULL, &result, /*write=*/false );
+    }
+
+    //! Insert item (if not already present) and acquire a write lock on the item.
+    /** Returns true if item is new. */
+    bool insert( accessor &result, const Key &key ) {
+        result.release();
+        return lookup(/*insert*/true, key, NULL, &result, /*write=*/true );
+    }
+
+    //! Insert item by copying if there is no such key present already and acquire a read lock on the item.
+    /** Returns true if item is new. */
+    bool insert( const_accessor &result, const value_type &value ) {
+        result.release();
+        return lookup(/*insert*/true, value.first, &value.second, &result, /*write=*/false );
+    }
+
+    //! Insert item by copying if there is no such key present already and acquire a write lock on the item.
+    /** Returns true if item is new. */
+    bool insert( accessor &result, const value_type &value ) {
+        result.release();
+        return lookup(/*insert*/true, value.first, &value.second, &result, /*write=*/true );
+    }
+
+    //! Insert item by copying if there is no such key present already
+    /** Returns true if item is inserted. */
+    bool insert( const value_type &value ) {
+        return lookup(/*insert*/true, value.first, &value.second, NULL, /*write=*/false );
+    }
+
+    //! Insert range [first, last)
+    template<typename I>
+    void insert(I first, I last) {
+        for(; first != last; ++first)
+            insert( *first );
+    }
+
+    //! Erase item.
+    /** Return true if item was erased by particularly this call. */
+    bool erase( const Key& key );
+
+    //! Erase item by const_accessor.
+    /** Return true if item was erased by particularly this call. */
+    bool erase( const_accessor& item_accessor ) {
+        return exclude( item_accessor, /*readonly=*/ true );
+    }
+
+    //! Erase item by accessor.
+    /** Return true if item was erased by particularly this call. */
+    bool erase( accessor& item_accessor ) {
+        return exclude( item_accessor, /*readonly=*/ false );
+    }
+
+protected:
+    //! Insert or find item and optionally acquire a lock on the item.
+    bool lookup( bool op_insert, const Key &key, const T *t, const_accessor *result, bool write );
+
+    //! delete item by accessor
+    bool exclude( const_accessor &item_accessor, bool readonly );
+
+    //! Returns an iterator for an item defined by the key, or for the next item after it (if upper==true)
+    template<typename I>
+    std::pair<I, I> internal_equal_range( const Key& key, I end ) const;
+
+    //! Copy "source" to *this, where *this must start out empty.
+    void internal_copy( const concurrent_hash_map& source );
+
+    template<typename I>
+    void internal_copy(I first, I last);
+
+    //! fast find when no concurrent erasure is used
+    const_pointer find( const Key& key ) const {
+        hashcode_t h = my_hash_compare.hash( key );
+        hashcode_t m = my_mask;
+    restart:
+        __TBB_ASSERT((m&(m+1))==0, NULL);
+        bucket *b = get_bucket( h & m );
+        if( b->node_list == __TBB_rehash_req ) {
+            bucket::scoped_t lock;
+            if( lock.try_acquire( b->mutex, /*write=*/true ) && b->node_list == __TBB_rehash_req )
+                const_cast<concurrent_hash_map*>(this)->rehash_bucket( b, h & m ); //recursive rehashing
+            else internal::spin_wait_while_eq( b->node_list, __TBB_rehash_req ); //TODO: rework for fast find?
+        }
+        node *n = search_bucket( key, b );
+        if( check_mask_race( h, m ) )
+            goto restart;
+        if( n )
+            return &n->item;
+        return 0;
+    }
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Suppress "conditional expression is constant" warning.
+    #pragma warning( push )
+    #pragma warning( disable: 4127 )
+#endif
+
+template<typename Key, typename T, typename HashCompare, typename A>
+bool concurrent_hash_map<Key,T,HashCompare,A>::lookup( bool op_insert, const Key &key, const T *t, const_accessor *result, bool write ) {
+    __TBB_ASSERT( !result || !result->my_node, NULL );
+    segment_index_t grow_segment;
+    bool return_value;
+    node *n, *tmp_n = 0;
+    hashcode_t const h = my_hash_compare.hash( key );
+#if TBB_USE_THREADING_TOOLS
+    hashcode_t m = (hashcode_t) itt_load_pointer_with_acquire_v3( &my_mask );
+#else
+    hashcode_t m = my_mask;
+#endif
+    restart:
+    {//lock scope
+        __TBB_ASSERT((m&(m+1))==0, NULL);
+        return_value = false;
+        // get bucket
+        bucket_accessor b( this, h & m );
+
+        // find a node
+        n = search_bucket( key, b() );
+        if( op_insert ) {
+            // [opt] insert a key
+            if( !is_valid(n) ) {
+                if( !tmp_n ) {
+                    if(t) tmp_n = new( my_allocator ) node(key, *t);
+                    else  tmp_n = new( my_allocator ) node(key);
+                }
+                if( !b.is_writer() && !b.upgrade_to_writer() ) { // TODO: improved insertion
+                    // Rerun search_list, in case another thread inserted the item during the upgrade.
+                    n = search_bucket( key, b() );
+                    if( is_valid(n) ) { // unfortunately, it did
+                        b.downgrade_to_reader();
+                        goto exists;
+                    }
+                }
+                if( check_mask_race(h, m) )
+                    goto restart; // b.release() is done in ~b().
+                // insert and set flag to grow the container
+                grow_segment = insert_new_node( b(), n = tmp_n, m );
+                tmp_n = 0;
+                return_value = true;
+            } else {
+    exists:     grow_segment = 0;
+            }
+        } else { // find or count
+            if( !n ) {
+                if( check_mask_race( h, m ) )
+                    goto restart; // b.release() is done in ~b(). TODO: replace by continue
+                return false;
+            }
+            return_value = true;
+            grow_segment = 0;
+        }
+        if( !result ) goto check_growth;
+        // TODO: the following seems as generic/regular operation
+        // acquire the item
+        if( !result->my_lock.try_acquire( n->mutex, write ) ) {
+            // we are unlucky, prepare for longer wait
+            internal::atomic_backoff trials;
+            do {
+                if( !trials.bounded_pause() ) {
+                    // the wait takes really long, restart the operation
+                    b.release();
+                    __TBB_Yield();
+                    m = my_mask;
+                    goto restart;
+                }
+            } while( !result->my_lock.try_acquire( n->mutex, write ) );
+        }
+    }//lock scope
+    result->my_node = n;
+    result->my_hash = h;
+check_growth:
+    // [opt] grow the container
+    if( grow_segment )
+        enable_segment( grow_segment );
+    if( tmp_n ) // if op_insert only
+        delete_node( tmp_n );
+    return return_value;
+}
+
+template<typename Key, typename T, typename HashCompare, typename A>
+template<typename I>
+std::pair<I, I> concurrent_hash_map<Key,T,HashCompare,A>::internal_equal_range( const Key& key, I end ) const {
+    hashcode_t h = my_hash_compare.hash( key );
+    hashcode_t m = my_mask;
+    __TBB_ASSERT((m&(m+1))==0, NULL);
+    h &= m;
+    bucket *b = get_bucket( h );
+    while( b->node_list == __TBB_rehash_req ) {
+        m = ( 1u<<__TBB_Log2( h ) ) - 1; // get parent mask from the topmost bit
+        b = get_bucket( h &= m );
+    }
+    node *n = search_bucket( key, b );
+    if( !n )
+        return std::make_pair(end, end);
+    iterator lower(*this, h, b, n), upper(lower);
+    return std::make_pair(lower, ++upper);
+}
+
+template<typename Key, typename T, typename HashCompare, typename A>
+bool concurrent_hash_map<Key,T,HashCompare,A>::exclude( const_accessor &item_accessor, bool readonly ) {
+    __TBB_ASSERT( item_accessor.my_node, NULL );
+    node_base *const n = item_accessor.my_node;
+    item_accessor.my_node = NULL; // we ought release accessor anyway
+    hashcode_t const h = item_accessor.my_hash;
+    hashcode_t m = my_mask;
+    do {
+        // get bucket
+        bucket_accessor b( this, h & m, /*writer=*/true );
+        node_base **p = &b()->node_list;
+        while( *p && *p != n )
+            p = &(*p)->next;
+        if( !*p ) { // someone else was the first
+            if( check_mask_race( h, m ) )
+                continue;
+            item_accessor.my_lock.release();
+            return false;
+        }
+        __TBB_ASSERT( *p == n, NULL );
+        *p = n->next; // remove from container
+        my_size--;
+        break;
+    } while(true);
+    if( readonly ) // need to get exclusive lock
+        item_accessor.my_lock.upgrade_to_writer(); // return value means nothing here
+    item_accessor.my_lock.release();
+    delete_node( n ); // Only one thread can delete it due to write lock on the chain_mutex
+    return true;
+}
+
+template<typename Key, typename T, typename HashCompare, typename A>
+bool concurrent_hash_map<Key,T,HashCompare,A>::erase( const Key &key ) {
+    node_base *n;
+    hashcode_t const h = my_hash_compare.hash( key );
+    hashcode_t m = my_mask;
+    {//lock scope
+    restart:
+        // get bucket
+        bucket_accessor b( this, h & m );
+    search:
+        node_base **p = &b()->node_list;
+        n = *p;
+        while( is_valid(n) && !my_hash_compare.equal(key, static_cast<node*>(n)->item.first ) ) {
+            p = &n->next;
+            n = *p;
+        }
+        if( !n ) { // not found, but mask could be changed
+            if( check_mask_race( h, m ) )
+                goto restart;
+            return false;
+        }
+        else if( !b.is_writer() && !b.upgrade_to_writer() ) {
+            if( check_mask_race( h, m ) ) // contended upgrade, check mask
+                goto restart;
+            goto search;
+        }
+        *p = n->next;
+        my_size--;
+    }
+    {
+        typename node::scoped_t item_locker( n->mutex, /*write=*/true );
+    }
+    // note: there should be no threads pretending to acquire this mutex again, do not try to upgrade const_accessor!
+    delete_node( n ); // Only one thread can delete it due to write lock on the bucket
+    return true;
+}
+
+template<typename Key, typename T, typename HashCompare, typename A>
+void concurrent_hash_map<Key,T,HashCompare,A>::swap(concurrent_hash_map<Key,T,HashCompare,A> &table) {
+    std::swap(this->my_allocator, table.my_allocator);
+    std::swap(this->my_hash_compare, table.my_hash_compare);
+    internal_swap(table);
+}
+
+template<typename Key, typename T, typename HashCompare, typename A>
+void concurrent_hash_map<Key,T,HashCompare,A>::clear() {
+    hashcode_t m = my_mask;
+    __TBB_ASSERT((m&(m+1))==0, NULL);
+#if TBB_USE_DEBUG || TBB_USE_PERFORMANCE_WARNINGS
+#if TBB_USE_PERFORMANCE_WARNINGS
+    int size = int(my_size), buckets = int(m)+1, empty_buckets = 0, overpopulated_buckets = 0; // usage statistics
+    static bool reported = false;
+#endif
+    // check consistency
+    for( segment_index_t b = 0; b <= m; b++ ) {
+        node_base *n = get_bucket(b)->node_list;
+#if TBB_USE_PERFORMANCE_WARNINGS
+        if( n == __TBB_empty_rehashed ) empty_buckets++;
+        else if( n == __TBB_rehash_req ) buckets--;
+        else if( n->next ) overpopulated_buckets++;
+#endif
+        for(; is_valid(n); n = n->next ) {
+            hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first );
+            h &= m;
+            __TBB_ASSERT( h == b || get_bucket(h)->node_list == __TBB_rehash_req, "Rehashing is not finished until serial stage due to concurrent or terminated operation" );
+        }
+    }
+#if TBB_USE_PERFORMANCE_WARNINGS
+    if( buckets > size) empty_buckets -= buckets - size;
+    else overpopulated_buckets -= size - buckets; // TODO: load_factor?
+    if( !reported && buckets >= 512 && ( 2*empty_buckets >= size || 2*overpopulated_buckets > size ) ) {
+        internal::runtime_warning(
+            "Performance is not optimal because the hash function produces bad randomness in lower bits in %s.\nSize: %d  Empties: %d  Overlaps: %d",
+            typeid(*this).name(), size, empty_buckets, overpopulated_buckets );
+        reported = true;
+    }
+#endif
+#endif//TBB_USE_DEBUG || TBB_USE_PERFORMANCE_WARNINGS
+    my_size = 0;
+    segment_index_t s = segment_index_of( m );
+    __TBB_ASSERT( s+1 == pointers_per_table || !my_table[s+1], "wrong mask or concurrent grow" );
+    cache_aligned_allocator<bucket> alloc;
+    do {
+        __TBB_ASSERT( is_valid( my_table[s] ), "wrong mask or concurrent grow" );
+        segment_ptr_t buckets = my_table[s];
+        size_type sz = segment_size( s ? s : 1 );
+        for( segment_index_t i = 0; i < sz; i++ )
+            for( node_base *n = buckets[i].node_list; is_valid(n); n = buckets[i].node_list ) {
+                buckets[i].node_list = n->next;
+                delete_node( n );
+            }
+        if( s >= first_block) // the first segment or the next
+            alloc.deallocate( buckets, sz );
+        else if( s == embedded_block && embedded_block != first_block )
+            alloc.deallocate( buckets, segment_size(first_block)-embedded_buckets );
+        if( s >= embedded_block ) my_table[s] = 0;
+    } while(s-- > 0);
+    my_mask = embedded_buckets - 1;
+}
+
+template<typename Key, typename T, typename HashCompare, typename A>
+void concurrent_hash_map<Key,T,HashCompare,A>::internal_copy( const concurrent_hash_map& source ) {
+    reserve( source.my_size ); // TODO: load_factor?
+    if( my_mask == source.my_mask ) { // optimized version
+        for( const_iterator it = source.begin(), end = source.end(); it != end; ++it ) {
+            bucket *b = get_bucket( it.my_index );
+            __TBB_ASSERT( b->node_list != __TBB_rehash_req, "Invalid bucket in destination table");
+            node *n = new( my_allocator ) node(it->first, it->second);
+            add_to_bucket( b, n );
+            ++my_size; // TODO: replace by non-atomic op
+        }
+    } else internal_copy( source.begin(), source.end() );
+}
+
+template<typename Key, typename T, typename HashCompare, typename A>
+template<typename I>
+void concurrent_hash_map<Key,T,HashCompare,A>::internal_copy(I first, I last) {
+    hashcode_t m = my_mask;
+    for(; first != last; ++first) {
+        hashcode_t h = my_hash_compare.hash( first->first );
+        bucket *b = get_bucket( h & m );
+        __TBB_ASSERT( b->node_list != __TBB_rehash_req, "Invalid bucket in destination table");
+        node *n = new( my_allocator ) node(first->first, first->second);
+        add_to_bucket( b, n );
+        ++my_size; // TODO: replace by non-atomic op
+    }
+}
+
+template<typename Key, typename T, typename HashCompare, typename A1, typename A2>
+inline bool operator==(const concurrent_hash_map<Key, T, HashCompare, A1> &a, const concurrent_hash_map<Key, T, HashCompare, A2> &b) {
+    if(a.size() != b.size()) return false;
+    typename concurrent_hash_map<Key, T, HashCompare, A1>::const_iterator i(a.begin()), i_end(a.end());
+    typename concurrent_hash_map<Key, T, HashCompare, A2>::const_iterator j, j_end(b.end());
+    for(; i != i_end; ++i) {
+        j = b.equal_range(i->first).first;
+        if( j == j_end || !(i->second == j->second) ) return false;
+    }
+    return true;
+}
+
+template<typename Key, typename T, typename HashCompare, typename A1, typename A2>
+inline bool operator!=(const concurrent_hash_map<Key, T, HashCompare, A1> &a, const concurrent_hash_map<Key, T, HashCompare, A2> &b)
+{    return !(a == b); }
+
+template<typename Key, typename T, typename HashCompare, typename A>
+inline void swap(concurrent_hash_map<Key, T, HashCompare, A> &a, concurrent_hash_map<Key, T, HashCompare, A> &b)
+{    a.swap( b ); }
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif // warning 4127 is back
+
+} // namespace tbb
+
+#endif /* __TBB_concurrent_hash_map_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/concurrent_queue.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/concurrent_queue.h
new file mode 100644 (file)
index 0000000..f344a84
--- /dev/null
@@ -0,0 +1,409 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_concurrent_queue_H
+#define __TBB_concurrent_queue_H
+
+#include "_concurrent_queue_internal.h"
+
+namespace tbb {
+
+namespace strict_ppl {
+
+//! A high-performance thread-safe non-blocking concurrent queue.
+/** Multiple threads may each push and pop concurrently.
+    Assignment construction is not allowed.
+    @ingroup containers */
+template<typename T, typename A = cache_aligned_allocator<T> > 
+class concurrent_queue: public internal::concurrent_queue_base_v3<T> {
+    template<typename Container, typename Value> friend class internal::concurrent_queue_iterator;
+
+    //! Allocator type
+    typedef typename A::template rebind<char>::other page_allocator_type;
+    page_allocator_type my_allocator;
+
+    //! Allocates a block of size n (bytes)
+    /*overide*/ virtual void *allocate_block( size_t n ) {
+        void *b = reinterpret_cast<void*>(my_allocator.allocate( n ));
+        if( !b ) this->internal_throw_exception(); 
+        return b;
+    }
+
+    //! Returns a block of size n (bytes)
+    /*override*/ virtual void deallocate_block( void *b, size_t n ) {
+        my_allocator.deallocate( reinterpret_cast<char*>(b), n );
+    }
+
+public:
+    //! Element type in the queue.
+    typedef T value_type;
+
+    //! Reference type
+    typedef T& reference;
+
+    //! Const reference type
+    typedef const T& const_reference;
+
+    //! Integral type for representing size of the queue.
+    typedef size_t size_type;
+
+    //! Difference type for iterator
+    typedef ptrdiff_t difference_type;
+
+    //! Allocator type
+    typedef A allocator_type;
+
+    //! Construct empty queue
+    explicit concurrent_queue(const allocator_type& a = allocator_type()) : 
+        internal::concurrent_queue_base_v3<T>( sizeof(T) ), my_allocator( a )
+    {
+    }
+
+    //! [begin,end) constructor
+    template<typename InputIterator>
+    concurrent_queue( InputIterator begin, InputIterator end, const allocator_type& a = allocator_type()) :
+        internal::concurrent_queue_base_v3<T>( sizeof(T) ), my_allocator( a )
+    {
+        for( ; begin != end; ++begin )
+            internal_push(&*begin);
+    }
+    
+    //! Copy constructor
+    concurrent_queue( const concurrent_queue& src, const allocator_type& a = allocator_type()) : 
+        internal::concurrent_queue_base_v3<T>( sizeof(T) ), my_allocator( a )
+    {
+        assign( src );
+    }
+    
+    //! Destroy queue
+    ~concurrent_queue();
+
+    //! Enqueue an item at tail of queue.
+    void push( const T& source ) {
+        internal_push( &source );
+    }
+
+    //! Attempt to dequeue an item from head of queue.
+    /** Does not wait for item to become available.
+        Returns true if successful; false otherwise. */
+    bool try_pop( T& result ) {
+        return internal_try_pop( &result );
+    }
+
+    //! Return the number of items in the queue; thread unsafe
+    size_type unsafe_size() const {return this->internal_size();}
+
+    //! Equivalent to size()==0.
+    bool empty() const {return this->internal_empty();}
+
+    //! Clear the queue. not thread-safe.
+    void clear() ;
+
+    //! Return allocator object
+    allocator_type get_allocator() const { return this->my_allocator; }
+
+    typedef internal::concurrent_queue_iterator<concurrent_queue,T> iterator;
+    typedef internal::concurrent_queue_iterator<concurrent_queue,const T> const_iterator;
+
+    //------------------------------------------------------------------------
+    // The iterators are intended only for debugging.  They are slow and not thread safe.
+    //------------------------------------------------------------------------
+    iterator unsafe_begin() {return iterator(*this);}
+    iterator unsafe_end() {return iterator();}
+    const_iterator unsafe_begin() const {return const_iterator(*this);}
+    const_iterator unsafe_end() const {return const_iterator();}
+} ;
+
+template<typename T, class A>
+concurrent_queue<T,A>::~concurrent_queue() {
+    clear();
+    this->internal_finish_clear();
+}
+
+template<typename T, class A>
+void concurrent_queue<T,A>::clear() {
+    while( !empty() ) {
+        T value;
+        internal_try_pop(&value);
+    }
+}
+
+} // namespace strict_ppl
+    
+//! A high-performance thread-safe blocking concurrent bounded queue.
+/** This is the pre-PPL TBB concurrent queue which supports boundedness and blocking semantics.
+    Note that method names agree with the PPL-style concurrent queue.
+    Multiple threads may each push and pop concurrently.
+    Assignment construction is not allowed.
+    @ingroup containers */
+template<typename T, class A = cache_aligned_allocator<T> >
+class concurrent_bounded_queue: public internal::concurrent_queue_base_v3 {
+    template<typename Container, typename Value> friend class internal::concurrent_queue_iterator;
+
+    //! Allocator type
+    typedef typename A::template rebind<char>::other page_allocator_type;
+    page_allocator_type my_allocator;
+
+    //! Class used to ensure exception-safety of method "pop" 
+    class destroyer: internal::no_copy {
+        T& my_value;
+    public:
+        destroyer( T& value ) : my_value(value) {}
+        ~destroyer() {my_value.~T();}          
+    };
+
+    T& get_ref( page& page, size_t index ) {
+        __TBB_ASSERT( index<items_per_page, NULL );
+        return static_cast<T*>(static_cast<void*>(&page+1))[index];
+    }
+
+    /*override*/ virtual void copy_item( page& dst, size_t index, const void* src ) {
+        new( &get_ref(dst,index) ) T(*static_cast<const T*>(src)); 
+    }
+
+    /*override*/ virtual void copy_page_item( page& dst, size_t dindex, const page& src, size_t sindex ) {
+        new( &get_ref(dst,dindex) ) T( static_cast<const T*>(static_cast<const void*>(&src+1))[sindex] );
+    }
+
+    /*override*/ virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) {
+        T& from = get_ref(src,index);
+        destroyer d(from);
+        *static_cast<T*>(dst) = from;
+    }
+
+    /*overide*/ virtual page *allocate_page() {
+        size_t n = sizeof(page) + items_per_page*item_size;
+        page *p = reinterpret_cast<page*>(my_allocator.allocate( n ));
+        if( !p ) internal_throw_exception(); 
+        return p;
+    }
+
+    /*override*/ virtual void deallocate_page( page *p ) {
+        size_t n = sizeof(page) + items_per_page*item_size;
+        my_allocator.deallocate( reinterpret_cast<char*>(p), n );
+    }
+
+public:
+    //! Element type in the queue.
+    typedef T value_type;
+
+    //! Allocator type
+    typedef A allocator_type;
+
+    //! Reference type
+    typedef T& reference;
+
+    //! Const reference type
+    typedef const T& const_reference;
+
+    //! Integral type for representing size of the queue.
+    /** Notice that the size_type is a signed integral type.
+        This is because the size can be negative if there are pending pops without corresponding pushes. */
+    typedef std::ptrdiff_t size_type;
+
+    //! Difference type for iterator
+    typedef std::ptrdiff_t difference_type;
+
+    //! Construct empty queue
+    explicit concurrent_bounded_queue(const allocator_type& a = allocator_type()) : 
+        concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+    {
+    }
+
+    //! Copy constructor
+    concurrent_bounded_queue( const concurrent_bounded_queue& src, const allocator_type& a = allocator_type()) : 
+        concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+    {
+        assign( src );
+    }
+
+    //! [begin,end) constructor
+    template<typename InputIterator>
+    concurrent_bounded_queue( InputIterator begin, InputIterator end, const allocator_type& a = allocator_type()) :
+        concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+    {
+        for( ; begin != end; ++begin )
+            internal_push_if_not_full(&*begin);
+    }
+
+    //! Destroy queue
+    ~concurrent_bounded_queue();
+
+    //! Enqueue an item at tail of queue.
+    void push( const T& source ) {
+        internal_push( &source );
+    }
+
+    //! Dequeue item from head of queue.
+    /** Block until an item becomes available, and then dequeue it. */
+    void pop( T& destination ) {
+        internal_pop( &destination );
+    }
+
+    //! Enqueue an item at tail of queue if queue is not already full.
+    /** Does not wait for queue to become not full.
+        Returns true if item is pushed; false if queue was already full. */
+    bool try_push( const T& source ) {
+        return internal_push_if_not_full( &source );
+    }
+
+    //! Attempt to dequeue an item from head of queue.
+    /** Does not wait for item to become available.
+        Returns true if successful; false otherwise. */
+    bool try_pop( T& destination ) {
+        return internal_pop_if_present( &destination );
+    }
+
+    //! Return number of pushes minus number of pops.
+    /** Note that the result can be negative if there are pops waiting for the 
+        corresponding pushes.  The result can also exceed capacity() if there 
+        are push operations in flight. */
+    size_type size() const {return internal_size();}
+
+    //! Equivalent to size()<=0.
+    bool empty() const {return internal_empty();}
+
+    //! Maximum number of allowed elements
+    size_type capacity() const {
+        return my_capacity;
+    }
+
+    //! Set the capacity
+    /** Setting the capacity to 0 causes subsequent try_push operations to always fail,
+        and subsequent push operations to block forever. */
+    void set_capacity( size_type capacity ) {
+        internal_set_capacity( capacity, sizeof(T) );
+    }
+
+    //! return allocator object
+    allocator_type get_allocator() const { return this->my_allocator; }
+
+    //! clear the queue. not thread-safe.
+    void clear() ;
+
+    typedef internal::concurrent_queue_iterator<concurrent_bounded_queue,T> iterator;
+    typedef internal::concurrent_queue_iterator<concurrent_bounded_queue,const T> const_iterator;
+
+    //------------------------------------------------------------------------
+    // The iterators are intended only for debugging.  They are slow and not thread safe.
+    //------------------------------------------------------------------------
+    iterator unsafe_begin() {return iterator(*this);}
+    iterator unsafe_end() {return iterator();}
+    const_iterator unsafe_begin() const {return const_iterator(*this);}
+    const_iterator unsafe_end() const {return const_iterator();}
+
+}; 
+
+template<typename T, class A>
+concurrent_bounded_queue<T,A>::~concurrent_bounded_queue() {
+    clear();
+    internal_finish_clear();
+}
+
+template<typename T, class A>
+void concurrent_bounded_queue<T,A>::clear() {
+    while( !empty() ) {
+        T value;
+        internal_pop_if_present(&value);
+    }
+}
+
+namespace deprecated {
+
+//! A high-performance thread-safe blocking concurrent bounded queue.
+/** This is the pre-PPL TBB concurrent queue which support boundedness and blocking semantics.
+    Note that method names agree with the PPL-style concurrent queue.
+    Multiple threads may each push and pop concurrently.
+    Assignment construction is not allowed.
+    @ingroup containers */
+template<typename T, class A = cache_aligned_allocator<T> > 
+class concurrent_queue: public concurrent_bounded_queue<T,A> {
+#if !__TBB_TEMPLATE_FRIENDS_BROKEN
+    template<typename Container, typename Value> friend class internal::concurrent_queue_iterator;
+#endif 
+
+public:
+    //! Construct empty queue
+    explicit concurrent_queue(const A& a = A()) : 
+        concurrent_bounded_queue<T,A>( a )
+    {
+    }
+
+    //! Copy constructor
+    concurrent_queue( const concurrent_queue& src, const A& a = A()) : 
+        concurrent_bounded_queue<T,A>( src, a )
+    {
+    }
+
+    //! [begin,end) constructor
+    template<typename InputIterator>
+    concurrent_queue( InputIterator begin, InputIterator end, const A& a = A()) :
+        concurrent_bounded_queue<T,A>( begin, end, a )
+    {
+    }
+
+    //! Enqueue an item at tail of queue if queue is not already full.
+    /** Does not wait for queue to become not full.
+        Returns true if item is pushed; false if queue was already full. */
+    bool push_if_not_full( const T& source ) {
+        return try_push( source );
+    }
+
+    //! Attempt to dequeue an item from head of queue.
+    /** Does not wait for item to become available.
+        Returns true if successful; false otherwise. 
+        @deprecated Use try_pop()
+        */
+    bool pop_if_present( T& destination ) {
+        return try_pop( destination );
+    }
+
+    typedef typename concurrent_bounded_queue<T,A>::iterator iterator;
+    typedef typename concurrent_bounded_queue<T,A>::const_iterator const_iterator;
+    //
+    //------------------------------------------------------------------------
+    // The iterators are intended only for debugging.  They are slow and not thread safe.
+    //------------------------------------------------------------------------
+    iterator begin() {return this->unsafe_begin();}
+    iterator end() {return this->unsafe_end();}
+    const_iterator begin() const {return this->unsafe_begin();}
+    const_iterator end() const {return this->unsafe_end();}
+}; 
+
+}
+    
+
+#if TBB_DEPRECATED
+using deprecated::concurrent_queue;
+#else
+using strict_ppl::concurrent_queue;    
+#endif
+
+} // namespace tbb
+
+#endif /* __TBB_concurrent_queue_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/concurrent_vector.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/concurrent_vector.h
new file mode 100644 (file)
index 0000000..ad591d1
--- /dev/null
@@ -0,0 +1,1049 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_concurrent_vector_H
+#define __TBB_concurrent_vector_H
+
+#include "tbb_stddef.h"
+#include <algorithm>
+#include <iterator>
+#include <new>
+#include <cstring>
+#include "atomic.h"
+#include "cache_aligned_allocator.h"
+#include "blocked_range.h"
+
+#include "tbb_machine.h"
+
+#if _MSC_VER==1500 && !__INTEL_COMPILER
+    // VS2008/VC9 seems to have an issue; limits pull in math.h
+    #pragma warning( push )
+    #pragma warning( disable: 4985 )
+#endif
+#include <limits> /* std::numeric_limits */
+#if _MSC_VER==1500 && !__INTEL_COMPILER
+    #pragma warning( pop )
+#endif
+
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)
+    // Workaround for overzealous compiler warnings in /Wp64 mode
+    #pragma warning (push)
+    #pragma warning (disable: 4267)
+#endif
+
+namespace tbb {
+
+template<typename T, class A = cache_aligned_allocator<T> >
+class concurrent_vector;
+
+//! Bad allocation marker
+#define __TBB_BAD_ALLOC reinterpret_cast<void*>(size_t(63))
+
+//! @cond INTERNAL
+namespace internal {
+
+    //! Routine that loads pointer from location pointed to by src without any fence, without causing ITT to report a race.
+    void* __TBB_EXPORTED_FUNC itt_load_pointer_v3( const void* src );
+
+    //! Base class of concurrent vector implementation.
+    /** @ingroup containers */
+    class concurrent_vector_base_v3 {
+    protected:
+
+        // Basic types declarations
+        typedef size_t segment_index_t;
+        typedef size_t size_type;
+
+        // Using enumerations due to Mac linking problems of static const variables
+        enum {
+            // Size constants
+            default_initial_segments = 1, // 2 initial items
+            //! Number of slots for segment's pointers inside the class
+            pointers_per_short_table = 3, // to fit into 8 words of entire structure
+            pointers_per_long_table = sizeof(segment_index_t) * 8 // one segment per bit
+        };
+
+        // Segment pointer. Can be zero-initialized
+        struct segment_t {
+            void* array;
+#if TBB_USE_ASSERT
+            ~segment_t() {
+                __TBB_ASSERT( array <= __TBB_BAD_ALLOC, "should have been freed by clear" );
+            }
+#endif /* TBB_USE_ASSERT */
+        };
+        // Data fields
+
+        //! allocator function pointer
+        void* (*vector_allocator_ptr)(concurrent_vector_base_v3 &, size_t);
+
+        //! count of segments in the first block
+        atomic<size_type> my_first_block;
+
+        //! Requested size of vector
+        atomic<size_type> my_early_size;
+
+        //! Pointer to the segments table
+        atomic<segment_t*> my_segment;
+
+        //! embedded storage of segment pointers
+        segment_t my_storage[pointers_per_short_table];
+
+        // Methods
+
+        concurrent_vector_base_v3() {
+            my_early_size = 0;
+            my_first_block = 0; // here is not default_initial_segments
+            for( segment_index_t i = 0; i < pointers_per_short_table; i++)
+                my_storage[i].array = NULL;
+            my_segment = my_storage;
+        }
+        __TBB_EXPORTED_METHOD ~concurrent_vector_base_v3();
+
+        static segment_index_t segment_index_of( size_type index ) {
+            return segment_index_t( __TBB_Log2( index|1 ) );
+        }
+
+        static segment_index_t segment_base( segment_index_t k ) {
+            return (segment_index_t(1)<<k & ~segment_index_t(1));
+        }
+
+        static inline segment_index_t segment_base_index_of( segment_index_t &index ) {
+            segment_index_t k = segment_index_of( index );
+            index -= segment_base(k);
+            return k;
+        }
+
+        static size_type segment_size( segment_index_t k ) {
+            return segment_index_t(1)<<k; // fake value for k==0
+        }
+
+        //! An operation on an n-element array starting at begin.
+        typedef void (__TBB_EXPORTED_FUNC *internal_array_op1)(void* begin, size_type n );
+
+        //! An operation on n-element destination array and n-element source array.
+        typedef void (__TBB_EXPORTED_FUNC *internal_array_op2)(void* dst, const void* src, size_type n );
+
+        //! Internal structure for compact()
+        struct internal_segments_table {
+            segment_index_t first_block;
+            void* table[pointers_per_long_table];
+        };
+
+        void __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );
+        size_type __TBB_EXPORTED_METHOD internal_capacity() const;
+        void internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op2 init, const void *src );
+        size_type __TBB_EXPORTED_METHOD internal_grow_by( size_type delta, size_type element_size, internal_array_op2 init, const void *src );
+        void* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type& index );
+        segment_index_t __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy );
+        void* __TBB_EXPORTED_METHOD internal_compact( size_type element_size, void *table, internal_array_op1 destroy, internal_array_op2 copy );
+        void __TBB_EXPORTED_METHOD internal_copy( const concurrent_vector_base_v3& src, size_type element_size, internal_array_op2 copy );
+        void __TBB_EXPORTED_METHOD internal_assign( const concurrent_vector_base_v3& src, size_type element_size,
+                              internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );
+        void __TBB_EXPORTED_METHOD internal_throw_exception(size_type) const;
+        void __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3& v);
+
+        void __TBB_EXPORTED_METHOD internal_resize( size_type n, size_type element_size, size_type max_size, const void *src,
+                                                    internal_array_op1 destroy, internal_array_op2 init );
+        size_type __TBB_EXPORTED_METHOD internal_grow_to_at_least_with_result( size_type new_size, size_type element_size, internal_array_op2 init, const void *src );
+
+        //! Deprecated entry point for backwards compatibility to TBB 2.1.
+        void __TBB_EXPORTED_METHOD internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op2 init, const void *src );
+private:
+        //! Private functionality
+        class helper;
+        friend class helper;
+    };
+    
+    typedef concurrent_vector_base_v3 concurrent_vector_base;
+
+    //! Meets requirements of a forward iterator for STL and a Value for a blocked_range.*/
+    /** Value is either the T or const T type of the container.
+        @ingroup containers */
+    template<typename Container, typename Value>
+    class vector_iterator 
+    {
+        //! concurrent_vector over which we are iterating.
+        Container* my_vector;
+
+        //! Index into the vector 
+        size_t my_index;
+
+        //! Caches my_vector-&gt;internal_subscript(my_index)
+        /** NULL if cached value is not available */
+        mutable Value* my_item;
+
+        template<typename C, typename T>
+        friend vector_iterator<C,T> operator+( ptrdiff_t offset, const vector_iterator<C,T>& v );
+
+        template<typename C, typename T, typename U>
+        friend bool operator==( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );
+
+        template<typename C, typename T, typename U>
+        friend bool operator<( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );
+
+        template<typename C, typename T, typename U>
+        friend ptrdiff_t operator-( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );
+    
+        template<typename C, typename U>
+        friend class internal::vector_iterator;
+
+#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)
+        template<typename T, class A>
+        friend class tbb::concurrent_vector;
+#else
+public: // workaround for MSVC
+#endif 
+
+        vector_iterator( const Container& vector, size_t index, void *ptr = 0 ) : 
+            my_vector(const_cast<Container*>(&vector)), 
+            my_index(index), 
+            my_item(static_cast<Value*>(ptr))
+        {}
+
+    public:
+        //! Default constructor
+        vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}
+
+        vector_iterator( const vector_iterator<Container,typename Container::value_type>& other ) :
+            my_vector(other.my_vector),
+            my_index(other.my_index),
+            my_item(other.my_item)
+        {}
+
+        vector_iterator operator+( ptrdiff_t offset ) const {
+            return vector_iterator( *my_vector, my_index+offset );
+        }
+        vector_iterator &operator+=( ptrdiff_t offset ) {
+            my_index+=offset;
+            my_item = NULL;
+            return *this;
+        }
+        vector_iterator operator-( ptrdiff_t offset ) const {
+            return vector_iterator( *my_vector, my_index-offset );
+        }
+        vector_iterator &operator-=( ptrdiff_t offset ) {
+            my_index-=offset;
+            my_item = NULL;
+            return *this;
+        }
+        Value& operator*() const {
+            Value* item = my_item;
+            if( !item ) {
+                item = my_item = &my_vector->internal_subscript(my_index);
+            }
+            __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), "corrupt cache" );
+            return *item;
+        }
+        Value& operator[]( ptrdiff_t k ) const {
+            return my_vector->internal_subscript(my_index+k);
+        }
+        Value* operator->() const {return &operator*();}
+
+        //! Pre increment
+        vector_iterator& operator++() {
+            size_t k = ++my_index;
+            if( my_item ) {
+                // Following test uses 2's-complement wizardry
+                if( (k& (k-2))==0 ) {
+                    // k is a power of two that is at least k-2
+                    my_item= NULL;
+                } else {
+                    ++my_item;
+                }
+            }
+            return *this;
+        }
+
+        //! Pre decrement
+        vector_iterator& operator--() {
+            __TBB_ASSERT( my_index>0, "operator--() applied to iterator already at beginning of concurrent_vector" ); 
+            size_t k = my_index--;
+            if( my_item ) {
+                // Following test uses 2's-complement wizardry
+                if( (k& (k-2))==0 ) {
+                    // k is a power of two that is at least k-2  
+                    my_item= NULL;
+                } else {
+                    --my_item;
+                }
+            }
+            return *this;
+        }
+
+        //! Post increment
+        vector_iterator operator++(int) {
+            vector_iterator result = *this;
+            operator++();
+            return result;
+        }
+
+        //! Post decrement
+        vector_iterator operator--(int) {
+            vector_iterator result = *this;
+            operator--();
+            return result;
+        }
+
+        // STL support
+
+        typedef ptrdiff_t difference_type;
+        typedef Value value_type;
+        typedef Value* pointer;
+        typedef Value& reference;
+        typedef std::random_access_iterator_tag iterator_category;
+    };
+
+    template<typename Container, typename T>
+    vector_iterator<Container,T> operator+( ptrdiff_t offset, const vector_iterator<Container,T>& v ) {
+        return vector_iterator<Container,T>( *v.my_vector, v.my_index+offset );
+    }
+
+    template<typename Container, typename T, typename U>
+    bool operator==( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return i.my_index==j.my_index && i.my_vector == j.my_vector;
+    }
+
+    template<typename Container, typename T, typename U>
+    bool operator!=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return !(i==j);
+    }
+
+    template<typename Container, typename T, typename U>
+    bool operator<( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return i.my_index<j.my_index;
+    }
+
+    template<typename Container, typename T, typename U>
+    bool operator>( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return j<i;
+    }
+
+    template<typename Container, typename T, typename U>
+    bool operator>=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return !(i<j);
+    }
+
+    template<typename Container, typename T, typename U>
+    bool operator<=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return !(j<i);
+    }
+
+    template<typename Container, typename T, typename U>
+    ptrdiff_t operator-( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);
+    }
+
+    template<typename T, class A>
+    class allocator_base {
+    public:
+        typedef typename A::template
+            rebind<T>::other allocator_type;
+        allocator_type my_allocator;
+
+        allocator_base(const allocator_type &a = allocator_type() ) : my_allocator(a) {}
+    };
+
+} // namespace internal
+//! @endcond
+
+//! Concurrent vector container
+/** concurrent_vector is a container having the following main properties:
+    - It provides random indexed access to its elements. The index of the first element is 0.
+    - It ensures safe concurrent growing its size (different threads can safely append new elements).
+    - Adding new elements does not invalidate existing iterators and does not change indices of existing items.
+
+@par Compatibility
+    The class meets all Container Requirements and Reversible Container Requirements from
+    C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1). But it doesn't meet
+    Sequence Requirements due to absence of insert() and erase() methods.
+
+@par Exception Safety
+    Methods working with memory allocation and/or new elements construction can throw an
+    exception if allocator fails to allocate memory or element's default constructor throws one.
+    Concurrent vector's element of type T must conform to the following requirements:
+    - Throwing an exception is forbidden for destructor of T.
+    - Default constructor of T must not throw an exception OR its non-virtual destructor must safely work when its object memory is zero-initialized.
+    .
+    Otherwise, the program's behavior is undefined.
+@par
+    If an exception happens inside growth or assignment operation, an instance of the vector becomes invalid unless it is stated otherwise in the method documentation.
+    Invalid state means:
+    - There are no guaranties that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.
+    - An invalid vector instance cannot be repaired; it is unable to grow anymore.
+    - Size and capacity reported by the vector are incorrect, and calculated as if the failed operation were successful.
+    - Attempt to access not allocated elements using operator[] or iterators results in access violation or segmentation fault exception, and in case of using at() method a C++ exception is thrown.
+    .
+    If a concurrent grow operation successfully completes, all the elements it has added to the vector will remain valid and accessible even if one of subsequent grow operations fails.
+
+@par Fragmentation
+    Unlike an STL vector, a concurrent_vector does not move existing elements if it needs
+    to allocate more memory. The container is divided into a series of contiguous arrays of
+    elements. The first reservation, growth, or assignment operation determines the size of
+    the first array. Using small number of elements as initial size incurs fragmentation that
+    may increase element access time. Internal layout can be optimized by method compact() that
+    merges several smaller arrays into one solid.
+
+@par Changes since TBB 2.1
+    - Fixed guarantees of concurrent_vector::size() and grow_to_at_least() methods to assure elements are allocated.
+    - Methods end()/rbegin()/back() are partly thread-safe since they use size() to get the end of vector
+    - Added resize() methods (not thread-safe)
+    - Added cbegin/cend/crbegin/crend methods
+    - Changed return type of methods grow* and push_back to iterator
+
+@par Changes since TBB 2.0
+    - Implemented exception-safety guaranties
+    - Added template argument for allocator
+    - Added allocator argument in constructors
+    - Faster index calculation
+    - First growth call specifies a number of segments to be merged in the first allocation.
+    - Fixed memory blow up for swarm of vector's instances of small size
+    - Added grow_by(size_type n, const_reference t) growth using copying constructor to init new items. 
+    - Added STL-like constructors.
+    - Added operators ==, < and derivatives
+    - Added at() method, approved for using after an exception was thrown inside the vector
+    - Added get_allocator() method.
+    - Added assign() methods
+    - Added compact() method to defragment first segments
+    - Added swap() method
+    - range() defaults on grainsize = 1 supporting auto grainsize algorithms. 
+
+    @ingroup containers */
+template<typename T, class A>
+class concurrent_vector: protected internal::allocator_base<T, A>,
+                         private internal::concurrent_vector_base {
+private:
+    template<typename I>
+    class generic_range_type: public blocked_range<I> {
+    public:
+        typedef T value_type;
+        typedef T& reference;
+        typedef const T& const_reference;
+        typedef I iterator;
+        typedef ptrdiff_t difference_type;
+        generic_range_type( I begin_, I end_, size_t grainsize = 1) : blocked_range<I>(begin_,end_,grainsize) {} 
+        template<typename U>
+        generic_range_type( const generic_range_type<U>& r) : blocked_range<I>(r.begin(),r.end(),r.grainsize()) {} 
+        generic_range_type( generic_range_type& r, split ) : blocked_range<I>(r,split()) {}
+    };
+
+    template<typename C, typename U>
+    friend class internal::vector_iterator;
+public:
+    //------------------------------------------------------------------------
+    // STL compatible types
+    //------------------------------------------------------------------------
+    typedef internal::concurrent_vector_base_v3::size_type size_type;
+    typedef typename internal::allocator_base<T, A>::allocator_type allocator_type;
+
+    typedef T value_type;
+    typedef ptrdiff_t difference_type;
+    typedef T& reference;
+    typedef const T& const_reference;
+    typedef T *pointer;
+    typedef const T *const_pointer;
+
+    typedef internal::vector_iterator<concurrent_vector,T> iterator;
+    typedef internal::vector_iterator<concurrent_vector,const T> const_iterator;
+
+#if !defined(_MSC_VER) || _CPPLIB_VER>=300 
+    // Assume ISO standard definition of std::reverse_iterator
+    typedef std::reverse_iterator<iterator> reverse_iterator;
+    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+#else
+    // Use non-standard std::reverse_iterator
+    typedef std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;
+    typedef std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;
+#endif /* defined(_MSC_VER) && (_MSC_VER<1300) */
+
+    //------------------------------------------------------------------------
+    // Parallel algorithm support
+    //------------------------------------------------------------------------
+    typedef generic_range_type<iterator> range_type;
+    typedef generic_range_type<const_iterator> const_range_type;
+
+    //------------------------------------------------------------------------
+    // STL compatible constructors & destructors
+    //------------------------------------------------------------------------
+
+    //! Construct empty vector.
+    explicit concurrent_vector(const allocator_type &a = allocator_type())
+        : internal::allocator_base<T, A>(a)
+    {
+        vector_allocator_ptr = &internal_allocator;
+    }
+
+    //! Copying constructor
+    concurrent_vector( const concurrent_vector& vector, const allocator_type& a = allocator_type() )
+        : internal::allocator_base<T, A>(a)
+    {
+        vector_allocator_ptr = &internal_allocator;
+        try {
+            internal_copy(vector, sizeof(T), &copy_array);
+        } catch(...) {
+            segment_t *table = my_segment;
+            internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+            throw;
+        }
+    }
+
+    //! Copying constructor for vector with different allocator type
+    template<class M>
+    concurrent_vector( const concurrent_vector<T, M>& vector, const allocator_type& a = allocator_type() )
+        : internal::allocator_base<T, A>(a)
+    {
+        vector_allocator_ptr = &internal_allocator;
+        try {
+            internal_copy(vector.internal_vector_base(), sizeof(T), &copy_array);
+        } catch(...) {
+            segment_t *table = my_segment;
+            internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+            throw;
+        }
+    }
+
+    //! Construction with initial size specified by argument n
+    explicit concurrent_vector(size_type n)
+    {
+        vector_allocator_ptr = &internal_allocator;
+        try {
+            internal_resize( n, sizeof(T), max_size(), NULL, &destroy_array, &initialize_array );
+        } catch(...) {
+            segment_t *table = my_segment;
+            internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+            throw;
+        }
+    }
+
+    //! Construction with initial size specified by argument n, initialization by copying of t, and given allocator instance
+    concurrent_vector(size_type n, const_reference t, const allocator_type& a = allocator_type())
+        : internal::allocator_base<T, A>(a)
+    {
+        vector_allocator_ptr = &internal_allocator;
+        try {
+            internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
+        } catch(...) {
+            segment_t *table = my_segment;
+            internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+            throw;
+        }
+    }
+
+    //! Construction with copying iteration range and given allocator instance
+    template<class I>
+    concurrent_vector(I first, I last, const allocator_type &a = allocator_type())
+        : internal::allocator_base<T, A>(a)
+    {
+        vector_allocator_ptr = &internal_allocator;
+        try {
+            internal_assign_range(first, last, static_cast<is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
+        } catch(...) {
+            segment_t *table = my_segment;
+            internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+            throw;
+        }
+    }
+
+    //! Assignment
+    concurrent_vector& operator=( const concurrent_vector& vector ) {
+        if( this != &vector )
+            internal_assign(vector, sizeof(T), &destroy_array, &assign_array, &copy_array);
+        return *this;
+    }
+
+    //! Assignment for vector with different allocator type
+    template<class M>
+    concurrent_vector& operator=( const concurrent_vector<T, M>& vector ) {
+        if( static_cast<void*>( this ) != static_cast<const void*>( &vector ) )
+            internal_assign(vector.internal_vector_base(),
+                sizeof(T), &destroy_array, &assign_array, &copy_array);
+        return *this;
+    }
+
+    //------------------------------------------------------------------------
+    // Concurrent operations
+    //------------------------------------------------------------------------
+    //! Grow by "delta" elements.
+#if TBB_DEPRECATED
+    /** Returns old size. */
+    size_type grow_by( size_type delta ) {
+        return delta ? internal_grow_by( delta, sizeof(T), &initialize_array, NULL ) : my_early_size;
+    }
+#else
+    /** Returns iterator pointing to the first new element. */
+    iterator grow_by( size_type delta ) {
+        return iterator(*this, delta ? internal_grow_by( delta, sizeof(T), &initialize_array, NULL ) : my_early_size);
+    }
+#endif
+
+    //! Grow by "delta" elements using copying constuctor.
+#if TBB_DEPRECATED
+    /** Returns old size. */
+    size_type grow_by( size_type delta, const_reference t ) {
+        return delta ? internal_grow_by( delta, sizeof(T), &initialize_array_by, static_cast<const void*>(&t) ) : my_early_size;
+    }
+#else
+    /** Returns iterator pointing to the first new element. */
+    iterator grow_by( size_type delta, const_reference t ) {
+        return iterator(*this, delta ? internal_grow_by( delta, sizeof(T), &initialize_array_by, static_cast<const void*>(&t) ) : my_early_size);
+    }
+#endif
+
+    //! Append minimal sequence of elements such that size()>=n.  
+#if TBB_DEPRECATED
+    /** The new elements are default constructed.  Blocks until all elements in range [0..n) are allocated.
+        May return while other elements are being constructed by other threads. */
+    void grow_to_at_least( size_type n ) {
+        if( n ) internal_grow_to_at_least_with_result( n, sizeof(T), &initialize_array, NULL );
+    };
+#else
+    /** The new elements are default constructed.  Blocks until all elements in range [0..n) are allocated.
+        May return while other elements are being constructed by other threads.
+        Returns iterator that points to beginning of appended sequence.
+        If no elements were appended, returns iterator pointing to nth element. */
+    iterator grow_to_at_least( size_type n ) {
+        size_type m=0;
+        if( n ) {
+            m = internal_grow_to_at_least_with_result( n, sizeof(T), &initialize_array, NULL );
+            if( m>n ) m=n;
+        }
+        return iterator(*this, m);
+    };
+#endif
+
+    //! Push item 
+#if TBB_DEPRECATED
+    size_type push_back( const_reference item )
+#else
+    /** Returns iterator pointing to the new element. */
+    iterator push_back( const_reference item )
+#endif
+    {
+        size_type k;
+        void *ptr = internal_push_back(sizeof(T),k);
+        internal_loop_guide loop(1, ptr);
+        loop.init(&item);
+#if TBB_DEPRECATED
+        return k;
+#else
+        return iterator(*this, k, ptr);
+#endif
+    }
+
+    //! Get reference to element at given index.
+    /** This method is thread-safe for concurrent reads, and also while growing the vector,
+        as long as the calling thread has checked that index&lt;size(). */
+    reference operator[]( size_type index ) {
+        return internal_subscript(index);
+    }
+
+    //! Get const reference to element at given index.
+    const_reference operator[]( size_type index ) const {
+        return internal_subscript(index);
+    }
+
+    //! Get reference to element at given index. Throws exceptions on errors.
+    reference at( size_type index ) {
+        return internal_subscript_with_exceptions(index);
+    }
+
+    //! Get const reference to element at given index. Throws exceptions on errors.
+    const_reference at( size_type index ) const {
+        return internal_subscript_with_exceptions(index);
+    }
+
+    //! Get range for iterating with parallel algorithms
+    range_type range( size_t grainsize = 1) {
+        return range_type( begin(), end(), grainsize );
+    }
+
+    //! Get const range for iterating with parallel algorithms
+    const_range_type range( size_t grainsize = 1 ) const {
+        return const_range_type( begin(), end(), grainsize );
+    }
+    //------------------------------------------------------------------------
+    // Capacity
+    //------------------------------------------------------------------------
+    //! Return size of vector. It may include elements under construction
+    size_type size() const {
+        size_type sz = my_early_size, cp = internal_capacity();
+        return cp < sz ? cp : sz;
+    }
+
+    //! Return true if vector is not empty or has elements under construction at least.
+    bool empty() const {return !my_early_size;}
+
+    //! Maximum size to which array can grow without allocating more memory. Concurrent allocations are not included in the value.
+    size_type capacity() const {return internal_capacity();}
+
+    //! Allocate enough space to grow to size n without having to allocate more memory later.
+    /** Like most of the methods provided for STL compatibility, this method is *not* thread safe. 
+        The capacity afterwards may be bigger than the requested reservation. */
+    void reserve( size_type n ) {
+        if( n )
+            internal_reserve(n, sizeof(T), max_size());
+    }
+
+    //! Resize the vector. Not thread-safe.
+    void resize( size_type n ) {
+        internal_resize( n, sizeof(T), max_size(), NULL, &destroy_array, &initialize_array );
+    }
+    
+    //! Resize the vector, copy t for new elements. Not thread-safe.
+    void resize( size_type n, const_reference t ) {
+        internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
+    }
+   
+#if TBB_DEPRECATED 
+    //! An alias for shrink_to_fit()
+    void compact() {shrink_to_fit();}
+#endif /* TBB_DEPRECATED */
+
+    //! Optimize memory usage and fragmentation.
+    void shrink_to_fit();
+
+    //! Upper bound on argument to reserve.
+    size_type max_size() const {return (~size_type(0))/sizeof(T);}
+
+    //------------------------------------------------------------------------
+    // STL support
+    //------------------------------------------------------------------------
+
+    //! start iterator
+    iterator begin() {return iterator(*this,0);}
+    //! end iterator
+    iterator end() {return iterator(*this,size());}
+    //! start const iterator
+    const_iterator begin() const {return const_iterator(*this,0);}
+    //! end const iterator
+    const_iterator end() const {return const_iterator(*this,size());}
+    //! start const iterator
+    const_iterator cbegin() const {return const_iterator(*this,0);}
+    //! end const iterator
+    const_iterator cend() const {return const_iterator(*this,size());}
+    //! reverse start iterator
+    reverse_iterator rbegin() {return reverse_iterator(end());}
+    //! reverse end iterator
+    reverse_iterator rend() {return reverse_iterator(begin());}
+    //! reverse start const iterator
+    const_reverse_iterator rbegin() const {return const_reverse_iterator(end());}
+    //! reverse end const iterator
+    const_reverse_iterator rend() const {return const_reverse_iterator(begin());}
+    //! reverse start const iterator
+    const_reverse_iterator crbegin() const {return const_reverse_iterator(end());}
+    //! reverse end const iterator
+    const_reverse_iterator crend() const {return const_reverse_iterator(begin());}
+    //! the first item
+    reference front() {
+        __TBB_ASSERT( size()>0, NULL);
+        return static_cast<T*>(my_segment[0].array)[0];
+    }
+    //! the first item const
+    const_reference front() const {
+        __TBB_ASSERT( size()>0, NULL);
+        return static_cast<const T*>(my_segment[0].array)[0];
+    }
+    //! the last item
+    reference back() {
+        __TBB_ASSERT( size()>0, NULL);
+        return internal_subscript( size()-1 );
+    }
+    //! the last item const
+    const_reference back() const {
+        __TBB_ASSERT( size()>0, NULL);
+        return internal_subscript( size()-1 );
+    }
+    //! return allocator object
+    allocator_type get_allocator() const { return this->my_allocator; }
+
+    //! assign n items by copying t item
+    void assign(size_type n, const_reference t) {
+        clear();
+        internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
+    }
+
+    //! assign range [first, last)
+    template<class I>
+    void assign(I first, I last) {
+        clear(); internal_assign_range( first, last, static_cast<is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
+    }
+
+    //! swap two instances
+    void swap(concurrent_vector &vector) {
+        if( this != &vector ) {
+            concurrent_vector_base_v3::internal_swap(static_cast<concurrent_vector_base_v3&>(vector));
+            std::swap(this->my_allocator, vector.my_allocator);
+        }
+    }
+
+    //! Clear container while keeping memory allocated.
+    /** To free up the memory, use in conjunction with method compact(). Not thread safe **/
+    void clear() {
+        internal_clear(&destroy_array);
+    }
+
+    //! Clear and destroy vector.
+    ~concurrent_vector() {
+        segment_t *table = my_segment;
+        internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+        // base class destructor call should be then
+    }
+
+    const internal::concurrent_vector_base_v3 &internal_vector_base() const { return *this; }
+private:
+    //! Allocate k items
+    static void *internal_allocator(internal::concurrent_vector_base_v3 &vb, size_t k) {
+        return static_cast<concurrent_vector<T, A>&>(vb).my_allocator.allocate(k);
+    }
+    //! Free k segments from table
+    void internal_free_segments(void *table[], segment_index_t k, segment_index_t first_block);
+
+    //! Get reference to element at given index.
+    T& internal_subscript( size_type index ) const;
+
+    //! Get reference to element at given index with errors checks
+    T& internal_subscript_with_exceptions( size_type index ) const;
+
+    //! assign n items by copying t
+    void internal_assign_n(size_type n, const_pointer p) {
+        internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(p), &destroy_array, p? &initialize_array_by : &initialize_array );
+    }
+
+    //! helper class
+    template<bool B> class is_integer_tag;
+
+    //! assign integer items by copying when arguments are treated as iterators. See C++ Standard 2003 23.1.1p9
+    template<class I>
+    void internal_assign_range(I first, I last, is_integer_tag<true> *) {
+        internal_assign_n(static_cast<size_type>(first), &static_cast<T&>(last));
+    }
+    //! inline proxy assign by iterators
+    template<class I>
+    void internal_assign_range(I first, I last, is_integer_tag<false> *) {
+        internal_assign_iterators(first, last);
+    }
+    //! assign by iterators
+    template<class I>
+    void internal_assign_iterators(I first, I last);
+
+    //! Construct n instances of T, starting at "begin".
+    static void __TBB_EXPORTED_FUNC initialize_array( void* begin, const void*, size_type n );
+
+    //! Construct n instances of T, starting at "begin".
+    static void __TBB_EXPORTED_FUNC initialize_array_by( void* begin, const void* src, size_type n );
+
+    //! Construct n instances of T, starting at "begin".
+    static void __TBB_EXPORTED_FUNC copy_array( void* dst, const void* src, size_type n );
+
+    //! Assign n instances of T, starting at "begin".
+    static void __TBB_EXPORTED_FUNC assign_array( void* dst, const void* src, size_type n );
+
+    //! Destroy n instances of T, starting at "begin".
+    static void __TBB_EXPORTED_FUNC destroy_array( void* begin, size_type n );
+
+    //! Exception-aware helper class for filling a segment by exception-danger operators of user class
+    class internal_loop_guide : internal::no_copy {
+    public:
+        const pointer array;
+        const size_type n;
+        size_type i;
+        internal_loop_guide(size_type ntrials, void *ptr)
+            : array(static_cast<pointer>(ptr)), n(ntrials), i(0) {}
+        void init() {   for(; i < n; ++i) new( &array[i] ) T(); }
+        void init(const void *src) { for(; i < n; ++i) new( &array[i] ) T(*static_cast<const T*>(src)); }
+        void copy(const void *src) { for(; i < n; ++i) new( &array[i] ) T(static_cast<const T*>(src)[i]); }
+        void assign(const void *src) { for(; i < n; ++i) array[i] = static_cast<const T*>(src)[i]; }
+        template<class I> void iterate(I &src) { for(; i < n; ++i, ++src) new( &array[i] ) T( *src ); }
+        ~internal_loop_guide() {
+            if(i < n) // if exception raised, do zerroing on the rest of items
+                std::memset(array+i, 0, (n-i)*sizeof(value_type));
+        }
+    };
+};
+
+template<typename T, class A>
+void concurrent_vector<T, A>::shrink_to_fit() {
+    internal_segments_table old;
+    try {
+        if( internal_compact( sizeof(T), &old, &destroy_array, &copy_array ) )
+            internal_free_segments( old.table, pointers_per_long_table, old.first_block ); // free joined and unnecessary segments
+    } catch(...) {
+        if( old.first_block ) // free segment allocated for compacting. Only for support of exceptions in ctor of user T[ype]
+            internal_free_segments( old.table, 1, old.first_block );
+        throw;
+    }
+}
+
+template<typename T, class A>
+void concurrent_vector<T, A>::internal_free_segments(void *table[], segment_index_t k, segment_index_t first_block) {
+    // Free the arrays
+    while( k > first_block ) {
+        --k;
+        T* array = static_cast<T*>(table[k]);
+        table[k] = NULL;
+        if( array > __TBB_BAD_ALLOC ) // check for correct segment pointer
+            this->my_allocator.deallocate( array, segment_size(k) );
+    }
+    T* array = static_cast<T*>(table[0]);
+    if( array > __TBB_BAD_ALLOC ) {
+        __TBB_ASSERT( first_block > 0, NULL );
+        while(k > 0) table[--k] = NULL;
+        this->my_allocator.deallocate( array, segment_size(first_block) );
+    }
+}
+
+template<typename T, class A>
+T& concurrent_vector<T, A>::internal_subscript( size_type index ) const {
+    __TBB_ASSERT( index < my_early_size, "index out of bounds" );
+    size_type j = index;
+    segment_index_t k = segment_base_index_of( j );
+    __TBB_ASSERT( my_segment != (segment_t*)my_storage || k < pointers_per_short_table, "index is being allocated" );
+    // no need in __TBB_load_with_acquire since thread works in own space or gets 
+#if TBB_USE_THREADING_TOOLS
+    T* array = static_cast<T*>( tbb::internal::itt_load_pointer_v3(&my_segment[k].array));
+#else
+    T* array = static_cast<T*>(my_segment[k].array);
+#endif /* TBB_USE_THREADING_TOOLS */
+    __TBB_ASSERT( array != __TBB_BAD_ALLOC, "the instance is broken by bad allocation. Use at() instead" );
+    __TBB_ASSERT( array, "index is being allocated" );
+    return array[j];
+}
+
+template<typename T, class A>
+T& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index ) const {
+    if( index >= my_early_size )
+        internal_throw_exception(0); // throw std::out_of_range
+    size_type j = index;
+    segment_index_t k = segment_base_index_of( j );
+    if( my_segment == (segment_t*)my_storage && k >= pointers_per_short_table )
+        internal_throw_exception(1); // throw std::range_error
+    void *array = my_segment[k].array; // no need in __TBB_load_with_acquire
+    if( array <= __TBB_BAD_ALLOC ) // check for correct segment pointer
+        internal_throw_exception(2); // throw std::range_error
+    return static_cast<T*>(array)[j];
+}
+
+template<typename T, class A> template<class I>
+void concurrent_vector<T, A>::internal_assign_iterators(I first, I last) {
+    __TBB_ASSERT(my_early_size == 0, NULL);
+    size_type n = std::distance(first, last);
+    if( !n ) return;
+    internal_reserve(n, sizeof(T), max_size());
+    my_early_size = n;
+    segment_index_t k = 0;
+    size_type sz = segment_size( my_first_block );
+    while( sz < n ) {
+        internal_loop_guide loop(sz, my_segment[k].array);
+        loop.iterate(first);
+        n -= sz;
+        if( !k ) k = my_first_block;
+        else { ++k; sz <<= 1; }
+    }
+    internal_loop_guide loop(n, my_segment[k].array);
+    loop.iterate(first);
+}
+
+template<typename T, class A>
+void concurrent_vector<T, A>::initialize_array( void* begin, const void *, size_type n ) {
+    internal_loop_guide loop(n, begin); loop.init();
+}
+
+template<typename T, class A>
+void concurrent_vector<T, A>::initialize_array_by( void* begin, const void *src, size_type n ) {
+    internal_loop_guide loop(n, begin); loop.init(src);
+}
+
+template<typename T, class A>
+void concurrent_vector<T, A>::copy_array( void* dst, const void* src, size_type n ) {
+    internal_loop_guide loop(n, dst); loop.copy(src);
+}
+
+template<typename T, class A>
+void concurrent_vector<T, A>::assign_array( void* dst, const void* src, size_type n ) {
+    internal_loop_guide loop(n, dst); loop.assign(src);
+}
+
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) 
+    // Workaround for overzealous compiler warning
+    #pragma warning (push)
+    #pragma warning (disable: 4189)
+#endif
+template<typename T, class A>
+void concurrent_vector<T, A>::destroy_array( void* begin, size_type n ) {
+    T* array = static_cast<T*>(begin);
+    for( size_type j=n; j>0; --j )
+        array[j-1].~T(); // destructors are supposed to not throw any exceptions
+}
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) 
+    #pragma warning (pop)
+#endif // warning 4189 is back 
+
+// concurrent_vector's template functions
+template<typename T, class A1, class A2>
+inline bool operator==(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b) {
+    // Simply:    return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin());
+    if(a.size() != b.size()) return false;
+    typename concurrent_vector<T, A1>::const_iterator i(a.begin());
+    typename concurrent_vector<T, A2>::const_iterator j(b.begin());
+    for(; i != a.end(); ++i, ++j)
+        if( !(*i == *j) ) return false;
+    return true;
+}
+
+template<typename T, class A1, class A2>
+inline bool operator!=(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)
+{    return !(a == b); }
+
+template<typename T, class A1, class A2>
+inline bool operator<(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)
+{    return (std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())); }
+
+template<typename T, class A1, class A2>
+inline bool operator>(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)
+{    return b < a; }
+
+template<typename T, class A1, class A2>
+inline bool operator<=(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)
+{    return !(b < a); }
+
+template<typename T, class A1, class A2>
+inline bool operator>=(const concurrent_vector<T, A1> &a, const concurrent_vector<T, A2> &b)
+{    return !(a < b); }
+
+template<typename T, class A>
+inline void swap(concurrent_vector<T, A> &a, concurrent_vector<T, A> &b)
+{    a.swap( b ); }
+
+} // namespace tbb
+
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)
+    #pragma warning (pop)
+#endif // warning 4267 is back
+
+#endif /* __TBB_concurrent_vector_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/enumerable_thread_specific.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/enumerable_thread_specific.h
new file mode 100644 (file)
index 0000000..290435c
--- /dev/null
@@ -0,0 +1,878 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_enumerable_thread_specific_H
+#define __TBB_enumerable_thread_specific_H
+
+#include "concurrent_vector.h"
+#include "tbb_thread.h"
+#include "concurrent_hash_map.h"
+#include "cache_aligned_allocator.h"
+#if __SUNPRO_CC
+#include <string.h>  // for memcpy
+#endif
+
+#if _WIN32||_WIN64
+#include <windows.h>
+#else
+#include <pthread.h>
+#endif
+
+namespace tbb {
+
+    //! enum for selecting between single key and key-per-instance versions
+    enum ets_key_usage_type { ets_key_per_instance, ets_no_key };
+
+    //! @cond
+    namespace internal {
+        
+        //! Random access iterator for traversing the thread local copies.
+        template< typename Container, typename Value >
+        class enumerable_thread_specific_iterator 
+#if defined(_WIN64) && defined(_MSC_VER) 
+            // Ensure that Microsoft's internal template function _Val_type works correctly.
+            : public std::iterator<std::random_access_iterator_tag,Value>
+#endif /* defined(_WIN64) && defined(_MSC_VER) */
+        {
+            //! current position in the concurrent_vector 
+        
+            Container *my_container;
+            typename Container::size_type my_index;
+            mutable Value *my_value;
+        
+            template<typename C, typename T>
+            friend enumerable_thread_specific_iterator<C,T> operator+( ptrdiff_t offset, 
+                                                                       const enumerable_thread_specific_iterator<C,T>& v );
+        
+            template<typename C, typename T, typename U>
+            friend bool operator==( const enumerable_thread_specific_iterator<C,T>& i, 
+                                    const enumerable_thread_specific_iterator<C,U>& j );
+        
+            template<typename C, typename T, typename U>
+            friend bool operator<( const enumerable_thread_specific_iterator<C,T>& i, 
+                                   const enumerable_thread_specific_iterator<C,U>& j );
+        
+            template<typename C, typename T, typename U>
+            friend ptrdiff_t operator-( const enumerable_thread_specific_iterator<C,T>& i, const enumerable_thread_specific_iterator<C,U>& j );
+            
+            template<typename C, typename U> 
+            friend class enumerable_thread_specific_iterator;
+        
+            public:
+        
+            enumerable_thread_specific_iterator( const Container &container, typename Container::size_type index ) : 
+                my_container(&const_cast<Container &>(container)), my_index(index), my_value(NULL) {}
+        
+            //! Default constructor
+            enumerable_thread_specific_iterator() : my_container(NULL), my_index(0), my_value(NULL) {}
+        
+            template<typename U>
+            enumerable_thread_specific_iterator( const enumerable_thread_specific_iterator<Container, U>& other ) :
+                    my_container( other.my_container ), my_index( other.my_index), my_value( const_cast<Value *>(other.my_value) ) {}
+        
+            enumerable_thread_specific_iterator operator+( ptrdiff_t offset ) const {
+                return enumerable_thread_specific_iterator(*my_container, my_index + offset);
+            }
+        
+            enumerable_thread_specific_iterator &operator+=( ptrdiff_t offset ) {
+                my_index += offset;
+                my_value = NULL;
+                return *this;
+            }
+        
+            enumerable_thread_specific_iterator operator-( ptrdiff_t offset ) const {
+                return enumerable_thread_specific_iterator( *my_container, my_index-offset );
+            }
+        
+            enumerable_thread_specific_iterator &operator-=( ptrdiff_t offset ) {
+                my_index -= offset;
+                my_value = NULL;
+                return *this;
+            }
+        
+            Value& operator*() const {
+                Value* value = my_value;
+                if( !value ) {
+                    value = my_value = &(*my_container)[my_index].value;
+                }
+                __TBB_ASSERT( value==&(*my_container)[my_index].value, "corrupt cache" );
+                return *value;
+            }
+        
+            Value& operator[]( ptrdiff_t k ) const {
+               return (*my_container)[my_index + k].value;
+            }
+        
+            Value* operator->() const {return &operator*();}
+        
+            enumerable_thread_specific_iterator& operator++() {
+                ++my_index;
+                my_value = NULL;
+                return *this;
+            }
+        
+            enumerable_thread_specific_iterator& operator--() {
+                --my_index;
+                my_value = NULL;
+                return *this;
+            }
+        
+            //! Post increment
+            enumerable_thread_specific_iterator operator++(int) {
+                enumerable_thread_specific_iterator result = *this;
+                ++my_index;
+                my_value = NULL;
+                return result;
+            }
+        
+            //! Post decrement
+            enumerable_thread_specific_iterator operator--(int) {
+                enumerable_thread_specific_iterator result = *this;
+                --my_index;
+                my_value = NULL;
+                return result;
+            }
+        
+            // STL support
+            typedef ptrdiff_t difference_type;
+            typedef Value value_type;
+            typedef Value* pointer;
+            typedef Value& reference;
+            typedef std::random_access_iterator_tag iterator_category;
+        };
+        
+        template<typename Container, typename T>
+        enumerable_thread_specific_iterator<Container,T> operator+( ptrdiff_t offset, 
+                                                                    const enumerable_thread_specific_iterator<Container,T>& v ) {
+            return enumerable_thread_specific_iterator<Container,T>( v.my_container, v.my_index + offset );
+        }
+        
+        template<typename Container, typename T, typename U>
+        bool operator==( const enumerable_thread_specific_iterator<Container,T>& i, 
+                         const enumerable_thread_specific_iterator<Container,U>& j ) {
+            return i.my_index==j.my_index && i.my_container == j.my_container;
+        }
+        
+        template<typename Container, typename T, typename U>
+        bool operator!=( const enumerable_thread_specific_iterator<Container,T>& i, 
+                         const enumerable_thread_specific_iterator<Container,U>& j ) {
+            return !(i==j);
+        }
+        
+        template<typename Container, typename T, typename U>
+        bool operator<( const enumerable_thread_specific_iterator<Container,T>& i, 
+                        const enumerable_thread_specific_iterator<Container,U>& j ) {
+            return i.my_index<j.my_index;
+        }
+        
+        template<typename Container, typename T, typename U>
+        bool operator>( const enumerable_thread_specific_iterator<Container,T>& i, 
+                        const enumerable_thread_specific_iterator<Container,U>& j ) {
+            return j<i;
+        }
+        
+        template<typename Container, typename T, typename U>
+        bool operator>=( const enumerable_thread_specific_iterator<Container,T>& i, 
+                         const enumerable_thread_specific_iterator<Container,U>& j ) {
+            return !(i<j);
+        }
+        
+        template<typename Container, typename T, typename U>
+        bool operator<=( const enumerable_thread_specific_iterator<Container,T>& i, 
+                         const enumerable_thread_specific_iterator<Container,U>& j ) {
+            return !(j<i);
+        }
+        
+        template<typename Container, typename T, typename U>
+        ptrdiff_t operator-( const enumerable_thread_specific_iterator<Container,T>& i, 
+                             const enumerable_thread_specific_iterator<Container,U>& j ) {
+            return i.my_index-j.my_index;
+        }
+
+    template<typename SegmentedContainer, typename Value >
+        class segmented_iterator
+#if defined(_WIN64) && defined(_MSC_VER)
+        : public std::iterator<std::input_iterator_tag, Value>
+#endif
+        {
+            template<typename C, typename T, typename U>
+            friend bool operator==(const segmented_iterator<C,T>& i, const segmented_iterator<C,U>& j);
+
+            template<typename C, typename T, typename U>
+            friend bool operator!=(const segmented_iterator<C,T>& i, const segmented_iterator<C,U>& j);
+            
+            template<typename C, typename U> 
+            friend class segmented_iterator;
+
+            public:
+
+                segmented_iterator() {my_segcont = NULL;}
+
+                segmented_iterator( const SegmentedContainer& _segmented_container ) : 
+                    my_segcont(const_cast<SegmentedContainer*>(&_segmented_container)),
+                    outer_iter(my_segcont->end()) { }
+
+                ~segmented_iterator() {}
+
+                typedef typename SegmentedContainer::iterator outer_iterator;
+                typedef typename SegmentedContainer::value_type InnerContainer;
+                typedef typename InnerContainer::iterator inner_iterator;
+
+                // STL support
+                typedef ptrdiff_t difference_type;
+                typedef Value value_type;
+                typedef typename SegmentedContainer::size_type size_type;
+                typedef Value* pointer;
+                typedef Value& reference;
+                typedef std::input_iterator_tag iterator_category;
+
+                // Copy Constructor
+                template<typename U>
+                segmented_iterator(const segmented_iterator<SegmentedContainer, U>& other) :
+                    my_segcont(other.my_segcont),
+                    outer_iter(other.outer_iter),
+                    // can we assign a default-constructed iterator to inner if we're at the end?
+                    inner_iter(other.inner_iter)
+                {}
+
+                // assignment
+                template<typename U>
+                segmented_iterator& operator=( const segmented_iterator<SegmentedContainer, U>& other) {
+                    if(this != &other) {
+                        my_segcont = other.my_segcont;
+                        outer_iter = other.outer_iter;
+                        if(outer_iter != my_segcont->end()) inner_iter = other.inner_iter;
+                    }
+                    return *this;
+                }
+
+                // allow assignment of outer iterator to segmented iterator.  Once it is
+                // assigned, move forward until a non-empty inner container is found or
+                // the end of the outer container is reached.
+                segmented_iterator& operator=(const outer_iterator& new_outer_iter) {
+                    __TBB_ASSERT(my_segcont != NULL, NULL);
+                    // check that this iterator points to something inside the segmented container
+                    for(outer_iter = new_outer_iter ;outer_iter!=my_segcont->end(); ++outer_iter) {
+                        if( !outer_iter->empty() ) {
+                            inner_iter = outer_iter->begin();
+                            break;
+                        }
+                    }
+                    return *this;
+                }
+
+                // pre-increment
+                segmented_iterator& operator++() {
+                    advance_me();
+                    return *this;
+                }
+
+                // post-increment
+                segmented_iterator operator++(int) {
+                    segmented_iterator tmp = *this;
+                    operator++();
+                    return tmp;
+                }
+
+                bool operator==(const outer_iterator& other_outer) const {
+                    __TBB_ASSERT(my_segcont != NULL, NULL);
+                    return (outer_iter == other_outer &&
+                            (outer_iter == my_segcont->end() || inner_iter == outer_iter->begin()));
+                }
+
+                bool operator!=(const outer_iterator& other_outer) const {
+                    return !operator==(other_outer);
+
+                }
+
+                // (i)* RHS
+                reference operator*() const {
+                    __TBB_ASSERT(my_segcont != NULL, NULL);
+                    __TBB_ASSERT(outer_iter != my_segcont->end(), "Dereferencing a pointer at end of container");
+                    __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); // should never happen
+                    return *inner_iter;
+                }
+
+                // i->
+                pointer operator->() const { return &operator*();}
+
+            private:
+                SegmentedContainer*             my_segcont;
+                outer_iterator outer_iter;
+                inner_iterator inner_iter;
+
+                void advance_me() {
+                    __TBB_ASSERT(my_segcont != NULL, NULL);
+                    __TBB_ASSERT(outer_iter != my_segcont->end(), NULL); // not true if there are no inner containers
+                    __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); // not true if the inner containers are all empty.
+                    ++inner_iter;
+                    while(inner_iter == outer_iter->end() && ++outer_iter != my_segcont->end()) {
+                        inner_iter = outer_iter->begin();
+                    }
+                }
+        };    // segmented_iterator
+
+        template<typename SegmentedContainer, typename T, typename U>
+        bool operator==( const segmented_iterator<SegmentedContainer,T>& i, 
+                         const segmented_iterator<SegmentedContainer,U>& j ) {
+            if(i.my_segcont != j.my_segcont) return false;
+            if(i.my_segcont == NULL) return true;
+            if(i.outer_iter != j.outer_iter) return false;
+            if(i.outer_iter == i.my_segcont->end()) return true;
+            return i.inner_iter == j.inner_iter;
+        }
+
+        // !=
+        template<typename SegmentedContainer, typename T, typename U>
+        bool operator!=( const segmented_iterator<SegmentedContainer,T>& i, 
+                         const segmented_iterator<SegmentedContainer,U>& j ) {
+            return !(i==j);
+        }
+
+        // empty template for following specializations
+        template<ets_key_usage_type et>
+        struct tls_manager {};
+        
+        //! Struct that doesn't use a key
+        template <>
+        struct tls_manager<ets_no_key> {
+            typedef size_t tls_key_t;
+            static inline void create_key( tls_key_t &) { }
+            static inline void destroy_key( tls_key_t & ) { }
+            static inline void set_tls( tls_key_t &, void *  ) { }
+            static inline void * get_tls( tls_key_t & ) { return (size_t)0; }
+        };
+
+        //! Struct to use native TLS support directly
+        template <>
+        struct tls_manager <ets_key_per_instance> {
+#if _WIN32||_WIN64
+            typedef DWORD tls_key_t;
+            static inline void create_key( tls_key_t &k) { k = TlsAlloc(); }
+            static inline void destroy_key( tls_key_t &k) { TlsFree(k); }
+            static inline void set_tls( tls_key_t &k, void * value) { TlsSetValue(k, (LPVOID)value); }
+            static inline void * get_tls( tls_key_t &k ) { return (void *)TlsGetValue(k); }
+#else
+            typedef pthread_key_t tls_key_t;
+            static inline void create_key( tls_key_t &k) { pthread_key_create(&k, NULL); }
+            static inline void destroy_key( tls_key_t &k) { pthread_key_delete(k); }
+            static inline void set_tls( tls_key_t &k, void * value) { pthread_setspecific(k, value); }
+            static inline void * get_tls( tls_key_t &k ) { return pthread_getspecific(k); }
+#endif
+        };
+
+        class thread_hash_compare {
+        public:
+            // using hack suggested by Arch to get value for thread id for hashing...
+#if _WIN32||_WIN64
+            typedef DWORD thread_key;
+#else
+            typedef pthread_t thread_key;
+#endif
+            static thread_key my_thread_key(const tbb_thread::id j) {
+                thread_key key_val;
+                memcpy(&key_val, &j, sizeof(thread_key));
+                return key_val;
+            }
+
+            bool equal( const thread_key j, const thread_key k) const {
+                return j == k;
+            }
+            unsigned long hash(const thread_key k) const {
+                return (unsigned long)k;
+            }
+        };
+
+        // storage for initialization function pointer
+        template<typename T>
+        struct callback_base {
+            virtual T apply( ) = 0;
+            virtual void destroy( ) = 0;
+            // need to be able to create copies of callback_base for copy constructor
+            virtual callback_base* make_copy() = 0;
+            // need virtual destructor to satisfy GCC compiler warning
+            virtual ~callback_base() { }
+        };
+
+        template <typename T, typename Functor>
+        struct callback_leaf : public callback_base<T> {
+            typedef Functor my_callback_type;
+            typedef callback_leaf<T,Functor> my_type;
+            typedef my_type* callback_pointer;
+            typedef typename tbb::tbb_allocator<my_type> my_allocator_type;
+            Functor f;
+            callback_leaf( const Functor& f_) : f(f_) {
+            }
+
+            static callback_pointer new_callback(const Functor& f_ ) {
+                void* new_void = my_allocator_type().allocate(1);
+                callback_pointer new_cb = new (new_void) callback_leaf<T,Functor>(f_); // placement new
+                return new_cb;
+            }
+
+            /* override */ callback_pointer make_copy() {
+                return new_callback( f );
+            }
+
+             /* override */ void destroy( ) {
+                 callback_pointer my_ptr = this;
+                 my_allocator_type().destroy(my_ptr);
+                 my_allocator_type().deallocate(my_ptr,1);
+             }
+            /* override */ T apply() { return f(); }  // does copy construction of returned value.
+        };
+
+        template<typename Key, typename T, typename HC, typename A>
+        class ets_concurrent_hash_map : public tbb::concurrent_hash_map<Key, T, HC, A> {
+        public:
+            typedef tbb::concurrent_hash_map<Key, T, HC, A> base_type;
+            typedef typename base_type::const_pointer const_pointer;
+            typedef typename base_type::key_type key_type;
+            const_pointer find( const key_type &k ) { return base_type::find( k ); } // make public
+        };
+    
+    } // namespace internal
+    //! @endcond
+
+    //! The thread local class template
+    template <typename T, 
+              typename Allocator=cache_aligned_allocator<T>, 
+              ets_key_usage_type ETS_key_type=ets_no_key > 
+    class enumerable_thread_specific { 
+
+        template<typename U, typename A, ets_key_usage_type C> friend class enumerable_thread_specific;
+    
+        typedef internal::tls_manager< ETS_key_type > my_tls_manager;
+
+        //! The padded elements; padded to avoid false sharing
+        template<typename U>
+        struct padded_element {
+            U value;
+            char padding[ ( (sizeof(U) - 1) / internal::NFS_MaxLineSize + 1 ) * internal::NFS_MaxLineSize - sizeof(U) ];
+            padded_element(const U &v) : value(v) {}
+            padded_element() {}
+        };
+    
+        //! A generic range, used to create range objects from the iterators
+        template<typename I>
+        class generic_range_type: public blocked_range<I> {
+        public:
+            typedef T value_type;
+            typedef T& reference;
+            typedef const T& const_reference;
+            typedef I iterator;
+            typedef ptrdiff_t difference_type;
+            generic_range_type( I begin_, I end_, size_t grainsize = 1) : blocked_range<I>(begin_,end_,grainsize) {} 
+            template<typename U>
+            generic_range_type( const generic_range_type<U>& r) : blocked_range<I>(r.begin(),r.end(),r.grainsize()) {} 
+            generic_range_type( generic_range_type& r, split ) : blocked_range<I>(r,split()) {}
+        };
+    
+        typedef typename Allocator::template rebind< padded_element<T> >::other padded_allocator_type;
+        typedef tbb::concurrent_vector< padded_element<T>, padded_allocator_type > internal_collection_type;
+        typedef typename internal_collection_type::size_type hash_table_index_type; // storing array indices rather than iterators to simplify
+        // copying the hash table that correlates thread IDs with concurrent vector elements.
+        
+        typedef typename Allocator::template rebind< std::pair< typename internal::thread_hash_compare::thread_key, hash_table_index_type > >::other hash_element_allocator;
+        typedef internal::ets_concurrent_hash_map< typename internal::thread_hash_compare::thread_key, hash_table_index_type, internal::thread_hash_compare, hash_element_allocator > thread_to_index_type;
+
+        typename my_tls_manager::tls_key_t my_key;
+
+        void reset_key() {
+            my_tls_manager::destroy_key(my_key);
+            my_tls_manager::create_key(my_key); 
+        }
+
+        internal::callback_base<T> *my_finit_callback;
+
+        // need to use a pointed-to exemplar because T may not be assignable.
+        // using tbb_allocator instead of padded_element_allocator because we may be
+        // copying an exemplar from one instantiation of ETS to another with a different
+        // allocator.
+        typedef typename tbb::tbb_allocator<padded_element<T> > exemplar_allocator_type;
+        static padded_element<T> * create_exemplar(const T& my_value) {
+            padded_element<T> *new_exemplar = 0;
+            // void *new_space = padded_allocator_type().allocate(1);
+            void *new_space = exemplar_allocator_type().allocate(1);
+            new_exemplar = new(new_space) padded_element<T>(my_value);
+            return new_exemplar;
+        }
+
+        static padded_element<T> *create_exemplar( ) {
+            // void *new_space = padded_allocator_type().allocate(1);
+            void *new_space = exemplar_allocator_type().allocate(1);
+            padded_element<T> *new_exemplar = new(new_space) padded_element<T>( );
+            return new_exemplar;
+        }
+
+        static void free_exemplar(padded_element<T> *my_ptr) {
+            // padded_allocator_type().destroy(my_ptr);
+            // padded_allocator_type().deallocate(my_ptr,1);
+            exemplar_allocator_type().destroy(my_ptr);
+            exemplar_allocator_type().deallocate(my_ptr,1);
+        }
+
+        padded_element<T>* my_exemplar_ptr;
+
+        internal_collection_type my_locals;
+        thread_to_index_type my_hash_tbl;
+    
+    public:
+    
+        //! Basic types
+        typedef Allocator allocator_type;
+        typedef T value_type;
+        typedef T& reference;
+        typedef const T& const_reference;
+        typedef T* pointer;
+        typedef const T* const_pointer;
+        typedef typename internal_collection_type::size_type size_type;
+        typedef typename internal_collection_type::difference_type difference_type;
+    
+        // Iterator types
+        typedef typename internal::enumerable_thread_specific_iterator< internal_collection_type, value_type > iterator;
+        typedef typename internal::enumerable_thread_specific_iterator< internal_collection_type, const value_type > const_iterator;
+
+        // Parallel range types
+        typedef generic_range_type< iterator > range_type;
+        typedef generic_range_type< const_iterator > const_range_type;
+    
+        //! Default constructor, which leads to default construction of local copies
+        enumerable_thread_specific() : my_finit_callback(0) { 
+            my_exemplar_ptr = create_exemplar();
+            my_tls_manager::create_key(my_key); 
+        }
+
+        //! construction with initializer method
+        // Finit should be a function taking 0 parameters and returning a T
+        template <typename Finit>
+        enumerable_thread_specific( Finit _finit )
+        {
+            my_finit_callback = internal::callback_leaf<T,Finit>::new_callback( _finit );
+            my_tls_manager::create_key(my_key);
+            my_exemplar_ptr = 0; // don't need exemplar if function is provided
+        }
+    
+        //! Constuction with exemplar, which leads to copy construction of local copies
+        enumerable_thread_specific(const T &_exemplar) : my_finit_callback(0) {
+            my_exemplar_ptr = create_exemplar(_exemplar);
+            my_tls_manager::create_key(my_key); 
+        }
+    
+        //! Destructor
+        ~enumerable_thread_specific() { 
+            my_tls_manager::destroy_key(my_key); 
+            if(my_finit_callback) {
+                my_finit_callback->destroy();
+            }
+            if(my_exemplar_ptr)
+            {
+                free_exemplar(my_exemplar_ptr);
+            }
+        }
+      
+        //! returns reference to local, discarding exists
+        reference local() {
+            bool exists;
+            return local(exists);
+        }
+
+        //! Returns reference to calling thread's local copy, creating one if necessary
+        reference local(bool& exists)  {
+            if ( pointer local_ptr = static_cast<pointer>(my_tls_manager::get_tls(my_key)) ) {
+                exists = true;
+               return *local_ptr;
+            }
+            hash_table_index_type local_index;
+            typename internal::thread_hash_compare::thread_key my_t_key = internal::thread_hash_compare::my_thread_key(tbb::this_tbb_thread::get_id());
+            {
+                typename thread_to_index_type::const_pointer my_existing_entry;
+                my_existing_entry = my_hash_tbl.find(my_t_key);
+                if(my_existing_entry) {
+                    exists = true;
+                    local_index = my_existing_entry->second;
+                }
+                else {
+
+                    // see if the table entry can be found by accessor
+                    typename thread_to_index_type::accessor a;
+                    if(!my_hash_tbl.insert(a, my_t_key)) {
+                        exists = true;
+                        local_index = a->second;
+                    }
+                    else {
+                        // create new entry
+                        exists = false;
+                        if(my_finit_callback) {
+                            // convert iterator to array index
+#if TBB_DEPRECATED
+                            local_index = my_locals.push_back(my_finit_callback->apply());
+#else
+                            local_index = my_locals.push_back(my_finit_callback->apply()) - my_locals.begin();
+#endif
+                        }
+                        else {
+                            // convert iterator to array index
+#if TBB_DEPRECATED
+                            local_index = my_locals.push_back(*my_exemplar_ptr);
+#else
+                            local_index = my_locals.push_back(*my_exemplar_ptr) - my_locals.begin();
+#endif
+                        }
+                        // insert into hash table
+                        a->second = local_index;
+                    }
+                }
+            }
+
+            reference local_ref = (my_locals[local_index].value);
+            my_tls_manager::set_tls( my_key, static_cast<void *>(&local_ref) );
+            return local_ref;
+        } // local
+
+        //! Get the number of local copies
+        size_type size() const { return my_locals.size(); }
+    
+        //! true if there have been no local copies created
+        bool empty() const { return my_locals.empty(); }
+    
+        //! begin iterator
+        iterator begin() { return iterator( my_locals, 0 ); }
+        //! end iterator
+        iterator end() { return iterator(my_locals, my_locals.size() ); }
+    
+        //! begin const iterator
+        const_iterator begin() const { return const_iterator(my_locals, 0); }
+    
+        //! end const iterator
+        const_iterator end() const { return const_iterator(my_locals, my_locals.size()); }
+
+        //! Get range for parallel algorithms
+        range_type range( size_t grainsize=1 ) { return range_type( begin(), end(), grainsize ); } 
+        
+        //! Get const range for parallel algorithms
+        const_range_type range( size_t grainsize=1 ) const { return const_range_type( begin(), end(), grainsize ); }
+    
+        //! Destroys local copies
+        void clear() {
+            my_locals.clear();
+            my_hash_tbl.clear();
+            reset_key();
+            // callback is not destroyed
+            // exemplar is not destroyed
+        }
+
+        // STL container methods
+        // copy constructor
+
+    private:
+
+        template<typename U, typename A2, ets_key_usage_type C2>
+        void
+        internal_copy_construct( const enumerable_thread_specific<U, A2, C2>& other) {
+            typedef typename tbb::enumerable_thread_specific<U, A2, C2> other_type;
+            for(typename other_type::const_iterator ci = other.begin(); ci != other.end(); ++ci) {
+                my_locals.push_back(*ci);
+            }
+            if(other.my_finit_callback) {
+                my_finit_callback = other.my_finit_callback->make_copy();
+            }
+            else {
+                my_finit_callback = 0;
+            }
+            if(other.my_exemplar_ptr) {
+                my_exemplar_ptr = create_exemplar(other.my_exemplar_ptr->value);
+            }
+            else {
+                my_exemplar_ptr = 0;
+            }
+            my_tls_manager::create_key(my_key);
+        }
+
+    public:
+
+        template<typename U, typename Alloc, ets_key_usage_type Cachetype>
+        enumerable_thread_specific( const enumerable_thread_specific<U, Alloc, Cachetype>& other ) : my_hash_tbl(other.my_hash_tbl) 
+        {   // Have to do push_back because the contained elements are not necessarily assignable.
+            internal_copy_construct(other);
+        }
+
+        // non-templatized version
+        enumerable_thread_specific( const enumerable_thread_specific& other ) : my_hash_tbl(other.my_hash_tbl) 
+        {
+            internal_copy_construct(other);
+        }
+
+    private:
+
+        template<typename U, typename A2, ets_key_usage_type C2>
+        enumerable_thread_specific &
+        internal_assign(const enumerable_thread_specific<U, A2, C2>& other) {
+            typedef typename tbb::enumerable_thread_specific<U, A2, C2> other_type;
+            if(static_cast<void *>( this ) != static_cast<const void *>( &other )) {
+                this->clear(); // resets TLS key
+                my_hash_tbl = other.my_hash_tbl;
+                // cannot use assign because T may not be assignable.
+                for(typename other_type::const_iterator ci = other.begin(); ci != other.end(); ++ci) {
+                    my_locals.push_back(*ci);
+                }
+
+                if(my_finit_callback) {
+                    my_finit_callback->destroy();
+                    my_finit_callback = 0;
+                }
+                if(my_exemplar_ptr) {
+                    free_exemplar(my_exemplar_ptr);
+                    my_exemplar_ptr = 0;
+                }
+                if(other.my_finit_callback) {
+                    my_finit_callback = other.my_finit_callback->make_copy();
+                }
+
+                if(other.my_exemplar_ptr) {
+                    my_exemplar_ptr = create_exemplar(other.my_exemplar_ptr->value);
+                }
+            }
+            return *this;
+        }
+
+    public:
+
+        // assignment
+        enumerable_thread_specific& operator=(const enumerable_thread_specific& other) {
+            return internal_assign(other);
+        }
+
+        template<typename U, typename Alloc, ets_key_usage_type Cachetype>
+        enumerable_thread_specific& operator=(const enumerable_thread_specific<U, Alloc, Cachetype>& other)
+        {
+            return internal_assign(other);
+        }
+
+    private:
+
+        // combine_func_t has signature T(T,T) or T(const T&, const T&)
+        template <typename combine_func_t>
+        T internal_combine(typename internal_collection_type::const_range_type r, combine_func_t f_combine) {
+            if(r.is_divisible()) {
+                typename internal_collection_type::const_range_type r2(r,split());
+                return f_combine(internal_combine(r2, f_combine), internal_combine(r, f_combine));
+            }
+            if(r.size() == 1) {
+                return r.begin()->value;
+            }
+            typename internal_collection_type::const_iterator i2 = r.begin();
+            ++i2;
+            return f_combine(r.begin()->value, i2->value);
+        }
+
+    public:
+
+        // combine_func_t has signature T(T,T) or T(const T&, const T&)
+        template <typename combine_func_t>
+        T combine(combine_func_t f_combine) {
+            if(my_locals.begin() == my_locals.end()) {
+                if(my_finit_callback) {
+                    return my_finit_callback->apply();
+                }
+                return (*my_exemplar_ptr).value;
+            }
+            typename internal_collection_type::const_range_type r(my_locals.begin(), my_locals.end(), (size_t)2);
+            return internal_combine(r, f_combine);
+        }
+
+        // combine_func_t has signature void(T) or void(const T&)
+        template <typename combine_func_t>
+        void combine_each(combine_func_t f_combine) {
+            for(const_iterator ci = begin(); ci != end(); ++ci) {
+                f_combine( *ci );
+            }
+        }
+    }; // enumerable_thread_specific
+
+    template< typename Container >
+    class flattened2d {
+
+        // This intermediate typedef is to address issues with VC7.1 compilers
+        typedef typename Container::value_type conval_type;
+
+    public:
+
+        //! Basic types
+        typedef typename conval_type::size_type size_type;
+        typedef typename conval_type::difference_type difference_type;
+        typedef typename conval_type::allocator_type allocator_type;
+        typedef typename conval_type::value_type value_type;
+        typedef typename conval_type::reference reference;
+        typedef typename conval_type::const_reference const_reference;
+        typedef typename conval_type::pointer pointer;
+        typedef typename conval_type::const_pointer const_pointer;
+
+        typedef typename internal::segmented_iterator<Container, value_type> iterator;
+        typedef typename internal::segmented_iterator<Container, const value_type> const_iterator;
+
+        flattened2d( const Container &c, typename Container::const_iterator b, typename Container::const_iterator e ) : 
+            my_container(const_cast<Container*>(&c)), my_begin(b), my_end(e) { }
+
+        flattened2d( const Container &c ) : 
+            my_container(const_cast<Container*>(&c)), my_begin(c.begin()), my_end(c.end()) { }
+
+        iterator begin() { return iterator(*my_container) = my_begin; }
+        iterator end() { return iterator(*my_container) = my_end; }
+        const_iterator begin() const { return const_iterator(*my_container) = my_begin; }
+        const_iterator end() const { return const_iterator(*my_container) = my_end; }
+
+        size_type size() const {
+            size_type tot_size = 0;
+            for(typename Container::const_iterator i = my_begin; i != my_end; ++i) {
+                tot_size += i->size();
+            }
+            return tot_size;
+        }
+
+    private:
+
+        Container *my_container;
+        typename Container::const_iterator my_begin;
+        typename Container::const_iterator my_end;
+
+    };
+
+    template <typename Container>
+    flattened2d<Container> flatten2d(const Container &c, const typename Container::const_iterator b, const typename Container::const_iterator e) {
+        return flattened2d<Container>(c, b, e);
+    }
+
+    template <typename Container>
+    flattened2d<Container> flatten2d(const Container &c) {
+        return flattened2d<Container>(c);
+    }
+
+} // namespace tbb
+
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/index.html
new file mode 100644 (file)
index 0000000..fa05965
--- /dev/null
@@ -0,0 +1,28 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Include files for Threading Building Blocks classes and functions.
+
+<BR><A HREF=".">Click here</A> to see all files in the directory.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="machine">machine</A>
+<DD>Include files for low-level architecture specific functionality.
+<DT><A HREF="compat">compat</A>
+<DD>Include files for source level compatibility with other frameworks.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/ibm_aix51.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/ibm_aix51.h
new file mode 100644 (file)
index 0000000..4390115
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#define __TBB_WORDSIZE 8
+#define __TBB_BIG_ENDIAN 1
+
+#include <stdint.h>
+#include <unistd.h>
+#include <sched.h>
+
+extern "C" {
+
+int32_t __TBB_machine_cas_32 (volatile void* ptr, int32_t value, int32_t comparand);
+int64_t __TBB_machine_cas_64 (volatile void* ptr, int64_t value, int64_t comparand);
+#define __TBB_fence_for_acquire() __TBB_machine_flush ()
+#define __TBB_fence_for_release() __TBB_machine_flush ()
+
+}
+
+#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cas_32(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cas_64(P,V,C)
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cas_64(P,V,C)
+#define __TBB_Yield() sched_yield()
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/linux_common.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/linux_common.h
new file mode 100644 (file)
index 0000000..35bff25
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#include <stdint.h>
+#include <unistd.h>
+#include <sched.h>
+
+// Definition of __TBB_Yield()
+#define __TBB_Yield()  sched_yield()
+
+/* Futex definitions */
+#include <sys/syscall.h>
+
+#if defined(SYS_futex)
+
+#define __TBB_USE_FUTEX 1
+#include <limits.h>
+#include <errno.h>
+// Unfortunately, some versions of Linux do not have a header that defines FUTEX_WAIT and FUTEX_WAKE.
+
+#ifdef FUTEX_WAIT
+#define __TBB_FUTEX_WAIT FUTEX_WAIT
+#else
+#define __TBB_FUTEX_WAIT 0
+#endif
+
+#ifdef FUTEX_WAKE
+#define __TBB_FUTEX_WAKE FUTEX_WAKE
+#else
+#define __TBB_FUTEX_WAKE 1
+#endif
+
+#ifndef __TBB_ASSERT
+#error machine specific headers must be included after tbb_stddef.h
+#endif
+
+namespace tbb {
+
+namespace internal {
+
+inline int futex_wait( void *futex, int comparand ) {
+    int r = ::syscall( SYS_futex,futex,__TBB_FUTEX_WAIT,comparand,NULL,NULL,0 );
+#if TBB_USE_ASSERT
+    int e = errno;
+    __TBB_ASSERT( r==0||r==EWOULDBLOCK||(r==-1&&(e==EAGAIN||e==EINTR)), "futex_wait failed." );
+#endif /* TBB_USE_ASSERT */
+    return r;
+}
+
+inline int futex_wakeup_one( void *futex ) {
+    int r = ::syscall( SYS_futex,futex,__TBB_FUTEX_WAKE,1,NULL,NULL,0 );
+    __TBB_ASSERT( r==0||r==1, "futex_wakeup_one: more than one thread woken up?" );
+    return r;
+}
+
+inline int futex_wakeup_all( void *futex ) {
+    int r = ::syscall( SYS_futex,futex,__TBB_FUTEX_WAKE,INT_MAX,NULL,NULL,0 );
+    __TBB_ASSERT( r>=0, "futex_wakeup_all: error in waking up threads" );
+    return r;
+}
+
+} /* namespace internal */
+
+} /* namespace tbb */
+
+#endif /* SYS_futex */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/linux_ia32.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/linux_ia32.h
new file mode 100644 (file)
index 0000000..514e3d7
--- /dev/null
@@ -0,0 +1,253 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#if !__MINGW32__
+#include "linux_common.h"
+#endif
+
+#define __TBB_WORDSIZE 4
+#define __TBB_BIG_ENDIAN 0
+
+#define __TBB_release_consistency_helper() __asm__ __volatile__("": : :"memory")
+
+inline void __TBB_rel_acq_fence() { __asm__ __volatile__("mfence": : :"memory"); }
+
+#define __MACHINE_DECL_ATOMICS(S,T,X) \
+static inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand )  \
+{                                                                                    \
+    T result;                                                                        \
+                                                                                     \
+    __asm__ __volatile__("lock\ncmpxchg" X " %2,%1"                                  \
+                          : "=a"(result), "=m"(*(T *)ptr)                            \
+                          : "q"(value), "0"(comparand), "m"(*(T *)ptr)               \
+                          : "memory");                                               \
+    return result;                                                                   \
+}                                                                                    \
+                                                                                     \
+static inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend)              \
+{                                                                                    \
+    T result;                                                                        \
+    __asm__ __volatile__("lock\nxadd" X " %0,%1"                                     \
+                          : "=r"(result), "=m"(*(T *)ptr)                            \
+                          : "0"(addend), "m"(*(T *)ptr)                              \
+                          : "memory");                                               \
+    return result;                                                                   \
+}                                                                                    \
+                                                                                     \
+static inline  T __TBB_machine_fetchstore##S(volatile void *ptr, T value)            \
+{                                                                                    \
+    T result;                                                                        \
+    __asm__ __volatile__("lock\nxchg" X " %0,%1"                                     \
+                          : "=r"(result), "=m"(*(T *)ptr)                            \
+                          : "0"(value), "m"(*(T *)ptr)                               \
+                          : "memory");                                               \
+    return result;                                                                   \
+}                                                                                    \
+                                                                                     
+__MACHINE_DECL_ATOMICS(1,int8_t,"")
+__MACHINE_DECL_ATOMICS(2,int16_t,"")
+__MACHINE_DECL_ATOMICS(4,int32_t,"l")
+
+static inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )
+{
+    int64_t result;
+#if __PIC__ 
+    /* compiling position-independent code */
+    // EBX register preserved for compliancy with position-independent code rules on IA32
+    __asm__ __volatile__ (
+            "pushl %%ebx\n\t"
+            "movl  (%%ecx),%%ebx\n\t"
+            "movl  4(%%ecx),%%ecx\n\t"
+            "lock\n\t cmpxchg8b %1\n\t"
+            "popl  %%ebx"
+             : "=A"(result), "=m"(*(int64_t *)ptr)
+             : "m"(*(int64_t *)ptr)
+             , "0"(comparand)
+             , "c"(&value)
+             : "memory", "esp"
+#if __INTEL_COMPILER
+             ,"ebx"
+#endif
+    );
+#else /* !__PIC__ */
+    union {
+        int64_t i64;
+        int32_t i32[2];
+    };
+    i64 = value;
+    __asm__ __volatile__ (
+            "lock\n\t cmpxchg8b %1\n\t"
+             : "=A"(result), "=m"(*(int64_t *)ptr)
+             : "m"(*(int64_t *)ptr)
+             , "0"(comparand)
+             , "b"(i32[0]), "c"(i32[1])
+             : "memory"
+    );
+#endif /* __PIC__ */
+    return result;
+}
+
+static inline int32_t __TBB_machine_lg( uint32_t x ) {
+    int32_t j;
+    __asm__ ("bsr %1,%0" : "=r"(j) : "r"(x));
+    return j;
+}
+
+static inline void __TBB_machine_or( volatile void *ptr, uint32_t addend ) {
+    __asm__ __volatile__("lock\norl %1,%0" : "=m"(*(uint32_t *)ptr) : "r"(addend), "m"(*(uint32_t *)ptr) : "memory");
+}
+
+static inline void __TBB_machine_and( volatile void *ptr, uint32_t addend ) {
+    __asm__ __volatile__("lock\nandl %1,%0" : "=m"(*(uint32_t *)ptr) : "r"(addend), "m"(*(uint32_t *)ptr) : "memory");
+}
+
+static inline void __TBB_machine_pause( int32_t delay ) {
+    for (int32_t i = 0; i < delay; i++) {
+       __asm__ __volatile__("pause;");
+    }
+    return;
+}   
+
+static inline int64_t __TBB_machine_load8 (const volatile void *ptr) {
+    int64_t result;
+    if( ((uint32_t)ptr&7u)==0 ) {
+        // Aligned load
+        __asm__ __volatile__ ( "fildq %1\n\t"
+                               "fistpq %0" :  "=m"(result) : "m"(*(uint64_t *)ptr) : "memory" );
+    } else {
+        // Unaligned load
+        result = __TBB_machine_cmpswp8((void*)ptr,0,0);
+    }
+    return result;
+}
+
+//! Handles misaligned 8-byte store
+/** Defined in tbb_misc.cpp */
+extern "C" void __TBB_machine_store8_slow( volatile void *ptr, int64_t value );
+extern "C" void __TBB_machine_store8_slow_perf_warning( volatile void *ptr );
+
+static inline void __TBB_machine_store8(volatile void *ptr, int64_t value) {
+    if( ((uint32_t)ptr&7u)==0 ) {
+        // Aligned store
+        __asm__ __volatile__ ( "fildq %1\n\t"
+                               "fistpq %0" :  "=m"(*(int64_t *)ptr) : "m"(value) : "memory" );
+    } else {
+        // Unaligned store
+#if TBB_USE_PERFORMANCE_WARNINGS
+        __TBB_machine_store8_slow_perf_warning(ptr);
+#endif /* TBB_USE_PERFORMANCE_WARNINGS */
+        __TBB_machine_store8_slow(ptr,value);
+    }
+}
+template <typename T, size_t S>
+struct __TBB_machine_load_store {
+    static inline T load_with_acquire(const volatile T& location) {
+        T to_return = location;
+        __asm__ __volatile__("" : : : "memory" );   // Compiler fence to keep operations from migrating upwards
+        return to_return;
+    }
+
+    static inline void store_with_release(volatile T &location, T value) {
+        __asm__ __volatile__("" : : : "memory" );   // Compiler fence to keep operations from migrating upwards
+        location = value;
+    }
+};
+
+template <typename T>
+struct __TBB_machine_load_store<T,8> {
+    static inline T load_with_acquire(const volatile T& location) {
+        T to_return = __TBB_machine_load8((volatile void *)&location);
+        __asm__ __volatile__("" : : : "memory" );   // Compiler fence to keep operations from migrating upwards
+        return to_return;
+    }
+
+    static inline void store_with_release(volatile T &location, T value) {
+        __asm__ __volatile__("" : : : "memory" );   // Compiler fence to keep operations from migrating downwards
+        __TBB_machine_store8((volatile void *)&location,(int64_t)value);
+    }
+};
+
+template<typename T>
+inline T __TBB_machine_load_with_acquire(const volatile T &location) {
+    return __TBB_machine_load_store<T,sizeof(T)>::load_with_acquire(location);
+}
+
+template<typename T, typename V>
+inline void __TBB_machine_store_with_release(volatile T &location, V value) {
+    __TBB_machine_load_store<T,sizeof(T)>::store_with_release(location,value);
+}
+
+#define __TBB_load_with_acquire(L) __TBB_machine_load_with_acquire((L))
+#define __TBB_store_with_release(L,V) __TBB_machine_store_with_release((L),(V))
+
+// Machine specific atomic operations
+
+#define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1(P,V,C)
+#define __TBB_CompareAndSwap2(P,V,C) __TBB_machine_cmpswp2(P,V,C)
+#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+
+#define __TBB_FetchAndAdd1(P,V) __TBB_machine_fetchadd1(P,V)
+#define __TBB_FetchAndAdd2(P,V) __TBB_machine_fetchadd2(P,V)
+#define __TBB_FetchAndAdd4(P,V) __TBB_machine_fetchadd4(P,V)
+#define __TBB_FetchAndAddW(P,V) __TBB_machine_fetchadd4(P,V)
+
+#define __TBB_FetchAndStore1(P,V) __TBB_machine_fetchstore1(P,V)
+#define __TBB_FetchAndStore2(P,V) __TBB_machine_fetchstore2(P,V)
+#define __TBB_FetchAndStore4(P,V) __TBB_machine_fetchstore4(P,V)
+#define __TBB_FetchAndStoreW(P,V) __TBB_machine_fetchstore4(P,V)
+
+#define __TBB_Store8(P,V) __TBB_machine_store8(P,V)
+#define __TBB_Load8(P)    __TBB_machine_load8(P)
+
+#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)
+#define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)
+
+
+// Those we chose not to implement (they will be implemented generically using CMPSWP8)
+#undef __TBB_FetchAndAdd8
+#undef __TBB_FetchAndStore8
+
+// Definition of other functions
+#define __TBB_Pause(V) __TBB_machine_pause(V)
+#define __TBB_Log2(V)  __TBB_machine_lg(V)
+
+// Special atomic functions
+#define __TBB_FetchAndAddWrelease(P,V) __TBB_FetchAndAddW(P,V)
+#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)
+#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,-1)
+
+// Use generic definitions from tbb_machine.h
+#undef __TBB_TryLockByte
+#undef __TBB_LockByte
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/linux_ia64.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/linux_ia64.h
new file mode 100644 (file)
index 0000000..59347b5
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#include "linux_common.h"
+#include <ia64intrin.h>
+
+#define __TBB_WORDSIZE 8
+#define __TBB_BIG_ENDIAN 0
+#define __TBB_DECL_FENCED_ATOMICS 1
+
+// Most of the functions will be in a .s file
+
+extern "C" {
+    int8_t __TBB_machine_cmpswp1__TBB_full_fence (volatile void *ptr, int8_t value, int8_t comparand); 
+    int8_t __TBB_machine_fetchadd1__TBB_full_fence (volatile void *ptr, int8_t addend);
+    int8_t __TBB_machine_fetchadd1acquire(volatile void *ptr, int8_t addend);
+    int8_t __TBB_machine_fetchadd1release(volatile void *ptr, int8_t addend);
+    int8_t __TBB_machine_fetchstore1acquire(volatile void *ptr, int8_t value);
+    int8_t __TBB_machine_fetchstore1release(volatile void *ptr, int8_t value);
+
+    int16_t __TBB_machine_cmpswp2__TBB_full_fence (volatile void *ptr, int16_t value, int16_t comparand);
+    int16_t __TBB_machine_fetchadd2__TBB_full_fence (volatile void *ptr, int16_t addend);
+    int16_t __TBB_machine_fetchadd2acquire(volatile void *ptr, int16_t addend);
+    int16_t __TBB_machine_fetchadd2release(volatile void *ptr, int16_t addend);
+    int16_t __TBB_machine_fetchstore2acquire(volatile void *ptr, int16_t value);
+    int16_t __TBB_machine_fetchstore2release(volatile void *ptr, int16_t value);
+
+    int32_t __TBB_machine_fetchstore4__TBB_full_fence (volatile void *ptr, int32_t value);
+    int32_t __TBB_machine_fetchstore4acquire(volatile void *ptr, int32_t value);
+    int32_t __TBB_machine_fetchstore4release(volatile void *ptr, int32_t value);
+    int32_t __TBB_machine_fetchadd4acquire(volatile void *ptr, int32_t addend);
+    int32_t __TBB_machine_fetchadd4release(volatile void *ptr, int32_t addend);
+
+    int64_t __TBB_machine_cmpswp8__TBB_full_fence (volatile void *ptr, int64_t value, int64_t comparand);
+    int64_t __TBB_machine_fetchstore8__TBB_full_fence (volatile void *ptr, int64_t value);
+    int64_t __TBB_machine_fetchstore8acquire(volatile void *ptr, int64_t value);
+    int64_t __TBB_machine_fetchstore8release(volatile void *ptr, int64_t value);
+    int64_t __TBB_machine_fetchadd8acquire(volatile void *ptr, int64_t addend);
+    int64_t __TBB_machine_fetchadd8release(volatile void *ptr, int64_t addend);
+
+    int8_t __TBB_machine_cmpswp1acquire(volatile void *ptr, int8_t value, int8_t comparand); 
+    int8_t __TBB_machine_cmpswp1release(volatile void *ptr, int8_t value, int8_t comparand); 
+    int8_t __TBB_machine_fetchstore1__TBB_full_fence (volatile void *ptr, int8_t value);
+
+    int16_t __TBB_machine_cmpswp2acquire(volatile void *ptr, int16_t value, int16_t comparand); 
+    int16_t __TBB_machine_cmpswp2release(volatile void *ptr, int16_t value, int16_t comparand); 
+    int16_t __TBB_machine_fetchstore2__TBB_full_fence (volatile void *ptr, int16_t value);
+
+    int32_t __TBB_machine_cmpswp4__TBB_full_fence (volatile void *ptr, int32_t value, int32_t comparand);
+    int32_t __TBB_machine_cmpswp4acquire(volatile void *ptr, int32_t value, int32_t comparand); 
+    int32_t __TBB_machine_cmpswp4release(volatile void *ptr, int32_t value, int32_t comparand); 
+    int32_t __TBB_machine_fetchadd4__TBB_full_fence (volatile void *ptr, int32_t value);
+
+    int64_t __TBB_machine_cmpswp8acquire(volatile void *ptr, int64_t value, int64_t comparand); 
+    int64_t __TBB_machine_cmpswp8release(volatile void *ptr, int64_t value, int64_t comparand); 
+    int64_t __TBB_machine_fetchadd8__TBB_full_fence (volatile void *ptr, int64_t value);
+
+    int64_t __TBB_machine_lg(uint64_t value);
+    void __TBB_machine_pause(int32_t delay);
+    bool __TBB_machine_trylockbyte( volatile unsigned char &ptr );
+    int64_t __TBB_machine_lockbyte( volatile unsigned char &ptr );
+
+    //! Retrieves the current RSE backing store pointer. IA64 specific.
+    void* __TBB_get_bsp();
+}
+
+#define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1__TBB_full_fence(P,V,C)
+#define __TBB_CompareAndSwap2(P,V,C) __TBB_machine_cmpswp2__TBB_full_fence(P,V,C) 
+
+#define __TBB_FetchAndAdd1(P,V)        __TBB_machine_fetchadd1__TBB_full_fence(P,V)
+#define __TBB_FetchAndAdd1acquire(P,V) __TBB_machine_fetchadd1acquire(P,V)
+#define __TBB_FetchAndAdd1release(P,V) __TBB_machine_fetchadd1release(P,V)
+#define __TBB_FetchAndAdd2(P,V)        __TBB_machine_fetchadd2__TBB_full_fence(P,V)
+#define __TBB_FetchAndAdd2acquire(P,V) __TBB_machine_fetchadd2acquire(P,V)
+#define __TBB_FetchAndAdd2release(P,V) __TBB_machine_fetchadd2release(P,V)
+#define __TBB_FetchAndAdd4acquire(P,V) __TBB_machine_fetchadd4acquire(P,V)
+#define __TBB_FetchAndAdd4release(P,V) __TBB_machine_fetchadd4release(P,V)
+#define __TBB_FetchAndAdd8acquire(P,V) __TBB_machine_fetchadd8acquire(P,V)
+#define __TBB_FetchAndAdd8release(P,V) __TBB_machine_fetchadd8release(P,V)
+
+#define __TBB_FetchAndStore1acquire(P,V) __TBB_machine_fetchstore1acquire(P,V)
+#define __TBB_FetchAndStore1release(P,V) __TBB_machine_fetchstore1release(P,V)
+#define __TBB_FetchAndStore2acquire(P,V) __TBB_machine_fetchstore2acquire(P,V)
+#define __TBB_FetchAndStore2release(P,V) __TBB_machine_fetchstore2release(P,V)
+#define __TBB_FetchAndStore4acquire(P,V) __TBB_machine_fetchstore4acquire(P,V)
+#define __TBB_FetchAndStore4release(P,V) __TBB_machine_fetchstore4release(P,V)
+#define __TBB_FetchAndStore8acquire(P,V) __TBB_machine_fetchstore8acquire(P,V)
+#define __TBB_FetchAndStore8release(P,V) __TBB_machine_fetchstore8release(P,V)
+
+#define __TBB_CompareAndSwap1acquire(P,V,C) __TBB_machine_cmpswp1acquire(P,V,C)
+#define __TBB_CompareAndSwap1release(P,V,C) __TBB_machine_cmpswp1release(P,V,C)
+#define __TBB_CompareAndSwap2acquire(P,V,C) __TBB_machine_cmpswp2acquire(P,V,C)
+#define __TBB_CompareAndSwap2release(P,V,C) __TBB_machine_cmpswp2release(P,V,C)
+#define __TBB_CompareAndSwap4(P,V,C)        __TBB_machine_cmpswp4__TBB_full_fence(P,V,C)
+#define __TBB_CompareAndSwap4acquire(P,V,C) __TBB_machine_cmpswp4acquire(P,V,C)
+#define __TBB_CompareAndSwap4release(P,V,C) __TBB_machine_cmpswp4release(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C)        __TBB_machine_cmpswp8__TBB_full_fence(P,V,C)
+#define __TBB_CompareAndSwap8acquire(P,V,C) __TBB_machine_cmpswp8acquire(P,V,C)
+#define __TBB_CompareAndSwap8release(P,V,C) __TBB_machine_cmpswp8release(P,V,C)
+
+#define __TBB_FetchAndAdd4(P,V) __TBB_machine_fetchadd4__TBB_full_fence(P,V)
+#define __TBB_FetchAndAdd8(P,V) __TBB_machine_fetchadd8__TBB_full_fence(P,V)
+
+#define __TBB_FetchAndStore1(P,V) __TBB_machine_fetchstore1__TBB_full_fence(P,V)
+#define __TBB_FetchAndStore2(P,V) __TBB_machine_fetchstore2__TBB_full_fence(P,V)
+#define __TBB_FetchAndStore4(P,V) __TBB_machine_fetchstore4__TBB_full_fence(P,V)
+#define __TBB_FetchAndStore8(P,V) __TBB_machine_fetchstore8__TBB_full_fence(P,V)
+
+#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAdd8acquire(P,1)
+#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAdd8release(P,-1)
+
+#ifndef __INTEL_COMPILER
+/* Even though GCC imbues volatile loads with acquire semantics, 
+   it sometimes moves loads over the acquire fence.  The
+   fences defined here stop such incorrect code motion. */
+#define __TBB_release_consistency_helper() __asm__ __volatile__("": : :"memory")
+#define __TBB_rel_acq_fence() __asm__ __volatile__("mf": : :"memory")
+#else
+#define __TBB_release_consistency_helper()
+#define __TBB_rel_acq_fence() __mf()
+#endif /* __INTEL_COMPILER */
+
+// Special atomic functions
+#define __TBB_CompareAndSwapW(P,V,C)   __TBB_CompareAndSwap8(P,V,C)
+#define __TBB_FetchAndStoreW(P,V)      __TBB_FetchAndStore8(P,V)
+#define __TBB_FetchAndAddW(P,V)        __TBB_FetchAndAdd8(P,V)
+#define __TBB_FetchAndAddWrelease(P,V) __TBB_FetchAndAdd8release(P,V)
+
+// Not needed
+#undef __TBB_Store8
+#undef __TBB_Load8
+
+// Definition of Lock functions
+#define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)
+#define __TBB_LockByte(P)    __TBB_machine_lockbyte(P)
+
+// Definition of other utility functions
+#define __TBB_Pause(V) __TBB_machine_pause(V)
+#define __TBB_Log2(V)  __TBB_machine_lg(V)
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/linux_intel64.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/linux_intel64.h
new file mode 100644 (file)
index 0000000..6f42254
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#include "linux_common.h"
+
+#define __TBB_WORDSIZE 8
+#define __TBB_BIG_ENDIAN 0
+
+#define __TBB_release_consistency_helper() __asm__ __volatile__("": : :"memory")
+
+inline void __TBB_rel_acq_fence() { __asm__ __volatile__("mfence": : :"memory"); }
+
+#define __MACHINE_DECL_ATOMICS(S,T,X) \
+static inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand )  \
+{                                                                                    \
+    T result;                                                                        \
+                                                                                     \
+    __asm__ __volatile__("lock\ncmpxchg" X " %2,%1"                                  \
+                          : "=a"(result), "=m"(*(T *)ptr)                            \
+                          : "q"(value), "0"(comparand), "m"(*(T *)ptr)               \
+                          : "memory");                                               \
+    return result;                                                                   \
+}                                                                                    \
+                                                                                     \
+static inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend)              \
+{                                                                                    \
+    T result;                                                                        \
+    __asm__ __volatile__("lock\nxadd" X " %0,%1"                                     \
+                          : "=r"(result),"=m"(*(T *)ptr)                             \
+                          : "0"(addend), "m"(*(T *)ptr)                              \
+                          : "memory");                                               \
+    return result;                                                                   \
+}                                                                                    \
+                                                                                     \
+static inline  T __TBB_machine_fetchstore##S(volatile void *ptr, T value)            \
+{                                                                                    \
+    T result;                                                                        \
+    __asm__ __volatile__("lock\nxchg" X " %0,%1"                                     \
+                          : "=r"(result),"=m"(*(T *)ptr)                             \
+                          : "0"(value), "m"(*(T *)ptr)                               \
+                          : "memory");                                               \
+    return result;                                                                   \
+}                                                                                    \
+                                                                                     
+__MACHINE_DECL_ATOMICS(1,int8_t,"")
+__MACHINE_DECL_ATOMICS(2,int16_t,"")
+__MACHINE_DECL_ATOMICS(4,int32_t,"")
+__MACHINE_DECL_ATOMICS(8,int64_t,"q")
+
+static inline int64_t __TBB_machine_lg( uint64_t x ) {
+    int64_t j;
+    __asm__ ("bsr %1,%0" : "=r"(j) : "r"(x));
+    return j;
+}
+
+static inline void __TBB_machine_or( volatile void *ptr, uint64_t addend ) {
+    __asm__ __volatile__("lock\norq %1,%0" : "=m"(*(uint64_t *)ptr) : "r"(addend), "m"(*(uint64_t *)ptr) : "memory");
+}
+
+static inline void __TBB_machine_and( volatile void *ptr, uint64_t addend ) {
+    __asm__ __volatile__("lock\nandq %1,%0" : "=m"(*(uint64_t *)ptr) : "r"(addend), "m"(*(uint64_t *)ptr) : "memory");
+}
+
+static inline void __TBB_machine_pause( int32_t delay ) {
+    for (int32_t i = 0; i < delay; i++) {
+       __asm__ __volatile__("pause;");
+    }
+    return;
+}   
+
+// Machine specific atomic operations
+
+#define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1(P,V,C)
+#define __TBB_CompareAndSwap2(P,V,C) __TBB_machine_cmpswp2(P,V,C)
+#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+
+#define __TBB_FetchAndAdd1(P,V) __TBB_machine_fetchadd1(P,V)
+#define __TBB_FetchAndAdd2(P,V) __TBB_machine_fetchadd2(P,V)
+#define __TBB_FetchAndAdd4(P,V) __TBB_machine_fetchadd4(P,V)
+#define __TBB_FetchAndAdd8(P,V)  __TBB_machine_fetchadd8(P,V)
+#define __TBB_FetchAndAddW(P,V)  __TBB_machine_fetchadd8(P,V)
+
+#define __TBB_FetchAndStore1(P,V) __TBB_machine_fetchstore1(P,V)
+#define __TBB_FetchAndStore2(P,V) __TBB_machine_fetchstore2(P,V)
+#define __TBB_FetchAndStore4(P,V) __TBB_machine_fetchstore4(P,V)
+#define __TBB_FetchAndStore8(P,V)  __TBB_machine_fetchstore8(P,V)
+#define __TBB_FetchAndStoreW(P,V)  __TBB_machine_fetchstore8(P,V)
+
+#define __TBB_Store8(P,V) (*P = V)
+#define __TBB_Load8(P)    (*P)
+
+#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)
+#define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)
+
+// Definition of other functions
+#define __TBB_Pause(V) __TBB_machine_pause(V)
+#define __TBB_Log2(V)    __TBB_machine_lg(V)
+
+// Special atomic functions
+#define __TBB_FetchAndAddWrelease(P,V) __TBB_FetchAndAddW(P,V)
+#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)
+#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,-1)
+
+// Use generic definitions from tbb_machine.h
+#undef __TBB_TryLockByte
+#undef __TBB_LockByte
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/mac_ppc.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/mac_ppc.h
new file mode 100644 (file)
index 0000000..6d6b1be
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#include <stdint.h>
+#include <unistd.h>
+
+#include <sched.h> // sched_yield
+
+inline int32_t __TBB_machine_cmpswp4 (volatile void *ptr, int32_t value, int32_t comparand )
+{
+    int32_t result;
+
+    __asm__ __volatile__("sync\n"
+                         "0: lwarx %0,0,%2\n\t"  /* load w/ reservation */
+                         "cmpw %0,%4\n\t"        /* compare against comparand */
+                         "bne- 1f\n\t"           /* exit if not same */
+                         "stwcx. %3,0,%2\n\t"    /* store new_value */
+                         "bne- 0b\n"             /* retry if reservation lost */
+                         "1: sync"               /* the exit */
+                          : "=&r"(result), "=m"(* (int32_t*) ptr)
+                          : "r"(ptr), "r"(value), "r"(comparand), "m"(* (int32_t*) ptr)
+                          : "cr0");
+    return result;
+}
+
+inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )
+{
+    int64_t result;
+    __asm__ __volatile__("sync\n"
+                         "0: ldarx %0,0,%2\n\t"  /* load w/ reservation */
+                         "cmpd %0,%4\n\t"        /* compare against comparand */
+                         "bne- 1f\n\t"           /* exit if not same */
+                         "stdcx. %3,0,%2\n\t"    /* store new_value */
+                         "bne- 0b\n"             /* retry if reservation lost */
+                         "1: sync"               /* the exit */
+                          : "=&b"(result), "=m"(* (int64_t*) ptr)
+                          : "r"(ptr), "r"(value), "r"(comparand), "m"(* (int64_t*) ptr)
+                          : "cr0");
+    return result;
+}
+
+#define __TBB_BIG_ENDIAN 1
+
+#if defined(powerpc64) || defined(__powerpc64__) || defined(__ppc64__)
+#define __TBB_WORDSIZE 8
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+#else
+#define __TBB_WORDSIZE 4
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+#endif
+
+#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+#define __TBB_Yield() sched_yield()
+#define __TBB_rel_acq_fence() __asm__ __volatile__("lwsync": : :"memory")
+#define __TBB_release_consistency_helper() __TBB_rel_acq_fence()
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/windows_ia32.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/windows_ia32.h
new file mode 100644 (file)
index 0000000..69c961a
--- /dev/null
@@ -0,0 +1,242 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#if defined(__INTEL_COMPILER)
+#define __TBB_release_consistency_helper() __asm { __asm nop }
+#elif _MSC_VER >= 1300
+extern "C" void _ReadWriteBarrier();
+#pragma intrinsic(_ReadWriteBarrier)
+#define __TBB_release_consistency_helper() _ReadWriteBarrier()
+#else
+#error Unsupported compiler - need to define __TBB_release_consistency_helper to support it
+#endif
+
+inline void __TBB_rel_acq_fence() { __asm { __asm mfence } }
+
+#define __TBB_WORDSIZE 4
+#define __TBB_BIG_ENDIAN 0
+
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+    // Workaround for overzealous compiler warnings in /Wp64 mode
+    #pragma warning (push)
+    #pragma warning (disable: 4244 4267)
+#endif
+
+extern "C" {
+    __int64 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp8 (volatile void *ptr, __int64 value, __int64 comparand );
+    __int64 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd8 (volatile void *ptr, __int64 addend );
+    __int64 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore8 (volatile void *ptr, __int64 value );
+    void __TBB_EXPORTED_FUNC __TBB_machine_store8 (volatile void *ptr, __int64 value );
+    __int64 __TBB_EXPORTED_FUNC __TBB_machine_load8 (const volatile void *ptr);
+}
+
+template <typename T, size_t S>
+struct __TBB_machine_load_store {
+    static inline T load_with_acquire(const volatile T& location) {
+        T to_return = location;
+        __TBB_release_consistency_helper();
+        return to_return;
+    }
+
+    static inline void store_with_release(volatile T &location, T value) {
+        __TBB_release_consistency_helper();
+        location = value;
+    }
+};
+
+template <typename T>
+struct __TBB_machine_load_store<T,8> {
+    static inline T load_with_acquire(const volatile T& location) {
+        return __TBB_machine_load8((volatile void *)&location);
+    }
+
+    static inline void store_with_release(T &location, T value) {
+        __TBB_machine_store8((volatile void *)&location,(__int64)value);
+    }
+};
+
+template<typename T>
+inline T __TBB_machine_load_with_acquire(const volatile T &location) {
+    return __TBB_machine_load_store<T,sizeof(T)>::load_with_acquire(location);
+}
+
+template<typename T, typename V>
+inline void __TBB_machine_store_with_release(T& location, V value) {
+    __TBB_machine_load_store<T,sizeof(T)>::store_with_release(location,value);
+}
+
+//! Overload that exists solely to avoid /Wp64 warnings.
+inline void __TBB_machine_store_with_release(size_t& location, size_t value) {
+    __TBB_machine_load_store<size_t,sizeof(size_t)>::store_with_release(location,value);
+} 
+
+#define __TBB_load_with_acquire(L) __TBB_machine_load_with_acquire((L))
+#define __TBB_store_with_release(L,V) __TBB_machine_store_with_release((L),(V))
+
+#define __TBB_DEFINE_ATOMICS(S,T,U,A,C) \
+static inline T __TBB_machine_cmpswp##S ( volatile void * ptr, U value, U comparand ) { \
+    T result; \
+    volatile T *p = (T *)ptr; \
+    __TBB_release_consistency_helper(); \
+    __asm \
+    { \
+       __asm mov edx, p \
+       __asm mov C , value \
+       __asm mov A , comparand \
+       __asm lock cmpxchg [edx], C \
+       __asm mov result, A \
+    } \
+    __TBB_release_consistency_helper(); \
+    return result; \
+} \
+\
+static inline T __TBB_machine_fetchadd##S ( volatile void * ptr, U addend ) { \
+    T result; \
+    volatile T *p = (T *)ptr; \
+    __TBB_release_consistency_helper(); \
+    __asm \
+    { \
+        __asm mov edx, p \
+        __asm mov A, addend \
+        __asm lock xadd [edx], A \
+        __asm mov result, A \
+    } \
+    __TBB_release_consistency_helper(); \
+    return result; \
+}\
+\
+static inline T __TBB_machine_fetchstore##S ( volatile void * ptr, U value ) { \
+    T result; \
+    volatile T *p = (T *)ptr; \
+    __TBB_release_consistency_helper(); \
+    __asm \
+    { \
+        __asm mov edx, p \
+        __asm mov A, value \
+        __asm lock xchg [edx], A \
+        __asm mov result, A \
+    } \
+    __TBB_release_consistency_helper(); \
+    return result; \
+}
+
+__TBB_DEFINE_ATOMICS(1, __int8, __int8, al, cl)
+__TBB_DEFINE_ATOMICS(2, __int16, __int16, ax, cx)
+__TBB_DEFINE_ATOMICS(4, __int32, ptrdiff_t, eax, ecx)
+
+static inline __int32 __TBB_machine_lg( unsigned __int64 i ) {
+    unsigned __int32 j;
+    __asm
+    {
+        bsr eax, i
+        mov j, eax
+    }
+    return j;
+}
+
+static inline void __TBB_machine_OR( volatile void *operand, __int32 addend ) {
+   __asm 
+   {
+       mov eax, addend
+       mov edx, [operand]
+       lock or [edx], eax
+   }
+}
+
+static inline void __TBB_machine_AND( volatile void *operand, __int32 addend ) {
+   __asm 
+   {
+       mov eax, addend
+       mov edx, [operand]
+       lock and [edx], eax
+   }
+}
+
+static inline void __TBB_machine_pause (__int32 delay ) {
+    _asm 
+    {
+        mov eax, delay
+      L1: 
+        pause
+        add eax, -1
+        jne L1  
+    }
+    return;
+}
+
+#define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1(P,V,C)
+#define __TBB_CompareAndSwap2(P,V,C) __TBB_machine_cmpswp2(P,V,C)
+#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+
+#define __TBB_FetchAndAdd1(P,V) __TBB_machine_fetchadd1(P,V)
+#define __TBB_FetchAndAdd2(P,V) __TBB_machine_fetchadd2(P,V)
+#define __TBB_FetchAndAdd4(P,V) __TBB_machine_fetchadd4(P,V)
+#define __TBB_FetchAndAdd8(P,V) __TBB_machine_fetchadd8(P,V)
+#define __TBB_FetchAndAddW(P,V) __TBB_machine_fetchadd4(P,V)
+
+#define __TBB_FetchAndStore1(P,V) __TBB_machine_fetchstore1(P,V)
+#define __TBB_FetchAndStore2(P,V) __TBB_machine_fetchstore2(P,V)
+#define __TBB_FetchAndStore4(P,V) __TBB_machine_fetchstore4(P,V)
+#define __TBB_FetchAndStore8(P,V) __TBB_machine_fetchstore8(P,V)
+#define __TBB_FetchAndStoreW(P,V) __TBB_machine_fetchstore4(P,V)
+
+// Should define this: 
+#define __TBB_Store8(P,V) __TBB_machine_store8(P,V)
+#define __TBB_Load8(P) __TBB_machine_load8(P)
+#define __TBB_AtomicOR(P,V) __TBB_machine_OR(P,V)
+#define __TBB_AtomicAND(P,V) __TBB_machine_AND(P,V)
+
+// Definition of other functions
+extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
+#define __TBB_Yield()  SwitchToThread()
+#define __TBB_Pause(V) __TBB_machine_pause(V)
+#define __TBB_Log2(V)    __TBB_machine_lg(V)
+
+// Use generic definitions from tbb_machine.h
+#undef __TBB_TryLockByte
+#undef __TBB_LockByte
+
+#if defined(_MSC_VER)&&_MSC_VER<1400
+    static inline void* __TBB_machine_get_current_teb () {
+        void* pteb;
+        __asm mov eax, fs:[0x18]
+        __asm mov pteb, eax
+        return pteb;
+    }
+#endif
+
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+    #pragma warning (pop)
+#endif // warnings 4244, 4267 are back
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/windows_intel64.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/machine/windows_intel64.h
new file mode 100644 (file)
index 0000000..a885aa4
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#include <intrin.h>
+#if !defined(__INTEL_COMPILER)
+#pragma intrinsic(_InterlockedOr64)
+#pragma intrinsic(_InterlockedAnd64)
+#pragma intrinsic(_InterlockedCompareExchange)
+#pragma intrinsic(_InterlockedCompareExchange64)
+#pragma intrinsic(_InterlockedExchangeAdd)
+#pragma intrinsic(_InterlockedExchangeAdd64)
+#pragma intrinsic(_InterlockedExchange)
+#pragma intrinsic(_InterlockedExchange64)
+#endif /* !defined(__INTEL_COMPILER) */
+
+#if defined(__INTEL_COMPILER)
+#define __TBB_release_consistency_helper() __asm { __asm nop }
+inline void __TBB_rel_acq_fence() { __asm { __asm mfence } }
+#elif _MSC_VER >= 1300
+extern "C" void _ReadWriteBarrier();
+#pragma intrinsic(_ReadWriteBarrier)
+#define __TBB_release_consistency_helper() _ReadWriteBarrier()
+#pragma intrinsic(_mm_mfence)
+inline void __TBB_rel_acq_fence() { _mm_mfence(); }
+#endif
+
+#define __TBB_WORDSIZE 8
+#define __TBB_BIG_ENDIAN 0
+
+// ATTENTION: if you ever change argument types in machine-specific primitives,
+// please take care of atomic_word<> specializations in tbb/atomic.h
+extern "C" {
+    __int8 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp1 (volatile void *ptr, __int8 value, __int8 comparand );
+    __int8 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd1 (volatile void *ptr, __int8 addend );
+    __int8 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore1 (volatile void *ptr, __int8 value );
+    __int16 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp2 (volatile void *ptr, __int16 value, __int16 comparand );
+    __int16 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd2 (volatile void *ptr, __int16 addend );
+    __int16 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore2 (volatile void *ptr, __int16 value );
+    void __TBB_EXPORTED_FUNC __TBB_machine_pause (__int32 delay );
+}
+
+
+#if !__INTEL_COMPILER
+extern "C" unsigned char _BitScanReverse64( unsigned long* i, unsigned __int64 w );
+#pragma intrinsic(_BitScanReverse64)
+#endif
+
+inline __int64 __TBB_machine_lg( unsigned __int64 i ) {
+#if __INTEL_COMPILER
+    unsigned __int64 j;
+    __asm
+    {
+        bsr rax, i
+        mov j, rax
+    }
+#else
+    unsigned long j;
+    _BitScanReverse64( &j, i );
+#endif
+    return j;
+}
+
+inline void __TBB_machine_OR( volatile void *operand, intptr_t addend ) {
+    _InterlockedOr64((__int64*)operand, addend); 
+}
+
+inline void __TBB_machine_AND( volatile void *operand, intptr_t addend ) {
+    _InterlockedAnd64((__int64*)operand, addend); 
+}
+
+#define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1(P,V,C)
+#define __TBB_CompareAndSwap2(P,V,C) __TBB_machine_cmpswp2(P,V,C)
+#define __TBB_CompareAndSwap4(P,V,C) _InterlockedCompareExchange( (long*) P , V , C ) 
+#define __TBB_CompareAndSwap8(P,V,C) _InterlockedCompareExchange64( (__int64*) P , V , C )
+#define __TBB_CompareAndSwapW(P,V,C) _InterlockedCompareExchange64( (__int64*) P , V , C )
+
+#define __TBB_FetchAndAdd1(P,V) __TBB_machine_fetchadd1(P,V)
+#define __TBB_FetchAndAdd2(P,V) __TBB_machine_fetchadd2(P,V)
+#define __TBB_FetchAndAdd4(P,V) _InterlockedExchangeAdd((long*) P , V )
+#define __TBB_FetchAndAdd8(P,V) _InterlockedExchangeAdd64((__int64*) P , V )
+#define __TBB_FetchAndAddW(P,V) _InterlockedExchangeAdd64((__int64*) P , V )
+
+#define __TBB_FetchAndStore1(P,V) __TBB_machine_fetchstore1(P,V)
+#define __TBB_FetchAndStore2(P,V) __TBB_machine_fetchstore2(P,V)
+#define __TBB_FetchAndStore4(P,V) _InterlockedExchange((long*) P , V )
+#define __TBB_FetchAndStore8(P,V) _InterlockedExchange64((__int64*) P , V )
+#define __TBB_FetchAndStoreW(P,V) _InterlockedExchange64((__int64*) P , V ) 
+
+// Not used if wordsize == 8
+#undef __TBB_Store8
+#undef __TBB_Load8
+
+#define __TBB_AtomicOR(P,V) __TBB_machine_OR(P,V)
+#define __TBB_AtomicAND(P,V) __TBB_machine_AND(P,V)
+
+extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
+#define __TBB_Yield()  SwitchToThread()
+#define __TBB_Pause(V) __TBB_machine_pause(V)
+#define __TBB_Log2(V)    __TBB_machine_lg(V)
+
+// Use generic definitions from tbb_machine.h
+#undef __TBB_TryLockByte
+#undef __TBB_LockByte
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/mutex.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/mutex.h
new file mode 100644 (file)
index 0000000..a14735f
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_mutex_H
+#define __TBB_mutex_H
+
+#if _WIN32||_WIN64
+#include <windows.h>
+#if !defined(_WIN32_WINNT)
+// The following Windows API function is declared explicitly;
+// otherwise any user would have to specify /D_WIN32_WINNT=0x0400
+extern "C" BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
+#endif
+
+#else /* if not _WIN32||_WIN64 */
+#include <pthread.h>
+namespace tbb { namespace internal {
+// Use this internal TBB function to throw an exception
+extern void handle_perror( int error_code, const char* what );
+} } //namespaces
+#endif /* _WIN32||_WIN64 */
+
+#include <new>
+#include "aligned_space.h"
+#include "tbb_stddef.h"
+#include "tbb_profiling.h"
+
+namespace tbb {
+
+//! Wrapper around the platform's native reader-writer lock.
+/** For testing purposes only.
+    @ingroup synchronization */
+class mutex {
+public:
+    //! Construct unacquired mutex.
+    mutex() {
+#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS
+    internal_construct();
+#else
+  #if _WIN32||_WIN64
+        InitializeCriticalSection(&impl);
+  #else
+        int error_code = pthread_mutex_init(&impl,NULL);
+        if( error_code )
+            tbb::internal::handle_perror(error_code,"mutex: pthread_mutex_init failed");
+  #endif /* _WIN32||_WIN64*/
+#endif /* TBB_USE_ASSERT */
+    };
+
+    ~mutex() {
+#if TBB_USE_ASSERT
+        internal_destroy();
+#else
+  #if _WIN32||_WIN64
+        DeleteCriticalSection(&impl);
+  #else
+        pthread_mutex_destroy(&impl); 
+
+  #endif /* _WIN32||_WIN64 */
+#endif /* TBB_USE_ASSERT */
+    };
+
+    class scoped_lock;
+    friend class scoped_lock;
+
+    //! The scoped locking pattern
+    /** It helps to avoid the common problem of forgetting to release lock.
+        It also nicely provides the "node" for queuing locks. */
+    class scoped_lock : internal::no_copy {
+    public:
+        //! Construct lock that has not acquired a mutex. 
+        scoped_lock() : my_mutex(NULL) {};
+
+        //! Acquire lock on given mutex.
+        /** Upon entry, *this should not be in the "have acquired a mutex" state. */
+        scoped_lock( mutex& mutex ) {
+            acquire( mutex );
+        }
+
+        //! Release lock (if lock is held).
+        ~scoped_lock() {
+            if( my_mutex ) 
+                release();
+        }
+
+        //! Acquire lock on given mutex.
+        void acquire( mutex& mutex ) {
+#if TBB_USE_ASSERT
+            internal_acquire(mutex);
+#else
+            mutex.lock();
+            my_mutex = &mutex;
+#endif /* TBB_USE_ASSERT */
+        }
+
+        //! Try acquire lock on given mutex.
+        bool try_acquire( mutex& mutex ) {
+#if TBB_USE_ASSERT
+            return internal_try_acquire (mutex);
+#else
+            bool result = mutex.try_lock();
+            if( result )
+                my_mutex = &mutex;
+            return result;
+#endif /* TBB_USE_ASSERT */
+        }
+
+        //! Release lock
+        void release() {
+#if TBB_USE_ASSERT
+            internal_release ();
+#else
+            my_mutex->unlock();
+            my_mutex = NULL;
+#endif /* TBB_USE_ASSERT */
+        }
+
+    private:
+        //! The pointer to the current mutex to work
+        mutex* my_mutex;
+
+        //! All checks from acquire using mutex.state were moved here
+        void __TBB_EXPORTED_METHOD internal_acquire( mutex& m );
+
+        //! All checks from try_acquire using mutex.state were moved here
+        bool __TBB_EXPORTED_METHOD internal_try_acquire( mutex& m );
+
+        //! All checks from release using mutex.state were moved here
+        void __TBB_EXPORTED_METHOD internal_release();
+
+        friend class mutex;
+    };
+
+    // Mutex traits
+    static const bool is_rw_mutex = false;
+    static const bool is_recursive_mutex = false;
+    static const bool is_fair_mutex = false;
+
+    // ISO C++0x compatibility methods
+
+    //! Acquire lock
+    void lock() {
+#if TBB_USE_ASSERT
+        aligned_space<scoped_lock,1> tmp;
+        new(tmp.begin()) scoped_lock(*this);
+#else
+  #if _WIN32||_WIN64
+        EnterCriticalSection(&impl);
+  #else
+        pthread_mutex_lock(&impl);
+  #endif /* _WIN32||_WIN64 */
+#endif /* TBB_USE_ASSERT */
+    }
+
+    //! Try acquiring lock (non-blocking)
+    /** Return true if lock acquired; false otherwise. */
+    bool try_lock() {
+#if TBB_USE_ASSERT
+        aligned_space<scoped_lock,1> tmp;
+        scoped_lock& s = *tmp.begin();
+        s.my_mutex = NULL;
+        return s.internal_try_acquire(*this);
+#else
+  #if _WIN32||_WIN64
+        return TryEnterCriticalSection(&impl)!=0;
+  #else
+        return pthread_mutex_trylock(&impl)==0;
+  #endif /* _WIN32||_WIN64 */
+#endif /* TBB_USE_ASSERT */
+    }
+
+    //! Release lock
+    void unlock() {
+#if TBB_USE_ASSERT
+        aligned_space<scoped_lock,1> tmp;
+        scoped_lock& s = *tmp.begin();
+        s.my_mutex = this;
+        s.internal_release();
+#else
+  #if _WIN32||_WIN64
+        LeaveCriticalSection(&impl);
+  #else
+        pthread_mutex_unlock(&impl);
+  #endif /* _WIN32||_WIN64 */
+#endif /* TBB_USE_ASSERT */
+    }
+
+private:
+#if _WIN32||_WIN64
+    CRITICAL_SECTION impl;    
+    enum state_t {
+        INITIALIZED=0x1234,
+        DESTROYED=0x789A,
+        HELD=0x56CD
+    } state;
+#else
+    pthread_mutex_t impl;
+#endif /* _WIN32||_WIN64 */
+
+    //! All checks from mutex constructor using mutex.state were moved here
+    void __TBB_EXPORTED_METHOD internal_construct();
+
+    //! All checks from mutex destructor using mutex.state were moved here
+    void __TBB_EXPORTED_METHOD internal_destroy();
+};
+
+__TBB_DEFINE_PROFILING_SET_NAME(mutex)
+
+} // namespace tbb 
+
+#endif /* __TBB_mutex_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/null_mutex.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/null_mutex.h
new file mode 100644 (file)
index 0000000..6cf8dc8
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_null_mutex_H
+#define __TBB_null_mutex_H
+
+namespace tbb {
+    
+//! A mutex which does nothing
+/** A null_mutex does no operation and simulates success.
+    @ingroup synchronization */
+class null_mutex {   
+    //! Deny assignment and copy construction 
+    null_mutex( const null_mutex& );   
+    void operator=( const null_mutex& );   
+public:   
+    //! Represents acquisition of a mutex.
+    class scoped_lock {   
+    public:   
+        scoped_lock() {}
+        scoped_lock( null_mutex& ) {}   
+        ~scoped_lock() {}
+        void acquire( null_mutex& ) {}
+        bool try_acquire( null_mutex& ) { return true; }
+        void release() {}
+    };
+  
+    null_mutex() {}
+    
+    // Mutex traits   
+    static const bool is_rw_mutex = false;   
+    static const bool is_recursive_mutex = true;
+    static const bool is_fair_mutex = true;
+};  
+
+}
+
+#endif /* __TBB_null_mutex_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/null_rw_mutex.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/null_rw_mutex.h
new file mode 100644 (file)
index 0000000..6be42e1
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_null_rw_mutex_H
+#define __TBB_null_rw_mutex_H
+
+namespace tbb {
+    
+//! A rw mutex which does nothing
+/** A null_rw_mutex is a rw mutex that does nothing and simulates successful operation.
+    @ingroup synchronization */
+class null_rw_mutex {
+    //! Deny assignment and copy construction 
+    null_rw_mutex( const null_rw_mutex& );   
+    void operator=( const null_rw_mutex& );   
+public:   
+    //! Represents acquisition of a mutex.
+    class scoped_lock {   
+    public:   
+        scoped_lock() {}
+        scoped_lock( null_rw_mutex& , bool = true ) {}
+        ~scoped_lock() {}
+        void acquire( null_rw_mutex& , bool = true ) {}
+        bool upgrade_to_writer() { return true; }
+        bool downgrade_to_reader() { return true; }
+        bool try_acquire( null_rw_mutex& , bool = true ) { return true; }
+        void release() {}
+    };
+  
+    null_rw_mutex() {}
+    
+    // Mutex traits   
+    static const bool is_rw_mutex = true;   
+    static const bool is_recursive_mutex = true;
+    static const bool is_fair_mutex = true;
+};  
+
+}
+
+#endif /* __TBB_null_rw_mutex_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_do.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_do.h
new file mode 100644 (file)
index 0000000..922c968
--- /dev/null
@@ -0,0 +1,508 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_parallel_do_H
+#define __TBB_parallel_do_H
+
+#include "task.h"
+#include "aligned_space.h"
+#include <iterator>
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+    template<typename Body, typename Item> class parallel_do_feeder_impl;
+    template<typename Body> class do_group_task;
+
+    //! Strips its template type argument from 'cv' and '&' qualifiers
+    template<typename T>
+    struct strip { typedef T type; };
+    template<typename T>
+    struct strip<T&> { typedef T type; };
+    template<typename T>
+    struct strip<const T&> { typedef T type; };
+    template<typename T>
+    struct strip<volatile T&> { typedef T type; };
+    template<typename T>
+    struct strip<const volatile T&> { typedef T type; };
+    // Most of the compilers remove cv-qualifiers from non-reference function argument types. 
+    // But unfortunately there are those that don't.
+    template<typename T>
+    struct strip<const T> { typedef T type; };
+    template<typename T>
+    struct strip<volatile T> { typedef T type; };
+    template<typename T>
+    struct strip<const volatile T> { typedef T type; };
+} // namespace internal
+//! @endcond
+
+//! Class the user supplied algorithm body uses to add new tasks
+/** \param Item Work item type **/
+template<typename Item>
+class parallel_do_feeder: internal::no_copy
+{
+    parallel_do_feeder() {}
+    virtual ~parallel_do_feeder () {}
+    virtual void internal_add( const Item& item ) = 0;
+    template<typename Body_, typename Item_> friend class internal::parallel_do_feeder_impl;
+public:
+    //! Add a work item to a running parallel_do.
+    void add( const Item& item ) {internal_add(item);}
+};
+
+//! @cond INTERNAL
+namespace internal {
+    //! For internal use only.
+    /** Selects one of the two possible forms of function call member operator.
+        @ingroup algorithms **/
+    template<class Body, typename Item>
+    class parallel_do_operator_selector
+    {
+        typedef parallel_do_feeder<Item> Feeder;
+        template<typename A1, typename A2, typename CvItem >
+        static void internal_call( const Body& obj, A1& arg1, A2&, void (Body::*)(CvItem) const ) {
+            obj(arg1);
+        }
+        template<typename A1, typename A2, typename CvItem >
+        static void internal_call( const Body& obj, A1& arg1, A2& arg2, void (Body::*)(CvItem, parallel_do_feeder<Item>&) const ) {
+            obj(arg1, arg2);
+        }
+
+    public:
+        template<typename A1, typename A2 >
+        static void call( const Body& obj, A1& arg1, A2& arg2 )
+        {
+            internal_call( obj, arg1, arg2, &Body::operator() );
+        }
+    };
+
+    //! For internal use only.
+    /** Executes one iteration of a do.
+        @ingroup algorithms */
+    template<typename Body, typename Item>
+    class do_iteration_task: public task
+    {
+        typedef parallel_do_feeder_impl<Body, Item> feeder_type;
+
+        Item my_value;
+        feeder_type& my_feeder;
+
+        do_iteration_task( const Item& value, feeder_type& feeder ) : 
+            my_value(value), my_feeder(feeder)
+        {}
+
+        /*override*/ 
+        task* execute()
+        {
+            parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, my_value, my_feeder);
+            return NULL;
+        }
+
+        template<typename Body_, typename Item_> friend class parallel_do_feeder_impl;
+    }; // class do_iteration_task
+
+    template<typename Iterator, typename Body, typename Item>
+    class do_iteration_task_iter: public task
+    {
+        typedef parallel_do_feeder_impl<Body, Item> feeder_type;
+
+        Iterator my_iter;
+        feeder_type& my_feeder;
+
+        do_iteration_task_iter( const Iterator& iter, feeder_type& feeder ) : 
+            my_iter(iter), my_feeder(feeder)
+        {}
+
+        /*override*/ 
+        task* execute()
+        {
+            parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, *my_iter, my_feeder);
+            return NULL;
+        }
+
+        template<typename Iterator_, typename Body_, typename Item_> friend class do_group_task_forward;    
+        template<typename Body_, typename Item_> friend class do_group_task_input;    
+        template<typename Iterator_, typename Body_, typename Item_> friend class do_task_iter;    
+    }; // class do_iteration_task_iter
+
+    //! For internal use only.
+    /** Implements new task adding procedure.
+        @ingroup algorithms **/
+    template<class Body, typename Item>
+    class parallel_do_feeder_impl : public parallel_do_feeder<Item>
+    {
+        /*override*/ 
+        void internal_add( const Item& item )
+        {
+            typedef do_iteration_task<Body, Item> iteration_type;
+
+            iteration_type& t = *new (task::self().allocate_additional_child_of(*my_barrier)) iteration_type(item, *this);
+
+            t.spawn( t );
+        }
+    public:
+        const Body* my_body;
+        empty_task* my_barrier;
+
+        parallel_do_feeder_impl()
+        {
+            my_barrier = new( task::allocate_root() ) empty_task();
+            __TBB_ASSERT(my_barrier, "root task allocation failed");
+        }
+
+#if __TBB_EXCEPTIONS
+        parallel_do_feeder_impl(tbb::task_group_context &context)
+        {
+            my_barrier = new( task::allocate_root(context) ) empty_task();
+            __TBB_ASSERT(my_barrier, "root task allocation failed");
+        }
+#endif
+
+        ~parallel_do_feeder_impl()
+        {
+            my_barrier->destroy(*my_barrier);
+        }
+    }; // class parallel_do_feeder_impl
+
+
+    //! For internal use only
+    /** Unpacks a block of iterations.
+        @ingroup algorithms */
+    
+    template<typename Iterator, typename Body, typename Item>
+    class do_group_task_forward: public task
+    {
+        static const size_t max_arg_size = 4;         
+
+        typedef parallel_do_feeder_impl<Body, Item> feeder_type;
+
+        feeder_type& my_feeder;
+        Iterator my_first;
+        size_t my_size;
+        
+        do_group_task_forward( Iterator first, size_t size, feeder_type& feeder ) 
+            : my_feeder(feeder), my_first(first), my_size(size)
+        {}
+
+        /*override*/ task* execute()
+        {
+            typedef do_iteration_task_iter<Iterator, Body, Item> iteration_type;
+            __TBB_ASSERT( my_size>0, NULL );
+            task_list list;
+            task* t; 
+            size_t k=0; 
+            for(;;) {
+                t = new( allocate_child() ) iteration_type( my_first, my_feeder );
+                ++my_first;
+                if( ++k==my_size ) break;
+                list.push_back(*t);
+            }
+            set_ref_count(int(k+1));
+            spawn(list);
+            spawn_and_wait_for_all(*t);
+            return NULL;
+        }
+
+        template<typename Iterator_, typename Body_, typename _Item> friend class do_task_iter;
+    }; // class do_group_task_forward
+
+    template<typename Body, typename Item>
+    class do_group_task_input: public task
+    {
+        static const size_t max_arg_size = 4;         
+        
+        typedef parallel_do_feeder_impl<Body, Item> feeder_type;
+
+        feeder_type& my_feeder;
+        size_t my_size;
+        aligned_space<Item, max_arg_size> my_arg;
+
+        do_group_task_input( feeder_type& feeder ) 
+            : my_feeder(feeder), my_size(0)
+        {}
+
+        /*override*/ task* execute()
+        {
+            typedef do_iteration_task_iter<Item*, Body, Item> iteration_type;
+            __TBB_ASSERT( my_size>0, NULL );
+            task_list list;
+            task* t; 
+            size_t k=0; 
+            for(;;) {
+                t = new( allocate_child() ) iteration_type( my_arg.begin() + k, my_feeder );
+                if( ++k==my_size ) break;
+                list.push_back(*t);
+            }
+            set_ref_count(int(k+1));
+            spawn(list);
+            spawn_and_wait_for_all(*t);
+            return NULL;
+        }
+
+        ~do_group_task_input(){
+            for( size_t k=0; k<my_size; ++k)
+                (my_arg.begin() + k)->~Item();
+        }
+
+        template<typename Iterator_, typename Body_, typename Item_> friend class do_task_iter;
+    }; // class do_group_task_input
+    
+    //! For internal use only.
+    /** Gets block of iterations and packages them into a do_group_task.
+        @ingroup algorithms */
+    template<typename Iterator, typename Body, typename Item>
+    class do_task_iter: public task
+    {
+        typedef parallel_do_feeder_impl<Body, Item> feeder_type;
+
+    public:
+        do_task_iter( Iterator first, Iterator last , feeder_type& feeder ) : 
+            my_first(first), my_last(last), my_feeder(feeder)
+        {}
+
+    private:
+        Iterator my_first;
+        Iterator my_last;
+        feeder_type& my_feeder;
+
+        /* Do not merge run(xxx) and run_xxx() methods. They are separated in order
+            to make sure that compilers will eliminate unused argument of type xxx
+            (that is will not put it on stack). The sole purpose of this argument 
+            is overload resolution.
+            
+            An alternative could be using template functions, but explicit specialization 
+            of member function templates is not supported for non specialized class 
+            templates. Besides template functions would always fall back to the least 
+            efficient variant (the one for input iterators) in case of iterators having 
+            custom tags derived from basic ones. */
+        /*override*/ task* execute()
+        {
+            typedef typename std::iterator_traits<Iterator>::iterator_category iterator_tag;
+            return run( (iterator_tag*)NULL );
+        }
+
+        /** This is the most restricted variant that operates on input iterators or
+            iterators with unknown tags (tags not derived from the standard ones). **/
+        inline task* run( void* ) { return run_for_input_iterator(); }
+        
+        task* run_for_input_iterator() {
+            typedef do_group_task_input<Body, Item> block_type;
+
+            block_type& t = *new( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(my_feeder);
+            size_t k=0; 
+            while( !(my_first == my_last) ) {
+                new (t.my_arg.begin() + k) Item(*my_first);
+                ++my_first;
+                if( ++k==block_type::max_arg_size ) {
+                    if ( !(my_first == my_last) )
+                        recycle_to_reexecute();
+                    break;
+                }
+            }
+            if( k==0 ) {
+                destroy(t);
+                return NULL;
+            } else {
+                t.my_size = k;
+                return &t;
+            }
+        }
+
+        inline task* run( std::forward_iterator_tag* ) { return run_for_forward_iterator(); }
+
+        task* run_for_forward_iterator() {
+            typedef do_group_task_forward<Iterator, Body, Item> block_type;
+
+            Iterator first = my_first;
+            size_t k=0; 
+            while( !(my_first==my_last) ) {
+                ++my_first;
+                if( ++k==block_type::max_arg_size ) {
+                    if ( !(my_first==my_last) )
+                        recycle_to_reexecute();
+                    break;
+                }
+            }
+            return k==0 ? NULL : new( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(first, k, my_feeder);
+        }
+        
+        inline task* run( std::random_access_iterator_tag* ) { return run_for_random_access_iterator(); }
+
+        task* run_for_random_access_iterator() {
+            typedef do_group_task_forward<Iterator, Body, Item> block_type;
+            typedef do_iteration_task_iter<Iterator, Body, Item> iteration_type;
+            
+            size_t k = static_cast<size_t>(my_last-my_first); 
+            if( k > block_type::max_arg_size ) {
+                Iterator middle = my_first + k/2;
+
+                empty_task& c = *new( allocate_continuation() ) empty_task;
+                do_task_iter& b = *new( c.allocate_child() ) do_task_iter(middle, my_last, my_feeder);
+                recycle_as_child_of(c);
+
+                my_last = middle;
+                c.set_ref_count(2);
+                c.spawn(b);
+                return this;
+            }else if( k != 0 ) {
+                task_list list;
+                task* t; 
+                size_t k1=0; 
+                for(;;) {
+                    t = new( allocate_child() ) iteration_type(my_first, my_feeder);
+                    ++my_first;
+                    if( ++k1==k ) break;
+                    list.push_back(*t);
+                }
+                set_ref_count(int(k+1));
+                spawn(list);
+                spawn_and_wait_for_all(*t);
+            }
+            return NULL;
+        }
+    }; // class do_task_iter
+
+    //! For internal use only.
+    /** Implements parallel iteration over a range.
+        @ingroup algorithms */
+    template<typename Iterator, typename Body, typename Item> 
+    void run_parallel_do( Iterator first, Iterator last, const Body& body
+#if __TBB_EXCEPTIONS
+        , task_group_context& context
+#endif
+        )
+    {
+        typedef do_task_iter<Iterator, Body, Item> root_iteration_task;
+#if __TBB_EXCEPTIONS
+        parallel_do_feeder_impl<Body, Item> feeder(context);
+#else
+        parallel_do_feeder_impl<Body, Item> feeder;
+#endif
+        feeder.my_body = &body;
+
+        root_iteration_task &t = *new( feeder.my_barrier->allocate_child() ) root_iteration_task(first, last, feeder);
+
+        feeder.my_barrier->set_ref_count(2);
+        feeder.my_barrier->spawn_and_wait_for_all(t);
+    }
+
+    //! For internal use only.
+    /** Detects types of Body's operator function arguments.
+        @ingroup algorithms **/
+    template<typename Iterator, typename Body, typename Item> 
+    void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item) const
+#if __TBB_EXCEPTIONS
+        , task_group_context& context 
+#endif // __TBB_EXCEPTIONS 
+        )
+    {
+        run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body
+#if __TBB_EXCEPTIONS
+            , context
+#endif // __TBB_EXCEPTIONS 
+            );
+    }
+
+    //! For internal use only.
+    /** Detects types of Body's operator function arguments.
+        @ingroup algorithms **/
+    template<typename Iterator, typename Body, typename Item, typename _Item> 
+    void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item, parallel_do_feeder<_Item>&) const
+#if __TBB_EXCEPTIONS
+        , task_group_context& context 
+#endif // __TBB_EXCEPTIONS
+        )
+    {
+        run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body
+#if __TBB_EXCEPTIONS
+            , context
+#endif // __TBB_EXCEPTIONS
+            );
+    }
+
+} // namespace internal
+//! @endcond
+
+
+/** \page parallel_do_body_req Requirements on parallel_do body
+    Class \c Body implementing the concept of parallel_do body must define:
+    - \code 
+        B::operator()( 
+                cv_item_type item,
+                parallel_do_feeder<item_type>& feeder
+        ) const
+        
+        OR
+
+        B::operator()( cv_item_type& item ) const
+      \endcode                                                      Process item. 
+                                                                    May be invoked concurrently  for the same \c this but different \c item.
+                                                        
+    - \code item_type( const item_type& ) \endcode 
+                                                                    Copy a work item.
+    - \code ~item_type() \endcode                            Destroy a work item
+**/
+
+/** \name parallel_do
+    See also requirements on \ref parallel_do_body_req "parallel_do Body". **/
+//@{
+//! Parallel iteration over a range, with optional addition of more work.
+/** @ingroup algorithms */
+template<typename Iterator, typename Body> 
+void parallel_do( Iterator first, Iterator last, const Body& body )
+{
+    if ( first == last )
+        return;
+#if __TBB_EXCEPTIONS
+    task_group_context context;
+#endif // __TBB_EXCEPTIONS
+    internal::select_parallel_do( first, last, body, &Body::operator()
+#if __TBB_EXCEPTIONS
+        , context
+#endif // __TBB_EXCEPTIONS
+        );
+}
+
+#if __TBB_EXCEPTIONS
+//! Parallel iteration over a range, with optional addition of more work and user-supplied context
+/** @ingroup algorithms */
+template<typename Iterator, typename Body> 
+void parallel_do( Iterator first, Iterator last, const Body& body, task_group_context& context  )
+{
+    if ( first == last )
+        return;
+    internal::select_parallel_do( first, last, body, &Body::operator(), context );
+}
+#endif // __TBB_EXCEPTIONS
+
+//@}
+
+} // namespace 
+
+#endif /* __TBB_parallel_do_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_for.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_for.h
new file mode 100644 (file)
index 0000000..8b733e0
--- /dev/null
@@ -0,0 +1,232 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_parallel_for_H
+#define __TBB_parallel_for_H
+
+#include "task.h"
+#include "partitioner.h"
+#include "blocked_range.h"
+#include <new>
+#include <stdexcept> // std::invalid_argument
+#include <string> // std::invalid_argument text
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+
+    //! Task type used in parallel_for
+    /** @ingroup algorithms */
+    template<typename Range, typename Body, typename Partitioner>
+    class start_for: public task {
+        Range my_range;
+        const Body my_body;
+        typename Partitioner::partition_type my_partition;
+        /*override*/ task* execute();
+
+        //! Constructor for root task.
+        start_for( const Range& range, const Body& body, Partitioner& partitioner ) :
+            my_range(range),    
+            my_body(body),
+            my_partition(partitioner)
+        {
+        }
+        //! Splitting constructor used to generate children.
+        /** this becomes left child.  Newly constructed object is right child. */
+        start_for( start_for& parent, split ) :
+            my_range(parent.my_range,split()),    
+            my_body(parent.my_body),
+            my_partition(parent.my_partition,split())
+        {
+            my_partition.set_affinity(*this);
+        }
+        //! Update affinity info, if any.
+        /*override*/ void note_affinity( affinity_id id ) {
+            my_partition.note_affinity( id );
+        }
+    public:
+        static void run(  const Range& range, const Body& body, const Partitioner& partitioner ) {
+            if( !range.empty() ) {
+#if !__TBB_EXCEPTIONS || TBB_JOIN_OUTER_TASK_GROUP
+                start_for& a = *new(task::allocate_root()) start_for(range,body,const_cast<Partitioner&>(partitioner));
+#else
+                // Bound context prevents exceptions from body to affect nesting or sibling algorithms,
+                // and allows users to handle exceptions safely by wrapping parallel_for in the try-block.
+                task_group_context context;
+                start_for& a = *new(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
+#endif /* __TBB_EXCEPTIONS && !TBB_JOIN_OUTER_TASK_GROUP */
+                task::spawn_root_and_wait(a);
+            }
+        }
+#if __TBB_EXCEPTIONS
+        static void run(  const Range& range, const Body& body, const Partitioner& partitioner, task_group_context& context ) {
+            if( !range.empty() ) {
+                start_for& a = *new(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
+                task::spawn_root_and_wait(a);
+            }
+        }
+#endif /* __TBB_EXCEPTIONS */
+    };
+
+    template<typename Range, typename Body, typename Partitioner>
+    task* start_for<Range,Body,Partitioner>::execute() {
+        if( !my_range.is_divisible() || my_partition.should_execute_range(*this) ) {
+            my_body( my_range );
+            return my_partition.continue_after_execute_range(*this); 
+        } else {
+            empty_task& c = *new( this->allocate_continuation() ) empty_task;
+            recycle_as_child_of(c);
+            c.set_ref_count(2);
+            bool delay = my_partition.decide_whether_to_delay();
+            start_for& b = *new( c.allocate_child() ) start_for(*this,split());
+            my_partition.spawn_or_delay(delay,*this,b);
+            return this;
+        }
+    } 
+} // namespace internal
+//! @endcond
+
+
+// Requirements on Range concept are documented in blocked_range.h
+
+/** \page parallel_for_body_req Requirements on parallel_for body
+    Class \c Body implementing the concept of parallel_for body must define:
+    - \code Body::Body( const Body& ); \endcode                 Copy constructor
+    - \code Body::~Body(); \endcode                             Destructor
+    - \code void Body::operator()( Range& r ) const; \endcode   Function call operator applying the body to range \c r.
+**/
+
+/** \name parallel_for
+    See also requirements on \ref range_req "Range" and \ref parallel_for_body_req "parallel_for Body". **/
+//@{
+
+//! Parallel iteration over range with default partitioner. 
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_for( const Range& range, const Body& body ) {
+    internal::start_for<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());
+}
+
+//! Parallel iteration over range with simple partitioner.
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_for( const Range& range, const Body& body, const simple_partitioner& partitioner ) {
+    internal::start_for<Range,Body,simple_partitioner>::run(range,body,partitioner);
+}
+
+//! Parallel iteration over range with auto_partitioner.
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_for( const Range& range, const Body& body, const auto_partitioner& partitioner ) {
+    internal::start_for<Range,Body,auto_partitioner>::run(range,body,partitioner);
+}
+
+//! Parallel iteration over range with affinity_partitioner.
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_for( const Range& range, const Body& body, affinity_partitioner& partitioner ) {
+    internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);
+}
+
+#if __TBB_EXCEPTIONS
+//! Parallel iteration over range with simple partitioner and user-supplied context.
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_for( const Range& range, const Body& body, const simple_partitioner& partitioner, task_group_context& context ) {
+    internal::start_for<Range,Body,simple_partitioner>::run(range, body, partitioner, context);
+}
+
+//! Parallel iteration over range with auto_partitioner and user-supplied context.
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_for( const Range& range, const Body& body, const auto_partitioner& partitioner, task_group_context& context ) {
+    internal::start_for<Range,Body,auto_partitioner>::run(range, body, partitioner, context);
+}
+
+//! Parallel iteration over range with affinity_partitioner and user-supplied context.
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_for( const Range& range, const Body& body, affinity_partitioner& partitioner, task_group_context& context ) {
+    internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner, context);
+}
+#endif /* __TBB_EXCEPTIONS */
+//@}
+
+//! @cond INTERNAL
+namespace internal {
+    //! Calls the function with values from range [begin, end) with a step provided
+template<typename Function, typename Index>
+class parallel_for_body : internal::no_assign {
+    Function &my_func;
+    const Index my_begin;
+    const Index my_step; 
+public:
+    parallel_for_body( Function& _func, Index& _begin, Index& _step) 
+        : my_func(_func), my_begin(_begin), my_step(_step) {}
+    
+    void operator()( tbb::blocked_range<Index>& r ) const {
+        for( Index i = r.begin(),  k = my_begin + i * my_step; i < r.end(); i++, k = k + my_step)
+            my_func( k );
+    }
+};
+} // namespace internal
+//! @endcond
+
+namespace strict_ppl {
+
+//@{
+//! Parallel iteration over a range of integers with a step provided
+template <typename Index, typename Function>
+Function parallel_for(Index first, Index last, Index step, Function f) {
+    tbb::task_group_context context;
+    return parallel_for(first, last, step, f, context);
+}
+template <typename Index, typename Function>
+Function parallel_for(Index first, Index last, Index step, Function f, tbb::task_group_context &context) {
+    if (step <= 0 ) throw std::invalid_argument("step should be positive");
+
+    if (last > first) {
+        Index end = (last - first) / step;
+        if (first + end * step < last) end++;
+        tbb::blocked_range<Index> range(static_cast<Index>(0), end);
+        internal::parallel_for_body<Function, Index> body(f, first, step);
+        tbb::parallel_for(range, body, tbb::auto_partitioner(), context);
+    }
+    return f;
+}
+//@}
+
+} // namespace strict_ppl
+
+using strict_ppl::parallel_for;
+
+} // namespace tbb
+
+#endif /* __TBB_parallel_for_H */
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_for_each.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_for_each.h
new file mode 100644 (file)
index 0000000..fa67b6c
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_parallel_for_each_H
+#define __TBB_parallel_for_each_H
+
+#include "parallel_do.h"
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+    // The class calls user function in operator()
+    template <typename Function, typename Iterator>
+    class parallel_for_each_body : internal::no_assign {
+        Function &my_func;
+    public:
+        parallel_for_each_body(Function &_func) : my_func(_func) {}
+        parallel_for_each_body(const parallel_for_each_body<Function, Iterator> &_caller) : my_func(_caller.my_func) {}
+
+        void operator() ( typename std::iterator_traits<Iterator>::value_type value ) const {
+            my_func(value);
+        }
+    };
+} // namespace internal
+//! @endcond
+
+/** \name parallel_for_each
+    **/
+//@{
+//! Calls function f for all items from [first, last) interval using user-supplied context
+/** @ingroup algorithms */
+template<typename InputIterator, typename Function>
+Function parallel_for_each(InputIterator first, InputIterator last, Function f, task_group_context &context) {
+    internal::parallel_for_each_body<Function, InputIterator> body(f);
+
+    tbb::parallel_do (first, last, body, context);
+    return f;
+}
+
+//! Uses default context
+template<typename InputIterator, typename Function>
+Function parallel_for_each(InputIterator first, InputIterator last, Function f) {
+    internal::parallel_for_each_body<Function, InputIterator> body(f);
+
+    tbb::parallel_do (first, last, body);
+    return f;
+}
+
+//@}
+
+} // namespace
+
+#endif /* __TBB_parallel_for_each_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_invoke.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_invoke.h
new file mode 100644 (file)
index 0000000..fb425c6
--- /dev/null
@@ -0,0 +1,333 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_parallel_invoke_H
+#define __TBB_parallel_invoke_H
+
+#include "task.h"
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+    // Simple task object, executing user method
+    template<typename function>
+    class function_invoker : public task{
+    public:
+        function_invoker(function& _function) : my_function(_function) {}
+    private:
+        function &my_function;
+        /*override*/
+        task* execute()
+        {
+            my_function();
+            return NULL;
+        }
+    };
+
+    // The class spawns two or three child tasks
+    template <size_t N, typename function1, typename function2, typename function3>
+    class spawner : public task {
+    private:
+        function1& my_func1;
+        function2& my_func2;
+        function3& my_func3;
+        bool is_recycled;
+
+        task* execute (){
+            if(is_recycled){
+                return NULL;
+            }else{
+                __TBB_ASSERT(N==2 || N==3, "Number of arguments passed to spawner is wrong");
+                set_ref_count(N);
+                recycle_as_safe_continuation();
+                internal::function_invoker<function2>* invoker2 = new (allocate_child()) internal::function_invoker<function2>(my_func2);
+                __TBB_ASSERT(invoker2, "Child task allocation failed");
+                spawn(*invoker2);
+                size_t n = N; // To prevent compiler warnings
+                if (n>2) {
+                    internal::function_invoker<function3>* invoker3 = new (allocate_child()) internal::function_invoker<function3>(my_func3);
+                    __TBB_ASSERT(invoker3, "Child task allocation failed");
+                    spawn(*invoker3);
+                }
+                my_func1();
+                is_recycled = true;
+                return NULL;
+            }
+        } // execute
+
+    public:
+        spawner(function1& _func1, function2& _func2, function3& _func3) : my_func1(_func1), my_func2(_func2), my_func3(_func3), is_recycled(false) {}
+    };
+
+    // Creates and spawns child tasks
+    class parallel_invoke_helper : public empty_task {
+    public:
+        // Dummy functor class
+        class parallel_invoke_noop {
+        public:
+            void operator() () const {}
+        };
+        // Creates a helper object with user-defined number of children expected
+        parallel_invoke_helper(int number_of_children)
+        {
+            set_ref_count(number_of_children + 1);
+        }
+        // Adds child task and spawns it
+        template <typename function>
+        void add_child (function &_func)
+        {
+            internal::function_invoker<function>* invoker = new (allocate_child()) internal::function_invoker<function>(_func);
+            __TBB_ASSERT(invoker, "Child task allocation failed");
+            spawn(*invoker);
+        }
+
+        // Adds a task with multiple child tasks and spawns it
+        // two arguments
+        template <typename function1, typename function2>
+        void add_children (function1& _func1, function2& _func2)
+        {
+            // The third argument is dummy, it is ignored actually.
+            parallel_invoke_noop noop;
+            internal::spawner<2, function1, function2, parallel_invoke_noop>& sub_root = *new(allocate_child())internal::spawner<2, function1, function2, parallel_invoke_noop>(_func1, _func2, noop);
+            spawn(sub_root);
+        }
+        // three arguments
+        template <typename function1, typename function2, typename function3>
+        void add_children (function1& _func1, function2& _func2, function3& _func3)
+        {
+            internal::spawner<3, function1, function2, function3>& sub_root = *new(allocate_child())internal::spawner<3, function1, function2, function3>(_func1, _func2, _func3);
+            spawn(sub_root);
+        }
+
+        // Waits for all child tasks
+        template <typename F0>
+        void run_and_finish(F0& f0)
+        {
+            internal::function_invoker<F0>* invoker = new (allocate_child()) internal::function_invoker<F0>(f0);
+            __TBB_ASSERT(invoker, "Child task allocation failed");
+            spawn_and_wait_for_all(*invoker);
+        }
+    };
+    // The class destroys root if exception occured as well as in normal case
+    class parallel_invoke_cleaner: internal::no_copy { 
+    public:
+        parallel_invoke_cleaner(int number_of_children, tbb::task_group_context& context) : root(*new(task::allocate_root(context)) internal::parallel_invoke_helper(number_of_children))
+        {}
+        ~parallel_invoke_cleaner(){
+            root.destroy(root);
+        }
+        internal::parallel_invoke_helper& root;
+    };
+} // namespace internal
+//! @endcond
+
+/** \name parallel_invoke
+    **/
+//@{
+//! Executes a list of tasks in parallel and waits for all tasks to complete.
+/** @ingroup algorithms */
+
+// parallel_invoke with user-defined context
+// two arguments
+template<typename F0, typename F1 >
+void parallel_invoke(F0 f0, F1 f1, tbb::task_group_context& context) {
+    internal::parallel_invoke_cleaner cleaner(2, context);
+    internal::parallel_invoke_helper& root = cleaner.root;
+
+    root.add_child(f1);
+
+    root.run_and_finish(f0);
+}
+
+// three arguments
+template<typename F0, typename F1, typename F2 >
+void parallel_invoke(F0 f0, F1 f1, F2 f2, tbb::task_group_context& context) {
+    internal::parallel_invoke_cleaner cleaner(3, context);
+    internal::parallel_invoke_helper& root = cleaner.root;
+
+    root.add_child(f2);
+    root.add_child(f1);
+
+    root.run_and_finish(f0);
+}
+
+// four arguments
+template<typename F0, typename F1, typename F2, typename F3>
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, tbb::task_group_context& context) {
+    internal::parallel_invoke_cleaner cleaner(4, context);
+    internal::parallel_invoke_helper& root = cleaner.root;
+
+    root.add_child(f3);
+    root.add_child(f2);
+    root.add_child(f1);
+
+    root.run_and_finish(f0);
+}
+
+// five arguments
+template<typename F0, typename F1, typename F2, typename F3, typename F4 >
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, tbb::task_group_context& context) {
+    internal::parallel_invoke_cleaner cleaner(3, context);
+    internal::parallel_invoke_helper& root = cleaner.root;
+
+    root.add_children(f4, f3);
+    root.add_children(f2, f1);
+
+    root.run_and_finish(f0);
+}
+
+// six arguments
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5 >
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, tbb::task_group_context& context) {
+    internal::parallel_invoke_cleaner cleaner(3, context);
+    internal::parallel_invoke_helper& root = cleaner.root;
+
+    root.add_children(f5, f4, f3);
+    root.add_children(f2, f1);
+
+    root.run_and_finish(f0);
+}
+
+// seven arguments
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6 >
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, tbb::task_group_context& context) {
+    internal::parallel_invoke_cleaner cleaner(3, context);
+    internal::parallel_invoke_helper& root = cleaner.root;
+
+    root.add_children(f6, f5, f4);
+    root.add_children(f3, f2, f1);
+
+    root.run_and_finish(f0);
+}
+
+// eight arguments
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6,
+    typename F7>
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, tbb::task_group_context& context) {
+    internal::parallel_invoke_cleaner cleaner(4, context);
+    internal::parallel_invoke_helper& root = cleaner.root;
+
+    root.add_children(f7, f6, f5);
+    root.add_children(f4, f3);
+    root.add_children(f2, f1);
+
+    root.run_and_finish(f0);
+}
+
+// nine arguments
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6,
+        typename F7, typename F8>
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, tbb::task_group_context& context) {
+    internal::parallel_invoke_cleaner cleaner(4, context);
+    internal::parallel_invoke_helper& root = cleaner.root;
+
+    root.add_children(f8, f7, f6);
+    root.add_children(f5, f4, f3);
+    root.add_children(f2, f1);
+
+    root.run_and_finish(f0);
+}
+
+// ten arguments
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6,
+        typename F7, typename F8, typename F9>
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9, tbb::task_group_context& context) {
+    internal::parallel_invoke_cleaner cleaner(4, context);
+    internal::parallel_invoke_helper& root = cleaner.root;
+
+    root.add_children(f9, f8, f7);
+    root.add_children(f6, f5, f4);
+    root.add_children(f3, f2, f1);
+
+    root.run_and_finish(f0);
+}
+
+// two arguments
+template<typename F0, typename F1>
+void parallel_invoke(F0 f0, F1 f1) {
+    task_group_context context;
+    parallel_invoke<F0, F1>(f0, f1, context);
+}
+// three arguments
+template<typename F0, typename F1, typename F2>
+void parallel_invoke(F0 f0, F1 f1, F2 f2) {
+    task_group_context context;
+    parallel_invoke<F0, F1, F2>(f0, f1, f2, context);
+}
+// four arguments
+template<typename F0, typename F1, typename F2, typename F3 >
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3) {
+    task_group_context context;
+    parallel_invoke<F0, F1, F2, F3>(f0, f1, f2, f3, context);
+}
+// five arguments
+template<typename F0, typename F1, typename F2, typename F3, typename F4>
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4) {
+    task_group_context context;
+    parallel_invoke<F0, F1, F2, F3, F4>(f0, f1, f2, f3, f4, context);
+}
+// six arguments
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5>
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5) {
+    task_group_context context;
+    parallel_invoke<F0, F1, F2, F3, F4, F5>(f0, f1, f2, f3, f4, f5, context);
+}
+// seven arguments
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6>
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6) {
+    task_group_context context;
+    parallel_invoke<F0, F1, F2, F3, F4, F5, F6>(f0, f1, f2, f3, f4, f5, f6, context);
+}
+// eigth arguments
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6,
+        typename F7>
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7) {
+    task_group_context context;
+    parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7>(f0, f1, f2, f3, f4, f5, f6, f7, context);
+}
+// nine arguments
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6,
+        typename F7, typename F8>
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8) {
+    task_group_context context;
+    parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8>(f0, f1, f2, f3, f4, f5, f6, f7, f8, context);
+}
+// ten arguments
+template<typename F0, typename F1, typename F2, typename F3, typename F4, typename F5, typename F6,
+        typename F7, typename F8, typename F9>
+void parallel_invoke(F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7, F8 f8, F9 f9) {
+    task_group_context context;
+    parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8, F9>(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, context);
+}
+
+//@}
+
+} // namespace
+
+#endif /* __TBB_parallel_invoke_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_reduce.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_reduce.h
new file mode 100644 (file)
index 0000000..0300173
--- /dev/null
@@ -0,0 +1,387 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_parallel_reduce_H
+#define __TBB_parallel_reduce_H
+
+#include "task.h"
+#include "aligned_space.h"
+#include "partitioner.h"
+#include <new>
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+
+    //! ITT instrumented routine that stores src into location pointed to by dst.
+    void __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3( void* dst, void* src );
+
+    //! ITT instrumented routine that loads pointer from location pointed to by src.
+    void* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3( const void* src );
+
+    template<typename T> inline void parallel_reduce_store_body( T*& dst, T* src ) {
+#if TBB_USE_THREADING_TOOLS
+        itt_store_pointer_with_release_v3(&dst,src);
+#else
+        __TBB_store_with_release(dst,src);
+#endif /* TBB_USE_THREADING_TOOLS */
+    }
+
+    template<typename T> inline T* parallel_reduce_load_body( T*& src ) {
+#if TBB_USE_THREADING_TOOLS
+        return static_cast<T*>(itt_load_pointer_with_acquire_v3(&src));
+#else
+        return __TBB_load_with_acquire(src);
+#endif /* TBB_USE_THREADING_TOOLS */
+    }
+
+    //! 0 if root, 1 if a left child, 2 if a right child.
+    /** Represented as a char, not enum, for compactness. */
+    typedef char reduction_context;
+
+    //! Task type use to combine the partial results of parallel_reduce with affinity_partitioner.
+    /** @ingroup algorithms */
+    template<typename Body>
+    class finish_reduce: public task {
+        //! Pointer to body, or NULL if the left child has not yet finished. 
+        Body* my_body;
+        bool has_right_zombie;
+        const reduction_context my_context;
+        aligned_space<Body,1> zombie_space;
+        finish_reduce( char context ) : 
+            my_body(NULL),
+            has_right_zombie(false),
+            my_context(context)
+        {
+        }
+        task* execute() {
+            if( has_right_zombie ) {
+                // Right child was stolen.
+                Body* s = zombie_space.begin();
+                my_body->join( *s );
+                s->~Body();
+            }
+            if( my_context==1 ) 
+                parallel_reduce_store_body( static_cast<finish_reduce*>(parent())->my_body, my_body );
+            return NULL;
+        }       
+        template<typename Range,typename Body_, typename Partitioner>
+        friend class start_reduce;
+    };
+
+    //! Task type used to split the work of parallel_reduce with affinity_partitioner.
+    /** @ingroup algorithms */
+    template<typename Range, typename Body, typename Partitioner>
+    class start_reduce: public task {
+        typedef finish_reduce<Body> finish_type;
+        Body* my_body;
+        Range my_range;
+        typename Partitioner::partition_type my_partition;
+        reduction_context my_context;
+        /*override*/ task* execute();
+        template<typename Body_>
+        friend class finish_reduce;
+    
+        //! Constructor used for root task
+        start_reduce( const Range& range, Body* body, Partitioner& partitioner ) :
+            my_body(body),
+            my_range(range),
+            my_partition(partitioner),
+            my_context(0)
+        {
+        }
+        //! Splitting constructor used to generate children.
+        /** this becomes left child.  Newly constructed object is right child. */
+        start_reduce( start_reduce& parent, split ) :
+            my_body(parent.my_body),
+            my_range(parent.my_range,split()),
+            my_partition(parent.my_partition,split()),
+            my_context(2)
+        {
+            my_partition.set_affinity(*this);
+            parent.my_context = 1;
+        }
+        //! Update affinity info, if any
+        /*override*/ void note_affinity( affinity_id id ) {
+            my_partition.note_affinity( id );
+        }
+
+public:
+        static void run( const Range& range, Body& body, Partitioner& partitioner ) {
+            if( !range.empty() ) {
+#if !__TBB_EXCEPTIONS || TBB_JOIN_OUTER_TASK_GROUP
+                task::spawn_root_and_wait( *new(task::allocate_root()) start_reduce(range,&body,partitioner) );
+#else
+                // Bound context prevents exceptions from body to affect nesting or sibling algorithms,
+                // and allows users to handle exceptions safely by wrapping parallel_for in the try-block.
+                task_group_context context;
+                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
+#endif /* __TBB_EXCEPTIONS && !TBB_JOIN_OUTER_TASK_GROUP */
+            }
+        }
+#if __TBB_EXCEPTIONS
+        static void run( const Range& range, Body& body, Partitioner& partitioner, task_group_context& context ) {
+            if( !range.empty() ) 
+                task::spawn_root_and_wait( *new(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
+        }
+#endif /* __TBB_EXCEPTIONS */
+    };
+
+    template<typename Range, typename Body, typename Partitioner>
+    task* start_reduce<Range,Body,Partitioner>::execute() {
+        if( my_context==2 ) {
+            finish_type* p = static_cast<finish_type*>(parent() );
+            if( !parallel_reduce_load_body(p->my_body) ) {
+                my_body = new( p->zombie_space.begin() ) Body(*my_body,split());
+                p->has_right_zombie = true;
+            } 
+        }
+        if( !my_range.is_divisible() || my_partition.should_execute_range(*this) ) {
+            (*my_body)( my_range );
+            if( my_context==1 ) 
+                parallel_reduce_store_body(static_cast<finish_type*>(parent())->my_body, my_body );
+            return my_partition.continue_after_execute_range(*this);
+        } else {
+            finish_type& c = *new( allocate_continuation()) finish_type(my_context);
+            recycle_as_child_of(c);
+            c.set_ref_count(2);    
+            bool delay = my_partition.decide_whether_to_delay();
+            start_reduce& b = *new( c.allocate_child() ) start_reduce(*this,split());
+            my_partition.spawn_or_delay(delay,*this,b);
+            return this;
+        }
+    } 
+
+    //! Auxiliary class for parallel_reduce; for internal use only.
+    /** The adaptor class that implements \ref parallel_reduce_body_req "parallel_reduce Body"
+        using given \ref parallel_reduce_lambda_req "anonymous function objects".
+     **/
+    /** @ingroup algorithms */
+    template<typename Range, typename Value, typename RealBody, typename Reduction>
+    class lambda_reduce_body {
+
+//FIXME: decide if my_real_body, my_reduction, and identity_element should be copied or referenced
+//       (might require some performance measurements)
+
+        const Value&     identity_element;
+        const RealBody&  my_real_body;
+        const Reduction& my_reduction;
+        Value            my_value;
+        lambda_reduce_body& operator= ( const lambda_reduce_body& other );
+    public:
+        lambda_reduce_body( const Value& identity, const RealBody& body, const Reduction& reduction )
+            : identity_element(identity)
+            , my_real_body(body)
+            , my_reduction(reduction)
+            , my_value(identity)
+        { }
+        lambda_reduce_body( const lambda_reduce_body& other )
+            : identity_element(other.identity_element)
+            , my_real_body(other.my_real_body)
+            , my_reduction(other.my_reduction)
+            , my_value(other.my_value)
+        { }
+        lambda_reduce_body( lambda_reduce_body& other, tbb::split )
+            : identity_element(other.identity_element)
+            , my_real_body(other.my_real_body)
+            , my_reduction(other.my_reduction)
+            , my_value(other.identity_element)
+        { }
+        void operator()(Range& range) {
+            my_value = my_real_body(range, const_cast<const Value&>(my_value));
+        }
+        void join( lambda_reduce_body& rhs ) {
+            my_value = my_reduction(const_cast<const Value&>(my_value), const_cast<const Value&>(rhs.my_value));
+        }
+        Value result() const {
+            return my_value;
+        }
+    };
+
+} // namespace internal
+//! @endcond
+
+// Requirements on Range concept are documented in blocked_range.h
+
+/** \page parallel_reduce_body_req Requirements on parallel_reduce body
+    Class \c Body implementing the concept of parallel_reduce body must define:
+    - \code Body::Body( Body&, split ); \endcode        Splitting constructor.
+                                                        Must be able to run concurrently with operator() and method \c join
+    - \code Body::~Body(); \endcode                     Destructor
+    - \code void Body::operator()( Range& r ); \endcode Function call operator applying body to range \c r
+                                                        and accumulating the result
+    - \code void Body::join( Body& b ); \endcode        Join results. 
+                                                        The result in \c b should be merged into the result of \c this
+**/
+
+/** \page parallel_reduce_lambda_req Requirements on parallel_reduce anonymous function objects (lambda functions)
+    TO BE DOCUMENTED
+**/
+
+/** \name parallel_reduce
+    See also requirements on \ref range_req "Range" and \ref parallel_reduce_body_req "parallel_reduce Body". **/
+//@{
+
+//! Parallel iteration with reduction and default partitioner.
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_reduce( const Range& range, Body& body ) {
+    internal::start_reduce<Range,Body, const __TBB_DEFAULT_PARTITIONER>::run( range, body, __TBB_DEFAULT_PARTITIONER() );
+}
+
+//! Parallel iteration with reduction and simple_partitioner
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_reduce( const Range& range, Body& body, const simple_partitioner& partitioner ) {
+    internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner );
+}
+
+//! Parallel iteration with reduction and auto_partitioner
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_reduce( const Range& range, Body& body, const auto_partitioner& partitioner ) {
+    internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner );
+}
+
+//! Parallel iteration with reduction and affinity_partitioner
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_reduce( const Range& range, Body& body, affinity_partitioner& partitioner ) {
+    internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner );
+}
+
+#if __TBB_EXCEPTIONS
+//! Parallel iteration with reduction, simple partitioner and user-supplied context.
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_reduce( const Range& range, Body& body, const simple_partitioner& partitioner, task_group_context& context ) {
+    internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner, context );
+}
+
+//! Parallel iteration with reduction, auto_partitioner and user-supplied context
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_reduce( const Range& range, Body& body, const auto_partitioner& partitioner, task_group_context& context ) {
+    internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner, context );
+}
+
+//! Parallel iteration with reduction, affinity_partitioner and user-supplied context
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_reduce( const Range& range, Body& body, affinity_partitioner& partitioner, task_group_context& context ) {
+    internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner, context );
+}
+#endif /* __TBB_EXCEPTIONS */
+
+/** parallel_reduce overloads that work with anonymous function objects
+    (see also \ref parallel_reduce_lambda_req "requirements on parallel_reduce anonymous function objects"). **/
+
+//! Parallel iteration with reduction and default partitioner.
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction ) {
+    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const __TBB_DEFAULT_PARTITIONER>
+                          ::run(range, body, __TBB_DEFAULT_PARTITIONER() );
+    return body.result();
+}
+
+//! Parallel iteration with reduction and simple_partitioner.
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+                       const simple_partitioner& partitioner ) {
+    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const simple_partitioner>
+                          ::run(range, body, partitioner );
+    return body.result();
+}
+
+//! Parallel iteration with reduction and auto_partitioner
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+                       const auto_partitioner& partitioner ) {
+    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const auto_partitioner>
+                          ::run( range, body, partitioner );
+    return body.result();
+}
+
+//! Parallel iteration with reduction and affinity_partitioner
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+                       affinity_partitioner& partitioner ) {
+    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,affinity_partitioner>
+                                        ::run( range, body, partitioner );
+    return body.result();
+}
+
+#if __TBB_EXCEPTIONS
+//! Parallel iteration with reduction, simple partitioner and user-supplied context.
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+                       const simple_partitioner& partitioner, task_group_context& context ) {
+    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const simple_partitioner>
+                          ::run( range, body, partitioner, context );
+    return body.result();
+}
+
+//! Parallel iteration with reduction, auto_partitioner and user-supplied context
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+                       const auto_partitioner& partitioner, task_group_context& context ) {
+    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,const auto_partitioner>
+                          ::run( range, body, partitioner, context );
+    return body.result();
+}
+
+//! Parallel iteration with reduction, affinity_partitioner and user-supplied context
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+                       affinity_partitioner& partitioner, task_group_context& context ) {
+    internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+    internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,affinity_partitioner>
+                                        ::run( range, body, partitioner, context );
+    return body.result();
+}
+#endif /* __TBB_EXCEPTIONS */
+//@}
+
+} // namespace tbb
+
+#endif /* __TBB_parallel_reduce_H */
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_scan.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_scan.h
new file mode 100644 (file)
index 0000000..199765f
--- /dev/null
@@ -0,0 +1,470 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_parallel_scan_H
+#define __TBB_parallel_scan_H
+
+#include "task.h"
+#include "aligned_space.h"
+#include <new>
+#include "partitioner.h"
+
+namespace tbb {
+
+//! Used to indicate that the initial scan is being performed.
+/** @ingroup algorithms */
+struct pre_scan_tag {
+    static bool is_final_scan() {return false;}
+};
+
+//! Used to indicate that the final scan is being performed.
+/** @ingroup algorithms */
+struct final_scan_tag {
+    static bool is_final_scan() {return true;}
+};
+
+//! @cond INTERNAL
+namespace internal {
+
+    //! Performs final scan for a leaf 
+    /** @ingroup algorithms */
+    template<typename Range, typename Body>
+    class final_sum: public task {
+    public:
+        Body body;
+    private:
+        aligned_space<Range,1> range;
+        //! Where to put result of last subrange, or NULL if not last subrange.
+        Body* stuff_last;
+    public:
+        final_sum( Body& body_ ) :
+            body(body_,split())
+        {
+            poison_pointer(stuff_last);
+        }
+        ~final_sum() {
+            range.begin()->~Range();
+        }     
+        void finish_construction( const Range& range_, Body* stuff_last_ ) {
+            new( range.begin() ) Range(range_);
+            stuff_last = stuff_last_;
+        }
+    private:
+        /*override*/ task* execute() {
+            body( *range.begin(), final_scan_tag() );
+            if( stuff_last )
+                stuff_last->assign(body);
+            return NULL;
+        }
+    };       
+
+    //! Split work to be done in the scan.
+    /** @ingroup algorithms */
+    template<typename Range, typename Body>
+    class sum_node: public task {
+        typedef final_sum<Range,Body> final_sum_type;
+    public:
+        final_sum_type *incoming; 
+        final_sum_type *body;
+        Body *stuff_last;
+    private:
+        final_sum_type *left_sum;
+        sum_node *left;
+        sum_node *right;     
+        bool left_is_final;
+        Range range;
+        sum_node( const Range range_, bool left_is_final_ ) : 
+            left_sum(NULL), 
+            left(NULL), 
+            right(NULL), 
+            left_is_final(left_is_final_), 
+            range(range_)
+        {
+            // Poison fields that will be set by second pass.
+            poison_pointer(body);
+            poison_pointer(incoming);
+        }
+        task* create_child( const Range& range, final_sum_type& f, sum_node* n, final_sum_type* incoming, Body* stuff_last ) {
+            if( !n ) {
+                f.recycle_as_child_of( *this );
+                f.finish_construction( range, stuff_last );
+                return &f;
+            } else {
+                n->body = &f;
+                n->incoming = incoming;
+                n->stuff_last = stuff_last;
+                return n;
+            }
+        }
+        /*override*/ task* execute() {
+            if( body ) {
+                if( incoming )
+                    left_sum->body.reverse_join( incoming->body );
+                recycle_as_continuation();
+                sum_node& c = *this;
+                task* b = c.create_child(Range(range,split()),*left_sum,right,left_sum,stuff_last);
+                task* a = left_is_final ? NULL : c.create_child(range,*body,left,incoming,NULL);
+                set_ref_count( (a!=NULL)+(b!=NULL) );
+                body = NULL; 
+                if( a ) spawn(*b);
+                else a = b;
+                return a;
+            } else {
+                return NULL;
+            }
+        }
+        template<typename Range_,typename Body_,typename Partitioner_>
+        friend class start_scan;
+
+        template<typename Range_,typename Body_>
+        friend class finish_scan;
+    };
+
+    //! Combine partial results
+    /** @ingroup algorithms */
+    template<typename Range, typename Body>
+    class finish_scan: public task {
+        typedef sum_node<Range,Body> sum_node_type;
+        typedef final_sum<Range,Body> final_sum_type;
+        final_sum_type** const sum;
+        sum_node_type*& return_slot;
+    public:
+        final_sum_type* right_zombie;
+        sum_node_type& result;
+
+        /*override*/ task* execute() {
+            __TBB_ASSERT( result.ref_count()==(result.left!=NULL)+(result.right!=NULL), NULL );
+            if( result.left )
+                result.left_is_final = false;
+            if( right_zombie && sum ) 
+                ((*sum)->body).reverse_join(result.left_sum->body);
+            __TBB_ASSERT( !return_slot, NULL );
+            if( right_zombie || result.right ) {
+                return_slot = &result;
+            } else {
+                destroy( result );
+            }
+            if( right_zombie && !sum && !result.right ) {
+                destroy(*right_zombie);
+                right_zombie = NULL;
+            }
+            return NULL;
+        }
+
+        finish_scan( sum_node_type*& return_slot_, final_sum_type** sum_, sum_node_type& result_ ) : 
+            sum(sum_),
+            return_slot(return_slot_), 
+            right_zombie(NULL),
+            result(result_)
+        {
+            __TBB_ASSERT( !return_slot, NULL );
+        }
+        ~finish_scan(){
+#if __TBB_EXCEPTIONS
+            if (is_cancelled()) {
+                if (result.ref_count() == 0) destroy(result);
+                if (right_zombie) destroy(*right_zombie);
+            }
+#endif
+        }
+    };
+
+    //! Initial task to split the work
+    /** @ingroup algorithms */
+    template<typename Range, typename Body, typename Partitioner=simple_partitioner>
+    class start_scan: public task {
+        typedef sum_node<Range,Body> sum_node_type;
+        typedef final_sum<Range,Body> final_sum_type;
+        final_sum_type* body;
+        /** Non-null if caller is requesting total. */
+        final_sum_type** sum; 
+        sum_node_type** return_slot;
+        /** Null if computing root. */
+        sum_node_type* parent_sum;
+        bool is_final;
+        bool is_right_child;
+        Range range;
+        typename Partitioner::partition_type partition;
+        /*override*/ task* execute();
+#if __TBB_EXCEPTIONS
+        tbb::task_group_context &my_context;
+#endif
+    public:
+        start_scan( sum_node_type*& return_slot_, start_scan& parent, sum_node_type* parent_sum_ 
+#if __TBB_EXCEPTIONS
+            , tbb::task_group_context &_context
+#endif
+            ) :
+            body(parent.body),
+            sum(parent.sum),
+            return_slot(&return_slot_),
+            parent_sum(parent_sum_),
+            is_final(parent.is_final),
+            is_right_child(false),
+            range(parent.range,split()),
+            partition(parent.partition,split())
+#if __TBB_EXCEPTIONS
+        , my_context (_context)
+#endif
+        {
+            __TBB_ASSERT( !*return_slot, NULL );
+        }
+
+        start_scan( sum_node_type*& return_slot_, const Range& range_, final_sum_type& body_, const Partitioner& partitioner_
+#if __TBB_EXCEPTIONS
+        , tbb::task_group_context &_context
+#endif
+            ) :
+            body(&body_),
+            sum(NULL),
+            return_slot(&return_slot_),
+            parent_sum(NULL),
+            is_final(true),
+            is_right_child(false),
+            range(range_),
+            partition(partitioner_)
+#if __TBB_EXCEPTIONS
+            , my_context (_context)
+#endif
+        {
+            __TBB_ASSERT( !*return_slot, NULL );
+        }
+
+        static void run(  const Range& range, Body& body, const Partitioner& partitioner 
+#if __TBB_EXCEPTIONS
+        , task_group_context& context
+#endif
+            ) {
+            if( !range.empty() ) {
+                typedef internal::start_scan<Range,Body,Partitioner> start_pass1_type;
+                internal::sum_node<Range,Body>* root = NULL;
+                typedef internal::final_sum<Range,Body> final_sum_type;
+#if __TBB_EXCEPTIONS
+                final_sum_type* temp_body = new(task::allocate_root(context)) final_sum_type( body );
+                start_pass1_type& pass1 = *new(task::allocate_root(context)) start_pass1_type(
+                    /*return_slot=*/root,
+                    range,
+                    *temp_body,
+                    partitioner,
+                    context
+                    );
+#else
+                final_sum_type* temp_body = new(task::allocate_root()) final_sum_type( body );
+                start_pass1_type& pass1 = *new(task::allocate_root()) start_pass1_type(
+                    /*return_slot=*/root,
+                    range,
+                    *temp_body,
+                    partitioner );
+#endif
+                // The class is intended to destroy allocated tasks if exception occurs
+                class task_cleaner: internal::no_copy {
+                    internal::sum_node<Range,Body>* my_root;
+                    final_sum_type* my_temp_body;
+                    const Range& my_range;
+                    Body& my_body;
+                    start_pass1_type* my_pass1;
+                public:
+                    bool do_clean; // Set to true if cleanup is required.
+                    task_cleaner(internal::sum_node<Range,Body>* _root, final_sum_type* _temp_body, const Range& _range, Body& _body, start_pass1_type* _pass1)
+                        : my_root(_root), my_temp_body(_temp_body), my_range(_range), my_body(_body), my_pass1(_pass1), do_clean(true) {}
+                    ~task_cleaner(){
+                        if (do_clean) {
+                            my_body.assign(my_temp_body->body);
+                            my_temp_body->finish_construction( my_range, NULL );
+                            my_temp_body->destroy(*my_temp_body);
+                        }
+                    }
+                };
+                task_cleaner my_cleaner(root, temp_body, range, body, &pass1);
+
+                task::spawn_root_and_wait( pass1 );
+                my_cleaner.do_clean = false;
+                if( root ) {
+                    root->body = temp_body;
+                    root->incoming = NULL;
+                    root->stuff_last = &body;
+                    task::spawn_root_and_wait( *root );
+                } else {
+                    my_cleaner.do_clean = true;
+                }
+            }
+        }
+    };
+
+    template<typename Range, typename Body, typename Partitioner>
+    task* start_scan<Range,Body,Partitioner>::execute() {
+        typedef internal::finish_scan<Range,Body> finish_pass1_type;
+        finish_pass1_type* p = parent_sum ? static_cast<finish_pass1_type*>( parent() ) : NULL;
+        // Inspecting p->result.left_sum would ordinarily be a race condition.
+        // But we inspect it only if we are not a stolen task, in which case we
+        // know that task assigning to p->result.left_sum has completed.
+        bool treat_as_stolen = is_right_child && (is_stolen_task() || body!=p->result.left_sum);
+        if( treat_as_stolen ) {
+            // Invocation is for right child that has been really stolen or needs to be virtually stolen
+#if __TBB_EXCEPTIONS
+            p->right_zombie = body = new( allocate_root(my_context) ) final_sum_type(body->body);
+#else
+            p->right_zombie = body = new( allocate_root() ) final_sum_type(body->body);
+#endif
+            is_final = false;
+        }
+        task* next_task = NULL;
+        if( (is_right_child && !treat_as_stolen) || !range.is_divisible() || partition.should_execute_range(*this) ) {
+            if( is_final )
+                (body->body)( range, final_scan_tag() );
+            else if( sum )
+                (body->body)( range, pre_scan_tag() );
+            if( sum ) 
+                *sum = body;
+            __TBB_ASSERT( !*return_slot, NULL );
+        } else {
+            sum_node_type* result;
+            if( parent_sum ) 
+                result = new(allocate_additional_child_of(*parent_sum)) sum_node_type(range,/*left_is_final=*/is_final);
+            else
+#if __TBB_EXCEPTIONS
+                result = new(task::allocate_root(my_context)) sum_node_type(range,/*left_is_final=*/is_final);
+#else
+                result = new(task::allocate_root()) sum_node_type(range,/*left_is_final=*/is_final);
+#endif
+            finish_pass1_type& c = *new( allocate_continuation()) finish_pass1_type(*return_slot,sum,*result);
+            // Split off right child
+#if __TBB_EXCEPTIONS
+            start_scan& b = *new( c.allocate_child() ) start_scan( /*return_slot=*/result->right, *this, result, my_context );
+#else
+            start_scan& b = *new( c.allocate_child() ) start_scan( /*return_slot=*/result->right, *this, result );
+#endif
+            b.is_right_child = true;    
+            // Left child is recycling of *this.  Must recycle this before spawning b, 
+            // otherwise b might complete and decrement c.ref_count() to zero, which
+            // would cause c.execute() to run prematurely.
+            recycle_as_child_of(c);
+            c.set_ref_count(2);
+            c.spawn(b);
+            sum = &result->left_sum;
+            return_slot = &result->left;
+            is_right_child = false;
+            next_task = this;
+            parent_sum = result; 
+            __TBB_ASSERT( !*return_slot, NULL );
+        }
+        return next_task;
+    } 
+} // namespace internal
+//! @endcond
+
+// Requirements on Range concept are documented in blocked_range.h
+
+/** \page parallel_scan_body_req Requirements on parallel_scan body
+    Class \c Body implementing the concept of parallel_reduce body must define:
+    - \code Body::Body( Body&, split ); \endcode    Splitting constructor.
+                                                    Split \c b so that \c this and \c b can accumulate separately
+    - \code Body::~Body(); \endcode                 Destructor
+    - \code void Body::operator()( const Range& r, pre_scan_tag ); \endcode
+                                                    Preprocess iterations for range \c r
+    - \code void Body::operator()( const Range& r, final_scan_tag ); \endcode 
+                                                    Do final processing for iterations of range \c r
+    - \code void Body::reverse_join( Body& a ); \endcode
+                                                    Merge preprocessing state of \c a into \c this, where \c a was 
+                                                    created earlier from \c b by b's splitting constructor
+**/
+
+/** \name parallel_scan
+    See also requirements on \ref range_req "Range" and \ref parallel_scan_body_req "parallel_scan Body". **/
+//@{
+
+//! Parallel prefix with default partitioner
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_scan( const Range& range, Body& body ) {
+#if __TBB_EXCEPTIONS
+    task_group_context context;
+#endif // __TBB_EXCEPTIONS
+    internal::start_scan<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER()
+#if __TBB_EXCEPTIONS
+        , context
+#endif
+        );
+}
+
+//! Parallel prefix with simple_partitioner
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_scan( const Range& range, Body& body, const simple_partitioner& partitioner ) {
+#if __TBB_EXCEPTIONS
+    task_group_context context;
+#endif // __TBB_EXCEPTIONS
+    internal::start_scan<Range,Body,simple_partitioner>::run(range,body,partitioner
+#if __TBB_EXCEPTIONS
+        , context
+#endif
+        );
+}
+
+//! Parallel prefix with auto_partitioner
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_scan( const Range& range, Body& body, const auto_partitioner& partitioner ) {
+#if __TBB_EXCEPTIONS
+    task_group_context context;
+#endif // __TBB_EXCEPTIONS
+    internal::start_scan<Range,Body,auto_partitioner>::run(range,body,partitioner
+#if __TBB_EXCEPTIONS
+        , context
+#endif
+        );
+}
+#if __TBB_EXCEPTIONS
+//! Parallel prefix with simple_partitioner and user-supplied context
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_scan( const Range& range, Body& body, const simple_partitioner& partitioner, tbb::task_group_context & context ) {
+    internal::start_scan<Range,Body,simple_partitioner>::run(range,body,partitioner,context);
+}
+
+//! Parallel prefix with auto_partitioner and user-supplied context
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_scan( const Range& range, Body& body, const auto_partitioner& partitioner, tbb::task_group_context & context ) {
+    internal::start_scan<Range,Body,auto_partitioner>::run(range,body,partitioner,context);
+}
+
+//! Parallel prefix with default partitioner and user-supplied context
+/** @ingroup algorithms **/
+template<typename Range, typename Body>
+void parallel_scan( const Range& range, Body& body, tbb::task_group_context & context ) {
+    internal::start_scan<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER(),context);
+}
+#endif
+
+//@}
+
+} // namespace tbb
+
+#endif /* __TBB_parallel_scan_H */
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_sort.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_sort.h
new file mode 100644 (file)
index 0000000..38b380d
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_parallel_sort_H
+#define __TBB_parallel_sort_H
+
+#include "parallel_for.h"
+#include "blocked_range.h"
+#include <algorithm>
+#include <iterator>
+#include <functional>
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+
+//! Range used in quicksort to split elements into subranges based on a value.
+/** The split operation selects a splitter and places all elements less than or equal 
+    to the value in the first range and the remaining elements in the second range.
+    @ingroup algorithms */
+template<typename RandomAccessIterator, typename Compare>
+class quick_sort_range: private no_assign {
+
+    inline size_t median_of_three(const RandomAccessIterator &array, size_t l, size_t m, size_t r) const {
+        return comp(array[l], array[m]) ? ( comp(array[m], array[r]) ? m : ( comp( array[l], array[r]) ? r : l ) ) 
+                                        : ( comp(array[r], array[m]) ? m : ( comp( array[r], array[l] ) ? r : l ) );
+    }
+
+    inline size_t pseudo_median_of_nine( const RandomAccessIterator &array, const quick_sort_range &range ) const {
+        size_t offset = range.size/8u;
+        return median_of_three(array, 
+                               median_of_three(array, 0, offset, offset*2),
+                               median_of_three(array, offset*3, offset*4, offset*5),
+                               median_of_three(array, offset*6, offset*7, range.size - 1) );
+
+    }
+
+public:
+
+    static const size_t grainsize = 500;
+    const Compare &comp;
+    RandomAccessIterator begin;
+    size_t size;
+
+    quick_sort_range( RandomAccessIterator begin_, size_t size_, const Compare &comp_ ) :
+        comp(comp_), begin(begin_), size(size_) {}
+
+    bool empty() const {return size==0;}
+    bool is_divisible() const {return size>=grainsize;}
+
+    quick_sort_range( quick_sort_range& range, split ) : comp(range.comp) {
+        RandomAccessIterator array = range.begin;
+        RandomAccessIterator key0 = range.begin; 
+        size_t m = pseudo_median_of_nine(array, range);
+        if (m) std::swap ( array[0], array[m] );
+
+        size_t i=0;
+        size_t j=range.size;
+        // Partition interval [i+1,j-1] with key *key0.
+        for(;;) {
+            __TBB_ASSERT( i<j, NULL );
+            // Loop must terminate since array[l]==*key0.
+            do {
+                --j;
+                __TBB_ASSERT( i<=j, "bad ordering relation?" );
+            } while( comp( *key0, array[j] ));
+            do {
+                __TBB_ASSERT( i<=j, NULL );
+                if( i==j ) goto partition;
+                ++i;
+            } while( comp( array[i],*key0 ));
+            if( i==j ) goto partition;
+            std::swap( array[i], array[j] );
+        }
+partition:
+        // Put the partition key were it belongs
+        std::swap( array[j], *key0 );
+        // array[l..j) is less or equal to key.
+        // array(j..r) is greater or equal to key.
+        // array[j] is equal to key
+        i=j+1;
+        begin = array+i;
+        size = range.size-i;
+        range.size = j;
+    }
+};
+
+//! Body class used to test if elements in a range are presorted
+/** @ingroup algorithms */
+template<typename RandomAccessIterator, typename Compare>
+class quick_sort_pretest_body : internal::no_assign {
+    const Compare &comp;
+
+public:
+    quick_sort_pretest_body(const Compare &_comp) : comp(_comp) {}
+
+    void operator()( const blocked_range<RandomAccessIterator>& range ) const {
+        task &my_task = task::self();
+        RandomAccessIterator my_end = range.end();
+
+        int i = 0;
+        for (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i) {
+            if ( i%64 == 0 && my_task.is_cancelled() ) break;
+          
+            // The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1
+            if ( comp( *(k), *(k-1) ) ) {
+                my_task.cancel_group_execution();
+                break;
+            }
+        }
+    }
+
+};
+
+//! Body class used to sort elements in a range that is smaller than the grainsize.
+/** @ingroup algorithms */
+template<typename RandomAccessIterator, typename Compare>
+struct quick_sort_body {
+    void operator()( const quick_sort_range<RandomAccessIterator,Compare>& range ) const {
+        //SerialQuickSort( range.begin, range.size, range.comp );
+        std::sort( range.begin, range.begin + range.size, range.comp );
+    }
+};
+
+//! Wrapper method to initiate the sort by calling parallel_for.
+/** @ingroup algorithms */
+template<typename RandomAccessIterator, typename Compare>
+void parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp ) {
+    task_group_context my_context;
+    const int serial_cutoff = 9;
+
+    __TBB_ASSERT( begin + serial_cutoff < end, "min_parallel_size is smaller than serial cutoff?" );
+    RandomAccessIterator k;
+    for ( k = begin ; k != begin + serial_cutoff; ++k ) {
+        if ( comp( *(k+1), *k ) ) {
+            goto do_parallel_quick_sort;
+        }
+    }
+
+    parallel_for( blocked_range<RandomAccessIterator>(k+1, end),
+                  quick_sort_pretest_body<RandomAccessIterator,Compare>(comp),
+                  auto_partitioner(),
+                  my_context);
+
+    if (my_context.is_group_execution_cancelled())
+do_parallel_quick_sort:
+        parallel_for( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ), 
+                      quick_sort_body<RandomAccessIterator,Compare>(),
+                      auto_partitioner() );
+}
+
+} // namespace internal
+//! @endcond
+
+/** \page parallel_sort_iter_req Requirements on iterators for parallel_sort
+    Requirements on value type \c T of \c RandomAccessIterator for \c parallel_sort:
+    - \code void swap( T& x, T& y ) \endcode        Swaps \c x and \c y
+    - \code bool Compare::operator()( const T& x, const T& y ) \endcode
+                                                    True if x comes before y;
+**/
+
+/** \name parallel_sort
+    See also requirements on \ref parallel_sort_iter_req "iterators for parallel_sort". **/
+//@{
+
+//! Sorts the data in [begin,end) using the given comparator 
+/** The compare function object is used for all comparisons between elements during sorting.
+    The compare object must define a bool operator() function.
+    @ingroup algorithms **/
+template<typename RandomAccessIterator, typename Compare>
+void parallel_sort( RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp) { 
+    const int min_parallel_size = 500; 
+    if( end > begin ) {
+        if (end - begin < min_parallel_size) { 
+            std::sort(begin, end, comp);
+        } else {
+            internal::parallel_quick_sort(begin, end, comp);
+        }
+    }
+}
+
+//! Sorts the data in [begin,end) with a default comparator \c std::less<RandomAccessIterator>
+/** @ingroup algorithms **/
+template<typename RandomAccessIterator>
+inline void parallel_sort( RandomAccessIterator begin, RandomAccessIterator end ) { 
+    parallel_sort( begin, end, std::less< typename std::iterator_traits<RandomAccessIterator>::value_type >() );
+}
+
+//! Sorts the data in the range \c [begin,end) with a default comparator \c std::less<T>
+/** @ingroup algorithms **/
+template<typename T>
+inline void parallel_sort( T * begin, T * end ) {
+    parallel_sort( begin, end, std::less< T >() );
+}   
+//@}
+
+
+} // namespace tbb
+
+#endif
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_while.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/parallel_while.h
new file mode 100644 (file)
index 0000000..a4ad9e6
--- /dev/null
@@ -0,0 +1,194 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_parallel_while
+#define __TBB_parallel_while
+
+#include "task.h"
+#include <new>
+
+namespace tbb {
+
+template<typename Body>
+class parallel_while;
+
+//! @cond INTERNAL
+namespace internal {
+
+    template<typename Stream, typename Body> class while_task;
+
+    //! For internal use only.
+    /** Executes one iteration of a while.
+        @ingroup algorithms */
+    template<typename Body>
+    class while_iteration_task: public task {
+        const Body& my_body;
+        typename Body::argument_type my_value;
+        /*override*/ task* execute() {
+            my_body(my_value); 
+            return NULL;
+        }
+        while_iteration_task( const typename Body::argument_type& value, const Body& body ) : 
+            my_body(body), my_value(value)
+        {}
+        template<typename Body_> friend class while_group_task;
+        friend class tbb::parallel_while<Body>;
+    };
+
+    //! For internal use only
+    /** Unpacks a block of iterations.
+        @ingroup algorithms */
+    template<typename Body>
+    class while_group_task: public task {
+        static const size_t max_arg_size = 4;         
+        const Body& my_body;
+        size_t size;
+        typename Body::argument_type my_arg[max_arg_size];
+        while_group_task( const Body& body ) : my_body(body), size(0) {} 
+        /*override*/ task* execute() {
+            typedef while_iteration_task<Body> iteration_type;
+            __TBB_ASSERT( size>0, NULL );
+            task_list list;
+            task* t; 
+            size_t k=0; 
+            for(;;) {
+                t = new( allocate_child() ) iteration_type(my_arg[k],my_body); 
+                if( ++k==size ) break;
+                list.push_back(*t);
+            }
+            set_ref_count(int(k+1));
+            spawn(list);
+            spawn_and_wait_for_all(*t);
+            return NULL;
+        }
+        template<typename Stream, typename Body_> friend class while_task;
+    };
+    
+    //! For internal use only.
+    /** Gets block of iterations from a stream and packages them into a while_group_task.
+        @ingroup algorithms */
+    template<typename Stream, typename Body>
+    class while_task: public task {
+        Stream& my_stream;
+        const Body& my_body;
+        empty_task& my_barrier;
+        /*override*/ task* execute() {
+            typedef while_group_task<Body> block_type;
+            block_type& t = *new( allocate_additional_child_of(my_barrier) ) block_type(my_body);
+            size_t k=0; 
+            while( my_stream.pop_if_present(t.my_arg[k]) ) {
+                if( ++k==block_type::max_arg_size ) {
+                    // There might be more iterations.
+                    recycle_to_reexecute();
+                    break;
+                }
+            }
+            if( k==0 ) {
+                destroy(t);
+                return NULL;
+            } else {
+                t.size = k;
+                return &t;
+            }
+        }
+        while_task( Stream& stream, const Body& body, empty_task& barrier ) : 
+            my_stream(stream),
+            my_body(body),
+            my_barrier(barrier)
+        {} 
+        friend class tbb::parallel_while<Body>;
+    };
+
+} // namespace internal
+//! @endcond
+
+//! Parallel iteration over a stream, with optional addition of more work.
+/** The Body b has the requirement: \n
+        "b(v)"                      \n
+        "b.argument_type"           \n
+    where v is an argument_type
+    @ingroup algorithms */
+template<typename Body>
+class parallel_while: internal::no_copy {
+public:
+    //! Construct empty non-running parallel while.
+    parallel_while() : my_body(NULL), my_barrier(NULL) {}
+
+    //! Destructor cleans up data members before returning.
+    ~parallel_while() {
+        if( my_barrier ) {
+            my_barrier->destroy(*my_barrier);    
+            my_barrier = NULL;
+        }
+    }
+
+    //! Type of items
+    typedef typename Body::argument_type value_type;
+
+    //! Apply body.apply to each item in the stream.
+    /** A Stream s has the requirements \n
+         "S::value_type"                \n
+         "s.pop_if_present(value) is convertible to bool */
+    template<typename Stream>
+    void run( Stream& stream, const Body& body );
+
+    //! Add a work item while running.
+    /** Should be executed only by body.apply or a thread spawned therefrom. */
+    void add( const value_type& item );
+
+private:
+    const Body* my_body;
+    empty_task* my_barrier;
+};
+
+template<typename Body>
+template<typename Stream>
+void parallel_while<Body>::run( Stream& stream, const Body& body ) {
+    using namespace internal;
+    empty_task& barrier = *new( task::allocate_root() ) empty_task();
+    my_body = &body;
+    my_barrier = &barrier;
+    my_barrier->set_ref_count(2);
+    while_task<Stream,Body>& w = *new( my_barrier->allocate_child() ) while_task<Stream,Body>( stream, body, barrier );
+    my_barrier->spawn_and_wait_for_all(w);
+    my_barrier->destroy(*my_barrier);
+    my_barrier = NULL;
+    my_body = NULL;
+}
+
+template<typename Body>
+void parallel_while<Body>::add( const value_type& item ) {
+    __TBB_ASSERT(my_barrier,"attempt to add to parallel_while that is not running");
+    typedef internal::while_iteration_task<Body> iteration_type;
+    iteration_type& i = *new( task::self().allocate_additional_child_of(*my_barrier) ) iteration_type(item,*my_body);
+    task::self().spawn( i );
+}
+
+} // namespace 
+
+#endif /* __TBB_parallel_while */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/partitioner.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/partitioner.h
new file mode 100644 (file)
index 0000000..53e2953
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_partitioner_H
+#define __TBB_partitioner_H
+
+#include "task.h"
+
+namespace tbb {
+class affinity_partitioner;
+
+//! @cond INTERNAL
+namespace internal {
+size_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();
+
+//! Defines entry points into tbb run-time library;
+/** The entry points are the constructor and destructor. */
+class affinity_partitioner_base_v3: no_copy {
+    friend class tbb::affinity_partitioner;
+    //! Array that remembers affinities of tree positions to affinity_id.
+    /** NULL if my_size==0. */
+    affinity_id* my_array;
+    //! Number of elements in my_array.
+    size_t my_size;
+    //! Zeros the fields.
+    affinity_partitioner_base_v3() : my_array(NULL), my_size(0) {}
+    //! Deallocates my_array.
+    ~affinity_partitioner_base_v3() {resize(0);}
+    //! Resize my_array.
+    /** Retains values if resulting size is the same. */
+    void __TBB_EXPORTED_METHOD resize( unsigned factor );
+    friend class affinity_partition_type;
+};
+
+//! Provides default methods for partition objects without affinity.
+class partition_type_base {
+public:
+    void set_affinity( task & ) {}
+    void note_affinity( task::affinity_id ) {}
+    task* continue_after_execute_range( task& ) {return NULL;}
+    bool decide_whether_to_delay() {return false;}
+    void spawn_or_delay( bool, task& a, task& b ) {
+        a.spawn(b);
+    }
+};
+
+class affinity_partition_type;
+
+template<typename Range, typename Body, typename Partitioner> class start_for;
+template<typename Range, typename Body, typename Partitioner> class start_reduce;
+template<typename Range, typename Body> class start_reduce_with_affinity;
+template<typename Range, typename Body, typename Partitioner> class start_scan;
+
+} // namespace internal
+//! @endcond
+
+//! A simple partitioner 
+/** Divides the range until the range is not divisible. 
+    @ingroup algorithms */
+class simple_partitioner {
+public:
+    simple_partitioner() {}
+private:
+    template<typename Range, typename Body, typename Partitioner> friend class internal::start_for;
+    template<typename Range, typename Body, typename Partitioner> friend class internal::start_reduce;
+    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;
+
+    class partition_type: public internal::partition_type_base {
+    public:
+        bool should_execute_range(const task& ) {return false;}
+        partition_type( const simple_partitioner& ) {}
+        partition_type( const partition_type&, split ) {}
+    };
+};
+
+//! An auto partitioner 
+/** The range is initial divided into several large chunks.
+    Chunks are further subdivided into VICTIM_CHUNKS pieces if they are stolen and divisible.
+    @ingroup algorithms */
+class auto_partitioner {
+public:
+    auto_partitioner() {}
+
+private:
+    template<typename Range, typename Body, typename Partitioner> friend class internal::start_for;
+    template<typename Range, typename Body, typename Partitioner> friend class internal::start_reduce;
+    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;
+
+    class partition_type: public internal::partition_type_base {
+        size_t num_chunks;
+        static const size_t VICTIM_CHUNKS = 4;
+public:
+        bool should_execute_range(const task &t) {
+            if( num_chunks<VICTIM_CHUNKS && t.is_stolen_task() )
+                num_chunks = VICTIM_CHUNKS;
+            return num_chunks==1;
+        }
+        partition_type( const auto_partitioner& ) : num_chunks(internal::get_initial_auto_partitioner_divisor()) {}
+        partition_type( partition_type& pt, split ) {
+            num_chunks = pt.num_chunks /= 2u;
+        }
+    };
+};
+
+//! An affinity partitioner
+class affinity_partitioner: internal::affinity_partitioner_base_v3 {
+public:
+    affinity_partitioner() {}
+
+private:
+    template<typename Range, typename Body, typename Partitioner> friend class internal::start_for;
+    template<typename Range, typename Body, typename Partitioner> friend class internal::start_reduce;
+    template<typename Range, typename Body> friend class internal::start_reduce_with_affinity;
+    template<typename Range, typename Body, typename Partitioner> friend class internal::start_scan;
+
+    typedef internal::affinity_partition_type partition_type;
+    friend class internal::affinity_partition_type;
+};
+
+//! @cond INTERNAL
+namespace internal {
+
+class affinity_partition_type: public no_copy {
+    //! Must be power of two
+    static const unsigned factor = 16;
+    static const size_t VICTIM_CHUNKS = 4;
+
+    internal::affinity_id* my_array;
+    task_list delay_list;
+    unsigned map_begin, map_end;
+    size_t num_chunks;
+public:
+    affinity_partition_type( affinity_partitioner& ap ) {
+        __TBB_ASSERT( (factor&(factor-1))==0, "factor must be power of two" ); 
+        ap.resize(factor);
+        my_array = ap.my_array;
+        map_begin = 0;
+        map_end = unsigned(ap.my_size);
+        num_chunks = internal::get_initial_auto_partitioner_divisor();
+    }
+    affinity_partition_type(affinity_partition_type& p, split) : my_array(p.my_array) {
+        __TBB_ASSERT( p.map_end-p.map_begin<factor || (p.map_end-p.map_begin)%factor==0, NULL );
+        num_chunks = p.num_chunks /= 2;
+        unsigned e = p.map_end;
+        unsigned d = (e - p.map_begin)/2;
+        if( d>factor ) 
+            d &= 0u-factor;
+        map_end = e;
+        map_begin = p.map_end = e-d;
+    }
+
+    bool should_execute_range(const task &t) {
+        if( num_chunks < VICTIM_CHUNKS && t.is_stolen_task() )
+            num_chunks = VICTIM_CHUNKS;
+        return num_chunks == 1;
+    }
+
+    void set_affinity( task &t ) {
+        if( map_begin<map_end )
+            t.set_affinity( my_array[map_begin] );
+    }
+    void note_affinity( task::affinity_id id ) {
+        if( map_begin<map_end ) 
+            my_array[map_begin] = id;
+    }
+    task* continue_after_execute_range( task& t ) {
+        task* first = NULL;
+        if( !delay_list.empty() ) {
+            first = &delay_list.pop_front();
+            while( !delay_list.empty() ) {
+                t.spawn(*first);
+                first = &delay_list.pop_front();
+            }
+        }
+        return first;
+    }
+    bool decide_whether_to_delay() {
+        // The possible underflow caused by "-1u" is deliberate
+        return (map_begin&(factor-1))==0 && map_end-map_begin-1u<factor;
+    }
+    void spawn_or_delay( bool delay, task& a, task& b ) {
+        if( delay )  
+            delay_list.push_back(b);
+        else 
+            a.spawn(b);
+    }
+
+    ~affinity_partition_type() {
+        // The delay_list can be non-empty if an exception is thrown.
+        while( !delay_list.empty() ) {
+            task& t = delay_list.pop_front();
+            t.destroy(t);
+        } 
+    }
+};
+
+} // namespace internal
+//! @endcond
+
+
+} // namespace tbb
+
+#endif /* __TBB_partitioner_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/pipeline.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/pipeline.h
new file mode 100644 (file)
index 0000000..4cfb293
--- /dev/null
@@ -0,0 +1,269 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_pipeline_H 
+#define __TBB_pipeline_H 
+
+#include "atomic.h"
+#include "task.h"
+#include <cstddef>
+
+namespace tbb {
+
+class pipeline;
+class filter;
+
+//! @cond INTERNAL
+namespace internal {
+
+// The argument for PIPELINE_VERSION should be an integer between 2 and 9
+#define __TBB_PIPELINE_VERSION(x) (unsigned char)(x-2)<<1
+
+typedef unsigned long Token;
+typedef long tokendiff_t;
+class stage_task;
+class input_buffer;
+class pipeline_root_task;
+class pipeline_cleaner;
+
+} // namespace internal
+//! @endcond
+
+//! A stage in a pipeline.
+/** @ingroup algorithms */
+class filter: internal::no_copy {
+private:
+    //! Value used to mark "not in pipeline"
+    static filter* not_in_pipeline() {return reinterpret_cast<filter*>(internal::intptr(-1));}
+    
+    //! The lowest bit 0 is for parallel vs. serial
+    static const unsigned char filter_is_serial = 0x1; 
+
+    //! 4th bit distinguishes ordered vs unordered filters.
+    /** The bit was not set for parallel filters in TBB 2.1 and earlier,
+        but is_ordered() function always treats parallel filters as out of order. */
+    static const unsigned char filter_is_out_of_order = 0x1<<4;  
+
+    //! 5th bit distinguishes thread-bound and regular filters.
+    static const unsigned char filter_is_bound = 0x1<<5;  
+
+    static const unsigned char current_version = __TBB_PIPELINE_VERSION(5);
+    static const unsigned char version_mask = 0x7<<1; // bits 1-3 are for version
+public:
+    enum mode {
+        //! processes multiple items in parallel and in no particular order
+        parallel = current_version | filter_is_out_of_order, 
+        //! processes items one at a time; all such filters process items in the same order
+        serial_in_order = current_version | filter_is_serial,
+        //! processes items one at a time and in no particular order
+        serial_out_of_order = current_version | filter_is_serial | filter_is_out_of_order,
+        //! @deprecated use serial_in_order instead
+        serial = serial_in_order
+    };
+protected:
+    filter( bool is_serial_ ) : 
+        next_filter_in_pipeline(not_in_pipeline()),
+        my_input_buffer(NULL),
+        my_filter_mode(static_cast<unsigned char>(is_serial_ ? serial : parallel)),
+        prev_filter_in_pipeline(not_in_pipeline()),
+        my_pipeline(NULL),
+        next_segment(NULL)
+    {}
+    
+    filter( mode filter_mode ) :
+        next_filter_in_pipeline(not_in_pipeline()),
+        my_input_buffer(NULL),
+        my_filter_mode(static_cast<unsigned char>(filter_mode)),
+        prev_filter_in_pipeline(not_in_pipeline()),
+        my_pipeline(NULL),
+        next_segment(NULL)
+    {}
+
+public:
+    //! True if filter is serial.
+    bool is_serial() const {
+        return bool( my_filter_mode & filter_is_serial );
+    }  
+    
+    //! True if filter must receive stream in order.
+    bool is_ordered() const {
+        return (my_filter_mode & (filter_is_out_of_order|filter_is_serial))==filter_is_serial;
+    }
+
+    //! True if filter is thread-bound.
+    bool is_bound() const {
+        return ( my_filter_mode & filter_is_bound )==filter_is_bound;
+    }
+
+    //! Operate on an item from the input stream, and return item for output stream.
+    /** Returns NULL if filter is a sink. */
+    virtual void* operator()( void* item ) = 0;
+
+    //! Destroy filter.  
+    /** If the filter was added to a pipeline, the pipeline must be destroyed first. */
+    virtual __TBB_EXPORTED_METHOD ~filter();
+
+#if __TBB_EXCEPTIONS
+    //! Destroys item if pipeline was cancelled.
+    /** Required to prevent memory leaks.
+        Note it can be called concurrently even for serial filters.*/
+    virtual void finalize( void* /*item*/ ) {};
+#endif
+
+private:
+    //! Pointer to next filter in the pipeline.
+    filter* next_filter_in_pipeline;
+
+    //! Buffer for incoming tokens, or NULL if not required.
+    /** The buffer is required if the filter is serial or follows a thread-bound one. */
+    internal::input_buffer* my_input_buffer;
+
+    friend class internal::stage_task;
+    friend class internal::pipeline_root_task;
+    friend class pipeline;
+    friend class thread_bound_filter;
+
+    //! Storage for filter mode and dynamically checked implementation version.
+    const unsigned char my_filter_mode;
+
+    //! Pointer to previous filter in the pipeline.
+    filter* prev_filter_in_pipeline;
+
+    //! Pointer to the pipeline.
+    pipeline* my_pipeline;
+
+    //! Pointer to the next "segment" of filters, or NULL if not required.
+    /** In each segment, the first filter is not thread-bound but follows a thread-bound one. */
+    filter* next_segment;
+};
+
+//! A stage in a pipeline served by a user thread.
+/** @ingroup algorithms */
+class thread_bound_filter: public filter {
+public:
+    enum result_type {
+        // item was processed
+        success,
+        // item is currently not available
+        item_not_available,
+        // there are no more items to process
+        end_of_stream
+    };
+protected:
+    thread_bound_filter(mode filter_mode): 
+         filter(static_cast<mode>(filter_mode | filter::filter_is_bound))
+    {}
+public:
+    //! If a data item is available, invoke operator() on that item.  
+    /** This interface is non-blocking.
+        Returns 'success' if an item was processed.
+        Returns 'item_not_available' if no item can be processed now 
+        but more may arrive in the future, or if token limit is reached. 
+        Returns 'end_of_stream' if there are no more items to process. */
+    result_type __TBB_EXPORTED_METHOD try_process_item(); 
+
+    //! Wait until a data item becomes available, and invoke operator() on that item.
+    /** This interface is blocking.
+        Returns 'success' if an item was processed.
+        Returns 'end_of_stream' if there are no more items to process.
+        Never returns 'item_not_available', as it blocks until another return condition applies. */
+    result_type __TBB_EXPORTED_METHOD process_item();
+
+private:
+    //! Internal routine for item processing
+    result_type internal_process_item(bool is_blocking);
+};
+
+//! A processing pipeling that applies filters to items.
+/** @ingroup algorithms */
+class pipeline {
+public:
+    //! Construct empty pipeline.
+    __TBB_EXPORTED_METHOD pipeline();
+
+    /** Though the current implementation declares the destructor virtual, do not rely on this 
+        detail.  The virtualness is deprecated and may disappear in future versions of TBB. */
+    virtual __TBB_EXPORTED_METHOD ~pipeline();
+
+    //! Add filter to end of pipeline.
+    void __TBB_EXPORTED_METHOD add_filter( filter& filter_ );
+
+    //! Run the pipeline to completion.
+    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens );
+
+#if __TBB_EXCEPTIONS
+    //! Run the pipeline to completion with user-supplied context.
+    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens, tbb::task_group_context& context );
+#endif
+
+    //! Remove all filters from the pipeline.
+    void __TBB_EXPORTED_METHOD clear();
+
+private:
+    friend class internal::stage_task;
+    friend class internal::pipeline_root_task;
+    friend class filter;
+    friend class thread_bound_filter;
+    friend class internal::pipeline_cleaner;
+
+    //! Pointer to first filter in the pipeline.
+    filter* filter_list;
+
+    //! Pointer to location where address of next filter to be added should be stored.
+    filter* filter_end;
+
+    //! task who's reference count is used to determine when all stages are done.
+    task* end_counter;
+
+    //! Number of idle tokens waiting for input stage.
+    atomic<internal::Token> input_tokens;
+
+    //! Global counter of tokens 
+    atomic<internal::Token> token_counter;
+
+    //! False until fetch_input returns NULL.
+    bool end_of_input;
+
+    //! True if the pipeline contains a thread-bound filter; false otherwise.
+    bool has_thread_bound_filters;
+
+    //! Remove filter from pipeline.
+    void remove_filter( filter& filter_ );
+
+    //! Not used, but retained to satisfy old export files.
+    void __TBB_EXPORTED_METHOD inject_token( task& self );
+
+#if __TBB_EXCEPTIONS
+    //! Does clean up if pipeline is cancelled or exception occured
+    void clear_filters();
+#endif
+};
+
+} // tbb
+
+#endif /* __TBB_pipeline_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/queuing_mutex.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/queuing_mutex.h
new file mode 100644 (file)
index 0000000..a7cb71c
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_queuing_mutex_H
+#define __TBB_queuing_mutex_H
+
+#include <cstring>
+#include "atomic.h"
+#include "tbb_profiling.h"
+
+namespace tbb {
+
+//! Queuing lock with local-only spinning.
+/** @ingroup synchronization */
+class queuing_mutex {
+public:
+    //! Construct unacquired mutex.
+    queuing_mutex() {
+        q_tail = NULL;
+#if TBB_USE_THREADING_TOOLS
+        internal_construct();
+#endif
+    }
+
+    //! The scoped locking pattern
+    /** It helps to avoid the common problem of forgetting to release lock.
+        It also nicely provides the "node" for queuing locks. */
+    class scoped_lock: internal::no_copy {
+        //! Initialize fields to mean "no lock held".
+        void initialize() {
+            mutex = NULL;
+#if TBB_USE_ASSERT
+            internal::poison_pointer(next);
+#endif /* TBB_USE_ASSERT */
+        }
+    public:
+        //! Construct lock that has not acquired a mutex.
+        /** Equivalent to zero-initialization of *this. */
+        scoped_lock() {initialize();}
+
+        //! Acquire lock on given mutex.
+        /** Upon entry, *this should not be in the "have acquired a mutex" state. */
+        scoped_lock( queuing_mutex& m ) {
+            initialize();
+            acquire(m);
+        }
+
+        //! Release lock (if lock is held).
+        ~scoped_lock() {
+            if( mutex ) release();
+        }
+
+        //! Acquire lock on given mutex.
+        void __TBB_EXPORTED_METHOD acquire( queuing_mutex& m );
+
+        //! Acquire lock on given mutex if free (i.e. non-blocking)
+        bool __TBB_EXPORTED_METHOD try_acquire( queuing_mutex& m );
+
+        //! Release lock.
+        void __TBB_EXPORTED_METHOD release();
+
+    private:
+        //! The pointer to the mutex owned, or NULL if not holding a mutex.
+        queuing_mutex* mutex;
+
+        //! The pointer to the next competitor for a mutex
+        scoped_lock *next;
+
+        //! The local spin-wait variable
+        /** Inverted (0 - blocked, 1 - acquired the mutex) for the sake of 
+            zero-initialization.  Defining it as an entire word instead of
+            a byte seems to help performance slightly. */
+        internal::uintptr going;
+    };
+
+    void __TBB_EXPORTED_METHOD internal_construct();
+
+    // Mutex traits
+    static const bool is_rw_mutex = false;
+    static const bool is_recursive_mutex = false;
+    static const bool is_fair_mutex = true;
+
+    friend class scoped_lock;
+private:
+    //! The last competitor requesting the lock
+    atomic<scoped_lock*> q_tail;
+
+};
+
+__TBB_DEFINE_PROFILING_SET_NAME(queuing_mutex)
+
+} // namespace tbb
+
+#endif /* __TBB_queuing_mutex_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/queuing_rw_mutex.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/queuing_rw_mutex.h
new file mode 100644 (file)
index 0000000..27456f6
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_queuing_rw_mutex_H
+#define __TBB_queuing_rw_mutex_H
+
+#include <cstring>
+#include "atomic.h"
+#include "tbb_profiling.h"
+
+namespace tbb {
+
+//! Reader-writer lock with local-only spinning.
+/** Adapted from Krieger, Stumm, et al. pseudocode at
+    http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93
+    @ingroup synchronization */
+class queuing_rw_mutex {
+public:
+    //! Construct unacquired mutex.
+    queuing_rw_mutex() {
+        q_tail = NULL;
+#if TBB_USE_THREADING_TOOLS
+        internal_construct();
+#endif
+    }
+
+    //! Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL
+    ~queuing_rw_mutex() {
+#if TBB_USE_ASSERT
+        __TBB_ASSERT( !q_tail, "destruction of an acquired mutex");
+#endif
+    }
+
+    class scoped_lock;
+    friend class scoped_lock;
+
+    //! The scoped locking pattern
+    /** It helps to avoid the common problem of forgetting to release lock.
+        It also nicely provides the "node" for queuing locks. */
+    class scoped_lock: internal::no_copy {
+        //! Initialize fields
+        void initialize() {
+            mutex = NULL;
+#if TBB_USE_ASSERT
+            state = 0xFF; // Set to invalid state
+            internal::poison_pointer(next);
+            internal::poison_pointer(prev);
+#endif /* TBB_USE_ASSERT */
+        }
+    public:
+        //! Construct lock that has not acquired a mutex.
+        /** Equivalent to zero-initialization of *this. */
+        scoped_lock() {initialize();}
+
+        //! Acquire lock on given mutex.
+        /** Upon entry, *this should not be in the "have acquired a mutex" state. */
+        scoped_lock( queuing_rw_mutex& m, bool write=true ) {
+            initialize();
+            acquire(m,write);
+        }
+
+        //! Release lock (if lock is held).
+        ~scoped_lock() {
+            if( mutex ) release();
+        }
+
+        //! Acquire lock on given mutex.
+        void acquire( queuing_rw_mutex& m, bool write=true );
+
+        //! Try acquire lock on given mutex.
+        bool try_acquire( queuing_rw_mutex& m, bool write=true );
+
+        //! Release lock.
+        void release();
+
+        //! Upgrade reader to become a writer.
+        /** Returns true if the upgrade happened without re-acquiring the lock and false if opposite */
+        bool upgrade_to_writer();
+
+        //! Downgrade writer to become a reader.
+        bool downgrade_to_reader();
+
+    private:
+        //! The pointer to the current mutex to work
+        queuing_rw_mutex* mutex;
+
+        //! The pointer to the previous and next competitors for a mutex
+        scoped_lock * prev, * next;
+
+        typedef unsigned char state_t;
+
+        //! State of the request: reader, writer, active reader, other service states
+        atomic<state_t> state;
+
+        //! The local spin-wait variable
+        /** Corresponds to "spin" in the pseudocode but inverted for the sake of zero-initialization */
+        unsigned char going;
+
+        //! A tiny internal lock
+        unsigned char internal_lock;
+
+        //! Acquire the internal lock
+        void acquire_internal_lock();
+
+        //! Try to acquire the internal lock
+        /** Returns true if lock was successfully acquired. */
+        bool try_acquire_internal_lock();
+
+        //! Release the internal lock
+        void release_internal_lock();
+
+        //! Wait for internal lock to be released
+        void wait_for_release_of_internal_lock();
+
+        //! A helper function
+        void unblock_or_wait_on_internal_lock( uintptr_t );
+    };
+
+    void __TBB_EXPORTED_METHOD internal_construct();
+
+    // Mutex traits
+    static const bool is_rw_mutex = true;
+    static const bool is_recursive_mutex = false;
+    static const bool is_fair_mutex = true;
+
+private:
+    //! The last competitor requesting the lock
+    atomic<scoped_lock*> q_tail;
+
+};
+
+__TBB_DEFINE_PROFILING_SET_NAME(queuing_rw_mutex)
+
+} // namespace tbb
+
+#endif /* __TBB_queuing_rw_mutex_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/recursive_mutex.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/recursive_mutex.h
new file mode 100644 (file)
index 0000000..1b7a825
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_recursive_mutex_H
+#define __TBB_recursive_mutex_H
+
+#if _WIN32||_WIN64
+
+#include <windows.h>
+#if !defined(_WIN32_WINNT)
+// The following Windows API function is declared explicitly;
+// otherwise any user would have to specify /D_WIN32_WINNT=0x0400
+extern "C" BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
+#endif
+
+#else /* if not _WIN32||_WIN64 */
+
+#include <pthread.h>
+namespace tbb { namespace internal {
+// Use this internal TBB function to throw an exception
+  extern void handle_perror( int error_code, const char* what );
+} } //namespaces
+
+#endif /* _WIN32||_WIN64 */
+
+#include <new>
+#include "aligned_space.h"
+#include "tbb_stddef.h"
+#include "tbb_profiling.h"
+
+namespace tbb {
+//! Mutex that allows recursive mutex acquisition.
+/** Mutex that allows recursive mutex acquisition.
+    @ingroup synchronization */
+class recursive_mutex {
+public:
+    //! Construct unacquired recursive_mutex.
+    recursive_mutex() {
+#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS
+        internal_construct();
+#else
+  #if _WIN32||_WIN64
+        InitializeCriticalSection(&impl);
+  #else
+        pthread_mutexattr_t mtx_attr;
+        int error_code = pthread_mutexattr_init( &mtx_attr );
+        if( error_code )
+            tbb::internal::handle_perror(error_code,"recursive_mutex: pthread_mutexattr_init failed");
+
+        pthread_mutexattr_settype( &mtx_attr, PTHREAD_MUTEX_RECURSIVE );
+        error_code = pthread_mutex_init( &impl, &mtx_attr );
+        if( error_code )
+            tbb::internal::handle_perror(error_code,"recursive_mutex: pthread_mutex_init failed");
+
+        pthread_mutexattr_destroy( &mtx_attr );
+  #endif /* _WIN32||_WIN64*/
+#endif /* TBB_USE_ASSERT */
+    };
+
+    ~recursive_mutex() {
+#if TBB_USE_ASSERT
+        internal_destroy();
+#else
+  #if _WIN32||_WIN64
+        DeleteCriticalSection(&impl);
+  #else
+        pthread_mutex_destroy(&impl); 
+
+  #endif /* _WIN32||_WIN64 */
+#endif /* TBB_USE_ASSERT */
+    };
+
+    class scoped_lock;
+    friend class scoped_lock;
+
+    //! The scoped locking pattern
+    /** It helps to avoid the common problem of forgetting to release lock.
+        It also nicely provides the "node" for queuing locks. */
+    class scoped_lock: internal::no_copy {
+    public:
+        //! Construct lock that has not acquired a recursive_mutex. 
+        scoped_lock() : my_mutex(NULL) {};
+
+        //! Acquire lock on given mutex.
+        scoped_lock( recursive_mutex& mutex ) {
+#if TBB_USE_ASSERT
+            my_mutex = &mutex; 
+#endif /* TBB_USE_ASSERT */
+            acquire( mutex );
+        }
+
+        //! Release lock (if lock is held).
+        ~scoped_lock() {
+            if( my_mutex ) 
+                release();
+        }
+
+        //! Acquire lock on given mutex.
+        void acquire( recursive_mutex& mutex ) {
+#if TBB_USE_ASSERT
+            internal_acquire( mutex );
+#else
+            my_mutex = &mutex;
+            mutex.lock();
+#endif /* TBB_USE_ASSERT */
+        }
+
+        //! Try acquire lock on given recursive_mutex.
+        bool try_acquire( recursive_mutex& mutex ) {
+#if TBB_USE_ASSERT
+            return internal_try_acquire( mutex );
+#else
+            bool result = mutex.try_lock();
+            if( result )
+                my_mutex = &mutex;
+            return result;
+#endif /* TBB_USE_ASSERT */
+        }
+
+        //! Release lock
+        void release() {
+#if TBB_USE_ASSERT
+            internal_release();
+#else
+            my_mutex->unlock();
+            my_mutex = NULL;
+#endif /* TBB_USE_ASSERT */
+        }
+
+    private:
+        //! The pointer to the current recursive_mutex to work
+        recursive_mutex* my_mutex;
+
+        //! All checks from acquire using mutex.state were moved here
+        void __TBB_EXPORTED_METHOD internal_acquire( recursive_mutex& m );
+
+        //! All checks from try_acquire using mutex.state were moved here
+        bool __TBB_EXPORTED_METHOD internal_try_acquire( recursive_mutex& m );
+
+        //! All checks from release using mutex.state were moved here
+        void __TBB_EXPORTED_METHOD internal_release();
+
+        friend class recursive_mutex;
+    };
+
+    // Mutex traits
+    static const bool is_rw_mutex = false;
+    static const bool is_recursive_mutex = true;
+    static const bool is_fair_mutex = false;
+
+    // C++0x compatibility interface
+    
+    //! Acquire lock
+    void lock() {
+#if TBB_USE_ASSERT
+        aligned_space<scoped_lock,1> tmp;
+        new(tmp.begin()) scoped_lock(*this);
+#else
+  #if _WIN32||_WIN64
+        EnterCriticalSection(&impl);
+  #else
+        pthread_mutex_lock(&impl);
+  #endif /* _WIN32||_WIN64 */
+#endif /* TBB_USE_ASSERT */
+    }
+
+    //! Try acquiring lock (non-blocking)
+    /** Return true if lock acquired; false otherwise. */
+    bool try_lock() {
+#if TBB_USE_ASSERT
+        aligned_space<scoped_lock,1> tmp;
+        return (new(tmp.begin()) scoped_lock)->internal_try_acquire(*this);
+#else        
+  #if _WIN32||_WIN64
+        return TryEnterCriticalSection(&impl)!=0;
+  #else
+        return pthread_mutex_trylock(&impl)==0;
+  #endif /* _WIN32||_WIN64 */
+#endif /* TBB_USE_ASSERT */
+    }
+
+    //! Release lock
+    void unlock() {
+#if TBB_USE_ASSERT
+        aligned_space<scoped_lock,1> tmp;
+        scoped_lock& s = *tmp.begin();
+        s.my_mutex = this;
+        s.internal_release();
+#else
+  #if _WIN32||_WIN64
+        LeaveCriticalSection(&impl);
+  #else
+        pthread_mutex_unlock(&impl);
+  #endif /* _WIN32||_WIN64 */
+#endif /* TBB_USE_ASSERT */
+    }
+
+private:
+#if _WIN32||_WIN64
+    CRITICAL_SECTION impl;
+    enum state_t {
+        INITIALIZED=0x1234,
+        DESTROYED=0x789A,
+    } state;
+#else
+    pthread_mutex_t impl;
+#endif /* _WIN32||_WIN64 */
+
+    //! All checks from mutex constructor using mutex.state were moved here
+    void __TBB_EXPORTED_METHOD internal_construct();
+
+    //! All checks from mutex destructor using mutex.state were moved here
+    void __TBB_EXPORTED_METHOD internal_destroy();
+};
+
+__TBB_DEFINE_PROFILING_SET_NAME(recursive_mutex)
+
+} // namespace tbb 
+
+#endif /* __TBB_recursive_mutex_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/scalable_allocator.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/scalable_allocator.h
new file mode 100644 (file)
index 0000000..c8fd2d1
--- /dev/null
@@ -0,0 +1,199 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_scalable_allocator_H
+#define __TBB_scalable_allocator_H
+/** @file */
+
+#include <stddef.h> /* Need ptrdiff_t and size_t from here. */
+
+#if !defined(__cplusplus) && __ICC==1100
+    #pragma warning (push)
+    #pragma warning (disable: 991)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#if _MSC_VER >= 1400
+#define __TBB_EXPORTED_FUNC   __cdecl
+#else
+#define __TBB_EXPORTED_FUNC
+#endif
+
+/** The "malloc" analogue to allocate block of memory of size bytes.
+  * @ingroup memory_allocation */
+void * __TBB_EXPORTED_FUNC scalable_malloc (size_t size);
+
+/** The "free" analogue to discard a previously allocated piece of memory.
+    @ingroup memory_allocation */
+void   __TBB_EXPORTED_FUNC scalable_free (void* ptr);
+
+/** The "realloc" analogue complementing scalable_malloc.
+    @ingroup memory_allocation */
+void * __TBB_EXPORTED_FUNC scalable_realloc (void* ptr, size_t size);
+
+/** The "calloc" analogue complementing scalable_malloc.
+    @ingroup memory_allocation */
+void * __TBB_EXPORTED_FUNC scalable_calloc (size_t nobj, size_t size);
+
+/** The "posix_memalign" analogue.
+    @ingroup memory_allocation */
+int __TBB_EXPORTED_FUNC scalable_posix_memalign (void** memptr, size_t alignment, size_t size);
+
+/** The "_aligned_malloc" analogue.
+    @ingroup memory_allocation */
+void * __TBB_EXPORTED_FUNC scalable_aligned_malloc (size_t size, size_t alignment);
+
+/** The "_aligned_realloc" analogue.
+    @ingroup memory_allocation */
+void * __TBB_EXPORTED_FUNC scalable_aligned_realloc (void* ptr, size_t size, size_t alignment);
+
+/** The "_aligned_free" analogue.
+    @ingroup memory_allocation */
+void __TBB_EXPORTED_FUNC scalable_aligned_free (void* ptr);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#ifdef __cplusplus
+
+#include <new>      /* To use new with the placement argument */
+
+/* Ensure that including this header does not cause implicit linkage with TBB */
+#ifndef __TBB_NO_IMPLICIT_LINKAGE
+    #define __TBB_NO_IMPLICIT_LINKAGE 1
+    #include "tbb_stddef.h"
+    #undef  __TBB_NO_IMPLICIT_LINKAGE
+#else
+    #include "tbb_stddef.h"
+#endif
+
+
+namespace tbb {
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Workaround for erroneous "unreferenced parameter" warning in method destroy.
+    #pragma warning (push)
+    #pragma warning (disable: 4100)
+#endif
+
+//! Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
+/** The members are ordered the same way they are in section 20.4.1
+    of the ISO C++ standard.
+    @ingroup memory_allocation */
+template<typename T>
+class scalable_allocator {
+public:
+    typedef typename internal::allocator_type<T>::value_type value_type;
+    typedef value_type* pointer;
+    typedef const value_type* const_pointer;
+    typedef value_type& reference;
+    typedef const value_type& const_reference;
+    typedef size_t size_type;
+    typedef ptrdiff_t difference_type;
+    template<class U> struct rebind {
+        typedef scalable_allocator<U> other;
+    };
+
+    scalable_allocator() throw() {}
+    scalable_allocator( const scalable_allocator& ) throw() {}
+    template<typename U> scalable_allocator(const scalable_allocator<U>&) throw() {}
+
+    pointer address(reference x) const {return &x;}
+    const_pointer address(const_reference x) const {return &x;}
+
+    //! Allocate space for n objects.
+    pointer allocate( size_type n, const void* /*hint*/ =0 ) {
+        return static_cast<pointer>( scalable_malloc( n * sizeof(value_type) ) );
+    }
+
+    //! Free previously allocated block of memory
+    void deallocate( pointer p, size_type ) {
+        scalable_free( p );
+    }
+
+    //! Largest value for which method allocate might succeed.
+    size_type max_size() const throw() {
+        size_type absolutemax = static_cast<size_type>(-1) / sizeof (value_type);
+        return (absolutemax > 0 ? absolutemax : 1);
+    }
+    void construct( pointer p, const value_type& val ) { new(static_cast<void*>(p)) value_type(val); }
+    void destroy( pointer p ) {p->~value_type();}
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning (pop)
+#endif // warning 4100 is back
+
+//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
+/** @ingroup memory_allocation */
+template<>
+class scalable_allocator<void> {
+public:
+    typedef void* pointer;
+    typedef const void* const_pointer;
+    typedef void value_type;
+    template<class U> struct rebind {
+        typedef scalable_allocator<U> other;
+    };
+};
+
+template<typename T, typename U>
+inline bool operator==( const scalable_allocator<T>&, const scalable_allocator<U>& ) {return true;}
+
+template<typename T, typename U>
+inline bool operator!=( const scalable_allocator<T>&, const scalable_allocator<U>& ) {return false;}
+
+} // namespace tbb
+
+#if _MSC_VER
+    #if __TBB_BUILD && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)
+        #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1
+    #endif
+
+    #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE
+        #ifdef _DEBUG
+            #pragma comment(lib, "tbbmalloc_debug.lib")
+        #else
+            #pragma comment(lib, "tbbmalloc.lib")
+        #endif
+    #endif
+
+
+#endif
+
+#endif /* __cplusplus */
+
+#if !defined(__cplusplus) && __ICC==1100
+    #pragma warning (pop)
+#endif // ICC 11.0 warning 991 is back
+
+#endif /* __TBB_scalable_allocator_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/spin_mutex.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/spin_mutex.h
new file mode 100644 (file)
index 0000000..446821a
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_spin_mutex_H
+#define __TBB_spin_mutex_H
+
+#include <cstddef>
+#include <new>
+#include "aligned_space.h"
+#include "tbb_stddef.h"
+#include "tbb_machine.h"
+#include "tbb_profiling.h"
+
+namespace tbb {
+
+//! A lock that occupies a single byte.
+/** A spin_mutex is a spin mutex that fits in a single byte.  
+    It should be used only for locking short critical sections 
+    (typically &lt;20 instructions) when fairness is not an issue.  
+    If zero-initialized, the mutex is considered unheld.
+    @ingroup synchronization */
+class spin_mutex {
+    //! 0 if lock is released, 1 if lock is acquired.
+    unsigned char flag;
+
+public:
+    //! Construct unacquired lock.
+    /** Equivalent to zero-initialization of *this. */
+    spin_mutex() : flag(0) {
+#if TBB_USE_THREADING_TOOLS
+        internal_construct();
+#endif
+    }
+
+    //! Represents acquisition of a mutex.
+    class scoped_lock : internal::no_copy {
+    private:
+        //! Points to currently held mutex, or NULL if no lock is held.
+        spin_mutex* my_mutex; 
+
+        //! Value to store into spin_mutex::flag to unlock the mutex.
+        internal::uintptr my_unlock_value;
+
+        //! Like acquire, but with ITT instrumentation.
+        void __TBB_EXPORTED_METHOD internal_acquire( spin_mutex& m );
+
+        //! Like try_acquire, but with ITT instrumentation.
+        bool __TBB_EXPORTED_METHOD internal_try_acquire( spin_mutex& m );
+
+        //! Like release, but with ITT instrumentation.
+        void __TBB_EXPORTED_METHOD internal_release();
+
+        friend class spin_mutex;
+
+    public:
+        //! Construct without acquiring a mutex.
+        scoped_lock() : my_mutex(NULL), my_unlock_value(0) {}
+
+        //! Construct and acquire lock on a mutex.
+        scoped_lock( spin_mutex& m ) { 
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
+            my_mutex=NULL;
+            internal_acquire(m);
+#else
+            my_unlock_value = __TBB_LockByte(m.flag);
+            my_mutex=&m;
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/
+        }
+
+        //! Acquire lock.
+        void acquire( spin_mutex& m ) {
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
+            internal_acquire(m);
+#else
+            my_unlock_value = __TBB_LockByte(m.flag);
+            my_mutex = &m;
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/
+        }
+
+        //! Try acquiring lock (non-blocking)
+        /** Return true if lock acquired; false otherwise. */
+        bool try_acquire( spin_mutex& m ) {
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
+            return internal_try_acquire(m);
+#else
+            bool result = __TBB_TryLockByte(m.flag);
+            if( result ) {
+                my_unlock_value = 0;
+                my_mutex = &m;
+            }
+            return result;
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/
+        }
+
+        //! Release lock
+        void release() {
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
+            internal_release();
+#else
+            __TBB_store_with_release(my_mutex->flag, static_cast<unsigned char>(my_unlock_value));
+            my_mutex = NULL;
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
+        }
+
+        //! Destroy lock.  If holding a lock, releases the lock first.
+        ~scoped_lock() {
+            if( my_mutex ) {
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
+                internal_release();
+#else
+                __TBB_store_with_release(my_mutex->flag, static_cast<unsigned char>(my_unlock_value));
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
+            }
+        }
+    };
+
+    void __TBB_EXPORTED_METHOD internal_construct();
+
+    // Mutex traits
+    static const bool is_rw_mutex = false;
+    static const bool is_recursive_mutex = false;
+    static const bool is_fair_mutex = false;
+
+    // ISO C++0x compatibility methods
+
+    //! Acquire lock
+    void lock() {
+#if TBB_USE_THREADING_TOOLS
+        aligned_space<scoped_lock,1> tmp;
+        new(tmp.begin()) scoped_lock(*this);
+#else
+        __TBB_LockByte(flag);
+#endif /* TBB_USE_THREADING_TOOLS*/
+    }
+
+    //! Try acquiring lock (non-blocking)
+    /** Return true if lock acquired; false otherwise. */
+    bool try_lock() {
+#if TBB_USE_THREADING_TOOLS
+        aligned_space<scoped_lock,1> tmp;
+        return (new(tmp.begin()) scoped_lock)->internal_try_acquire(*this);
+#else
+        return __TBB_TryLockByte(flag);
+#endif /* TBB_USE_THREADING_TOOLS*/
+    }
+
+    //! Release lock
+    void unlock() {
+#if TBB_USE_THREADING_TOOLS
+        aligned_space<scoped_lock,1> tmp;
+        scoped_lock& s = *tmp.begin();
+        s.my_mutex = this;
+        s.my_unlock_value = 0;
+        s.internal_release();
+#else
+        __TBB_store_with_release(flag, 0);
+#endif /* TBB_USE_THREADING_TOOLS */
+    }
+
+    friend class scoped_lock;
+};
+
+__TBB_DEFINE_PROFILING_SET_NAME(spin_mutex)
+
+} // namespace tbb
+
+#endif /* __TBB_spin_mutex_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/spin_rw_mutex.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/spin_rw_mutex.h
new file mode 100644 (file)
index 0000000..bf81d12
--- /dev/null
@@ -0,0 +1,229 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_spin_rw_mutex_H
+#define __TBB_spin_rw_mutex_H
+
+#include "tbb_stddef.h"
+#include "tbb_machine.h"
+#include "tbb_profiling.h"
+
+namespace tbb {
+
+class spin_rw_mutex_v3;
+typedef spin_rw_mutex_v3 spin_rw_mutex;
+
+//! Fast, unfair, spinning reader-writer lock with backoff and writer-preference
+/** @ingroup synchronization */
+class spin_rw_mutex_v3 {
+    //! @cond INTERNAL
+
+    //! Internal acquire write lock.
+    bool __TBB_EXPORTED_METHOD internal_acquire_writer();
+
+    //! Out of line code for releasing a write lock.  
+    /** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
+    void __TBB_EXPORTED_METHOD internal_release_writer();
+
+    //! Internal acquire read lock.
+    void __TBB_EXPORTED_METHOD internal_acquire_reader();
+
+    //! Internal upgrade reader to become a writer.
+    bool __TBB_EXPORTED_METHOD internal_upgrade();
+
+    //! Out of line code for downgrading a writer to a reader.   
+    /** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
+    void __TBB_EXPORTED_METHOD internal_downgrade();
+
+    //! Internal release read lock.
+    void __TBB_EXPORTED_METHOD internal_release_reader();
+
+    //! Internal try_acquire write lock.
+    bool __TBB_EXPORTED_METHOD internal_try_acquire_writer();
+
+    //! Internal try_acquire read lock.
+    bool __TBB_EXPORTED_METHOD internal_try_acquire_reader();
+
+    //! @endcond
+public:
+    //! Construct unacquired mutex.
+    spin_rw_mutex_v3() : state(0) {
+#if TBB_USE_THREADING_TOOLS
+        internal_construct();
+#endif
+    }
+
+#if TBB_USE_ASSERT
+    //! Destructor asserts if the mutex is acquired, i.e. state is zero.
+    ~spin_rw_mutex_v3() {
+        __TBB_ASSERT( !state, "destruction of an acquired mutex");
+    };
+#endif /* TBB_USE_ASSERT */
+
+    //! The scoped locking pattern
+    /** It helps to avoid the common problem of forgetting to release lock.
+        It also nicely provides the "node" for queuing locks. */
+    class scoped_lock : internal::no_copy {
+    public:
+        //! Construct lock that has not acquired a mutex.
+        /** Equivalent to zero-initialization of *this. */
+        scoped_lock() : mutex(NULL) {}
+
+        //! Acquire lock on given mutex.
+        /** Upon entry, *this should not be in the "have acquired a mutex" state. */
+        scoped_lock( spin_rw_mutex& m, bool write = true ) : mutex(NULL) {
+            acquire(m, write);
+        }
+
+        //! Release lock (if lock is held).
+        ~scoped_lock() {
+            if( mutex ) release();
+        }
+
+        //! Acquire lock on given mutex.
+        void acquire( spin_rw_mutex& m, bool write = true ) {
+            __TBB_ASSERT( !mutex, "holding mutex already" );
+            is_writer = write; 
+            mutex = &m;
+            if( write ) mutex->internal_acquire_writer();
+            else        mutex->internal_acquire_reader();
+        }
+
+        //! Upgrade reader to become a writer.
+        /** Returns true if the upgrade happened without re-acquiring the lock and false if opposite */
+        bool upgrade_to_writer() {
+            __TBB_ASSERT( mutex, "lock is not acquired" );
+            __TBB_ASSERT( !is_writer, "not a reader" );
+            is_writer = true; 
+            return mutex->internal_upgrade();
+        }
+
+        //! Release lock.
+        void release() {
+            __TBB_ASSERT( mutex, "lock is not acquired" );
+            spin_rw_mutex *m = mutex; 
+            mutex = NULL;
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
+            if( is_writer ) m->internal_release_writer();
+            else            m->internal_release_reader();
+#else
+            if( is_writer ) __TBB_AtomicAND( &m->state, READERS ); 
+            else            __TBB_FetchAndAddWrelease( &m->state, -(intptr_t)ONE_READER);
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
+        }
+
+        //! Downgrade writer to become a reader.
+        bool downgrade_to_reader() {
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
+            __TBB_ASSERT( mutex, "lock is not acquired" );
+            __TBB_ASSERT( is_writer, "not a writer" );
+            mutex->internal_downgrade();
+#else
+            __TBB_FetchAndAddW( &mutex->state, ((intptr_t)ONE_READER-WRITER));
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
+            is_writer = false;
+
+            return true;
+        }
+
+        //! Try acquire lock on given mutex.
+        bool try_acquire( spin_rw_mutex& m, bool write = true ) {
+            __TBB_ASSERT( !mutex, "holding mutex already" );
+            bool result;
+            is_writer = write; 
+            result = write? m.internal_try_acquire_writer()
+                          : m.internal_try_acquire_reader();
+            if( result ) 
+                mutex = &m;
+            return result;
+        }
+
+    private:
+        //! The pointer to the current mutex that is held, or NULL if no mutex is held.
+        spin_rw_mutex* mutex;
+
+        //! If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.
+        /** Not defined if not holding a lock. */
+        bool is_writer;
+    };
+
+    // Mutex traits
+    static const bool is_rw_mutex = true;
+    static const bool is_recursive_mutex = false;
+    static const bool is_fair_mutex = false;
+
+    // ISO C++0x compatibility methods
+
+    //! Acquire writer lock
+    void lock() {internal_acquire_writer();}
+
+    //! Try acquiring writer lock (non-blocking)
+    /** Return true if lock acquired; false otherwise. */
+    bool try_lock() {return internal_try_acquire_writer();}
+
+    //! Release lock
+    void unlock() {
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
+        if( state&WRITER ) internal_release_writer();
+        else               internal_release_reader();
+#else
+        if( state&WRITER ) __TBB_AtomicAND( &state, READERS ); 
+        else               __TBB_FetchAndAddWrelease( &state, -(intptr_t)ONE_READER);
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
+    }
+
+    // Methods for reader locks that resemble ISO C++0x compatibility methods.
+
+    //! Acquire reader lock
+    void lock_read() {internal_acquire_reader();}
+
+    //! Try acquiring reader lock (non-blocking)
+    /** Return true if reader lock acquired; false otherwise. */
+    bool try_lock_read() {return internal_try_acquire_reader();}
+
+private:
+    typedef intptr_t state_t;
+    static const state_t WRITER = 1;
+    static const state_t WRITER_PENDING = 2;
+    static const state_t READERS = ~(WRITER | WRITER_PENDING);
+    static const state_t ONE_READER = 4;
+    static const state_t BUSY = WRITER | READERS;
+    //! State of lock
+    /** Bit 0 = writer is holding lock
+        Bit 1 = request by a writer to acquire lock (hint to readers to wait)
+        Bit 2..N = number of readers holding lock */
+    state_t state;
+
+    void __TBB_EXPORTED_METHOD internal_construct();
+};
+
+__TBB_DEFINE_PROFILING_SET_NAME(spin_rw_mutex)
+
+} // namespace tbb
+
+#endif /* __TBB_spin_rw_mutex_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/task.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/task.h
new file mode 100644 (file)
index 0000000..aa21ab2
--- /dev/null
@@ -0,0 +1,842 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_task_H
+#define __TBB_task_H
+
+#include "tbb_stddef.h"
+#include "tbb_machine.h"
+
+#if __TBB_EXCEPTIONS
+#include "cache_aligned_allocator.h"
+#endif /* __TBB_EXCEPTIONS */
+
+namespace tbb {
+
+class task;
+class task_list;
+
+#if __TBB_EXCEPTIONS
+class task_group_context;
+#endif /* __TBB_EXCEPTIONS */
+
+//! @cond INTERNAL
+namespace internal {
+
+    class scheduler: no_copy {
+    public:
+        //! For internal use only
+        virtual void spawn( task& first, task*& next ) = 0;
+
+        //! For internal use only
+        virtual void wait_for_all( task& parent, task* child ) = 0;
+
+        //! For internal use only
+        virtual void spawn_root_and_wait( task& first, task*& next ) = 0;
+
+        //! Pure virtual destructor;
+        //  Have to have it just to shut up overzealous compilation warnings
+        virtual ~scheduler() = 0;
+    };
+
+    //! A reference count
+    /** Should always be non-negative.  A signed type is used so that underflow can be detected. */
+    typedef intptr reference_count;
+
+    //! An id as used for specifying affinity.
+    typedef unsigned short affinity_id;
+
+#if __TBB_EXCEPTIONS
+    struct context_list_node_t {
+        context_list_node_t *my_prev,
+                            *my_next;
+    };
+
+    class allocate_root_with_context_proxy: no_assign {
+        task_group_context& my_context;
+    public:
+        allocate_root_with_context_proxy ( task_group_context& ctx ) : my_context(ctx) {}
+        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;
+        void __TBB_EXPORTED_METHOD free( task& ) const;
+    };
+#endif /* __TBB_EXCEPTIONS */
+
+    class allocate_root_proxy: no_assign {
+    public:
+        static task& __TBB_EXPORTED_FUNC allocate( size_t size );
+        static void __TBB_EXPORTED_FUNC free( task& );
+    };
+
+    class allocate_continuation_proxy: no_assign {
+    public:
+        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;
+        void __TBB_EXPORTED_METHOD free( task& ) const;
+    };
+
+    class allocate_child_proxy: no_assign {
+    public:
+        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;
+        void __TBB_EXPORTED_METHOD free( task& ) const;
+    };
+
+    class allocate_additional_child_of_proxy: no_assign {
+        task& self;
+        task& parent;
+    public:
+        allocate_additional_child_of_proxy( task& self_, task& parent_ ) : self(self_), parent(parent_) {}
+        task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;
+        void __TBB_EXPORTED_METHOD free( task& ) const;
+    };
+
+    class task_group_base;
+
+    //! Memory prefix to a task object.
+    /** This class is internal to the library.
+        Do not reference it directly, except within the library itself.
+        Fields are ordered in way that preserves backwards compatibility and yields 
+        good packing on typical 32-bit and 64-bit platforms.
+        @ingroup task_scheduling */
+    class task_prefix {
+    private:
+        friend class tbb::task;
+        friend class tbb::task_list;
+        friend class internal::scheduler;
+        friend class internal::allocate_root_proxy;
+        friend class internal::allocate_child_proxy;
+        friend class internal::allocate_continuation_proxy;
+        friend class internal::allocate_additional_child_of_proxy;
+        friend class internal::task_group_base;
+
+#if __TBB_EXCEPTIONS
+        //! Shared context that is used to communicate asynchronous state changes
+        /** Currently it is used to broadcast cancellation requests generated both 
+            by users and as the result of unhandled exceptions in the task::execute()
+            methods. */
+        task_group_context  *context;
+#endif /* __TBB_EXCEPTIONS */
+        
+        //! The scheduler that allocated the task, or NULL if the task is big.
+        /** Small tasks are pooled by the scheduler that allocated the task.
+            If a scheduler needs to free a small task allocated by another scheduler,
+            it returns the task to that other scheduler.  This policy avoids
+            memory space blowup issues for memory allocators that allocate from 
+            thread-specific pools. */
+        scheduler* origin;
+
+        //! The scheduler that owns the task.
+        scheduler* owner;
+
+        //! The task whose reference count includes me.
+        /** In the "blocking style" of programming, this field points to the parent task.
+            In the "continuation-passing style" of programming, this field points to the
+            continuation of the parent. */
+        tbb::task* parent;
+
+        //! Reference count used for synchronization.
+        /** In the "continuation-passing style" of programming, this field is
+            the difference of the number of allocated children minus the
+            number of children that have completed.
+            In the "blocking style" of programming, this field is one more than the difference. */
+        reference_count ref_count;
+
+        //! Scheduling depth
+        int depth;
+
+        //! A task::state_type, stored as a byte for compactness.
+        /** This state is exposed to users via method task::state(). */
+        unsigned char state;
+
+        //! Miscellaneous state that is not directly visible to users, stored as a byte for compactness.
+        /** 0x0 -> version 1.0 task
+            0x1 -> version 3.0 task
+            0x2 -> task_proxy
+            0x40 -> task has live ref_count */
+        unsigned char extra_state;
+
+        affinity_id affinity;
+
+        //! "next" field for list of task
+        tbb::task* next;
+
+        //! The task corresponding to this task_prefix.
+        tbb::task& task() {return *reinterpret_cast<tbb::task*>(this+1);}
+    };
+
+} // namespace internal
+//! @endcond
+
+#if __TBB_EXCEPTIONS
+
+#if TBB_USE_CAPTURED_EXCEPTION
+    class tbb_exception;
+#else
+    namespace internal {
+        class tbb_exception_ptr;
+    }
+#endif /* !TBB_USE_CAPTURED_EXCEPTION */
+
+//! Used to form groups of tasks 
+/** @ingroup task_scheduling 
+    The context services explicit cancellation requests from user code, and unhandled 
+    exceptions intercepted during tasks execution. Intercepting an exception results 
+    in generating internal cancellation requests (which is processed in exactly the 
+    same way as external ones). 
+
+    The context is associated with one or more root tasks and defines the cancellation 
+    group that includes all the descendants of the corresponding root task(s). Association 
+    is established when a context object is passed as an argument to the task::allocate_root()
+    method. See task_group_context::task_group_context for more details.
+    
+    The context can be bound to another one, and other contexts can be bound to it,
+    forming a tree-like structure: parent -> this -> children. Arrows here designate
+    cancellation propagation direction. If a task in a cancellation group is canceled
+    all the other tasks in this group and groups bound to it (as children) get canceled too.
+
+    IMPLEMENTATION NOTE: 
+    When adding new members to task_group_context or changing types of existing ones, 
+    update the size of both padding buffers (_leading_padding and _trailing_padding)
+    appropriately. See also VERSIONING NOTE at the constructor definition below. **/
+class task_group_context : internal::no_copy
+{
+private:
+#if TBB_USE_CAPTURED_EXCEPTION
+    typedef tbb_exception exception_container_type;
+#else
+    typedef internal::tbb_exception_ptr exception_container_type;
+#endif
+
+    enum version_traits_word_layout {
+        traits_offset = 16,
+        version_mask = 0xFFFF,
+        traits_mask = 0xFFFFul << traits_offset
+    };
+
+public:
+    enum kind_type {
+        isolated,
+        bound
+    };
+
+    enum traits_type {
+        exact_exception = 0x0001ul << traits_offset,
+        no_cancellation = 0x0002ul << traits_offset,
+        concurrent_wait = 0x0004ul << traits_offset,
+#if TBB_USE_CAPTURED_EXCEPTION
+        default_traits = 0
+#else
+        default_traits = exact_exception
+#endif /* !TBB_USE_CAPTURED_EXCEPTION */
+    };
+
+private:
+    union {
+        //! Flavor of this context: bound or isolated.
+        kind_type my_kind;
+        uintptr_t _my_kind_aligner;
+    };
+
+    //! Pointer to the context of the parent cancellation group. NULL for isolated contexts.
+    task_group_context *my_parent;
+
+    //! Used to form the thread specific list of contexts without additional memory allocation.
+    /** A context is included into the list of the current thread when its binding to 
+        its parent happens. Any context can be present in the list of one thread only. **/
+    internal::context_list_node_t my_node;
+
+    //! Leading padding protecting accesses to frequently used members from false sharing.
+    /** Read accesses to the field my_cancellation_requested are on the hot path inside
+        the scheduler. This padding ensures that this field never shares the same cache 
+        line with a local variable that is frequently written to. **/
+    char _leading_padding[internal::NFS_MaxLineSize - 
+                    2 * sizeof(uintptr_t)- sizeof(void*) - sizeof(internal::context_list_node_t)];
+    
+    //! Specifies whether cancellation was request for this task group.
+    uintptr_t my_cancellation_requested;
+    
+    //! Version for run-time checks and behavioral traits of the context.
+    /** Version occupies low 16 bits, and traits (zero or more ORed enumerators
+        from the traits_type enumerations) take the next 16 bits.
+        Original (zeroth) version of the context did not support any traits. **/
+    uintptr_t  my_version_and_traits;
+
+    //! Pointer to the container storing exception being propagated across this task group.
+    exception_container_type *my_exception;
+
+    //! Scheduler that registered this context in its thread specific list.
+    /** This field is not terribly necessary, but it allows to get a small performance 
+        benefit by getting us rid of using thread local storage. We do not care 
+        about extra memory it takes since this data structure is excessively padded anyway. **/
+    void *my_owner;
+
+    //! Trailing padding protecting accesses to frequently used members from false sharing
+    /** \sa _leading_padding **/
+    char _trailing_padding[internal::NFS_MaxLineSize - sizeof(intptr_t) - 2 * sizeof(void*)];
+
+public:
+    //! Default & binding constructor.
+    /** By default a bound context is created. That is this context will be bound 
+        (as child) to the context of the task calling task::allocate_root(this_context) 
+        method. Cancellation requests passed to the parent context are propagated
+        to all the contexts bound to it.
+
+        If task_group_context::isolated is used as the argument, then the tasks associated
+        with this context will never be affected by events in any other context.
+        
+        Creating isolated contexts involve much less overhead, but they have limited
+        utility. Normally when an exception occurs in an algorithm that has nested
+        ones running, it is desirably to have all the nested algorithms canceled 
+        as well. Such a behavior requires nested algorithms to use bound contexts.
+        
+        There is one good place where using isolated algorithms is beneficial. It is
+        a master thread. That is if a particular algorithm is invoked directly from
+        the master thread (not from a TBB task), supplying it with explicitly 
+        created isolated context will result in a faster algorithm startup.
+        
+        VERSIONING NOTE: 
+        Implementation(s) of task_group_context constructor(s) cannot be made 
+        entirely out-of-line because the run-time version must be set by the user 
+        code. This will become critically important for binary compatibility, if 
+        we ever have to change the size of the context object.
+
+        Boosting the runtime version will also be necessary whenever new fields
+        are introduced in the currently unused padding areas or the meaning of 
+        the existing fields is changed or extended. **/
+    task_group_context ( kind_type relation_with_parent = bound,
+                         uintptr_t traits = default_traits )
+        : my_kind(relation_with_parent)
+        , my_version_and_traits(1 | traits)
+    {
+        init();
+    }
+
+    __TBB_EXPORTED_METHOD ~task_group_context ();
+
+    //! Forcefully reinitializes the context after the task tree it was associated with is completed.
+    /** Because the method assumes that all the tasks that used to be associated with 
+        this context have already finished, calling it while the context is still 
+        in use somewhere in the task hierarchy leads to undefined behavior.
+        
+        IMPORTANT: This method is not thread safe!
+
+        The method does not change the context's parent if it is set. **/ 
+    void __TBB_EXPORTED_METHOD reset ();
+
+    //! Initiates cancellation of all tasks in this cancellation group and its subordinate groups.
+    /** \return false if cancellation has already been requested, true otherwise. 
+
+        Note that canceling never fails. When false is returned, it just means that 
+        another thread (or this one) has already sent cancellation request to this
+        context or to one of its ancestors (if this context is bound). It is guaranteed
+        that when this method is concurrently called on the same not yet cancelled 
+        context, true will be returned by one and only one invocation. **/
+    bool __TBB_EXPORTED_METHOD cancel_group_execution ();
+
+    //! Returns true if the context received cancellation request.
+    bool __TBB_EXPORTED_METHOD is_group_execution_cancelled () const;
+
+    //! Records the pending exception, and cancels the task group.
+    /** May be called only from inside a catch-block. If the context is already 
+        canceled, does nothing. 
+        The method brings the task group associated with this context exactly into 
+        the state it would be in, if one of its tasks threw the currently pending 
+        exception during its execution. In other words, it emulates the actions 
+        of the scheduler's dispatch loop exception handler. **/
+    void __TBB_EXPORTED_METHOD register_pending_exception ();
+
+protected:
+    //! Out-of-line part of the constructor. 
+    /** Singled out to ensure backward binary compatibility of the future versions. **/
+    void __TBB_EXPORTED_METHOD init ();
+
+private:
+    friend class task;
+    friend class internal::allocate_root_with_context_proxy;
+
+    static const kind_type binding_required = bound;
+    static const kind_type binding_completed = kind_type(bound+1);
+
+    //! Checks if any of the ancestors has a cancellation request outstanding, 
+    //! and propagates it back to descendants.
+    void propagate_cancellation_from_ancestors ();
+
+    //! For debugging purposes only.
+    bool is_alive () { 
+#if TBB_USE_DEBUG
+        return my_version_and_traits != 0xDeadBeef;
+#else
+        return true;
+#endif /* TBB_USE_DEBUG */
+    }
+}; // class task_group_context
+
+#endif /* __TBB_EXCEPTIONS */
+
+//! Base class for user-defined tasks.
+/** @ingroup task_scheduling */
+class task: internal::no_copy {
+    //! Set reference count
+    void __TBB_EXPORTED_METHOD internal_set_ref_count( int count );
+
+    //! Decrement reference count and return true if non-zero.
+    internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count();
+
+protected:
+    //! Default constructor.
+    task() {prefix().extra_state=1;}
+
+public:
+    //! Destructor.
+    virtual ~task() {}
+
+    //! Should be overridden by derived classes.
+    virtual task* execute() = 0;
+
+    //! Enumeration of task states that the scheduler considers.
+    enum state_type {
+        //! task is running, and will be destroyed after method execute() completes.
+        executing,
+        //! task to be rescheduled.
+        reexecute,
+        //! task is in ready pool, or is going to be put there, or was just taken off.
+        ready,
+        //! task object is freshly allocated or recycled.
+        allocated,
+        //! task object is on free list, or is going to be put there, or was just taken off.
+        freed,
+        //! task to be recycled as continuation
+        recycle
+    };
+
+    //------------------------------------------------------------------------
+    // Allocating tasks
+    //------------------------------------------------------------------------
+
+    //! Returns proxy for overloaded new that allocates a root task.
+    static internal::allocate_root_proxy allocate_root() {
+        return internal::allocate_root_proxy();
+    }
+
+#if __TBB_EXCEPTIONS
+    //! Returns proxy for overloaded new that allocates a root task associated with user supplied context.
+    static internal::allocate_root_with_context_proxy allocate_root( task_group_context& ctx ) {
+        return internal::allocate_root_with_context_proxy(ctx);
+    }
+#endif /* __TBB_EXCEPTIONS */
+
+    //! Returns proxy for overloaded new that allocates a continuation task of *this.
+    /** The continuation's parent becomes the parent of *this. */
+    internal::allocate_continuation_proxy& allocate_continuation() {
+        return *reinterpret_cast<internal::allocate_continuation_proxy*>(this);
+    }
+
+    //! Returns proxy for overloaded new that allocates a child task of *this.
+    internal::allocate_child_proxy& allocate_child() {
+        return *reinterpret_cast<internal::allocate_child_proxy*>(this);
+    }
+
+    //! Like allocate_child, except that task's parent becomes "t", not this.
+    /** Typically used in conjunction with schedule_to_reexecute to implement while loops.
+        Atomically increments the reference count of t.parent() */
+    internal::allocate_additional_child_of_proxy allocate_additional_child_of( task& t ) {
+        return internal::allocate_additional_child_of_proxy(*this,t);
+    }
+
+    //! Destroy a task.
+    /** Usually, calling this method is unnecessary, because a task is
+        implicitly deleted after its execute() method runs.  However,
+        sometimes a task needs to be explicitly deallocated, such as
+        when a root task is used as the parent in spawn_and_wait_for_all. */
+    void __TBB_EXPORTED_METHOD destroy( task& victim );
+
+    //------------------------------------------------------------------------
+    // Recycling of tasks
+    //------------------------------------------------------------------------
+
+    //! Change this to be a continuation of its former self.
+    /** The caller must guarantee that the task's refcount does not become zero until
+        after the method execute() returns.  Typically, this is done by having
+        method execute() return a pointer to a child of the task.  If the guarantee
+        cannot be made, use method recycle_as_safe_continuation instead. 
+       
+        Because of the hazard, this method may be deprecated in the future. */
+    void recycle_as_continuation() {
+        __TBB_ASSERT( prefix().state==executing, "execute not running?" );
+        prefix().state = allocated;
+    }
+
+    //! Recommended to use, safe variant of recycle_as_continuation
+    /** For safety, it requires additional increment of ref_count. */
+    void recycle_as_safe_continuation() {
+        __TBB_ASSERT( prefix().state==executing, "execute not running?" );
+        prefix().state = recycle;
+    }
+
+    //! Change this to be a child of new_parent.
+    void recycle_as_child_of( task& new_parent ) {
+        internal::task_prefix& p = prefix();
+        __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, "execute not running, or already recycled" );
+        __TBB_ASSERT( prefix().ref_count==0, "no child tasks allowed when recycled as a child" );
+        __TBB_ASSERT( p.parent==NULL, "parent must be null" );
+        __TBB_ASSERT( new_parent.prefix().state<=recycle, "corrupt parent's state" );
+        __TBB_ASSERT( new_parent.prefix().state!=freed, "parent already freed" );
+        p.state = allocated;
+        p.parent = &new_parent;
+        p.depth = new_parent.prefix().depth+1;
+#if __TBB_EXCEPTIONS
+        p.context = new_parent.prefix().context;
+#endif /* __TBB_EXCEPTIONS */
+    }
+
+    //! Schedule this for reexecution after current execute() returns.
+    /** Requires that this.execute() be running. */
+    void recycle_to_reexecute() {
+        __TBB_ASSERT( prefix().state==executing, "execute not running, or already recycled" );
+        __TBB_ASSERT( prefix().ref_count==0, "no child tasks allowed when recycled for reexecution" );
+        prefix().state = reexecute;
+    }
+
+#if __TBB_TASK_DEQUE
+    // All depth-related methods are obsolete, and are retained for the sake 
+    // of backward source compatibility only
+    intptr_t depth() const {return 0;}
+    void set_depth( intptr_t ) {}
+    void add_to_depth( int ) {}
+
+#else /* !__TBB_TASK_DEQUE */
+    //! A scheduling depth.
+    /** Guaranteed to be a signed integral type. */
+    typedef internal::intptr depth_type;
+
+    //! Scheduling depth
+    depth_type depth() const {return prefix().depth;}
+
+    //! Set scheduling depth to given value.
+    /** The depth must be non-negative */
+    void set_depth( depth_type new_depth ) {
+        __TBB_ASSERT( state()!=ready, "cannot change depth of ready task" );
+        __TBB_ASSERT( new_depth>=0, "depth cannot be negative" );
+        __TBB_ASSERT( new_depth==int(new_depth), "integer overflow error");
+        prefix().depth = int(new_depth);
+    }
+
+    //! Change scheduling depth by given amount.
+    /** The resulting depth must be non-negative. */
+    void add_to_depth( int delta ) {
+        __TBB_ASSERT( state()!=ready, "cannot change depth of ready task" );
+        __TBB_ASSERT( prefix().depth>=-delta, "depth cannot be negative" );
+        prefix().depth+=delta;
+    }
+#endif /* !__TBB_TASK_DEQUE */
+
+    //------------------------------------------------------------------------
+    // Spawning and blocking
+    //------------------------------------------------------------------------
+
+    //! Set reference count
+    void set_ref_count( int count ) {
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
+        internal_set_ref_count(count);
+#else
+        prefix().ref_count = count;
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
+    }
+
+    //! Atomically increment reference count.
+    /** Has acquire semantics */  
+    void increment_ref_count() {
+        __TBB_FetchAndIncrementWacquire( &prefix().ref_count );
+    }
+
+    //! Atomically decrement reference count.  
+    /** Has release semanics. */  
+    int decrement_ref_count() {
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
+        return int(internal_decrement_ref_count());
+#else
+        return int(__TBB_FetchAndDecrementWrelease( &prefix().ref_count ))-1;
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
+    }
+
+    //! Schedule task for execution when a worker becomes available.
+    /** After all children spawned so far finish their method task::execute,
+        their parent's method task::execute may start running.  Therefore, it
+        is important to ensure that at least one child has not completed until
+        the parent is ready to run. */
+    void spawn( task& child ) {
+#if !__TBB_RELAXED_OWNERSHIP
+        __TBB_ASSERT( is_owned_by_current_thread(), "'this' not owned by current thread" );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+        prefix().owner->spawn( child, child.prefix().next );
+    }
+
+    //! Spawn multiple tasks and clear list.
+    /** All of the tasks must be at the same depth. */
+    void spawn( task_list& list );
+
+    //! Similar to spawn followed by wait_for_all, but more efficient.
+    void spawn_and_wait_for_all( task& child ) {
+#if !__TBB_RELAXED_OWNERSHIP
+        __TBB_ASSERT( is_owned_by_current_thread(), "'this' not owned by current thread" );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+        prefix().owner->wait_for_all( *this, &child );
+    }
+
+    //! Similar to spawn followed by wait_for_all, but more efficient.
+    void __TBB_EXPORTED_METHOD spawn_and_wait_for_all( task_list& list );
+
+    //! Spawn task allocated by allocate_root, wait for it to complete, and deallocate it.
+    /** The thread that calls spawn_root_and_wait must be the same thread
+        that allocated the task. */
+    static void spawn_root_and_wait( task& root ) {
+#if !__TBB_RELAXED_OWNERSHIP
+        __TBB_ASSERT( root.is_owned_by_current_thread(), "root not owned by current thread" );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+        root.prefix().owner->spawn_root_and_wait( root, root.prefix().next );
+    }
+
+    //! Spawn root tasks on list and wait for all of them to finish.
+    /** If there are more tasks than worker threads, the tasks are spawned in
+        order of front to back. */
+    static void spawn_root_and_wait( task_list& root_list );
+
+    //! Wait for reference count to become one, and set reference count to zero.
+    /** Works on tasks while waiting. */
+    void wait_for_all() {
+#if !__TBB_RELAXED_OWNERSHIP
+        __TBB_ASSERT( is_owned_by_current_thread(), "'this' not owned by current thread" );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+        prefix().owner->wait_for_all( *this, NULL );
+    }
+
+    //! The innermost task being executed or destroyed by the current thread at the moment.
+    static task& __TBB_EXPORTED_FUNC self();
+
+    //! task on whose behalf this task is working, or NULL if this is a root.
+    task* parent() const {return prefix().parent;}
+
+#if __TBB_EXCEPTIONS
+    //! Shared context that is used to communicate asynchronous state changes
+    task_group_context* context() {return prefix().context;}
+#endif /* __TBB_EXCEPTIONS */   
+
+    //! True if task is owned by different thread than thread that owns its parent.
+    bool is_stolen_task() const {
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+        // The virtual scheduler directly identifies stolen tasks.
+        int es_virtual_steal = 4;
+        if(prefix().extra_state & es_virtual_steal)
+            return true;
+#endif /* TBB_PROVIDE_VIRTUAL_SCHEDULER */
+        internal::task_prefix& p = prefix();
+        internal::task_prefix& q = parent()->prefix();
+        return p.owner!=q.owner;
+    }
+
+    //------------------------------------------------------------------------
+    // Debugging
+    //------------------------------------------------------------------------
+
+    //! Current execution state
+    state_type state() const {return state_type(prefix().state);}
+
+    //! The internal reference count.
+    int ref_count() const {
+#if TBB_USE_ASSERT
+        internal::reference_count ref_count = prefix().ref_count;
+        __TBB_ASSERT( ref_count==int(ref_count), "integer overflow error");
+#endif
+        return int(prefix().ref_count);
+    }
+
+    //! True if this task is owned by the calling thread; false otherwise.
+    bool __TBB_EXPORTED_METHOD is_owned_by_current_thread() const;
+
+    //------------------------------------------------------------------------
+    // Affinity
+    //------------------------------------------------------------------------
+    //! An id as used for specifying affinity.
+    /** Guaranteed to be integral type.  Value of 0 means no affinity. */
+    typedef internal::affinity_id affinity_id;
+
+    //! Set affinity for this task.
+    void set_affinity( affinity_id id ) {prefix().affinity = id;}
+
+    //! Current affinity of this task
+    affinity_id affinity() const {return prefix().affinity;}
+
+    //! Invoked by scheduler to notify task that it ran on unexpected thread.
+    /** Invoked before method execute() runs, if task is stolen, or task has 
+        affinity but will be executed on another thread. 
+
+        The default action does nothing. */
+    virtual void __TBB_EXPORTED_METHOD note_affinity( affinity_id id );
+
+#if __TBB_EXCEPTIONS
+    //! Initiates cancellation of all tasks in this cancellation group and its subordinate groups.
+    /** \return false if cancellation has already been requested, true otherwise. **/
+    bool cancel_group_execution () { return prefix().context->cancel_group_execution(); }
+
+    //! Returns true if the context received cancellation request.
+    bool is_cancelled () const { return prefix().context->is_group_execution_cancelled(); }
+#endif /* __TBB_EXCEPTIONS */
+
+private:
+    friend class task_list;
+    friend class internal::scheduler;
+    friend class internal::allocate_root_proxy;
+#if __TBB_EXCEPTIONS
+    friend class internal::allocate_root_with_context_proxy;
+#endif /* __TBB_EXCEPTIONS */
+    friend class internal::allocate_continuation_proxy;
+    friend class internal::allocate_child_proxy;
+    friend class internal::allocate_additional_child_of_proxy;
+    
+    friend class internal::task_group_base;
+
+    //! Get reference to corresponding task_prefix.
+    /** Version tag prevents loader on Linux from using the wrong symbol in debug builds. **/
+    internal::task_prefix& prefix( internal::version_tag* = NULL ) const {
+        return reinterpret_cast<internal::task_prefix*>(const_cast<task*>(this))[-1];
+    }
+}; // class task
+
+//! task that does nothing.  Useful for synchronization.
+/** @ingroup task_scheduling */
+class empty_task: public task {
+    /*override*/ task* execute() {
+        return NULL;
+    }
+};
+
+//! A list of children.
+/** Used for method task::spawn_children
+    @ingroup task_scheduling */
+class task_list: internal::no_copy {
+private:
+    task* first;
+    task** next_ptr;
+    friend class task;
+public:
+    //! Construct empty list
+    task_list() : first(NULL), next_ptr(&first) {}
+
+    //! Destroys the list, but does not destroy the task objects.
+    ~task_list() {}
+
+    //! True if list if empty; false otherwise.
+    bool empty() const {return !first;}
+
+    //! Push task onto back of list.
+    void push_back( task& task ) {
+        task.prefix().next = NULL;
+        *next_ptr = &task;
+        next_ptr = &task.prefix().next;
+    }
+
+    //! Pop the front task from the list.
+    task& pop_front() {
+        __TBB_ASSERT( !empty(), "attempt to pop item from empty task_list" );
+        task* result = first;
+        first = result->prefix().next;
+        if( !first ) next_ptr = &first;
+        return *result;
+    }
+
+    //! Clear the list
+    void clear() {
+        first=NULL;
+        next_ptr=&first;
+    }
+};
+
+inline void task::spawn( task_list& list ) {
+#if !__TBB_RELAXED_OWNERSHIP
+    __TBB_ASSERT( is_owned_by_current_thread(), "'this' not owned by current thread" );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+    if( task* t = list.first ) {
+        prefix().owner->spawn( *t, *list.next_ptr );
+        list.clear();
+    }
+}
+
+inline void task::spawn_root_and_wait( task_list& root_list ) {
+    if( task* t = root_list.first ) {
+#if !__TBB_RELAXED_OWNERSHIP
+        __TBB_ASSERT( t->is_owned_by_current_thread(), "'this' not owned by current thread" );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+        t->prefix().owner->spawn_root_and_wait( *t, *root_list.next_ptr );
+        root_list.clear();
+    }
+}
+
+} // namespace tbb
+
+inline void *operator new( size_t bytes, const tbb::internal::allocate_root_proxy& ) {
+    return &tbb::internal::allocate_root_proxy::allocate(bytes);
+}
+
+inline void operator delete( void* task, const tbb::internal::allocate_root_proxy& ) {
+    tbb::internal::allocate_root_proxy::free( *static_cast<tbb::task*>(task) );
+}
+
+#if __TBB_EXCEPTIONS
+inline void *operator new( size_t bytes, const tbb::internal::allocate_root_with_context_proxy& p ) {
+    return &p.allocate(bytes);
+}
+
+inline void operator delete( void* task, const tbb::internal::allocate_root_with_context_proxy& p ) {
+    p.free( *static_cast<tbb::task*>(task) );
+}
+#endif /* __TBB_EXCEPTIONS */
+
+inline void *operator new( size_t bytes, const tbb::internal::allocate_continuation_proxy& p ) {
+    return &p.allocate(bytes);
+}
+
+inline void operator delete( void* task, const tbb::internal::allocate_continuation_proxy& p ) {
+    p.free( *static_cast<tbb::task*>(task) );
+}
+
+inline void *operator new( size_t bytes, const tbb::internal::allocate_child_proxy& p ) {
+    return &p.allocate(bytes);
+}
+
+inline void operator delete( void* task, const tbb::internal::allocate_child_proxy& p ) {
+    p.free( *static_cast<tbb::task*>(task) );
+}
+
+inline void *operator new( size_t bytes, const tbb::internal::allocate_additional_child_of_proxy& p ) {
+    return &p.allocate(bytes);
+}
+
+inline void operator delete( void* task, const tbb::internal::allocate_additional_child_of_proxy& p ) {
+    p.free( *static_cast<tbb::task*>(task) );
+}
+
+#endif /* __TBB_task_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/task_group.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/task_group.h
new file mode 100644 (file)
index 0000000..8129471
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_task_group_H
+#define __TBB_task_group_H
+
+#include "task.h"
+
+namespace tbb {
+
+template<typename F>
+class task_handle {
+    F my_func;
+
+public:
+    task_handle( const F& f ) : my_func(f) {}
+
+    void operator()() { my_func(); }
+};
+
+enum task_group_status {
+    not_complete,
+    complete,
+    canceled
+};
+
+namespace internal {
+
+// Suppress gratuitous warnings from icc 11.0 when lambda expressions are used in instances of function_task.
+//#pragma warning(disable: 588)
+
+template<typename F>
+class function_task : public task {
+    F my_func;
+    /*override*/ task* execute() {
+        my_func();
+        return NULL;
+    }
+public:
+    function_task( const F& f ) : my_func(f) {}
+};
+
+template<typename F>
+class task_handle_task : public task {
+    task_handle<F>& my_handle;
+    /*override*/ task* execute() {
+        my_handle();
+        return NULL;
+    }
+public:
+    task_handle_task( task_handle<F>& h ) : my_handle(h) {}
+};
+
+class task_group_base : internal::no_copy {
+protected:
+    empty_task* my_root;
+    task_group_context my_context;
+
+#if __TBB_RELAXED_OWNERSHIP
+    task& owner () { return *my_root; }
+#else
+    task& owner () { return task::self(); }
+#endif
+
+    template<typename F>
+    task_group_status internal_run_and_wait( F& f ) {
+        try {
+            if ( !my_context.is_group_execution_cancelled() )
+                f();
+        } catch ( ... ) {
+            my_context.register_pending_exception();
+        }
+        return wait();
+    }
+
+    template<typename F, typename Task>
+    void internal_run( F& f ) {
+        owner().spawn( *new( owner().allocate_additional_child_of(*my_root) ) Task(f) );
+    }
+
+public:
+    task_group_base( uintptr_t traits = 0 )
+        : my_context(task_group_context::bound, task_group_context::default_traits | traits)
+    {
+        my_root = new( task::allocate_root(my_context) ) empty_task;
+        my_root->set_ref_count(1);
+    }
+
+    template<typename F>
+    void run( task_handle<F>& h ) {
+        internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
+    }
+
+    task_group_status wait() {
+        try {
+            owner().prefix().owner->wait_for_all( *my_root, NULL );
+        } catch ( ... ) {
+            my_context.reset();
+            throw;
+        }
+        if ( my_context.is_group_execution_cancelled() ) {
+            my_context.reset();
+            return canceled;
+        }
+        return complete;
+    }
+
+    bool is_canceling() {
+        return my_context.is_group_execution_cancelled();
+    }
+
+    void cancel() {
+        my_context.cancel_group_execution();
+    }
+}; // class task_group_base
+
+} // namespace internal
+
+class task_group : public internal::task_group_base {
+public:
+    task_group () : task_group_base( task_group_context::concurrent_wait ) {}
+
+    ~task_group() try {
+        __TBB_ASSERT( my_root->ref_count() != 0, NULL );
+        if( my_root->ref_count() > 1 )
+            my_root->wait_for_all();
+        owner().destroy(*my_root);
+    }
+    catch (...) {
+        owner().destroy(*my_root);
+        throw;
+    }
+
+#if __SUNPRO_CC
+    template<typename F>
+    void run( task_handle<F>& h ) {
+        internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
+    }
+#else
+    using task_group_base::run;
+#endif
+
+    template<typename F>
+    void run( const F& f ) {
+        internal_run< const F, internal::function_task<F> >( f );
+    }
+
+    template<typename F>
+    task_group_status run_and_wait( const F& f ) {
+        return internal_run_and_wait<const F>( f );
+    }
+
+    template<typename F>
+    task_group_status run_and_wait( F& f ) {
+        return internal_run_and_wait<F>( f );
+    }
+
+}; // class task_group
+
+class missing_wait : public std::exception {
+public:
+    /*override*/ 
+    const char* what() const throw() { return "wait() was not called on the structured_task_group"; }
+};
+
+class structured_task_group : public internal::task_group_base {
+public:
+    ~structured_task_group() {
+        if( my_root->ref_count() > 1 ) {
+            bool stack_unwinding_in_progress = std::uncaught_exception();
+            // Always attempt to do proper cleanup to avoid inevitable memory corruption 
+            // in case of missing wait (for the sake of better testability & debuggability)
+            if ( !is_canceling() )
+                cancel();
+            my_root->wait_for_all();
+            owner().destroy(*my_root);
+            if ( !stack_unwinding_in_progress )
+                throw missing_wait();
+        }
+        else
+            owner().destroy(*my_root);
+    }
+
+    template<typename F>
+    task_group_status run_and_wait ( task_handle<F>& h ) {
+        return internal_run_and_wait< task_handle<F> >( h );
+    }
+
+    task_group_status wait() {
+        __TBB_ASSERT ( my_root->ref_count() != 0, "wait() can be called only once during the structured_task_group lifetime" );
+        return task_group_base::wait();
+    }
+}; // class structured_task_group
+
+inline 
+bool is_current_task_group_canceling() {
+    return task::self().is_cancelled();
+}
+
+} // namespace tbb
+
+#endif /* __TBB_task_group_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/task_scheduler_init.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/task_scheduler_init.h
new file mode 100644 (file)
index 0000000..f817ccc
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_task_scheduler_init_H
+#define __TBB_task_scheduler_init_H
+
+#include "tbb_stddef.h"
+
+namespace tbb {
+
+typedef std::size_t stack_size_type;
+
+//! @cond INTERNAL
+namespace internal {
+    //! Internal to library. Should not be used by clients.
+    /** @ingroup task_scheduling */
+    class scheduler;
+} // namespace internal
+//! @endcond
+
+//! Class representing reference to tbb scheduler.
+/** A thread must construct a task_scheduler_init, and keep it alive,
+    during the time that it uses the services of class task.
+    @ingroup task_scheduling */
+class task_scheduler_init: internal::no_copy {
+    /** NULL if not currently initialized. */
+    internal::scheduler* my_scheduler;
+public:
+
+    //! Typedef for number of threads that is automatic.
+    static const int automatic = -1;
+
+    //! Argument to initialize() or constructor that causes initialization to be deferred.
+    static const int deferred = -2;
+
+    //! Ensure that scheduler exists for this thread
+    /** A value of -1 lets tbb decide on the number of threads, which is typically 
+        the number of hardware threads. For production code, the default value of -1 
+        should be used, particularly if the client code is mixed with third party clients 
+        that might also use tbb.
+
+        The number_of_threads is ignored if any other task_scheduler_inits 
+        currently exist.  A thread may construct multiple task_scheduler_inits.  
+        Doing so does no harm because the underlying scheduler is reference counted. */
+    void __TBB_EXPORTED_METHOD initialize( int number_of_threads=automatic );
+
+    //! The overloaded method with stack size parameter
+    /** Overloading is necessary to preserve ABI compatibility */
+    void __TBB_EXPORTED_METHOD initialize( int number_of_threads, stack_size_type thread_stack_size );
+
+    //! Inverse of method initialize.
+    void __TBB_EXPORTED_METHOD terminate();
+
+    //! Shorthand for default constructor followed by call to intialize(number_of_threads).
+    task_scheduler_init( int number_of_threads=automatic, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)  {
+        initialize( number_of_threads, thread_stack_size );
+    }
+
+    //! Destroy scheduler for this thread if thread has no other live task_scheduler_inits.
+    ~task_scheduler_init() {
+        if( my_scheduler ) 
+            terminate();
+        internal::poison_pointer( my_scheduler );
+    }
+    //! Returns the number of threads tbb scheduler would create if initialized by default.
+    /** Result returned by this method does not depend on whether the scheduler 
+        has already been initialized.
+        
+        Because tbb 2.0 does not support blocking tasks yet, you may use this method
+        to boost the number of threads in the tbb's internal pool, if your tasks are 
+        doing I/O operations. The optimal number of additional threads depends on how
+        much time your tasks spend in the blocked state. */
+    static int __TBB_EXPORTED_FUNC default_num_threads ();
+
+    //! Returns true if scheduler is active (initialized); false otherwise
+    bool is_active() const { return my_scheduler != NULL; }
+};
+
+} // namespace tbb
+
+#endif /* __TBB_task_scheduler_init_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/task_scheduler_observer.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/task_scheduler_observer.h
new file mode 100644 (file)
index 0000000..ee8bd5d
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_task_scheduler_observer_H
+#define __TBB_task_scheduler_observer_H
+
+#include "atomic.h"
+
+#if __TBB_SCHEDULER_OBSERVER
+
+namespace tbb {
+
+namespace internal {
+
+class observer_proxy;
+
+class task_scheduler_observer_v3 {
+    friend class observer_proxy;
+    observer_proxy* my_proxy;
+    atomic<intptr> my_busy_count;
+public:
+    //! Enable or disable observation
+    void __TBB_EXPORTED_METHOD observe( bool state=true );
+
+    //! True if observation is enables; false otherwise.
+    bool is_observing() const {return my_proxy!=NULL;}
+
+    //! Construct observer with observation disabled.
+    task_scheduler_observer_v3() : my_proxy(NULL) {my_busy_count=0;}
+
+    //! Called by thread before first steal since observation became enabled
+    virtual void on_scheduler_entry( bool /*is_worker*/ ) {} 
+
+    //! Called by thread when it no longer takes part in task stealing.
+    virtual void on_scheduler_exit( bool /*is_worker*/ ) {}
+
+    //! Destructor
+    virtual ~task_scheduler_observer_v3() {observe(false);}
+};
+
+} // namespace internal
+
+typedef internal::task_scheduler_observer_v3 task_scheduler_observer;
+
+} // namespace tbb
+
+#endif /* __TBB_SCHEDULER_OBSERVER */
+
+#endif /* __TBB_task_scheduler_observer_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb.h
new file mode 100644 (file)
index 0000000..4bac7bf
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_tbb_H
+#define __TBB_tbb_H
+
+/** 
+    This header bulk-includes declarations or definitions of all the functionality 
+    provided by TBB (save for malloc dependent headers). 
+
+    If you use only a few TBB constructs, consider including specific headers only.
+    Any header listed below can be included independently of others.
+**/
+
+#include "aligned_space.h"
+#include "atomic.h"
+#include "blocked_range.h"
+#include "blocked_range2d.h"
+#include "blocked_range3d.h"
+#include "cache_aligned_allocator.h"
+#include "concurrent_hash_map.h"
+#include "concurrent_queue.h"
+#include "concurrent_vector.h"
+#include "enumerable_thread_specific.h"
+#include "mutex.h"
+#include "null_mutex.h"
+#include "null_rw_mutex.h"
+#include "parallel_do.h"
+#include "parallel_for.h"
+#include "parallel_for_each.h"
+#include "parallel_invoke.h"
+#include "parallel_reduce.h"
+#include "parallel_scan.h"
+#include "parallel_sort.h"
+#include "partitioner.h"
+#include "pipeline.h"
+#include "queuing_mutex.h"
+#include "queuing_rw_mutex.h"
+#include "recursive_mutex.h"
+#include "spin_mutex.h"
+#include "spin_rw_mutex.h"
+#include "task.h"
+#include "task_group.h"
+#include "task_scheduler_init.h"
+#include "task_scheduler_observer.h"
+#include "tbb_allocator.h"
+#include "tbb_exception.h"
+#include "tbb_thread.h"
+#include "tick_count.h"
+
+#endif /* __TBB_tbb_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_allocator.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_allocator.h
new file mode 100644 (file)
index 0000000..aa1544b
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_tbb_allocator_H
+#define __TBB_tbb_allocator_H
+
+#include <new>
+#include <cstring>
+#include "tbb_stddef.h"
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+
+    //! Deallocates memory using FreeHandler
+    /** The function uses scalable_free if scalable allocator is available and free if not*/
+    void __TBB_EXPORTED_FUNC deallocate_via_handler_v3( void *p );
+
+    //! Allocates memory using MallocHandler
+    /** The function uses scalable_malloc if scalable allocator is available and malloc if not*/
+    void* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n );
+
+    //! Returns true if standard malloc/free are used to work with memory.
+    bool __TBB_EXPORTED_FUNC is_malloc_used_v3();
+}
+//! @endcond
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Workaround for erroneous "unreferenced parameter" warning in method destroy.
+    #pragma warning (push)
+    #pragma warning (disable: 4100)
+#endif
+
+//! Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
+/** The class selects the best memory allocation mechanism available 
+    from scalable_malloc and standard malloc.
+    The members are ordered the same way they are in section 20.4.1
+    of the ISO C++ standard.
+    @ingroup memory_allocation */
+template<typename T>
+class tbb_allocator {
+public:
+    typedef typename internal::allocator_type<T>::value_type value_type;
+    typedef value_type* pointer;
+    typedef const value_type* const_pointer;
+    typedef value_type& reference;
+    typedef const value_type& const_reference;
+    typedef size_t size_type;
+    typedef ptrdiff_t difference_type;
+    template<typename U> struct rebind {
+        typedef tbb_allocator<U> other;
+    };
+
+    //! Specifies current allocator
+    enum malloc_type {
+        scalable, 
+        standard
+    };
+
+    tbb_allocator() throw() {}
+    tbb_allocator( const tbb_allocator& ) throw() {}
+    template<typename U> tbb_allocator(const tbb_allocator<U>&) throw() {}
+
+    pointer address(reference x) const {return &x;}
+    const_pointer address(const_reference x) const {return &x;}
+    
+    //! Allocate space for n objects.
+    pointer allocate( size_type n, const void* /*hint*/ = 0) {
+        return pointer(internal::allocate_via_handler_v3( n * sizeof(value_type) ));
+    }
+
+    //! Free previously allocated block of memory.
+    void deallocate( pointer p, size_type ) {
+        internal::deallocate_via_handler_v3(p);        
+    }
+
+    //! Largest value for which method allocate might succeed.
+    size_type max_size() const throw() {
+        size_type max = static_cast<size_type>(-1) / sizeof (value_type);
+        return (max > 0 ? max : 1);
+    }
+    
+    //! Copy-construct value at location pointed to by p.
+    void construct( pointer p, const value_type& value ) {new(static_cast<void*>(p)) value_type(value);}
+
+    //! Destroy value at location pointed to by p.
+    void destroy( pointer p ) {p->~value_type();}
+
+    //! Returns current allocator
+    static malloc_type allocator_type() {
+        return internal::is_malloc_used_v3() ? standard : scalable;
+    }
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning (pop)
+#endif // warning 4100 is back
+
+//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
+/** @ingroup memory_allocation */
+template<> 
+class tbb_allocator<void> {
+public:
+    typedef void* pointer;
+    typedef const void* const_pointer;
+    typedef void value_type;
+    template<typename U> struct rebind {
+        typedef tbb_allocator<U> other;
+    };
+};
+
+template<typename T, typename U>
+inline bool operator==( const tbb_allocator<T>&, const tbb_allocator<U>& ) {return true;}
+
+template<typename T, typename U>
+inline bool operator!=( const tbb_allocator<T>&, const tbb_allocator<U>& ) {return false;}
+
+//! Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
+/** The class is an adapter over an actual allocator that fills the allocation
+    using memset function with template argument C as the value.
+    The members are ordered the same way they are in section 20.4.1
+    of the ISO C++ standard.
+    @ingroup memory_allocation */
+template <typename T, template<typename X> class Allocator = tbb_allocator>
+class zero_allocator : public Allocator<T>
+{
+public:
+    typedef Allocator<T> base_allocator_type;
+    typedef typename base_allocator_type::value_type value_type;
+    typedef typename base_allocator_type::pointer pointer;
+    typedef typename base_allocator_type::const_pointer const_pointer;
+    typedef typename base_allocator_type::reference reference;
+    typedef typename base_allocator_type::const_reference const_reference;
+    typedef typename base_allocator_type::size_type size_type;
+    typedef typename base_allocator_type::difference_type difference_type;
+    template<typename U> struct rebind {
+        typedef zero_allocator<U, Allocator> other;
+    };
+
+    zero_allocator() throw() { }
+    zero_allocator(const zero_allocator &a) throw() : base_allocator_type( a ) { }
+    template<typename U>
+    zero_allocator(const zero_allocator<U> &a) throw() : base_allocator_type( Allocator<U>( a ) ) { }
+
+    pointer allocate(const size_type n, const void *hint = 0 ) {
+        pointer ptr = base_allocator_type::allocate( n, hint );
+        std::memset( ptr, 0, n * sizeof(value_type) );
+        return ptr;
+    }
+};
+
+//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
+/** @ingroup memory_allocation */
+template<template<typename T> class Allocator> 
+class zero_allocator<void, Allocator> : public Allocator<void> {
+public:
+    typedef Allocator<void> base_allocator_type;
+    typedef typename base_allocator_type::value_type value_type;
+    typedef typename base_allocator_type::pointer pointer;
+    typedef typename base_allocator_type::const_pointer const_pointer;
+    template<typename U> struct rebind {
+        typedef zero_allocator<U, Allocator> other;
+    };
+};
+
+template<typename T1, template<typename X1> class B1, typename T2, template<typename X2> class B2>
+inline bool operator==( const zero_allocator<T1,B1> &a, const zero_allocator<T2,B2> &b) {
+    return static_cast< B1<T1> >(a) == static_cast< B2<T2> >(b);
+}
+template<typename T1, template<typename X1> class B1, typename T2, template<typename X2> class B2>
+inline bool operator!=( const zero_allocator<T1,B1> &a, const zero_allocator<T2,B2> &b) {
+    return static_cast< B1<T1> >(a) != static_cast< B2<T2> >(b);
+}
+
+} // namespace tbb 
+
+#endif /* __TBB_tbb_allocator_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_config.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_config.h
new file mode 100644 (file)
index 0000000..08fd10a
--- /dev/null
@@ -0,0 +1,183 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_tbb_config_H
+#define __TBB_tbb_config_H
+
+/** This header is supposed to contain macro definitions and C style comments only.
+    The macros defined here are intended to control such aspects of TBB build as 
+    - compilation modes
+    - feature sets
+    - workarounds presence 
+**/
+
+/** Compilation modes **/
+
+#ifndef TBB_USE_DEBUG
+#ifdef TBB_DO_ASSERT
+#define TBB_USE_DEBUG TBB_DO_ASSERT
+#else
+#define TBB_USE_DEBUG 0
+#endif /* TBB_DO_ASSERT */
+#else
+#define TBB_DO_ASSERT TBB_USE_DEBUG
+#endif /* TBB_USE_DEBUG */
+
+#ifndef TBB_USE_ASSERT
+#ifdef TBB_DO_ASSERT
+#define TBB_USE_ASSERT TBB_DO_ASSERT
+#else 
+#define TBB_USE_ASSERT TBB_USE_DEBUG
+#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
+
+#ifndef TBB_USE_THREADING_TOOLS
+#ifdef TBB_DO_THREADING_TOOLS
+#define TBB_USE_THREADING_TOOLS TBB_DO_THREADING_TOOLS
+#else 
+#define TBB_USE_THREADING_TOOLS TBB_USE_DEBUG
+#endif /* TBB_DO_THREADING_TOOLS */
+#endif /* TBB_USE_THREADING_TOOLS */
+
+#ifndef TBB_USE_PERFORMANCE_WARNINGS
+#ifdef TBB_PERFORMANCE_WARNINGS
+#define TBB_USE_PERFORMANCE_WARNINGS TBB_PERFORMANCE_WARNINGS
+#else 
+#define TBB_USE_PERFORMANCE_WARNINGS TBB_USE_DEBUG
+#endif /* TBB_PEFORMANCE_WARNINGS */
+#endif /* TBB_USE_PERFORMANCE_WARNINGS */
+
+
+/** Feature sets **/
+
+#ifndef __TBB_EXCEPTIONS
+#define __TBB_EXCEPTIONS 1
+#endif /* __TBB_EXCEPTIONS */
+
+#ifndef __TBB_SCHEDULER_OBSERVER
+#define __TBB_SCHEDULER_OBSERVER 1
+#endif /* __TBB_SCHEDULER_OBSERVER */
+
+#ifndef __TBB_TASK_SCHEDULER_AUTO_INIT
+#define __TBB_TASK_SCHEDULER_AUTO_INIT 1
+#endif /* __TBB_TASK_SCHEDULER_AUTO_INIT */
+
+#ifndef __TBB_TASK_DEQUE
+#define __TBB_TASK_DEQUE 1
+#endif /* !__TBB_TASK_DEQUE */
+
+#if __TBB_TASK_DEQUE
+#ifndef __TBB_RELAXED_OWNERSHIP
+#define __TBB_RELAXED_OWNERSHIP 1
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+#else
+#ifdef __TBB_RELAXED_OWNERSHIP
+#undef __TBB_RELAXED_OWNERSHIP
+#endif /* __TBB_RELAXED_OWNERSHIP */
+#endif /* !__TBB_TASK_DEQUE */
+
+#ifndef __TBB_NEW_ITT_NOTIFY
+#define __TBB_NEW_ITT_NOTIFY 1
+#endif /* !__TBB_NEW_ITT_NOTIFY */
+
+#ifndef __TBB_PROVIDE_VIRTUAL_SCHEDULER
+#define __TBB_PROVIDE_VIRTUAL_SCHEDULER 0
+#endif /* !__TBB_PROVIDE_VIRTUAL_SCHEDULER */
+
+#if !__TBB_PROVIDE_VIRTUAL_SCHEDULER
+#ifdef DO_ITT_ANNOTATE
+#undef DO_ITT_ANNOTATE
+#endif
+#endif /* !__TBB_PROVIDE_VIRTUAL_SCHEDULER */
+
+/* TODO: The following condition should be extended as soon as new compilers/runtimes 
+         with std::exception_ptr support appear. */
+#define __TBB_EXCEPTION_PTR_PRESENT  ( _MSC_VER >= 1600 )
+
+
+#ifndef TBB_USE_CAPTURED_EXCEPTION
+    #if __TBB_EXCEPTION_PTR_PRESENT
+        #define TBB_USE_CAPTURED_EXCEPTION 0
+    #else
+        #define TBB_USE_CAPTURED_EXCEPTION 1
+    #endif
+#else /* defined TBB_USE_CAPTURED_EXCEPTION */
+    #if !TBB_USE_CAPTURED_EXCEPTION && !__TBB_EXCEPTION_PTR_PRESENT
+        #error Current runtime does not support std::exception_ptr. Set TBB_USE_CAPTURED_EXCEPTION and make sure that your code is ready to catch tbb::captured_exception.
+    #endif
+#endif /* defined TBB_USE_CAPTURED_EXCEPTION */
+
+
+#ifndef __TBB_DEFAULT_PARTITIONER
+#if TBB_DEPRECATED
+/** Default partitioner for parallel loop templates in TBB 1.0-2.1 */
+#define __TBB_DEFAULT_PARTITIONER tbb::simple_partitioner
+#else
+/** Default partitioner for parallel loop templates in TBB 2.2 */
+#define __TBB_DEFAULT_PARTITIONER tbb::auto_partitioner
+#endif /* TBB_DEFAULT_PARTITIONER */
+#endif /* !defined(__TBB_DEFAULT_PARTITIONER */
+
+/** Workarounds presence **/
+
+#if __GNUC__==4 && __GNUC_MINOR__==4
+    #define __TBB_GCC_WARNING_SUPPRESSION_ENABLED 1
+#endif
+
+/** Macros of the form __TBB_XXX_BROKEN denote known issues that are caused by
+    the bugs in compilers, standard or OS specific libraries. They should be 
+    removed as soon as the corresponding bugs are fixed or the buggy OS/compiler
+    versions go out of the support list. 
+**/
+
+#if defined(_MSC_VER) && _MSC_VER < 0x1500 && !defined(__INTEL_COMPILER)
+    /** VS2005 and earlier does not allow to declare a template class as a friend 
+        of classes defined in other namespaces. **/
+    #define __TBB_TEMPLATE_FRIENDS_BROKEN 1
+#endif
+
+#if __GLIBC__==2 && __GLIBC_MINOR__==3 || __MINGW32__
+    /** Some older versions of glibc crash when exception handling happens concurrently. **/
+    #define __TBB_EXCEPTION_HANDLING_BROKEN 1
+#endif
+
+#if __FreeBSD__
+    /** The bug in FreeBSD 8.0 results in kernel panic when there is contention 
+        on a mutex created with this attribute. **/
+    #define __TBB_PRIO_INHERIT_BROKEN 1
+
+    /** A bug in FreeBSD 8.0 results in test hanging when an exception occurs 
+        during (concurrent?) object construction by means of placement new operator. **/
+    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1
+#endif /* __FreeBSD__ */
+
+#if __LRB__
+#include "tbb_config_lrb.h"
+#endif
+
+#endif /* __TBB_tbb_config_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_exception.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_exception.h
new file mode 100644 (file)
index 0000000..190b2bf
--- /dev/null
@@ -0,0 +1,280 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_exception_H
+#define __TBB_exception_H
+
+#include "tbb_stddef.h"
+#include <stdexcept>
+
+#if __TBB_EXCEPTIONS && !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC)
+#error The current compilation environment does not support exception handling. Please set __TBB_EXCEPTIONS to 0 in tbb_config.h
+#endif
+
+namespace tbb {
+
+//! Exception for concurrent containers
+class bad_last_alloc : public std::bad_alloc {
+public:
+    virtual const char* what() const throw() { return "bad allocation in previous or concurrent attempt"; }
+    virtual ~bad_last_alloc() throw() {}
+};
+
+namespace internal {
+void __TBB_EXPORTED_FUNC throw_bad_last_alloc_exception_v4() ;
+} // namespace internal
+
+} // namespace tbb
+
+#if __TBB_EXCEPTIONS
+#include "tbb_allocator.h"
+#include <exception>
+#include <typeinfo>
+#include <new>
+
+namespace tbb {
+
+//! Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.
+/** If an unhandled exception of the type derived from tbb::tbb_exception is intercepted
+    by the TBB scheduler in one of the worker threads, it is delivered to and re-thrown in
+    the root thread. The root thread is the thread that has started the outermost algorithm 
+    or root task sharing the same task_group_context with the guilty algorithm/task (the one
+    that threw the exception first).
+    
+    Note: when documentation mentions workers with respect to exception handling, 
+    masters are implied as well, because they are completely equivalent in this context.
+    Consequently a root thread can be master or worker thread. 
+
+    NOTE: In case of nested algorithms or complex task hierarchies when the nested 
+    levels share (explicitly or by means of implicit inheritance) the task group 
+    context of the outermost level, the exception may be (re-)thrown multiple times 
+    (ultimately - in each worker on each nesting level) before reaching the root 
+    thread at the outermost level. IMPORTANT: if you intercept an exception derived 
+    from this class on a nested level, you must re-throw it in the catch block by means
+    of the "throw;" operator. 
+    
+    TBB provides two implementations of this interface: tbb::captured_exception and 
+    template class tbb::movable_exception. See their declarations for more info. **/
+class tbb_exception : public std::exception {
+public:
+    //! Creates and returns pointer to the deep copy of this exception object. 
+    /** Move semantics is allowed. **/
+    virtual tbb_exception* move () throw() = 0;
+    
+    //! Destroys objects created by the move() method.
+    /** Frees memory and calls destructor for this exception object. 
+        Can and must be used only on objects created by the move method. **/
+    virtual void destroy () throw() = 0;
+
+    //! Throws this exception object.
+    /** Make sure that if you have several levels of derivation from this interface
+        you implement or override this method on the most derived level. The implementation 
+        is as simple as "throw *this;". Failure to do this will result in exception 
+        of a base class type being thrown. **/
+    virtual void throw_self () = 0;
+
+    //! Returns RTTI name of the originally intercepted exception
+    virtual const char* name() const throw() = 0;
+
+    //! Returns the result of originally intercepted exception's what() method.
+    virtual const char* what() const throw() = 0;
+};
+
+//! This class is used by TBB to propagate information about unhandled exceptions into the root thread.
+/** Exception of this type is thrown by TBB in the root thread (thread that started a parallel 
+    algorithm ) if an unhandled exception was intercepted during the algorithm execution in one 
+    of the workers.
+    \sa tbb::tbb_exception **/
+class captured_exception : public tbb_exception
+{
+public:
+    captured_exception ( const captured_exception& src )
+        : tbb_exception(src), my_dynamic(false)
+    {
+        set(src.my_exception_name, src.my_exception_info);
+    }
+
+    captured_exception ( const char* name, const char* info )
+        : my_dynamic(false)
+    {
+        set(name, info);
+    }
+
+    __TBB_EXPORTED_METHOD ~captured_exception () throw() {
+        clear();
+    }
+
+    captured_exception& operator= ( const captured_exception& src ) {
+        if ( this != &src ) {
+            clear();
+            set(src.my_exception_name, src.my_exception_info);
+        }
+        return *this;
+    }
+
+    /*override*/ 
+    captured_exception* move () throw();
+
+    /*override*/ 
+    void destroy () throw();
+
+    /*override*/ 
+    void throw_self () { throw *this; }
+
+    /*override*/ 
+    const char* __TBB_EXPORTED_METHOD name() const throw();
+
+    /*override*/ 
+    const char* __TBB_EXPORTED_METHOD what() const throw();
+
+private:
+    //! Used only by method clone().  
+    captured_exception() {}
+
+    //! Functionally equivalent to {captured_exception e(name,info); return c.clone();}
+    static captured_exception* allocate ( const char* name, const char* info );
+
+    void set ( const char* name, const char* info ) throw();
+    void clear () throw();
+
+    bool my_dynamic;
+    const char* my_exception_name;
+    const char* my_exception_info;
+};
+
+//! Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread
+/** Code using TBB can instantiate this template with an arbitrary ExceptionData type 
+    and throw this exception object. Such exceptions are intercepted by the TBB scheduler
+    and delivered to the root thread (). 
+    \sa tbb::tbb_exception **/
+template<typename ExceptionData>
+class movable_exception : public tbb_exception
+{
+    typedef movable_exception<ExceptionData> self_type;
+
+public:
+    movable_exception ( const ExceptionData& data ) 
+        : my_exception_data(data)
+        , my_dynamic(false)
+        , my_exception_name(typeid(self_type).name())
+    {}
+
+    movable_exception ( const movable_exception& src ) throw () 
+        : tbb_exception(src)
+        , my_exception_data(src.my_exception_data)
+        , my_dynamic(false)
+        , my_exception_name(src.my_exception_name)
+    {}
+
+    ~movable_exception () throw() {}
+
+    const movable_exception& operator= ( const movable_exception& src ) {
+        if ( this != &src ) {
+            my_exception_data = src.my_exception_data;
+            my_exception_name = src.my_exception_name;
+        }
+        return *this;
+    }
+
+    ExceptionData& data () throw() { return my_exception_data; }
+
+    const ExceptionData& data () const throw() { return my_exception_data; }
+
+    /*override*/ const char* name () const throw() { return my_exception_name; }
+
+    /*override*/ const char* what () const throw() { return "tbb::movable_exception"; }
+
+    /*override*/ 
+    movable_exception* move () throw() {
+        void* e = internal::allocate_via_handler_v3(sizeof(movable_exception));
+        if ( e ) {
+            new (e) movable_exception(*this);
+            ((movable_exception*)e)->my_dynamic = true;
+        }
+        return (movable_exception*)e;
+    }
+    /*override*/ 
+    void destroy () throw() {
+        __TBB_ASSERT ( my_dynamic, "Method destroy can be called only on dynamically allocated movable_exceptions" );
+        if ( my_dynamic ) {
+            this->~movable_exception();
+            internal::deallocate_via_handler_v3(this);
+        }
+    }
+    /*override*/ 
+    void throw_self () {
+        throw *this;
+    }
+
+protected:
+    //! User data
+    ExceptionData  my_exception_data;
+
+private:
+    //! Flag specifying whether this object has been dynamically allocated (by the move method)
+    bool my_dynamic;
+
+    //! RTTI name of this class
+    /** We rely on the fact that RTTI names are static string constants. **/
+    const char* my_exception_name;
+};
+
+#if !TBB_USE_CAPTURED_EXCEPTION
+namespace internal {
+
+//! Exception container that preserves the exact copy of the original exception
+/** This class can be used only when the appropriate runtime support (mandated 
+    by C++0x) is present **/
+class tbb_exception_ptr {
+    std::exception_ptr  my_ptr;
+
+public:
+    static tbb_exception_ptr* allocate ();
+    static tbb_exception_ptr* allocate ( const tbb_exception& );
+    static tbb_exception_ptr* allocate ( const captured_exception& );
+    
+    //! Destroys this objects
+    /** Note that objects of this type can be created only by the allocate() method. **/
+    void destroy () throw();
+
+    //! Throws the contained exception .
+    void throw_self () { std::rethrow_exception(my_ptr); }
+
+private:
+    tbb_exception_ptr ( const std::exception_ptr& src ) : my_ptr(src) {}
+    tbb_exception_ptr ( const captured_exception& src ) : my_ptr(std::copy_exception(src)) {}
+}; // class tbb::internal::tbb_exception_ptr
+
+} // namespace internal
+#endif /* !TBB_USE_CAPTURED_EXCEPTION */
+
+} // namespace tbb
+
+#endif /* __TBB_EXCEPTIONS */
+
+#endif /* __TBB_exception_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_machine.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_machine.h
new file mode 100644 (file)
index 0000000..0673f24
--- /dev/null
@@ -0,0 +1,592 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#define __TBB_machine_H
+
+#include "tbb_stddef.h"
+
+#if _WIN32||_WIN64
+
+#ifdef _MANAGED
+#pragma managed(push, off)
+#endif
+
+#if __MINGW32__
+#include "machine/linux_ia32.h"
+extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
+#define __TBB_Yield()  SwitchToThread()
+#elif defined(_M_IX86)
+#include "machine/windows_ia32.h"
+#elif defined(_M_AMD64) 
+#include "machine/windows_intel64.h"
+#else
+#error Unsupported platform
+#endif
+
+#ifdef _MANAGED
+#pragma managed(pop)
+#endif
+
+#elif __linux__ || __FreeBSD__
+
+#if __i386__
+#include "machine/linux_ia32.h"
+#elif __x86_64__
+#include "machine/linux_intel64.h"
+#elif __ia64__
+#include "machine/linux_ia64.h"
+#endif
+
+#elif __APPLE__
+
+#if __i386__
+#include "machine/linux_ia32.h"
+#elif __x86_64__
+#include "machine/linux_intel64.h"
+#elif __POWERPC__
+#include "machine/mac_ppc.h"
+#endif
+
+#elif _AIX
+
+#include "machine/ibm_aix51.h"
+
+#elif __sun || __SUNPRO_CC
+
+#define __asm__ asm 
+#define __volatile__ volatile
+#if __i386  || __i386__
+#include "machine/linux_ia32.h"
+#elif __x86_64__
+#include "machine/linux_intel64.h"
+#endif
+
+#endif
+
+#if    !defined(__TBB_CompareAndSwap4) \
+    || !defined(__TBB_CompareAndSwap8) \
+    || !defined(__TBB_Yield)           \
+    || !defined(__TBB_release_consistency_helper)
+#error Minimal requirements for tbb_machine.h not satisfied 
+#endif
+
+#ifndef __TBB_load_with_acquire
+    //! Load with acquire semantics; i.e., no following memory operation can move above the load.
+    template<typename T>
+    inline T __TBB_load_with_acquire(const volatile T& location) {
+        T temp = location;
+        __TBB_release_consistency_helper();
+        return temp;
+    }
+#endif
+
+#ifndef __TBB_store_with_release
+    //! Store with release semantics; i.e., no prior memory operation can move below the store.
+    template<typename T, typename V>
+    inline void __TBB_store_with_release(volatile T& location, V value) {
+        __TBB_release_consistency_helper();
+        location = T(value); 
+    }
+#endif
+
+#ifndef __TBB_Pause
+    inline void __TBB_Pause(int32_t) {
+        __TBB_Yield();
+    }
+#endif
+
+namespace tbb {
+namespace internal {
+
+//! Class that implements exponential backoff.
+/** See implementation of spin_wait_while_eq for an example. */
+class atomic_backoff {
+    //! Time delay, in units of "pause" instructions. 
+    /** Should be equal to approximately the number of "pause" instructions
+        that take the same time as an context switch. */
+    static const int32_t LOOPS_BEFORE_YIELD = 16;
+    int32_t count;
+public:
+    atomic_backoff() : count(1) {}
+
+    //! Pause for a while.
+    void pause() {
+        if( count<=LOOPS_BEFORE_YIELD ) {
+            __TBB_Pause(count);
+            // Pause twice as long the next time.
+            count*=2;
+        } else {
+            // Pause is so long that we might as well yield CPU to scheduler.
+            __TBB_Yield();
+        }
+    }
+
+    // pause for a few times and then return false immediately.
+    bool bounded_pause() {
+        if( count<=LOOPS_BEFORE_YIELD ) {
+            __TBB_Pause(count);
+            // Pause twice as long the next time.
+            count*=2;
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    void reset() {
+        count = 1;
+    }
+};
+
+//! Spin WHILE the value of the variable is equal to a given value
+/** T and U should be comparable types. */
+template<typename T, typename U>
+void spin_wait_while_eq( const volatile T& location, U value ) {
+    atomic_backoff backoff;
+    while( location==value ) backoff.pause();
+}
+
+//! Spin UNTIL the value of the variable is equal to a given value
+/** T and U should be comparable types. */
+template<typename T, typename U>
+void spin_wait_until_eq( const volatile T& location, const U value ) {
+    atomic_backoff backoff;
+    while( location!=value ) backoff.pause();
+}
+
+// T should be unsigned, otherwise sign propagation will break correctness of bit manipulations.
+// S should be either 1 or 2, for the mask calculation to work correctly.
+// Together, these rules limit applicability of Masked CAS to unsigned char and unsigned short.
+template<size_t S, typename T>
+inline T __TBB_MaskedCompareAndSwap (volatile T *ptr, T value, T comparand ) {
+    volatile uint32_t * base = (uint32_t*)( (uintptr_t)ptr & ~(uintptr_t)0x3 );
+#if __TBB_BIG_ENDIAN
+    const uint8_t bitoffset = uint8_t( 8*( 4-S - (uintptr_t(ptr) & 0x3) ) );
+#else
+    const uint8_t bitoffset = uint8_t( 8*((uintptr_t)ptr & 0x3) );
+#endif
+    const uint32_t mask = ( (1<<(S*8)) - 1 )<<bitoffset;
+    atomic_backoff b;
+    uint32_t result;
+    for(;;) {
+        result = *base; // reload the base value which might change during the pause
+        uint32_t old_value = ( result & ~mask ) | ( comparand << bitoffset );
+        uint32_t new_value = ( result & ~mask ) | ( value << bitoffset );
+        // __TBB_CompareAndSwap4 presumed to have full fence. 
+        result = __TBB_CompareAndSwap4( base, new_value, old_value );
+        if(  result==old_value               // CAS succeeded
+          || ((result^old_value)&mask)!=0 )  // CAS failed and the bits of interest have changed
+            break;
+        else                                 // CAS failed but the bits of interest left unchanged
+            b.pause();
+    }
+    return T((result & mask) >> bitoffset);
+}
+
+template<size_t S, typename T>
+inline T __TBB_CompareAndSwapGeneric (volatile void *ptr, T value, T comparand ) { 
+    return __TBB_CompareAndSwapW((T *)ptr,value,comparand);
+}
+
+template<>
+inline uint8_t __TBB_CompareAndSwapGeneric <1,uint8_t> (volatile void *ptr, uint8_t value, uint8_t comparand ) {
+#ifdef __TBB_CompareAndSwap1
+    return __TBB_CompareAndSwap1(ptr,value,comparand);
+#else
+    return __TBB_MaskedCompareAndSwap<1,uint8_t>((volatile uint8_t *)ptr,value,comparand);
+#endif
+}
+
+template<>
+inline uint16_t __TBB_CompareAndSwapGeneric <2,uint16_t> (volatile void *ptr, uint16_t value, uint16_t comparand ) {
+#ifdef __TBB_CompareAndSwap2
+    return __TBB_CompareAndSwap2(ptr,value,comparand);
+#else
+    return __TBB_MaskedCompareAndSwap<2,uint16_t>((volatile uint16_t *)ptr,value,comparand);
+#endif
+}
+
+template<>
+inline uint32_t __TBB_CompareAndSwapGeneric <4,uint32_t> (volatile void *ptr, uint32_t value, uint32_t comparand ) { 
+    return __TBB_CompareAndSwap4(ptr,value,comparand);
+}
+
+template<>
+inline uint64_t __TBB_CompareAndSwapGeneric <8,uint64_t> (volatile void *ptr, uint64_t value, uint64_t comparand ) { 
+    return __TBB_CompareAndSwap8(ptr,value,comparand);
+}
+
+template<size_t S, typename T>
+inline T __TBB_FetchAndAddGeneric (volatile void *ptr, T addend) {
+    atomic_backoff b;
+    T result;
+    for(;;) {
+        result = *reinterpret_cast<volatile T *>(ptr);
+        // __TBB_CompareAndSwapGeneric presumed to have full fence. 
+        if( __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result )==result ) 
+            break;
+        b.pause();
+    }
+    return result;
+}
+
+template<size_t S, typename T>
+inline T __TBB_FetchAndStoreGeneric (volatile void *ptr, T value) {
+    atomic_backoff b;
+    T result;
+    for(;;) {
+        result = *reinterpret_cast<volatile T *>(ptr);
+        // __TBB_CompareAndSwapGeneric presumed to have full fence.
+        if( __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, result )==result ) 
+            break;
+        b.pause();
+    }
+    return result;
+}
+
+// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as 
+// strict as type T.  Type type should have a trivial default constructor and destructor, so that
+// arrays of that type can be declared without initializers.  
+// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands
+// to a type bigger than T.
+// The default definition here works on machines where integers are naturally aligned and the
+// strictest alignment is 16.
+#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict
+
+#if __GNUC__ || __SUNPRO_CC
+struct __TBB_machine_type_with_strictest_alignment {
+    int member[4];
+} __attribute__((aligned(16)));
+#elif _MSC_VER
+__declspec(align(16)) struct __TBB_machine_type_with_strictest_alignment {
+    int member[4];
+};
+#else
+#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T) or __TBB_machine_type_with_strictest_alignment
+#endif
+
+template<size_t N> struct type_with_alignment {__TBB_machine_type_with_strictest_alignment member;};
+template<> struct type_with_alignment<1> { char member; };
+template<> struct type_with_alignment<2> { uint16_t member; };
+template<> struct type_with_alignment<4> { uint32_t member; };
+template<> struct type_with_alignment<8> { uint64_t member; };
+
+#if _MSC_VER||defined(__GNUC__)&&__GNUC__==3 && __GNUC_MINOR__<=2  
+//! Work around for bug in GNU 3.2 and MSVC compilers.
+/** Bug is that compiler sometimes returns 0 for __alignof(T) when T has not yet been instantiated.
+    The work-around forces instantiation by forcing computation of sizeof(T) before __alignof(T). */
+template<size_t Size, typename T> 
+struct work_around_alignment_bug {
+#if _MSC_VER
+    static const size_t alignment = __alignof(T);
+#else
+    static const size_t alignment = __alignof__(T);
+#endif
+};
+#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<tbb::internal::work_around_alignment_bug<sizeof(T),T>::alignment>
+#elif __GNUC__ || __SUNPRO_CC
+#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__alignof__(T)>
+#else
+#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) __TBB_machine_type_with_strictest_alignment
+#endif
+#endif  /* ____TBB_TypeWithAlignmentAtLeastAsStrict */
+
+} // namespace internal
+} // namespace tbb
+
+#ifndef __TBB_CompareAndSwap1
+#define __TBB_CompareAndSwap1 tbb::internal::__TBB_CompareAndSwapGeneric<1,uint8_t>
+#endif
+
+#ifndef __TBB_CompareAndSwap2 
+#define __TBB_CompareAndSwap2 tbb::internal::__TBB_CompareAndSwapGeneric<2,uint16_t>
+#endif
+
+#ifndef __TBB_CompareAndSwapW
+#define __TBB_CompareAndSwapW tbb::internal::__TBB_CompareAndSwapGeneric<sizeof(ptrdiff_t),ptrdiff_t>
+#endif
+
+#ifndef __TBB_FetchAndAdd1
+#define __TBB_FetchAndAdd1 tbb::internal::__TBB_FetchAndAddGeneric<1,uint8_t>
+#endif
+
+#ifndef __TBB_FetchAndAdd2
+#define __TBB_FetchAndAdd2 tbb::internal::__TBB_FetchAndAddGeneric<2,uint16_t>
+#endif
+
+#ifndef __TBB_FetchAndAdd4
+#define __TBB_FetchAndAdd4 tbb::internal::__TBB_FetchAndAddGeneric<4,uint32_t>
+#endif
+
+#ifndef __TBB_FetchAndAdd8
+#define __TBB_FetchAndAdd8 tbb::internal::__TBB_FetchAndAddGeneric<8,uint64_t>
+#endif
+
+#ifndef __TBB_FetchAndAddW
+#define __TBB_FetchAndAddW tbb::internal::__TBB_FetchAndAddGeneric<sizeof(ptrdiff_t),ptrdiff_t>
+#endif
+
+#ifndef __TBB_FetchAndStore1
+#define __TBB_FetchAndStore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,uint8_t>
+#endif
+
+#ifndef __TBB_FetchAndStore2
+#define __TBB_FetchAndStore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,uint16_t>
+#endif
+
+#ifndef __TBB_FetchAndStore4
+#define __TBB_FetchAndStore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,uint32_t>
+#endif
+
+#ifndef __TBB_FetchAndStore8
+#define __TBB_FetchAndStore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,uint64_t>
+#endif
+
+#ifndef __TBB_FetchAndStoreW
+#define __TBB_FetchAndStoreW tbb::internal::__TBB_FetchAndStoreGeneric<sizeof(ptrdiff_t),ptrdiff_t>
+#endif
+
+#if __TBB_DECL_FENCED_ATOMICS
+
+#ifndef __TBB_CompareAndSwap1__TBB_full_fence
+#define __TBB_CompareAndSwap1__TBB_full_fence __TBB_CompareAndSwap1
+#endif 
+#ifndef __TBB_CompareAndSwap1acquire
+#define __TBB_CompareAndSwap1acquire __TBB_CompareAndSwap1__TBB_full_fence
+#endif 
+#ifndef __TBB_CompareAndSwap1release
+#define __TBB_CompareAndSwap1release __TBB_CompareAndSwap1__TBB_full_fence
+#endif 
+
+#ifndef __TBB_CompareAndSwap2__TBB_full_fence
+#define __TBB_CompareAndSwap2__TBB_full_fence __TBB_CompareAndSwap2
+#endif
+#ifndef __TBB_CompareAndSwap2acquire
+#define __TBB_CompareAndSwap2acquire __TBB_CompareAndSwap2__TBB_full_fence
+#endif
+#ifndef __TBB_CompareAndSwap2release
+#define __TBB_CompareAndSwap2release __TBB_CompareAndSwap2__TBB_full_fence
+#endif
+
+#ifndef __TBB_CompareAndSwap4__TBB_full_fence
+#define __TBB_CompareAndSwap4__TBB_full_fence __TBB_CompareAndSwap4
+#endif 
+#ifndef __TBB_CompareAndSwap4acquire
+#define __TBB_CompareAndSwap4acquire __TBB_CompareAndSwap4__TBB_full_fence
+#endif 
+#ifndef __TBB_CompareAndSwap4release
+#define __TBB_CompareAndSwap4release __TBB_CompareAndSwap4__TBB_full_fence
+#endif 
+
+#ifndef __TBB_CompareAndSwap8__TBB_full_fence
+#define __TBB_CompareAndSwap8__TBB_full_fence __TBB_CompareAndSwap8
+#endif
+#ifndef __TBB_CompareAndSwap8acquire
+#define __TBB_CompareAndSwap8acquire __TBB_CompareAndSwap8__TBB_full_fence
+#endif
+#ifndef __TBB_CompareAndSwap8release
+#define __TBB_CompareAndSwap8release __TBB_CompareAndSwap8__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndAdd1__TBB_full_fence
+#define __TBB_FetchAndAdd1__TBB_full_fence __TBB_FetchAndAdd1
+#endif
+#ifndef __TBB_FetchAndAdd1acquire
+#define __TBB_FetchAndAdd1acquire __TBB_FetchAndAdd1__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndAdd1release
+#define __TBB_FetchAndAdd1release __TBB_FetchAndAdd1__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndAdd2__TBB_full_fence
+#define __TBB_FetchAndAdd2__TBB_full_fence __TBB_FetchAndAdd2
+#endif
+#ifndef __TBB_FetchAndAdd2acquire
+#define __TBB_FetchAndAdd2acquire __TBB_FetchAndAdd2__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndAdd2release
+#define __TBB_FetchAndAdd2release __TBB_FetchAndAdd2__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndAdd4__TBB_full_fence
+#define __TBB_FetchAndAdd4__TBB_full_fence __TBB_FetchAndAdd4
+#endif
+#ifndef __TBB_FetchAndAdd4acquire
+#define __TBB_FetchAndAdd4acquire __TBB_FetchAndAdd4__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndAdd4release
+#define __TBB_FetchAndAdd4release __TBB_FetchAndAdd4__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndAdd8__TBB_full_fence
+#define __TBB_FetchAndAdd8__TBB_full_fence __TBB_FetchAndAdd8
+#endif
+#ifndef __TBB_FetchAndAdd8acquire
+#define __TBB_FetchAndAdd8acquire __TBB_FetchAndAdd8__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndAdd8release
+#define __TBB_FetchAndAdd8release __TBB_FetchAndAdd8__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndStore1__TBB_full_fence
+#define __TBB_FetchAndStore1__TBB_full_fence __TBB_FetchAndStore1
+#endif
+#ifndef __TBB_FetchAndStore1acquire
+#define __TBB_FetchAndStore1acquire __TBB_FetchAndStore1__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndStore1release
+#define __TBB_FetchAndStore1release __TBB_FetchAndStore1__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndStore2__TBB_full_fence
+#define __TBB_FetchAndStore2__TBB_full_fence __TBB_FetchAndStore2
+#endif
+#ifndef __TBB_FetchAndStore2acquire
+#define __TBB_FetchAndStore2acquire __TBB_FetchAndStore2__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndStore2release
+#define __TBB_FetchAndStore2release __TBB_FetchAndStore2__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndStore4__TBB_full_fence
+#define __TBB_FetchAndStore4__TBB_full_fence __TBB_FetchAndStore4
+#endif
+#ifndef __TBB_FetchAndStore4acquire
+#define __TBB_FetchAndStore4acquire __TBB_FetchAndStore4__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndStore4release
+#define __TBB_FetchAndStore4release __TBB_FetchAndStore4__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndStore8__TBB_full_fence
+#define __TBB_FetchAndStore8__TBB_full_fence __TBB_FetchAndStore8
+#endif
+#ifndef __TBB_FetchAndStore8acquire
+#define __TBB_FetchAndStore8acquire __TBB_FetchAndStore8__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndStore8release
+#define __TBB_FetchAndStore8release __TBB_FetchAndStore8__TBB_full_fence
+#endif
+
+#endif // __TBB_DECL_FENCED_ATOMICS
+
+// Special atomic functions
+#ifndef __TBB_FetchAndAddWrelease
+#define __TBB_FetchAndAddWrelease __TBB_FetchAndAddW
+#endif
+
+#ifndef __TBB_FetchAndIncrementWacquire
+#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)
+#endif
+
+#ifndef __TBB_FetchAndDecrementWrelease
+#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,(-1))
+#endif
+
+#if __TBB_WORDSIZE==4
+// On 32-bit platforms, "atomic.h" requires definition of __TBB_Store8 and __TBB_Load8
+#ifndef __TBB_Store8
+inline void __TBB_Store8 (volatile void *ptr, int64_t value) {
+    tbb::internal::atomic_backoff b;
+    for(;;) {
+        int64_t result = *(int64_t *)ptr;
+        if( __TBB_CompareAndSwap8(ptr,value,result)==result ) break;
+        b.pause();
+    }
+}
+#endif
+
+#ifndef __TBB_Load8
+inline int64_t __TBB_Load8 (const volatile void *ptr) {
+    int64_t result = *(int64_t *)ptr;
+    result = __TBB_CompareAndSwap8((volatile void *)ptr,result,result);
+    return result;
+}
+#endif
+#endif /* __TBB_WORDSIZE==4 */
+
+#ifndef __TBB_Log2
+inline intptr_t __TBB_Log2( uintptr_t x ) {
+    if( x==0 ) return -1;
+    intptr_t result = 0;
+    uintptr_t tmp;
+#if __TBB_WORDSIZE>=8
+    if( (tmp = x>>32) ) { x=tmp; result += 32; }
+#endif
+    if( (tmp = x>>16) ) { x=tmp; result += 16; }
+    if( (tmp = x>>8) )  { x=tmp; result += 8; }
+    if( (tmp = x>>4) )  { x=tmp; result += 4; }
+    if( (tmp = x>>2) )  { x=tmp; result += 2; }
+    return (x&2)? result+1: result;
+}
+#endif
+
+#ifndef __TBB_AtomicOR
+inline void __TBB_AtomicOR( volatile void *operand, uintptr_t addend ) {
+    tbb::internal::atomic_backoff b;
+    for(;;) {
+        uintptr_t tmp = *(volatile uintptr_t *)operand;
+        uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);
+        if( result==tmp ) break;
+        b.pause();
+    }
+}
+#endif
+
+#ifndef __TBB_AtomicAND
+inline void __TBB_AtomicAND( volatile void *operand, uintptr_t addend ) {
+    tbb::internal::atomic_backoff b;
+    for(;;) {
+        uintptr_t tmp = *(volatile uintptr_t *)operand;
+        uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&addend, tmp);
+        if( result==tmp ) break;
+        b.pause();
+    }
+}
+#endif
+
+#ifndef __TBB_TryLockByte
+inline bool __TBB_TryLockByte( unsigned char &flag ) {
+    return __TBB_CompareAndSwap1(&flag,1,0)==0;
+}
+#endif
+
+#ifndef __TBB_LockByte
+inline uintptr_t __TBB_LockByte( unsigned char& flag ) {
+    if ( !__TBB_TryLockByte(flag) ) {
+        tbb::internal::atomic_backoff b;
+        do {
+            b.pause();
+        } while ( !__TBB_TryLockByte(flag) );
+    }
+    return 0;
+}
+#endif
+
+#endif /* __TBB_machine_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_profiling.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_profiling.h
new file mode 100644 (file)
index 0000000..f9c686d
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_profiling_H
+#define __TBB_profiling_H
+
+// Check if the tools support is enabled
+#if (_WIN32||_WIN64||__linux__) && TBB_USE_THREADING_TOOLS
+
+#if _WIN32||_WIN64
+#include <stdlib.h>  /* mbstowcs_s */
+#endif
+#include "tbb_stddef.h"
+
+namespace tbb {
+    namespace internal {
+#if _WIN32||_WIN64
+        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const wchar_t* name ); 
+        inline size_t multibyte_to_widechar( wchar_t* wcs, const char* mbs, size_t bufsize) {
+#if _MSC_VER>=1400
+            size_t len;
+            mbstowcs_s( &len, wcs, bufsize, mbs, _TRUNCATE );
+            return len;   // mbstowcs_s counts null terminator
+#else
+            size_t len = mbstowcs( wcs, mbs, bufsize );
+            if(wcs && len!=size_t(-1) )
+                wcs[len<bufsize-1? len: bufsize-1] = wchar_t('\0');
+            return len+1; // mbstowcs does not count null terminator
+#endif
+        }
+#else
+        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const char* name ); 
+#endif
+    } // namespace internal
+} // namespace tbb
+
+//! Macro __TBB_DEFINE_PROFILING_SET_NAME(T) defines "set_name" methods for sync objects of type T
+/** Should be used in the "tbb" namespace only. 
+    Don't place semicolon after it to avoid compiler warnings. **/
+#if _WIN32||_WIN64
+    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \
+        namespace profiling {                                                       \
+            inline void set_name( sync_object_type& obj, const wchar_t* name ) {    \
+                tbb::internal::itt_set_sync_name_v3( &obj, name );                  \
+            }                                                                       \
+            inline void set_name( sync_object_type& obj, const char* name ) {       \
+                size_t len = tbb::internal::multibyte_to_widechar(NULL, name, 0);   \
+                wchar_t *wname = new wchar_t[len];                                  \
+                tbb::internal::multibyte_to_widechar(wname, name, len);             \
+                set_name( obj, wname );                                             \
+                delete[] wname;                                                     \
+            }                                                                       \
+        }
+#else /* !WIN */
+    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \
+        namespace profiling {                                                       \
+            inline void set_name( sync_object_type& obj, const char* name ) {       \
+                tbb::internal::itt_set_sync_name_v3( &obj, name );                  \
+            }                                                                       \
+        }
+#endif /* !WIN */
+
+#else /* no tools support */
+
+#if _WIN32||_WIN64
+    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \
+        namespace profiling {                                               \
+            inline void set_name( sync_object_type&, const wchar_t* ) {}    \
+            inline void set_name( sync_object_type&, const char* ) {}       \
+        }
+#else /* !WIN */
+    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \
+        namespace profiling {                                               \
+            inline void set_name( sync_object_type&, const char* ) {}       \
+        }
+#endif /* !WIN */
+
+#endif /* no tools support */
+
+#endif /* __TBB_profiling_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_stddef.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_stddef.h
new file mode 100644 (file)
index 0000000..3a1fc3d
--- /dev/null
@@ -0,0 +1,293 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_tbb_stddef_H
+#define __TBB_tbb_stddef_H
+
+// Marketing-driven product version
+#define TBB_VERSION_MAJOR 2
+#define TBB_VERSION_MINOR 2
+
+// Engineering-focused interface version
+#define TBB_INTERFACE_VERSION 4001
+#define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000
+
+// The oldest major interface version still supported
+// To be used in SONAME, manifests, etc.
+#define TBB_COMPATIBLE_INTERFACE_VERSION 2
+
+#define __TBB_STRING_AUX(x) #x
+#define __TBB_STRING(x) __TBB_STRING_AUX(x)
+
+// We do not need defines below for resource processing on windows
+#if !defined RC_INVOKED
+
+// Define groups for Doxygen documentation
+/**
+ * @defgroup algorithms         Algorithms
+ * @defgroup containers         Containers
+ * @defgroup memory_allocation  Memory Allocation
+ * @defgroup synchronization    Synchronization
+ * @defgroup timing             Timing
+ * @defgroup task_scheduling    Task Scheduling
+ */
+
+// Simple text that is displayed on the main page of Doxygen documentation.
+/**
+ * \mainpage Main Page
+ *
+ * Click the tabs above for information about the
+ * - <a href="./modules.html">Modules</a> (groups of functionality) implemented by the library 
+ * - <a href="./annotated.html">Classes</a> provided by the library
+ * - <a href="./files.html">Files</a> constituting the library.
+ * .
+ * Please note that significant part of TBB functionality is implemented in the form of
+ * template functions, descriptions of which are not accessible on the <a href="./annotated.html">Classes</a>
+ * tab. Use <a href="./modules.html">Modules</a> or <a href="./namespacemembers.html">Namespace/Namespace Members</a>
+ * tabs to find them.
+ *
+ * Additional pieces of information can be found here
+ * - \subpage concepts
+ * .
+ */
+
+/** \page concepts TBB concepts
+    
+    A concept is a set of requirements to a type, which are necessary and sufficient
+    for the type to model a particular behavior or a set of behaviors. Some concepts 
+    are specific to a particular algorithm (e.g. algorithm body), while other ones 
+    are common to several algorithms (e.g. range concept). 
+
+    All TBB algorithms make use of different classes implementing various concepts.
+    Implementation classes are supplied by the user as type arguments of template 
+    parameters and/or as objects passed as function call arguments. The library 
+    provides predefined  implementations of some concepts (e.g. several kinds of 
+    \ref range_req "ranges"), while other ones must always be implemented by the user. 
+    
+    TBB defines a set of minimal requirements each concept must conform to. Here is 
+    the list of different concepts hyperlinked to the corresponding requirements specifications:
+    - \subpage range_req
+    - \subpage parallel_do_body_req
+    - \subpage parallel_for_body_req
+    - \subpage parallel_reduce_body_req
+    - \subpage parallel_scan_body_req
+    - \subpage parallel_sort_iter_req
+**/
+
+// Define preprocessor symbols used to determine architecture
+#if _WIN32||_WIN64
+#   if defined(_M_AMD64)
+#       define __TBB_x86_64 1
+#   elif defined(_M_IA64)
+#       define __TBB_ipf 1
+#   elif defined(_M_IX86)||defined(__i386__) // the latter for MinGW support
+#       define __TBB_x86_32 1
+#   endif
+#else /* Assume generic Unix */
+#   if !__linux__ && !__APPLE__
+#       define __TBB_generic_os 1
+#   endif
+#   if __x86_64__
+#       define __TBB_x86_64 1
+#   elif __ia64__
+#       define __TBB_ipf 1
+#   elif __i386__||__i386  // __i386 is for Sun OS
+#       define __TBB_x86_32 1
+#   else
+#       define __TBB_generic_arch 1
+#   endif
+#endif
+
+#if _MSC_VER
+// define the parts of stdint.h that are needed, but put them inside tbb::internal
+namespace tbb {
+namespace internal {
+    typedef __int8 int8_t;
+    typedef __int16 int16_t;
+    typedef __int32 int32_t;
+    typedef __int64 int64_t;
+    typedef unsigned __int8 uint8_t;
+    typedef unsigned __int16 uint16_t;
+    typedef unsigned __int32 uint32_t;
+    typedef unsigned __int64 uint64_t;
+} // namespace internal
+} // namespace tbb
+#else
+#include <stdint.h>
+#endif /* _MSC_VER */
+
+#if _MSC_VER >=1400
+#define __TBB_EXPORTED_FUNC   __cdecl
+#define __TBB_EXPORTED_METHOD __thiscall
+#else
+#define __TBB_EXPORTED_FUNC
+#define __TBB_EXPORTED_METHOD
+#endif
+
+#include <cstddef>      /* Need size_t and ptrdiff_t (the latter on Windows only) from here. */
+
+#if _MSC_VER
+#define __TBB_tbb_windef_H
+#include "_tbb_windef.h"
+#undef __TBB_tbb_windef_H
+#endif
+
+#include "tbb_config.h"
+
+namespace tbb {
+    //! Type for an assertion handler
+    typedef void(*assertion_handler_type)( const char* filename, int line, const char* expression, const char * comment );
+}
+
+#if TBB_USE_ASSERT
+
+//! Assert that x is true.
+/** If x is false, print assertion failure message.  
+    If the comment argument is not NULL, it is printed as part of the failure message.  
+    The comment argument has no other effect. */
+#define __TBB_ASSERT(predicate,message) ((predicate)?((void)0):tbb::assertion_failure(__FILE__,__LINE__,#predicate,message))
+#define __TBB_ASSERT_EX __TBB_ASSERT
+
+namespace tbb {
+    //! Set assertion handler and return previous value of it.
+    assertion_handler_type __TBB_EXPORTED_FUNC set_assertion_handler( assertion_handler_type new_handler );
+
+    //! Process an assertion failure.
+    /** Normally called from __TBB_ASSERT macro.
+        If assertion handler is null, print message for assertion failure and abort.
+        Otherwise call the assertion handler. */
+    void __TBB_EXPORTED_FUNC assertion_failure( const char* filename, int line, const char* expression, const char* comment );
+} // namespace tbb
+
+#else
+
+//! No-op version of __TBB_ASSERT.
+#define __TBB_ASSERT(predicate,comment) ((void)0)
+//! "Extended" version is useful to suppress warnings if a variable is only used with an assert
+#define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))
+
+#endif /* TBB_USE_ASSERT */
+
+//! The namespace tbb contains all components of the library.
+namespace tbb {
+
+//! The function returns the interface version of the TBB shared library being used.
+/**
+ * The version it returns is determined at runtime, not at compile/link time.
+ * So it can be different than the value of TBB_INTERFACE_VERSION obtained at compile time.
+ */
+extern "C" int __TBB_EXPORTED_FUNC TBB_runtime_interface_version();
+
+//! Dummy type that distinguishes splitting constructor from copy constructor.
+/**
+ * See description of parallel_for and parallel_reduce for example usages.
+ * @ingroup algorithms
+ */
+class split {
+};
+
+/**
+ * @cond INTERNAL
+ * @brief Identifiers declared inside namespace internal should never be used directly by client code.
+ */
+namespace internal {
+
+using std::size_t;
+
+//! An unsigned integral type big enough to hold a pointer.
+/** There's no guarantee by the C++ standard that a size_t is really big enough,
+    but it happens to be for all platforms of interest. */
+typedef size_t uintptr;
+
+//! A signed integral type big enough to hold a pointer.
+/** There's no guarantee by the C++ standard that a ptrdiff_t is really big enough,
+    but it happens to be for all platforms of interest. */
+typedef std::ptrdiff_t intptr;
+
+//! Report a runtime warning.
+void __TBB_EXPORTED_FUNC runtime_warning( const char* format, ... );
+
+#if TBB_USE_ASSERT
+//! Set p to invalid pointer value.
+template<typename T>
+inline void poison_pointer( T* & p ) {
+    p = reinterpret_cast<T*>(-1);
+}
+#else
+template<typename T>
+inline void poison_pointer( T* ) {/*do nothing*/}
+#endif /* TBB_USE_ASSERT */
+
+//! Base class for types that should not be assigned.
+class no_assign {
+    // Deny assignment
+    void operator=( const no_assign& );
+public:
+#if __GNUC__
+    //! Explicitly define default construction, because otherwise gcc issues gratuitous warning.
+    no_assign() {}
+#endif /* __GNUC__ */
+};
+
+//! Base class for types that should not be copied or assigned.
+class no_copy: no_assign {
+    //! Deny copy construction
+    no_copy( const no_copy& );
+public:
+    //! Allow default construction
+    no_copy() {}
+};
+
+//! Class for determining type of std::allocator<T>::value_type.
+template<typename T>
+struct allocator_type {
+    typedef T value_type;
+};
+
+#if _MSC_VER
+//! Microsoft std::allocator has non-standard extension that strips const from a type. 
+template<typename T>
+struct allocator_type<const T> {
+    typedef T value_type;
+};
+#endif
+
+// Struct to be used as a version tag for inline functions.
+/** Version tag can be necessary to prevent loader on Linux from using the wrong 
+    symbol in debug builds (when inline functions are compiled as out-of-line). **/
+struct version_tag_v3 {};
+
+typedef version_tag_v3 version_tag;
+
+} // internal
+//! @endcond
+
+} // tbb
+
+#endif /* RC_INVOKED */
+#endif /* __TBB_tbb_stddef_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_thread.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbb_thread.h
new file mode 100644 (file)
index 0000000..6b40a9c
--- /dev/null
@@ -0,0 +1,294 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_tbb_thread_H
+#define __TBB_tbb_thread_H
+
+#if _WIN32||_WIN64
+#include <windows.h>
+#define __TBB_NATIVE_THREAD_ROUTINE unsigned WINAPI
+#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) unsigned (WINAPI* r)( void* )
+#else
+#define __TBB_NATIVE_THREAD_ROUTINE void*
+#define __TBB_NATIVE_THREAD_ROUTINE_PTR(r) void* (*r)( void* )
+#include <pthread.h>
+#endif // _WIN32||_WIN64
+
+#include <iosfwd>
+#include <exception>             // Need std::terminate from here.
+#include "tbb_stddef.h"
+#include "tick_count.h"
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+    
+    class tbb_thread_v3;
+
+} // namespace internal
+
+void swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ); 
+
+namespace internal {
+
+    //! Allocate a closure
+    void* __TBB_EXPORTED_FUNC allocate_closure_v3( size_t size );
+    //! Free a closure allocated by allocate_closure_v3
+    void __TBB_EXPORTED_FUNC free_closure_v3( void* );
+   
+    struct thread_closure_base {
+        void* operator new( size_t size ) {return allocate_closure_v3(size);}
+        void operator delete( void* ptr ) {free_closure_v3(ptr);}
+    };
+
+    template<class F> struct thread_closure_0: thread_closure_base {
+        F function;
+
+        static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {
+            thread_closure_0 *self = static_cast<thread_closure_0*>(c);
+            try {
+                self->function();
+            } catch ( ... ) {
+                std::terminate();
+            }
+            delete self;
+            return 0;
+        }
+        thread_closure_0( const F& f ) : function(f) {}
+    };
+    //! Structure used to pass user function with 1 argument to thread.  
+    template<class F, class X> struct thread_closure_1: thread_closure_base {
+        F function;
+        X arg1;
+        //! Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll
+        static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {
+            thread_closure_1 *self = static_cast<thread_closure_1*>(c);
+            try {
+                self->function(self->arg1);
+            } catch ( ... ) {
+                std::terminate();
+            }
+            delete self;
+            return 0;
+        }
+        thread_closure_1( const F& f, const X& x ) : function(f), arg1(x) {}
+    };
+    template<class F, class X, class Y> struct thread_closure_2: thread_closure_base {
+        F function;
+        X arg1;
+        Y arg2;
+        //! Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll
+        static __TBB_NATIVE_THREAD_ROUTINE start_routine( void* c ) {
+            thread_closure_2 *self = static_cast<thread_closure_2*>(c);
+            try {
+                self->function(self->arg1, self->arg2);
+            } catch ( ... ) {
+                std::terminate();
+            }
+            delete self;
+            return 0;
+        }
+        thread_closure_2( const F& f, const X& x, const Y& y ) : function(f), arg1(x), arg2(y) {}
+    };
+
+    //! Versioned thread class.
+    class tbb_thread_v3 {
+        tbb_thread_v3(const tbb_thread_v3&); // = delete;   // Deny access
+    public:
+#if _WIN32||_WIN64
+        typedef HANDLE native_handle_type; 
+#else
+        typedef pthread_t native_handle_type; 
+#endif // _WIN32||_WIN64
+
+        class id;
+        //! Constructs a thread object that does not represent a thread of execution. 
+        tbb_thread_v3() : my_handle(0)
+#if _WIN32||_WIN64
+            , my_thread_id(0)
+#endif // _WIN32||_WIN64
+        {}
+        
+        //! Constructs an object and executes f() in a new thread
+        template <class F> explicit tbb_thread_v3(F f) {
+            typedef internal::thread_closure_0<F> closure_type;
+            internal_start(closure_type::start_routine, new closure_type(f));
+        }
+        //! Constructs an object and executes f(x) in a new thread
+        template <class F, class X> tbb_thread_v3(F f, X x) {
+            typedef internal::thread_closure_1<F,X> closure_type;
+            internal_start(closure_type::start_routine, new closure_type(f,x));
+        }
+        //! Constructs an object and executes f(x,y) in a new thread
+        template <class F, class X, class Y> tbb_thread_v3(F f, X x, Y y) {
+            typedef internal::thread_closure_2<F,X,Y> closure_type;
+            internal_start(closure_type::start_routine, new closure_type(f,x,y));
+        }
+
+        tbb_thread_v3& operator=(tbb_thread_v3& x) {
+            if (joinable()) detach();
+            my_handle = x.my_handle;
+            x.my_handle = 0;
+#if _WIN32||_WIN64
+            my_thread_id = x.my_thread_id;
+            x.my_thread_id = 0;
+#endif // _WIN32||_WIN64
+            return *this;
+        }
+        bool joinable() const {return my_handle!=0; }
+        //! The completion of the thread represented by *this happens before join() returns.
+        void __TBB_EXPORTED_METHOD join();
+        //! When detach() returns, *this no longer represents the possibly continuing thread of execution.
+        void __TBB_EXPORTED_METHOD detach();
+        ~tbb_thread_v3() {if( joinable() ) detach();}
+        inline id get_id() const;
+        native_handle_type native_handle() { return my_handle; }
+    
+        //! The number of hardware thread contexts.
+        static unsigned __TBB_EXPORTED_FUNC hardware_concurrency();
+    private:
+        native_handle_type my_handle; 
+#if _WIN32||_WIN64
+        DWORD my_thread_id;
+#endif // _WIN32||_WIN64
+
+        /** Runs start_routine(closure) on another thread and sets my_handle to the handle of the created thread. */
+        void __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine), 
+                             void* closure );
+        friend void __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
+        friend void tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 ); 
+    };
+        
+    class tbb_thread_v3::id { 
+#if _WIN32||_WIN64
+        DWORD my_id;
+        id( DWORD my_id ) : my_id(my_id) {}
+#else
+        pthread_t my_id;
+        id( pthread_t my_id ) : my_id(my_id) {}
+#endif // _WIN32||_WIN64
+        friend class tbb_thread_v3;
+    public:
+        id() : my_id(0) {}
+
+        friend bool operator==( tbb_thread_v3::id x, tbb_thread_v3::id y );
+        friend bool operator!=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+        friend bool operator<( tbb_thread_v3::id x, tbb_thread_v3::id y );
+        friend bool operator<=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+        friend bool operator>( tbb_thread_v3::id x, tbb_thread_v3::id y );
+        friend bool operator>=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+        
+        template<class charT, class traits>
+        friend std::basic_ostream<charT, traits>&
+        operator<< (std::basic_ostream<charT, traits> &out, 
+                    tbb_thread_v3::id id)
+        {
+            out << id.my_id;
+            return out;
+        }
+        friend tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
+    }; // tbb_thread_v3::id
+
+    tbb_thread_v3::id tbb_thread_v3::get_id() const {
+#if _WIN32||_WIN64
+        return id(my_thread_id);
+#else
+        return id(my_handle);
+#endif // _WIN32||_WIN64
+    }
+    void __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
+    tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
+    void __TBB_EXPORTED_FUNC thread_yield_v3();
+    void __TBB_EXPORTED_FUNC thread_sleep_v3(const tick_count::interval_t &i);
+
+    inline bool operator==(tbb_thread_v3::id x, tbb_thread_v3::id y)
+    {
+        return x.my_id == y.my_id;
+    }
+    inline bool operator!=(tbb_thread_v3::id x, tbb_thread_v3::id y)
+    {
+        return x.my_id != y.my_id;
+    }
+    inline bool operator<(tbb_thread_v3::id x, tbb_thread_v3::id y)
+    {
+        return x.my_id < y.my_id;
+    }
+    inline bool operator<=(tbb_thread_v3::id x, tbb_thread_v3::id y)
+    {
+        return x.my_id <= y.my_id;
+    }
+    inline bool operator>(tbb_thread_v3::id x, tbb_thread_v3::id y)
+    {
+        return x.my_id > y.my_id;
+    }
+    inline bool operator>=(tbb_thread_v3::id x, tbb_thread_v3::id y)
+    {
+        return x.my_id >= y.my_id;
+    }
+
+} // namespace internal;
+
+//! Users reference thread class by name tbb_thread
+typedef internal::tbb_thread_v3 tbb_thread;
+
+using internal::operator==;
+using internal::operator!=;
+using internal::operator<;
+using internal::operator>;
+using internal::operator<=;
+using internal::operator>=;
+
+inline void move( tbb_thread& t1, tbb_thread& t2 ) {
+    internal::move_v3(t1, t2);
+}
+
+inline void swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ) {
+    tbb::tbb_thread::native_handle_type h = t1.my_handle;
+    t1.my_handle = t2.my_handle;
+    t2.my_handle = h;
+#if _WIN32||_WIN64
+    DWORD i = t1.my_thread_id;
+    t1.my_thread_id = t2.my_thread_id;
+    t2.my_thread_id = i;
+#endif /* _WIN32||_WIN64 */
+}
+
+namespace this_tbb_thread {
+    inline tbb_thread::id get_id() { return internal::thread_get_id_v3(); }
+    //! Offers the operating system the opportunity to schedule another thread.
+    inline void yield() { internal::thread_yield_v3(); }
+    //! The current thread blocks at least until the time specified.
+    inline void sleep(const tick_count::interval_t &i) { 
+        internal::thread_sleep_v3(i);  
+    }
+}  // namespace this_tbb_thread
+
+} // namespace tbb
+
+#endif /* __TBB_tbb_thread_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbbmalloc_proxy.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tbbmalloc_proxy.h
new file mode 100644 (file)
index 0000000..ebde358
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*
+Replacing the standard memory allocation routines in Microsoft* C/C++ RTL 
+(malloc/free, global new/delete, etc.) with the TBB memory allocator. 
+
+Include the following header to a source of any binary which is loaded during 
+application startup
+
+#include "tbb/tbbmalloc_proxy.h"
+
+or add following parameters to the linker options for the binary which is 
+loaded during application startup. It can be either exe-file or dll.
+
+For win32
+tbbmalloc_proxy.lib /INCLUDE:"___TBB_malloc_proxy"
+win64
+tbbmalloc_proxy.lib /INCLUDE:"__TBB_malloc_proxy"
+*/
+
+#ifndef __TBB_tbbmalloc_proxy_H
+#define __TBB_tbbmalloc_proxy_H
+
+#if _MSC_VER
+
+#ifdef _DEBUG
+    #pragma comment(lib, "tbbmalloc_proxy_debug.lib")
+#else
+    #pragma comment(lib, "tbbmalloc_proxy.lib")
+#endif
+
+#if defined(_WIN64)
+    #pragma comment(linker, "/include:__TBB_malloc_proxy")
+#else
+    #pragma comment(linker, "/include:___TBB_malloc_proxy")
+#endif
+
+#else
+/* Primarily to support MinGW */
+
+extern "C" void __TBB_malloc_proxy();
+struct __TBB_malloc_proxy_caller {
+    __TBB_malloc_proxy_caller() { __TBB_malloc_proxy(); }
+} volatile __TBB_malloc_proxy_helper_object;
+
+#endif // _MSC_VER
+
+#endif //__TBB_tbbmalloc_proxy_H
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tick_count.h b/deal.II/contrib/tbb/tbb22_20090809oss/include/tbb/tick_count.h
new file mode 100644 (file)
index 0000000..4956182
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_tick_count_H
+#define __TBB_tick_count_H
+
+#include "tbb_stddef.h"
+
+#if _WIN32||_WIN64
+#include <windows.h>
+#elif __linux__
+#include <ctime>
+#else /* generic Unix */
+#include <sys/time.h>
+#endif /* (choice of OS) */
+
+namespace tbb {
+
+//! Absolute timestamp
+/** @ingroup timing */
+class tick_count {
+public:
+    //! Relative time interval.
+    class interval_t {
+        long long value;
+        explicit interval_t( long long value_ ) : value(value_) {}
+    public:
+        //! Construct a time interval representing zero time duration
+        interval_t() : value(0) {};
+
+        //! Construct a time interval representing sec seconds time  duration
+        explicit interval_t( double sec );
+
+        //! Return the length of a time interval in seconds
+        double seconds() const;
+
+        friend class tbb::tick_count;
+
+        //! Extract the intervals from the tick_counts and subtract them.
+        friend interval_t operator-( const tick_count& t1, const tick_count& t0 );
+
+        //! Add two intervals.
+        friend interval_t operator+( const interval_t& i, const interval_t& j ) {
+            return interval_t(i.value+j.value);
+        }
+
+        //! Subtract two intervals.
+        friend interval_t operator-( const interval_t& i, const interval_t& j ) {
+            return interval_t(i.value-j.value);
+        }
+
+        //! Accumulation operator
+        interval_t& operator+=( const interval_t& i ) {value += i.value; return *this;}
+
+        //! Subtraction operator
+        interval_t& operator-=( const interval_t& i ) {value -= i.value; return *this;}
+    };
+    
+    //! Construct an absolute timestamp initialized to zero.
+    tick_count() : my_count(0) {};
+
+    //! Return current time.
+    static tick_count now();
+    
+    //! Subtract two timestamps to get the time interval between
+    friend interval_t operator-( const tick_count& t1, const tick_count& t0 );
+
+private:
+    long long my_count;
+};
+
+inline tick_count tick_count::now() {
+    tick_count result;
+#if _WIN32||_WIN64
+    LARGE_INTEGER qpcnt;
+    QueryPerformanceCounter(&qpcnt);
+    result.my_count = qpcnt.QuadPart;
+#elif __linux__
+    struct timespec ts;
+#if TBB_USE_ASSERT
+    int status = 
+#endif /* TBB_USE_ASSERT */
+        clock_gettime( CLOCK_REALTIME, &ts );
+    __TBB_ASSERT( status==0, "CLOCK_REALTIME not supported" );
+    result.my_count = static_cast<long long>(1000000000UL)*static_cast<long long>(ts.tv_sec) + static_cast<long long>(ts.tv_nsec);
+#else /* generic Unix */
+    struct timeval tv;
+#if TBB_USE_ASSERT
+    int status = 
+#endif /* TBB_USE_ASSERT */
+        gettimeofday(&tv, NULL);
+    __TBB_ASSERT( status==0, "gettimeofday failed" );
+    result.my_count = static_cast<long long>(1000000)*static_cast<long long>(tv.tv_sec) + static_cast<long long>(tv.tv_usec);
+#endif /*(choice of OS) */
+    return result;
+}
+
+inline tick_count::interval_t::interval_t( double sec )
+{
+#if _WIN32||_WIN64
+    LARGE_INTEGER qpfreq;
+    QueryPerformanceFrequency(&qpfreq);
+    value = static_cast<long long>(sec*qpfreq.QuadPart);
+#elif __linux__
+    value = static_cast<long long>(sec*1E9);
+#else /* generic Unix */
+    value = static_cast<long long>(sec*1E6);
+#endif /* (choice of OS) */
+}
+
+inline tick_count::interval_t operator-( const tick_count& t1, const tick_count& t0 ) {
+    return tick_count::interval_t( t1.my_count-t0.my_count );
+}
+
+inline double tick_count::interval_t::seconds() const {
+#if _WIN32||_WIN64
+    LARGE_INTEGER qpfreq;
+    QueryPerformanceFrequency(&qpfreq);
+    return value/(double)qpfreq.QuadPart;
+#elif __linux__
+    return value*1E-9;
+#else /* generic Unix */
+    return value*1E-6;
+#endif /* (choice of OS) */
+}
+
+} // namespace tbb
+
+#endif /* __TBB_tick_count_H */
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/index.html
new file mode 100644 (file)
index 0000000..d35f392
--- /dev/null
@@ -0,0 +1,44 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Top level directory for Threading Building Blocks (TBB).
+<P>
+To build TBB, use the <A HREF=Makefile>top-level Makefile</A>; see also the <A HREF=build/index.html#build>build directions</A>.
+To port TBB to a new platform, operating system or architecture, see the <A HREF=build/index.html#port>porting directions</A>.
+</P>
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Top-level Makefile for TBB.  See also the <A HREF=build/index.html#build>build directions</A>.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="doc/index.html">doc</A>
+<DD>Documentation for the library.
+<DT><A HREF="include/index.html">include</A>
+<DD>Include files required for compiling code that uses the library.
+<DT><A HREF="examples/index.html">examples</A>
+<DD>Examples of how to use the library.
+<DT><A HREF="src/index.html">src</A>
+<DD>Source code for the library.
+<DT><A HREF="build/index.html">build</A>
+<DD>Internal Makefile infrastructure for TBB.  Do not use directly; see the <A HREF=build/index.html#build>build directions</A>.
+<DT><A HREF="ia32">ia32</A>, <A HREF="intel64">intel64</A>, <A HREF="ia64">ia64</A>
+<DD>Platform-specific binary files for the library.
+</DL>
+
+<HR>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/Makefile b/deal.II/contrib/tbb/tbb22_20090809oss/src/Makefile
new file mode 100644 (file)
index 0000000..bab12db
--- /dev/null
@@ -0,0 +1,201 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+tbb_root?=..
+examples_root:=$(tbb_root)/examples
+include $(tbb_root)/build/common.inc
+.PHONY: all tbb tbbmalloc test test_no_depends release debug examples clean
+
+all: release debug examples
+
+tbb: tbb_release tbb_debug
+
+tbbmalloc: tbbmalloc_release tbbmalloc_debug
+
+rml: rml_release rml_debug
+
+test: tbbmalloc_test_release test_release tbbmalloc_test_debug test_debug
+
+# Suffix _ni stands for "no ingnore", meaning that the first error during the test session will stop it
+test_ni: tbbmalloc_test_release_ni test_release_ni tbbmalloc_test_debug_ni test_debug_ni
+
+test_no_depends: tbbmalloc_test_release_no_depends test_release_no_depends tbbmalloc_test_debug_no_depends test_debug_no_depends
+       @echo done
+
+release: tbb_release tbbmalloc_release
+release: $(call cross_cfg,tbbmalloc_test_release) $(call cross_cfg,test_release)
+
+debug: tbb_debug tbbmalloc_debug
+debug: $(call cross_cfg,tbbmalloc_test_debug) $(call cross_cfg, test_debug)
+
+examples: tbb tbbmalloc examples_debug clean_examples examples_release
+
+clean: clean_release clean_debug clean_examples
+       @echo clean done
+
+.PHONY: full
+full:
+       $(MAKE) -s -i -r --no-print-directory -f Makefile tbb_root=. clean all
+ifeq ($(tbb_os),windows)
+       $(MAKE) -s -i -r --no-print-directory -f Makefile tbb_root=. compiler=icl clean all native_examples
+else
+       $(MAKE) -s -i -r --no-print-directory -f Makefile tbb_root=. compiler=icc clean all native_examples
+endif
+ifeq ($(arch),intel64)
+       $(MAKE) -s -i -r --no-print-directory -f Makefile tbb_root=. arch=ia32 clean all
+endif
+# it doesn't test compiler=icc arch=ia32 on intel64 systems due to enviroment settings of icc
+
+native_examples: tbb tbbmalloc
+       $(MAKE) -C $(examples_root) -r -f Makefile tbb_root=.. compiler=$(native_compiler) tbb_build_prefix=$(tbb_build_prefix) debug test
+       $(MAKE) -C $(examples_root) -r -f Makefile tbb_root=.. compiler=$(native_compiler) tbb_build_prefix=$(tbb_build_prefix) clean release test
+
+../examples/% examples/%::
+       $(MAKE) -C $(examples_root) -r -f Makefile tbb_root=.. $(subst examples/,,$(subst ../,,$@))
+
+debug_%:: cfg?=debug
+debug_%:: run_cmd=$(debugger)
+test_% stress_% time_%:: cfg?=release
+debug_% test_% stress_% time_%::
+       $(MAKE) -C "$(work_dir)_$(cfg)"  -r -f $(tbb_root)/build/Makefile.test cfg=$(cfg) run_cmd=$(run_cmd) tbb_root=$(tbb_root) $@
+
+clean_%::
+ifeq ($(cfg),)
+       @$(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.test cfg=release tbb_root=$(tbb_root) $@
+       @$(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.test cfg=debug tbb_root=$(tbb_root) $@
+else
+       @$(MAKE) -C "$(work_dir)_$(cfg)"  -r -f $(tbb_root)/build/Makefile.test cfg=$(cfg) tbb_root=$(tbb_root) $@
+endif
+
+.PHONY: tbb_release tbb_debug test_release test_debug test_release_no_depends test_debug_no_depends
+
+# do not delete double-space after -C option
+tbb_release: mkdir_release
+       $(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.tbb cfg=release tbb_root=$(tbb_root)
+
+tbb_debug: mkdir_debug
+       $(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.tbb cfg=debug tbb_root=$(tbb_root)
+
+rml_release: mkdir_release
+       $(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.rml cfg=release tbb_root=$(tbb_root) rml
+
+rml_debug: mkdir_debug
+       $(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.rml cfg=debug tbb_root=$(tbb_root) rml
+
+test_release: $(call cross_cfg,mkdir_release) $(call cross_cfg,tbb_release) test_release_no_depends
+test_release_no_depends: 
+       -$(MAKE) -C "$(call cross_cfg,$(work_dir)_release)"  -r -f $(tbb_root)/build/Makefile.test cfg=release tbb_root=$(tbb_root) 
+
+test_debug: $(call cross_cfg,mkdir_debug) $(call cross_cfg,tbb_debug) test_debug_no_depends
+test_debug_no_depends:
+       -$(MAKE) -C "$(call cross_cfg,$(work_dir)_debug)"  -r -f $(tbb_root)/build/Makefile.test cfg=debug tbb_root=$(tbb_root)
+
+test_release_ni: 
+       $(MAKE) -C "$(call cross_cfg,$(work_dir)_release)"  -r -f $(tbb_root)/build/Makefile.test cfg=release tbb_root=$(tbb_root) 
+
+test_debug_ni:
+       $(MAKE) -C "$(call cross_cfg,$(work_dir)_debug)"  -r -f $(tbb_root)/build/Makefile.test cfg=debug tbb_root=$(tbb_root)
+
+.PHONY: tbbmalloc_release tbbmalloc_debug tbbmalloc_test_release tbbmalloc_test_debug
+.PHONY: tbbmalloc_test_release_no_depends tbbmalloc_test_debug_no_depends
+
+tbbmalloc_release: mkdir_release
+       $(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc tbb_root=$(tbb_root)
+
+tbbmalloc_debug: mkdir_debug
+       $(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc tbb_root=$(tbb_root)
+
+tbbmalloc_dll_release: mkdir_release
+       $(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc_dll tbb_root=$(tbb_root)
+
+tbbmalloc_proxy_dll_release: mkdir_release
+       $(MAKE) -C "$(work_dir)_release"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release  malloc_proxy_dll tbb_root=$(tbb_root)
+
+tbbmalloc_dll_debug: mkdir_debug
+       $(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_dll tbb_root=$(tbb_root)
+
+tbbmalloc_proxy_dll_debug: mkdir_debug
+       $(MAKE) -C "$(work_dir)_debug"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_proxy_dll tbb_root=$(tbb_root)
+
+tbbmalloc_test_release: $(call cross_cfg,mkdir_release) $(call cross_cfg,tbbmalloc_release) tbbmalloc_test_release_no_depends
+tbbmalloc_test_release_no_depends:
+       -$(MAKE) -C "$(call cross_cfg,$(work_dir)_release)"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc_test tbb_root=$(tbb_root)
+
+tbbmalloc_test_debug: $(call cross_cfg,mkdir_debug) $(call cross_cfg,tbbmalloc_debug) tbbmalloc_test_debug_no_depends
+tbbmalloc_test_debug_no_depends:
+       -$(MAKE) -C "$(call cross_cfg,$(work_dir)_debug)"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_test tbb_root=$(tbb_root)
+
+tbbmalloc_test_release_ni: $(call cross_cfg,mkdir_release) $(call cross_cfg,tbbmalloc_release) tbbmalloc_test_release_no_depends
+       $(MAKE) -C "$(call cross_cfg,$(work_dir)_release)"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc_test tbb_root=$(tbb_root)
+
+tbbmalloc_test_debug_ni: $(call cross_cfg,mkdir_debug) $(call cross_cfg,tbbmalloc_debug) tbbmalloc_test_debug_no_depends
+       $(MAKE) -C "$(call cross_cfg,$(work_dir)_debug)"  -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_test tbb_root=$(tbb_root)
+
+.PHONY: examples_release examples_debug
+
+examples_release: tbb_release tbbmalloc_release
+       $(MAKE) -C $(examples_root) -r -f Makefile tbb_root=.. release test
+
+examples_debug: tbb_debug tbbmalloc_debug
+       $(MAKE) -C $(examples_root) -r -f Makefile tbb_root=.. debug test
+
+.PHONY: clean_release clean_debug clean_examples
+
+clean_release:
+       $(shell $(RM) $(work_dir)_release$(SLASH)*.* >$(NUL) 2>$(NUL))
+       $(shell $(RD) $(work_dir)_release >$(NUL) 2>$(NUL))
+
+clean_debug:
+       $(shell $(RM) $(work_dir)_debug$(SLASH)*.* >$(NUL) 2>$(NUL))
+       $(shell $(RD) $(work_dir)_debug >$(NUL) 2>$(NUL))
+
+clean_examples:
+       $(shell $(MAKE) -s -i -r -C $(examples_root) -f Makefile tbb_root=.. clean >$(NUL) 2>$(NUL))
+
+.PHONY: mkdir_release mkdir_debug codecov do_codecov info
+
+mkdir_release:
+       $(shell $(MD) "$(work_dir)_release" >$(NUL) 2>$(NUL))
+       $(if $(subst undefined,,$(origin_build_dir)),,cd "$(work_dir)_release" && $(MAKE_TBBVARS) $(tbb_build_prefix)_release)
+
+mkdir_debug:
+       $(shell $(MD) "$(work_dir)_debug" >$(NUL) 2>$(NUL))
+       $(if $(subst undefined,,$(origin_build_dir)),,cd "$(work_dir)_debug" && $(MAKE_TBBVARS) $(tbb_build_prefix)_debug)
+
+codecov:
+       $(MAKE) tbb_root=.. compiler=$(if $(findstring windows,$(tbb_os)),icl,icc) codecov=yes do_codecov
+
+do_codecov:
+       $(MAKE) tbbmalloc_test_release test_release
+       $(MAKE) clean_test_* cfg=release
+       $(MAKE) crosstest=yes tbbmalloc_test_debug test_debug
+
+info:
+       @echo OS: $(tbb_os)
+       @echo arch=$(arch)
+       @echo compiler=$(compiler)
+       @echo runtime=$(runtime)
+       @echo tbb_build_prefix=$(tbb_build_prefix)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/src/index.html
new file mode 100644 (file)
index 0000000..5e53ce7
--- /dev/null
@@ -0,0 +1,32 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains the source code and unit tests for Threading Building Blocks.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="tbb">tbb</A>
+<DD>Source code of the TBB library core.
+<DT><A HREF="tbbmalloc">tbbmalloc</A>
+<DD>Source code of the TBB scalable memory allocator.
+<DT><A HREF="test">test</A>
+<DD>Source code of the TBB unit tests.
+<DT><A HREF="old">old</A>
+<DD>Source code of deprecated TBB entities that are still shipped as part of the TBB library for the sake of backward compatibility.
+<DT><A HREF="rml">rml</A>
+<DD>Source code of the Resource Management Layer (RML).
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/old/concurrent_queue_v2.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/old/concurrent_queue_v2.cpp
new file mode 100644 (file)
index 0000000..a6d0d6f
--- /dev/null
@@ -0,0 +1,382 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "concurrent_queue_v2.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/atomic.h"
+#include <cstring>
+#include <stdio.h>
+
+#if defined(_MSC_VER) && defined(_Wp64)
+    // Workaround for overzealous compiler warnings in /Wp64 mode
+    #pragma warning (disable: 4267)
+#endif
+
+#define RECORD_EVENTS 0
+
+using namespace std;
+
+namespace tbb {
+
+namespace internal {
+
+class concurrent_queue_rep;
+
+//! A queue using simple locking.
+/** For efficient, this class has no constructor.  
+    The caller is expected to zero-initialize it. */
+struct micro_queue {
+    typedef concurrent_queue_base::page page;
+    typedef size_t ticket;
+
+    atomic<page*> head_page;
+    atomic<ticket> head_counter;
+
+    atomic<page*> tail_page;
+    atomic<ticket> tail_counter;
+
+    spin_mutex page_mutex;
+    
+    class push_finalizer: no_copy {
+        ticket my_ticket;
+        micro_queue& my_queue;
+    public:
+        push_finalizer( micro_queue& queue, ticket k ) :
+            my_ticket(k), my_queue(queue)
+        {}
+        ~push_finalizer() {
+            my_queue.tail_counter = my_ticket;
+        }
+    };
+
+    void push( const void* item, ticket k, concurrent_queue_base& base );
+
+    class pop_finalizer: no_copy {
+        ticket my_ticket;
+        micro_queue& my_queue;
+        page* my_page; 
+    public:
+        pop_finalizer( micro_queue& queue, ticket k, page* p ) :
+            my_ticket(k), my_queue(queue), my_page(p)
+        {}
+        ~pop_finalizer() {
+            page* p = my_page;
+            if( p ) {
+                spin_mutex::scoped_lock lock( my_queue.page_mutex );
+                page* q = p->next;
+                my_queue.head_page = q;
+                if( !q ) {
+                    my_queue.tail_page = NULL;
+                }
+            }
+            my_queue.head_counter = my_ticket;
+            if( p ) 
+                operator delete(p);
+        }
+    };
+
+    bool pop( void* dst, ticket k, concurrent_queue_base& base );
+};
+
+//! Internal representation of a ConcurrentQueue.
+/** For efficient, this class has no constructor.  
+    The caller is expected to zero-initialize it. */
+class concurrent_queue_rep {
+public:
+    typedef size_t ticket;
+
+private:
+    friend struct micro_queue;
+
+    //! Approximately n_queue/golden ratio
+    static const size_t phi = 3;
+
+public:
+    //! Must be power of 2
+    static const size_t n_queue = 8; 
+
+    //! Map ticket to an array index
+    static size_t index( ticket k ) {
+        return k*phi%n_queue;
+    }
+
+    atomic<ticket> head_counter;
+    char pad1[NFS_MaxLineSize-sizeof(size_t)];
+
+    atomic<ticket> tail_counter;
+    char pad2[NFS_MaxLineSize-sizeof(ticket)];
+    micro_queue array[n_queue];    
+
+    micro_queue& choose( ticket k ) {
+        // The formula here approximates LRU in a cache-oblivious way.
+        return array[index(k)];
+    }
+
+    //! Value for effective_capacity that denotes unbounded queue.
+    static const ptrdiff_t infinite_capacity = ptrdiff_t(~size_t(0)/2);
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // unary minus operator applied to unsigned type, result still unsigned
+    #pragma warning( push )
+    #pragma warning( disable: 4146 )
+#endif
+
+//------------------------------------------------------------------------
+// micro_queue
+//------------------------------------------------------------------------
+void micro_queue::push( const void* item, ticket k, concurrent_queue_base& base ) {
+    k &= -concurrent_queue_rep::n_queue;
+    page* p = NULL;
+    size_t index = (k/concurrent_queue_rep::n_queue & base.items_per_page-1);
+    if( !index ) {
+        size_t n = sizeof(page) + base.items_per_page*base.item_size;
+        p = static_cast<page*>(operator new( n ));
+        p->mask = 0;
+        p->next = NULL;
+    }
+    {
+        push_finalizer finalizer( *this, k+concurrent_queue_rep::n_queue ); 
+        spin_wait_until_eq( tail_counter, k );
+        if( p ) {
+            spin_mutex::scoped_lock lock( page_mutex );
+            if( page* q = tail_page )
+                q->next = p;
+            else
+                head_page = p; 
+            tail_page = p;
+        } else {
+            p = tail_page;
+        }
+        base.copy_item( *p, index, item );
+        // If no exception was thrown, mark item as present.
+        p->mask |= uintptr(1)<<index;
+    } 
+}
+
+bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
+    k &= -concurrent_queue_rep::n_queue;
+    spin_wait_until_eq( head_counter, k );
+    spin_wait_while_eq( tail_counter, k );
+    page& p = *head_page;
+    __TBB_ASSERT( &p, NULL );
+    size_t index = (k/concurrent_queue_rep::n_queue & base.items_per_page-1);
+    bool success = false; 
+    {
+        pop_finalizer finalizer( *this, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? &p : NULL ); 
+        if( p.mask & uintptr(1)<<index ) {
+            success = true;
+            base.assign_and_destroy_item( dst, p, index );
+        }
+    }
+    return success;
+}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif
+
+//------------------------------------------------------------------------
+// concurrent_queue_base
+//------------------------------------------------------------------------
+concurrent_queue_base::concurrent_queue_base( size_t item_size ) {
+    items_per_page = item_size<=8 ? 32 :
+                     item_size<=16 ? 16 : 
+                     item_size<=32 ? 8 :
+                     item_size<=64 ? 4 :
+                     item_size<=128 ? 2 :
+                     1;
+    my_capacity = size_t(-1)/(item_size>1 ? item_size : 2); 
+    my_rep = cache_aligned_allocator<concurrent_queue_rep>().allocate(1);
+    __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, "alignment error" );
+    __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, "alignment error" );
+    __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, "alignment error" );
+    __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, "alignment error" );
+    memset(my_rep,0,sizeof(concurrent_queue_rep));
+    this->item_size = item_size;
+}
+
+concurrent_queue_base::~concurrent_queue_base() {
+    size_t nq = my_rep->n_queue;
+    for( size_t i=0; i<nq; i++ ) {
+        page* tp = my_rep->array[i].tail_page;
+        __TBB_ASSERT( my_rep->array[i].head_page==tp, "at most one page should remain" );
+        if( tp!=NULL )
+            delete tp;
+    }
+    cache_aligned_allocator<concurrent_queue_rep>().deallocate(my_rep,1);
+}
+
+void concurrent_queue_base::internal_push( const void* src ) {
+    concurrent_queue_rep& r = *my_rep;
+    concurrent_queue_rep::ticket k  = r.tail_counter++;
+    ptrdiff_t e = my_capacity;
+    if( e<concurrent_queue_rep::infinite_capacity ) {
+        atomic_backoff backoff;
+        for(;;) {
+            if( (ptrdiff_t)(k-r.head_counter)<e ) break;
+            backoff.pause();
+            e = const_cast<volatile ptrdiff_t&>(my_capacity);
+        }
+    } 
+    r.choose(k).push(src,k,*this);
+}
+
+void concurrent_queue_base::internal_pop( void* dst ) {
+    concurrent_queue_rep& r = *my_rep;
+    concurrent_queue_rep::ticket k;
+    do {
+        k = r.head_counter++;
+    } while( !r.choose(k).pop(dst,k,*this) );
+}
+
+bool concurrent_queue_base::internal_pop_if_present( void* dst ) {
+    concurrent_queue_rep& r = *my_rep;
+    concurrent_queue_rep::ticket k;
+    do {
+        atomic_backoff backoff;
+        for(;;) {
+            k = r.head_counter;
+            if( r.tail_counter<=k ) {
+                // Queue is empty 
+                return false;
+            }
+            // Queue had item with ticket k when we looked.  Attempt to get that item.
+            if( r.head_counter.compare_and_swap(k+1,k)==k ) {
+                break;
+            }
+            // Another thread snatched the item, so pause and retry.
+            backoff.pause();
+        }
+    } while( !r.choose(k).pop(dst,k,*this) );
+    return true;
+}
+
+bool concurrent_queue_base::internal_push_if_not_full( const void* src ) {
+    concurrent_queue_rep& r = *my_rep;
+    atomic_backoff backoff;
+    concurrent_queue_rep::ticket k;
+    for(;;) {
+        k = r.tail_counter;
+        if( (ptrdiff_t)(k-r.head_counter)>=my_capacity ) {
+            // Queue is full
+            return false;
+        }
+        // Queue had empty slot with ticket k when we looked.  Attempt to claim that slot.
+        if( r.tail_counter.compare_and_swap(k+1,k)==k ) 
+            break;
+        // Another thread claimed the slot, so pause and retry.
+        backoff.pause();
+    }
+    r.choose(k).push(src,k,*this);
+    return true;
+}
+
+ptrdiff_t concurrent_queue_base::internal_size() const {
+    __TBB_ASSERT( sizeof(ptrdiff_t)<=sizeof(size_t), NULL );
+    return ptrdiff_t(my_rep->tail_counter-my_rep->head_counter);
+}
+
+void concurrent_queue_base::internal_set_capacity( ptrdiff_t capacity, size_t /*item_size*/ ) {
+    my_capacity = capacity<0 ? concurrent_queue_rep::infinite_capacity : capacity;
+}
+
+//------------------------------------------------------------------------
+// concurrent_queue_iterator_rep
+//------------------------------------------------------------------------
+class  concurrent_queue_iterator_rep: no_assign {
+public:
+    typedef concurrent_queue_rep::ticket ticket;
+    ticket head_counter;   
+    const concurrent_queue_base& my_queue;
+    concurrent_queue_base::page* array[concurrent_queue_rep::n_queue];
+    concurrent_queue_iterator_rep( const concurrent_queue_base& queue ) : 
+        head_counter(queue.my_rep->head_counter),
+        my_queue(queue)
+    {
+        const concurrent_queue_rep& rep = *queue.my_rep;
+        for( size_t k=0; k<concurrent_queue_rep::n_queue; ++k )
+            array[k] = rep.array[k].head_page;
+    }
+    //! Get pointer to kth element
+    void* choose( size_t k ) {
+        if( k==my_queue.my_rep->tail_counter )
+            return NULL;
+        else {
+            concurrent_queue_base::page* p = array[concurrent_queue_rep::index(k)];
+            __TBB_ASSERT(p,NULL);
+            size_t i = k/concurrent_queue_rep::n_queue & my_queue.items_per_page-1;
+            return static_cast<unsigned char*>(static_cast<void*>(p+1)) + my_queue.item_size*i;
+        }
+    }
+};
+
+//------------------------------------------------------------------------
+// concurrent_queue_iterator_base
+//------------------------------------------------------------------------
+concurrent_queue_iterator_base::concurrent_queue_iterator_base( const concurrent_queue_base& queue ) {
+    my_rep = new concurrent_queue_iterator_rep(queue);
+    my_item = my_rep->choose(my_rep->head_counter);
+}
+
+void concurrent_queue_iterator_base::assign( const concurrent_queue_iterator_base& other ) {
+    if( my_rep!=other.my_rep ) {
+        if( my_rep ) {
+            delete my_rep;
+            my_rep = NULL;
+        }
+        if( other.my_rep ) {
+            my_rep = new concurrent_queue_iterator_rep( *other.my_rep );
+        }
+    }
+    my_item = other.my_item;
+}
+
+void concurrent_queue_iterator_base::advance() {
+    __TBB_ASSERT( my_item, "attempt to increment iterator past end of queue" );  
+    size_t k = my_rep->head_counter;
+    const concurrent_queue_base& queue = my_rep->my_queue;
+    __TBB_ASSERT( my_item==my_rep->choose(k), NULL );
+    size_t i = k/concurrent_queue_rep::n_queue & queue.items_per_page-1;
+    if( i==queue.items_per_page-1 ) {
+        concurrent_queue_base::page*& root = my_rep->array[concurrent_queue_rep::index(k)];
+        root = root->next;
+    }
+    my_rep->head_counter = k+1;
+    my_item = my_rep->choose(k+1);
+}
+
+concurrent_queue_iterator_base::~concurrent_queue_iterator_base() {
+    delete my_rep;
+    my_rep = NULL;
+}
+
+} // namespace internal
+
+} // namespace tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/old/concurrent_queue_v2.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/old/concurrent_queue_v2.h
new file mode 100644 (file)
index 0000000..862384e
--- /dev/null
@@ -0,0 +1,328 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_concurrent_queue_H
+#define __TBB_concurrent_queue_H
+
+#include "tbb/tbb_stddef.h"
+#include <new>
+
+namespace tbb {
+
+template<typename T> class concurrent_queue;
+
+//! @cond INTERNAL
+namespace internal {
+
+class concurrent_queue_rep;
+class concurrent_queue_iterator_rep;
+class concurrent_queue_iterator_base;
+template<typename Container, typename Value> class concurrent_queue_iterator;
+
+//! For internal use only.
+/** Type-independent portion of concurrent_queue.
+    @ingroup containers */
+class concurrent_queue_base: no_copy {
+    //! Internal representation
+    concurrent_queue_rep* my_rep;
+
+    friend class concurrent_queue_rep;
+    friend struct micro_queue;
+    friend class concurrent_queue_iterator_rep;
+    friend class concurrent_queue_iterator_base;
+protected:
+    //! Prefix on a page
+    struct page {
+        page* next;
+        uintptr mask; 
+    };
+
+    //! Capacity of the queue
+    ptrdiff_t my_capacity;
+   
+    //! Always a power of 2
+    size_t items_per_page;
+
+    //! Size of an item
+    size_t item_size;
+private:
+    virtual void copy_item( page& dst, size_t index, const void* src ) = 0;
+    virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) = 0;
+protected:
+    __TBB_EXPORTED_METHOD concurrent_queue_base( size_t item_size );
+    virtual __TBB_EXPORTED_METHOD ~concurrent_queue_base();
+
+    //! Enqueue item at tail of queue
+    void __TBB_EXPORTED_METHOD internal_push( const void* src );
+
+    //! Dequeue item from head of queue
+    void __TBB_EXPORTED_METHOD internal_pop( void* dst );
+
+    //! Attempt to enqueue item onto queue.
+    bool __TBB_EXPORTED_METHOD internal_push_if_not_full( const void* src );
+
+    //! Attempt to dequeue item from queue.
+    /** NULL if there was no item to dequeue. */
+    bool __TBB_EXPORTED_METHOD internal_pop_if_present( void* dst );
+
+    //! Get size of queue
+    ptrdiff_t __TBB_EXPORTED_METHOD internal_size() const;
+
+    void __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );
+};
+
+//! Type-independent portion of concurrent_queue_iterator.
+/** @ingroup containers */
+class concurrent_queue_iterator_base {
+    //! Concurrentconcurrent_queue over which we are iterating.
+    /** NULL if one past last element in queue. */
+    concurrent_queue_iterator_rep* my_rep;
+
+    template<typename C, typename T, typename U>
+    friend bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );
+
+    template<typename C, typename T, typename U>
+    friend bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );
+protected:
+    //! Pointer to current item
+    mutable void* my_item;
+
+    //! Default constructor
+    __TBB_EXPORTED_METHOD concurrent_queue_iterator_base() : my_rep(NULL), my_item(NULL) {}
+
+    //! Copy constructor
+    concurrent_queue_iterator_base( const concurrent_queue_iterator_base& i ) : my_rep(NULL), my_item(NULL) {
+        assign(i);
+    }
+
+    //! Construct iterator pointing to head of queue.
+    concurrent_queue_iterator_base( const concurrent_queue_base& queue );
+
+    //! Assignment
+    void __TBB_EXPORTED_METHOD assign( const concurrent_queue_iterator_base& i );
+
+    //! Advance iterator one step towards tail of queue.
+    void __TBB_EXPORTED_METHOD advance();
+
+    //! Destructor
+    __TBB_EXPORTED_METHOD ~concurrent_queue_iterator_base();
+};
+
+//! Meets requirements of a forward iterator for STL.
+/** Value is either the T or const T type of the container.
+    @ingroup containers */
+template<typename Container, typename Value>
+class concurrent_queue_iterator: public concurrent_queue_iterator_base {
+#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)
+    template<typename T>
+    friend class ::tbb::concurrent_queue;
+#else
+public: // workaround for MSVC
+#endif 
+    //! Construct iterator pointing to head of queue.
+    concurrent_queue_iterator( const concurrent_queue_base& queue ) :
+        concurrent_queue_iterator_base(queue)
+    {
+    }
+public:
+    concurrent_queue_iterator() {}
+
+    /** If Value==Container::value_type, then this routine is the copy constructor. 
+        If Value==const Container::value_type, then this routine is a conversion constructor. */
+    concurrent_queue_iterator( const concurrent_queue_iterator<Container,typename Container::value_type>& other ) :
+        concurrent_queue_iterator_base(other)
+    {}
+
+    //! Iterator assignment
+    concurrent_queue_iterator& operator=( const concurrent_queue_iterator& other ) {
+        assign(other);
+        return *this;
+    }
+
+    //! Reference to current item 
+    Value& operator*() const {
+        return *static_cast<Value*>(my_item);
+    }
+
+    Value* operator->() const {return &operator*();}
+
+    //! Advance to next item in queue
+    concurrent_queue_iterator& operator++() {
+        advance();
+        return *this;
+    }
+
+    //! Post increment
+    Value* operator++(int) {
+        Value* result = &operator*();
+        operator++();
+        return result;
+    }
+}; // concurrent_queue_iterator
+
+template<typename C, typename T, typename U>
+bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {
+    return i.my_item==j.my_item;
+}
+
+template<typename C, typename T, typename U>
+bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {
+    return i.my_item!=j.my_item;
+}
+
+} // namespace internal;
+//! @endcond
+
+//! A high-performance thread-safe queue.
+/** Multiple threads may each push and pop concurrently.
+    Assignment and copy construction are not allowed.
+    @ingroup containers */
+template<typename T>
+class concurrent_queue: public internal::concurrent_queue_base {
+    template<typename Container, typename Value> friend class internal::concurrent_queue_iterator;
+
+    //! Class used to ensure exception-safety of method "pop" 
+    class destroyer {
+        T& my_value;
+    public:
+        destroyer( T& value ) : my_value(value) {}
+        ~destroyer() {my_value.~T();}          
+    };
+
+    T& get_ref( page& page, size_t index ) {
+        __TBB_ASSERT( index<items_per_page, NULL );
+        return static_cast<T*>(static_cast<void*>(&page+1))[index];
+    }
+
+    /*override*/ virtual void copy_item( page& dst, size_t index, const void* src ) {
+        new( &get_ref(dst,index) ) T(*static_cast<const T*>(src)); 
+    }
+
+    /*override*/ virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) {
+        T& from = get_ref(src,index);
+        destroyer d(from);
+        *static_cast<T*>(dst) = from;
+    }
+
+public:
+    //! Element type in the queue.
+    typedef T value_type;
+
+    //! Reference type
+    typedef T& reference;
+
+    //! Const reference type
+    typedef const T& const_reference;
+
+    //! Integral type for representing size of the queue.
+    /** Notice that the size_type is a signed integral type.
+        This is because the size can be negative if there are pending pops without corresponding pushes. */
+    typedef std::ptrdiff_t size_type;
+
+    //! Difference type for iterator
+    typedef std::ptrdiff_t difference_type;
+
+    //! Construct empty queue
+    concurrent_queue() : 
+        concurrent_queue_base( sizeof(T) )
+    {
+    }
+
+    //! Destroy queue
+    ~concurrent_queue();
+
+    //! Enqueue an item at tail of queue.
+    void push( const T& source ) {
+        internal_push( &source );
+    }
+
+    //! Dequeue item from head of queue.
+    /** Block until an item becomes available, and then dequeue it. */
+    void pop( T& destination ) {
+        internal_pop( &destination );
+    }
+
+    //! Enqueue an item at tail of queue if queue is not already full.
+    /** Does not wait for queue to become not full.
+        Returns true if item is pushed; false if queue was already full. */
+    bool push_if_not_full( const T& source ) {
+        return internal_push_if_not_full( &source );
+    }
+
+    //! Attempt to dequeue an item from head of queue.
+    /** Does not wait for item to become available.
+        Returns true if successful; false otherwise. */
+    bool pop_if_present( T& destination ) {
+        return internal_pop_if_present( &destination );
+    }
+
+    //! Return number of pushes minus number of pops.
+    /** Note that the result can be negative if there are pops waiting for the 
+        corresponding pushes.  The result can also exceed capacity() if there 
+        are push operations in flight. */
+    size_type size() const {return internal_size();}
+
+    //! Equivalent to size()<=0.
+    bool empty() const {return size()<=0;}
+
+    //! Maximum number of allowed elements
+    size_type capacity() const {
+        return my_capacity;
+    }
+
+    //! Set the capacity
+    /** Setting the capacity to 0 causes subsequent push_if_not_full operations to always fail,
+        and subsequent push operations to block forever. */
+    void set_capacity( size_type capacity ) {
+        internal_set_capacity( capacity, sizeof(T) );
+    }
+
+    typedef internal::concurrent_queue_iterator<concurrent_queue,T> iterator;
+    typedef internal::concurrent_queue_iterator<concurrent_queue,const T> const_iterator;
+
+    //------------------------------------------------------------------------
+    // The iterators are intended only for debugging.  They are slow and not thread safe.
+    //------------------------------------------------------------------------
+    iterator begin() {return iterator(*this);}
+    iterator end() {return iterator();}
+    const_iterator begin() const {return const_iterator(*this);}
+    const_iterator end() const {return const_iterator();}
+    
+}; 
+
+template<typename T>
+concurrent_queue<T>::~concurrent_queue() {
+    while( !empty() ) {
+        T value;
+        internal_pop(&value);
+    }
+}
+
+} // namespace tbb
+
+#endif /* __TBB_concurrent_queue_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/old/concurrent_vector_v2.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/old/concurrent_vector_v2.cpp
new file mode 100644 (file)
index 0000000..36186ea
--- /dev/null
@@ -0,0 +1,266 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "concurrent_vector_v2.h"
+#include "tbb/tbb_machine.h"
+#include <stdexcept>
+#include "../tbb/itt_notify.h"
+#include "tbb/task.h"
+#include <cstring>
+
+
+#if defined(_MSC_VER) && defined(_Wp64)
+    // Workaround for overzealous compiler warnings in /Wp64 mode
+    #pragma warning (disable: 4267)
+#endif
+
+namespace tbb {
+
+namespace internal {
+
+void concurrent_vector_base::internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op1 init ) {
+    size_type e = my_early_size;
+    while( e<new_size ) {
+        size_type f = my_early_size.compare_and_swap(new_size,e);
+        if( f==e ) {
+            internal_grow( e, new_size, element_size, init );
+            return;
+        }
+        e = f;
+    }
+}
+
+class concurrent_vector_base::helper {
+    static void extend_segment( concurrent_vector_base& v );
+public:
+    static segment_index_t find_segment_end( const concurrent_vector_base& v ) {
+        const size_t pointers_per_long_segment = sizeof(void*)==4 ? 32 : 64;
+        const size_t pointers_per_short_segment = 2;
+        //unsigned u = v.my_segment==v.my_storage ? pointers_per_short_segment : pointers_per_long_segment;
+        segment_index_t u = v.my_segment==(&(v.my_storage[0])) ? pointers_per_short_segment : pointers_per_long_segment;
+        segment_index_t k = 0;
+        while( k<u && v.my_segment[k].array )
+            ++k;
+        return k;
+    }
+    static void extend_segment_if_necessary( concurrent_vector_base& v, size_t k ) {
+        const size_t pointers_per_short_segment = 2;
+        if( k>=pointers_per_short_segment && v.my_segment==v.my_storage ) {
+            extend_segment(v);
+        }
+    }
+};
+
+void concurrent_vector_base::helper::extend_segment( concurrent_vector_base& v ) {
+    const size_t pointers_per_long_segment = sizeof(void*)==4 ? 32 : 64;
+    segment_t* s = (segment_t*)NFS_Allocate( pointers_per_long_segment, sizeof(segment_t), NULL );
+    std::memset( s, 0, pointers_per_long_segment*sizeof(segment_t) );
+    // If other threads are trying to set pointers in the short segment, wait for them to finish their
+    // assigments before we copy the short segment to the long segment.
+    atomic_backoff backoff;
+    while( !v.my_storage[0].array || !v.my_storage[1].array ) {
+        backoff.pause();
+    }
+    s[0] = v.my_storage[0]; 
+    s[1] = v.my_storage[1]; 
+    if( v.my_segment.compare_and_swap( s, v.my_storage )!=v.my_storage ) 
+        NFS_Free(s);
+}
+
+concurrent_vector_base::size_type concurrent_vector_base::internal_capacity() const {
+    return segment_base( helper::find_segment_end(*this) );
+}
+
+void concurrent_vector_base::internal_reserve( size_type n, size_type element_size, size_type max_size ) {
+    if( n>max_size ) {
+        throw std::length_error("argument to ConcurrentVector::reserve exceeds ConcurrentVector::max_size()");
+    }
+    for( segment_index_t k = helper::find_segment_end(*this); segment_base(k)<n; ++k ) {
+        helper::extend_segment_if_necessary(*this,k);
+        size_t m = segment_size(k);
+        __TBB_ASSERT( !my_segment[k].array, "concurrent operation during reserve(...)?" );
+        my_segment[k].array = NFS_Allocate( m, element_size, NULL );
+    }
+}
+
+void concurrent_vector_base::internal_copy( const concurrent_vector_base& src, size_type element_size, internal_array_op2 copy ) {
+    size_type n = src.my_early_size;
+    my_early_size = n;
+    my_segment = my_storage;
+    if( n ) {
+        size_type b;
+        for( segment_index_t k=0; (b=segment_base(k))<n; ++k ) {
+            helper::extend_segment_if_necessary(*this,k);
+            size_t m = segment_size(k);
+            __TBB_ASSERT( !my_segment[k].array, "concurrent operation during copy construction?" );
+            my_segment[k].array = NFS_Allocate( m, element_size, NULL );
+            if( m>n-b ) m = n-b; 
+            copy( my_segment[k].array, src.my_segment[k].array, m );
+        }
+    }
+}
+
+void concurrent_vector_base::internal_assign( const concurrent_vector_base& src, size_type element_size, internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy ) {
+    size_type n = src.my_early_size;
+    while( my_early_size>n ) { 
+        segment_index_t k = segment_index_of( my_early_size-1 );
+        size_type b=segment_base(k);
+        size_type new_end = b>=n ? b : n;
+        __TBB_ASSERT( my_early_size>new_end, NULL );
+        destroy( (char*)my_segment[k].array+element_size*(new_end-b), my_early_size-new_end );
+        my_early_size = new_end;
+    }
+    size_type dst_initialized_size = my_early_size;
+    my_early_size = n;
+    size_type b;
+    for( segment_index_t k=0; (b=segment_base(k))<n; ++k ) {
+        helper::extend_segment_if_necessary(*this,k);
+        size_t m = segment_size(k);
+        if( !my_segment[k].array )
+            my_segment[k].array = NFS_Allocate( m, element_size, NULL );
+        if( m>n-b ) m = n-b; 
+        size_type a = 0;
+        if( dst_initialized_size>b ) {
+            a = dst_initialized_size-b;
+            if( a>m ) a = m;
+            assign( my_segment[k].array, src.my_segment[k].array, a );
+            m -= a; 
+            a *= element_size; 
+        }
+        if( m>0 ) 
+            copy( (char*)my_segment[k].array+a, (char*)src.my_segment[k].array+a, m );
+    }
+    __TBB_ASSERT( src.my_early_size==n, "detected use of ConcurrentVector::operator= with right side that was concurrently modified" );
+}
+
+void* concurrent_vector_base::internal_push_back( size_type element_size, size_type& index ) {
+    __TBB_ASSERT( sizeof(my_early_size)==sizeof(reference_count), NULL );
+    //size_t tmp = __TBB_FetchAndIncrementWacquire(*(tbb::internal::reference_count*)&my_early_size);
+    size_t tmp = __TBB_FetchAndIncrementWacquire((tbb::internal::reference_count*)&my_early_size);
+    index = tmp;
+    segment_index_t k_old = segment_index_of( tmp );
+    size_type base = segment_base(k_old);
+    helper::extend_segment_if_necessary(*this,k_old);
+    segment_t& s = my_segment[k_old];
+    void* array = s.array;
+    if( !array ) {
+        // FIXME - consider factoring this out and share with internal_grow_by
+       if( base==tmp ) {
+           __TBB_ASSERT( !s.array, NULL );
+            size_t n = segment_size(k_old);
+           array = NFS_Allocate( n, element_size, NULL );
+           ITT_NOTIFY( sync_releasing, &s.array );
+           s.array = array;
+       } else {
+           ITT_NOTIFY(sync_prepare, &s.array);
+           spin_wait_while_eq( s.array, (void*)0 );
+           ITT_NOTIFY(sync_acquired, &s.array);
+           array = s.array;
+       }
+    }
+    size_type j_begin = tmp-base;
+    return (void*)((char*)array+element_size*j_begin);
+}
+
+concurrent_vector_base::size_type concurrent_vector_base::internal_grow_by( size_type delta, size_type element_size, internal_array_op1 init ) {
+    size_type result = my_early_size.fetch_and_add(delta);
+    internal_grow( result, result+delta, element_size, init );
+    return result;
+}
+
+void concurrent_vector_base::internal_grow( const size_type start, size_type finish, size_type element_size, internal_array_op1 init ) {
+    __TBB_ASSERT( start<finish, "start must be less than finish" );
+    size_t tmp = start;
+    do {
+        segment_index_t k_old = segment_index_of( tmp );
+        size_type base = segment_base(k_old);
+        size_t n = segment_size(k_old);
+        helper::extend_segment_if_necessary(*this,k_old);
+        segment_t& s = my_segment[k_old];
+        void* array = s.array;
+        if( !array ) {
+            if( base==tmp ) {
+                __TBB_ASSERT( !s.array, NULL );
+                array = NFS_Allocate( n, element_size, NULL );
+                ITT_NOTIFY( sync_releasing, &s.array );
+                s.array = array;
+            } else {
+                ITT_NOTIFY(sync_prepare, &s.array);
+                spin_wait_while_eq( s.array, (void*)0 );
+                ITT_NOTIFY(sync_acquired, &s.array);
+                array = s.array;
+            }
+        }
+        size_type j_begin = tmp-base;
+        size_type j_end = n > finish-base ? finish-base : n;
+        (*init)( (void*)((char*)array+element_size*j_begin), j_end-j_begin );
+        tmp = base+j_end;
+    } while( tmp<finish );
+}
+
+void concurrent_vector_base::internal_clear( internal_array_op1 destroy, bool reclaim_storage ) {
+    // Set "my_early_size" early, so that subscripting errors can be caught.
+    // FIXME - doing so may be hurting exception saftey
+    __TBB_ASSERT( my_segment, NULL );
+    size_type finish = my_early_size;
+    my_early_size = 0;
+    while( finish>0 ) {
+        segment_index_t k_old = segment_index_of(finish-1);
+        segment_t& s = my_segment[k_old];
+        __TBB_ASSERT( s.array, NULL );
+        size_type base = segment_base(k_old);
+        size_type j_end = finish-base;
+        __TBB_ASSERT( j_end, NULL );
+        (*destroy)( s.array, j_end );
+        finish = base;
+    }
+
+    // Free the arrays
+    if( reclaim_storage ) {
+        size_t k = helper::find_segment_end(*this);
+        while( k>0 ) {
+            --k;
+            segment_t& s = my_segment[k];
+            void* array = s.array;
+            s.array = NULL;
+            NFS_Free( array );
+        }
+        // Clear short segment.  
+        my_storage[0].array = NULL;
+        my_storage[1].array = NULL;
+        segment_t* s = my_segment;
+        if( s!=my_storage ) {
+            my_segment = my_storage;
+            NFS_Free( s );
+        } 
+    }
+}
+
+} // namespace internal
+
+} // tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/old/concurrent_vector_v2.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/old/concurrent_vector_v2.h
new file mode 100644 (file)
index 0000000..a9c3a3b
--- /dev/null
@@ -0,0 +1,512 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_concurrent_vector_H
+#define __TBB_concurrent_vector_H
+
+#include "tbb/tbb_stddef.h"
+#include <iterator>
+#include <new>
+#include "tbb/atomic.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/blocked_range.h"
+
+#include "tbb/tbb_machine.h"
+
+namespace tbb {
+
+template<typename T>
+class concurrent_vector;
+
+//! @cond INTERNAL
+namespace internal {
+
+    //! Base class of concurrent vector implementation.
+    /** @ingroup containers */
+    class concurrent_vector_base {
+    protected:
+        typedef unsigned long segment_index_t;
+
+        //! Log2 of "min_segment_size".  
+        static const int lg_min_segment_size = 4;
+
+        //! Minimum size (in physical items) of a segment.
+        static const int min_segment_size = segment_index_t(1)<<lg_min_segment_size;
+      
+        static segment_index_t segment_index_of( size_t index ) { 
+            uintptr i = index|1<<(lg_min_segment_size-1);
+            uintptr j = __TBB_Log2(i); 
+            return segment_index_t(j-(lg_min_segment_size-1)); 
+        }
+
+        static segment_index_t segment_base( segment_index_t k ) { 
+            return min_segment_size>>1<<k & -min_segment_size;
+        }
+
+        static segment_index_t segment_size( segment_index_t k ) {
+            segment_index_t result = k==0 ? min_segment_size : min_segment_size/2<<k;
+            __TBB_ASSERT( result==segment_base(k+1)-segment_base(k), NULL );
+            return result;
+        }
+
+        typedef size_t size_type;
+
+        void __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );
+
+        size_type __TBB_EXPORTED_METHOD internal_capacity() const;
+
+        //! Requested size of vector
+        atomic<size_type> my_early_size;
+
+        /** Can be zero-initialized. */
+        struct segment_t {
+            /** Declared volatile because in weak memory model, must have ld.acq/st.rel  */
+            void* volatile array;
+#if TBB_DO_ASSERT
+            ~segment_t() {
+                __TBB_ASSERT( !array, "should have been set to NULL by clear" );
+            }
+#endif /* TBB_DO_ASSERT */
+        };
+
+        atomic<segment_t*> my_segment;
+
+        segment_t my_storage[2];
+
+        concurrent_vector_base() {
+            my_early_size = 0;
+            my_storage[0].array = NULL;
+            my_storage[1].array = NULL;
+            my_segment = my_storage;
+        }
+
+        //! An operation on an n-lement array starting at begin.
+        typedef void(__TBB_EXPORTED_FUNC *internal_array_op1)(void* begin, size_type n );
+
+        //! An operation on n-element destination array and n-element source array.
+        typedef void(__TBB_EXPORTED_FUNC *internal_array_op2)(void* dst, const void* src, size_type n );
+
+        void __TBB_EXPORTED_METHOD internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op1 init );
+        void internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op1 init );
+        size_type __TBB_EXPORTED_METHOD internal_grow_by( size_type delta, size_type element_size, internal_array_op1 init );
+        void* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type& index );
+        void __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy, bool reclaim_storage );
+        void __TBB_EXPORTED_METHOD internal_copy( const concurrent_vector_base& src, size_type element_size, internal_array_op2 copy );
+        void __TBB_EXPORTED_METHOD internal_assign( const concurrent_vector_base& src, size_type element_size,
+                              internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );
+private:
+        //! Private functionality that does not cross DLL boundary.
+        class helper;
+
+        friend class helper;
+    };
+
+    //! Meets requirements of a forward iterator for STL and a Value for a blocked_range.*/
+    /** Value is either the T or const T type of the container.
+        @ingroup containers */
+    template<typename Container, typename Value>
+    class vector_iterator 
+#if defined(_WIN64) && defined(_MSC_VER) 
+        // Ensure that Microsoft's internal template function _Val_type works correctly.
+        : public std::iterator<std::random_access_iterator_tag,Value>
+#endif /* defined(_WIN64) && defined(_MSC_VER) */
+    {
+        //! concurrent_vector over which we are iterating.
+        Container* my_vector;
+
+        //! Index into the vector 
+        size_t my_index;
+
+        //! Caches my_vector-&gt;internal_subscript(my_index)
+        /** NULL if cached value is not available */
+        mutable Value* my_item;
+    
+        template<typename C, typename T, typename U>
+        friend bool operator==( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );
+
+        template<typename C, typename T, typename U>
+        friend bool operator<( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );
+
+        template<typename C, typename T, typename U>
+        friend ptrdiff_t operator-( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );
+    
+        template<typename C, typename U>
+        friend class internal::vector_iterator;
+
+#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)
+        template<typename T>
+        friend class tbb::concurrent_vector;
+#else
+public: // workaround for MSVC
+#endif 
+
+        vector_iterator( const Container& vector, size_t index ) : 
+            my_vector(const_cast<Container*>(&vector)), 
+            my_index(index), 
+            my_item(NULL)
+        {}
+
+    public:
+        //! Default constructor
+        vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}
+
+        vector_iterator( const vector_iterator<Container,typename Container::value_type>& other ) :
+            my_vector(other.my_vector),
+            my_index(other.my_index),
+            my_item(other.my_item)
+        {}
+
+        vector_iterator operator+( ptrdiff_t offset ) const {
+            return vector_iterator( *my_vector, my_index+offset );
+        }
+        friend vector_iterator operator+( ptrdiff_t offset, const vector_iterator& v ) {
+            return vector_iterator( *v.my_vector, v.my_index+offset );
+        }
+        vector_iterator operator+=( ptrdiff_t offset ) {
+            my_index+=offset;
+            my_item = NULL;
+            return *this;
+        }
+        vector_iterator operator-( ptrdiff_t offset ) const {
+            return vector_iterator( *my_vector, my_index-offset );
+        }
+        vector_iterator operator-=( ptrdiff_t offset ) {
+            my_index-=offset;
+            my_item = NULL;
+            return *this;
+        }
+        Value& operator*() const {
+            Value* item = my_item;
+            if( !item ) {
+                item = my_item = &my_vector->internal_subscript(my_index);
+            }
+            __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), "corrupt cache" );
+            return *item;
+        }
+        Value& operator[]( ptrdiff_t k ) const {
+            return my_vector->internal_subscript(my_index+k);
+        }
+        Value* operator->() const {return &operator*();}
+
+        //! Pre increment
+        vector_iterator& operator++() {
+            size_t k = ++my_index;
+            if( my_item ) {
+                // Following test uses 2's-complement wizardry and fact that
+                // min_segment_size is a power of 2.
+                if( (k& k-concurrent_vector<Container>::min_segment_size)==0 ) {
+                    // k is a power of two that is at least k-min_segment_size  
+                    my_item= NULL;
+                } else {
+                    ++my_item;
+                }
+            }
+            return *this;
+        }
+
+        //! Pre decrement
+        vector_iterator& operator--() {
+            __TBB_ASSERT( my_index>0, "operator--() applied to iterator already at beginning of concurrent_vector" ); 
+            size_t k = my_index--;
+            if( my_item ) {
+                // Following test uses 2's-complement wizardry and fact that
+                // min_segment_size is a power of 2.
+                if( (k& k-concurrent_vector<Container>::min_segment_size)==0 ) {
+                    // k is a power of two that is at least k-min_segment_size  
+                    my_item= NULL;
+                } else {
+                    --my_item;
+                }
+            }
+            return *this;
+        }
+
+        //! Post increment
+        vector_iterator operator++(int) {
+            vector_iterator result = *this;
+            operator++();
+            return result;
+        }
+
+        //! Post decrement
+        vector_iterator operator--(int) {
+            vector_iterator result = *this;
+            operator--();
+            return result;
+        }
+
+        // STL support
+
+        typedef ptrdiff_t difference_type;
+        typedef Value value_type;
+        typedef Value* pointer;
+        typedef Value& reference;
+        typedef std::random_access_iterator_tag iterator_category;
+    };
+
+    template<typename Container, typename T, typename U>
+    bool operator==( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return i.my_index==j.my_index;
+    }
+
+    template<typename Container, typename T, typename U>
+    bool operator!=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return !(i==j);
+    }
+
+    template<typename Container, typename T, typename U>
+    bool operator<( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return i.my_index<j.my_index;
+    }
+
+    template<typename Container, typename T, typename U>
+    bool operator>( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return j<i;
+    }
+
+    template<typename Container, typename T, typename U>
+    bool operator>=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return !(i<j);
+    }
+
+    template<typename Container, typename T, typename U>
+    bool operator<=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return !(j<i);
+    }
+
+    template<typename Container, typename T, typename U>
+    ptrdiff_t operator-( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+        return ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);
+    }
+
+} // namespace internal
+//! @endcond
+
+//! Concurrent vector
+/** @ingroup containers */
+template<typename T>
+class concurrent_vector: private internal::concurrent_vector_base {
+public:
+    using internal::concurrent_vector_base::size_type;
+private:
+    template<typename I>
+    class generic_range_type: public blocked_range<I> {
+    public:
+        typedef T value_type;
+        typedef T& reference;
+        typedef const T& const_reference;
+        typedef I iterator;
+        typedef ptrdiff_t difference_type;
+        generic_range_type( I begin_, I end_, size_t grainsize ) : blocked_range<I>(begin_,end_,grainsize) {} 
+        generic_range_type( generic_range_type& r, split ) : blocked_range<I>(r,split()) {}
+    };
+
+    template<typename C, typename U>
+    friend class internal::vector_iterator;
+public:
+    typedef T& reference;
+    typedef const T& const_reference;
+
+    //! Construct empty vector.
+    concurrent_vector() {}
+
+    //! Copy a vector.
+    concurrent_vector( const concurrent_vector& vector ) {internal_copy(vector,sizeof(T),&copy_array);}
+
+    //! Assignment 
+    concurrent_vector& operator=( const concurrent_vector& vector ) {
+        if( this!=&vector )
+            internal_assign(vector,sizeof(T),&destroy_array,&assign_array,&copy_array);
+        return *this;
+    }
+
+    //! Clear and destroy vector.
+    ~concurrent_vector() {internal_clear(&destroy_array,/*reclaim_storage=*/true);}
+
+    //------------------------------------------------------------------------
+    // Concurrent operations
+    //------------------------------------------------------------------------
+    //! Grow by "delta" elements.
+    /** Returns old size. */
+    size_type grow_by( size_type delta ) {
+        return delta ? internal_grow_by( delta, sizeof(T), &initialize_array ) : my_early_size;
+    }
+
+    //! Grow array until it has at least n elements.
+    void grow_to_at_least( size_type n ) {
+        if( my_early_size<n )
+            internal_grow_to_at_least( n, sizeof(T), &initialize_array );
+    };
+
+    //! Push item 
+    size_type push_back( const_reference item ) {
+        size_type k;
+        new( internal_push_back(sizeof(T),k) ) T(item);
+        return k;
+    }
+
+    //! Get reference to element at given index.
+    /** This method is thread-safe for concurrent reads, and also while growing the vector,
+        as long as the calling thread has checked that index&lt;size(). */
+    reference operator[]( size_type index ) {
+        return internal_subscript(index);
+    }
+
+    //! Get const reference to element at given index.
+    const_reference operator[]( size_type index ) const {
+        return internal_subscript(index);
+    }
+
+    //------------------------------------------------------------------------
+    // Parallel algorithm support
+    //------------------------------------------------------------------------
+    typedef internal::vector_iterator<concurrent_vector,T> iterator;
+    typedef internal::vector_iterator<concurrent_vector,const T> const_iterator;
+
+#if !defined(_MSC_VER) || _CPPLIB_VER>=300 
+    // Assume ISO standard definition of std::reverse_iterator
+    typedef std::reverse_iterator<iterator> reverse_iterator;
+    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+#else
+    // Use non-standard std::reverse_iterator
+    typedef std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;
+    typedef std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;
+#endif /* defined(_MSC_VER) && (_MSC_VER<1300) */
+
+    typedef generic_range_type<iterator> range_type;
+    typedef generic_range_type<const_iterator> const_range_type;
+
+    range_type range( size_t grainsize = 1 ) {
+        return range_type( begin(), end(), grainsize );
+    }
+
+    const_range_type range( size_t grainsize = 1 ) const {
+        return const_range_type( begin(), end(), grainsize );
+    }
+
+    //------------------------------------------------------------------------
+    // Capacity
+    //------------------------------------------------------------------------
+    //! Return size of vector.
+    size_type size() const {return my_early_size;}
+
+    //! Return size of vector.
+    bool empty() const {return !my_early_size;}
+
+    //! Maximum size to which array can grow without allocating more memory.
+    size_type capacity() const {return internal_capacity();}
+
+    //! Allocate enough space to grow to size n without having to allocate more memory later.
+    /** Like most of the methods provided for STL compatibility, this method is *not* thread safe. 
+        The capacity afterwards may be bigger than the requested reservation. */
+    void reserve( size_type n ) {
+        if( n )
+            internal_reserve(n, sizeof(T), max_size());
+    }
+
+    //! Upper bound on argument to reserve.
+    size_type max_size() const {return (~size_t(0))/sizeof(T);}
+
+    //------------------------------------------------------------------------
+    // STL support
+    //------------------------------------------------------------------------
+
+    typedef T value_type;
+    typedef ptrdiff_t difference_type;
+
+    iterator begin() {return iterator(*this,0);}
+    iterator end() {return iterator(*this,size());}
+    const_iterator begin() const {return const_iterator(*this,0);}
+    const_iterator end() const {return const_iterator(*this,size());}
+
+    reverse_iterator rbegin() {return reverse_iterator(end());}
+    reverse_iterator rend() {return reverse_iterator(begin());}
+    const_reverse_iterator rbegin() const {return const_reverse_iterator(end());}
+    const_reverse_iterator rend() const {return const_reverse_iterator(begin());}
+
+    //! Not thread safe
+    /** Does not change capacity. */
+    void clear() {internal_clear(&destroy_array,/*reclaim_storage=*/false);}       
+private:
+    //! Get reference to element at given index.
+    T& internal_subscript( size_type index ) const;
+
+    //! Construct n instances of T, starting at "begin".
+    static void __TBB_EXPORTED_FUNC initialize_array( void* begin, size_type n );
+
+    //! Construct n instances of T, starting at "begin".
+    static void __TBB_EXPORTED_FUNC copy_array( void* dst, const void* src, size_type n );
+
+    //! Assign n instances of T, starting at "begin".
+    static void __TBB_EXPORTED_FUNC assign_array( void* dst, const void* src, size_type n );
+
+    //! Destroy n instances of T, starting at "begin".
+    static void __TBB_EXPORTED_FUNC destroy_array( void* begin, size_type n );
+};
+
+template<typename T>
+T& concurrent_vector<T>::internal_subscript( size_type index ) const {
+    __TBB_ASSERT( index<size(), "index out of bounds" );
+    segment_index_t k = segment_index_of( index );
+    size_type j = index-segment_base(k);
+    return static_cast<T*>(my_segment[k].array)[j];
+}
+
+template<typename T>
+void concurrent_vector<T>::initialize_array( void* begin, size_type n ) {
+    T* array = static_cast<T*>(begin);
+    for( size_type j=0; j<n; ++j )
+        new( &array[j] ) T();
+}
+
+template<typename T>
+void concurrent_vector<T>::copy_array( void* dst, const void* src, size_type n ) {
+    T* d = static_cast<T*>(dst);
+    const T* s = static_cast<const T*>(src);
+    for( size_type j=0; j<n; ++j )
+        new( &d[j] ) T(s[j]);
+}
+
+template<typename T>
+void concurrent_vector<T>::assign_array( void* dst, const void* src, size_type n ) {
+    T* d = static_cast<T*>(dst);
+    const T* s = static_cast<const T*>(src);
+    for( size_type j=0; j<n; ++j )
+        d[j] = s[j];
+}
+
+template<typename T>
+void concurrent_vector<T>::destroy_array( void* begin, size_type n ) {
+    T* array = static_cast<T*>(begin);
+    for( size_type j=n; j>0; --j )
+        array[j-1].~T();
+}
+
+} // namespace tbb
+
+#endif /* __TBB_concurrent_vector_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/old/spin_rw_mutex_v2.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/old/spin_rw_mutex_v2.cpp
new file mode 100644 (file)
index 0000000..9067b09
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "spin_rw_mutex_v2.h"
+#include "tbb/tbb_machine.h"
+#include "../tbb/itt_notify.h"
+
+namespace tbb {
+
+using namespace internal;
+
+static inline bool CAS(volatile uintptr &addr, uintptr newv, uintptr oldv) {
+    return __TBB_CompareAndSwapW((volatile void *)&addr, (intptr)newv, (intptr)oldv) == (intptr)oldv;
+}
+
+//! Signal that write lock is released
+void spin_rw_mutex::internal_itt_releasing(spin_rw_mutex *mutex) {
+    ITT_NOTIFY(sync_releasing, mutex);
+#if !DO_ITT_NOTIFY
+    (void)mutex;
+#endif
+}
+
+bool spin_rw_mutex::internal_acquire_writer(spin_rw_mutex *mutex)
+{
+    ITT_NOTIFY(sync_prepare, mutex);
+    atomic_backoff backoff;
+    for(;;) {
+        state_t s = mutex->state;
+        if( !(s & BUSY) ) { // no readers, no writers
+            if( CAS(mutex->state, WRITER, s) )
+                break; // successfully stored writer flag
+            backoff.reset(); // we could be very close to complete op.
+        } else if( !(s & WRITER_PENDING) ) { // no pending writers
+            __TBB_AtomicOR(&mutex->state, WRITER_PENDING);
+        }
+        backoff.pause();
+    }
+    ITT_NOTIFY(sync_acquired, mutex);
+    __TBB_ASSERT( (mutex->state & BUSY)==WRITER, "invalid state of a write lock" );
+    return false;
+}
+
+//! Signal that write lock is released
+void spin_rw_mutex::internal_release_writer(spin_rw_mutex *mutex) {
+    __TBB_ASSERT( (mutex->state & BUSY)==WRITER, "invalid state of a write lock" );
+    ITT_NOTIFY(sync_releasing, mutex);
+    mutex->state = 0; 
+}
+
+//! Acquire lock on given mutex.
+void spin_rw_mutex::internal_acquire_reader(spin_rw_mutex *mutex) {
+    ITT_NOTIFY(sync_prepare, mutex);
+    atomic_backoff backoff;
+    for(;;) {
+        state_t s = mutex->state;
+        if( !(s & (WRITER|WRITER_PENDING)) ) { // no writer or write requests
+            if( CAS(mutex->state, s+ONE_READER, s) )
+                break; // successfully stored increased number of readers
+            backoff.reset(); // we could be very close to complete op.
+        }
+        backoff.pause();
+    }
+    ITT_NOTIFY(sync_acquired, mutex);
+    __TBB_ASSERT( mutex->state & READERS, "invalid state of a read lock: no readers" );
+    __TBB_ASSERT( !(mutex->state & WRITER), "invalid state of a read lock: active writer" );
+}
+
+//! Upgrade reader to become a writer.
+/** Returns true if the upgrade happened without re-acquiring the lock and false if opposite */
+bool spin_rw_mutex::internal_upgrade(spin_rw_mutex *mutex) {
+    state_t s = mutex->state;
+    __TBB_ASSERT( s & READERS, "invalid state before upgrade: no readers " );
+    __TBB_ASSERT( !(s & WRITER), "invalid state before upgrade: active writer " );
+    // check and set writer-pending flag
+    // required conditions: either no pending writers, or we are the only reader
+    // (with multiple readers and pending writer, another upgrade could have been requested)
+    while( (s & READERS)==ONE_READER || !(s & WRITER_PENDING) ) {
+        if( CAS(mutex->state, s | WRITER_PENDING, s) )
+        {
+            atomic_backoff backoff;
+            ITT_NOTIFY(sync_prepare, mutex);
+            while( (mutex->state & READERS) != ONE_READER ) // more than 1 reader
+                backoff.pause();
+            // the state should be 0...0110, i.e. 1 reader and waiting writer;
+            // both new readers and writers are blocked
+            __TBB_ASSERT(mutex->state == (ONE_READER | WRITER_PENDING),"invalid state when upgrading to writer");
+            mutex->state = WRITER;
+            ITT_NOTIFY(sync_acquired, mutex);
+            __TBB_ASSERT( (mutex->state & BUSY) == WRITER, "invalid state after upgrade" );
+            return true; // successfully upgraded
+        } else {
+            s = mutex->state; // re-read
+        }
+    }
+    // slow reacquire
+    internal_release_reader(mutex);
+    return internal_acquire_writer(mutex); // always returns false
+}
+
+void spin_rw_mutex::internal_downgrade(spin_rw_mutex *mutex) {
+    __TBB_ASSERT( (mutex->state & BUSY) == WRITER, "invalid state before downgrade" );
+    ITT_NOTIFY(sync_releasing, mutex);
+    mutex->state = ONE_READER;
+    __TBB_ASSERT( mutex->state & READERS, "invalid state after downgrade: no readers" );
+    __TBB_ASSERT( !(mutex->state & WRITER), "invalid state after downgrade: active writer" );
+}
+
+void spin_rw_mutex::internal_release_reader(spin_rw_mutex *mutex)
+{
+    __TBB_ASSERT( mutex->state & READERS, "invalid state of a read lock: no readers" );
+    __TBB_ASSERT( !(mutex->state & WRITER), "invalid state of a read lock: active writer" );
+    ITT_NOTIFY(sync_releasing, mutex); // release reader
+    __TBB_FetchAndAddWrelease((volatile void *)&(mutex->state),-(intptr)ONE_READER);
+}
+
+bool spin_rw_mutex::internal_try_acquire_writer( spin_rw_mutex * mutex )
+{
+// for a writer: only possible to acquire if no active readers or writers
+    state_t s = mutex->state; // on Itanium, this volatile load has acquire semantic
+    if( !(s & BUSY) ) // no readers, no writers; mask is 1..1101
+        if( CAS(mutex->state, WRITER, s) ) {
+            ITT_NOTIFY(sync_acquired, mutex);
+            return true; // successfully stored writer flag
+        }
+    return false;
+}
+
+bool spin_rw_mutex::internal_try_acquire_reader( spin_rw_mutex * mutex )
+{
+// for a reader: acquire if no active or waiting writers
+    state_t s = mutex->state;    // on Itanium, a load of volatile variable has acquire semantic
+    while( !(s & (WRITER|WRITER_PENDING)) ) // no writers
+        if( CAS(mutex->state, s+ONE_READER, s) ) {
+            ITT_NOTIFY(sync_acquired, mutex);
+            return true; // successfully stored increased number of readers
+        }
+    return false;
+}
+
+} // namespace tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/old/spin_rw_mutex_v2.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/old/spin_rw_mutex_v2.h
new file mode 100644 (file)
index 0000000..3285e8e
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_spin_rw_mutex_H
+#define __TBB_spin_rw_mutex_H
+
+#include "tbb/tbb_stddef.h"
+
+namespace tbb {
+
+//! Fast, unfair, spinning reader-writer lock with backoff and writer-preference
+/** @ingroup synchronization */
+class spin_rw_mutex {
+    //! @cond INTERNAL
+
+    //! Present so that 1.0 headers work with 1.1 dynamic library.
+    static void __TBB_EXPORTED_FUNC internal_itt_releasing(spin_rw_mutex *);
+
+    //! Internal acquire write lock.
+    static bool __TBB_EXPORTED_FUNC internal_acquire_writer(spin_rw_mutex *);
+
+    //! Out of line code for releasing a write lock.  
+    /** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
+    static void __TBB_EXPORTED_FUNC internal_release_writer(spin_rw_mutex *);
+
+    //! Internal acquire read lock.
+    static void __TBB_EXPORTED_FUNC internal_acquire_reader(spin_rw_mutex *);
+
+    //! Internal upgrade reader to become a writer.
+    static bool __TBB_EXPORTED_FUNC internal_upgrade(spin_rw_mutex *);
+
+    //! Out of line code for downgrading a writer to a reader.   
+    /** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
+    static void __TBB_EXPORTED_FUNC internal_downgrade(spin_rw_mutex *);
+
+    //! Internal release read lock.
+    static void __TBB_EXPORTED_FUNC internal_release_reader(spin_rw_mutex *);
+
+    //! Internal try_acquire write lock.
+    static bool __TBB_EXPORTED_FUNC internal_try_acquire_writer(spin_rw_mutex *);
+
+    //! Internal try_acquire read lock.
+    static bool __TBB_EXPORTED_FUNC internal_try_acquire_reader(spin_rw_mutex *);
+
+    //! @endcond
+public:
+    //! Construct unacquired mutex.
+    spin_rw_mutex() : state(0) {}
+
+#if TBB_DO_ASSERT
+    //! Destructor asserts if the mutex is acquired, i.e. state is zero.
+    ~spin_rw_mutex() {
+        __TBB_ASSERT( !state, "destruction of an acquired mutex");
+    };
+#endif /* TBB_DO_ASSERT */
+
+    //! The scoped locking pattern
+    /** It helps to avoid the common problem of forgetting to release lock.
+        It also nicely provides the "node" for queuing locks. */
+    class scoped_lock : private internal::no_copy {
+    public:
+        //! Construct lock that has not acquired a mutex.
+        /** Equivalent to zero-initialization of *this. */
+        scoped_lock() : mutex(NULL) {}
+
+        //! Acquire lock on given mutex.
+        /** Upon entry, *this should not be in the "have acquired a mutex" state. */
+        scoped_lock( spin_rw_mutex& m, bool write = true ) : mutex(NULL) {
+            acquire(m, write);
+        }
+
+        //! Release lock (if lock is held).
+        ~scoped_lock() {
+            if( mutex ) release();
+        }
+
+        //! Acquire lock on given mutex.
+        void acquire( spin_rw_mutex& m, bool write = true ) {
+            __TBB_ASSERT( !mutex, "holding mutex already" );
+            is_writer = write; 
+            mutex = &m;
+            if( write ) internal_acquire_writer(mutex);
+            else        internal_acquire_reader(mutex);
+        }
+
+        //! Upgrade reader to become a writer.
+        /** Returns true if the upgrade happened without re-acquiring the lock and false if opposite */
+        bool upgrade_to_writer() {
+            __TBB_ASSERT( mutex, "lock is not acquired" );
+            __TBB_ASSERT( !is_writer, "not a reader" );
+            is_writer = true; 
+            return internal_upgrade(mutex);
+        }
+
+        //! Release lock.
+        void release() {
+            __TBB_ASSERT( mutex, "lock is not acquired" );
+            spin_rw_mutex *m = mutex; 
+            mutex = NULL;
+            if( is_writer ) {
+#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+                internal_release_writer(m);
+#else
+                m->state = 0; 
+#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */
+            } else {
+                internal_release_reader(m);
+            }
+        };
+
+        //! Downgrade writer to become a reader.
+        bool downgrade_to_reader() {
+#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+            __TBB_ASSERT( mutex, "lock is not acquired" );
+            __TBB_ASSERT( is_writer, "not a writer" );
+            internal_downgrade(mutex);
+#else
+            mutex->state = 4; // Bit 2 - reader, 00..00100
+#endif
+            is_writer = false;
+
+            return true;
+        }
+
+        //! Try acquire lock on given mutex.
+        bool try_acquire( spin_rw_mutex& m, bool write = true ) {
+            __TBB_ASSERT( !mutex, "holding mutex already" );
+            bool result;
+            is_writer = write; 
+            result = write? internal_try_acquire_writer(&m)
+                          : internal_try_acquire_reader(&m);
+            if( result ) mutex = &m;
+            return result;
+        }
+
+    private:
+        //! The pointer to the current mutex that is held, or NULL if no mutex is held.
+        spin_rw_mutex* mutex;
+
+        //! True if holding a writer lock, false if holding a reader lock.
+        /** Not defined if not holding a lock. */
+        bool is_writer;
+    };
+
+private:
+    typedef internal::uintptr state_t;
+    static const state_t WRITER = 1;
+    static const state_t WRITER_PENDING = 2;
+    static const state_t READERS = ~(WRITER | WRITER_PENDING);
+    static const state_t ONE_READER = 4;
+    static const state_t BUSY = WRITER | READERS;
+    /** Bit 0 = writer is holding lock
+        Bit 1 = request by a writer to acquire lock (hint to readers to wait)
+        Bit 2..N = number of readers holding lock */
+    volatile state_t state;
+};
+
+} // namespace ThreadingBuildingBlocks
+
+#endif /* __TBB_spin_rw_mutex_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/old/test_concurrent_queue_v2.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/old/test_concurrent_queue_v2.cpp
new file mode 100644 (file)
index 0000000..4443b59
--- /dev/null
@@ -0,0 +1,361 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/concurrent_queue.h"
+#include "tbb/atomic.h"
+#include "tbb/tick_count.h"
+
+#include "../test/harness_assert.h"
+#include "../test/harness.h"
+
+static tbb::atomic<long> FooConstructed;
+static tbb::atomic<long> FooDestroyed;
+
+class Foo {
+    enum state_t{
+        LIVE=0x1234,
+        DEAD=0xDEAD
+    };
+    state_t state;
+public:
+    int thread_id;
+    int serial;
+    Foo() : state(LIVE) {
+        ++FooConstructed;
+    }
+    Foo( const Foo& item ) : state(LIVE) {
+        ASSERT( item.state==LIVE, NULL );
+        ++FooConstructed;
+        thread_id = item.thread_id;
+        serial = item.serial;
+    }
+    ~Foo() {
+        ASSERT( state==LIVE, NULL );
+        ++FooDestroyed;
+        state=DEAD;
+        thread_id=0xDEAD;
+        serial=0xDEAD;
+    }
+    void operator=( Foo& item ) {
+        ASSERT( item.state==LIVE, NULL );
+        ASSERT( state==LIVE, NULL );
+        thread_id = item.thread_id;
+        serial = item.serial;
+    }
+    bool is_const() {return false;}
+    bool is_const() const {return true;}
+};
+
+const size_t MAXTHREAD = 256;
+
+static int Sum[MAXTHREAD];
+
+//! Count of various pop operations
+/** [0] = pop_if_present that failed
+    [1] = pop_if_present that succeeded
+    [2] = pop */
+static tbb::atomic<long> PopKind[3];
+
+const int M = 10000;
+
+struct Body {
+    tbb::concurrent_queue<Foo>* queue;
+    const int nthread;
+    Body( int nthread_ ) : nthread(nthread_) {}
+    void operator()( long thread_id ) const {
+        long pop_kind[3] = {0,0,0};
+        int serial[MAXTHREAD+1];
+        memset( serial, 0, nthread*sizeof(unsigned) );
+        ASSERT( thread_id<nthread, NULL );
+
+        long sum = 0;
+        for( long j=0; j<M; ++j ) {
+            Foo f;
+            f.thread_id = 0xDEAD;
+            f.serial = 0xDEAD;
+            bool prepopped = false;
+            if( j&1 ) {
+                prepopped = queue->pop_if_present(f);
+                ++pop_kind[prepopped];
+            }
+            Foo g;
+            g.thread_id = thread_id;
+            g.serial = j+1;
+            queue->push( g );
+            if( !prepopped ) {
+                queue->pop(f);
+                ++pop_kind[2];
+            }
+            ASSERT( f.thread_id<=nthread, NULL );
+            ASSERT( f.thread_id==nthread || serial[f.thread_id]<f.serial, "partial order violation" );
+            serial[f.thread_id] = f.serial;
+            sum += f.serial-1;
+        }
+        Sum[thread_id] = sum;
+        for( int k=0; k<3; ++k )
+            PopKind[k] += pop_kind[k];
+    }
+};
+
+void TestPushPop( int prefill, ptrdiff_t capacity, int nthread ) {
+    ASSERT( nthread>0, "nthread must be positive" );
+    if( prefill+1>=capacity )
+        return;
+    bool success = false;
+    for( int k=0; k<3; ++k )
+        PopKind[k] = 0;
+    for( int trial=0; !success; ++trial ) {
+        FooConstructed = 0;
+        FooDestroyed = 0;
+        Body body(nthread);
+        tbb::concurrent_queue<Foo> queue;
+        queue.set_capacity( capacity );
+        body.queue = &queue;
+        for( int i=0; i<prefill; ++i ) {
+            Foo f;
+            f.thread_id = nthread;
+            f.serial = 1+i;
+            queue.push(f);
+            ASSERT( queue.size()==i+1, NULL );
+            ASSERT( !queue.empty(), NULL );
+        }
+        tbb::tick_count t0 = tbb::tick_count::now();
+        NativeParallelFor( nthread, body );
+        tbb::tick_count t1 = tbb::tick_count::now();
+        double timing = (t1-t0).seconds();
+        if( Verbose )
+            printf("prefill=%d capacity=%d time = %g = %g nsec/operation\n", prefill, int(capacity), timing, timing/(2*M*nthread)*1.E9);
+        int sum = 0;
+        for( int k=0; k<nthread; ++k )
+            sum += Sum[k];
+        int expected = nthread*((M-1)*M/2) + ((prefill-1)*prefill)/2;
+        for( int i=prefill; --i>=0; ) {
+            ASSERT( !queue.empty(), NULL );
+            Foo f;
+            queue.pop(f);
+            ASSERT( queue.size()==i, NULL );
+            sum += f.serial-1;
+        }
+        ASSERT( queue.empty(), NULL );
+        ASSERT( queue.size()==0, NULL );
+        if( sum!=expected )
+            printf("sum=%d expected=%d\n",sum,expected);
+        ASSERT( FooConstructed==FooDestroyed, NULL );
+
+        success = true;
+        if( nthread>1 && prefill==0 ) {
+            // Check that pop_if_present got sufficient exercise
+            for( int k=0; k<2; ++k ) {
+#if (_WIN32||_WIN64)
+                // The TBB library on Windows seems to have a tough time generating
+                // the desired interleavings for pop_if_present, so the code tries longer, and settles
+                // for fewer desired interleavings.
+                const int max_trial = 100;
+                const int min_requirement = 20;
+#else
+                const int min_requirement = 100;
+                const int max_trial = 20;
+#endif /* _WIN32||_WIN64 */
+                if( PopKind[k]<min_requirement ) {
+                    if( trial>=max_trial ) {
+                        if( Verbose )
+                            printf("Warning: %d threads had only %ld pop_if_present operations %s after %d trials (expected at least %d). "
+                                    "This problem may merely be unlucky scheduling. "
+                                    "Investigate only if it happens repeatedly.\n",
+                                    nthread, long(PopKind[k]), k==0?"failed":"succeeded", max_trial, min_requirement);
+                        else
+                            printf("Warning: the number of %s pop_if_present operations is less than expected for %d threads. Investigate if it happens repeatedly.\n",
+                                   k==0?"failed":"succeeded", nthread );
+                    } else {
+                        success = false;
+                    }
+               }
+            }
+        }
+    }
+}
+
+template<typename Iterator1, typename Iterator2>
+void TestIteratorAux( Iterator1 i, Iterator2 j, int size ) {
+    // Now test iteration
+    Iterator1 old_i;
+    for( int k=0; k<size; ++k ) {
+        ASSERT( i!=j, NULL );
+        ASSERT( !(i==j), NULL );
+        Foo f;
+        if( k&1 ) {
+            // Test pre-increment
+            f = *old_i++;
+            // Test assignment
+            i = old_i;
+        } else {
+            // Test post-increment
+            f=*i++;
+            if( k<size-1 ) {
+                // Test "->"
+                ASSERT( k+2==i->serial, NULL );
+            }
+            // Test assignment
+            old_i = i;
+        }
+        ASSERT( k+1==f.serial, NULL );
+    }
+    ASSERT( !(i!=j), NULL );
+    ASSERT( i==j, NULL );
+}
+
+template<typename Iterator1, typename Iterator2>
+void TestIteratorAssignment( Iterator2 j ) {
+    Iterator1 i(j);
+    ASSERT( i==j, NULL );
+    ASSERT( !(i!=j), NULL );
+    Iterator1 k;
+    k = j;
+    ASSERT( k==j, NULL );
+    ASSERT( !(k!=j), NULL );
+}
+
+//! Test the iterators for concurrent_queue
+void TestIterator() {
+    tbb::concurrent_queue<Foo> queue;
+    tbb::concurrent_queue<Foo>& const_queue = queue;
+    for( int j=0; j<500; ++j ) {
+        TestIteratorAux( queue.begin(), queue.end(), j );
+        TestIteratorAux( const_queue.begin(), const_queue.end(), j );
+        TestIteratorAux( const_queue.begin(), queue.end(), j );
+        TestIteratorAux( queue.begin(), const_queue.end(), j );
+        Foo f;
+        f.serial = j+1;
+        queue.push(f);
+    }
+    TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>( const_queue.begin() );
+    TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>( queue.begin() );
+    TestIteratorAssignment<tbb::concurrent_queue<Foo>::iterator>( queue.begin() );
+}
+
+void TestConcurrenetQueueType() {
+    AssertSameType( tbb::concurrent_queue<Foo>::value_type(), Foo() );
+    Foo f;
+    const Foo g;
+    tbb::concurrent_queue<Foo>::reference r = f;
+    ASSERT( &r==&f, NULL );
+    ASSERT( !r.is_const(), NULL );
+    tbb::concurrent_queue<Foo>::const_reference cr = g;
+    ASSERT( &cr==&g, NULL );
+    ASSERT( cr.is_const(), NULL );
+}
+
+template<typename T>
+void TestEmptyQueue() {
+    const tbb::concurrent_queue<T> queue;
+    ASSERT( queue.size()==0, NULL );
+    ASSERT( queue.capacity()>0, NULL );
+    ASSERT( size_t(queue.capacity())>=size_t(-1)/(sizeof(void*)+sizeof(T)), NULL );
+}
+
+void TestFullQueue() {
+    for( int n=0; n<10; ++n ) {
+        FooConstructed = 0;
+        FooDestroyed = 0;
+        tbb::concurrent_queue<Foo> queue;
+        queue.set_capacity(n);
+        for( int i=0; i<=n; ++i ) {
+            Foo f;
+            f.serial = i;
+            bool result = queue.push_if_not_full( f );
+            ASSERT( result==(i<n), NULL );
+        }
+        for( int i=0; i<=n; ++i ) {
+            Foo f;
+            bool result = queue.pop_if_present( f );
+            ASSERT( result==(i<n), NULL );
+            ASSERT( !result || f.serial==i, NULL );
+        }
+        ASSERT( FooConstructed==FooDestroyed, NULL );
+    }
+}
+
+template<typename T>
+struct TestNegativeQueueBody {
+    tbb::concurrent_queue<T>& queue;
+    const int nthread;
+    TestNegativeQueueBody( tbb::concurrent_queue<T>& q, int n ) : queue(q), nthread(n) {}
+    void operator()( int k ) const {
+        if( k==0 ) {
+            int number_of_pops = nthread-1;
+            // Wait for all pops to pend.
+            while( queue.size()>-number_of_pops ) {
+                __TBB_Yield();
+            }
+            for( int i=0; ; ++i ) {
+                ASSERT( queue.size()==i-number_of_pops, NULL );
+                ASSERT( queue.empty()==(queue.size()<=0), NULL );
+                if( i==number_of_pops ) break;
+                // Satisfy another pop
+                queue.push( T() );
+            }
+        } else {
+            // Pop item from queue
+            T item;
+            queue.pop(item);
+        }
+    }
+};
+
+//! Test a queue with a negative size.
+template<typename T>
+void TestNegativeQueue( int nthread ) {
+    tbb::concurrent_queue<T> queue;
+    NativeParallelFor( nthread, TestNegativeQueueBody<T>(queue,nthread) );
+}
+
+int main( int argc, char* argv[] ) {
+    // Set default for minimum number of threads.
+    MinThread = 1;
+    ParseCommandLine(argc,argv);
+
+    TestEmptyQueue<char>();
+    TestEmptyQueue<Foo>();
+    TestFullQueue();
+    TestConcurrenetQueueType();
+    TestIterator();
+
+    // Test concurrent operations
+    for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
+        TestNegativeQueue<Foo>(nthread);
+        for( int prefill=0; prefill<64; prefill+=(1+prefill/3) ) {
+            TestPushPop(prefill,ptrdiff_t(-1),nthread);
+            TestPushPop(prefill,ptrdiff_t(1),nthread);
+            TestPushPop(prefill,ptrdiff_t(2),nthread);
+            TestPushPop(prefill,ptrdiff_t(10),nthread);
+            TestPushPop(prefill,ptrdiff_t(100),nthread);
+        }
+    }
+    printf("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/old/test_concurrent_vector_v2.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/old/test_concurrent_vector_v2.cpp
new file mode 100644 (file)
index 0000000..68a7311
--- /dev/null
@@ -0,0 +1,570 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "concurrent_vector_v2.h"
+#include <cstdio>
+#include <cstdlib>
+#include "../test/harness_assert.h"
+
+tbb::atomic<long> FooCount;
+
+//! Problem size
+const size_t N = 500000;
+
+struct Foo {
+    int my_bar;
+public:
+    enum State {
+        DefaultInitialized=0x1234,
+        CopyInitialized=0x89ab,
+        Destroyed=0x5678
+    } state;
+    int& bar() {
+        ASSERT( state==DefaultInitialized||state==CopyInitialized, NULL );
+        return my_bar;
+    }
+    int bar() const {
+        ASSERT( state==DefaultInitialized||state==CopyInitialized, NULL );
+        return my_bar;
+    }
+    static const int initial_value_of_bar = 42;
+    Foo() {
+        state = DefaultInitialized;
+        ++FooCount;
+        my_bar = initial_value_of_bar;
+    }
+    Foo( const Foo& foo ) {
+        state = CopyInitialized;
+        ++FooCount;
+        my_bar = foo.my_bar;
+    }
+    ~Foo() {
+        ASSERT( state==DefaultInitialized||state==CopyInitialized, NULL );
+        state = Destroyed;
+        my_bar = ~initial_value_of_bar;
+        --FooCount;
+    }
+    bool is_const() const {return true;}
+    bool is_const() {return false;}
+};
+
+class FooWithAssign: public Foo {
+public:
+    void operator=( const FooWithAssign& x ) {
+        ASSERT( x.state==DefaultInitialized||x.state==CopyInitialized, NULL );
+        ASSERT( state==DefaultInitialized||state==CopyInitialized, NULL );
+        my_bar = x.my_bar;
+    } 
+};
+
+inline void NextSize( int& s ) {
+    if( s<=32 ) ++s;
+    else s += s/10;     
+}
+
+static void CheckVector( const tbb::concurrent_vector<Foo>& cv, size_t expected_size, size_t old_size ) {
+    ASSERT( cv.size()==expected_size, NULL );
+    ASSERT( cv.empty()==(expected_size==0), NULL );
+    for( int j=0; j<int(expected_size); ++j ) {
+        if( cv[j].bar()!=~j )
+            std::printf("ERROR on line %d for old_size=%ld expected_size=%ld j=%d\n",__LINE__,long(old_size),long(expected_size),j);
+    }
+}
+
+void TestResizeAndCopy() {
+    typedef tbb::concurrent_vector<Foo> vector_t;
+    for( int old_size=0; old_size<=128; NextSize( old_size ) ) {
+        for( int new_size=old_size; new_size<=128; NextSize( new_size ) ) {
+            long count = FooCount;
+            vector_t v;
+            ASSERT( count==FooCount, NULL );
+            v.grow_by(old_size);
+            ASSERT( count+old_size==FooCount, NULL );
+            for( int j=0; j<old_size; ++j )
+                v[j].bar() = j*j;
+            v.grow_to_at_least(new_size);
+            ASSERT( count+new_size==FooCount, NULL );
+            for( int j=0; j<new_size; ++j ) {
+                int expected = j<old_size ? j*j : Foo::initial_value_of_bar;
+                if( v[j].bar()!=expected ) 
+                    std::printf("ERROR on line %d for old_size=%ld new_size=%ld v[%ld].bar()=%d != %d\n",__LINE__,long(old_size),long(new_size),long(j),v[j].bar(), expected);
+            }
+            ASSERT( v.size()==size_t(new_size), NULL );
+            for( int j=0; j<new_size; ++j ) {
+                v[j].bar() = ~j;
+            }
+            const vector_t& cv = v;
+            // Try copy constructor
+            vector_t copy_of_v(cv);
+            CheckVector(cv,new_size,old_size);
+            v.clear();
+            ASSERT( v.empty(), NULL );
+            CheckVector(copy_of_v,new_size,old_size);
+        }
+    }
+}
+
+void TestCapacity() {
+    for( size_t old_size=0; old_size<=10000; old_size=(old_size<5 ? old_size+1 : 3*old_size) ) {
+        for( size_t new_size=0; new_size<=10000; new_size=(new_size<5 ? new_size+1 : 3*new_size) ) {
+            long count = FooCount; 
+            {
+                typedef tbb::concurrent_vector<Foo> vector_t;
+                vector_t v;
+                v.reserve( old_size );
+                ASSERT( v.capacity()>=old_size, NULL );
+                v.reserve( new_size );
+                ASSERT( v.capacity()>=old_size, NULL );
+                ASSERT( v.capacity()>=new_size, NULL );
+                for( size_t i=0; i<2*new_size; ++i ) {
+                    ASSERT( size_t(FooCount)==count+i, NULL );
+                    size_t j = v.grow_by(1);
+                    ASSERT( j==i, NULL );
+                }
+            }
+            ASSERT( FooCount==count, NULL );
+        }
+    } 
+}
+
+struct AssignElement {
+    typedef tbb::concurrent_vector<int>::range_type::iterator iterator;
+    iterator base;
+    void operator()( const tbb::concurrent_vector<int>::range_type& range ) const {
+        for( iterator i=range.begin(); i!=range.end(); ++i ) {
+            if( *i!=0 )
+                std::printf("ERROR for v[%ld]\n", long(i-base));
+            *i = int(i-base);
+        }
+    }
+    AssignElement( iterator base_ ) : base(base_) {}
+};
+
+struct CheckElement {
+    typedef tbb::concurrent_vector<int>::const_range_type::iterator iterator;
+    iterator base;
+    void operator()( const tbb::concurrent_vector<int>::const_range_type& range ) const {
+        for( iterator i=range.begin(); i!=range.end(); ++i )
+            if( *i != int(i-base) )
+                std::printf("ERROR for v[%ld]\n", long(i-base));
+    }
+    CheckElement( iterator base_ ) : base(base_) {}
+};
+
+#include "tbb/tick_count.h"
+#include "tbb/parallel_for.h"
+#include "../test/harness.h"
+
+void TestParallelFor( int nthread ) {
+    typedef tbb::concurrent_vector<int> vector_t;
+    vector_t v;
+    v.grow_to_at_least(N);  
+    tbb::tick_count t0 = tbb::tick_count::now();
+    if( Verbose )
+        std::printf("Calling parallel_for.h with %ld threads\n",long(nthread));
+    tbb::parallel_for( v.range(10000), AssignElement(v.begin()) );
+    tbb::tick_count t1 = tbb::tick_count::now();
+    const vector_t& u = v;      
+    tbb::parallel_for( u.range(10000), CheckElement(u.begin()) );
+    tbb::tick_count t2 = tbb::tick_count::now();
+    if( Verbose )
+        std::printf("Time for parallel_for.h: assign time = %8.5f, check time = %8.5f\n",
+               (t1-t0).seconds(),(t2-t1).seconds());
+    for( long i=0; size_t(i)<v.size(); ++i )
+        if( v[i]!=i )
+            std::printf("ERROR for v[%ld]\n", i);
+}
+
+template<typename Iterator1, typename Iterator2>
+void TestIteratorAssignment( Iterator2 j ) {
+    Iterator1 i(j);
+    ASSERT( i==j, NULL );
+    ASSERT( !(i!=j), NULL );
+    Iterator1 k;
+    k = j;
+    ASSERT( k==j, NULL );
+    ASSERT( !(k!=j), NULL );
+}
+
+template<typename Iterator, typename T>
+void TestIteratorTraits() {
+    AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) ); 
+    AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) ); 
+    AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) ); 
+    AssertSameType( static_cast<typename Iterator::iterator_category*>(0), static_cast<std::random_access_iterator_tag*>(0) );
+    T x;
+    typename Iterator::reference xr = x;
+    typename Iterator::pointer xp = &x;
+    ASSERT( &xr==xp, NULL );
+}
+
+template<typename Vector, typename Iterator>
+void CheckConstIterator( const Vector& u, int i, const Iterator& cp ) {
+    typename Vector::const_reference pref = *cp;
+    if( pref.bar()!=i )
+        std::printf("ERROR for u[%ld] using const_iterator\n", long(i));
+    typename Vector::difference_type delta = cp-u.begin();
+    ASSERT( delta==i, NULL );
+    if( u[i].bar()!=i )
+        std::printf("ERROR for u[%ld] using subscripting\n", long(i));
+    ASSERT( u.begin()[i].bar()==i, NULL );
+}
+
+template<typename Iterator1, typename Iterator2, typename V> 
+void CheckIteratorComparison( V& u ) {
+    Iterator1 i = u.begin();
+    for( int i_count=0; i_count<100; ++i_count ) {
+        Iterator2 j = u.begin();
+        for( int j_count=0; j_count<100; ++j_count ) {
+            ASSERT( (i==j)==(i_count==j_count), NULL );
+            ASSERT( (i!=j)==(i_count!=j_count), NULL );
+            ASSERT( (i-j)==(i_count-j_count), NULL );
+            ASSERT( (i<j)==(i_count<j_count), NULL );
+            ASSERT( (i>j)==(i_count>j_count), NULL );
+            ASSERT( (i<=j)==(i_count<=j_count), NULL );
+            ASSERT( (i>=j)==(i_count>=j_count), NULL );
+            ++j;
+        }
+        ++i;
+    }
+}
+
+//! Test sequential iterators for vector type V.
+/** Also does timing. */
+template<typename V>
+void TestSequentialFor() {
+    V v;
+    v.grow_by(N);
+
+    // Check iterator 
+    tbb::tick_count t0 = tbb::tick_count::now();
+    typename V::iterator p = v.begin();
+    ASSERT( !(*p).is_const(), NULL );
+    ASSERT( !p->is_const(), NULL );
+    for( int i=0; size_t(i)<v.size(); ++i, ++p ) {
+        if( (*p).state!=Foo::DefaultInitialized )
+            std::printf("ERROR for v[%ld]\n", long(i));
+        typename V::reference pref = *p;
+        pref.bar() = i;
+        typename V::difference_type delta = p-v.begin();
+        ASSERT( delta==i, NULL );
+        ASSERT( -delta<=0, "difference type not signed?" );
+    }
+    tbb::tick_count t1 = tbb::tick_count::now();
+    
+    // Check const_iterator going forwards
+    const V& u = v;     
+    typename V::const_iterator cp = u.begin();
+    ASSERT( (*cp).is_const(), NULL );
+    ASSERT( cp->is_const(), NULL );
+    for( int i=0; size_t(i)<u.size(); ++i, ++cp ) {
+        CheckConstIterator(u,i,cp);
+    }
+    tbb::tick_count t2 = tbb::tick_count::now();
+    if( Verbose )
+        std::printf("Time for serial for:  assign time = %8.5f, check time = %8.5f\n",
+               (t1-t0).seconds(),(t2-t1).seconds());
+
+    // Now go backwards
+    cp = u.end();
+    for( int i=int(u.size()); i>0; ) {
+        --i;
+        --cp;
+        if( i>0 ) {
+            typename V::const_iterator cp_old = cp--;
+            int here = (*cp_old).bar();
+            ASSERT( here==u[i].bar(), NULL );
+            typename V::const_iterator cp_new = cp++;
+            int prev = (*cp_new).bar();
+            ASSERT( prev==u[i-1].bar(), NULL );
+        }
+        CheckConstIterator(u,i,cp);
+    }
+
+    // Now go forwards and backwards
+    cp = u.begin();
+    ptrdiff_t j = 0;
+    for( size_t i=0; i<u.size(); ++i ) {
+        CheckConstIterator(u,int(j),cp);
+        typename V::difference_type delta = i*3 % u.size();
+        if( 0<=j+delta && size_t(j+delta)<u.size() ) {
+            cp += delta;
+            j += delta; 
+        } 
+        delta = i*7 % u.size();
+        if( 0<=j-delta && size_t(j-delta)<u.size() ) {
+            if( i&1 ) 
+                cp -= delta;            // Test operator-=
+            else
+                cp = cp - delta;        // Test operator-
+            j -= delta; 
+        } 
+    }
+    
+    for( int i=0; size_t(i)<u.size(); i=(i<50?i+1:i*3) )
+        for( int j=-i; size_t(i+j)<u.size(); j=(j<50?j+1:j*5) ) {
+            ASSERT( (u.begin()+i)[j].bar()==i+j, NULL );
+            ASSERT( (v.begin()+i)[j].bar()==i+j, NULL );
+            ASSERT( (i+u.begin())[j].bar()==i+j, NULL );
+            ASSERT( (i+v.begin())[j].bar()==i+j, NULL );
+        }
+
+    CheckIteratorComparison<typename V::iterator, typename V::iterator>(v);
+    CheckIteratorComparison<typename V::iterator, typename V::const_iterator>(v);
+    CheckIteratorComparison<typename V::const_iterator, typename V::iterator>(v);
+    CheckIteratorComparison<typename V::const_iterator, typename V::const_iterator>(v);
+
+    TestIteratorAssignment<typename V::const_iterator>( u.begin() );
+    TestIteratorAssignment<typename V::const_iterator>( v.begin() );
+    TestIteratorAssignment<typename V::iterator>( v.begin() );
+
+    // Check reverse_iterator 
+    typename V::reverse_iterator rp = v.rbegin();
+    for( size_t i=v.size(); i>0; --i, ++rp ) {
+        typename V::reference pref = *rp;
+        ASSERT( size_t(pref.bar())==i-1, NULL );
+        ASSERT( rp!=v.rend(), NULL );
+    }
+    ASSERT( rp==v.rend(), NULL );
+    
+    // Check const_reverse_iterator 
+    typename V::const_reverse_iterator crp = u.rbegin();
+    for( size_t i=v.size(); i>0; --i, ++crp ) {
+        typename V::const_reference cpref = *crp;
+        ASSERT( size_t(cpref.bar())==i-1, NULL );
+        ASSERT( crp!=u.rend(), NULL );
+    }
+    ASSERT( crp==u.rend(), NULL );
+
+    TestIteratorAssignment<typename V::const_reverse_iterator>( u.rbegin() );
+    TestIteratorAssignment<typename V::reverse_iterator>( v.rbegin() );
+}
+
+static const size_t Modulus = 7;
+
+typedef tbb::concurrent_vector<Foo> MyVector;
+
+class GrowToAtLeast {
+    MyVector& my_vector;
+public:
+    void operator()( const tbb::blocked_range<size_t>& range ) const {
+        for( size_t i=range.begin(); i!=range.end(); ++i ) {
+            size_t n = my_vector.size();
+            size_t k = n==0 ? 0 : i % (2*n+1);
+            my_vector.grow_to_at_least(k+1);
+            ASSERT( my_vector.size()>=k+1, NULL );
+        }
+    }
+    GrowToAtLeast( MyVector& vector ) : my_vector(vector) {}
+};
+
+void TestConcurrentGrowToAtLeast() {
+    MyVector v;
+    for( size_t s=1; s<1000; s*=10 ) {
+        tbb::parallel_for( tbb::blocked_range<size_t>(0,1000000,100), GrowToAtLeast(v) );
+    }
+}
+
+//! Test concurrent invocations of method concurrent_vector::grow_by
+class GrowBy {
+    MyVector& my_vector;
+public:
+    void operator()( const tbb::blocked_range<int>& range ) const {
+        for( int i=range.begin(); i!=range.end(); ++i ) {
+            if( i%3 ) {
+                Foo& element = my_vector[my_vector.grow_by(1)]; 
+                element.bar() = i;
+            } else {
+                Foo f;
+                f.bar() = i;
+                size_t k = my_vector.push_back( f );
+                ASSERT( my_vector[k].bar()==i, NULL );
+            }
+        }
+    }
+    GrowBy( MyVector& vector ) : my_vector(vector) {}
+};
+
+//! Test concurrent invocations of method concurrent_vector::grow_by
+void TestConcurrentGrowBy( int nthread ) {
+    int m = 100000;
+    MyVector v;
+    tbb::parallel_for( tbb::blocked_range<int>(0,m,1000), GrowBy(v) );
+    ASSERT( v.size()==size_t(m), NULL );
+
+    // Verify that v is a permutation of 0..m
+    int inversions = 0;
+    bool* found = new bool[m];
+    memset( found, 0, m );
+    for( int i=0; i<m; ++i ) {
+        int index = v[i].bar();
+        ASSERT( !found[index], NULL );
+        found[index] = true;
+        if( i>0 )
+            inversions += v[i].bar()<v[i-1].bar();
+    }
+    for( int i=0; i<m; ++i ) {
+        ASSERT( found[i], NULL );
+        ASSERT( nthread>1 || v[i].bar()==i, "sequential execution is wrong" );
+    }
+    delete[] found;
+    if( nthread>1 && inversions<m/10 )
+        std::printf("Warning: not much concurrency in TestConcurrentGrowBy\n");
+}
+
+//! Test the assignment operator
+void TestAssign() {
+    typedef tbb::concurrent_vector<FooWithAssign> vector_t;
+    for( int dst_size=1; dst_size<=128; NextSize( dst_size ) ) {
+        for( int src_size=2; src_size<=128; NextSize( src_size ) ) {
+            vector_t u;
+            u.grow_to_at_least(src_size);
+            for( int i=0; i<src_size; ++i )
+                u[i].bar() = i*i;
+            vector_t v;
+            v.grow_to_at_least(dst_size);
+            for( int i=0; i<dst_size; ++i )
+                v[i].bar() = -i;
+            v = u;
+            u.clear();
+            ASSERT( u.size()==0, NULL );
+            ASSERT( v.size()==size_t(src_size), NULL );
+            for( int i=0; i<src_size; ++i )
+                ASSERT( v[i].bar()==(i*i), NULL );
+        }
+    }    
+}
+
+//------------------------------------------------------------------------
+// Regression test for problem where on oversubscription caused
+// concurrent_vector::grow_by to run very slowly (TR#196).
+//------------------------------------------------------------------------
+
+#include "tbb/task_scheduler_init.h"
+#include <math.h>
+
+typedef unsigned long Number;
+
+static tbb::concurrent_vector<Number> Primes;
+
+class FindPrimes {
+    bool is_prime( Number val ) const {
+        int limit, factor = 3;
+        if( val<5u ) 
+            return val==2;
+        else {
+            limit = long(sqrtf(float(val))+0.5f);
+            while( factor<=limit && val % factor )
+                ++factor;
+            return factor>limit;
+        }
+    }
+public:
+    void operator()( const tbb::blocked_range<Number>& r ) const {
+        for( Number i=r.begin(); i!=r.end(); ++i ) { 
+            if( i%2 && is_prime(i) ) {
+                Primes[Primes.grow_by(1)] = i;
+            }
+        }
+    }
+};
+
+static double TimeFindPrimes( int nthread ) {
+    Primes.clear();
+    tbb::task_scheduler_init init(nthread);
+    tbb::tick_count t0 = tbb::tick_count::now();
+    tbb::parallel_for( tbb::blocked_range<Number>(0,1000000,500), FindPrimes() );
+    tbb::tick_count t1 = tbb::tick_count::now();
+    return (t1-t0).seconds();
+}
+
+static void TestFindPrimes() {
+    // Time fully subscribed run.
+    double t2 = TimeFindPrimes( tbb::task_scheduler_init::automatic );
+
+    // Time parallel run that is very likely oversubscribed.  
+    double t128 = TimeFindPrimes(128);
+
+    if( Verbose ) 
+        std::printf("TestFindPrimes: t2==%g t128=%g\n", t2, t128 );
+
+    // We allow the 128-thread run a little extra time to allow for thread overhead.
+    // Theoretically, following test will fail on machine with >128 processors.
+    // But that situation is not going to come up in the near future,
+    // and the generalization to fix the issue is not worth the trouble.
+    if( t128>1.10*t2 ) {
+        std::printf("Warning: grow_by is pathetically slow: t2==%g t128=%g\n", t2, t128);
+    } 
+}
+
+//------------------------------------------------------------------------
+// Test compatibility with STL sort.
+//------------------------------------------------------------------------
+
+#include <algorithm>
+
+void TestSort() {
+    for( int n=1; n<100; n*=3 ) {
+        tbb::concurrent_vector<int> array;
+        array.grow_by( n );
+        for( int i=0; i<n; ++i )
+            array[i] = (i*7)%n;
+        std::sort( array.begin(), array.end() );
+        for( int i=0; i<n; ++i )
+            ASSERT( array[i]==i, NULL );
+    }
+}
+
+//------------------------------------------------------------------------
+
+//! Test driver
+int main( int argc, char* argv[] ) {
+    // Test requires at least one thread.
+    MinThread = 1;
+    ParseCommandLine( argc, argv );
+    if( MinThread<1 ) {
+        std::printf("ERROR: MinThread=%d, but must be at least 1\n",MinThread);
+    }
+
+    TestIteratorTraits<tbb::concurrent_vector<Foo>::iterator,Foo>();
+    TestIteratorTraits<tbb::concurrent_vector<Foo>::const_iterator,const Foo>();
+    TestSequentialFor<tbb::concurrent_vector<Foo> > ();
+    TestResizeAndCopy();
+    TestAssign();
+    TestCapacity();
+    for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
+        tbb::task_scheduler_init init( nthread );
+        TestParallelFor( nthread );
+        TestConcurrentGrowToAtLeast();
+        TestConcurrentGrowBy( nthread );
+    }
+    TestFindPrimes();
+    TestSort();
+    std::printf("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/old/test_mutex_v2.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/old/test_mutex_v2.cpp
new file mode 100644 (file)
index 0000000..4e2a1ef
--- /dev/null
@@ -0,0 +1,270 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+//------------------------------------------------------------------------
+// Test TBB mutexes when used with parallel_for.h
+//
+// Usage: test_Mutex.exe [-v] nthread
+//
+// The -v option causes timing information to be printed.
+//
+// Compile with _OPENMP and -openmp
+//------------------------------------------------------------------------
+#include "tbb/atomic.h"
+#include "tbb/blocked_range.h"
+#include "tbb/parallel_for.h"
+#include "tbb/tick_count.h"
+#include "../test/harness.h"
+#include "spin_rw_mutex_v2.h"
+#include <cstdlib>
+#include <cstdio>
+
+#if __linux__
+#define STD std
+#else
+#define STD   /* Cater to broken Windows compilers that are missing "std". */
+#endif /* __linux__ */
+
+// This test deliberately avoids a "using tbb" statement,
+// so that the error of putting types in the wrong namespace will be caught.
+
+template<typename M>
+struct Counter {
+    typedef M mutex_type;
+    M mutex;
+    volatile long value;
+};
+
+//! Function object for use with parallel_for.h.
+template<typename C>
+struct AddOne {
+    C& counter;
+    /** Increments counter once for each iteration in the iteration space. */
+    void operator()( tbb::blocked_range<size_t>& range ) const {
+        for( size_t i=range.begin(); i!=range.end(); ++i ) {
+            if( i&1 ) {
+                // Try implicit acquire and explicit release
+                typename C::mutex_type::scoped_lock lock(counter.mutex);
+                counter.value = counter.value+1;
+                lock.release();
+            } else {
+                // Try explicit acquire and implicit release
+                typename C::mutex_type::scoped_lock lock;
+                lock.acquire(counter.mutex);
+                counter.value = counter.value+1;
+            }
+        }
+    }
+    AddOne( C& counter_ ) : counter(counter_) {}
+};
+
+//! Generic test of a TBB mutex type M.
+/** Does not test features specific to reader-writer locks. */
+template<typename M>
+void Test( const char * name ) {
+    if( Verbose ) {
+        printf("%s time = ",name);
+        fflush(stdout);
+    }
+    Counter<M> counter;
+    counter.value = 0;
+    const int n = 100000;
+    tbb::tick_count t0 = tbb::tick_count::now();
+    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10000),AddOne<Counter<M> >(counter));
+    tbb::tick_count t1 = tbb::tick_count::now();
+    if( Verbose )
+        printf("%g usec\n",(t1-t0).seconds());
+    if( counter.value!=n )
+        STD::printf("ERROR for %s: counter.value=%ld\n",name,counter.value);
+}
+
+template<typename M, size_t N>
+struct Invariant {
+    typedef M mutex_type;
+    M mutex;
+    const char* mutex_name;
+    volatile long value[N];
+    volatile long single_value;
+    Invariant( const char* mutex_name_ ) :
+        mutex_name(mutex_name_)
+    {
+    single_value = 0;
+        for( size_t k=0; k<N; ++k )
+            value[k] = 0;
+    }
+    void update() {
+        for( size_t k=0; k<N; ++k )
+            ++value[k];
+    }
+    bool value_is( long expected_value ) const {
+        long tmp;
+        for( size_t k=0; k<N; ++k )
+//            if( value[k]!=expected_value )
+//                return false;
+            if( (tmp=value[k])!=expected_value ) {
+                printf("ATTN! %ld!=%ld\n", tmp, expected_value);
+                return false;
+            }
+        return true;
+    }
+    bool is_okay() {
+        return value_is( value[0] );
+    }
+};
+
+//! Function object for use with parallel_for.h.
+template<typename I>
+struct TwiddleInvariant {
+    I& invariant;
+    /** Increments counter once for each iteration in the iteration space. */
+    void operator()( tbb::blocked_range<size_t>& range ) const {
+        for( size_t i=range.begin(); i!=range.end(); ++i ) {
+            //! Every 8th access is a write access
+            bool write = (i%8)==7;
+            bool okay = true;
+            bool lock_kept = true;
+            if( (i/8)&1 ) {
+                // Try implicit acquire and explicit release
+                typename I::mutex_type::scoped_lock lock(invariant.mutex,write);
+                if( write ) {
+                    long my_value = invariant.value[0];
+                    invariant.update();
+                    if( i%16==7 ) {
+                        lock_kept = lock.downgrade_to_reader();
+                        if( !lock_kept )
+                            my_value = invariant.value[0] - 1;
+                        okay = invariant.value_is(my_value+1);
+                    }
+                } else {
+                    okay = invariant.is_okay();
+                    if( i%8==3 ) {
+                        long my_value = invariant.value[0];
+                        lock_kept = lock.upgrade_to_writer();
+                        if( !lock_kept )
+                            my_value = invariant.value[0];
+                        invariant.update();
+                        okay = invariant.value_is(my_value+1);
+                    }
+                }
+                lock.release();
+            } else {
+                // Try explicit acquire and implicit release
+                typename I::mutex_type::scoped_lock lock;
+                lock.acquire(invariant.mutex,write);
+                if( write ) {
+                    long my_value = invariant.value[0];
+                    invariant.update();
+                    if( i%16==7 ) {
+                        lock_kept = lock.downgrade_to_reader();
+                        if( !lock_kept )
+                            my_value = invariant.value[0] - 1;
+                        okay = invariant.value_is(my_value+1);
+                    }
+                } else {
+                    okay = invariant.is_okay();
+                    if( i%8==3 ) {
+                        long my_value = invariant.value[0];
+                        lock_kept = lock.upgrade_to_writer();
+                        if( !lock_kept )
+                            my_value = invariant.value[0];
+                        invariant.update();
+                        okay = invariant.value_is(my_value+1);
+                    }
+                }
+            }
+            if( !okay ) {
+                STD::printf( "ERROR for %s at %ld: %s %s %s %s\n",invariant.mutex_name, long(i),
+                             write?"write,":"read,", write?(i%16==7?"downgrade,":""):(i%8==3?"upgrade,":""),
+                             lock_kept?"lock kept,":"lock not kept,", (i/8)&1?"imp/exp":"exp/imp" );
+            }
+        }
+    }
+    TwiddleInvariant( I& invariant_ ) : invariant(invariant_) {}
+};
+
+/** This test is generic so that we can test any other kinds of ReaderWriter locks we write later. */
+template<typename M>
+void TestReaderWriterLock( const char * mutex_name ) {
+    if( Verbose ) {
+        printf("%s readers & writers time = ",mutex_name);
+        fflush(stdout);
+    }
+    Invariant<M,8> invariant(mutex_name);
+    const size_t n = 500000;
+    tbb::tick_count t0 = tbb::tick_count::now();
+    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,5000),TwiddleInvariant<Invariant<M,8> >(invariant));
+    tbb::tick_count t1 = tbb::tick_count::now();
+    // There is either a writer or a reader upgraded to a writer for each 4th iteration
+    long expected_value = n/4;
+    if( !invariant.value_is(expected_value) )
+        STD::printf("ERROR for %s: final invariant value is wrong\n",mutex_name);
+    if( Verbose )
+        printf("%g usec\n",(t1-t0).seconds());
+}
+
+/** Test try_acquire functionality of a non-reenterable mutex */
+template<typename M>
+void TestTryAcquire_OneThread( const char * mutex_name ) {
+    M tested_mutex;
+    typename M::scoped_lock lock1;
+    if( lock1.try_acquire(tested_mutex) )
+        lock1.release();
+    else
+        STD::printf("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
+    {
+        typename M::scoped_lock lock2(tested_mutex);
+        if( lock1.try_acquire(tested_mutex) )
+            STD::printf("ERROR for %s: try_acquire succeeded though it should not\n", mutex_name);
+    }
+    if( lock1.try_acquire(tested_mutex) )
+        lock1.release();
+    else
+        STD::printf("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
+}
+
+#include "tbb/task_scheduler_init.h"
+
+int main( int argc, char * argv[] ) {
+    ParseCommandLine( argc, argv );
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        tbb::task_scheduler_init init( p );
+       if( Verbose )
+           printf( "testing with %d workers\n", static_cast<int>(p) );
+       // Run each test 3 times.
+       for( int i=0; i<3; ++i ) {
+           Test<tbb::spin_rw_mutex>( "Spin RW Mutex" );
+            
+            TestTryAcquire_OneThread<tbb::spin_rw_mutex>("Spin RW Mutex"); // only tests try_acquire for writers
+           TestReaderWriterLock<tbb::spin_rw_mutex>( "Spin RW Mutex" );
+       if( Verbose )
+           printf( "calling destructor for task_scheduler_init\n" );
+       }
+    }
+    STD::printf("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/fibonacci_cutoff.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/fibonacci_cutoff.cpp
new file mode 100644 (file)
index 0000000..2f2f710
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <cstdio>
+#include <cstdlib>
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/task.h"
+#include "tbb/tick_count.h"
+
+long CutOff = 1;
+
+long SerialFib( const long n );
+
+long ParallelFib( const long n ); 
+
+inline void dump_title() {
+    printf("Serial/Parallel, P, N, cutoff, repetitions, time, fib, speedup\n");
+}
+
+inline void output(int P, long n, long c, int T, double serial_elapsed, double elapsed, long result) {
+    printf("%s, %d, %ld, %ld, %d, %g, %ld, %g\n", ( (P == 0) ? "Serial" : "Parallel" ), P, n, c, T, elapsed, result, serial_elapsed / elapsed);
+}
+
+#define MOVE_BY_FOURTHS 1
+inline long calculate_new_cutoff(const long lo, const long hi) {
+#if MOVE_BY_FOURTHS    
+    return lo + (3 + hi - lo ) / 4;
+#else
+    return (hi + lo)/2;
+#endif
+}
+
+void find_cutoff(const int P, const long n, const int T, const double serial_elapsed) {
+    long lo = 1, hi = n;
+    double elapsed = 0, lo_elapsed = 0, hi_elapsed = 0;
+    long final_cutoff = -1;
+
+    tbb::task_scheduler_init init(P);
+
+    while(true) {
+       CutOff = calculate_new_cutoff(lo, hi);
+       long result = 0;
+       tbb::tick_count t0;
+       for (int t = -1; t < T; ++t) {
+           if (t == 0) t0 = tbb::tick_count::now();
+           result += ParallelFib(n);
+       }
+       elapsed = (tbb::tick_count::now() - t0).seconds();
+       output(P,n,CutOff,T,serial_elapsed,elapsed,result);
+
+       if (serial_elapsed / elapsed >= P/2.0) {
+           final_cutoff = CutOff;
+           if (hi == CutOff) {
+               if (hi == lo) {
+                  // we have had this value at both above and below 50%
+                  lo = 1; lo_elapsed = 0;
+               } else  {
+                  break;
+               }
+           }
+           hi = CutOff;
+           hi_elapsed = elapsed;
+       } else {
+           if (lo == CutOff) break;
+           lo = CutOff;
+           lo_elapsed = elapsed;
+       }
+    } 
+
+    double interpolated_cutoff = lo + ( P/2.0 - serial_elapsed/lo_elapsed ) * ( (hi - lo) / ( serial_elapsed/hi_elapsed - serial_elapsed/lo_elapsed ));
+
+    if (final_cutoff != -1) {
+        printf("50%% efficiency cutoff is %ld ( linearly interpolated cutoff is %g )\n", final_cutoff, interpolated_cutoff);
+    } else {
+        printf("Cannot achieve 50%% efficiency\n");
+    }
+
+    return;
+}
+
+int main(int argc, char *argv[]) {
+    if (argc < 4) {
+        printf("Usage: %s threads n repetitions\n",argv[0]); 
+        return 1;
+    }
+
+    dump_title();
+
+    int P = atoi(argv[1]);
+    long n = atol(argv[2]);
+    int T = atoi(argv[3]);
+
+    // collect serial time
+    long serial_result = 0;
+    tbb::tick_count t0; 
+    for (int t = -1; t < T; ++t) {
+        if (t == 0) t0 = tbb::tick_count::now();        
+        serial_result += SerialFib(n);
+    }
+    double serial_elapsed = (tbb::tick_count::now() - t0).seconds();
+    output(0,n,0,T,serial_elapsed,serial_elapsed,serial_result);
+
+    // perform search
+    find_cutoff(P,n,T,serial_elapsed);
+
+    return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/fibonacci_impl_tbb.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/fibonacci_impl_tbb.cpp
new file mode 100644 (file)
index 0000000..66c6f24
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <cstdio>
+#include <cstdlib>
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/task.h"
+#include "tbb/tick_count.h"
+
+extern long CutOff;
+
+long SerialFib( const long n ) {
+    if( n<2 )
+        return n;
+    else
+        return SerialFib(n-1)+SerialFib(n-2);
+}
+
+struct FibContinuation: public tbb::task {
+    long* const sum;
+    long x, y;
+    FibContinuation( long* sum_ ) : sum(sum_) {}
+    tbb::task* execute() {
+        *sum = x+y;
+        return NULL;
+    }
+};
+
+struct FibTask: public tbb::task {
+    long n;
+    long * sum;
+    FibTask( const long n_, long * const sum_ ) :
+        n(n_), sum(sum_)
+    {}
+    tbb::task* execute() {
+        if( n<CutOff ) {
+            *sum = SerialFib(n);
+            return NULL;
+        } else {
+            FibContinuation& c = 
+                *new( allocate_continuation() ) FibContinuation(sum);
+            FibTask& b = *new( c.allocate_child() ) FibTask(n-1,&c.y);
+            recycle_as_child_of(c);
+            n -= 2;
+            sum = &c.x;
+            // Set ref_count to "two children".
+            c.set_ref_count(2);
+            c.spawn( b );
+            return this;
+        }
+    }
+};
+
+long ParallelFib( const long n ) {
+    long sum;
+    FibTask& a = *new(tbb::task::allocate_root()) FibTask(n,&sum);
+    tbb::task::spawn_root_and_wait(a);
+    return sum;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/perf_util.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/perf_util.h
new file mode 100644 (file)
index 0000000..812f5d6
--- /dev/null
@@ -0,0 +1,292 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+#include <cmath>
+#include <cstdlib>
+#include <cerrno>
+#include <cfloat>
+#include <vector>
+#include <algorithm>
+
+#include "../src/test/harness.h"
+
+#if  __linux__ || __APPLE__ || __FreeBSD__
+    #include <sys/resource.h>
+#endif /* __APPLE__ */
+
+// The code, performance of which is to be measured, is surrounded by the StartSimpleTiming
+// and StopSimpleTiming macros. It is called "target code" or "code of interest" hereafter.
+//
+// The target code is executed inside the nested loop. Nesting is necessary to allow
+// measurements on arrays that fit cache of a particular level, while making the load
+// big enough to eliminate the influence of random deviations.
+//
+// Macro StartSimpleTiming defines reduction variable "util::anchor", which may be modified (usually 
+// by adding to) by the target code. This can be necessary to prevent optimizing compilers 
+// from throwing out the code of interest. Besides, if the target code is complex enough, 
+// make sure that all its branches contribute (directly or indirectly) to the value 
+// being added to the "util::anchor" variable.
+//
+// To factor out overhead introduced by the measurement infra code it is recommended to make 
+// a calibration run with target code replaced by a no-op (but still modifying "sum"), and
+// store the resulting time in the "util::base" variable.
+//
+// A generally good approach is to make the target code use elements of a preliminary 
+// initialized array. Then for calibration run you just need to add vector elements 
+// to the "sum" variable. To get rid of memory access delays make the array small 
+// enough to fit L2 or L1 cache (play with StartSimpleTiming arguments if necessary).
+//
+// Macro CalibrateSimpleTiming performs default calibration using "util::anchor += i;" operation.
+//
+// Macro ANCHOR_TYPE defines the type of the reduction variable. If it was not 
+// defined  before including this header, it is defined as size_t. Depending on 
+// the target code modern super scalar architectures may blend reduction operation
+// and instructions of interest differently for different target alternatives. So
+// you may play with the type to minimize out-of-order and parallel execution impact
+// on the calibration time veracity. You may even end up with different reduction 
+// variable types (and different calibration times) for different measurements.
+
+
+namespace util {
+
+typedef std::vector<double>    durations_t;
+
+    void trace_histogram ( const durations_t& t, char* histogramFileName )
+    {
+        FILE* f = histogramFileName ? fopen(histogramFileName, "wt") : stdout;
+        size_t  n = t.size();
+        const size_t num_buckets = 100;
+        double  min_val = *std::min_element(t.begin(), t.end()),
+                max_val = *std::max_element(t.begin(), t.end()),
+                bucket_size = (max_val - min_val) / num_buckets;
+        std::vector<size_t> hist(num_buckets + 1, 0);
+        for ( size_t i = 0; i < n; ++i )
+            ++hist[size_t((t[i]-min_val)/bucket_size)];
+        fprintf (f, "Histogram: nvals = %u, min = %g, max = %g, nbuckets = %u\n", (unsigned)n, min_val, max_val, (unsigned)num_buckets);
+        double bucket = min_val;
+        for ( size_t i = 0; i <= num_buckets; ++i, bucket+=bucket_size )
+            fprintf (f, "%12g\t%u\n", bucket, (unsigned)hist[i]);
+        fclose(f);
+    }
+
+    double average ( const durations_t& d, double& variation_percent, double& std_dev_percent )
+    {
+        durations_t t = d;
+        if ( t.size() > 5 ) {
+            t.erase(std::min_element(t.begin(), t.end()));
+            t.erase(std::max_element(t.begin(), t.end()));
+        }
+        size_t  n = t.size();
+        double  sum = 0,
+                min_val = *std::min_element(t.begin(), t.end()),
+                max_val = *std::max_element(t.begin(), t.end());
+        for ( size_t i = 0; i < n; ++i )
+            sum += t[i];
+        double  avg = sum / n,
+                std_dev = 0;
+        for ( size_t i = 0; i < n; ++i ) {
+            double    dev = fabs(t[i] - avg);
+            std_dev += dev * dev;
+        }
+        std_dev = sqrt(std_dev / n);
+        std_dev_percent = std_dev / avg * 100;
+        variation_percent = 100 * (max_val - min_val) / avg;
+        return avg;
+    }
+
+    static int num_threads;
+
+    static double   base = 0,
+                    base_dev = 0,
+                    base_dev_percent = 0;
+
+    static char *empty_fmt = "";
+    static int rate_field_len = 11;
+
+#if !defined(ANCHOR_TYPE)
+    #define ANCHOR_TYPE size_t
+#endif
+
+    static ANCHOR_TYPE anchor = 0;
+    
+    static double sequential_time = 0;
+
+
+#define StartSimpleTiming(nOuter, nInner) {             \
+    tbb::tick_count t1, t0 = tbb::tick_count::now();    \
+    for ( size_t j = 0; l < nOuter; ++l ) {             \
+        for ( size_t i = 0; i < nInner; ++i ) {
+
+#define StopSimpleTiming(res)                   \
+        }                                       \
+        util::anchor += (ANCHOR_TYPE)l;         \
+    }                                           \
+    t1 = tbb::tick_count::now();                \
+    printf (util::empty_fmt, util::anchor);     \
+    res = (t1-t0).seconds() - util::base;       \
+}
+
+#define CalibrateSimpleTiming(T, nOuter, nInner)    \
+    StartSimpleTiming(nOuter, nInner);              \
+        util::anchor += (ANCHOR_TYPE)i;             \
+    StopSimpleTiming(util::base);
+
+
+#define StartTimingImpl(nRuns, nOuter, nInner)      \
+    tbb::tick_count t1, t0;                         \
+    for ( size_t k = 0; k < nRuns; ++k )  {         \
+        t0 = tbb::tick_count::now();                \
+        for ( size_t l = 0; l < nOuter; ++l ) {     \
+            for ( size_t i = 0; i < nInner; ++i ) {
+
+#define StartTiming(nRuns, nOuter, nInner) {        \
+    util::durations_t  t_(nRuns);                   \
+    StartTimingImpl(nRuns, nOuter, nInner)
+
+#define StartTimingEx(vDurations, nRuns, nOuter, nInner) {  \
+    util::durations_t  &t_ = vDurations;                    \
+    vDurations.resize(nRuns);                               \
+    StartTimingImpl(nRuns, nOuter, nInner)
+
+#define StopTiming(Avg, StdDev, StdDevPercent)      \
+            }                                       \
+            util::anchor += (ANCHOR_TYPE)l;         \
+        }                                           \
+        t1 = tbb::tick_count::now();                \
+        t_[k] = (t1 - t0).seconds()/nrep;           \
+    }                                               \
+    printf (util::empty_fmt, util::anchor);         \
+    Avg = util::average(t_, StdDev, StdDevPercent); \
+}
+
+#define CalibrateTiming(nRuns, nOuter, nInner)      \
+    StartTiming(nRuns, nOuter, nInner);             \
+        util::anchor += (ANCHOR_TYPE)i;             \
+    StopTiming(util::base, util::base_dev, util::base_dev_percent);
+
+} // namespace util
+
+
+#ifndef NRUNS
+    #define NRUNS               7
+#endif
+
+#ifndef ONE_TEST_DURATION
+    #define ONE_TEST_DURATION   0.01
+#endif
+
+#define no_histogram  ((char*)-1)
+
+inline 
+double RunTestImpl ( const char* title, void (*pfn)(), char* histogramFileName = no_histogram ) {
+    double  time = 0, variation = 0, deviation = 0;
+    size_t nrep = 1;
+    for (;;) {
+        CalibrateTiming(NRUNS, 1, nrep);
+        StartTiming(NRUNS, 1, nrep);
+        pfn();
+        StopTiming(time, variation, deviation);
+        time -= util::base;
+        if ( time > 1e-6 )
+            break;
+        nrep *= 2;
+    }
+    nrep *= (size_t)ceil(ONE_TEST_DURATION/time);
+    CalibrateTiming(NRUNS, 1, nrep);    // sets util::base
+    util::durations_t  t;
+    StartTimingEx(t, NRUNS, 1, nrep);
+        pfn();
+    StopTiming(time, variation, deviation);
+    if ( histogramFileName != (char*)-1 )
+        util::trace_histogram(t, histogramFileName);
+    double clean_time = time - util::base;
+    if ( title ) {
+        // Deviation (in percent) is calculated for the Gross time
+        printf ("\n%-34s %.2e  %5.1f      ", title, clean_time, deviation);
+        if ( util::sequential_time != 0  )
+            //printf ("% .2e  ", clean_time - util::sequential_time);
+            printf ("% 10.1f      ", 100*(clean_time - util::sequential_time)/util::sequential_time);
+        else
+            printf ("%*s ", util::rate_field_len, "");
+        printf ("%-9u %1.6f    |", (unsigned)nrep, time * nrep);
+    }
+    return clean_time;
+}
+
+
+/// Runs the test function, does statistical processing, and, if title is nonzero, prints results.
+/** If histogramFileName is a string, the histogram of individual runs is generated and stored
+    in a file with the given name. If it is NULL then the histogram is printed on the console.
+    By default no histogram is generated. 
+    The histogram format is: "rate bucket start" "number of tests in this bucket". **/
+inline 
+void RunTest ( const char* title_fmt, size_t workload_param, void (*pfn_test)(), char* histogramFileName = no_histogram ) {
+    char title[1024];
+    sprintf(title, title_fmt, (long)workload_param);
+    RunTestImpl(title, pfn_test, histogramFileName);
+}
+
+inline 
+void CalcSequentialTime ( void (*pfn)() ) {
+    util::sequential_time = RunTestImpl(NULL, pfn) / util::num_threads;
+}
+
+inline 
+void ResetSequentialTime () {
+    util::sequential_time = 0;
+}
+
+
+inline void PrintTitle() {
+    //printf ("%-32s %-*s Std Dev,%%  %-*s  Repeats   Gross time  Infra time  | NRUNS = %u", 
+    //        "Test name", util::rate_field_len, "Rate", util::rate_field_len, "Overhead", NRUNS);
+    printf ("%-34s %-*s Std Dev,%%  Par.overhead,%%  Repeats   Gross time  | Nruns %u, Nthreads %d", 
+            "Test name", util::rate_field_len, "Rate", NRUNS, util::num_threads);
+}
+
+void Test();
+
+inline
+int test_main( int argc, char* argv[] ) {
+    MinThread = 1;
+    MaxThread = tbb::task_scheduler_init::default_num_threads();
+    ParseCommandLine( argc, argv );
+    char buf[128];
+    util::rate_field_len = 2 + sprintf(buf, "%.1e", 1.1);
+    for ( int i = MinThread; i <= MaxThread; ++i ) {
+        tbb::task_scheduler_init init (i);
+        util::num_threads = i;
+        PrintTitle();
+        Test();
+        printf("\n");
+    }
+    printf("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/statistics.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/statistics.cpp
new file mode 100644 (file)
index 0000000..5edebb8
--- /dev/null
@@ -0,0 +1,408 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "statistics.h"
+#include "statistics_xml.h"
+
+#define COUNT_PARAMETERS 3
+
+#ifdef _MSC_VER
+#define snprintf _snprintf
+#endif
+
+void GetTime(char* buff,int size_buff) 
+{
+    tm *newtime;
+    time_t timer;
+    time(&timer);
+    newtime=localtime(&timer);
+    strftime(buff,size_buff,"%H:%M:%S",newtime); 
+}
+
+void GetDate(char* buff,int size_buff) 
+{
+    tm *newtime;
+    time_t timer;
+    time(&timer);  
+    newtime=localtime(&timer);
+    strftime(buff,size_buff,"%Y-%m-%d",newtime); 
+}
+
+
+StatisticsCollector::TestCase StatisticsCollector::SetTestCase(const char *name, const char *mode, int threads)
+{
+    string KeyName(name);
+    switch (SortMode)
+    {
+    case ByThreads: KeyName += Format("_%02d_%s", threads, mode); break;
+    default:
+    case ByAlg: KeyName += Format("_%s_%02d", mode, threads); break;
+    }
+    CurrentKey = Statistics[KeyName];
+    if(!CurrentKey) {
+        CurrentKey = new StatisticResults;
+        CurrentKey->Mode = mode;
+        CurrentKey->Name = name;
+        CurrentKey->Threads = threads;
+        CurrentKey->Results.reserve(RoundTitles.size());
+        Statistics[KeyName] = CurrentKey;
+    }
+    return TestCase(CurrentKey);
+}
+
+StatisticsCollector::~StatisticsCollector()
+{
+    for(Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+        delete i->second;
+}
+
+void StatisticsCollector::ReserveRounds(size_t index)
+{
+    size_t i = RoundTitles.size();
+    if (i > index) return;
+    char buf[16];
+    RoundTitles.resize(index+1);
+    for(; i <= index; i++) {
+        snprintf( buf, 15, "%u", unsigned(i+1) );
+        RoundTitles[i] = buf;
+    }
+    for(Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++) {
+        if(!i->second) printf("!!!'%s' = NULL\n", i->first.c_str());
+        else i->second->Results.reserve(index+1);
+    }
+}
+
+void StatisticsCollector::AddRoundResult(const TestCase &key, value_t v)
+{
+    ReserveRounds(key.access->Results.size());
+    key.access->Results.push_back(v);
+}
+
+void StatisticsCollector::SetRoundTitle(size_t index, const char *fmt, ...)
+{
+    vargf2buff(buff, 128, fmt);
+    ReserveRounds(index);
+    RoundTitles[index] = buff;
+}
+
+void StatisticsCollector::AddStatisticValue(const TestCase &key, const char *type, const char *fmt, ...)
+{
+    vargf2buff(buff, 128, fmt);
+    AnalysisTitles.insert(type);
+    key.access->Analysis[type] = buff;
+}
+
+void StatisticsCollector::AddStatisticValue(const char *type, const char *fmt, ...)
+{
+    vargf2buff(buff, 128, fmt);
+    AnalysisTitles.insert(type);
+    CurrentKey->Analysis[type] = buff;
+}
+
+void StatisticsCollector::SetStatisticFormula(const char *name, const char *formula)
+{
+    Formulas[name] = formula;
+}
+
+void StatisticsCollector::SetTitle(const char *fmt, ...)
+{
+    vargf2buff(buff, 256, fmt);
+    Title = buff;
+}
+
+string ExcelFormula(const string &fmt, size_t place, size_t rounds, bool is_horizontal)
+{
+    char buff[16];
+    if(is_horizontal)
+        snprintf(buff, 15, "RC[%u]:RC[%u]", unsigned(place), unsigned(place+rounds-1));
+    else
+        snprintf(buff, 15, "R[%u]C:R[%u]C", unsigned(place+1), unsigned(place+rounds));
+    string result(fmt); size_t pos = 0;
+    while ( (pos = result.find("ROUNDS", pos, 6)) != string::npos )
+        result.replace(pos, 6, buff);
+    return result;
+}
+
+void StatisticsCollector::Print(int dataOutput, const char *ModeName)
+{
+    FILE *OutputFile;
+    if (dataOutput & StatisticsCollector::Stdout)
+    {
+        printf("\n-=# %s #=-\n", Title.c_str());
+        if(SortMode == ByThreads)
+            printf("    Name    |  #  | %s ", ModeName);
+        else
+            printf("    Name    | %s |  #  ", ModeName);
+        for (AnalysisTitles_t::iterator i = AnalysisTitles.begin(); i != AnalysisTitles.end(); i++)
+            printf("|%s", i->c_str()+1);
+
+        for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+        {
+            if(SortMode == ByThreads)
+                printf("\n%12s|% 5d|%6s", i->second->Name.c_str(), i->second->Threads, i->second->Mode.c_str());
+            else
+                printf("\n%12s|%6s|% 5d", i->second->Name.c_str(), i->second->Mode.c_str(), i->second->Threads);
+            Analysis_t &analisis = i->second->Analysis;
+            AnalysisTitles_t::iterator t = AnalysisTitles.begin();
+            for (Analysis_t::iterator a = analisis.begin(); a != analisis.end(); t++)
+            {
+                char fmt[8]; snprintf(fmt, 7, "|%% %us", unsigned(max(size_t(3), t->size())));
+                if(*t != a->first)
+                    printf(fmt, "");
+                else {
+                    printf(fmt, a->second.c_str()); a++;
+                }
+            }
+        }
+        printf("\n");
+    }
+    if (dataOutput & StatisticsCollector::HTMLFile)
+    {
+        if ((OutputFile = fopen((Name+".html").c_str(), "w+t")) != NULL)
+        {
+            char TimerBuff[100], DateBuff[100];
+            GetTime(TimerBuff,sizeof(TimerBuff));
+            GetDate(DateBuff,sizeof(DateBuff));
+            fprintf(OutputFile, "<html><head>\n<title>%s</title>\n</head><body>\n", Title.c_str());
+            //-----------------------
+            fprintf(OutputFile, "<table id=\"h\" style=\"position:absolute;top:20\" border=1 cellspacing=0 cellpadding=2>\n");
+            fprintf(OutputFile, "<tr><td><a name=hr href=#vr onclick=\"v.style.visibility='visible';"
+                                "h.style.visibility='hidden';\">Flip[H]</a></td>"
+                                "<td>%s</td><td>%s</td><td colspan=%u>%s</td>",
+                DateBuff, TimerBuff, unsigned(AnalysisTitles.size() + RoundTitles.size()), Title.c_str());
+            fprintf(OutputFile, "</tr>\n<tr bgcolor=#CCFFFF><td>Name</td><td>Threads</td><td>%s</td>", ModeName);
+            for (AnalysisTitles_t::iterator i = AnalysisTitles.begin(); i != AnalysisTitles.end(); i++)
+                fprintf(OutputFile, "<td>%s</td>", i->c_str()+1);
+            for (size_t i = 0; i < RoundTitles.size(); i++)
+                fprintf(OutputFile, "<td>%s</td>", RoundTitles[i].c_str());
+            for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+            {
+                fprintf(OutputFile, "</tr>\n<tr><td bgcolor=#CCFFCC>%s</td><td bgcolor=#CCFFCC>%d</td><td bgcolor=#CCFFCC>%4s</td>",
+                    i->second->Name.c_str(), i->second->Threads, i->second->Mode.c_str());
+                //statistics
+                AnalysisTitles_t::iterator t = AnalysisTitles.begin();
+                for (Analysis_t::iterator j = i->second->Analysis.begin(); j != i->second->Analysis.end(); t++)
+                {
+                    fprintf(OutputFile, "<td bgcolor=#FFFF99>%s</td>", (*t != j->first)?" ":(i->second->Analysis[j->first]).c_str());
+                    if(*t == j->first) j++;
+                }
+                //data
+                Results_t &r = i->second->Results;
+                for (size_t k = 0; k < r.size(); k++)
+                {
+                    fprintf(OutputFile, "<td>");
+                    fprintf(OutputFile, ResultsFmt, r[k]);
+                    fprintf(OutputFile, "</td>");
+                }
+            }
+            fprintf(OutputFile, "</tr>\n</table>\n");
+            //////////////////////////////////////////////////////
+            fprintf(OutputFile, "<table id=\"v\" style=\"visibility:hidden;position:absolute;top:20\" border=1 cellspacing=0 cellpadding=2>\n");
+            fprintf(OutputFile, "<tr><td><a name=vr href=#hr onclick=\"h.style.visibility='visible';"
+                                "v.style.visibility='hidden';\">Flip[V]</a></td>\n"
+                                "<td>%s</td><td>%s</td><td colspan=%u>%s</td>", 
+                DateBuff, TimerBuff, unsigned(max(Statistics.size()-2,size_t(1))), Title.c_str());
+
+            fprintf(OutputFile, "</tr>\n<tr bgcolor=#CCFFCC><td bgcolor=#CCFFFF>Name</td>");
+            for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+                fprintf(OutputFile, "<td>%s</td>", i->second->Name.c_str());
+            fprintf(OutputFile, "</tr>\n<tr bgcolor=#CCFFCC><td bgcolor=#CCFFFF>Threads</td>");
+            for (Statistics_t::iterator n = Statistics.begin(); n != Statistics.end(); n++)
+                fprintf(OutputFile, "<td>%d</td>", n->second->Threads);
+            fprintf(OutputFile, "</tr>\n<tr bgcolor=#CCFFCC><td bgcolor=#CCFFFF>%s</td>", ModeName);
+            for (Statistics_t::iterator m = Statistics.begin(); m != Statistics.end(); m++)
+                fprintf(OutputFile, "<td>%s</td>", m->second->Mode.c_str());
+
+            for (AnalysisTitles_t::iterator t = AnalysisTitles.begin(); t != AnalysisTitles.end(); t++)
+            {
+                fprintf(OutputFile, "</tr>\n<tr bgcolor=#FFFF99><td bgcolor=#CCFFFF>%s</td>", t->c_str()+1);
+                for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+                    fprintf(OutputFile, "<td>%s</td>", i->second->Analysis.count(*t)?i->second->Analysis[*t].c_str():" ");
+            }
+
+            for (size_t r = 0; r < RoundTitles.size(); r++)
+            {
+                fprintf(OutputFile, "</tr>\n<tr><td bgcolor=#CCFFFF>%s</td>", RoundTitles[r].c_str());
+                for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+                {
+                    Results_t &result = i->second->Results;
+                    fprintf(OutputFile, "<td>");
+                    if(result.size() > r)
+                        fprintf(OutputFile, ResultsFmt, result[r]);
+                    fprintf(OutputFile, "</td>");
+                }
+            }
+            fprintf(OutputFile, "</tr>\n</table>\n</body></html>\n");
+            fclose(OutputFile);
+        }
+    }
+    if (dataOutput & StatisticsCollector::ExcelXML)
+    {
+        if ((OutputFile = fopen((Name+".xml").c_str(), "w+t")) == NULL) {
+            printf("Can't open .xml file\n");
+        } else {
+            //vector<value_t> *TmpVect;
+            //Statistics_t::iterator ii, i = Statistics.begin();
+            //Analysis_t::iterator jj, j = i->second.Analysis.begin();
+            char UserName[100];
+            char SheetName[20];
+            char TimerBuff[100], DateBuff[100];
+#if _WIN32 || _WIN64
+            strcpy(UserName,getenv("USERNAME"));
+#else
+            strcpy(UserName,getenv("USER"));
+#endif
+            //--------------------------------
+            strcpy(SheetName,"Horizontal");
+            GetTime(TimerBuff,sizeof(TimerBuff));
+            GetDate(DateBuff,sizeof(DateBuff));
+            //--------------------------
+            fprintf(OutputFile, XMLHead, UserName, TimerBuff);
+            fprintf(OutputFile, XMLStyles);
+            fprintf(OutputFile, XMLBeginSheet, SheetName);
+            fprintf(OutputFile, XMLNames,1,1,1,int(AnalysisTitles.size()+Formulas.size()+COUNT_PARAMETERS));
+            fprintf(OutputFile, XMLBeginTable, int(RoundTitles.size()+Formulas.size()+AnalysisTitles.size()+COUNT_PARAMETERS+1/*title*/), int(Statistics.size()+1));
+            fprintf(OutputFile, XMLBRow);
+            fprintf(OutputFile, XMLCellTopName);
+            fprintf(OutputFile, XMLCellTopThread);
+            fprintf(OutputFile, XMLCellTopMode, ModeName);
+            for (AnalysisTitles_t::iterator j = AnalysisTitles.begin(); j != AnalysisTitles.end(); j++)
+                fprintf(OutputFile, XMLAnalysisTitle, j->c_str()+1);
+            for (Formulas_t::iterator j = Formulas.begin(); j != Formulas.end(); j++)
+                fprintf(OutputFile, XMLAnalysisTitle, j->first.c_str()+1);
+            for (RoundTitles_t::iterator j = RoundTitles.begin(); j != RoundTitles.end(); j++)
+                fprintf(OutputFile, XMLAnalysisTitle, j->c_str());
+            fprintf(OutputFile, XMLCellEmptyWhite, Title.c_str());
+            fprintf(OutputFile, XMLERow);
+            //------------------------
+            for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+            {
+                fprintf(OutputFile, XMLBRow);
+                fprintf(OutputFile, XMLCellName,  i->second->Name.c_str());
+                fprintf(OutputFile, XMLCellThread,i->second->Threads);
+                fprintf(OutputFile, XMLCellMode,  i->second->Mode.c_str());
+                //statistics
+                AnalysisTitles_t::iterator at = AnalysisTitles.begin();
+                for (Analysis_t::iterator j = i->second->Analysis.begin(); j != i->second->Analysis.end(); at++)
+                {
+                    fprintf(OutputFile, XMLCellAnalysis, (*at != j->first)?"":(i->second->Analysis[j->first]).c_str());
+                    if(*at == j->first) j++;
+                }
+                //formulas
+                size_t place = 0;
+                Results_t &v = i->second->Results;
+                for (Formulas_t::iterator f = Formulas.begin(); f != Formulas.end(); f++, place++)
+                    fprintf(OutputFile, XMLCellFormula, ExcelFormula(f->second, Formulas.size()-place, v.size(), true).c_str());
+                //data
+                for (size_t k = 0; k < v.size(); k++)
+                {
+                    fprintf(OutputFile, XMLCellData, v[k]);
+                }
+                if(v.size() < RoundTitles.size())
+                    fprintf(OutputFile, XMLMergeRow, int(RoundTitles.size() - v.size()));
+                fprintf(OutputFile, XMLERow);
+            }
+            //------------------------
+            fprintf(OutputFile, XMLEndTable);
+            fprintf(OutputFile, XMLWorkSheetProperties,1,1,3,3,int(RoundTitles.size()+AnalysisTitles.size()+Formulas.size()+COUNT_PARAMETERS));
+            fprintf(OutputFile, XMLAutoFilter,1,1,1,int(AnalysisTitles.size()+Formulas.size()+COUNT_PARAMETERS));
+            fprintf(OutputFile, XMLEndWorkSheet);
+            //----------------------------------------
+            strcpy(SheetName,"Vertical");
+            fprintf(OutputFile, XMLBeginSheet, SheetName);
+            fprintf(OutputFile, XMLNames, int(Formulas.size()+AnalysisTitles.size()+COUNT_PARAMETERS+2),2,int(AnalysisTitles.size()+Formulas.size()+COUNT_PARAMETERS+2),int(Statistics.size()+1));
+            fprintf(OutputFile, XMLBeginTable, int(max(Statistics.size()+1, size_t(7))), int(RoundTitles.size()+AnalysisTitles.size()+Formulas.size()+COUNT_PARAMETERS+2));
+            //fprintf(OutputFile, XMLColumsVerticalTable, Statistics.size()+1);
+            //----------------------------------------
+
+            fprintf(OutputFile, XMLBRow);
+            fprintf(OutputFile, XMLNameAndTime, Name.c_str(), TimerBuff, DateBuff);
+            fprintf(OutputFile, XMLTableParamAndTitle, int(Statistics.size()), int(AnalysisTitles.size()), int(RoundTitles.size()), Title.c_str());
+            fprintf(OutputFile, XMLERow);
+            fprintf(OutputFile, XMLBRow);
+            //-------------------
+            fprintf(OutputFile, XMLCellTopName);
+            for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+                fprintf(OutputFile, XMLCellName, i->second->Name.c_str());
+            fprintf(OutputFile, XMLERow);
+            fprintf(OutputFile, XMLBRow);
+            fprintf(OutputFile, XMLCellTopThread);
+            for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+                fprintf(OutputFile, XMLCellThread, i->second->Threads);
+            fprintf(OutputFile, XMLERow);
+            fprintf(OutputFile, XMLBRow);
+            fprintf(OutputFile, XMLCellTopMode, ModeName);
+            for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+                fprintf(OutputFile, XMLCellMode, i->second->Mode.c_str());
+            fprintf(OutputFile, XMLERow);
+            //-----------------
+            for (AnalysisTitles_t::iterator t = AnalysisTitles.begin(); t != AnalysisTitles.end(); t++)
+            {
+                fprintf(OutputFile, XMLBRow);
+                fprintf(OutputFile, XMLAnalysisTitle, t->c_str()+1);
+                for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+                    fprintf(OutputFile, XMLCellAnalysis, i->second->Analysis.count(*t)?(i->second->Analysis[*t]).c_str():"");
+                fprintf(OutputFile, XMLERow);
+            }
+            //-------------------------------------
+            for (Formulas_t::iterator t = Formulas.begin(); t != Formulas.end(); t++)
+            {
+                fprintf(OutputFile, XMLBRow);
+                fprintf(OutputFile, XMLAnalysisTitle, t->first.c_str()+1);
+                size_t place = 0;
+                for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+                    fprintf(OutputFile, XMLCellAnalysis, ExcelFormula(t->second, Formulas.size()-place, i->second->Results.size(), false).c_str());
+                fprintf(OutputFile, XMLERow);
+            }
+            //--------------------------------------
+            fprintf(OutputFile, XMLBRow);
+            fprintf(OutputFile, XMLCellEmptyWhite, "Result");
+            fprintf(OutputFile, XMLERow);
+            
+            for (size_t k = 0; k < RoundTitles.size(); k++)
+            {
+                fprintf(OutputFile, XMLBRow);
+                fprintf(OutputFile, XMLAnalysisTitle, RoundTitles[k].c_str());
+                for (Statistics_t::iterator i = Statistics.begin(); i != Statistics.end(); i++)
+                    if(i->second->Results.size() > k)
+                        fprintf(OutputFile, XMLCellData, i->second->Results[k]);
+                    else
+                        fprintf(OutputFile, XMLCellEmptyWhite, "");
+                fprintf(OutputFile, XMLERow);
+            }
+            fprintf(OutputFile, XMLEndTable);
+            //----------------------------------------
+            fprintf(OutputFile, XMLWorkSheetProperties, int(Formulas.size()+AnalysisTitles.size()+COUNT_PARAMETERS+2), int(Formulas.size()+AnalysisTitles.size()+COUNT_PARAMETERS+2),1,1,6);
+            fprintf(OutputFile, XMLAutoFilter, int(Formulas.size()+AnalysisTitles.size()+COUNT_PARAMETERS+2),2, int(Formulas.size()+AnalysisTitles.size()+COUNT_PARAMETERS+2), int(Statistics.size()+1));
+            //----------------------------------------
+            fprintf(OutputFile, XMLEndWorkSheet);
+            fprintf(OutputFile, XMLEndWorkbook);
+            fclose(OutputFile);
+        }
+    }
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/statistics.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/statistics.h
new file mode 100644 (file)
index 0000000..3066190
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Internal Intel tool
+
+#ifndef __STATISTICS_H__
+#define __STATISTICS_H__
+
+#define _CRT_SECURE_NO_DEPRECATE 1
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <vector>
+#include <map>
+#include <set>
+#include <string>
+#include <time.h>
+
+using namespace std;
+typedef double value_t;
+
+/*
+   Statistical collector class.
+  
+   Resulting table output:
+        +---------------------------------------------------------------------------+
+        | [Date] <Title>...                                                         |
+        +----------+----v----+--v---+----------------+------------+-..-+------------+
+        | TestName | Threads | Mode | Rounds results | Stat_type1 | .. | Stat_typeN |
+        +----------+---------+------+-+-+-+-..-+-+-+-+------------+-..-+------------+
+        |          |         |      | | | | .. | | | |            |    |            |
+        ..        ...       ...     ..................            ......           ..
+        |          |         |      | | | | .. | | | |            |    |            |
+        +----------+---------+------+-+-+-+-..-+-+-+-+------------+-..-+------------+
+
+   Iterating table output:
+        +---------------------------------------------------------------------------+
+        | [Date] <TestName>, Threads: <N>, Mode: <M>; for <Title>...                |
+        +----------+----v----+--v---+----------------+------------+-..-+------------+
+        
+*/
+
+class StatisticsCollector
+{
+public:
+    typedef map<string, string> Analysis_t;
+    typedef vector<value_t> Results_t;
+
+protected:
+    StatisticsCollector(const StatisticsCollector &);
+
+    struct StatisticResults
+    {
+        string              Name;
+        string              Mode;
+        int                 Threads;
+        Results_t           Results;
+        Analysis_t          Analysis;
+    };
+
+    // internal members
+       //bool OpenFile;
+    StatisticResults *CurrentKey;
+    string Title;
+    const char /**Name,*/ *ResultsFmt;
+       string Name;
+    //! Data
+    typedef map<string, StatisticResults*> Statistics_t;
+    Statistics_t Statistics;
+    typedef vector<string> RoundTitles_t;
+    RoundTitles_t RoundTitles;
+    //TODO: merge those into one structure
+    typedef map<string, string> Formulas_t;
+    Formulas_t   Formulas;
+    typedef set<string> AnalysisTitles_t;
+    AnalysisTitles_t AnalysisTitles;
+
+public:
+    struct TestCase {
+        StatisticResults *access;
+        TestCase() : access(0) {}
+        TestCase(StatisticResults *link) : access(link) {}
+        const char *getName() const { return access->Name.c_str(); }
+        const char *getMode() const { return access->Mode.c_str(); }
+        int getThreads()       const { return access->Threads; }
+        const Results_t &getResults() const { return access->Results; }
+        const Analysis_t &getAnalysis() const { return access->Analysis; }
+    };
+
+    enum Sorting {
+        ByThreads, ByAlg
+    };
+
+    //! Data and output types
+    enum DataOutput {
+        // Verbosity level enumeration
+        Statistic = 1,     //< Analytical data - computed after all iterations and rounds passed
+        Result    = 2,     //< Testing data    - collected after all iterations passed
+        Iteration = 3,     //< Verbose data    - collected at each iteration (for each size - in case of containers)
+        // ExtraVerbose is not applicabe yet :) be happy, but flexibility is always welcome
+
+        // Next constants are bit-fields
+        Stdout   = 1<<8,    //< Output to the console
+        TextFile = 1<<9,    //< Output to plain text file "name.txt" (delimiter is TAB by default)
+        ExcelXML = 1<<10,   //< Output to Excel-readable XML-file "name.xml"
+        HTMLFile = 1<<11    //< Output to HTML file "name.html"
+    };
+
+    //! Constructor. Specify tests set name which used as name of output files
+    StatisticsCollector(const char *name, Sorting mode = ByThreads, const char *fmt = "%g")
+        :  CurrentKey(NULL), ResultsFmt(fmt), Name(name), SortMode(mode) {}
+
+    ~StatisticsCollector();
+
+    //! Set tests set title, supporting printf-like arguments
+    void SetTitle(const char *fmt, ...);
+
+    //! Specify next test key
+    TestCase SetTestCase(const char *name, const char *mode, int threads);
+    //! Specify next test key
+    void SetTestCase(const TestCase &t) { SetTestCase(t.getName(), t.getMode(), t.getThreads()); }
+    //! Reserve specified number of rounds. Use for effeciency. Used mostly internally
+    void ReserveRounds(size_t index);
+    //! Add result of the measure
+    void AddRoundResult(const TestCase &, value_t v);
+    //! Add result of the current measure
+    void AddRoundResult(value_t v) { if(CurrentKey) AddRoundResult(TestCase(CurrentKey), v); }
+    //! Add title of round
+    void SetRoundTitle(size_t index, const char *fmt, ...);
+    //! Add numbered title of round
+    void SetRoundTitle(size_t index, int num) { SetRoundTitle(index, "%d", num); }
+    //! Get number of rounds
+    size_t GetRoundsCount() const { return RoundTitles.size(); }
+    // Set statistic value for the test
+    void AddStatisticValue(const TestCase &, const char *type, const char *fmt, ...);
+    // Set statistic value for the current test
+    void AddStatisticValue(const char *type, const char *fmt, ...);
+    //! Add Excel-processing formulas. @arg formula can contain more than one instances of
+    //! ROUNDS template which transforms into the range of cells with result values
+    //TODO://! #1 .. #n templates represent data cells from the first to the last
+    //TODO: merge with Analisis
+    void SetStatisticFormula(const char *name, const char *formula);
+
+    //! Data output
+    void Print(int dataOutput, const char *ModeName = "Mode");
+
+private:
+    Sorting SortMode;
+};
+
+//! using: Func(const char *fmt, ...) { vargf2buff(buff, 128, fmt);...
+#define vargf2buff(name, size, fmt) char name[size]; memset(name, 0, size); va_list args; va_start(args, fmt); vsnprintf( name, size-1, fmt, args)
+
+inline std::string Format(const char *fmt, ...) {
+    vargf2buff(buf, 1024, fmt); // from statistics.h
+    return std::string(buf);
+}
+
+#ifdef STATISTICS_INLINE
+#include "statistics.cpp"
+#endif
+#endif //__STATISTICS_H__
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/statistics_xml.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/statistics_xml.h
new file mode 100644 (file)
index 0000000..7521825
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+const char XMLBRow[]=
+"   <Row>\n";
+
+const char XMLERow[]=
+"   </Row>\n";
+
+const char XMLHead[]=
+"<?xml version=\"1.0\"?>\n"
+"<?mso-application progid=\"Excel.Sheet\"?>\n\
+<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\n\
+ xmlns:o=\"urn:schemas-microsoft-com:office:office\"\n\
+ xmlns:x=\"urn:schemas-microsoft-com:office:excel\"\n\
+ xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"\n\
+ xmlns:html=\"http://www.w3.org/TR/REC-html40\">\n\
+ <DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\">\n\
+  <Author>%s</Author>\n\
+  <Created>%s</Created>\n\
+  <Company>Intel Corporation</Company>\n\
+ </DocumentProperties>\n\
+ <ExcelWorkbook xmlns=\"urn:schemas-microsoft-com:office:excel\">\n\
+  <RefModeR1C1/>\n\
+ </ExcelWorkbook>\n";
+ const char XMLStyles[]=
+ " <Styles>\n\
+  <Style ss:ID=\"Default\" ss:Name=\"Normal\">\n\
+   <Alignment ss:Vertical=\"Bottom\" ss:Horizontal=\"Left\" ss:WrapText=\"0\"/>\n\
+  </Style>\n\
+  <Style ss:ID=\"s26\">\n\
+   <Alignment ss:Vertical=\"Top\"  ss:Horizontal=\"Left\" ss:WrapText=\"0\"/>\n\
+   <Borders>\n\
+    <Border ss:Position=\"Bottom\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+    <Border ss:Position=\"Left\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+    <Border ss:Position=\"Right\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+    <Border ss:Position=\"Top\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+   </Borders>\n\
+   <Interior ss:Color=\"#FFFF99\" ss:Pattern=\"Solid\"/>\n\
+  </Style>\n\
+  <Style ss:ID=\"s25\">\n\
+   <Alignment ss:Vertical=\"Top\"  ss:Horizontal=\"Left\" ss:WrapText=\"0\"/>\n\
+   <Borders>\n\
+    <Border ss:Position=\"Bottom\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+    <Border ss:Position=\"Left\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+    <Border ss:Position=\"Right\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+    <Border ss:Position=\"Top\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+   </Borders>\n\
+   <Interior ss:Color=\"#CCFFFF\" ss:Pattern=\"Solid\"/>\n\
+  </Style>\n\
+  <Style ss:ID=\"s24\">\n\
+   <Alignment ss:Vertical=\"Top\"  ss:Horizontal=\"Left\" ss:WrapText=\"0\"/>\n\
+   <Borders>\n\
+    <Border ss:Position=\"Bottom\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+    <Border ss:Position=\"Left\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+    <Border ss:Position=\"Right\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+    <Border ss:Position=\"Top\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+   </Borders>\n\
+   <Interior ss:Color=\"#CCFFCC\" ss:Pattern=\"Solid\"/>\n\
+  </Style>\n\
+  <Style ss:ID=\"s23\">\n\
+   <Alignment ss:Vertical=\"Top\"  ss:Horizontal=\"Left\" ss:WrapText=\"0\"/>\n\
+   <Borders>\n\
+    <Border ss:Position=\"Bottom\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+    <Border ss:Position=\"Left\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+    <Border ss:Position=\"Right\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+    <Border ss:Position=\"Top\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\n\
+   </Borders>\n\
+  </Style>\n\
+ </Styles>\n";
+
+const char XMLBeginSheet[]=
+" <Worksheet ss:Name=\"%s\">\n";
+
+const char XMLNames[]=
+"  <Names>\n\
+   <NamedRange ss:Name=\"_FilterDatabase\" ss:RefersTo=\"R%dC%d:R%dC%d\" ss:Hidden=\"1\"/>\n\
+  </Names>\n";
+
+const char XMLBeginTable[]=
+"  <Table ss:ExpandedColumnCount=\"%d\" ss:ExpandedRowCount=\"%d\" x:FullColumns=\"1\"\n\
+   x:FullRows=\"1\">\n";
+   
+const char XMLColumsHorizontalTable[]=
+"   <Column ss:Index=\"1\" ss:Width=\"108.75\"/>\n\
+   <Column ss:Index=\"%d\" ss:Width=\"77.25\" ss:Span=\"%d\"/>\n";
+const char XMLColumsVerticalTable[]= 
+"   <Column ss:Index=\"1\" ss:Width=\"77.25\" ss:Span=\"%d\"/>\n";
+
+const char XMLNameAndTime[]=
+"    <Cell><Data ss:Type=\"String\">%s</Data></Cell>\n\
+    <Cell><Data ss:Type=\"String\">%s</Data></Cell>\n\
+    <Cell><Data ss:Type=\"String\">%s</Data></Cell>\n";
+
+const char XMLTableParamAndTitle[]=
+"    <Cell><Data ss:Type=\"Number\">%d</Data></Cell>\n\
+    <Cell><Data ss:Type=\"Number\">%d</Data></Cell>\n\
+    <Cell><Data ss:Type=\"Number\">%d</Data></Cell>\n\
+    <Cell><Data ss:Type=\"String\">%s</Data></Cell>\n";
+
+//--------------
+const char XMLCellTopName[]=
+"   <Cell ss:StyleID=\"s25\"><Data ss:Type=\"String\">Name</Data></Cell>\n";
+const char XMLCellTopThread[]=
+"   <Cell ss:StyleID=\"s25\"><Data ss:Type=\"String\">Threads</Data></Cell>\n";
+const char XMLCellTopMode[]=
+"   <Cell ss:StyleID=\"s25\"><Data ss:Type=\"String\">%s</Data></Cell>\n";
+//---------------------
+const char XMLAnalysisTitle[]=
+"   <Cell ss:StyleID=\"s25\"><Data ss:Type=\"String\">%s</Data></Cell>\n";
+
+const char XMLCellName[]=
+"    <Cell ss:StyleID=\"s24\"><Data ss:Type=\"String\">%s</Data></Cell>\n";
+
+const char XMLCellThread[]=
+"    <Cell ss:StyleID=\"s24\"><Data ss:Type=\"Number\">%d</Data></Cell>\n";
+
+const char XMLCellMode[]=
+"    <Cell ss:StyleID=\"s24\"><Data ss:Type=\"String\">%s</Data></Cell>\n";
+
+const char XMLCellAnalysis[]=
+"    <Cell ss:StyleID=\"s26\"><Data ss:Type=\"String\">%s</Data></Cell>\n";
+
+const char XMLCellFormula[]=
+"    <Cell ss:StyleID=\"s26\" ss:Formula=\"%s\"><Data ss:Type=\"Number\"></Data></Cell>\n";
+
+const char XMLCellData[]=
+"    <Cell ss:StyleID=\"s23\"><Data ss:Type=\"Number\">%g</Data></Cell>\n";
+
+const char XMLMergeRow[]=
+"   <Cell ss:StyleID=\"s23\" ss:MergeAcross=\"%d\" ><Data ss:Type=\"String\"></Data></Cell>\n";
+
+const char XMLCellEmptyWhite[]=
+"    <Cell><Data ss:Type=\"String\">%s</Data></Cell>\n";
+
+const char XMLCellEmptyTitle[]=
+"    <Cell ss:StyleID=\"s25\"><Data ss:Type=\"String\"></Data></Cell>\n";
+
+const char XMLEndTable[]=
+"  </Table>\n";
+
+const char XMLAutoFilter[]=
+"  <AutoFilter x:Range=\"R%dC%d:R%dC%d\" xmlns=\"urn:schemas-microsoft-com:office:excel\">\n\
+  </AutoFilter>\n";
+
+const char XMLEndWorkSheet[]=
+ " </Worksheet>\n";
+
+const char XMLWorkSheetProperties[]=
+"  <WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">\n\
+   <Unsynced/>\n\
+   <Selected/>\n\
+   <FreezePanes/>\n\
+   <FrozenNoSplit/>\n\
+   <SplitHorizontal>%d</SplitHorizontal>\n\
+   <TopRowBottomPane>%d</TopRowBottomPane>\n\
+   <SplitVertical>%d</SplitVertical>\n\
+   <LeftColumnRightPane>%d</LeftColumnRightPane>\n\
+   <ActivePane>0</ActivePane>\n\
+   <Panes>\n\
+    <Pane>\n\
+     <Number>3</Number>\n\
+    </Pane>\n\
+    <Pane>\n\
+     <Number>1</Number>\n\
+    </Pane>\n\
+    <Pane>\n\
+     <Number>2</Number>\n\
+    </Pane>\n\
+    <Pane>\n\
+     <Number>0</Number>\n\
+     <ActiveRow>0</ActiveRow>\n\
+     <ActiveCol>%d</ActiveCol>\n\
+    </Pane>\n\
+   </Panes>\n\
+   <ProtectObjects>False</ProtectObjects>\n\
+   <ProtectScenarios>False</ProtectScenarios>\n\
+  </WorksheetOptions>\n";
+
+const char XMLEndWorkbook[]=
+ "</Workbook>\n";
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_base.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_base.cpp
new file mode 100644 (file)
index 0000000..78cbef2
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/blocked_range.h"
+#include "tbb/parallel_for.h"
+#include "tbb/parallel_reduce.h"
+
+
+#define NRUNS               10
+#define ONE_TEST_DURATION   0.01
+
+#include "perf_util.h"
+
+
+#define NUM_CHILD_TASKS     128
+#define NUM_ROOT_TASKS      16
+
+#define N               1000000
+#define FINE_GRAIN      50
+#define MED_GRAIN       500
+#define COARSE_GRAIN    10000
+
+
+typedef ANCHOR_TYPE count_type;
+typedef tbb::blocked_range<count_type> range_type;
+
+const count_type NUM_leaf_tasks = NUM_CHILD_TASKS * NUM_ROOT_TASKS;
+
+const count_type N_finest = (count_type)(N/log((double)N)/10);
+const count_type N_fine = N_finest * 10;
+
+
+class static_task_holder {
+public:
+    tbb::task   *my_simple_leaf_task_ptr;
+    
+    static_task_holder ();
+};
+
+static static_task_holder s_tasks;
+
+
+static size_t s_num_iterations = 0;
+
+
+class simple_leaf_task : public tbb::task
+{
+    task* execute () {
+        for ( size_t i=0; i < s_num_iterations; ++i )
+            util::anchor += i;
+            //util::anchor += size_t(log10((double)util::anchor)*10);
+        return NULL;
+    }
+};
+
+class simple_root_task : public tbb::task
+{
+    task* execute () {
+        set_ref_count(NUM_leaf_tasks + 1);
+        for ( size_t i = 0; i < NUM_leaf_tasks; ++i ) {
+            simple_leaf_task &t = *new( allocate_child() ) simple_leaf_task;
+            spawn(t);
+        }
+        wait_for_all();
+        return NULL;
+    }
+};
+
+void Work1 () {
+    for ( size_t i=0; i < NUM_leaf_tasks; ++i )
+        s_tasks.my_simple_leaf_task_ptr->execute();
+}
+
+void Test1_1 () {
+    tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+    r.set_ref_count(NUM_leaf_tasks + 1);
+    for ( size_t i = 0; i < NUM_leaf_tasks; ++i ) {
+        simple_leaf_task &t = *new( r.allocate_child() ) simple_leaf_task;
+        r.spawn(t);
+    }
+    r.wait_for_all();
+    r.destroy(r);
+}
+
+void Test1_2 ()
+{
+    simple_root_task &r = *new( tbb::task::allocate_root() ) simple_root_task;
+    tbb::task::spawn_root_and_wait(r);
+}
+
+
+class children_launcher_task : public tbb::task
+{
+    task* execute () {
+        set_ref_count(NUM_CHILD_TASKS + 1);
+        for ( size_t i = 0; i < NUM_CHILD_TASKS; ++i ) {
+            simple_leaf_task &t = *new( allocate_child() ) simple_leaf_task;
+            spawn(t);
+        }
+        wait_for_all();
+        return NULL;
+    }
+};
+
+class root_launcher_task : public tbb::task
+{
+    task* execute () {
+        children_launcher_task &r = *new( allocate_root() ) children_launcher_task;
+        spawn_root_and_wait(r);
+        return NULL;
+    }
+};
+
+class hierarchy_root_task : public tbb::task
+{
+    task* execute () {
+        tbb::task_list  tl;
+        for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i ) {
+            root_launcher_task &r = *new( allocate_root() ) root_launcher_task;
+            tl.push_back(r);
+        }
+        spawn_root_and_wait(tl);
+        return NULL;
+    }
+};
+
+void Test1_3 ()
+{
+    hierarchy_root_task &r = *new( tbb::task::allocate_root() ) hierarchy_root_task;
+    tbb::task::spawn_root_and_wait(r);
+}
+
+
+static size_t   s_range = N,
+                s_grain = 1;
+
+class simple_pfor_body {
+public:
+    void operator()( const range_type& r ) const {
+        count_type end = r.end();
+        for( count_type i = r.begin(); i < end; ++i )
+            util::anchor += i;
+    }
+};
+
+void Work2 () {
+    simple_pfor_body body;
+    range_type range(0, s_range, s_grain);
+    body(range);
+}
+
+void Test2 () {
+    tbb::parallel_for( range_type(0, s_range, s_grain), simple_pfor_body() );
+}
+
+void Test2_0 () {
+    volatile count_type zero = 0;
+    tbb::parallel_for( range_type(0, zero, 1), simple_pfor_body() );
+}
+
+
+class simple_preduce_body {
+public:
+    count_type my_sum;
+    simple_preduce_body () : my_sum(0) {}
+    simple_preduce_body ( simple_preduce_body&, tbb::split ) : my_sum(0) {}
+    void join( simple_preduce_body& rhs ) { my_sum += rhs.my_sum;}
+    void operator()( const range_type& r ) {
+        count_type end = r.end();
+        for( count_type i = r.begin(); i < end; ++i )
+            util::anchor += i;
+        my_sum = util::anchor;
+    }
+};
+
+void Work3 () {
+    simple_preduce_body body;
+    range_type range(0, s_range, s_grain);
+    body(range);
+}
+
+void Test3 () {
+    simple_preduce_body body;
+    tbb::parallel_reduce( range_type(0, s_range, s_grain), body );
+}
+
+void Test3_0 () {
+    volatile count_type zero = 0;
+    simple_preduce_body body;
+    tbb::parallel_reduce( range_type(0, zero, 1), body );
+}
+
+
+static_task_holder::static_task_holder () {
+    static simple_leaf_task s_t1;
+    my_simple_leaf_task_ptr = &s_t1;
+}
+
+void Test () {
+    const size_t num_task_tree_workloads = 4;
+    size_t task_tree_workloads[num_task_tree_workloads] = {0, 50, 500, 10000};
+    for (size_t i = 0; i < num_task_tree_workloads; ++i ) {
+        size_t n = task_tree_workloads[i];
+        s_num_iterations = n;
+        CalcSequentialTime(Work1);
+        RunTest ("Bunch of leaves: %d adds/task", n, Test1_1);
+        RunTest ("Simple task tree: %d adds/task", n, Test1_2);
+        RunTest ("Complex task tree: %d adds/task", n, Test1_3);
+    }
+
+    // Using N_fine constant in the body of this function results in incorrect code
+    // generation by icl 10.1.014
+    const size_t num_alg_workloads = 4;
+    size_t alg_ranges[num_alg_workloads] = {N_fine/10, N_fine, N, N};
+    size_t alg_grains[num_alg_workloads] = {1, FINE_GRAIN, MED_GRAIN, COARSE_GRAIN};
+    
+    //RunTest ("Empty pfor", 0, Test2_0);
+    for (size_t i = 0; i < num_alg_workloads; ++i ) {
+        s_range = alg_ranges[i];
+        s_grain = alg_grains[i];
+        CalcSequentialTime(Work2);
+        RunTest ("pfor: %d adds/body", s_grain, Test2);
+    }
+
+    //RunTest ("Empty preduce", Test3_0);
+    for (size_t i = 0; i < num_alg_workloads; ++i ) {
+        s_range = alg_ranges[i];
+        s_grain = alg_grains[i];
+        CalcSequentialTime(Work3);
+        RunTest ("preduce: %d adds/body", s_grain, Test3);
+    }
+}
+
+int main( int argc, char* argv[] ) {
+    test_main(argc, argv);
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_framework.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_framework.h
new file mode 100644 (file)
index 0000000..d301c2b
--- /dev/null
@@ -0,0 +1,343 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TIME_FRAMEWORK_H__
+#define __TIME_FRAMEWORK_H__
+
+#include <cstdlib>
+#include <math.h>
+#include <vector>
+#include <string>
+#include <sstream>
+#include "tbb/tbb_stddef.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+#include "../test/harness.h"
+#include "../test/harness_barrier.h"
+#define STATISTICS_INLINE
+#include "statistics.h"
+
+#ifndef ARG_TYPE
+typedef intptr_t arg_t;
+#else
+typedef ARG_TYPE arg_t;
+#endif
+
+class Timer {
+    tbb::tick_count tick;
+public:
+    Timer() { tick = tbb::tick_count::now(); }
+    double get_time()  { return (tbb::tick_count::now() - tick).seconds(); }
+    double diff_time(const Timer &newer) { return (newer.tick - tick).seconds(); }
+    double mark_time() { tbb::tick_count t1(tbb::tick_count::now()), t2(tick); tick = t1; return (t1 - t2).seconds(); }
+    double mark_time(const Timer &newer) { tbb::tick_count t(tick); tick = newer.tick; return (tick - t).seconds(); }
+};
+
+class TesterBase /*: public tbb::internal::no_copy*/ {
+protected:
+    friend class TestProcessor;
+    friend class TestRunner;
+
+    //! it is barrier for synchronizing between threads
+    Harness::SpinBarrier *barrier;
+    
+    //! number of tests per this tester
+    const int tests_count;
+    
+    //! number of threads to operate
+    int threads_count;
+
+    //! some value for tester
+    arg_t value;
+
+    // avoid false sharing
+    char pad[128 - sizeof(arg_t) - sizeof(int)*2 - sizeof(void*) ];
+
+public:
+    //! init tester base. @arg ntests is number of embeded tests in this tester.
+    TesterBase(int ntests)
+        : barrier(NULL), tests_count(ntests)
+    {}
+    virtual ~TesterBase() {}
+
+    //! internal function
+    void base_init(arg_t v, int t, Harness::SpinBarrier &b) {
+        threads_count = t;
+        barrier = &b;
+        value = v;
+        init();
+    }
+
+    //! optionally override to init after value and threads count were set.
+    virtual void init() { }
+
+    //! Override to provide your names
+    virtual std::string get_name(int testn) {
+        return Format("test %d", testn);
+    }
+
+    //! optionally override to init test mode just before execution for a given thread number.
+    virtual void test_prefix(int testn, int threadn) { }
+
+    //! Override to provide main test's entry function returns a value to record
+    virtual value_t test(int testn, int threadn) = 0;
+
+    //! Type of aggregation from results of threads
+    enum result_t {
+        SUM, AVG, MIN, MAX
+    };
+
+    //! Override to change result type for the test. Return postfix for test name or 0 if result type is not needed.
+    virtual const char *get_result_type(int /*testn*/, result_t type) const {
+        return type == AVG ? "" : 0; // only average result by default
+    }
+};
+
+/*****
+a user's tester concept:
+
+class tester: public TesterBase {
+public:
+    //! init tester with known amount of work
+    tester() : TesterBase(<user-specified tests count>) { ... }
+
+    //! run a test with sequental number @arg test_number for @arg thread.
+    / *override* / value_t test(int test_number, int thread);
+};
+
+******/
+
+template<typename Tester, int scale = 1>
+class TimeTest : public Tester {
+    /*override*/ value_t test(int testn, int threadn) {
+        Timer timer;
+        Tester::test(testn, threadn);
+        return timer.get_time() * double(scale);
+    }
+};
+
+template<typename Tester>
+class NanosecPerValue : public Tester {
+    /*override*/ value_t test(int testn, int threadn) {
+        Timer timer;
+        Tester::test(testn, threadn);
+        // return time (ns) per value
+        return timer.get_time()*1000000.0/double(Tester::value);
+    }
+};
+
+template<typename Tester, int scale = 1>
+class ValuePerSecond : public Tester {
+    /*override*/ value_t test(int testn, int threadn) {
+        Timer timer;
+        Tester::test(testn, threadn);
+        // return time value per seconds/scale
+        return double(Tester::value)/(timer.get_time()*scale);
+    }
+};
+
+// operate with single tester
+class TestRunner {
+    friend class TestProcessor;
+    friend struct RunArgsBody;
+    TestRunner(const TestRunner &); // don't copy
+
+    const char *tester_name;
+    StatisticsCollector *stat;
+    std::vector<std::vector<StatisticsCollector::TestCase> > keys;
+
+public:
+    TesterBase &tester;
+
+    template<typename Test>
+    TestRunner(const char *name, Test *test)
+        : tester_name(name), tester(*static_cast<TesterBase*>(test))
+    {}
+    
+    ~TestRunner() { delete &tester; }
+
+    void init(arg_t value, int threads, Harness::SpinBarrier &barrier, StatisticsCollector *s) {
+        tester.base_init(value, threads, barrier);
+        stat = s;
+        keys.resize(tester.tests_count);
+        for(int testn = 0; testn < tester.tests_count; testn++) {
+            keys[testn].resize(threads);
+            std::string test_name(tester.get_name(testn));
+            for(int threadn = 0; threadn < threads; threadn++)
+                keys[testn][threadn] = stat->SetTestCase(tester_name, test_name.c_str(), threadn);
+        }
+    }
+
+    void run_test(int threadn) {
+        for(int testn = 0; testn < tester.tests_count; testn++) {
+            tester.test_prefix(testn, threadn);
+            tester.barrier->wait();                                 // <<<<<<<<<<<<<<<<< Barrier before running test mode
+            value_t result = tester.test(testn, threadn);
+            stat->AddRoundResult(keys[testn][threadn], result);
+        }
+    }
+
+    void post_process(StatisticsCollector &report) {
+        const int threads = tester.threads_count;
+        for(int testn = 0; testn < tester.tests_count; testn++) {
+            size_t coln = keys[testn][0].getResults().size()-1;
+            value_t rsum = keys[testn][0].getResults()[coln];
+            value_t rmin = rsum, rmax = rsum;
+            for(int threadn = 1; threadn < threads; threadn++) {
+                value_t result = keys[testn][threadn].getResults()[coln];
+                rsum += result; // for both SUM or AVG
+                if(rmin > result) rmin = result;
+                if(rmax < result) rmax = result;
+            }
+            std::string test_name(tester.get_name(testn));
+            const char *rname = tester.get_result_type(testn, TesterBase::SUM);
+            if( rname ) {
+                report.SetTestCase(tester_name, (test_name+rname).c_str(), threads);
+                report.AddRoundResult(rsum);
+            }
+            rname = tester.get_result_type(testn, TesterBase::MIN);
+            if( rname ) {
+                report.SetTestCase(tester_name, (test_name+rname).c_str(), threads);
+                report.AddRoundResult(rmin);
+            }
+            rname = tester.get_result_type(testn, TesterBase::AVG);
+            if( rname ) {
+                report.SetTestCase(tester_name, (test_name+rname).c_str(), threads);
+                report.AddRoundResult(rsum / threads);
+            }
+            rname = tester.get_result_type(testn, TesterBase::MAX);
+            if( rname ) {
+                report.SetTestCase(tester_name, (test_name+rname).c_str(), threads);
+                report.AddRoundResult(rmax);
+            }
+        }
+    }
+};
+
+struct RunArgsBody {
+    const vector<TestRunner*> &run_list;
+    RunArgsBody(const vector<TestRunner*> &a) : run_list(a) { }
+#ifndef __TBB_parallel_for_H
+    void operator()(int thread) const {
+#else
+    void operator()(const tbb::blocked_range<int> &r) const {
+        ASSERT( r.begin() + 1 == r.end(), 0);
+        int thread = r.begin();
+#endif
+        for(size_t i = 0; i < run_list.size(); i++)
+            run_list[i]->run_test(thread);
+    }
+};
+
+//! Main test processor.
+/** Override or use like this:
+ class MyTestCollection : public TestProcessor {
+    void factory(arg_t value, int threads) {
+        process( value, threads,
+            run("my1", new tester<my1>() ),
+            run("my2", new tester<my2>() ),
+        end );
+        if(value == threads)
+            stat->Print();
+    }
+};
+*/
+
+class TestProcessor {
+    friend class TesterBase;
+
+    // <threads, collector>
+    typedef std::map<int, StatisticsCollector *> statistics_collection;
+    statistics_collection stat_by_threads;
+
+protected:
+    // Members
+    const char *collection_name;
+    // current stat
+    StatisticsCollector *stat;
+    // token
+    size_t end;
+
+public:
+    StatisticsCollector report;
+
+    // token of tests list
+    template<typename Test>
+    TestRunner *run(const char *name, Test *test) {
+        return new TestRunner(name, test);
+    }
+
+    // iteration processing
+    void process(arg_t value, int threads, ...) {
+        // prepare items
+        stat = stat_by_threads[threads];
+        if(!stat) {
+            stat_by_threads[threads] = stat = new StatisticsCollector((collection_name + Format("@%d", threads)).c_str(), StatisticsCollector::ByAlg);
+            stat->SetTitle("Detailed log of %s running with %d threads.", collection_name, threads);
+        }
+        Harness::SpinBarrier barrier(threads);
+        // init args
+        va_list args; va_start(args, threads);
+        vector<TestRunner*> run_list; run_list.reserve(16);
+        while(true) {
+            TestRunner *item = va_arg(args, TestRunner*);
+            if( !item ) break;
+            item->init(value, threads, barrier, stat);
+            run_list.push_back(item);
+        }
+        va_end(args);
+        std::ostringstream buf;
+        buf << value;
+        const size_t round_number = stat->GetRoundsCount();
+        stat->SetRoundTitle(round_number, buf.str().c_str());
+        report.SetRoundTitle(round_number, buf.str().c_str());
+        // run them
+#ifndef __TBB_parallel_for_H
+        NativeParallelFor(threads, RunArgsBody(run_list));
+#else
+        tbb::parallel_for(tbb::blocked_range<int>(0,threads,1), RunArgsBody(run_list));
+#endif
+        // destroy args
+        for(size_t i = 0; i < run_list.size(); i++) {
+            run_list[i]->post_process(report);
+            delete run_list[i];
+        }
+    }
+
+public:
+    TestProcessor(const char *name, StatisticsCollector::Sorting sort_by = StatisticsCollector::ByAlg)
+        : collection_name(name), stat(NULL), end(0), report(collection_name, sort_by)
+    { }
+
+    ~TestProcessor() {
+        for(statistics_collection::iterator i = stat_by_threads.begin(); i != stat_by_threads.end(); i++)
+            delete i->second;
+    }
+};
+
+#endif// __TIME_FRAMEWORK_H__
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_hash_map.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_hash_map.cpp
new file mode 100644 (file)
index 0000000..a72cf48
--- /dev/null
@@ -0,0 +1,366 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// configuration:
+
+//! enable/disable std::map tests
+#define STDTABLE 1
+
+//! enable/disable old implementation tests (correct include file also)
+#define OLDTABLE 0
+#define OLDTABLEHEADER "tbb/concurrent_hash_map-4078.h"//-4329
+
+//! enable/disable experimental implementation tests (correct include file also)
+
+#define TESTTABLE 0
+#define TESTTABLEHEADER "tbb/concurrent_unordered_map.h"
+
+//////////////////////////////////////////////////////////////////////////////////
+
+#include <cstdlib>
+#include <math.h>
+#include "tbb/tbb_stddef.h"
+#include <vector>
+#include <map>
+// needed by hash_maps
+#include <stdexcept>
+#include <iterator>
+#include <algorithm>                 // std::swap
+#include <utility>      // Need std::pair from here
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/tbb_allocator.h"
+#include "tbb/spin_rw_mutex.h"
+#include "tbb/aligned_space.h"
+#include "tbb/atomic.h"
+// for test
+#include "tbb/spin_mutex.h"
+#include "time_framework.h"
+
+
+using namespace tbb;
+using namespace tbb::internal;
+
+struct IntHashCompare {
+    size_t operator() ( int x ) const { return x; }
+    bool operator() ( int x, int y ) const { return x==y; }
+    static long hash( int x ) { return x; }
+    bool equal( int x, int y ) const { return x==y; }
+};
+
+namespace version_current {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    #include "tbb/concurrent_hash_map.h"
+}
+typedef version_current::tbb::concurrent_hash_map<int,int,IntHashCompare> IntTable;
+
+#if OLDTABLE
+#undef __TBB_concurrent_hash_map_H
+namespace version_base {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    #include OLDTABLEHEADER
+}
+typedef version_base::tbb::concurrent_hash_map<int,int,IntHashCompare> OldTable;
+#endif
+
+#if TESTTABLE
+#undef __TBB_concurrent_hash_map_H
+namespace version_new {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    #include TESTTABLEHEADER
+}
+typedef version_new::tbb::concurrent_unordered_map<int,int,IntHashCompare,IntHashCompare> TestTable;
+#define TESTTABLE 1
+#endif
+
+///////////////////////////////////////
+
+static const char *map_testnames[] = {
+    "1.insert", "2.count(w/rehash)", "3.find/wr", "4.erase"
+};
+
+template<typename TableType>
+struct TestTBBMap : TesterBase {
+    typedef typename TableType::accessor accessor;
+    typedef typename TableType::const_accessor const_accessor;
+    TableType Table;
+    int n_items;
+
+    TestTBBMap() : TesterBase(4) {}
+    void init() { n_items = value/threads_count; }
+
+    std::string get_name(int testn) {
+        return std::string(map_testnames[testn]);
+    }
+
+    double test(int test, int t)
+    {
+        switch(test) {
+          case 0: // fill
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                accessor a;
+                Table.insert( a, i );
+                a->second = 0;
+            }
+            break;
+          case 1: // work1
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                size_t c = Table.count( i );
+                ASSERT( c == 1, NULL);
+            }
+            break;
+          case 2: // work2
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                accessor a;
+                Table.find( a, i );
+                ASSERT( !a->second, "A key should be incremented only once");
+                a->second += 1;
+            }
+            break;
+          case 3: // clean
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                ASSERT( Table.erase( i ), NULL);
+            }
+        }
+        return 0;
+    }
+};
+
+template<typename M>
+struct TestSTLMap : TesterBase {
+    std::map<int, int> Table;
+    M mutex;
+
+    int n_items;
+    TestSTLMap() : TesterBase(4) {}
+    void init() { n_items = value/threads_count; }
+
+    std::string get_name(int testn) {
+        return std::string(map_testnames[testn]);
+    }
+
+    double test(int test, int t)
+    {
+        switch(test) {
+          case 0: // fill
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                typename M::scoped_lock with(mutex);
+                Table[i] = 0;
+            }
+            break;
+          case 1: // work1
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                typename M::scoped_lock with(mutex);
+                size_t c = Table.count(i);
+                ASSERT( c == 1, NULL);
+            }
+            break;
+          case 2: // work2
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                typename M::scoped_lock with(mutex);
+                Table[i] += 1;
+            }
+            break;
+          case 3: // clean
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                typename M::scoped_lock with(mutex);
+                Table.erase(i);
+            }
+        }
+        return 0;
+    }
+};
+
+class fake_mutex {
+    int a;
+public:
+    class scoped_lock {
+        fake_mutex *p;
+
+    public:
+        scoped_lock() {}
+        scoped_lock( fake_mutex &m ) { p = &m; }
+        ~scoped_lock() { p->a = 0; }
+        void acquire( fake_mutex &m ) { p = &m; }
+        void release() { }
+    };
+};
+
+class test_hash_map : public TestProcessor {
+public:
+    test_hash_map() : TestProcessor("test_hash_map") {}
+    void factory(int value, int threads) {
+        if(Verbose) printf("Processing with %d threads: %d...\n", threads, value);
+        process( value, threads,
+#if STDTABLE
+            run("std::map ", new NanosecPerValue<TestSTLMap<spin_mutex> >() ),
+#endif
+#if OLDTABLE
+            run("old::hmap", new NanosecPerValue<TestTBBMap<OldTable> >() ),
+#endif
+            run("tbb::hmap", new NanosecPerValue<TestTBBMap<IntTable> >() ),
+#if TESTTABLE
+            run("new::hmap", new NanosecPerValue<TestTBBMap<TestTable> >() ),
+#endif
+        end );
+        //stat->Print(StatisticsCollector::Stdout);
+        if(value >= 2097152) stat->Print(StatisticsCollector::HTMLFile);
+    }
+};
+
+/////////////////////////////////////////////////////////////////////////////////////////
+template<typename TableType>
+struct TestHashMapFind : TesterBase {
+    typedef typename TableType::accessor accessor;
+    typedef typename TableType::const_accessor const_accessor;
+    TableType Table;
+    int n_items;
+
+    std::string get_name(int testn) {
+        return std::string(!testn?"find":"insert");
+    }
+
+    TestHashMapFind() : TesterBase(2) {}
+    void init() {
+        n_items = value/threads_count;
+        for(int i = 0; i < value; i++) {
+            accessor a; Table.insert( a, i );
+        }
+    }
+
+    double test(int test, int t)
+    {
+        switch(test) {
+          case 0: // find
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                accessor a;
+                Table.find( a, i );
+                a->second = i;
+            }
+            break;
+          case 1: // insert
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                accessor a;
+                Table.insert( a, i );
+                a->second = -i;
+            }
+            break;
+        }
+        return 0;
+    }
+};
+
+const int test2_size = 65536;
+int Data[test2_size];
+
+template<typename TableType>
+struct TestHashCountStrings : TesterBase {
+    typedef typename TableType::accessor accessor;
+    typedef typename TableType::const_accessor const_accessor;
+    TableType Table;
+    int n_items;
+
+    std::string get_name(int testn) {
+        return !testn?"insert":"find";
+    }
+
+    TestHashCountStrings() : TesterBase(2) {}
+    void init() {
+        n_items = value/threads_count;
+    }
+
+    double test(int testn, int t)
+    {
+        if(!testn) {
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                accessor a; Table.insert( a, Data[i] );
+            }
+        } else { // 
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                accessor a; Table.find( a, Data[i] );
+            }
+        }
+        return 0;
+    }
+};
+
+class test_hash_map_find : public TestProcessor {
+public:
+    test_hash_map_find() : TestProcessor("test_hash_map_find") {}
+    void factory(int value, int threads) {
+        if(Verbose) printf("Processing with %d threads: %d...\n", threads, value);
+        process( value, threads,
+#if OLDTABLE
+            run("Filled old::hashmap", new NanosecPerValue<TestHashMapFind<OldTable> >() ),
+#endif
+            run("Filled tbb::hashmap", new NanosecPerValue<TestHashMapFind<IntTable> >() ),
+#if TESTTABLE
+            run("Filled new::hashmap", new NanosecPerValue<TestHashMapFind<TestTable> >() ),
+#endif
+#if OLDTABLE
+            run("CountStr old::hashmap", new TimeTest<TestHashCountStrings<OldTable> >() ),
+#endif
+            run("CountStr tbb::hashmap", new TimeTest<TestHashCountStrings<IntTable> >() ),
+#if TESTTABLE
+            run("CountStr new::hashmap", new TimeTest<TestHashCountStrings<TestTable> >() ),
+#endif
+        end );
+        //stat->Print(StatisticsCollector::HTMLFile);
+    }
+};
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+int main(int argc, char* argv[]) {
+    if(argc>1) Verbose = true;
+    //if(argc>2) ExtraVerbose = true;
+    MinThread = 1; MaxThread = task_scheduler_init::default_num_threads();
+    ParseCommandLine( argc, argv );
+
+    ASSERT(tbb_allocator<int>::allocator_type() == tbb_allocator<int>::scalable, "expecting scalable allocator library to be loaded. Please build it by:\n\t\tmake tbbmalloc");
+
+    {
+        test_hash_map_find test_find; int o = test2_size;
+        for(int i = 0; i < o; i++)
+            Data[i] = i%60;
+        for( int t=MinThread; t <= MaxThread; t++)
+            test_find.factory(o, t);
+        test_find.report.SetTitle("Nanoseconds per operation of finding operation (Mode) for %d items", o);
+        test_find.report.Print(StatisticsCollector::HTMLFile|StatisticsCollector::ExcelXML);
+    }
+    {
+        test_hash_map the_test;
+        for( int t=MinThread; t <= MaxThread; t*=2)
+            for( int o=/*2048*/(1<<8)*8; o<2200000; o*=2 )
+                the_test.factory(o, t);
+        the_test.report.SetTitle("Nanoseconds per operation of (Mode) for N items in container (Name)");
+        the_test.report.SetStatisticFormula("1AVG per size", "=AVERAGE(ROUNDS)");
+        the_test.report.Print(StatisticsCollector::HTMLFile|StatisticsCollector::ExcelXML);
+    }
+    return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_hash_map_fill.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_hash_map_fill.cpp
new file mode 100644 (file)
index 0000000..8515813
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// configuration:
+
+//! enable/disable std::map tests
+#define STDTABLE 0
+
+//! enable/disable old implementation tests (correct include file also)
+#define OLDTABLE 1
+#define OLDTABLEHEADER "tbb/concurrent_hash_map-5468.h"//-4329
+
+//! enable/disable experimental implementation tests (correct include file also)
+
+#define TESTTABLE 0
+#define TESTTABLEHEADER "tbb/concurrent_hash_map-oneseg.h"
+
+#define TBB_USE_THREADING_TOOLS 0
+//////////////////////////////////////////////////////////////////////////////////
+
+#include <cstdlib>
+#include <math.h>
+#include "tbb/tbb_stddef.h"
+#include <vector>
+#include <map>
+// needed by hash_maps
+#include <stdexcept>
+#include <iterator>
+#include <algorithm>                 // std::swap
+#include <utility>      // Need std::pair
+#include <cstring>      // Need std::memset
+#include <typeinfo>
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/tbb_allocator.h"
+#include "tbb/spin_rw_mutex.h"
+#include "tbb/aligned_space.h"
+#include "tbb/atomic.h"
+// for test
+#include "tbb/spin_mutex.h"
+#include "time_framework.h"
+
+
+using namespace tbb;
+using namespace tbb::internal;
+
+namespace version_current {
+    namespace tbb { using namespace ::tbb; namespace internal {
+        using namespace ::tbb::internal;
+    } }
+    namespace std { using namespace ::std; }
+    #include "tbb/concurrent_hash_map.h"
+}
+typedef version_current::tbb::concurrent_hash_map<int,int> IntTable;
+
+#if OLDTABLE
+#undef __TBB_concurrent_hash_map_H
+namespace version_base {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    using namespace ::std;
+    #include OLDTABLEHEADER
+}
+typedef version_base::tbb::concurrent_hash_map<int,int> OldTable;
+#endif
+
+#if TESTTABLE
+#undef __TBB_concurrent_hash_map_H
+namespace version_new {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    #include TESTTABLEHEADER
+}
+typedef version_new::tbb::concurrent_hash_map<int,int> TestTable;
+#define TESTTABLE 1
+#endif
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+const int test2_size = 2000000;
+int Data[test2_size];
+
+template<typename TableType>
+struct TestHashCountStrings : TesterBase {
+    typedef typename TableType::accessor accessor;
+    typedef typename TableType::const_accessor const_accessor;
+    TableType Table;
+    int n_items;
+
+    std::string get_name(int testn) {
+        return Format("%d%% uniques", ++testn*10);
+    }
+
+    TestHashCountStrings() : TesterBase(3) {}
+    void init() {
+        n_items = value/threads_count;
+    }
+
+    void test_prefix(int testn, int t) {
+        barrier->wait();
+        if( t ) return;
+        Table.clear();
+        int uniques = test2_size/10*(testn+1);
+        srand(10101);
+        for(int i = 0; i < test2_size; i++)
+            Data[i] = rand()%uniques;
+    }
+
+    double test(int testn, int t)
+    {
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                Table.insert( std::make_pair(Data[i],t) );
+            }
+        return 0;
+    }
+};
+
+class test_hash_map_find : public TestProcessor {
+public:
+    test_hash_map_find() : TestProcessor("test_hash_map_fill") {}
+    void factory(int value, int threads) {
+        if(Verbose) printf("Processing with %d threads: %d...\n", threads, value);
+        process( value, threads,
+#if OLDTABLE
+            run("old", new ValuePerSecond<TestHashCountStrings<OldTable>, 1000000/*ns*/>() ),
+#endif
+            run("tbb", new ValuePerSecond<TestHashCountStrings<IntTable>, 1000000/*ns*/>() ),
+#if TESTTABLE
+            run("new", new ValuePerSecond<TestHashCountStrings<TestTable>,1000000/*ns*/>() ),
+#endif
+        end );
+        //stat->Print(StatisticsCollector::HTMLFile);
+    }
+};
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+int main(int argc, char* argv[]) {
+    if(argc>1) Verbose = true;
+    //if(argc>2) ExtraVerbose = true;
+    MinThread = 1; MaxThread = task_scheduler_init::default_num_threads();
+    ParseCommandLine( argc, argv );
+
+    ASSERT(tbb_allocator<int>::allocator_type() == tbb_allocator<int>::scalable, "expecting scalable allocator library to be loaded. Please build it by:\n\t\tmake tbbmalloc");
+
+    {
+        test_hash_map_find test_find; int o = test2_size;
+        for( int t=MinThread; t <= MaxThread; t++)
+            test_find.factory(o, t);
+        test_find.report.SetTitle("Operations per nanosecond", o);
+        test_find.report.Print(StatisticsCollector::HTMLFile|StatisticsCollector::ExcelXML);
+    }
+    return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_locked_work.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_locked_work.cpp
new file mode 100644 (file)
index 0000000..62b9f38
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+////// Test configuration ////////////////////////////////////////////////////
+#define SECONDS_RATIO 1000000 // microseconds
+
+#ifndef REPEAT_K
+#define REPEAT_K 50 // repeat coefficient
+#endif
+
+int outer_work[] = {/*256,*/ 64, 16, 4, 0};
+int inner_work[] = {32, 8, 0 };
+
+// keep it to calibrate the time of work without synchronization
+#define BOX1 "baseline"
+#define BOX1TEST TimeTest< TBB_Mutex<tbb::null_mutex>, SECONDS_RATIO >
+
+// enable/disable tests for:
+#define BOX2 "spin_mutex"
+#define BOX2TEST TimeTest< TBB_Mutex<tbb::spin_mutex>, SECONDS_RATIO >
+
+// enable/disable tests for:
+#define BOX3 "spin_rw_mutex"
+#define BOX3TEST TimeTest< TBB_Mutex<tbb::spin_rw_mutex>, SECONDS_RATIO >
+
+// enable/disable tests for:
+#define BOX4 "queuing_mutex"
+#define BOX4TEST TimeTest< TBB_Mutex<tbb::queuing_mutex>, SECONDS_RATIO >
+
+// enable/disable tests for:
+//#define BOX5 "queuing_rw_mutex"
+#define BOX5TEST TimeTest< TBB_Mutex<tbb::queuing_rw_mutex>, SECONDS_RATIO >
+
+//////////////////////////////////////////////////////////////////////////////
+
+#include <cstdlib>
+#include <math.h>
+#include <algorithm>                 // std::swap
+#include <utility>      // Need std::pair from here
+#include <sstream>
+#include "tbb/tbb_stddef.h"
+#include "tbb/null_mutex.h"
+#include "tbb/spin_rw_mutex.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/queuing_mutex.h"
+#include "tbb/queuing_rw_mutex.h"
+#include "tbb/mutex.h"
+
+#if INTEL_TRIAL==2
+#include "tbb/parallel_for.h" // enable threading by TBB scheduler
+#include "tbb/task_scheduler_init.h"
+#include "tbb/blocked_range.h" 
+#endif
+// for test
+#include "time_framework.h"
+
+using namespace tbb;
+using namespace tbb::internal;
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+//! base class for tests family
+struct TestLocks : TesterBase {
+    // Inherits "value", "threads_count", and other variables
+    TestLocks() : TesterBase(/*number of modes*/sizeof(outer_work)/sizeof(int)) {}
+    //! returns name of test part/mode
+    /*override*/std::string get_name(int testn) {
+        std::ostringstream buf;
+        buf.width(4); buf.fill('0');
+        buf << outer_work[testn]; // mode number
+        return buf.str();
+    }
+    //! enables results types and returns theirs suffixes
+    /*override*/const char *get_result_type(int, result_t type) const {
+        switch(type) {
+            case MIN: return " min";
+            case MAX: return " max";
+            default: return 0;
+        }
+    }
+    //! repeats count
+    int repeat_until(int /*test_n*/) const {
+        return REPEAT_K*100;//TODO: suggest better?
+    }
+    //! fake work
+    void do_work(int work) volatile {
+        for(int i = 0; i < work; i++) {
+            volatile int x = i;
+            __TBB_Pause(0); // just to call inline assembler
+            x *= work/threads_count;
+        }
+    }
+};
+
+//! template test unit for any of TBB mutexes
+template<typename M>
+struct TBB_Mutex : TestLocks {
+    M mutex;
+
+    double test(int testn, int /*threadn*/)
+    {
+        for(int r = 0; r < repeat_until(testn); ++r) {
+            do_work(outer_work[testn]);
+            {
+                typename M::scoped_lock with(mutex);
+                do_work(/*inner work*/value);
+            }
+        }
+        return 0;
+    }
+};
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+//Using BOX declarations
+#include "time_sandbox.h"
+
+// run tests for each of inner work value
+void RunLoops(test_sandbox &the_test, int thread) {
+    for( unsigned i=0; i<sizeof(inner_work)/sizeof(int); ++i )
+        the_test.factory(inner_work[i], thread);
+}
+
+int main(int argc, char* argv[]) {
+    if(argc>1) Verbose = true;
+    int DefThread = task_scheduler_init::default_num_threads();
+    MinThread = 1; MaxThread = DefThread+1;
+    ParseCommandLine( argc, argv );
+    ASSERT(MinThread <= MaxThread, 0);
+#if INTEL_TRIAL && defined(__TBB_parallel_for_H)
+    task_scheduler_init me(MaxThread);
+#endif
+    {
+        test_sandbox the_test("time_locked_work", StatisticsCollector::ByThreads);
+        //TODO: refactor this out as RunThreads(test&)
+        for( int t = MinThread; t < DefThread && t <= MaxThread; t *= 2)
+            RunLoops( the_test, t ); // execute undersubscribed threads
+        if( DefThread > MinThread && DefThread <= MaxThread )
+            RunLoops( the_test, DefThread ); // execute on all hw threads
+        if( DefThread < MaxThread)
+            RunLoops( the_test, MaxThread ); // execute requested oversubscribed threads
+
+        the_test.report.SetTitle("Time of lock/unlock for mutex Name with Outer and Inner work");
+        //the_test.report.SetStatisticFormula("1AVG per size", "=AVERAGE(ROUNDS)");
+        the_test.report.Print(StatisticsCollector::HTMLFile|StatisticsCollector::ExcelXML, /*ModeName*/ "Outer work");
+    }
+    return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_sandbox.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_sandbox.h
new file mode 100644 (file)
index 0000000..158ebe7
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TIME_FRAMEWORK_H__
+#error time_framework.h must be included
+#endif
+
+#ifdef BOX1
+namespace sandbox1 {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+#   ifdef BOX1HEADER
+#   include BOX1HEADER
+#   endif
+    typedef ::BOX1TEST testbox;
+}
+#endif
+#ifdef BOX2
+namespace sandbox2 {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+#   ifdef BOX2HEADER
+#   include BOX2HEADER
+#   endif
+    typedef ::BOX2TEST testbox;
+}
+#endif
+#ifdef BOX3
+namespace sandbox3 {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+#   ifdef BOX3HEADER
+#   include BOX3HEADER
+#   endif
+    typedef ::BOX3TEST testbox;
+}
+#endif
+#ifdef BOX4
+namespace sandbox4 {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+#   ifdef BOX4HEADER
+#   include BOX4HEADER
+#   endif
+    typedef ::BOX4TEST testbox;
+}
+#endif
+#ifdef BOX5
+namespace sandbox5 {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+#   ifdef BOX5HEADER
+#   include BOX5HEADER
+#   endif
+    typedef ::BOX5TEST testbox;
+}
+#endif
+#ifdef BOX6
+namespace sandbox6 {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+#   ifdef BOX6HEADER
+#   include BOX6HEADER
+#   endif
+    typedef ::BOX6TEST testbox;
+}
+#endif
+#ifdef BOX7
+namespace sandbox7 {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+#   ifdef BOX7HEADER
+#   include BOX7HEADER
+#   endif
+    typedef ::BOX7TEST testbox;
+}
+#endif
+#ifdef BOX8
+namespace sandbox8 {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+#   ifdef BOX8HEADER
+#   include BOX8HEADER
+#   endif
+    typedef ::BOX8TEST testbox;
+}
+#endif
+#ifdef BOX9
+namespace sandbox9 {
+    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+#   ifdef BOX9HEADER
+#   include BOX9HEADER
+#   endif
+    typedef ::BOX9TEST testbox;
+}
+#endif
+
+//if harness.h included
+#if defined(ASSERT) && !HARNESS_NO_PARSE_COMMAND_LINE
+#ifndef TEST_PREFIX
+#define TEST_PREFIX if(Verbose) printf("Processing with %d threads: %ld...\n", threads, value);
+#endif
+#endif//harness included
+
+#ifndef TEST_PROCESSOR_NAME
+#define TEST_PROCESSOR_NAME test_sandbox
+#endif
+
+class TEST_PROCESSOR_NAME : public TestProcessor {
+public:
+    TEST_PROCESSOR_NAME(const char *name, StatisticsCollector::Sorting sort_by = StatisticsCollector::ByAlg)
+        : TestProcessor(name, sort_by) {}
+    void factory(arg_t value, int threads) {
+#ifdef TEST_PREFIX
+        TEST_PREFIX
+#endif
+        process( value, threads,
+#define RUNBOX(n) run(#n"."BOX##n, new sandbox##n::testbox() )
+#ifdef BOX1
+        RUNBOX(1),
+#endif
+#ifdef BOX2
+        RUNBOX(2),
+#endif
+#ifdef BOX3
+        RUNBOX(3),
+#endif
+#ifdef BOX4
+        RUNBOX(4),
+#endif
+#ifdef BOX5
+        RUNBOX(5),
+#endif
+#ifdef BOX6
+        RUNBOX(6),
+#endif
+#ifdef BOX7
+        RUNBOX(7),
+#endif
+#ifdef BOX8
+        RUNBOX(8),
+#endif
+#ifdef BOX9
+        RUNBOX(9),
+#endif
+        end );
+#ifdef TEST_POSTFIX
+        TEST_POSTFIX
+#endif
+    }
+};
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_unit.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_unit.cpp
new file mode 100644 (file)
index 0000000..8d8162d
--- /dev/null
@@ -0,0 +1,291 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+#include <cmath>
+#include <cstdlib>
+#include <cerrno>
+#include <cfloat>
+#include <vector>
+#include <algorithm>
+
+#include "../src/test/harness.h"
+
+#if  __linux__ || __APPLE__ || __FreeBSD__
+    #include <sys/resource.h>
+#endif /* __APPLE__ */
+
+// The code, performance of which is to be measured, is surrounded by the StartSimpleTiming
+// and StopSimpleTiming macros. It is called "target code" or "code of interest" hereafter.
+//
+// The target code is executed inside the nested loop. Nesting is necessary to allow
+// measurements on arrays that fit cache of a particular level, while making the load
+// big enough to eliminate the influence of random deviations.
+//
+// Macro StartSimpleTiming defines reduction variable "util::anchor", which may be modified (usually 
+// by adding to) by the target code. This can be necessary to prevent optimizing compilers 
+// from throwing out the code of interest. Besides, if the target code is complex enough, 
+// make sure that all its branches contribute (directly or indirectly) to the value 
+// being added to the "util::anchor" variable.
+//
+// To factor out overhead introduced by the measurement infra code it is recommended to make 
+// a calibration run with target code replaced by a no-op (but still modifying "sum"), and
+// store the resulting time in the "util::base" variable.
+//
+// A generally good approach is to make the target code use elements of a preliminary 
+// initialized array. Then for calibration run you just need to add vector elements 
+// to the "sum" variable. To get rid of memory access delays make the array small 
+// enough to fit L2 or L1 cache (play with StartSimpleTiming arguments if necessary).
+//
+// Macro CalibrateSimpleTiming performs default calibration using "util::anchor += i;" operation.
+//
+// Macro ANCHOR_TYPE defines the type of the reduction variable. If it was not 
+// defined  before including this header, it is defined as size_t. Depending on 
+// the target code modern super scalar architectures may blend reduction operation
+// and instructions of interest differently for different target alternatives. So
+// you may play with the type to minimize out-of-order and parallel execution impact
+// on the calibration time veracity. You may even end up with different reduction 
+// variable types (and different calibration times) for different measurements.
+
+
+namespace util {
+
+typedef std::vector<double>    durations_t;
+
+    void trace_histogram ( const durations_t& t, char* histogramFileName )
+    {
+        FILE* f = histogramFileName ? fopen(histogramFileName, "wt") : stdout;
+        size_t  n = t.size();
+        const size_t num_buckets = 100;
+        double  min_val = *std::min_element(t.begin(), t.end()),
+                max_val = *std::max_element(t.begin(), t.end()),
+                bucket_size = (max_val - min_val) / num_buckets;
+        std::vector<size_t> hist(num_buckets + 1, 0);
+        for ( size_t i = 0; i < n; ++i )
+            ++hist[size_t((t[i]-min_val)/bucket_size)];
+        fprintf (f, "Histogram: nvals = %u, min = %g, max = %g, nbuckets = %u\n", (unsigned)n, min_val, max_val, (unsigned)num_buckets);
+        double bucket = min_val;
+        for ( size_t i = 0; i <= num_buckets; ++i, bucket+=bucket_size )
+            fprintf (f, "%12g\t%u\n", bucket, (unsigned)hist[i]);
+        fclose(f);
+    }
+
+    double average ( const durations_t& d, double& variation_percent, double& std_dev_percent )
+    {
+        durations_t t = d;
+        if ( t.size() > 5 ) {
+            t.erase(std::min_element(t.begin(), t.end()));
+            t.erase(std::max_element(t.begin(), t.end()));
+        }
+        size_t  n = t.size();
+        double  sum = 0,
+                min_val = *std::min_element(t.begin(), t.end()),
+                max_val = *std::max_element(t.begin(), t.end());
+        for ( size_t i = 0; i < n; ++i )
+            sum += t[i];
+        double  avg = sum / n,
+                std_dev = 0;
+        for ( size_t i = 0; i < n; ++i ) {
+            double    dev = fabs(t[i] - avg);
+            std_dev += dev * dev;
+        }
+        std_dev = sqrt(std_dev / n);
+        std_dev_percent = std_dev / avg * 100;
+        variation_percent = 100 * (max_val - min_val) / avg;
+        return avg;
+    }
+
+    static int num_threads;
+
+    static double   base = 0,
+                    base_dev = 0,
+                    base_dev_percent = 0;
+
+    static char *empty_fmt = "";
+    static int rate_field_len = 11;
+
+#if !defined(ANCHOR_TYPE)
+    #define ANCHOR_TYPE size_t
+#endif
+
+    static ANCHOR_TYPE anchor = 0;
+    
+    static double sequential_time = 0;
+
+
+#define StartSimpleTiming(nOuter, nInner) {             \
+    tbb::tick_count t1, t0 = tbb::tick_count::now();    \
+    for ( size_t j = 0; l < nOuter; ++l ) {             \
+        for ( size_t i = 0; i < nInner; ++i ) {
+
+#define StopSimpleTiming(res)                   \
+        }                                       \
+        util::anchor += (ANCHOR_TYPE)l;         \
+    }                                           \
+    t1 = tbb::tick_count::now();                \
+    printf (util::empty_fmt, util::anchor);     \
+    res = (t1-t0).seconds() - util::base;       \
+}
+
+#define CalibrateSimpleTiming(T, nOuter, nInner)    \
+    StartSimpleTiming(nOuter, nInner);              \
+        util::anchor += (ANCHOR_TYPE)i;             \
+    StopSimpleTiming(util::base);
+
+
+#define StartTimingImpl(nRuns, nOuter, nInner)      \
+    tbb::tick_count t1, t0;                         \
+    for ( size_t k = 0; k < nRuns; ++k )  {         \
+        t0 = tbb::tick_count::now();                \
+        for ( size_t l = 0; l < nOuter; ++l ) {     \
+            for ( size_t i = 0; i < nInner; ++i ) {
+
+#define StartTiming(nRuns, nOuter, nInner) {        \
+    util::durations_t  t_(nRuns);                   \
+    StartTimingImpl(nRuns, nOuter, nInner)
+
+#define StartTimingEx(vDurations, nRuns, nOuter, nInner) {  \
+    util::durations_t  &t_ = vDurations;                    \
+    vDurations.resize(nRuns);                               \
+    StartTimingImpl(nRuns, nOuter, nInner)
+
+#define StopTiming(Avg, StdDev, StdDevPercent)      \
+            }                                       \
+            util::anchor += (ANCHOR_TYPE)l;         \
+        }                                           \
+        t1 = tbb::tick_count::now();                \
+        t_[k] = (t1 - t0).seconds()/nrep;           \
+    }                                               \
+    printf (util::empty_fmt, util::anchor);         \
+    Avg = util::average(t_, StdDev, StdDevPercent); \
+}
+
+#define CalibrateTiming(nRuns, nOuter, nInner)      \
+    StartTiming(nRuns, nOuter, nInner);             \
+        util::anchor += (ANCHOR_TYPE)i;             \
+    StopTiming(util::base, util::base_dev, util::base_dev_percent);
+
+} // namespace util
+
+
+#ifndef NRUNS
+    #define NRUNS               7
+#endif
+
+#ifndef ONE_TEST_DURATION
+    #define ONE_TEST_DURATION   0.01
+#endif
+
+#define no_histogram  ((char*)-1)
+
+inline 
+double RunTestImpl ( const char* title, void (*pfn)(), char* histogramFileName = no_histogram ) {
+    double  time = 0, variation = 0, deviation = 0;
+    size_t nrep = 1;
+    while (true) {
+        CalibrateTiming(NRUNS, 1, nrep);
+        StartTiming(NRUNS, 1, nrep);
+        pfn();
+        StopTiming(time, variation, deviation);
+        time -= util::base;
+        if ( time > 1e-6 )
+            break;
+        nrep *= 2;
+    }
+    nrep *= (size_t)ceil(ONE_TEST_DURATION/time);
+    CalibrateTiming(NRUNS, 1, nrep);    // sets util::base
+    util::durations_t  t;
+    StartTimingEx(t, NRUNS, 1, nrep);
+        pfn();
+    StopTiming(time, variation, deviation);
+    if ( histogramFileName != (char*)-1 )
+        util::trace_histogram(t, histogramFileName);
+    double clean_time = time - util::base;
+    if ( title ) {
+        // Deviation (in percent) is calulated for the Gross time
+        printf ("\n%-34s %.2e  %5.1f      ", title, clean_time, deviation);
+        if ( util::sequential_time != 0  )
+            //printf ("% .2e  ", clean_time - util::sequential_time);
+            printf ("% 10.1f      ", 100*(clean_time - util::sequential_time)/util::sequential_time);
+        else
+            printf ("%*s ", util::rate_field_len, "");
+        printf ("%-9u %1.6f    |", (unsigned)nrep, time * nrep);
+    }
+    return clean_time;
+}
+
+
+/// Runs the test function, does statistical processing, and, if title is nonzero, prints results.
+/** If histogramFileName is a string, the histogram of individual runs is generated and stored
+    in a file with the given name. If it is NULL then the histogram is printed on the console.
+    By default no histogram is generated. 
+    The histogram format is: "rate bucket start" "number of tests in this bucket". **/
+inline 
+void RunTest ( const char* title_fmt, size_t workload_param, void (*pfn_test)(), char* histogramFileName = no_histogram ) {
+    char title[1024];
+    sprintf(title, title_fmt, (long)workload_param);
+    RunTestImpl(title, pfn_test, histogramFileName);
+}
+
+inline 
+void CalcSequentialTime ( void (*pfn)() ) {
+    util::sequential_time = RunTestImpl(NULL, pfn) / util::num_threads;
+}
+
+inline 
+void ResetSequentialTime () {
+    util::sequential_time = 0;
+}
+
+
+inline void PrintTitle() {
+    //printf ("%-32s %-*s Std Dev,%%  %-*s  Repeats   Gross time  Infra time  | NRUNS = %u", 
+    //        "Test name", util::rate_field_len, "Rate", util::rate_field_len, "Overhead", NRUNS);
+    printf ("%-34s %-*s Std Dev,%%  Par.overhead,%%  Repeats   Gross time  | Nruns %u, Nthreads %d", 
+            "Test name", util::rate_field_len, "Rate", NRUNS, util::num_threads);
+}
+
+void Test();
+
+inline
+int test_main( int argc, char* argv[] ) {
+    ParseCommandLine( argc, argv );
+    ASSERT (MinThread>=2, "Minimal number of threads must be 2 or more");
+    char buf[128];
+    util::rate_field_len = 2 + sprintf(buf, "%.1e", 1.1);
+    for ( int i = MinThread; i <= MaxThread; ++i ) {
+        tbb::task_scheduler_init init (i);
+        util::num_threads = i;
+        PrintTitle();
+        Test();
+        printf("\n");
+    }
+    printf("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_vector.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/perf/time_vector.cpp
new file mode 100644 (file)
index 0000000..f2d8672
--- /dev/null
@@ -0,0 +1,256 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+//#define DO_SCALABLEALLOC
+
+#include <cstdlib>
+#include <cmath>
+#include <vector>
+#include <algorithm>
+#include <functional>
+#include <numeric>
+#include "tbb/tbb_stddef.h"
+#include "tbb/spin_mutex.h"
+#ifdef DO_SCALABLEALLOC
+#include "tbb/scalable_allocator.h"
+#endif
+#include "tbb/concurrent_vector.h"
+#include "tbb/tbb_allocator.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/tick_count.h"
+#include "tbb/blocked_range.h"
+#include "../test/harness.h"
+//#include "harness_barrier.h"
+#include "../test/harness_allocator.h"
+#define STATISTICS_INLINE
+#include "statistics.h"
+
+using namespace tbb;
+bool ExtraVerbose = false;
+
+class Timer {
+    tbb::tick_count tick;
+public:
+    Timer() { tick = tbb::tick_count::now(); }
+    double get_time()  { return (tbb::tick_count::now() - tick).seconds(); }
+    double diff_time(const Timer &newer) { return (newer.tick - tick).seconds(); }
+    double mark_time() { tick_count t1(tbb::tick_count::now()), t2(tick); tick = t1; return (t1 - t2).seconds(); }
+    double mark_time(const Timer &newer) { tick_count t(tick); tick = newer.tick; return (tick - t).seconds(); }
+};
+
+/************************************************************************/
+/* TEST1                                                                */
+/************************************************************************/
+#define mk_vector_test1(v, a) vector_test1<v<Timer, static_counting_allocator<a<Timer> > >, v<double, static_counting_allocator<a<double> > > >
+template<class timers_vector_t, class values_vector_t>
+class vector_test1 {
+    const char *mode;
+    StatisticsCollector &stat;
+    StatisticsCollector::TestCase key[16];
+
+public:
+    vector_test1(const char *m, StatisticsCollector &s)  :  mode(m), stat(s) {}
+
+    vector_test1 &operator()(size_t len) {
+        if(Verbose) printf("test1<%s>(%u): collecting timing statistics\n", mode, unsigned(len));
+        __TBB_ASSERT(sizeof(Timer) == sizeof(double), NULL);
+        static const char *test_names[] = {
+            "b)creation wholly",
+            "a)creation by push",
+            "c)operation time per item",
+            0 };
+        for(int i = 0; test_names[i]; ++i) key[i] = stat.SetTestCase(test_names[i], mode, len);
+
+        Timer timer0; timers_vector_t::allocator_type::init_counters();
+        timers_vector_t tv(len);
+        Timer timer1; values_vector_t::allocator_type::init_counters();
+        values_vector_t dv;
+        for (size_t i = 0; i < len; ++i)
+            dv.push_back( i );
+        Timer timer2;
+        for (size_t i = 0; i < len; ++i)
+        {
+            dv[len-i-1] = timer0.diff_time(tv[i]);
+            tv[i].mark_time();
+        }
+        stat.AddStatisticValue( key[2], "1total, ms", "%.3f", timer2.get_time()*1000.0 );
+        stat.AddStatisticValue( key[1], "1total, ms", "%.3f", timer1.diff_time(timer2)*1000.0 );
+        stat.AddStatisticValue( key[0], "1total, ms", "%.3f", timer0.diff_time(timer1)*1000.0 );
+        //allocator statistics
+        stat.AddStatisticValue( key[0], "2total allocations", "%d", int(timers_vector_t::allocator_type::allocations) );
+        stat.AddStatisticValue( key[1], "2total allocations", "%d", int(values_vector_t::allocator_type::allocations) );
+        stat.AddStatisticValue( key[2], "2total allocations", "%d",  0);
+        stat.AddStatisticValue( key[0], "3total alloc#items", "%d", int(timers_vector_t::allocator_type::items_allocated) );
+        stat.AddStatisticValue( key[1], "3total alloc#items", "%d", int(values_vector_t::allocator_type::items_allocated) );
+        stat.AddStatisticValue( key[2], "3total alloc#items", "%d",  0);
+        //remarks
+        stat.AddStatisticValue( key[0], "9note", "segment creation time, ns:");
+        stat.AddStatisticValue( key[2], "9note", "average op-time per item, ns:");
+        Timer last_timer(timer2); double last_value = 0;
+        for (size_t j = 0, i = 2; i < len; i *= 2, j++) {
+            stat.AddRoundResult( key[0], (dv[len-i-1]-last_value)*1000000.0 );
+            last_value = dv[len-i-1];
+            stat.AddRoundResult( key[2], last_timer.diff_time(tv[i])/double(i)*1000000.0 );
+            last_timer = tv[i];
+            stat.SetRoundTitle(j, i);
+        }
+        tv.clear(); dv.clear();
+        //__TBB_ASSERT(timers_vector_t::allocator_type::items_allocated == timers_vector_t::allocator_type::items_freed, NULL);
+        //__TBB_ASSERT(values_vector_t::allocator_type::items_allocated == values_vector_t::allocator_type::items_freed, NULL);
+       return *this;
+    }
+};
+
+/************************************************************************/
+/* TEST2                                                                */
+/************************************************************************/
+#define mk_vector_test2(v, a) vector_test2<v<size_t, a<size_t> > >
+template<class vector_t>
+class vector_test2 {
+    const char *mode;
+    static const int ntrial = 10;
+    StatisticsCollector &stat;
+
+public:
+    vector_test2(const char *m, StatisticsCollector &s)  :  mode(m), stat(s) {}
+
+    vector_test2 &operator()(size_t len) {
+        if(Verbose) printf("test2<%s>(%u): performing standard transformation sequence on vector\n", mode, unsigned(len));
+        StatisticsCollector::TestCase init_key = stat.SetTestCase("allocate", mode, len);
+        StatisticsCollector::TestCase fill_key = stat.SetTestCase("fill", mode, len);
+        StatisticsCollector::TestCase proc_key = stat.SetTestCase("process", mode, len);
+        StatisticsCollector::TestCase full_key = stat.SetTestCase("total time", mode, len);
+        for (int i = 0; i < ntrial; i++) {
+            Timer timer0;
+            vector_t v1(len);
+            vector_t v2(len);
+            Timer timer1;
+            std::generate(v1.begin(), v1.end(), values(0));
+            std::generate(v2.begin(), v2.end(), values(size_t(-len)));
+            Timer timer2;
+            std::reverse(v1.rbegin(), v1.rend());
+            std::inner_product(v1.begin(), v1.end(), v2.rbegin(), 1);
+            std::sort(v1.rbegin(), v1.rend());
+            std::sort(v2.rbegin(), v2.rend());
+            std::set_intersection(v1.begin(), v1.end(), v2.rbegin(), v2.rend(), v1.begin());
+            Timer timer3;
+            stat.AddRoundResult( proc_key, timer2.diff_time(timer3)*1000.0 );
+            stat.AddRoundResult( fill_key, timer1.diff_time(timer2)*1000.0 );
+            stat.AddRoundResult( init_key, timer0.diff_time(timer1)*1000.0 );
+            stat.AddRoundResult( full_key, timer0.diff_time(timer3)*1000.0 );
+        }
+        stat.SetStatisticFormula("1Average", "=AVERAGE(ROUNDS)");
+        stat.SetStatisticFormula("2+/-", "=(MAX(ROUNDS)-MIN(ROUNDS))/2");
+        return *this;
+    }
+
+    class values
+    {
+        size_t value;
+    public:
+        values(size_t i) : value(i) {}
+        size_t operator()() {
+            return value++%(1|(value^55));
+        }
+    };
+};
+
+/************************************************************************/
+/* TEST3                                                                */
+/************************************************************************/
+#define mk_vector_test3(v, a) vector_test3<v<char, local_counting_allocator<a<char>, size_t > > >
+template<class vector_t>
+class vector_test3 {
+    const char *mode;
+    StatisticsCollector &stat;
+
+public:
+    vector_test3(const char *m, StatisticsCollector &s)  :  mode(m), stat(s) {}
+
+    vector_test3 &operator()(size_t len) {
+        if(Verbose) printf("test3<%s>(%u): collecting allocator statistics\n", mode, unsigned(len));
+        static const size_t sz = 1024;
+        vector_t V[sz];
+        StatisticsCollector::TestCase vinst_key = stat.SetTestCase("instances number", mode, len);
+        StatisticsCollector::TestCase count_key = stat.SetTestCase("allocations count", mode, len);
+        StatisticsCollector::TestCase items_key = stat.SetTestCase("allocated items", mode, len);
+        //stat.ReserveRounds(sz-1);
+        for (size_t c = 0, i = 0, s = sz/2; s >= 1 && i < sz; s /= 2, c++)
+        {
+            const size_t count = c? 1<<(c-1) : 0;
+            for (size_t e = i+s; i < e; i++) {
+                //if(count >= 16) V[i].reserve(count);
+                for (size_t j = 0; j < count; j++)
+                    V[i].push_back(j);
+            }
+            stat.SetRoundTitle ( c, count );
+            stat.AddRoundResult( vinst_key, s );
+            stat.AddRoundResult( count_key, V[i-1].get_allocator().allocations );
+            stat.AddRoundResult( items_key, V[i-1].get_allocator().items_allocated );
+        }
+        return *this;
+    }
+};
+
+/************************************************************************/
+/* TYPES SET FOR TESTS                                                  */
+/************************************************************************/
+#define types_set(n, title, op) { StatisticsCollector Collector("time_vector"#n); Collector.SetTitle title; \
+    {mk_vector_test##n(tbb::concurrent_vector, tbb::cache_aligned_allocator) ("TBB:NFS", Collector)op;} \
+    {mk_vector_test##n(tbb::concurrent_vector, tbb::tbb_allocator)           ("TBB:TBB", Collector)op;} \
+    {mk_vector_test##n(tbb::concurrent_vector, std::allocator)               ("TBB:STD", Collector)op;} \
+    {mk_vector_test##n(std::vector, tbb::cache_aligned_allocator)            ("STL:NFS", Collector)op;} \
+    {mk_vector_test##n(std::vector, tbb::tbb_allocator)                      ("STL:TBB", Collector)op;} \
+    {mk_vector_test##n(std::vector, std::allocator)                          ("STL:STD", Collector)op;} \
+    Collector.Print(StatisticsCollector::Stdout|StatisticsCollector::HTMLFile|StatisticsCollector::ExcelXML); }
+
+
+/************************************************************************/
+/* MAIN DRIVER                                                          */
+/************************************************************************/
+int main(int argc, char* argv[]) {
+       if(argc>1) Verbose = true;
+       if(argc>2) ExtraVerbose = true;
+    MinThread = 0; MaxThread = 500000; // use in another meaning - test#:problem size
+    ParseCommandLine( argc, argv );
+
+    ASSERT(tbb_allocator<int>::allocator_type() == tbb_allocator<int>::scalable, "expecting scalable allocator library to be loaded");
+    
+    if(!MinThread || MinThread == 1)
+        types_set(1, ("Vectors performance test #1 for %d", MaxThread), (MaxThread) )
+    if(!MinThread || MinThread == 2)
+        types_set(2, ("Vectors performance test #2 for %d", MaxThread), (MaxThread) )
+    if(!MinThread || MinThread == 3)
+        types_set(3, ("Vectors performance test #3 for %d", MaxThread), (MaxThread) )
+
+    if(!Verbose) printf("done\n");
+    return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/index.html
new file mode 100644 (file)
index 0000000..5c7bd50
--- /dev/null
@@ -0,0 +1,43 @@
+<HTML>
+<BODY>
+<H2>Overview</H2>
+
+This directory has source code that must be statically linked into an RML client.
+
+<H2>Files</H2>
+
+<DL>
+<DT><P><A HREF="rml_factory.h">rml_factory.h</A>
+<DD>Text shared by <A HREF="rml_omp.cpp">rml_omp.cpp</A> and <A HREF="rml_tbb.cpp">rml_tbb.cpp</A>.
+       This is not an ordinary include file, so it does not have an #ifndef guard.</P>
+</DL>
+
+<H3> Specific to client=OpenMP</H3>
+<DL>
+<DT><P><A HREF="rml_omp.cpp">rml_omp.cpp</A>
+<DD>Source file for OpenMP client.</P>
+<DT><P><A HREF="omp_dynamic_link.h">omp_dynamic_link.h</A>
+<DT><A HREF="omp_dynamic_link.cpp">omp_dynamic_link.cpp</A>
+<DD>Source files for dynamic linking support.  
+       The code is the code from the TBB source directory, but adjusted so that it 
+       appears in namespace <TT>__kmp</TT> instead of namespace <TT>tbb::internal</TT>.
+</DL>
+<H3> Specific to client=TBB</H3>
+<DL>
+<DT><P><A HREF="rml_tbb.cpp">rml_tbb.cpp</A>
+<DD>Source file for TBB client.  It uses the dynamic linking support from the TBB source directory.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/library_assert.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/library_assert.h
new file mode 100644 (file)
index 0000000..6d8300b
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef LIBRARY_ASSERT_H
+#define LIBRARY_ASSERT_H
+
+#ifndef  LIBRARY_ASSERT
+#ifdef KMP_ASSERT2
+#define LIBRARY_ASSERT(x,y) KMP_ASSERT2((x),(y))
+#else
+#include <assert.h>
+#define LIBRARY_ASSERT(x,y) assert(x)
+#endif
+#endif /* LIBRARY_ASSERT */
+
+#endif /* LIBRARY_ASSERT_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/omp_dynamic_link.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/omp_dynamic_link.cpp
new file mode 100644 (file)
index 0000000..0f89a3c
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "omp_dynamic_link.h"
+#include "library_assert.h"
+#include "tbb/dynamic_link.cpp" // Refers to src/tbb, not include/tbb
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/omp_dynamic_link.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/omp_dynamic_link.h
new file mode 100644 (file)
index 0000000..290b668
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __KMP_omp_dynamic_link_H
+#define __KMP_omp_dynamic_link_H
+
+#define OPEN_INTERNAL_NAMESPACE namespace __kmp {
+#define CLOSE_INTERNAL_NAMESPACE }
+
+#include "tbb/dynamic_link.h" // Refers to src/tbb, not include/tbb 
+
+#endif /* __KMP_omp_dynamic_link_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/rml_factory.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/rml_factory.h
new file mode 100644 (file)
index 0000000..2f584b9
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// No ifndef guard because this file is not a normal include file.
+
+// FIXME - resolve whether _debug version of the RML should have different suffix. */
+
+#if TBB_USE_DEBUG
+#define DEBUG_SUFFIX "_debug"
+#else
+#define DEBUG_SUFFIX
+#endif /* TBB_USE_DEBUG */
+
+// RML_SERVER_NAME is the name of the RML server library.
+#if _WIN32||_WIN64
+#define RML_SERVER_NAME "irml" DEBUG_SUFFIX ".dll"
+#elif __APPLE__
+#define RML_SERVER_NAME "libirml" DEBUG_SUFFIX ".dylib"
+#elif __linux__
+#define RML_SERVER_NAME "libirml" DEBUG_SUFFIX ".so.1"
+#elif __FreeBSD__ || __sun
+#define RML_SERVER_NAME "libirml" DEBUG_SUFFIX ".so"
+#else
+#error Unknown OS
+#endif
+
+#include "library_assert.h"
+
+const ::rml::versioned_object::version_type CLIENT_VERSION = 1;
+
+::rml::factory::status_type FACTORY::open() {
+    // Failure of following assertion indicates that factory is already open, or not zero-inited.
+    LIBRARY_ASSERT( !library_handle, NULL );
+    status_type (*open_factory_routine)( factory&, version_type&, version_type );
+    dynamic_link_descriptor server_link_table[4] = {
+        DLD(__RML_open_factory,open_factory_routine),
+        MAKE_SERVER(my_make_server_routine),
+        DLD(__RML_close_factory,my_wait_to_close_routine),
+        GET_INFO(my_call_with_server_info_routine),
+    };
+    status_type result;
+    dynamic_link_handle h;
+    if( dynamic_link( RML_SERVER_NAME, server_link_table, 4, 4, &h ) ) {
+        library_handle = h; 
+        version_type server_version;
+        status_type result = (*open_factory_routine)( *this, server_version, CLIENT_VERSION );
+        // server_version can be checked here for incompatibility here if necessary.
+        return result;
+    } else {
+        library_handle = NULL;
+        result = st_not_found;
+    }
+    return result;
+}
+
+void FACTORY::close() {
+    if( library_handle ) {
+        (*my_wait_to_close_routine)(*this);
+        dynamic_link_handle h = library_handle;
+        dynamic_unlink(h);
+        library_handle = NULL;
+    }
+}
+
+::rml::factory::status_type FACTORY::make_server( SERVER*& s, CLIENT& c) {
+    // Failure of following assertion means that factory was not successfully opened.
+    LIBRARY_ASSERT( my_make_server_routine, NULL );
+    return (*my_make_server_routine)(*this,s,c);
+}
+
+void FACTORY::call_with_server_info( ::rml::server_info_callback_t cb, void* arg ) const {
+    // Failure of following assertion means that factory was not successfully opened.
+    LIBRARY_ASSERT( my_call_with_server_info_routine, NULL );
+    (*my_call_with_server_info_routine)( cb, arg );
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/rml_omp.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/rml_omp.cpp
new file mode 100644 (file)
index 0000000..38a5a5f
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "rml_omp.h"
+#include "omp_dynamic_link.h"
+#include <assert.h>
+
+namespace __kmp {
+namespace rml {
+
+#define MAKE_SERVER(x) DLD(__KMP_make_rml_server,x)
+#define GET_INFO(x) DLD(__KMP_call_with_my_server_info,x)
+#define SERVER omp_server 
+#define CLIENT omp_client
+#define FACTORY omp_factory
+#include "rml_factory.h"
+
+} // rml
+} // __kmp
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/rml_tbb.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/client/rml_tbb.cpp
new file mode 100644 (file)
index 0000000..7e1612e
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "../include/rml_tbb.h"
+#include "tbb/dynamic_link.h"
+#include <assert.h>
+
+namespace tbb {
+namespace internal {
+namespace rml {
+
+#define MAKE_SERVER(x) DLD(__TBB_make_rml_server,x)
+#define GET_INFO(x) DLD(__TBB_call_with_my_server_info,x)
+#define SERVER tbb_server 
+#define CLIENT tbb_client
+#define FACTORY tbb_factory
+#include "rml_factory.h"
+
+} // rml
+} // internal
+} // tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/include/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/include/index.html
new file mode 100644 (file)
index 0000000..aacad33
--- /dev/null
@@ -0,0 +1,30 @@
+<HTML>
+<BODY>
+<H2>Overview</H2>
+
+This directory has the include files for the Resource Management Layer (RML).
+
+<H2>Files</H2>
+
+<DL>
+<DT><P><A HREF="rml_base.h">rml_base.h</A>
+<DD>Interfaces shared by TBB and OpenMP.</P>
+<DT><P><A HREF="rml_omp.h">rml_omp.h</A>
+<DD>Interface exclusive to OpenMP.</P>
+<DT><P><A HREF="rml_tbb.h">rml_tbb.h</A>
+<DD>Interface exclusive to TBB.</P>
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/include/rml_base.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/include/rml_base.h
new file mode 100644 (file)
index 0000000..1b78abe
--- /dev/null
@@ -0,0 +1,186 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Header guard and namespace names follow rml conventions.
+
+#ifndef __RML_rml_base_H
+#define __RML_rml_base_H
+
+#include <cstddef>
+#if _WIN32||_WIN64
+#include <windows.h>
+#endif /* _WIN32||_WIN64 */
+
+#ifdef RML_PURE_VIRTUAL_HANDLER
+#define RML_PURE(T) {RML_PURE_VIRTUAL_HANDLER(); return (T)0;}
+#else
+#define RML_PURE(T) = 0;
+#endif
+
+namespace rml {
+
+//! Base class for denying assignment and copy constructor.
+class no_copy {
+    void operator=( no_copy& );
+    no_copy( no_copy& );
+public:
+    no_copy() {}
+};
+
+class server;
+
+class versioned_object {
+public:
+    //! A version number
+    typedef unsigned version_type;
+    
+    //! Get version of this object
+    /** The version number is incremented when a incompatible change is introduced.
+        The version number is invariant for the lifetime of the object. */
+    virtual version_type version() const RML_PURE(version_type)
+};
+
+//! Represents a client's job for an execution context.
+/** A job object is constructed by the client.
+    Not derived from versioned_object because version is same as for client. */
+class job {
+    friend class server;
+
+    //! Word for use by server
+    /** Typically the server uses it to speed up internal lookup.
+        Clients must not modify the word. */
+    void* scratch_ptr;
+};
+
+//! Information that client provides to server when asking for a server.
+/** The instance must endure at least until acknowledge_close_connection is called. */
+class client: public versioned_object {
+public:
+    //! Typedef for convenience of derived classes in other namespaces.
+    typedef ::rml::job job;
+
+    //! Index of a job in a job pool
+    typedef unsigned size_type;
+
+    //! Maximum number of threads that client can exploit profitably if nothing else is running on the machine.  
+    /** The returned value should remain invariant for the lifetime of the connection.  [idempotent] */
+    virtual size_type max_job_count() const RML_PURE(size_type)
+
+    //! Minimum stack size for each job.  0 means to use default stack size. [idempotent]
+    virtual size_t min_stack_size() const RML_PURE(size_t)
+
+    //! Server calls this routine when it needs client to create a job object.
+    /** Value of index is guaranteed to be unique for each job and in the half-open 
+        interval [0,max_job_count) */
+    virtual job* create_one_job() RML_PURE(job*)
+
+    //! Acknowledge that all jobs have been cleaned up.
+    /** Called by server in response to request_close_connection
+        after cleanup(job) has been called for each job. */
+    virtual void acknowledge_close_connection() RML_PURE(void)
+
+    enum policy_type {turnaround,throughput};
+
+    //! Inform server of desired policy. [idempotent]
+    virtual policy_type policy() const RML_PURE(policy_type)
+
+    //! Inform client that server is done with *this.   
+    /** Client should destroy the job.
+        Not necessarily called by execution context represented by *this.
+        Never called while any other thread is working on the job. */
+    virtual void cleanup( job& ) RML_PURE(void)
+
+    // In general, we should not add new virtual methods, because that would 
+    // break derived classes.  Think about reserving some vtable slots.  
+};
+
+// Information that server provides to client.
+// Virtual functions are routines provided by the server for the client to call. 
+class server: public versioned_object {
+public:
+    //! Typedef for convenience of derived classes.
+    typedef ::rml::job job;
+
+    //! Request that connection to server be closed.
+    /** Causes each job associated with the client to have its cleanup method called,
+        possibly by a thread different than the thread that created the job. 
+        This method can return before all cleanup methods return. 
+        Actions that have to wait after all cleanup methods return should be part of 
+        client::acknowledge_close_connection. */
+    virtual void request_close_connection() = 0;
+
+    //! Called by client thread when it reaches a point where it cannot make progress until other threads do.  
+    virtual void yield() = 0;
+
+    //! Called by client to indicate a change in the number of non-RML threads that are running.
+    /** This is a performance hint to the RML to adjust how many many threads it should let run 
+        concurrently.  The delta is the change in the number of non-RML threads that are running.
+        For example, a value of 1 means the client has started running another thread, and a value 
+        of -1 indicates that the client has blocked or terminated one of its threads. */
+    virtual void independent_thread_number_changed( int delta ) = 0;
+
+    //! Default level of concurrency for which RML strives when there are no non-RML threads running.
+    /** Normally, the value is the hardware concurrency minus one. 
+        The "minus one" accounts for the thread created by main(). */
+    virtual unsigned default_concurrency() const = 0;
+
+protected:
+    static void*& scratch_ptr( job& j ) {return j.scratch_ptr;}
+};
+
+class factory {
+public:
+    //! status results
+    enum status_type {
+        st_success=0,
+        st_connection_exists,
+        st_not_found,
+        st_incompatible
+    };
+
+    //! Scratch pointer for use by RML.
+    void* scratch_ptr;
+
+protected:
+    //! Pointer to routine that waits for server to indicate when client can close itself.
+    status_type (*my_wait_to_close_routine)( factory& );
+
+public:
+    //! Library handle for use by RML.
+#if _WIN32||_WIN64
+    HMODULE library_handle;
+#else
+    void* library_handle;
+#endif /* _WIN32||_WIN64 */ 
+};
+
+typedef void (*server_info_callback_t)( void* arg, const char* server_info );
+
+} // namespace rml
+
+#endif /* __RML_rml_base_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/include/rml_omp.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/include/rml_omp.h
new file mode 100644 (file)
index 0000000..d664908
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Header guard and namespace names follow OpenMP runtime conventions.
+
+#ifndef KMP_RML_OMP_H
+#define KMP_RML_OMP_H
+
+#include "rml_base.h"
+
+namespace __kmp {
+namespace rml {
+
+class omp_client;
+
+//------------------------------------------------------------------------
+// Classes instantiated by the server
+//------------------------------------------------------------------------
+
+//! Represents a set of worker threads provided by the server.
+class omp_server: public ::rml::server {
+public:
+    //! A number of threads
+    typedef unsigned size_type;
+
+    //! Return the number of coins in the bank. (negative if machine is oversubscribed).
+    virtual int current_balance() const RML_PURE(int);
+  
+    //! Request n coins.  Returns number of coins granted. Oversubscription amount if negative.
+    /** Always granted if is_strict is true.
+        - Positive or zero result indicates that the number of coins was taken from the bank.
+        - Negative result indicates that no coins were taken, and that the bank has deficit 
+          by that amount and the caller (if being a good citizen) should return that many coins.
+     */
+    virtual int try_increase_load( size_type /*n*/, bool /*strict*/ ) RML_PURE(size_type)
+
+    //! Return n coins into the bank.
+    virtual void decrease_load( size_type /*n*/ ) RML_PURE(void);
+
+    //! Convert n coins into n threads.
+    /** When a thread returns, it is converted back into a coin and the coin is returned to the bank. */
+    virtual void get_threads( size_type /*m*/, void* /*cookie*/, job* /*array*/[] ) RML_PURE(void);
+
+    /** Putting a thread to sleep - convert a thread into a coin
+        Waking up a thread        - convert a coin into a thread
+      
+       Note: conversion between a coin and a thread does not affect the accounting.
+     */
+};
+
+
+//------------------------------------------------------------------------
+// Classes (or base classes thereof) instantiated by the client
+//------------------------------------------------------------------------
+
+class omp_client: public ::rml::client {
+public:
+    //! Called by server thread when it runs its part of a parallel region.  
+    /** The index argument is a 0-origin index of this thread within the array
+        returned by method get_threads.  Server decreases the load by 1 after this method returns. */
+    virtual void process( job&, void* /*cookie*/, size_type /*index*/ ) RML_PURE(void)
+};
+
+/** Client must ensure that instance is zero-inited, typically by being a file-scope object. */
+class omp_factory: public ::rml::factory {
+
+    //! Pointer to routine that creates an RML server.
+    status_type (*my_make_server_routine)( omp_factory&, omp_server*&, omp_client& );
+
+    //! Pointer to routine that returns server version info.
+    void (*my_call_with_server_info_routine)( ::rml::server_info_callback_t cb, void* arg );
+
+public:
+    typedef ::rml::versioned_object::version_type version_type;
+    typedef omp_client client_type;
+    typedef omp_server server_type;
+
+    //! Open factory.
+    /** Dynamically links against RML library. 
+        Returns st_success, st_incompatible, or st_not_found. */
+    status_type open();
+
+    //! Factory method to be called by client to create a server object.
+    /** Factory must be open. 
+        Returns st_success or st_incompatible . */
+    status_type make_server( server_type*&, client_type& );
+
+    //! Close factory.
+    void close();
+
+    //! Call the callback with the server build info.
+    void call_with_server_info( ::rml::server_info_callback_t cb, void* arg ) const;
+};
+
+} // namespace rml
+} // namespace __kmp
+
+#endif /* KMP_RML_OMP_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/include/rml_tbb.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/include/rml_tbb.h
new file mode 100644 (file)
index 0000000..578e778
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Header guard and namespace names follow TBB conventions.
+
+#ifndef __TBB_rml_tbb_H
+#define __TBB_rml_tbb_H
+
+#include "rml_base.h"
+
+namespace tbb {
+namespace internal {
+namespace rml {
+
+class tbb_client;
+
+//------------------------------------------------------------------------
+// Classes instantiated by the server
+//------------------------------------------------------------------------
+class tbb_server: public ::rml::server {
+public:
+    //! Inform server of adjustments in the number of workers that the client can profitably use.
+    virtual void adjust_job_count_estimate( int delta ) = 0;
+};
+
+//------------------------------------------------------------------------
+// Classes instantiated by the client
+//------------------------------------------------------------------------
+
+class tbb_client: public ::rml::client {
+public:
+    //! Defined by TBB to steal a task and execute it.  
+    /** Called by server when wants an execution context to do some TBB work.
+        The method should return when it is okay for the thread to yield indefinitely. */
+    virtual void process( job& ) = 0;
+};
+
+/** Client must ensure that instance is zero-inited, typically by being a file-scope object. */
+class tbb_factory: public ::rml::factory {
+
+    //! Pointer to routine that creates an RML server.
+    status_type (*my_make_server_routine)( tbb_factory&, tbb_server*&, tbb_client& );
+
+    //! Pointer to routine that returns server version info.
+    void (*my_call_with_server_info_routine)( ::rml::server_info_callback_t cb, void* arg );
+
+public:
+    typedef ::rml::versioned_object::version_type version_type;
+    typedef tbb_client client_type;
+    typedef tbb_server server_type;
+
+    //! Open factory.
+    /** Dynamically links against RML library. 
+        Returns st_success, st_incompatible, or st_not_found. */
+    status_type open();
+
+    //! Factory method to be called by client to create a server object.
+    /** Factory must be open. 
+        Returns st_success or st_incompatible . */
+    status_type make_server( server_type*&, client_type& );
+
+    //! Close factory
+    void close();
+
+    //! Call the callback with the server build info
+    void call_with_server_info( ::rml::server_info_callback_t cb, void* arg ) const;
+};
+
+} // namespace rml
+} // namespace internal
+} // namespace tbb
+
+#endif /*__TBB_rml_tbb_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/index.html
new file mode 100644 (file)
index 0000000..9c403af
--- /dev/null
@@ -0,0 +1,32 @@
+<HTML>
+<BODY>
+<H2>Overview</H2>
+
+The subdirectories pertain to the Resource Management Layer (RML).
+
+<H2>Directories</H2>
+
+<DL>
+<DT><P><A HREF="include/index.html">include/</A>
+<DD>Include files used by clients of RML.</P>
+<DT><P><A HREF="client/index.html">client/</A>
+<DD>Source files for code that must be statically linked with a client.</P>
+<DT><P><A HREF="server/index.html">server/</A>
+<DD>Source files for the RML server.</P>
+<DT><P><A HREF="test">test/</A>
+<DD>Unit tests for RML server and its components.</P>
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/omp_nested.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/omp_nested.cpp
new file mode 100644 (file)
index 0000000..17985d5
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <cstddef>
+#include <cstdlib>
+#include <cstdio>
+#include <float.h>
+#include <math.h>
+#include <time.h>
+
+#include <omp.h>
+#include <assert.h>
+
+#include "thread_level.h"
+
+#if _WIN32||_WIN64
+#include <Windows.h> /* Need Sleep */
+#else
+#include <unistd.h>  /* Need usleep */
+#endif
+
+void MilliSleep( unsigned milliseconds ) {
+#if _WIN32||_WIN64
+    Sleep( milliseconds );
+#else
+    usleep( milliseconds*1000 );
+#endif /* _WIN32||_WIN64 */
+}
+
+// Algorithm parameters
+const int Max_OMP_Outer_Threads = 8;
+
+// Global variables
+int max_outer_threads = Max_OMP_Outer_Threads;
+
+// Print help on command-line arguments
+void help_message(char *prog_name) {
+  fprintf(stderr, "\n%s usage:\n", prog_name);
+  fprintf(stderr, 
+         "  Parameters:\n"
+         "    -o<num> : max # of threads OMP should use at outer level\n"
+         "\n  Help:\n"
+         "    -h : print this help message\n");
+}
+
+// Process command-line arguments
+void process_args(int argc, char *argv[], int *max_outer_t) {
+  (*max_outer_t) = omp_get_max_threads();
+  for (int i=1; i<argc; ++i) {  
+    if (argv[i][0] == '-') {
+      switch (argv[i][1]) {
+      case 'o': // set max_outer_threads
+       if (sscanf(&argv[i][2], "%d", max_outer_t) != 1 || *max_outer_t < 1) {
+         fprintf(stderr, "%s Warning: argument of -o option unacceptable: %s\n", argv[0], &argv[i][2]);
+         help_message(argv[0]);
+       }
+       break;
+      case 'h': // print help message
+       help_message(argv[0]);
+       exit(0);
+       break;
+      default:
+       fprintf(stderr, "%s: Warning: command-line option ignored: %s\n", argv[0], argv[i]);
+       help_message(argv[0]);
+       break;
+      }
+    } else {
+      fprintf(stderr, "%s: Warning: command-line option ignored: %s\n", argv[0], argv[i]);
+      help_message(argv[0]);
+    }
+  }
+}
+
+int main(int argc, char *argv[]) { 
+  process_args(argc, argv, &max_outer_threads);
+#ifdef LOG_THREADS
+  TotalThreadLevel.init();
+#endif
+
+  double start, end;
+  start = omp_get_wtime( );
+  
+#pragma omp parallel num_threads(max_outer_threads)
+  {
+    int omp_thread = omp_get_thread_num();
+#ifdef LOG_THREADS
+    if (omp_thread == 0)
+      TotalThreadLevel.change_level(omp_get_num_threads(), omp_outer);
+#endif
+    if (omp_thread == 0) {
+      MilliSleep(3000);
+#ifdef LOG_THREADS
+      TotalThreadLevel.change_level(-1, omp_outer);
+#endif
+#pragma omp parallel
+      {
+       int my_omp_thread = omp_get_thread_num();
+#ifdef LOG_THREADS
+       if (my_omp_thread == 0)
+         TotalThreadLevel.change_level(omp_get_num_threads(), omp_inner);
+#endif
+       printf("Inner thread %d nested inside outer thread %d\n", my_omp_thread, omp_thread);
+#ifdef LOG_THREADS
+       if (my_omp_thread == 0)
+         TotalThreadLevel.change_level(-omp_get_num_threads(), omp_inner);
+#endif
+      }
+#ifdef LOG_THREADS
+      TotalThreadLevel.change_level(1, omp_outer);
+#endif
+    }
+    else {
+      MilliSleep(6000);
+    }
+#ifdef LOG_THREADS
+    if (omp_thread == 0)
+      TotalThreadLevel.change_level(-omp_get_num_threads(), omp_outer);
+#endif
+  }
+  end = omp_get_wtime( );
+  printf("Simple test of nested OMP (%d outer threads max) took: %6.6f\n",
+        max_outer_threads, end-start);
+#ifdef LOG_THREADS
+  TotalThreadLevel.dump();
+#endif
+  return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/omp_simple.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/omp_simple.cpp
new file mode 100644 (file)
index 0000000..0d6f869
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <cstddef>
+#include <cstdlib>
+#include <cstdio>
+#include <float.h>
+#include <math.h>
+#include <time.h>
+
+#include <omp.h>
+#include <assert.h>
+
+#include "thread_level.h"
+
+#include "tbb/task.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+
+#if _WIN32||_WIN64
+#include <Windows.h> /* Need Sleep */
+#else
+#include <unistd.h>  /* Need usleep */
+#endif
+
+void MilliSleep( unsigned milliseconds ) {
+#if _WIN32||_WIN64
+    Sleep( milliseconds );
+#else
+    usleep( milliseconds*1000 );
+#endif /* _WIN32||_WIN64 */
+}
+
+using namespace std;
+using namespace tbb;
+
+// Algorithm parameters
+const int Max_TBB_Threads = 16;
+const int Max_OMP_Threads = 16;
+
+// Global variables
+int max_tbb_threads = Max_TBB_Threads;
+int max_omp_threads = Max_OMP_Threads;
+
+// Print help on command-line arguments
+void help_message(char *prog_name) {
+  fprintf(stderr, "\n%s usage:\n", prog_name);
+  fprintf(stderr, 
+         "  Parameters:\n"
+         "    -t<num> : max # of threads TBB should use\n"
+         "    -o<num> : max # of threads OMP should use\n"
+         "\n  Help:\n"
+         "    -h : print this help message\n");
+}
+
+// Process command-line arguments
+void process_args(int argc, char *argv[], int *max_tbb_t, int *max_omp_t) {
+  for (int i=1; i<argc; ++i) {  
+    if (argv[i][0] == '-') {
+      switch (argv[i][1]) {
+      case 't': // set max_tbb_threads
+       if (sscanf(&argv[i][2], "%d", max_tbb_t) != 1 || *max_tbb_t < 1) {
+         fprintf(stderr, "%s Warning: argument of -t option unacceptable: %s\n", argv[0], &argv[i][2]);
+         help_message(argv[0]);
+       }
+       break;
+      case 'o': // set max_omp_threads
+       if (sscanf(&argv[i][2], "%d", max_omp_t) != 1 || *max_omp_t < 1) {
+         fprintf(stderr, "%s Warning: argument of -o option unacceptable: %s\n", argv[0], &argv[i][2]);
+         help_message(argv[0]);
+       }
+       break;
+      case 'h': // print help message
+       help_message(argv[0]);
+       exit(0);
+       break;
+      default:
+       fprintf(stderr, "%s: Warning: command-line option ignored: %s\n", argv[0], argv[i]);
+       help_message(argv[0]);
+       break;
+      }
+    } else {
+      fprintf(stderr, "%s: Warning: command-line option ignored: %s\n", argv[0], argv[i]);
+      help_message(argv[0]);
+    }
+  }
+}
+
+int main(int argc, char *argv[]) { 
+  process_args(argc, argv, &max_tbb_threads, &max_omp_threads);
+  TotalThreadLevel.init();
+
+  double start, end;
+  start = omp_get_wtime();
+  
+#pragma omp parallel num_threads(max_omp_threads)
+  {
+    int omp_thread = omp_get_thread_num();
+#ifdef LOG_THREADS
+    if (omp_thread == 0)
+      TotalThreadLevel.change_level(omp_get_num_threads(), omp_outer);
+#endif
+    task_scheduler_init phase(max_tbb_threads);
+    if (omp_thread == 0) {
+      MilliSleep(3000);
+#ifdef LOG_THREADS
+      TotalThreadLevel.change_level(-1, omp_outer);
+#endif
+      parallel_for(blocked_range<size_t>(0, 1000), 
+                  [=](const blocked_range<size_t>& range) {
+#ifdef LOG_THREADS
+       TotalThreadLevel.change_level(1, tbb_inner);
+#endif
+#pragma ivdep
+       for (size_t i=range.begin(); i!=range.end(); ++i) {
+         if (i==range.begin())
+           printf("TBB range starting at %d on OMP thread %d\n", (int)i, omp_thread);
+       }
+#ifdef LOG_THREADS
+       TotalThreadLevel.change_level(-1, tbb_inner);
+#endif
+      }, auto_partitioner());
+#ifdef LOG_THREADS
+      TotalThreadLevel.change_level(1, omp_outer);
+#endif
+    }
+    else {
+      MilliSleep(6000);
+    }
+#ifdef LOG_THREADS
+    if (omp_thread == 0)
+      TotalThreadLevel.change_level(-omp_get_num_threads(), omp_outer);
+#endif
+  }
+  end = omp_get_wtime();
+  printf("Simple test of OMP (%d threads max) with TBB (%d threads max) inside took: %6.6f\n",
+        max_omp_threads, max_tbb_threads, end-start);
+#ifdef LOG_THREADS
+  TotalThreadLevel.dump();
+#endif
+  return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/tbb_multi_omp.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/tbb_multi_omp.cpp
new file mode 100644 (file)
index 0000000..3d906db
--- /dev/null
@@ -0,0 +1,194 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <cstddef>
+#include <cstdlib>
+#include <cstdio>
+#include <float.h>
+#include <math.h>
+#include <time.h>
+
+#include <omp.h>
+#include <assert.h>
+
+#include "thread_level.h"
+
+#include "tbb/task.h"
+#include "tbb/tick_count.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/scalable_allocator.h"
+
+#if _WIN32||_WIN64
+#include <Windows.h> /* Need Sleep */
+#else
+#include <unistd.h>  /* Need usleep */
+#endif
+
+void MilliSleep( unsigned milliseconds ) {
+#if _WIN32||_WIN64
+    Sleep( milliseconds );
+#else
+    usleep( milliseconds*1000 );
+#endif /* _WIN32||_WIN64 */
+}
+
+using namespace std;
+using namespace tbb;
+
+// Algorithm parameters
+const int Max_TBB_Threads = 16;
+const int Max_OMP_Threads = 16;
+
+// Global variables
+int max_tbb_threads = Max_TBB_Threads;
+int max_omp_threads = Max_OMP_Threads;
+
+// Print help on command-line arguments
+void help_message(char *prog_name) {
+  fprintf(stderr, "\n%s usage:\n", prog_name);
+  fprintf(stderr, 
+         "  Parameters:\n"
+         "    -t<num> : max # of threads TBB should use\n"
+         "    -o<num> : max # of threads OMP should use\n"
+         "\n  Help:\n"
+         "    -h : print this help message\n");
+}
+
+// Process command-line arguments
+void process_args(int argc, char *argv[], int *max_tbb_t, int *max_omp_t) {
+  for (int i=1; i<argc; ++i) {  
+    if (argv[i][0] == '-') {
+      switch (argv[i][1]) {
+      case 't': // set max_tbb_threads
+       if (sscanf(&argv[i][2], "%d", max_tbb_t) != 1 || *max_tbb_t < 1) {
+         fprintf(stderr, "%s Warning: argument of -t option unacceptable: %s\n", argv[0], &argv[i][2]);
+         help_message(argv[0]);
+       }
+       break;
+      case 'o': // set max_omp_threads
+       if (sscanf(&argv[i][2], "%d", max_omp_t) != 1 || *max_omp_t < 1) {
+         fprintf(stderr, "%s Warning: argument of -o option unacceptable: %s\n", argv[0], &argv[i][2]);
+         help_message(argv[0]);
+       }
+       break;
+      case 'h': // print help message
+       help_message(argv[0]);
+       exit(0);
+       break;
+      default:
+       fprintf(stderr, "%s: Warning: command-line option ignored: %s\n", argv[0], argv[i]);
+       help_message(argv[0]);
+       break;
+      }
+    } else {
+      fprintf(stderr, "%s: Warning: command-line option ignored: %s\n", argv[0], argv[i]);
+      help_message(argv[0]);
+    }
+  }
+}
+
+class SimpleTask : public task {
+  bool isLeaf;
+  int myId;
+public:
+  SimpleTask(bool isLeaf_, int myId_) : isLeaf(isLeaf_), myId(myId_) {}
+  task* execute() {
+#ifdef LOG_THREADS
+    TotalThreadLevel.change_level(1, tbb_outer);
+#endif
+    omp_set_num_threads(max_omp_threads);
+    if (!isLeaf) {
+      set_ref_count(65);
+      for (int i=0; i<64; ++i) {
+       SimpleTask& st = *new(allocate_child()) SimpleTask(true, i);
+       spawn(st);
+      }
+#ifdef LOG_THREADS
+      TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
+      wait_for_all();
+#ifdef LOG_THREADS
+      TotalThreadLevel.change_level(1, tbb_outer);
+#endif
+    }
+    else {
+      if (myId%2 == 0) {
+       MilliSleep(3000);
+#pragma omp parallel
+       {
+#ifdef LOG_THREADS
+         if (omp_get_thread_num() == 0)
+           TotalThreadLevel.change_level(omp_get_num_threads()-1, omp_inner);
+#endif
+         //printf("In OMP parallel region on TBB task with myId=0: thread %d of %d\n", omp_get_thread_num(), omp_get_num_threads());
+#ifdef LOG_THREADS
+         if (omp_get_thread_num() == 0)
+           TotalThreadLevel.change_level(-(omp_get_num_threads()-1), omp_inner);
+#endif
+       }
+      }
+      else {
+       MilliSleep(6000);
+      }
+    }
+#ifdef LOG_THREADS
+    TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
+    return NULL;
+  }
+};
+
+
+int main(int argc, char *argv[]) { 
+#ifdef LOG_THREADS
+  TotalThreadLevel.init();
+  TotalThreadLevel.change_level(1, tbb_outer);
+#endif
+  process_args(argc, argv, &max_tbb_threads, &max_omp_threads);
+
+  task_scheduler_init phase(max_tbb_threads);
+  tick_count start, end;
+  start = tick_count::now();
+  SimpleTask& st = *new(task::allocate_root()) SimpleTask(false, -1);
+#ifdef LOG_THREADS
+  TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
+  task::spawn_root_and_wait(st);
+#ifdef LOG_THREADS
+  TotalThreadLevel.change_level(1, tbb_outer);
+#endif
+  end = tick_count::now();
+  printf("Simple Test of TBB (%d threads max) with OMP (%d threads max) inside took: %6.6f\n", 
+        max_tbb_threads, max_omp_threads, (end-start).seconds());
+
+#ifdef LOG_THREADS
+  TotalThreadLevel.change_level(-1, tbb_outer);
+  TotalThreadLevel.dump();
+#endif
+  return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/tbb_simple.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/tbb_simple.cpp
new file mode 100644 (file)
index 0000000..870afd1
--- /dev/null
@@ -0,0 +1,199 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <cstddef>
+#include <cstdlib>
+#include <cstdio>
+#include <float.h>
+#include <math.h>
+#include <time.h>
+
+#include <omp.h>
+#include <assert.h>
+
+#include "thread_level.h"
+
+#include "tbb/task.h"
+#include "tbb/tick_count.h"
+#include "tbb/task_scheduler_init.h"
+
+#if _WIN32||_WIN64
+#include <Windows.h> /* Need Sleep */
+#else
+#include <unistd.h>  /* Need usleep */
+#endif
+
+void MilliSleep( unsigned milliseconds ) {
+#if _WIN32||_WIN64
+    Sleep( milliseconds );
+#else
+    usleep( milliseconds*1000 );
+#endif /* _WIN32||_WIN64 */
+}
+
+using namespace std;
+using namespace tbb;
+
+// Algorithm parameters
+const int Max_TBB_Threads = 16;
+const int Max_OMP_Threads = 16;
+
+// Global variables
+int max_tbb_threads = Max_TBB_Threads;
+int max_omp_threads = Max_OMP_Threads;
+
+// Print help on command-line arguments
+void help_message(char *prog_name) {
+  fprintf(stderr, "\n%s usage:\n", prog_name);
+  fprintf(stderr, 
+         "  Parameters:\n"
+         "    -t<num> : max # of threads TBB should use\n"
+         "    -o<num> : max # of threads OMP should use\n"
+         "\n  Help:\n"
+         "    -h : print this help message\n");
+}
+
+// Process command-line arguments
+void process_args(int argc, char *argv[], int *max_tbb_t, int *max_omp_t) {
+  for (int i=1; i<argc; ++i) {  
+    if (argv[i][0] == '-') {
+      switch (argv[i][1]) {
+      case 't': // set max_tbb_threads
+       if (sscanf(&argv[i][2], "%d", max_tbb_t) != 1 || *max_tbb_t < 1) {
+         fprintf(stderr, "%s Warning: argument of -t option unacceptable: %s\n", argv[0], &argv[i][2]);
+         help_message(argv[0]);
+       }
+       break;
+      case 'o': // set max_omp_threads
+       if (sscanf(&argv[i][2], "%d", max_omp_t) != 1 || *max_omp_t < 1) {
+         fprintf(stderr, "%s Warning: argument of -o option unacceptable: %s\n", argv[0], &argv[i][2]);
+         help_message(argv[0]);
+       }
+       break;
+      case 'h': // print help message
+       help_message(argv[0]);
+       exit(0);
+       break;
+      default:
+       fprintf(stderr, "%s: Warning: command-line option ignored: %s\n", argv[0], argv[i]);
+       help_message(argv[0]);
+       break;
+      }
+    } else {
+      fprintf(stderr, "%s: Warning: command-line option ignored: %s\n", argv[0], argv[i]);
+      help_message(argv[0]);
+    }
+  }
+}
+
+class SimpleTask : public task {
+  bool isLeaf;
+  int myId;
+public:
+  SimpleTask(bool isLeaf_, int myId_) : isLeaf(isLeaf_), myId(myId_) {}
+  task* execute() {
+#ifdef LOG_THREADS
+    TotalThreadLevel.change_level(1, tbb_outer);
+#endif
+    omp_set_num_threads(max_omp_threads);
+    if (!isLeaf) {
+      set_ref_count(17);
+      for (int i=0; i<16; ++i) {
+       SimpleTask& st = *new(allocate_child()) SimpleTask(true, i);
+       spawn(st);
+      }
+#ifdef LOG_THREADS
+      TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
+      wait_for_all();
+#ifdef LOG_THREADS
+      TotalThreadLevel.change_level(1, tbb_outer);
+#endif
+    }
+    else {
+      if (myId == 0) {
+       MilliSleep(3000);
+#ifdef LOG_THREADS
+       TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
+#pragma omp parallel
+       {
+#ifdef LOG_THREADS
+         if (omp_get_thread_num() == 0)
+           TotalThreadLevel.change_level(omp_get_num_threads(), omp_inner);
+#endif
+         printf("In OMP parallel region on TBB task with myId=0: thread %d of %d\n", 
+                omp_get_thread_num(), omp_get_num_threads());
+#ifdef LOG_THREADS
+         if (omp_get_thread_num() == 0)
+           TotalThreadLevel.change_level(-omp_get_num_threads(), omp_inner);
+#endif
+       }
+#ifdef LOG_THREADS
+       TotalThreadLevel.change_level(1, tbb_outer);
+#endif
+      }
+      else {
+       MilliSleep(6000);
+      }
+    }
+#ifdef LOG_THREADS
+    TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
+    return NULL;
+  }
+};
+
+
+int main(int argc, char *argv[]) { 
+#ifdef LOG_THREADS
+  TotalThreadLevel.init();
+  TotalThreadLevel.change_level(1, tbb_outer);
+#endif
+  process_args(argc, argv, &max_tbb_threads, &max_omp_threads);
+
+  task_scheduler_init phase(max_tbb_threads);
+  tick_count start, end;
+  start = tick_count::now();
+  SimpleTask& st = *new(task::allocate_root()) SimpleTask(false, -1);
+#ifdef LOG_THREADS
+  TotalThreadLevel.change_level(-1, tbb_outer);
+#endif
+  task::spawn_root_and_wait(st);
+#ifdef LOG_THREADS
+  TotalThreadLevel.change_level(1, tbb_outer);
+#endif
+  end = tick_count::now();
+  printf("Simple Test of TBB (%d threads max) with OMP (%d threads max) inside took: %6.6f\n", 
+        max_tbb_threads, max_omp_threads, (end-start).seconds());
+#ifdef LOG_THREADS
+  TotalThreadLevel.change_level(-1, tbb_outer);
+  TotalThreadLevel.dump();
+#endif
+  return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/thread_level.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/perfor/thread_level.h
new file mode 100644 (file)
index 0000000..1668da9
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Thread level recorder
+#ifndef __THREAD_LEVEL_H
+#define __THREAD_LEVEL_H
+#include <cstdio>
+#include <omp.h>
+#include <assert.h>
+#include "tbb/atomic.h"
+#include "tbb/tick_count.h"
+
+//#define LOG_THREADS // use this to ifdef out calls to this class 
+//#define NO_BAIL_OUT // continue execution after detecting oversubscription
+
+using namespace tbb;
+
+typedef enum {tbb_outer, tbb_inner, omp_outer, omp_inner} client_t;
+
+class ThreadLevelRecorder {
+  tbb::atomic<int> tbb_outer_level;
+  tbb::atomic<int> tbb_inner_level;
+  tbb::atomic<int> omp_outer_level;
+  tbb::atomic<int> omp_inner_level;
+  struct record {
+    tbb::tick_count time;
+    int n_tbb_outer_thread;
+    int n_tbb_inner_thread;
+    int n_omp_outer_thread;
+    int n_omp_inner_thread;
+  };
+  tbb::atomic<unsigned> next;
+  /** Must be power of two */
+  static const unsigned max_record_count = 1<<20;
+  record array[max_record_count];
+  int max_threads;
+  bool fail;
+ public:
+  void change_level(int delta, client_t whichClient);
+  void dump();
+  void init();
+};
+
+void ThreadLevelRecorder::change_level(int delta, client_t whichClient) {
+  int tox=tbb_outer_level, tix=tbb_inner_level, oox=omp_outer_level, oix=omp_inner_level;
+  if (whichClient == tbb_outer) {
+    tox = tbb_outer_level+=delta;
+  } else if (whichClient == tbb_inner) {
+    tix = tbb_inner_level+=delta;
+  } else if (whichClient == omp_outer) {
+    oox = omp_outer_level+=delta;
+  } else if (whichClient == omp_inner) {
+    oix = omp_inner_level+=delta;
+  } else {
+    printf("WARNING: Bad client type; ignoring.\n");
+    return;
+  }
+  // log non-negative entries
+  tbb::tick_count t = tbb::tick_count::now();
+  unsigned k = next++;
+  if (k<max_record_count) {
+    record& r = array[k];
+    r.time = t;
+    r.n_tbb_outer_thread = tox>=0?tox:0;
+    r.n_omp_outer_thread = oox>=0?oox:0;
+    r.n_tbb_inner_thread = tix>=0?tix:0;
+    r.n_omp_inner_thread = oix>=0?oix:0;
+  }
+  char errStr[100];
+  int tot_threads;
+  tot_threads = tox+tix+oox+oix;
+  sprintf(errStr, "ERROR: Number of threads (%d+%d+%d+%d=%d) in use exceeds maximum (%d).\n", 
+         tox, tix, oox, oix, tot_threads, max_threads);
+  if (tot_threads > max_threads) {
+#ifdef NO_BAIL_OUT
+    if (!fail) {
+      printf("%sContinuing...\n", errStr);
+      fail = true;
+    }
+#else
+    dump();
+    printf("%s\n", errStr);
+    assert(tot_threads <= max_threads);
+#endif
+  }
+}
+
+void ThreadLevelRecorder::dump() {
+  FILE* f = fopen("time.txt","w");
+  if (!f) {
+    perror("fopen(time.txt)\n");
+    exit(1);
+  }
+  unsigned limit = next;
+  if (limit>max_record_count) { // Clip
+    limit = max_record_count;
+  }
+  for (unsigned i=0; i<limit; ++i) {
+    fprintf(f,"%f\t%d\t%d\t%d\t%d\n",(array[i].time-array[0].time).seconds(), array[i].n_tbb_outer_thread,
+           array[i].n_tbb_inner_thread, array[i].n_omp_outer_thread, array[i].n_omp_inner_thread);
+  }
+  fclose(f);
+  int tox=tbb_outer_level, tix=tbb_inner_level, oox=omp_outer_level, oix=omp_inner_level;
+  int tot_threads;
+  tot_threads = tox+tix+oox+oix;
+  if (!fail) printf("INFO: Passed.\n");
+  else printf("INFO: Failed.\n");
+}
+
+void ThreadLevelRecorder::init() {
+  fail = false;
+  max_threads = omp_get_max_threads();
+  printf("INFO: Getting maximum hardware threads... %d.\n", max_threads);
+}
+
+ThreadLevelRecorder TotalThreadLevel;
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/hunk.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/hunk.h
new file mode 100644 (file)
index 0000000..ca86290
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __RML_hunk_H
+#define __RML_hunk_H
+
+#include "tbb/cache_aligned_allocator.h"
+
+namespace rml {
+
+namespace internal {
+
+//! Bare-bones container for sequence 
+/* The sequence avoids false sharing of its elements with objects that are not in the sequence.
+   The container works even for element types that are not assignable or copyable (unlike std::vctor<T>). */
+template<typename T>
+class hunk {
+    //! Pointer to beginning of storage
+    T* my_array;
+    //! Pointer to end of storage
+    T* my_end;
+    typedef tbb::cache_aligned_allocator<T> allocator_type;
+public:
+    //! Iterator for iterating over the sequence
+    typedef T* iterator;
+
+    //! Construct hunk with no sequence
+    hunk() : my_array(NULL), my_end(NULL) {}
+
+    //! Allocate a sequence
+    void allocate( size_t n );
+
+    //! Deallocate a sequence
+    /** Assertion failure if sequence was not allocated. */
+    void clear();
+
+    //! True if sequence as been allocated
+    bool is_allocated() const {return my_array!=NULL;}
+
+    //! Beginning of sequence
+    iterator begin() {return my_array;}
+
+    //! Beginning of sequence
+    iterator end() {return my_end;}
+
+    //! Return kth element
+    T& operator[]( size_t k ) {
+        __TBB_ASSERT( k<size(), NULL );
+        return my_array[k];
+    }
+
+    //! Number of element in the sequence
+    size_t size() const {return my_end-my_array;}
+
+    ~hunk() {
+        if( is_allocated() )
+            clear();
+    }
+};
+
+template<typename T>
+void hunk<T>::allocate( size_t n ) { 
+    my_array = allocator_type().allocate(n);
+    my_end = my_array;
+    try {
+        T* limit = my_array+n;
+        for( ; my_end!=limit; ++my_end ) 
+            new(my_end) T;
+    } catch(...) {
+        clear();
+        throw;
+    }
+}
+
+template<typename T>
+void hunk<T>::clear() {
+    __TBB_ASSERT( is_allocated(), NULL );
+    size_t n = size();
+    while( my_end!=my_array ) 
+        (--my_end)->T::~T();
+    allocator_type().deallocate(my_array,n);
+    my_array = NULL;
+    my_end = NULL;
+}
+
+} // namespace internal
+} // namespace rml
+
+#endif /* __RML_hunk_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/index.html
new file mode 100644 (file)
index 0000000..e2750c6
--- /dev/null
@@ -0,0 +1,19 @@
+<HTML>
+<BODY>
+<H2>Overview</H2>
+
+This directory has source code internal to the server.
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/irml.rc b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/irml.rc
new file mode 100644 (file)
index 0000000..35e5db8
--- /dev/null
@@ -0,0 +1,126 @@
+// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// Microsoft Visual C++ generated resource script.
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC                     1
+#define _APS_NEXT_RESOURCE_VALUE        102
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1001
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <winresrc.h>
+#define ENDL "\r\n"
+#include "tbb/tbb_version.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Neutral resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+// manifest integration
+#ifdef TBB_MANIFEST
+#include "winuser.h"
+2 RT_MANIFEST tbbmanifest.exe.manifest
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION TBB_VERNUMBERS
+ PRODUCTVERSION TBB_VERNUMBERS
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "000004b0"
+        BEGIN
+            VALUE "CompanyName", "Intel Corporation\0"
+            VALUE "FileDescription", "Resource manager library\0"
+            VALUE "FileVersion", TBB_VERSION "\0"
+//what is it?            VALUE "InternalName", "irml\0"
+            VALUE "LegalCopyright", "Copyright (C) 2009\0"
+            VALUE "LegalTrademarks", "\0"
+#ifndef TBB_USE_DEBUG
+            VALUE "OriginalFilename", "irml.dll\0"
+#else
+            VALUE "OriginalFilename", "irml_debug.dll\0"
+#endif
+            VALUE "ProductName", "Threading Building Blocks\0"
+            VALUE "ProductVersion", TBB_VERSION "\0"
+            VALUE "Comments", TBB_VERSION_STRINGS "\0"
+            VALUE "PrivateBuild", "\0"
+            VALUE "SpecialBuild", "\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x0, 1200
+    END
+END
+
+#endif    // Neutral resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/job_automaton.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/job_automaton.h
new file mode 100644 (file)
index 0000000..7e3c4f3
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __RML_job_automaton_H
+#define __RML_job_automaton_H
+
+#include "rml_base.h"
+#include "tbb/atomic.h"
+
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+    // Workaround for overzealous compiler warnings 
+    #pragma warning (push)
+    #pragma warning (disable: 4244)
+#endif
+
+namespace rml {
+
+namespace internal {
+
+//! Finite state machine.   
+/**   /--------------\
+     /                V
+    0 --> 1--> ptr --> -1 
+                ^
+                |
+                |
+                V
+              ptr|1
+
+"owner" = corresponding server_thread.
+Odd states indicate that someone is executing code on the job.
+Furthermore, odd states!=-1 indicate that owner will read its mailbox shortly.
+Most transitions driven only by owner.
+Transition 0-->-1 is driven by non-owner.
+Transition ptr->-1 is driven  by owner or non-owner.
+*/ 
+class job_automaton: no_copy {
+private:
+    tbb::atomic<intptr_t> my_job;
+public:
+    /** Created by non-owner */
+    job_automaton() {
+        my_job = 0;
+    }
+    ~job_automaton() {
+        __TBB_ASSERT( my_job==-1, "must plug before destroying" );
+    }
+
+    //! Try to transition 0-->1 or ptr-->ptr|1.
+    /** Should only be called by owner. */
+    bool try_acquire() {
+        intptr_t snapshot = my_job;
+        if( snapshot==-1 ) {
+            return false;
+        } else {
+            __TBB_ASSERT( (snapshot&1)==0, "already marked that way" );
+            intptr_t old = my_job.compare_and_swap( snapshot|1, snapshot );
+            __TBB_ASSERT( old==snapshot || old==-1, "unexpected interference" );  
+            return old==snapshot;
+        }
+    }
+    //! Transition ptr|1-->ptr
+    /** Should only be called by owner. */
+    void release() {
+        intptr_t snapshot = my_job;
+        __TBB_ASSERT( snapshot&1, NULL );
+        // Atomic store suffices here.
+        my_job = snapshot&~1;
+    }
+
+    //! Transition 1-->ptr
+    /** Should only be called by owner. */
+    void set_and_release( rml::job& job ) {
+        intptr_t value = reinterpret_cast<intptr_t>(&job);
+        __TBB_ASSERT( (value&1)==0, "job misaligned" );
+        __TBB_ASSERT( value!=0, "null job" );
+        __TBB_ASSERT( my_job==1, "already set, or not marked busy?" );
+        // Atomic store suffices here.
+        my_job = value;
+    }
+
+    //! Transition 0-->-1
+    /** If successful, return true. */
+    bool try_plug_null() {
+        return my_job.compare_and_swap( -1, 0 )==0;
+    }
+
+    //! Try to transition to -1.  If successful, set j to contents and return true.
+    /** Called by owner or non-owner. */
+    bool try_plug( rml::job*&j ) {
+        for(;;) {
+            intptr_t snapshot = my_job;
+            if( snapshot&1 ) {
+                // server_thread that owns job is executing a mailbox item for the job,
+                // and will thus read its mailbox afterwards, and see a terminate request
+                // for the job.
+                j = NULL;
+                return false;
+            } 
+            // Not busy
+            if( my_job.compare_and_swap( -1, snapshot )==snapshot ) {
+                j = reinterpret_cast<rml::job*>(snapshot);
+                return true;
+            } 
+            // Need to retry, because current thread may be nonowner that read a 0, and owner might have
+            // caused transition 0->1->ptr after we took our snapshot.
+        }
+    }
+
+    /** Called by non-owner to wait for transition to ptr. */
+    rml::job& wait_for_job() const {
+        intptr_t snapshot;
+        for(;;) {
+            snapshot = my_job;
+            if( snapshot&~1 ) break;
+            __TBB_Yield();
+        }
+        __TBB_ASSERT( snapshot!=-1, "wait on plugged job_automaton" );
+        return *reinterpret_cast<rml::job*>(snapshot&~1);
+    }
+};
+
+} // namespace internal
+} // namespace rml
+
+
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+    #pragma warning (pop)
+#endif // warning 4244 are back
+
+#endif /* __RML_job_automaton_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/lin-rml-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/lin-rml-export.def
new file mode 100644 (file)
index 0000000..2c332aa
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+{
+global:
+__RML_open_factory;
+__RML_close_factory;
+__TBB_make_rml_server;
+__KMP_make_rml_server;
+__TBB_call_with_my_server_info;
+__KMP_call_with_my_server_info;
+local:*;
+};
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/ring.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/ring.h
new file mode 100644 (file)
index 0000000..4a865f7
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __RML_ring_H
+#define __RML_ring_H
+
+#include <vector>
+#include <utility>
+#include "tbb/cache_aligned_allocator.h"
+#include "rml_base.h"
+#include "job_automaton.h"
+
+namespace rml {
+
+namespace internal {
+
+//! Circular sequence of pair(Connection&,job&) with a cursor.
+template<typename Connection> 
+class ring {
+public:
+    typedef Connection connection_type;
+    typedef ::rml::job job_type;
+    class value_type {
+    public:
+        Connection& connection() const {return *my_connection;}
+        job_type& job() const {return *my_job;}
+        job_automaton& automaton() const {return *my_automaton;}
+        value_type( Connection& c, job_type& j, job_automaton& ja ) : my_connection(&c), my_job(&j), my_automaton(&ja) {}
+    private:
+        Connection* my_connection;
+        job_type* my_job;
+        job_automaton* my_automaton;
+    };
+private:
+    typedef std::vector<value_type,tbb::cache_aligned_allocator<value_type> > array_type;
+    /** Logically, a linked list would make more sense.  But it is not as cache friendly. */
+    array_type my_array;
+    typename array_type::const_iterator my_cursor;
+
+public:
+    ring() {
+        my_cursor = my_array.begin();
+    }
+
+    //! Return number of items in the ring
+    size_t size() const {return my_array.size();}
+
+    //! Insert an new item into the sequence
+    /** Where the item is inserted is implementation-dependent. */
+    void insert( connection_type& client, job_type& job, job_automaton& ja ) {
+        // Save cursor position
+        typename array_type::difference_type i = my_cursor-my_array.begin();
+        my_array.push_back(value_type(client,job,ja));
+        // Restore cursor
+        my_cursor = my_array.begin()+i;
+    }
+
+    //! Erase item in the sequence that corresponds to given connection_type.
+    /** If item was present, returns pointer to job_automaton of that item.
+        Otherwise returns NULL. */
+    job_automaton* erase( const connection_type& c ) {
+        // Search for matching item.
+        typename array_type::iterator i = my_array.begin();
+        for(;;) {
+            if( i==my_array.end() )
+                return NULL;
+            if( &i->connection()==&c )
+                break;
+            ++i;
+        }
+        // Delete found item without corrupting cursor.
+        typename array_type::difference_type j = my_cursor-my_array.begin();
+        if( i<my_cursor ) {
+            --j;
+        } else if( my_cursor+1==my_array.end() ) {
+            __TBB_ASSERT(i==my_cursor,NULL);
+            j=0;
+        }
+        job_automaton* result = &i->automaton();
+        __TBB_ASSERT( result, NULL );
+        my_array.erase(i); 
+        __TBB_ASSERT( !my_array.empty() || j==0, NULL );
+        my_cursor=my_array.begin()+j;
+        return result;
+    }
+
+    //! Apply client method to all jobs in the ring.
+    /** Requres signature "Client& Connection::client()". 
+        Templatized over Client so that method can be tested without having to define a full Client type. */
+    template<typename Client>
+    void for_each_job( void (Client::*method)(job&) ) {
+        for( typename array_type::iterator i=my_array.begin(); i!=my_array.end(); ++i ) {
+            value_type& v = *i;
+            if( v.automaton().try_acquire() ) {
+                (i->connection().client().*method)(v.job());
+                v.automaton().release();
+            }
+        } 
+    }
+
+    //! NULL if ring is empty, otherwise pointer to value at current cursor position.
+    const value_type* cursor() const {return my_array.empty() ? NULL : &*my_cursor;}
+
+    //! Advance cursor to next item.
+    void advance_cursor() {
+        if( ++my_cursor==my_array.end() )
+            my_cursor = my_array.begin();
+    }
+
+};
+
+} // namespace internal
+} // namespace rml
+
+#endif /* __RML_ring_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/rml_server.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/rml_server.cpp
new file mode 100644 (file)
index 0000000..832bc99
--- /dev/null
@@ -0,0 +1,1377 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "rml_tbb.h"
+#define private public /* Sleazy trick to avoid publishing internal names in public header. */
+#include "rml_omp.h"
+#undef private
+
+#include "tbb/tbb_allocator.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "ring.h"
+#include "wait_counter.h"
+#include "thread_monitor.h"
+#include "tbb/aligned_space.h"
+#include "tbb/atomic.h"
+#include "tbb/mutex.h"
+#include "tbb/tbb_misc.h"           // Get DetectNumberOfWorkers() from here.
+#include "tbb/concurrent_queue.h"
+#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
+// VS2008/VC9 seems to have an issue; 
+#pragma warning( push )
+#pragma warning( disable: 4985 )
+#endif
+#include "tbb/concurrent_vector.h"
+#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
+#pragma warning( pop )
+#endif
+
+namespace rml {
+
+namespace internal {
+
+//! Number of hardware contexts
+static inline unsigned hardware_concurrency() {
+    static unsigned DefaultNumberOfThreads = 0;
+    unsigned n = DefaultNumberOfThreads;
+    if( !n ) DefaultNumberOfThreads = n = tbb::internal::DetectNumberOfWorkers();
+    return n;
+}
+
+using tbb::internal::rml::tbb_client;
+using tbb::internal::rml::tbb_server;
+
+using __kmp::rml::omp_client;
+using __kmp::rml::omp_server;
+
+typedef versioned_object::version_type version_type;
+
+const version_type SERVER_VERSION = 1;
+
+static const size_t cache_line_size = tbb::internal::NFS_MaxLineSize;
+
+class tbb_connection_v1;
+class omp_connection_v1;
+
+enum message_kind {
+    mk_initialize_tbb_job,
+    mk_terminate_tbb_job,
+    mk_initialize_omp_job,
+    mk_terminate_omp_job
+};
+
+//! Message to a thread
+class message {
+public:
+    message_kind kind;
+    rml::server* connection;
+    job_automaton* automaton;
+    message() {} 
+    message( message_kind k, rml::server* s, job_automaton* ja ) : kind(k), connection(s), automaton(ja) {
+        __TBB_ASSERT( k==mk_initialize_tbb_job||k==mk_initialize_omp_job, NULL );
+    }
+    message( message_kind k, rml::server* s ) : kind(k), connection(s) {
+        __TBB_ASSERT( k==mk_terminate_tbb_job||k==mk_terminate_omp_job, NULL );
+    }
+};
+
+//! Mailbox to which any thread can mail a message, but only the owner of the mailbox can read messages.
+/** Class mailbox is defined because of the fear that queue.empty() would be too slow. */
+class mailbox {
+    tbb::atomic<int> size;
+    tbb::concurrent_queue<message> queue;
+public:
+    bool empty() const {return size==0;}
+    void pop( message& m ) {
+        __TBB_ASSERT( size>0, "attempt to pop empty mailbox" );
+        __TBB_ASSERT( !queue.empty(), "corrupted mailbox" );
+        --size; 
+        bool popped = queue.try_pop(m);
+        __TBB_ASSERT_EX( popped, "corrupted mailbox" );
+    }
+    void push( const message& m ) {
+        queue.push(m);
+        ++size;
+    }
+    mailbox() {
+        size=0;
+        __TBB_ASSERT( queue.empty(), NULL );
+    }
+    ~mailbox() {
+        __TBB_ASSERT( size==0, "destroying non-empty mailbox" );        
+        __TBB_ASSERT( queue.empty(), NULL );        
+    }
+};
+
+//! State of a server_thread
+/** Below is a diagram of legal state transitions.
+
+              ts_tbb_busy               
+              ^          ^       
+             /            \       
+            /              V       
+    ts_asleep <-----------> ts_idle 
+            \              ^       
+             \            /       
+              V          V       
+              ts_omp_busy               
+ */
+enum thread_state_t {
+    //! Thread not doing anything useful, but running and looking for work. 
+    ts_idle,
+    //! Thread not doing anything useful and is asleep */
+    ts_asleep,
+    //! Thread is enlisted into OpenMP team
+    ts_omp_busy,
+    //! Thread is busy doing TBB work.
+    ts_tbb_busy,
+    //! For tbb threads only
+    ts_done,
+    ts_created,
+    ts_started,
+    ts_visited
+};
+
+#if TBB_USE_ASSERT
+#define PRODUCE_ARG(x) ,x
+#else
+#define PRODUCE_ARG(x) 
+#endif
+
+//! Synchronizes dispatch of OpenMP work.
+class omp_dispatch_type {
+    typedef ::rml::job job_type;
+    omp_client* client;
+    void* cookie;
+    omp_client::size_type index;
+    tbb::atomic<job_type*> job;
+#if TBB_USE_ASSERT
+    omp_connection_v1* server;
+#endif /* TBB_USE_ASSERT */
+public:
+    omp_dispatch_type() {job=NULL;}
+    void consume();
+    void produce( omp_client& c, job_type& j, void* cookie_, omp_client::size_type index_ PRODUCE_ARG( omp_connection_v1& s )) {
+        __TBB_ASSERT( &j, NULL );
+        __TBB_ASSERT( !job, "job already set" );
+        client = &c;
+#if TBB_USE_ASSERT
+        server = &s;
+#endif /* TBB_USE_ASSERT */
+        cookie = cookie_;
+        index = index_;
+        // Must be last
+        job = &j;
+    }
+};
+
+//! A reference count.
+/** No default constructor, because clients must be very careful about whether the 
+    initial reference count is 0 or 1. */
+class ref_count: no_copy {
+    tbb::atomic<int> my_ref_count;
+public:
+    ref_count(int k ) {my_ref_count=k;}
+
+    ~ref_count() {
+        __TBB_ASSERT( !my_ref_count, "premature destruction of refcounted object" );
+    }
+
+    //! Add one and return new value.
+    int add_ref() {
+        int k = ++my_ref_count;
+        __TBB_ASSERT(k>=1,"reference count underflowed before add_ref");
+        return k;
+    }
+
+    //! Subtract one and return new value.
+    int remove_ref() {
+        int k = --my_ref_count; 
+        __TBB_ASSERT(k>=0,"reference count underflow");
+        return k;
+    }
+};
+
+//! Forward declaration
+class server_thread;
+class thread_map;
+
+//! thread_map_base; we need to make the iterator type available to server_thread
+struct thread_map_base {
+    //! A value in the map
+    class value_type {
+    public:
+        server_thread& thread() {
+            __TBB_ASSERT( my_thread, "thread_map::value_type::thread() called when !my_thread" );
+            return *my_thread;
+        }
+        rml::job& job() {
+            __TBB_ASSERT( my_job, "thread_map::value_type::job() called when !my_job" );
+            return *my_job;
+        }
+        value_type() : my_thread(NULL), my_job(NULL) {}
+        server_thread& wait_for_thread() const {
+            for(;;) {
+                server_thread* ptr=const_cast<server_thread*volatile&>(my_thread);
+                if( ptr ) 
+                    return *ptr;
+                __TBB_Yield();
+            } 
+        }
+        /** Shortly after when a connection is established, it is possible for the server
+            to grab a server_thread that has not yet created a job object for that server. */
+        rml::job& wait_for_job() const {
+            if( !my_job ) {
+                my_job = &my_automaton.wait_for_job();
+            }
+            return *my_job;
+        }
+    private:
+        server_thread* my_thread;
+        /** Marked mutable because though it is physically modified, conceptually it is a duplicate of 
+            the job held by job_automaton. */
+        mutable rml::job* my_job;
+        job_automaton my_automaton;
+// FIXME - pad out to cache line, because my_automaton is hit hard by thread()
+        friend class thread_map;
+
+    };
+    typedef tbb::concurrent_vector<value_type,tbb::zero_allocator<value_type,tbb::cache_aligned_allocator> > array_type;
+};
+
+template<typename T>
+class padded: public T {
+    char pad[cache_line_size - sizeof(T)%cache_line_size];
+};
+
+// FIXME - should we pad out memory to avoid false sharing of our global variables?
+
+static tbb::atomic<int> the_balance;
+static tbb::atomic<int> the_balance_inited;
+
+//! Per thread information 
+/** ref_count holds number of clients that are using this, 
+    plus 1 if a host thread owns this instance. */
+class server_thread: public ref_count {
+    friend class thread_map;
+    //! Integral type that can hold a thread_state_t
+    typedef int thread_state_rep_t;
+    tbb::atomic<thread_state_rep_t> state;
+public:
+    thread_monitor monitor;
+    // FIXME: make them private...
+    bool    is_omp_thread;
+    tbb::atomic<thread_state_rep_t> tbb_state;
+    server_thread* link; // FIXME: this is a temporary fix. Remove when all is done.
+    thread_map_base::array_type::iterator my_map_pos;
+private:
+    typedef ring<tbb_connection_v1> tbb_ring_type;
+    typedef ring<omp_connection_v1> omp_ring_type;
+    tbb_ring_type tbb_ring;
+    omp_ring_type omp_ring;
+
+#if TBB_USE_ASSERT
+    //! Flag used to check if thread is still using *this.
+    bool has_active_thread;
+#endif /* TBB_USE_ASSERT */
+
+    //! Volunteer to sleep. 
+    void sleep_perhaps( thread_state_t asleep );
+
+    //! Destroy job corresponding to given client
+    /** Return true if thread must quit. */
+    template<typename Ring>
+    bool destroy_job( Ring& ring, typename Ring::connection_type& c );
+
+    //! Process requests
+    /** Return true if thread must quit. */
+    bool process_requests();
+
+    void loop();
+    static __RML_DECL_THREAD_ROUTINE thread_routine( void* arg ); 
+public:
+    thread_state_t read_state() const {
+        thread_state_rep_t s = state;
+        __TBB_ASSERT( unsigned(s)<=unsigned(ts_done), "corrupted server thread?" );
+        return thread_state_t(s);
+    }
+
+    //! Current stack size of the thread.  
+    size_t stack_size;
+    mailbox requests;
+
+    omp_dispatch_type omp_dispatch;
+
+    server_thread();
+    ~server_thread();
+
+    //! Launch a thread that is bound to *this.
+    void launch( size_t stack_size );
+
+    //! Attempt to wakeup a thread 
+    /** The value "to" is the new state for the thread, if it was woken up.
+        Returns true if thread was woken up, false otherwise. */
+    bool wakeup(  bool only_if_undersubscribed, thread_state_t to, thread_state_t from );
+
+    //! Attempt to enslave a thread for OpenMP/TBB.
+    bool try_grab_for( thread_state_t s );
+};
+
+//! Bag of threads that are private to a client.
+class private_thread_bag {
+    struct list_thread: server_thread {
+       list_thread* next;
+    };
+    //! Root of atomic linked list of list_thread
+    /** ABA problem is avoided because items are only atomically pushed, never popped. */
+    tbb::atomic<list_thread*> my_root; 
+    tbb::cache_aligned_allocator<padded<list_thread> > my_allocator; 
+public:
+    //! Construct empty bag
+    private_thread_bag() {my_root=NULL;}
+
+    //! Create a fresh server_thread object.
+    server_thread& add_one_thread() {
+        list_thread* t = my_allocator.allocate(1);
+        new( t ) list_thread;
+        // Atomically add to list
+        list_thread* old_root;
+        do {
+            old_root = my_root;
+            t->next = old_root;
+        } while( my_root.compare_and_swap( t, old_root )!=old_root );
+        return *t;  
+    }
+
+    //! Destroy the bag and threads in it. 
+    ~private_thread_bag() {
+        while( my_root ) {
+            // Unlink thread from list.
+            list_thread* t = my_root;
+            my_root = t->next;
+            // Destroy and deallocate the thread.
+            t->~list_thread();
+            my_allocator.deallocate(static_cast<padded<list_thread>*>(t),1);    
+        }
+    }
+};
+
+//! Forward declaration
+void wakeup_some_tbb_threads();
+
+//! Type-independent part of class generic_connection. *
+/** One to one map from server threads to jobs, and associated reference counting. */
+class thread_map : public thread_map_base {
+public:
+    typedef rml::client::size_type size_type;
+
+    thread_map( wait_counter& fc, ::rml::client& client ) : 
+        all_visited_at_least_once(false),
+        my_min_stack_size(0), 
+        my_server_ref_count(1),
+        my_client_ref_count(1),
+        my_client(client),
+        my_factory_counter(fc)
+    {
+        my_unrealized_threads = 0;
+    }
+    ~thread_map() {}
+    typedef array_type::iterator iterator;
+    iterator begin() {return my_array.begin();}
+    iterator end() {return my_array.end();}
+    void bind( /* rml::server& server, message_kind initialize */ );
+    void unbind( rml::server& server, message_kind terminate );
+    void assist_cleanup( bool assist_null_only );
+
+    /** Returns number of unrealized threads to create. */
+    size_type wakeup_tbb_threads( size_type n );
+    bool wakeup_next_thread( iterator i, tbb_connection_v1& conn );
+    void release_tbb_threads( server_thread* t );
+    void adjust_balance( int delta );
+
+    //! Add a server_thread object to the map, but do not bind it.
+    /** Return NULL if out of unrealized threads. */
+    value_type* add_one_thread( bool is_omp_thread_ );
+
+    void bind_one_thread( rml::server& server, message_kind initialize, value_type& x );
+
+    void remove_client_ref();
+    int add_server_ref() {return my_server_ref_count.add_ref();}
+    int remove_server_ref() {return my_server_ref_count.remove_ref();}
+
+    ::rml::client& client() const {return my_client;}
+
+    size_type get_unrealized_threads() { return my_unrealized_threads; }
+
+private:
+    private_thread_bag my_private_threads;
+    bool all_visited_at_least_once;
+    array_type my_array;
+    size_t my_min_stack_size;
+    tbb::atomic<size_type> my_unrealized_threads;
+
+    //! Number of threads referencing *this, plus one extra.
+    /** When it becomes zero, the containing server object can be safely deleted. */
+    ref_count my_server_ref_count;
+
+    //! Number of jobs that need cleanup, plus one extra.
+    /** When it becomes zero, acknowledge_close_connection is called. */
+    ref_count my_client_ref_count;
+    ::rml::client& my_client;
+    //! Counter owned by factory that produced this thread_map.
+    wait_counter& my_factory_counter;
+};
+
+void thread_map::bind_one_thread( rml::server& server, message_kind initialize, value_type& x ) {
+
+    // Add one to account for the thread referencing this map hereforth.
+    server_thread& t = x.thread();
+    my_server_ref_count.add_ref();
+    my_client_ref_count.add_ref();
+#if TBB_USE_ASSERT
+    __TBB_ASSERT( t.add_ref()==1, NULL );
+#else
+    t.add_ref();
+#endif
+    // Have responsibility to start the thread.
+    t.requests.push( message( initialize, &server, &x.my_automaton ) );
+    t.launch( my_min_stack_size );
+    // Must wakeup thread so it can fill in its "my_job" field in *this.
+    // Otherwise deadlock can occur where wait_for_job spins on thread that is sleeping.
+    __TBB_ASSERT( t.state!=ts_tbb_busy, NULL );
+    t.wakeup( /*only_if_undersubscribed=*/false, ts_idle, ts_asleep );
+}
+
+thread_map::value_type* thread_map::add_one_thread( bool is_omp_thread_ ) {
+    size_type u;
+    do {
+        u = my_unrealized_threads;
+        if( !u ) return NULL;
+    } while( my_unrealized_threads.compare_and_swap(u-1,u)!=u );
+    server_thread& t = my_private_threads.add_one_thread();
+    t.is_omp_thread = is_omp_thread_;
+    __TBB_ASSERT( t.state!=ts_tbb_busy, NULL );
+    if( !t.is_omp_thread )
+        t.tbb_state = ts_created;
+    iterator i = t.my_map_pos = my_array.grow_by(1);
+    value_type& v = *i;
+    v.my_thread = &t;
+    return &v;
+}
+
+void thread_map::bind( /* rml::server& server, message_kind initialize */ ) {
+    ++my_factory_counter;
+    my_min_stack_size = my_client.min_stack_size();
+    __TBB_ASSERT( my_unrealized_threads==0, "already called bind?" );
+    my_unrealized_threads = my_client.max_job_count();
+}
+
+void thread_map::unbind( rml::server& server, message_kind terminate ) {
+    // Ask each server_thread to cleanup its job for this server.
+    for( iterator i = begin(); i!=end(); ++i ) {
+        server_thread& t = i->thread();
+        // The last parameter of the message is not used by the recipient. 
+        t.requests.push( message( terminate, &server ) );
+        t.wakeup( /*only_if_undersubscribed=*/false, ts_idle, ts_asleep );
+    }
+    // Remove extra ref to client.
+    remove_client_ref();
+}
+
+void thread_map::assist_cleanup( bool assist_null_only ) {
+    // To avoid deadlock, the current thread *must* help out with cleanups that have not started,
+    // becausd the thread that created the job may be busy for a long time.
+    for( iterator i = begin(); i!=end(); ++i ) {
+        rml::job* j=0;
+        job_automaton& ja = i->my_automaton;
+        if( assist_null_only ? ja.try_plug_null() : ja.try_plug(j) ) {
+            if( j ) {
+                my_client.cleanup(*j);
+            } else {
+                // server thread did not get a chance to create a job.
+            }
+            remove_client_ref();
+        } 
+    }
+}
+
+thread_map::size_type thread_map::wakeup_tbb_threads( size_type n ) {
+    __TBB_ASSERT(n>0,"must specify positive number of threads to wake up");
+    iterator e = end();
+    for( iterator k=begin(); k!=e; ++k ) {
+        // If another thread added *k, there is a tiny timing window where thread() is invalid.
+        server_thread& t = k->wait_for_thread();
+        if( t.tbb_state==ts_created || t.read_state()==ts_tbb_busy )
+            continue;
+        if( --the_balance>=0 ) { // try to withdraw a coin from the deposit
+            while( !t.try_grab_for( ts_tbb_busy ) ) {
+                if( t.read_state()==ts_tbb_busy ) {
+                    // we lost; move on to the next.
+                    ++the_balance;
+                    goto skip;
+                }
+            }
+            if( --n==0 ) 
+                return 0;
+        } else {
+            // overdraft.
+            ++the_balance;
+            break;
+        }
+skip:
+        ;
+    }
+    return n<my_unrealized_threads ? n : my_unrealized_threads;
+}
+
+void thread_map::remove_client_ref() {
+    int k = my_client_ref_count.remove_ref();
+    if( k==0 ) {
+        // Notify factory that thread has crossed back into RML.
+        --my_factory_counter;
+        // Notify client that RML is done with the client object.
+        my_client.acknowledge_close_connection();
+    } 
+}
+
+//------------------------------------------------------------------------
+// generic_connection
+//------------------------------------------------------------------------
+
+template<typename Server, typename Client>
+struct connection_traits {};
+
+static tbb::atomic<tbb_connection_v1*> this_tbb_connection;
+
+template<typename Connection, typename Ring>
+void make_job( Connection& c, Ring& ring, server_thread& t, job_automaton& ja );
+
+template<typename Server, typename Client>
+class generic_connection: public Server, no_copy {
+    /*override*/ version_type version() const {return SERVER_VERSION;}
+
+    /*override*/ void yield() {thread_monitor::yield();}
+
+    /*override*/ void independent_thread_number_changed( int delta ) {
+        my_thread_map.adjust_balance( -delta );
+    }
+
+    /*override*/ unsigned default_concurrency() const {
+        return hardware_concurrency()-1;
+    }
+
+protected:
+    thread_map my_thread_map;
+
+    void do_open() {
+        my_thread_map.bind( /* *this, connection_traits<Server,Client>::initialize */ );
+    }
+    
+    void request_close_connection();
+
+    //! Make destructor virtual
+    virtual ~generic_connection() {}
+
+    generic_connection( wait_counter& fc, Client& c ) : my_thread_map(fc,c) {}
+
+public:
+
+    Client& client() const {return static_cast<Client&>(my_thread_map.client());}
+
+    template<typename Connection, typename Ring>
+    friend void make_job( Connection& c, Ring& ring, server_thread& t, job_automaton& ja );
+
+    int add_server_ref () {
+        return my_thread_map.add_server_ref();
+    }
+
+    void remove_server_ref() {
+        if( my_thread_map.remove_server_ref()==0 ) 
+            delete this;
+    }
+    void remove_client_ref() {
+        my_thread_map.remove_client_ref();
+    }
+};
+
+//------------------------------------------------------------------------
+// TBB server
+//------------------------------------------------------------------------
+
+template<>
+struct connection_traits<tbb_server,tbb_client> {
+    static const message_kind initialize = mk_initialize_tbb_job;
+    static const message_kind terminate = mk_terminate_tbb_job;
+    static const bool assist_null_only = true;
+    static const bool is_tbb = true;
+};
+
+//! Represents a server and client binding.
+/** The internal representation uses inheritance for the server part and a pointer for the client part. */
+class tbb_connection_v1: public generic_connection<tbb_server,tbb_client> {
+    friend void wakeup_some_tbb_threads();
+
+    /*override*/ void adjust_job_count_estimate( int delta );
+
+    //! Estimate on number of jobs without threads working on them.
+    tbb::atomic<int> my_slack;
+
+    friend class dummy_class_to_shut_up_gratuitous_warning_from_gcc_3_2_3;
+#if TBB_USE_ASSERT
+    tbb::atomic<int> my_job_count_estimate;
+#endif /* TBB_USE_ASSERT */
+
+    // pad these? or use a single variable w/ atomic add/subtract?
+    tbb::atomic<int> n_adjust_job_count_requests;
+
+    ~tbb_connection_v1();
+
+public:
+    enum tbb_conn_t {
+        c_empty  =  0,
+        c_init   = -1,
+        c_locked = -2
+    };
+
+    //! True if there is slack that try_process can use.
+    bool has_slack() const {
+        return my_slack>0;
+    }
+
+    bool try_process( job& job ) {
+        bool visited = false;
+        // No check for my_slack>0 here because caller is expected to do that check.
+        int k = --my_slack;
+        if( k>=0 ) {
+            client().process(job);
+            visited = true;
+        }
+        ++my_slack; 
+        return visited;
+    }
+
+    tbb_connection_v1( wait_counter& fc, tbb_client& client ) : generic_connection<tbb_server,tbb_client>(fc,client) {
+        my_slack = 0;
+#if TBB_USE_ASSERT
+        my_job_count_estimate = 0;
+#endif /* TBB_USE_ASSERT */
+        __TBB_ASSERT( !my_slack, NULL );
+        do_open();
+        __TBB_ASSERT( this_tbb_connection==reinterpret_cast<tbb_connection_v1*>(tbb_connection_v1::c_init), NULL );
+        n_adjust_job_count_requests = 0;
+        this_tbb_connection = this;
+    }
+
+    void wakeup_tbb_threads( unsigned n )
+    {
+        my_thread_map.wakeup_tbb_threads( n );
+    }
+
+    bool wakeup_next_thread( thread_map::iterator i )
+    {
+       return my_thread_map.wakeup_next_thread( i, *this );
+    }
+
+    thread_map::size_type get_unrealized_threads ()
+    {
+        return my_thread_map.get_unrealized_threads();
+    }
+};
+
+/* to deal with cases where the machine is oversubscribed; we want each thread to trip to try_process() at least once */
+/* this should not involve computing the_balance */
+bool thread_map::wakeup_next_thread( thread_map::iterator this_thr, tbb_connection_v1& conn ) {
+    if( all_visited_at_least_once ) 
+        return false;
+
+    iterator e = end();
+
+retry:
+    bool exist = false;
+    iterator k=this_thr; 
+    for( ++k; k!=e; ++k ) {
+        // If another thread added *k, there is a tiny timing window where thread() is invalid.
+        server_thread& t = k->wait_for_thread();
+        if( t.tbb_state!=ts_visited )
+            exist = true;
+        if( t.read_state()!=ts_tbb_busy && t.tbb_state==ts_started )
+            if( t.try_grab_for( ts_tbb_busy ) )
+                return true;
+    }
+    for( k=begin(); k!=this_thr; ++k ) {
+        server_thread& t = k->wait_for_thread();
+        if( t.tbb_state!=ts_visited )
+            exist = true;
+        if( t.read_state()!=ts_tbb_busy && t.tbb_state==ts_started )
+            if( t.try_grab_for( ts_tbb_busy ) )
+                return true;
+    }
+
+    if( exist ) 
+        if( conn.has_slack() )
+            goto retry;
+    else 
+        all_visited_at_least_once = true;
+
+    return false;
+}
+
+void thread_map::release_tbb_threads( server_thread* t ) {
+    for( ; t; t = t->link ) {
+        while( t->read_state()!=ts_asleep )
+            __TBB_Yield();
+        t->tbb_state = ts_started;
+    }
+}
+
+void thread_map::adjust_balance( int delta ) {
+    int new_balance = the_balance += delta;
+    if( new_balance>0 && 0>=new_balance-delta /*== old the_balance*/ )
+        wakeup_some_tbb_threads();
+}
+
+//------------------------------------------------------------------------
+// OpenMP server
+//------------------------------------------------------------------------
+
+template<>
+struct connection_traits<omp_server,omp_client> {
+    static const message_kind initialize = mk_initialize_omp_job;
+    static const message_kind terminate = mk_terminate_omp_job;
+    static const bool assist_null_only = false;
+    static const bool is_tbb = false;
+};
+
+class omp_connection_v1: public generic_connection<omp_server,omp_client> {
+    /*override*/ int current_balance() const {return the_balance;}
+    /*override*/ int try_increase_load( size_type n, bool strict ); 
+    /*override*/ void decrease_load( size_type n ); 
+    /*override*/ void get_threads( size_type request_size, void* cookie, job* array[] );
+public:
+#if TBB_USE_ASSERT
+    //! Net change in delta caused by this connection.
+    /** Should be zero when connection is broken */
+    tbb::atomic<int> net_delta;
+#endif /* TBB_USE_ASSERT */
+
+    omp_connection_v1( wait_counter& fc, omp_client& client ) : generic_connection<omp_server,omp_client>(fc,client) {
+#if TBB_USE_ASSERT
+        net_delta = 0;
+#endif /* TBB_USE_ASSERT */
+        do_open();
+    }
+    ~omp_connection_v1() {
+        __TBB_ASSERT( net_delta==0, "net increase/decrease of load is nonzero" );
+    }
+};
+
+/** Not a member of generic_connection because we need Connection to be the derived class. */
+template<typename Connection, typename Ring>
+void make_job( Connection& c, Ring& ring, server_thread& t, job_automaton& ja ) {
+    if( ja.try_acquire() ) {
+        typename Ring::job_type& j = *c.client().create_one_job();
+        __TBB_ASSERT( &j!=NULL, "client:::create_one_job returned NULL" );
+        __TBB_ASSERT( (intptr_t(&j)&1)==0, "client::create_one_job returned misaligned job" );
+        ja.set_and_release( j );
+        Connection::scratch_ptr(j) = &t;
+        ring.insert( c, j, ja );
+    }
+}
+
+template<typename Server, typename Client>    
+void generic_connection<Server,Client>::request_close_connection() {
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+// Suppress "conditional expression is constant" warning.
+#pragma warning( push )
+#pragma warning( disable: 4127 ) 
+#endif          
+    if( connection_traits<Server,Client>::is_tbb ) {
+        __TBB_ASSERT( this_tbb_connection==reinterpret_cast<tbb_connection_v1*>(this), NULL );
+        tbb_connection_v1* conn;
+        do {
+            while( (conn=this_tbb_connection)==reinterpret_cast<tbb_connection_v1*>(tbb_connection_v1::c_locked) )
+                __TBB_Yield();
+        } while  ( this_tbb_connection.compare_and_swap(0, conn)!=conn );
+    }
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning( pop )
+#endif
+    my_thread_map.unbind( *this, connection_traits<Server,Client>::terminate );
+    my_thread_map.assist_cleanup( connection_traits<Server,Client>::assist_null_only );
+    // Remove extra reference
+    remove_server_ref();
+}
+
+tbb_connection_v1::~tbb_connection_v1() {
+#if TBB_USE_ASSERT
+    if( my_job_count_estimate!=0 ) {
+        fprintf(stderr, "TBB client tried to disconnect with non-zero net job count estimate of %d\n", int(my_job_count_estimate ));
+        abort();
+    }
+    __TBB_ASSERT( !my_slack, "attempt to destroy tbb_server with nonzero slack" );
+    __TBB_ASSERT( this!=this_tbb_connection, "request_close_connection() must be called" );
+#endif /* TBB_USE_ASSERT */
+    // if the next connection has unstarted threads, start one of them.
+    wakeup_some_tbb_threads();
+}
+
+void tbb_connection_v1::adjust_job_count_estimate( int delta ) {
+#if TBB_USE_ASSERT
+    my_job_count_estimate += delta;
+#endif /* TBB_USE_ASSERT */
+    // Atomically update slack.
+    int c = my_slack+=delta;
+    if( c>0 ) {
+        ++n_adjust_job_count_requests;
+        // The client has work to do and there are threads available
+        thread_map::size_type n = my_thread_map.wakeup_tbb_threads(c); 
+
+        server_thread* new_threads_anchor = NULL;
+        thread_map::size_type i;
+        for( i=0; i<n; ++i ) {
+            // Obtain unrealized threads
+            thread_map::value_type* k = my_thread_map.add_one_thread( false );
+            if( !k ) 
+                // No unrealized threads left.
+                break;
+            // eagerly start the thread off.
+            my_thread_map.bind_one_thread( *this, mk_initialize_tbb_job, *k );
+            server_thread& t = k->thread();
+            __TBB_ASSERT( !t.link, NULL );
+            t.link = new_threads_anchor;
+            new_threads_anchor = &t;
+        }
+
+        thread_map::size_type j=0; 
+        for( ; the_balance>0 && j<i; ++j ) {
+            if( --the_balance>=0 ) {
+                // withdraw a coin from the bank
+                __TBB_ASSERT( new_threads_anchor, NULL );
+
+                server_thread* t = new_threads_anchor;
+                new_threads_anchor = t->link;
+                while( !t->try_grab_for( ts_tbb_busy ) ) 
+                    __TBB_Yield();
+                t->tbb_state = ts_started;
+            } else {
+                // overdraft. return it to the bank
+                ++the_balance;
+                break;
+            }
+        }
+        __TBB_ASSERT( i-j!=0||new_threads_anchor==NULL, NULL );
+        // mark the ones that did not get started as eligible for being snatched.
+        if( new_threads_anchor )
+            my_thread_map.release_tbb_threads( new_threads_anchor );
+
+        --n_adjust_job_count_requests;
+    }
+}
+
+//! wake some available tbb threads
+/**
+     First, atomically grab the connection, then increase the server ref count to keep it from being released prematurely.
+     Second, check if the balance is available for TBB and the tbb conneciton has slack to exploit.
+     If the answer is true, go ahead and try to wake some up.
+ */
+void wakeup_some_tbb_threads()
+{
+    for( ;; ) {
+        tbb_connection_v1* conn = this_tbb_connection;
+        /*
+            if( conn==0 or conn==tbb_connection_v1::c_init )
+                the next connection will see my last change to the deposit; do nothing
+            if( conn==tbb_connection_v1::c_locked )
+                a thread is already in the region A-B below. 
+                it will read the change made by threads of my connection to the_balance;
+                do nothing
+
+            0==c_empty, -1==c_init, -2==c_locked
+        */
+        if( ((-ptrdiff_t(conn))&~3 )==0 )
+            return;
+
+        // FIXME: place the_balance next to tbb_this_connection ? to save some cache moves ?
+        /* region A: this is the only place to set this_tbb_connection to c_locked */
+        tbb_connection_v1* old_ttc = this_tbb_connection.compare_and_swap( reinterpret_cast<tbb_connection_v1*>(tbb_connection_v1::c_locked), conn );
+        if( old_ttc==conn ) {
+#if USE_TBB_ASSERT
+            __TBB_ASSERT( conn->add_server_ref()>1, NULL );
+#else
+            conn->add_server_ref();
+#endif
+            /* region B: this is the only place to restore this_tbb_connection from c_locked */
+            this_tbb_connection = conn; // restoring it means releasing it
+
+            /* some threads are creating tbb server threads; they may not see my changes made to the_balance */
+            while( conn->n_adjust_job_count_requests>0 )
+                __TBB_Yield();
+
+            int bal = the_balance;
+            if( bal>0 && conn->has_slack() ) 
+                conn->wakeup_tbb_threads( bal );
+            conn->remove_server_ref();
+            break;
+        } else if( ((-ptrdiff_t(old_ttc))&~3)==0 ) {
+            return; /* see above */
+        } else {
+            __TBB_Yield();
+        }
+    }
+}
+
+int omp_connection_v1::try_increase_load( size_type n, bool strict ) { 
+    __TBB_ASSERT(int(n)>=0,NULL);
+    if( strict ) {
+        the_balance-=int(n);
+    } else {
+        int avail, old;
+        do {
+            avail = the_balance;
+            if( avail<=0 ) {
+                // No atomic read-write-modify operation necessary.
+                return avail;
+            }
+            // don't read the_balance; if it changes, compare_and_swap will fail anyway.
+            old = the_balance.compare_and_swap( int(n)<avail ? avail-n : 0, avail );
+        } while( old!=avail );
+        if( int(n)>avail ) 
+            n=avail;
+    }
+#if TBB_USE_ASSERT
+    net_delta += n;
+#endif /* TBB_USE_ASSERT */
+    return n;
+}
+
+void omp_connection_v1::decrease_load( size_type n ) {
+    __TBB_ASSERT(int(n)>=0,NULL);
+    my_thread_map.adjust_balance(int(n));
+#if TBB_USE_ASSERT
+    net_delta -= n;
+#endif /* TBB_USE_ASSERT */
+}
+
+void omp_connection_v1::get_threads( size_type request_size, void* cookie, job* array[] ) {
+
+    if( !request_size ) 
+        return;
+
+    unsigned index = 0;
+
+    for(;;) { // don't return until all request_size threads are grabbed.
+        // Need to grab some threads
+        thread_map::iterator k_end=my_thread_map.end();
+        // FIXME - this search is going to be *very* slow when there is a large number of threads and most are in use.
+        // Consider starting search at random point, or high water mark of sorts.
+        for( thread_map::iterator k=my_thread_map.begin(); k!=k_end; ++k ) {
+            // If another thread added *k, there is a tiny timing window where thread() is invalid.
+            server_thread& t = k->wait_for_thread();
+            if( t.try_grab_for( ts_omp_busy ) ) {
+                // The preincrement instead of post-increment of index is deliberate.
+                job& j = k->wait_for_job();
+                    array[index] = &j;
+                t.omp_dispatch.produce( client(), j, cookie, index PRODUCE_ARG(*this) );
+                if( ++index==request_size ) 
+                    return;
+            } 
+        }
+        // Need to allocate more threads
+        for( unsigned i=index; i<request_size; ++i ) {
+            __TBB_ASSERT( index<request_size, NULL );
+            thread_map::value_type* k = my_thread_map.add_one_thread( true );
+            if( !k ) {
+                // Client erred
+                fprintf(stderr,"server::get_threads: exceeded job_count\n");
+                __TBB_ASSERT(false, NULL);
+            }
+            my_thread_map.bind_one_thread( *this, mk_initialize_omp_job, *k );
+            server_thread& t = k->thread();
+            if( t.try_grab_for( ts_omp_busy ) ) {
+                job& j = k->wait_for_job();
+                array[index] = &j;
+                // The preincrement instead of post-increment of index is deliberate.
+                t.omp_dispatch.produce( client(), j, cookie, index PRODUCE_ARG(*this) );
+                if( ++index==request_size ) 
+                    return;
+            } // else someone else snatched it.
+        }
+    }
+}
+
+//------------------------------------------------------------------------
+// Methods of omp_dispatch_type
+//------------------------------------------------------------------------
+void omp_dispatch_type::consume() {
+    job_type* j; 
+    // Wait for short window between when master sets state of this thread to ts_omp_busy
+    // and master thread calls produce.
+    // FIXME - this is a very short spin while the producer is setting fields of *this, 
+    // but nonetheless the loop should probably use exponential backoff, or at least pause instructions.
+    do {
+        j = job;
+    } while( !j );
+    job = static_cast<job_type*>(NULL);
+    client->process(*j,cookie,index);
+#if TBB_USE_ASSERT
+    // Return of method process implies "decrease_load" from client's viewpoint, even though
+    // the actual adjustment of the_balance only happens when this thread really goes to sleep.
+    --server->net_delta;
+#endif /* TBB_USE_ASSERT */
+}
+
+//------------------------------------------------------------------------
+// Methods of server_thread
+//------------------------------------------------------------------------
+
+server_thread::server_thread() : 
+    ref_count(0),
+    link(NULL), // FIXME: remove when all fixes are done.
+    my_map_pos(),
+    stack_size(0) 
+{
+    state = ts_idle;
+#if TBB_USE_ASSERT
+    has_active_thread = false;
+#endif /* TBB_USE_ASSERT */
+}
+
+server_thread::~server_thread() {
+    __TBB_ASSERT( !has_active_thread, NULL );
+}
+
+__RML_DECL_THREAD_ROUTINE server_thread::thread_routine( void* arg ) {
+    server_thread* self = static_cast<server_thread*>(arg);
+#if TBB_USE_ASSERT
+    __TBB_ASSERT( !self->has_active_thread, NULL );
+    self->has_active_thread = true;
+#endif /* TBB_USE_ASSERT */
+    self->loop();
+    return NULL;
+}
+
+void server_thread::launch( size_t stack_size ) {
+    this->stack_size = stack_size;
+    thread_monitor::launch( thread_routine, this, stack_size );
+}
+
+void server_thread::sleep_perhaps( thread_state_t asleep ) {
+    __TBB_ASSERT( asleep==ts_asleep, NULL );
+    thread_monitor::cookie c; 
+    monitor.prepare_wait(c);
+    if( state.compare_and_swap( asleep, ts_idle )==ts_idle ) {
+        if( requests.empty() ) {
+            monitor.commit_wait(c);
+            // Someone else woke me up.  The compare_and_swap further below deals with spurious wakeups.
+        } else {
+            monitor.cancel_wait();
+        }
+        // Following compare-and-swap logic tries to transition from asleep to idle while both ignoring the
+        // preserving the reserved_flag bit in state, because some other thread may be asynchronously clearing
+        // the reserved_flag bit within state.
+        thread_state_t s = read_state();
+        if( s==ts_asleep ) {
+            state.compare_and_swap( ts_idle, ts_asleep );
+            // I woke myself up, either because I cancelled the wait or suffered a spurious wakeup.
+        } else {
+            // Someone else woke me up; there the_balance is decremented by 1. -- tbb only
+            if( !is_omp_thread ) {
+                __TBB_ASSERT( state==ts_tbb_busy||state==ts_idle, NULL );
+            }
+        }
+    } else {
+        // someone else made it busy ; see try_grab_for when state==ts_idle.
+        __TBB_ASSERT( state==ts_omp_busy||state==ts_tbb_busy, NULL );
+        monitor.cancel_wait();
+    }
+    __TBB_ASSERT( read_state()!=asleep, "a thread can only put itself to sleep" );
+}
+
+bool server_thread::wakeup( bool only_if_undersubscribed, thread_state_t to, thread_state_t from ) {
+    bool success = false;
+    __TBB_ASSERT( from==ts_asleep && (to==ts_idle||to==ts_omp_busy||to==ts_tbb_busy), 
+                  NULL );
+    if( !only_if_undersubscribed ) {
+        if( state.compare_and_swap( to, from )==from ) {
+            if( !is_omp_thread )
+                __TBB_ASSERT( to==ts_idle||to==ts_tbb_busy, NULL );
+            // There is a small timing window that permits balance to become negative,
+            // but such occurrences are probably rare enough to not worry about, since
+            // at worst the result is slight temporary oversubscription.
+            monitor.notify();
+            success = true;
+        }
+    } 
+    return success;
+}
+
+//! Attempt to change a thread's state to ts_omp_busy, and waking it up if necessary. 
+bool server_thread::try_grab_for( thread_state_t target_state ) {
+    bool success = false;
+    switch( read_state() ) {
+        case ts_asleep: 
+            success = wakeup( /*only_if_undersubscribed=*/false, target_state, ts_asleep );
+            break;
+        case ts_idle:
+            success = state.compare_and_swap( target_state, ts_idle )==ts_idle;
+            break;
+        default:
+            // Thread is not available to be part of an OpenMP thread team.
+            break;
+    }
+    return success;
+}
+
+template<typename Ring>
+inline bool server_thread::destroy_job( Ring& ring, typename Ring::connection_type& c ) {
+    __TBB_ASSERT( !is_omp_thread||state==ts_idle, NULL );
+    __TBB_ASSERT( is_omp_thread||(state==ts_idle||state==ts_tbb_busy), NULL );
+    if( !is_omp_thread ) {
+        __TBB_ASSERT( state==ts_idle||state==ts_tbb_busy, NULL );
+        if( state==ts_idle )
+            state.compare_and_swap( ts_done, ts_idle );
+        // 'state' may be set to ts_tbb_busy by another thread..
+
+        if( state==ts_tbb_busy ) { // return the coin to the deposit
+            // need to deposit first to let the next connection see the change
+            ++the_balance;
+        }
+    }
+    if( job_automaton* ja = ring.erase( c ) ) {
+        rml::job* j;
+        if( ja->try_plug(j) ) {
+            __TBB_ASSERT( j, NULL );
+            c.client().cleanup(*j);
+            c.remove_client_ref();
+        } else {
+            // Some other thread took responsibility for cleaning up the job.
+        }
+    }
+    //! Must do remove client reference first, because execution of c.remove_ref() can cause *this to be destroyed.
+#if TBB_USE_ASSERT
+    __TBB_ASSERT( remove_ref()==0, "more than one references?" );
+    has_active_thread = false;
+#else
+    remove_ref();
+#endif /* TBB_USE_ASSERT */
+    c.remove_server_ref();
+    return true;
+}
+
+bool server_thread::process_requests() {
+    __TBB_ASSERT( !requests.empty(), "should only be called for non-empty queue" );
+    do {
+        message m;
+        requests.pop( m );
+        switch( m.kind ) {
+            case mk_initialize_tbb_job: 
+                make_job( *static_cast<tbb_connection_v1*>(m.connection), tbb_ring, *this, *m.automaton );
+                break;
+            
+            case mk_initialize_omp_job: 
+                make_job( *static_cast<omp_connection_v1*>(m.connection), omp_ring, *this, *m.automaton );
+                break;
+
+            case mk_terminate_tbb_job:
+                if( destroy_job( tbb_ring, *static_cast<tbb_connection_v1*>(m.connection) ) )
+                    return true;
+                break; 
+
+            case mk_terminate_omp_job:
+                if( destroy_job( omp_ring, *static_cast<omp_connection_v1*>(m.connection) ) )
+                    return true;
+                break; 
+         }
+    } while( !requests.empty() );
+    return false;
+}
+
+//! Loop that each thread executes
+void server_thread::loop() {
+    for(;;) {
+        __TBB_Yield();
+        if( state==ts_idle )
+            sleep_perhaps( ts_asleep );   
+
+        // Drain mailbox before reading the state.
+        if( !requests.empty() ) 
+            if( process_requests() )
+                return;     
+             
+        // read the state after draining the mail box
+        thread_state_t s = read_state();
+        __TBB_ASSERT( s==ts_idle||s==ts_omp_busy||s==ts_tbb_busy, NULL );
+
+        if( s==ts_omp_busy ) {
+            // Enslaved by OpenMP team.  
+            omp_dispatch.consume();
+            /* here wake a tbb thread up if feasible */
+            int bal = ++the_balance;
+            if( bal>0 )
+                wakeup_some_tbb_threads();
+            state = ts_idle;
+        } else if( s==ts_tbb_busy ) {
+            // do some TBB work.
+            const tbb_ring_type::value_type* item = tbb_ring.cursor(); 
+            __TBB_ASSERT( item, NULL );
+            tbb_connection_v1& conn = item->connection();
+            // give openmp higher priority
+            bool has_coin = true;
+            while( has_coin && conn.has_slack() && the_balance>=0 ) {
+                if( conn.try_process(item->job()) ) {
+                    tbb_state = ts_visited;
+                    if( conn.has_slack() && the_balance>=0 )
+                        has_coin = !conn.wakeup_next_thread( my_map_pos );
+                }
+            }
+            state = ts_idle;
+            if( has_coin ) {
+                ++the_balance; // return the coin back to the deposit
+                if( conn.has_slack() ) { // a new adjust_job_request_estimate() is in progress
+                                         // it may have missed my changes to state and/or the_balance
+                    int bal = --the_balance; // try to grab the coin back
+                    if( bal>=0 ) { // I got the coin
+                        if( state.compare_and_swap( ts_tbb_busy, ts_idle )!=ts_idle )
+                            ++the_balance; // someone else enlisted me.
+                    } else {
+                        // overdraft. return the coin
+                        ++the_balance;
+                    }
+                } // else the new request will see my changes to state & the_balance.
+            }
+        }
+    }
+}
+
+template<typename Connection, typename Server, typename Client>
+static factory::status_type connect( factory& f, Server*& server, Client& client ) {
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+// Suppress "conditional expression is constant" warning.
+#pragma warning( push )
+#pragma warning( disable: 4127 ) 
+#endif          
+    if( connection_traits<Server,Client>::is_tbb )
+        if( this_tbb_connection.compare_and_swap(reinterpret_cast<tbb_connection_v1*>(-1), reinterpret_cast<tbb_connection_v1*>(0))!=0 )
+            return factory::st_connection_exists;
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning( pop )
+#endif
+    server = new Connection(*static_cast<wait_counter*>(f.scratch_ptr),client);
+    return factory::st_success; 
+}
+
+extern "C" factory::status_type __RML_open_factory( factory& f, version_type& server_version, version_type client_version ) {
+    // Hack to keep this library from being closed by causing the first client's dlopen to not have a corresponding dlclose. 
+    // This code will be removed once we figure out how to do shutdown of the RML perfectly.
+    static tbb::atomic<bool> one_time_flag;
+    if( one_time_flag.compare_and_swap(true,false)==false) {
+        f.library_handle = NULL;
+    }
+    // End of hack
+
+    // initialize the_balance only once
+    if( the_balance_inited==0 ) {
+        if( the_balance_inited.compare_and_swap( 1, 0 )==0 ) {
+            the_balance = hardware_concurrency()-1;
+            the_balance_inited = 2;
+        } else {
+            tbb::internal::spin_wait_until_eq( the_balance_inited, 2 );
+        }
+    }
+
+    server_version = SERVER_VERSION;
+    f.scratch_ptr = 0;
+    if( client_version==0 ) {
+        return factory::st_incompatible;
+    } else {
+        f.scratch_ptr = new wait_counter;
+        return factory::st_success;
+    }
+}
+
+extern "C" void __RML_close_factory( factory& f ) {
+    if( wait_counter* fc = static_cast<wait_counter*>(f.scratch_ptr) ) {
+        f.scratch_ptr = 0;
+        fc->wait();
+        delete fc;
+    }
+}
+
+void call_with_build_date_str( ::rml::server_info_callback_t cb, void* arg );
+
+}} // rml::internal 
+
+namespace tbb {
+namespace internal {
+namespace rml {
+
+extern "C" tbb_factory::status_type __TBB_make_rml_server( tbb_factory& f, tbb_server*& server, tbb_client& client ) {
+    return ::rml::internal::connect< ::rml::internal::tbb_connection_v1>(f,server,client);
+}
+
+extern "C" void __TBB_call_with_my_server_info( ::rml::server_info_callback_t cb, void* arg ) {
+    return ::rml::internal::call_with_build_date_str( cb, arg );
+}
+
+}}}
+
+namespace __kmp {
+namespace rml {
+
+extern "C" omp_factory::status_type __KMP_make_rml_server( omp_factory& f, omp_server*& server, omp_client& client ) {
+    return ::rml::internal::connect< ::rml::internal::omp_connection_v1>(f,server,client);
+}
+
+extern "C" void __KMP_call_with_my_server_info( ::rml::server_info_callback_t cb, void* arg ) {
+    return ::rml::internal::call_with_build_date_str( cb, arg );
+}
+
+}}
+
+/*
+ * RML server info
+ */
+#include "version_string.tmp"
+
+#ifndef __TBB_VERSION_STRINGS
+#pragma message("Warning: version_string.tmp isn't generated properly by version_info.sh script!")
+#endif
+
+// We pass the build time as the RML server info.  TBB is required to build RML, so we make it the same as the TBB build time.
+#ifndef __TBB_DATETIME
+#define __TBB_DATETIME __DATE__ " " __TIME__
+#endif
+#define RML_SERVER_INFO "Intel(R) RML library built: " __TBB_DATETIME
+
+namespace rml {
+namespace internal {
+void call_with_build_date_str( ::rml::server_info_callback_t cb, void* arg )
+{
+    (*cb)( arg, RML_SERVER_INFO );
+}
+}} // rml::internal 
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/thread_monitor.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/thread_monitor.h
new file mode 100644 (file)
index 0000000..aaa26c4
--- /dev/null
@@ -0,0 +1,224 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// All platform-specific threading support is encapsulated here. */
+#ifndef __RML_thread_monitor_H
+#define __RML_thread_monitor_H
+
+#if USE_WINTHREAD
+#include <windows.h>
+#include <process.h>
+#elif USE_PTHREAD
+#include <pthread.h>
+#include <string.h>
+#include <stdlib.h>
+#else
+#error Unsupported platform
+#endif 
+#include <stdio.h>
+
+// All platform-specific threading support is in this header.
+
+namespace rml {
+
+namespace internal {
+
+//! Monitor with limited two-phase commit form of wait.  
+/** At most one thread should wait on an instance at a time. */
+class thread_monitor {
+public:
+    class cookie {
+        friend class thread_monitor;
+        unsigned long long my_version;
+    };
+    thread_monitor();
+    ~thread_monitor();
+
+    //! If a thread is waiting or started a two-phase wait, notify it.
+    /** Can be called by any thread. */
+    void notify();
+
+    //! Begin two-phase wait.
+    /** Should only be called by thread that owns the monitor. 
+        The caller must either complete the wait or cancel it. */
+    void prepare_wait( cookie& c );
+
+    //! Complete a two-phase wait and wait until notification occurs after the earlier prepare_wait.
+    void commit_wait( cookie& c );
+
+    //! Cancel a two-phase wait.
+    void cancel_wait();
+
+#if USE_WINTHREAD
+#define __RML_DECL_THREAD_ROUTINE unsigned WINAPI
+    typedef unsigned (WINAPI *thread_routine_type)(void*);
+#endif /* USE_WINTHREAD */
+
+#if USE_PTHREAD
+#define __RML_DECL_THREAD_ROUTINE void*
+    typedef void*(*thread_routine_type)(void*);
+#endif /* USE_PTHREAD */
+
+    //! Launch a thread
+    static void launch( thread_routine_type thread_routine, void* arg, size_t stack_size );
+    static void yield();
+
+private:
+    cookie my_cookie;
+#if USE_WINTHREAD
+    CRITICAL_SECTION critical_section;
+    HANDLE event;
+#endif /* USE_WINTHREAD */
+#if USE_PTHREAD
+    pthread_mutex_t my_mutex;
+    pthread_cond_t my_cond;
+    static void check( int error_code, const char* routine );
+#endif /* USE_PTHREAD */
+};
+
+
+#if USE_WINTHREAD
+inline void thread_monitor::launch( thread_routine_type thread_routine, void* arg, size_t stack_size ) {
+    unsigned thread_id;
+    uintptr_t status = _beginthreadex( NULL, unsigned(stack_size), thread_routine, arg, STACK_SIZE_PARAM_IS_A_RESERVATION, &thread_id );
+    if( status==0 ) {
+        fprintf(stderr,"thread_monitor::launch: _beginthreadex failed\n");
+        exit(1); 
+    } else {
+        CloseHandle((HANDLE)status);
+    }
+}
+
+inline void thread_monitor::yield() {
+    SwitchToThread();
+}
+
+inline thread_monitor::thread_monitor() {
+    event = CreateEvent( NULL, /*manualReset=*/true, /*initialState=*/false, NULL );
+    InitializeCriticalSection( &critical_section );
+    my_cookie.my_version = 0;
+}
+
+inline thread_monitor::~thread_monitor() {
+    CloseHandle( event );
+    DeleteCriticalSection( &critical_section );
+}
+     
+inline void thread_monitor::notify() {
+    EnterCriticalSection( &critical_section );
+    ++my_cookie.my_version;
+    SetEvent( event );
+    LeaveCriticalSection( &critical_section );
+}
+
+inline void thread_monitor::prepare_wait( cookie& c ) {
+    EnterCriticalSection( &critical_section );
+    c = my_cookie;
+}
+
+inline void thread_monitor::commit_wait( cookie& c ) {
+    ResetEvent( event );
+    LeaveCriticalSection( &critical_section );
+    while( my_cookie.my_version==c.my_version ) {
+        WaitForSingleObject( event, INFINITE );
+        ResetEvent( event );
+    }
+}
+
+inline void thread_monitor::cancel_wait() {
+    LeaveCriticalSection( &critical_section );
+}
+#endif /* USE_WINTHREAD */
+
+#if USE_PTHREAD
+inline void thread_monitor::check( int error_code, const char* routine ) {
+    if( error_code ) {
+        fprintf(stderr,"thread_monitor %s\n", strerror(error_code) );
+        exit(1);
+    }
+}
+
+inline void thread_monitor::launch( void* (*thread_routine)(void*), void* arg, size_t stack_size ) {
+    // FIXME - consider more graceful recovery than just exiting if a thread cannot be launched.
+    // Note that there are some tricky situations to deal with, such that the thread is already 
+    // grabbed as part of an OpenMP team, or is being launched as a replacement for a thread with
+    // too small a stack.
+    pthread_attr_t s;
+    check(pthread_attr_init( &s ), "pthread_attr_init");
+    if( stack_size>0 ) {
+        check(pthread_attr_setstacksize( &s, stack_size ),"pthread_attr_setstack_size");
+    }
+    pthread_t handle;
+    check( pthread_create( &handle, &s, thread_routine, arg ), "pthread_create" );
+    check( pthread_detach( handle ), "pthread_detach" );
+}
+
+inline void thread_monitor::yield() {
+    sched_yield();
+}
+
+inline thread_monitor::thread_monitor() {
+    check( pthread_mutex_init(&my_mutex,NULL), "pthread_mutex_init" );
+    check( pthread_cond_init(&my_cond,NULL), "pthread_cond_init" );
+    my_cookie.my_version = 0;
+}
+
+inline thread_monitor::~thread_monitor() {
+    pthread_cond_destroy(&my_cond);
+    pthread_mutex_destroy(&my_mutex);
+}
+
+inline void thread_monitor::notify() {
+    check( pthread_mutex_lock( &my_mutex ), "pthread_mutex_lock" );
+    ++my_cookie.my_version;
+    check( pthread_mutex_unlock( &my_mutex ), "pthread_mutex_unlock" );
+    check( pthread_cond_signal(&my_cond), "pthread_cond_signal" );
+}
+
+inline void thread_monitor::prepare_wait( cookie& c ) {
+    check( pthread_mutex_lock( &my_mutex ), "pthread_mutex_lock" );
+    c = my_cookie;
+}
+
+inline void thread_monitor::commit_wait( cookie& c ) {
+    while( my_cookie.my_version==c.my_version ) {
+        pthread_cond_wait( &my_cond, &my_mutex );
+    }
+    check( pthread_mutex_unlock( &my_mutex ), "pthread_mutex_unlock" );
+}
+
+inline void thread_monitor::cancel_wait() {
+    check( pthread_mutex_unlock( &my_mutex ), "pthread_mutex_unlock" );
+}
+#endif /* USE_PTHREAD */
+
+} // namespace internal
+} // namespace rml
+
+#endif /* __RML_thread_monitor_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/wait_counter.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/wait_counter.h
new file mode 100644 (file)
index 0000000..0951f97
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __RML_wait_counter_H
+#define __RML_wait_counter_H
+
+#include "thread_monitor.h"
+#include "tbb/atomic.h"
+
+namespace rml {
+namespace internal {
+
+class wait_counter {
+    thread_monitor my_monitor;
+    tbb::atomic<int> my_count;
+    tbb::atomic<int> n_transients;
+public:
+    wait_counter() { 
+        // The "1" here is subtracted by the call to "wait".
+        my_count=1;
+        n_transients=0;
+    }
+
+    //! Wait for number of operator-- invocations to match number of operator++ invocations.
+    /** Exactly one thread should call this method. */
+    void wait() {
+        int k = --my_count;
+        __TBB_ASSERT( k>=0, "counter underflow" );
+        if( k>0 ) {
+            thread_monitor::cookie c;
+            my_monitor.prepare_wait(c);
+            if( my_count )
+                my_monitor.commit_wait(c);
+            else 
+                my_monitor.cancel_wait();
+        }
+        while( n_transients>0 )
+            __TBB_Yield();
+    }
+    void operator++() {
+        ++my_count;
+    }
+    void operator--() {
+        ++n_transients;
+        int k = --my_count;
+        __TBB_ASSERT( k>=0, "counter underflow" );
+        if( k==0 ) 
+            my_monitor.notify();
+        --n_transients;
+    }
+};
+
+} // namespace internal
+} // namespace rml
+
+#endif /* __RML_wait_counter_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/win32-rml-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/win32-rml-export.def
new file mode 100644 (file)
index 0000000..54be4b1
--- /dev/null
@@ -0,0 +1,35 @@
+; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction.  Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License.  This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+EXPORTS
+
+__RML_open_factory
+__RML_close_factory
+__TBB_make_rml_server
+__KMP_make_rml_server
+__TBB_call_with_my_server_info
+__KMP_call_with_my_server_info
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/win64-rml-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/server/win64-rml-export.def
new file mode 100644 (file)
index 0000000..54be4b1
--- /dev/null
@@ -0,0 +1,35 @@
+; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction.  Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License.  This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+EXPORTS
+
+__RML_open_factory
+__RML_close_factory
+__TBB_make_rml_server
+__KMP_make_rml_server
+__TBB_call_with_my_server_info
+__KMP_call_with_my_server_info
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/rml_omp_stub.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/rml_omp_stub.cpp
new file mode 100644 (file)
index 0000000..d9d6ba4
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// This file is compiled with C++, but linked with a program written in C.
+// The intent is to find dependencies on the C++ run-time.
+
+#include <stdlib.h>
+#define RML_PURE_VIRTUAL_HANDLER abort
+
+#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
+// VS2008/VC9 seems to have an issue; 
+#pragma warning( push )
+#pragma warning( disable: 4100 ) 
+#endif          
+#include "rml_omp.h"
+#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
+#pragma warning( pop )
+#endif
+
+rml::versioned_object::version_type Version;
+
+class MyClient: public __kmp::rml::omp_client {
+public:
+    /*override*/rml::versioned_object::version_type version() const {return 0;}
+    /*override*/size_type max_job_count() const {return 1024;}
+    /*override*/size_t min_stack_size() const {return 1<<20;}
+    /*override*/rml::job* create_one_job() {return NULL;}
+    /*override*/void acknowledge_close_connection() {}
+    /*override*/void cleanup(job&) {}
+    /*override*/policy_type policy() const {return throughput;}
+    /*override*/void process( job&, void*, __kmp::rml::omp_client::size_type ) {}
+   
+};
+
+//! Never actually set, because point of test is to find linkage issues.
+__kmp::rml::omp_server* MyServerPtr;
+
+extern "C" void Cplusplus() {
+    MyClient client;
+    Version = client.version();
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_hunk.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_hunk.cpp
new file mode 100644 (file)
index 0000000..d8f4d60
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "hunk.h"
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+
+int Limit;
+int Count;
+
+struct Exception {};
+
+class MinimalType: NoCopy {
+    //! Used to detect use of bitwise copy instead of copy constructor
+    MinimalType* my_self_ptr;
+public:
+    bool is_valid() const {return my_self_ptr==this;}
+    MinimalType() {
+        my_self_ptr = this;
+        if( Count>=Limit ) 
+            throw Exception();
+        ++Count;
+    }
+    ~MinimalType() {
+        my_self_ptr = NULL;
+        --Count;
+    }
+};
+
+typedef rml::internal::hunk<MinimalType> MyHunkType;
+
+void SimpleTest() {
+    // Trials differ in whether method clear is used or not before destruction
+    for( int trial=0; trial<2; ++trial ) {
+        for( int n=0; n<25; ++n ) {
+            {
+                MyHunkType h;
+                Limit = n;
+                ASSERT( !h.is_allocated(), NULL );
+                h.allocate( n );
+                ASSERT( Count==n, NULL );
+                ASSERT( h.is_allocated(), NULL );
+                ASSERT( h.size()==size_t(n), NULL );
+                size_t k=0;
+                for( MyHunkType::iterator i=h.begin(); i!=h.end(); ++i, ++k ) {
+                    ASSERT( i->is_valid(), NULL );
+                    MinimalType& element = h[k];
+                    ASSERT( &element==h.begin()+k, NULL );
+                }
+                if( trial&1 ) {
+                    h.clear();
+                    ASSERT( Count==0, NULL );
+                    ASSERT( !h.is_allocated(), NULL );
+                }
+            }
+            ASSERT( Count==0, NULL );
+        }
+    }
+}
+
+void ExceptionTest() {
+    for( Limit=0; Limit<25; ++Limit ) 
+        for( int n=Limit+1; n<=Limit+25; ++n ) {
+            MyHunkType h;
+            ASSERT( Count==0, NULL );
+            try {
+                h.allocate( n );
+            } catch( Exception ) {
+                ASSERT( Count==0, "did not undo constructions properly?" );
+            }
+        }
+}
+
+int main() {
+    SimpleTest();
+    ExceptionTest();
+    printf("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_job_automaton.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_job_automaton.cpp
new file mode 100644 (file)
index 0000000..29fd792
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "job_automaton.h"
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+#include "harness_barrier.h"
+
+class State {
+    Harness::SpinBarrier barrier;
+    rml::internal::job_automaton ja;
+    rml::job job;
+    tbb::atomic<int> job_created;
+    tbb::atomic<int> job_destroyed;
+    tbb::atomic<bool> job_received;
+public:
+    State() : barrier(2) {
+        job_created = 0;
+        job_destroyed = 0;
+        job_received = false;
+    }
+    void exercise( bool is_owner );
+    ~State() {
+        ASSERT( job_created==job_destroyed, "accounting error" );
+        ASSERT( job_destroyed<=1, "destroyed job twice" );
+    }
+};
+
+int DelayMask;
+const int N = 14; 
+tbb::atomic<int> Coverage[N];
+
+//! Mark kth interval as covered and insert delay if kth bit of DelayMask is set.
+/** An interval is the code between two operations on the job_automaton that we are testing. */
+void Cover( int k ) {
+    ASSERT( k<N, NULL );
+    ++Coverage[k];
+    if( DelayMask>>k&1 ) {
+        // Introduce delay (and possibly a thread context switch)
+        __TBB_Yield();
+    }
+}
+
+void State::exercise( bool is_owner ) {
+    barrier.wait();
+    if( is_owner ) {
+        Cover(0);
+        if( ja.try_acquire() ) {
+            Cover(1);
+            ++job_created; 
+            ja.set_and_release(job);
+            Cover(2);
+            if( ja.try_acquire() ) {
+                Cover(3);
+                ja.release();
+                Cover(4);
+                if( ja.try_acquire() ) {
+                    Cover(5);
+                    ja.release();
+                }
+            }
+            Cover(6);
+        } else {
+            Cover(7);
+        }
+        if( DelayMask&1<<N ) {
+            while( !job_received ) 
+                __TBB_Yield();
+        }
+    } else {
+        // Using extra bit of DelayMask for choosing whether to run wait_for_job or not.
+        if( DelayMask&1<<N ) {
+            rml::job* j= &ja.wait_for_job(); 
+ if( j!=&job ) printf("%p\n",j);
+            ASSERT( j==&job, NULL );
+            job_received = true;
+        }
+        Cover(8);
+    }   
+    rml::job* j;
+    if( ja.try_plug(j) ) {
+        ASSERT( j==&job || !j, NULL );
+        if( j ) {
+            Cover(9+is_owner);
+            ++job_destroyed;
+        } else {
+            __TBB_ASSERT( !is_owner, "owner failed to create job but plugged self" );
+            Cover(11);
+        } 
+    } else {
+        Cover(12+is_owner);
+    }
+}
+
+class Loop: NoAssign {
+    State& s;
+public:
+    Loop(State& s_) : s(s_) {}
+    void operator()( int i ) const {s.exercise(i==0);}
+};
+
+/** Return true if coverage is acceptable.
+    If report==true, issue message if it is unacceptable. */
+bool CheckCoverage( bool report ) {
+    bool okay = true;
+    for( int i=0; i<N; ++i ) {
+        const int min_coverage = 4; 
+        if( Coverage[i]<min_coverage ) {
+            okay = false;
+            if( report )
+                printf("Warning: Coverage[%d]=%d is less than acceptable minimum of %d\n", i, int(Coverage[i]),min_coverage);
+        }
+    }
+    return okay;
+}
+
+int main() {
+    for( DelayMask=0; DelayMask<8<<N; ++DelayMask ) {
+        State s;
+        NativeParallelFor( 2, Loop(s) );
+        if( CheckCoverage(false) ) { 
+            // Reached acceptable code coverage level
+            break;
+        }
+    }
+    CheckCoverage(true);
+    printf("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_ring.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_ring.cpp
new file mode 100644 (file)
index 0000000..75ca0f1
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "ring.h"
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+
+/** Must be relatively prime to 17. */
+const size_t N = 20;
+
+struct MyJob: ::rml::job, private NoCopy {
+    size_t tag;
+};
+
+size_t Count;
+
+struct MyClient: NoAssign {
+    //! Is virtual because what the test is testing is virtual in the real production case.
+    virtual void tally( ::rml::job& job ) {
+        ++Count;
+        ASSERT( static_cast<MyJob&>(job).tag>0, NULL ); 
+    }
+    virtual ~MyClient() {}
+};
+
+struct MyConnection: private NoCopy {
+    MyClient client() const {return MyClient();}
+};
+
+MyConnection Connections[N];
+
+MyJob Job[N];
+rml::internal::job_automaton JobAutomaton[N];
+
+typedef rml::internal::ring<MyConnection> MyRingType;
+
+void CheckSizeAndRandomizeCursor( MyRingType& r, size_t size ) {
+    Count = 0;
+    r.for_each_job( &MyClient::tally ) ;
+    ASSERT( Count==size, NULL );
+    if( size ) {
+        // March cursor around to semi-random point
+        size_t delta = size_t(rand()) % size;
+        for( size_t m=0; m<delta; ++m )
+            r.advance_cursor();
+    }
+}
+
+#include <cstdlib>
+
+int main() {
+    srand(2);
+    // Trials differ in randomization of cursor
+    for( int trial=0; trial<20; ++trial ) {
+        MyRingType r;
+        ASSERT( r.cursor()==NULL, NULL );
+        // Add some jobs
+        for( size_t i=0; i<N; ++i ) {
+            MyJob& job = Job[i*17%N];
+            MyJob* current_job = static_cast<MyJob*>(r.cursor() ? &r.cursor()->job() : NULL);
+            r.insert( Connections[i*61%N], job, JobAutomaton[i*17%N] );
+            ASSERT( r.size()==i+1, NULL );
+            if( current_job )
+                ASSERT( &r.cursor()->job()==current_job, "insertion did not preserve cursor position" );
+            else 
+                ASSERT( &r.cursor()->job()==&job, "cursor not positioned after inserting into empty ring" );
+            job.tag = i+1;
+            CheckSizeAndRandomizeCursor(r,i+1);
+            // Walk around ring once
+            size_t sum = 0;
+            for( size_t k=0; k<=i; ++k ) {
+                // Use const object here for sake of testing that cursor() is const.
+                const MyRingType& cr = r;
+                sum += static_cast<MyJob&>(cr.cursor()->job()).tag;
+                r.advance_cursor();
+            }
+            ASSERT( sum==(i+1)*(i+2)/2, NULL );
+        }
+        // Remove the jobs
+        for( size_t k=0; k<N; ++k ) {
+            // Get current and next cursor position.
+            MyJob* current_job = static_cast<MyJob*>(&r.cursor()->job());
+            r.advance_cursor();
+            MyJob* next_job = static_cast<MyJob*>(&r.cursor()->job());
+            // Reposition cursor
+            for( size_t m=0; m<N-k-1; ++m )
+                r.advance_cursor();
+            ASSERT( current_job==&r.cursor()->job(), NULL );
+
+            size_t i = (k*23+trial)%N;
+            rml::internal::job_automaton* ja = r.erase( Connections[i*61%N] );
+            rml::job* j = Job+(ja-JobAutomaton);
+            ASSERT( r.size()==N-k-1, NULL );
+            if( current_job!=j ) {
+                ASSERT( &r.cursor()->job()==current_job, "erasure did not preserve cursor position" );
+            } else if( k+1<N ) {
+                ASSERT( next_job==&r.cursor()->job(), NULL );
+            } else {
+                ASSERT( !r.cursor(), NULL );
+            }
+            ASSERT( ja==JobAutomaton+i*17%N, "erase returned wrong job_automaton" );
+            static_cast<MyJob*>(j)->tag = 0;
+            CheckSizeAndRandomizeCursor(r,N-k-1);
+        }
+        ASSERT( r.cursor()==NULL, NULL );
+    }
+    // JobAutomaton objects must be plugged before being destroyed.
+    for( size_t k=0; k<N; ++k ) {
+        rml::job* j;
+        JobAutomaton[k].try_plug(j);
+    }
+    printf("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_rml_mixed.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_rml_mixed.cpp
new file mode 100644 (file)
index 0000000..b70d914
--- /dev/null
@@ -0,0 +1,247 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "rml_tbb.h"
+#include "rml_omp.h"
+#include "tbb/atomic.h"
+#include "tbb/tick_count.h"
+#include "harness.h"
+
+const int OMP_ParallelRegionSize = 16;
+int TBB_MaxThread = 4;           // Includes master 
+int OMP_MaxThread = int(~0u>>1); // Includes master
+
+template<typename Client>
+class ClientBase: public Client {
+protected:
+    typedef typename Client::version_type version_type;
+    typedef typename Client::job job;
+    typedef typename Client::policy_type policy_type;
+
+private:
+    /*override*/version_type version() const {
+        return 0;
+    }
+    /*override*/size_t min_stack_size() const {
+        return 1<<20;
+    }
+    /*override*/job* create_one_job() {
+        return new rml::job;
+    }
+    /*override*/policy_type policy() const {
+        return Client::turnaround;
+    }
+    /*override*/void acknowledge_close_connection() {
+        delete this;
+    }
+    /*override*/void cleanup( job& j ) {delete &j;}
+};
+
+//! Represents a TBB or OpenMP run-time that uses RML.
+template<typename Factory, typename Client>
+class RunTime {
+public:
+    //! Factory that run-time uses to make servers.
+    Factory factory;
+    Client* client;
+    typename Factory::server_type* server;
+    RunTime() {
+        factory.open();
+    }
+    ~RunTime() {
+        factory.close();
+    }
+    //! Create server for this run-time
+    void create_connection();
+
+    //! Destroy server for this run-time
+    void destroy_connection();
+};
+
+class ThreadLevelRecorder {
+    tbb::atomic<int> level;
+    struct record {
+        tbb::tick_count time;
+        int nthread;
+    };
+    tbb::atomic<unsigned> next;
+    /** Must be power of two */
+    static const unsigned max_record_count = 1<<20;
+    record array[max_record_count];
+public:
+    void change_level( int delta );
+    void dump();
+};
+
+void ThreadLevelRecorder::change_level( int delta ) {
+    int x = level+=delta;
+    tbb::tick_count t = tbb::tick_count::now();
+    unsigned k = next++;
+    if( k<max_record_count ) {
+        record& r = array[k];
+        r.time = t;
+        r.nthread = x;
+    } 
+}
+
+void ThreadLevelRecorder::dump() {
+    FILE* f = fopen("time.txt","w");
+    if( !f ) {
+        perror("fopen(time.txt)\n");
+        exit(1);
+    }
+    unsigned limit = next;
+    if( limit>max_record_count ) {
+        // Clip
+        limit = next;
+    }
+    for( unsigned i=0; i<limit; ++i ) {
+        fprintf(f,"%f\t%d\n",(array[i].time-array[0].time).seconds(),array[i].nthread);
+    }
+    fclose(f);
+}
+
+ThreadLevelRecorder TotalThreadLevel;
+
+class TBB_Client: public ClientBase<tbb::internal::rml::tbb_client> {
+    /*override*/void process( job& j );
+    /*override*/size_type max_job_count() const {
+        return TBB_MaxThread-1;
+    }
+};
+
+class OMP_Client: public ClientBase<__kmp::rml::omp_client> {
+    /*override*/void process( job&, void* cookie, omp_client::size_type );
+    /*override*/size_type max_job_count() const {
+        return OMP_MaxThread-1;
+    }
+};
+
+RunTime<tbb::internal::rml::tbb_factory, TBB_Client> TBB_RunTime;
+RunTime<__kmp::rml::omp_factory, OMP_Client> OMP_RunTime;
+
+template<typename Factory, typename Client>
+void RunTime<Factory,Client>::create_connection() {
+    client = new Client;
+    typename Factory::status_type status = factory.make_server( server, *client );
+    ASSERT( status==Factory::st_success, NULL );
+}
+
+template<typename Factory, typename Client>
+void RunTime<Factory,Client>::destroy_connection() {
+    server->request_close_connection();
+    server = NULL;
+}
+
+class OMP_Team {
+public:
+    OMP_Team( __kmp::rml::omp_server& ) {}
+    tbb::atomic<unsigned> barrier;
+};
+
+tbb::atomic<int> AvailWork;
+tbb::atomic<int> CompletionCount;
+void OMPWork() {
+    tbb::atomic<int> x;
+    for( x=0; x<2000000; ++x ) {
+        continue;
+    }
+}
+
+void TBBWork() {
+    if( AvailWork>=0 ) {
+        int k = --AvailWork;
+        if( k==-1 ) {
+            TBB_RunTime.server->adjust_job_count_estimate(-(TBB_MaxThread-1));
+            ++CompletionCount;
+        } else if( k>=0 ) {
+            for( int k=0; k<4; ++k ) {
+                OMP_Team team( *OMP_RunTime.server );
+                int n = OMP_RunTime.server->try_increase_load( OMP_ParallelRegionSize-1, /*strict=*/false );
+                team.barrier = 0;
+                ::rml::job* array[OMP_ParallelRegionSize-1];
+                if( n>0)
+                    OMP_RunTime.server->get_threads( n, &team, array );
+                // Master does work inside parallel region too.
+                OMPWork();
+                // Master waits for workers to finish
+                if( n>0 )
+                    while( team.barrier!=unsigned(n) ) {
+                        __TBB_Yield();
+                    } 
+            }
+            ++CompletionCount;
+        }
+    }
+}
+
+/*override*/void TBB_Client::process( job& ) {
+    TotalThreadLevel.change_level(1);
+    TBBWork();
+    TotalThreadLevel.change_level(-1);
+}  
+
+/*override*/void OMP_Client::process( job& /* j */, void* cookie, omp_client::size_type ) {
+    TotalThreadLevel.change_level(1);
+    ASSERT( OMP_RunTime.server, NULL );
+    OMPWork();
+    ASSERT( OMP_RunTime.server, NULL );
+    static_cast<OMP_Team*>(cookie)->barrier+=1;
+    TotalThreadLevel.change_level(-1);
+}
+
+void TBBOutSideOpenMPInside() {
+    TotalThreadLevel.change_level(1);
+    CompletionCount = 0;
+    int tbbtasks = 32;
+    AvailWork = tbbtasks;
+    TBB_RunTime.server->adjust_job_count_estimate(TBB_MaxThread-1);
+    while( CompletionCount!=tbbtasks+1 ) {
+        TBBWork();
+    }
+    TotalThreadLevel.change_level(-1);
+}  
+
+int main( int argc, char* argv[] ) {
+    // Set defaults
+    MinThread = 4;
+    MaxThread = 4;
+    ParseCommandLine(argc,argv);
+    for( int TBB_MaxThread=MinThread; TBB_MaxThread<=MaxThread; ++TBB_MaxThread ) {
+        if( Verbose ) printf("Testing with TBB_MaxThread=%d\n", TBB_MaxThread);
+        TBB_RunTime.create_connection();
+        OMP_RunTime.create_connection();
+        TBBOutSideOpenMPInside();
+        OMP_RunTime.destroy_connection();
+        TBB_RunTime.destroy_connection();
+    }
+    TotalThreadLevel.dump();
+    printf("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_rml_omp.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_rml_omp.cpp
new file mode 100644 (file)
index 0000000..fedf851
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "rml_omp.h"
+#include "test_server.h"
+#include "tbb/tbb_misc.h"
+
+typedef __kmp::rml::omp_server MyServer;
+typedef __kmp::rml::omp_factory MyFactory;
+
+static bool StrictTeam;
+
+class MyTeam {
+    MyTeam& operator=( const MyTeam& ) ;
+public:
+    struct info_type {
+        rml::job* job;
+        bool ran;
+        info_type() : job(NULL), ran(false) {}
+    };
+    MyTeam( MyServer& /* server */, size_t max_thread_ ) :
+        max_thread(max_thread_)
+    {
+        self_ptr = this;
+        info = new info_type[max_thread];
+    }
+    ~MyTeam() {
+        delete[] info;
+    }
+    const size_t max_thread;
+    size_t n_thread;
+    tbb::atomic<int> barrier;
+    /** Indexed with 1-origin index */
+    info_type* info;
+    int iteration;
+    MyTeam* self_ptr;
+};
+
+class MyClient: public ClientBase<__kmp::rml::omp_client> {
+public:
+    MyServer* server;
+    /*override*/void process( job& j, void* cookie, size_type index ) {
+        MyTeam& t = *static_cast<MyTeam*>(cookie);
+        ASSERT( t.self_ptr==&t, "trashed cookie" ); 
+        ASSERT( index<t.max_thread, NULL ); 
+        ASSERT( !t.info[index].ran, "duplicate index?" ); 
+        t.info[index].job = &j;
+        t.info[index].ran = true;
+        do_process(j);
+        if( index==1 && nesting.level<nesting.limit ) {
+            DoOneConnection<MyFactory,MyClient> doc(MaxThread,Nesting(nesting.level+1,nesting.limit),0,false);
+            doc(0);
+        }
+        ++t.barrier;
+    }
+    static const bool is_omp = true;
+    bool is_strict() const {return StrictTeam;}
+};
+
+void FireUpJobs( MyServer& server, MyClient& client, int max_thread, int n_extra, Checker* checker ) {
+    ASSERT( max_thread>=0, NULL );
+    client.server = &server;
+    MyTeam team(server,size_t(max_thread));
+    MyServer::size_type n_thread = 0;
+    for( int iteration=0; iteration<4; ++iteration ) {
+        for( size_t i=0; i<team.max_thread; ++i ) 
+            team.info[i].ran = false;
+        switch( iteration ) {
+            default:
+                n_thread = int(max_thread);
+                break;
+            case 1:
+                // No change in number of threads
+                break;
+            case 2:
+                // Decrease number of threads.  
+                n_thread = int(max_thread)/2;
+                break;
+            // Case 3 is same code as the default, but has effect of increasing the number of threads.
+        }
+        team.barrier = 0;
+        if( Verbose ) {
+            printf("client %d: server.run with n_thread=%d\n", client.client_id(), int(n_thread) );
+        }
+        server.independent_thread_number_changed( n_extra );
+        if( checker ) {
+            // Give RML time to respond to change in number of threads.
+            MilliSleep(1);
+        }
+        int n_delivered = server.try_increase_load( n_thread, StrictTeam );
+        team.n_thread = n_delivered;
+        ::rml::job* job_array[JobArraySize];
+        job_array[n_delivered] = (::rml::job*)intptr_t(-1);
+        server.get_threads( n_delivered, &team, job_array );
+        __TBB_ASSERT( job_array[n_delivered]== (::rml::job*)intptr_t(-1), NULL );
+        for( int i=0; i<n_delivered; ++i ) {
+            MyJob* j = static_cast<MyJob*>(job_array[i]);
+            int s = j->state;
+            ASSERT( s==MyJob::idle||s==MyJob::busy, NULL );
+        }
+        server.independent_thread_number_changed( -n_extra );
+        if( Verbose ) {
+            printf("client %d: team size is %d\n", client.client_id(), n_delivered);
+        }
+        if( checker ) {
+            checker->check_number_of_threads_delivered( n_delivered, n_thread, n_extra );
+        }      
+        // Protocol requires that master wait until workers have called "done_processing"
+        while( team.barrier!=n_delivered ) {
+            ASSERT( team.barrier>=0, NULL );
+            ASSERT( team.barrier<=n_delivered, NULL );
+            __TBB_Yield();
+        }
+        if( Verbose ) {
+            printf("client %d: team completed\n", client.client_id() );
+        }
+        for( int i=0; i<n_delivered; ++i ) {
+            ASSERT( team.info[i].ran, "thread on team allegedly delivered, but did not run?" );
+        }
+        for( MyServer::size_type i=n_delivered; i<MyServer::size_type(max_thread); ++i ) {
+            ASSERT( !team.info[i].ran, "thread on team ran with illegal index" );
+        }
+        ASSERT( !StrictTeam || n_delivered==int(n_thread), "server failed to satisfy strict request" );
+    }
+}
+
+void DoClientSpecificVerification( MyServer& server, int /*n_thread*/ )
+{
+    ASSERT( server.current_balance()==int(tbb::internal::DetectNumberOfWorkers())-1, NULL );
+}
+
+int main( int argc, char* argv[] ) {
+    // Set defaults
+    MinThread = 0;
+    MaxThread = 4;
+    ParseCommandLine(argc,argv);
+
+    StrictTeam = true;
+    VerifyInitialization<MyFactory,MyClient>( MaxThread );
+    SimpleTest<MyFactory,MyClient>();
+
+    StrictTeam = false;
+    VerifyInitialization<MyFactory,MyClient>( MaxThread );
+    SimpleTest<MyFactory,MyClient>();
+
+    printf("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_rml_omp_c_linkage.c b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_rml_omp_c_linkage.c
new file mode 100644 (file)
index 0000000..e94790f
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <stdio.h>
+
+void Cplusplus();
+
+int main() {
+    Cplusplus();      
+    printf("done\n");
+    return 0;
+} 
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_rml_tbb.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_rml_tbb.cpp
new file mode 100644 (file)
index 0000000..a3cd666
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "rml_tbb.h"
+#include "test_server.h"
+
+typedef tbb::internal::rml::tbb_server MyServer;
+typedef tbb::internal::rml::tbb_factory MyFactory;
+
+class MyClient: public ClientBase<tbb::internal::rml::tbb_client> {
+    tbb::atomic<int> counter;
+    /*override*/void process( job& j ) {
+        do_process(j);
+    }
+public:
+    MyClient() {counter=1;}
+    static const bool is_omp = false;
+    bool is_strict() const {return false;}
+};
+
+void FireUpJobs( MyServer& server, MyClient& client, int n_thread, int n_extra, Checker* checker ) {
+    if( Verbose ) 
+        printf("client %d: calling adjust_job_count_estimate(%d)\n", client.client_id(),n_thread); 
+    // Exercise independent_thread_number_changed, even for zero values.
+    server.independent_thread_number_changed( n_extra );
+    // Experiments indicate that when oversubscribing, the main thread should wait a little
+    // while for the RML worker threads to do some work. 
+    int delay = n_thread>int(server.default_concurrency()) ? 50 : 1;
+    if( checker ) {
+        // Give RML time to respond to change in number of threads.
+        MilliSleep(delay);
+        for( int k=0; k<n_thread; ++k )
+            client.job_array[k].processing_count = 0;
+    }
+    server.adjust_job_count_estimate( n_thread );
+    int n_used = 0;
+    if( checker ) {
+        MilliSleep(delay);
+        for( int k=0; k<n_thread; ++k )
+            if( client.job_array[k].processing_count )
+                ++n_used;
+    }
+    // Logic further below presumes that jobs never starve, so undo previous call
+    // to independent_thread_number_changed before waiting on those jobs.
+    server.independent_thread_number_changed( -n_extra );
+    if( Verbose ) 
+        printf("client %d: wait for each job to be processed at least once\n",client.client_id());
+    // Calculate the number of jobs that are expected to get threads.
+    // Typically this is equal to n_thread.  But if nested, subtract 1 to account for the fact
+    // that this thread itself cannot process the job.
+    int expected = client.nesting.level==0 ? n_thread : n_thread-1;
+    // Wait for expected number of jobs to be processed.
+    if( client.nesting.level==0 ) {
+        for(;;) {
+            int n = 0;
+            for( int k=0; k<n_thread; ++k ) 
+                if( client.job_array[k].processing_count!=0 ) 
+                    ++n;
+            if( n>=expected ) break;
+            server.yield();
+        }
+    } else {
+        printf("testing of nested tbb execution is yet to be supported\n");
+    }
+    server.adjust_job_count_estimate(-n_thread);
+    if( checker ) 
+        checker->check_number_of_threads_delivered( n_used, n_thread, n_extra );
+}
+
+void DoClientSpecificVerification( MyServer&, int n_thread )
+{
+    MyClient* client = new MyClient;
+    client->initialize( n_thread, Nesting(), ClientStackSize[0] );
+    MyFactory factory;
+    memset( &factory, 0, sizeof(factory) );
+    MyFactory::status_type status = factory.open();
+    ASSERT( status!=MyFactory::st_not_found, "could not find RML library" );
+    ASSERT( status!=MyFactory::st_incompatible, NULL );
+    ASSERT( status==MyFactory::st_success, NULL );
+    MyFactory::server_type* server; 
+    status = factory.make_server( server, *client );
+    ASSERT( status==MyFactory::st_connection_exists, "Did the first connection get lost?" );
+    factory.close();
+    client->update(MyClient::destroyed, MyClient::live);
+    delete client;
+}
+
+int main( int argc, char* argv[] ) {
+    // Set defaults
+    MinThread = 0;
+    MaxThread = 4;
+    ParseCommandLine(argc,argv);
+    VerifyInitialization<MyFactory,MyClient>( MaxThread );
+    SimpleTest<MyFactory,MyClient>();
+    printf("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_server.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_server.h
new file mode 100644 (file)
index 0000000..65e07af
--- /dev/null
@@ -0,0 +1,398 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/* This header contains code shared by test_omp_server.cpp and test_tbb_server.cpp 
+   There is no ifndef guard - test is supposed to include this file exactly once.
+   The test is also exected to have #include of rml_omp.h or rml_tbb.h before 
+   including this header. 
+
+   This header should not use any parts of TBB that require linking in the TBB run-time. 
+   It uses a few instances of tbb::atomic<T>, all of which are completely inlined. */
+
+#include "tbb/atomic.h"
+#include "tbb/tbb_thread.h"
+#include "harness.h"
+#include "harness_memory.h"
+
+//! Define TRIVIAL as 1 to test only a single client, no nesting, no extra threads.
+#define TRIVIAL 0
+
+//! Maximum number of clients 
+#if TRIVIAL 
+const size_t MaxClient = 1;
+#else
+const size_t MaxClient = 4;
+#endif
+
+const size_t ClientStackSize[MaxClient] = {
+    1000000
+#if !TRIVIAL
+   ,2000000
+   ,1000000
+   ,4000000
+#endif /* TRIVIAL */
+};
+
+const size_t OverheadStackSize = 500000;
+
+const size_t JobArraySize = 1000;
+
+#if _WIN32||_WIN64
+#include <Windows.h> /* Need Sleep */
+#else
+#include <unistd.h>  /* Need usleep */   
+#endif
+
+void MilliSleep( unsigned milliseconds ) {
+#if _WIN32||_WIN64
+    Sleep( milliseconds );
+#else
+    usleep( milliseconds*1000 );
+#endif /* _WIN32||_WIN64 */
+}
+
+class MyJob: public ::rml::job {
+public:
+    //! Enumeration for tracking states of a job.
+    enum state_t {
+        //! Job has not yet been allocated.
+        unallocated,
+        //! Is idle.
+        idle,
+        //! Has a thread working on it.
+        busy,
+        //! After call to client::cleanup 
+        clean
+    };
+    tbb::atomic<int> state;
+    volatile int processing_count;
+    void update( state_t new_state, state_t old_state ) {
+        int o = state.compare_and_swap(new_state,old_state);
+        ASSERT( o==old_state, "illegal transition" );
+    }
+    void update_from_either( state_t new_state, state_t old_state1, state_t old_state2 ) {
+        int snapshot;
+        do {
+            snapshot = state;
+            ASSERT( snapshot==old_state1||snapshot==old_state2, "illegal transition" );
+        } while( state.compare_and_swap(new_state,snapshot)!=snapshot );
+    }
+    MyJob() {
+        state=unallocated;
+        processing_count=0;
+    }
+    ~MyJob() {
+        // Overwrite so that accidental use after destruction can be detected.
+        memset(this,-1,sizeof(*this));
+    }
+};
+
+static tbb::atomic<int> ClientConstructions;
+static tbb::atomic<int> ClientDestructions;
+
+struct Nesting {
+    int level;
+    int limit;
+    Nesting() : level(0), limit(0) {}
+    Nesting( int level_, int limit_ ) : level(level_), limit(limit_) {}
+};
+
+template<typename Client>
+class ClientBase: public Client {
+protected:
+    typedef typename Client::size_type size_type;
+    typedef typename Client::version_type version_type;
+    typedef typename Client::policy_type policy_type;
+    typedef typename Client::job job;
+private:
+    size_type my_max_job_count;
+    size_t my_stack_size;
+    tbb::atomic<size_t> next_job_index;
+    int my_client_id;
+    rml::server* my_server;
+
+public:
+    enum state_t {
+        //! Treat *this as constructed.
+        live=0x1,
+        //! Treat *this as destroyed.
+        destroyed=0xDEAD
+    };
+
+    tbb::atomic<int> state;
+    void update( state_t new_state, state_t old_state ) {
+        int o = state.compare_and_swap(new_state,old_state);
+        ASSERT( o==old_state, NULL );
+    }
+
+    tbb::atomic<bool> expect_close_connection;
+
+    MyJob *job_array;
+    /*override*/version_type version() const {
+        ASSERT( state==live, NULL );
+        return 1;
+    }
+    /*override*/size_type max_job_count() const {
+        ASSERT( state==live, NULL );
+        return my_max_job_count;
+    }
+
+    /*override*/size_t min_stack_size() const {
+        ASSERT( state==live, NULL );
+        return my_stack_size;
+    }
+
+    /*override*/policy_type policy() const {return Client::throughput;} 
+
+    /*override*/void acknowledge_close_connection() {
+        ASSERT( expect_close_connection, NULL );
+        for( size_t k=next_job_index; k>0; ) {
+            --k;
+            ASSERT( job_array[k].state==MyJob::clean, NULL );
+        }
+        delete[] job_array;
+        job_array = NULL;
+        ASSERT( my_server, NULL );
+        update( destroyed, live );
+        delete this; 
+    }
+
+    /*override*/void cleanup( job& j_ ) {
+        if( Verbose ) 
+            printf("client %d: cleanup(%p) called\n",client_id(),&j_);
+        ASSERT( state==live, NULL );
+        MyJob& j = static_cast<MyJob&>(j_);
+        j.update(MyJob::clean,MyJob::idle);
+        if( Verbose ) 
+            printf("client %d: cleanup(%p) returns\n",client_id(),&j_);
+    }
+   
+    job* create_one_job();
+
+protected:
+    void do_process( job& j_ ) {
+        ASSERT( state==live, NULL );
+        MyJob& j = static_cast<MyJob&>(j_);
+        ASSERT( &j, NULL );
+        j.update(MyJob::busy,MyJob::idle);
+        ++j.processing_count;
+        ASSERT( my_stack_size>OverheadStackSize, NULL ); 
+#ifdef __ia64__
+        // Half of the stack is reserved for RSE, so test only remaining half.
+        UseStackSpace( (my_stack_size-OverheadStackSize)/2 );
+#else
+        UseStackSpace( my_stack_size-OverheadStackSize );
+#endif 
+        j.update(MyJob::idle,MyJob::busy);
+        my_server->yield();
+    } 
+public:
+    ClientBase() : my_server(NULL) {
+        my_client_id = ClientConstructions++;
+        next_job_index = 0; 
+    }
+    int client_id() const {return my_client_id;}
+
+    Nesting nesting;
+
+    void initialize( size_type max_job_count, Nesting nesting_, size_t stack_size ) {
+        ASSERT( stack_size>0, NULL );
+        my_max_job_count = max_job_count;
+        nesting = nesting_;
+        my_stack_size = stack_size;
+        job_array = new MyJob[JobArraySize];
+        expect_close_connection = false;
+        state = live;
+    }
+
+    void set_server( rml::server* s ) {my_server=s;}
+
+    virtual ~ClientBase() {
+        ASSERT( state==destroyed, NULL );
+        ++ClientDestructions;
+    }
+};
+
+template<typename Client>
+typename Client::job* ClientBase<Client>::create_one_job() {
+    if( Verbose ) 
+        printf("client %d: create_one_job() called\n",client_id());
+    size_t k = next_job_index++;
+    ASSERT( state==live, NULL );
+    // Following assertion depends on assumption that implementation does not destroy jobs until 
+    // the connection is closed.  If the implementation is changed to destroy jobs sooner, the 
+    // test logic in this header will have to be reworked.
+    ASSERT( k<my_max_job_count, "RML allocated more than max_job_count jobs simultaneously" );
+    ASSERT( k<JobArraySize, "JobArraySize not big enough (problem is in test, not RML)" );
+    MyJob& j = job_array[k];
+    j.update(MyJob::idle,MyJob::unallocated);
+    if( Verbose ) 
+        printf("client %d: create_one_job() for k=%d returns %p\n",client_id(),int(k),&j);
+    return &j;
+}
+
+class Checker {
+public:
+    int default_concurrency;
+    void check_number_of_threads_delivered( int n_delivered, int n_requested, int n_extra ) const;
+    Checker( rml::server& server ) : default_concurrency(int(server.default_concurrency())) {}
+};
+
+void Checker::check_number_of_threads_delivered( int n_delivered, int n_requested, int n_extra ) const {
+    ASSERT( default_concurrency>=0, NULL );
+    // Check that number of threads delivered is reasonable.
+    int n_avail = default_concurrency;
+    if( n_extra>0 )
+        n_avail-=n_extra;
+    if( n_avail<0 ) 
+        n_avail=0;
+    // If the client asked for more threads than the hardware provides, the difference becomes private threads
+    // that are available regardless of what else is running.
+    if( n_requested>default_concurrency ) 
+        n_avail += n_requested-default_concurrency;
+    int n_expected = n_requested;
+    if( n_expected>n_avail )
+        n_expected=n_avail;
+    const char* msg = NULL;
+    if( n_delivered>n_avail ) 
+        msg = "server delivered more threads than were theoretically available";
+    else if( n_delivered>n_expected ) 
+        msg = "server delivered more threads than expected";
+    else if( n_delivered<n_expected ) 
+        msg = "server delivered fewer threads than ideal";
+    if( msg ) {
+        printf("Warning: %s (n_delivered=%d n_avail=%d n_requested=%d n_extra=%d default_concurrency=%d)\n",
+               msg, n_delivered, n_avail, n_requested, n_extra, default_concurrency );
+    }
+}
+
+template<typename Factory,typename Client>
+class DoOneConnection: NoAssign {
+    //! Number of threads to request
+    const int n_thread;
+    //! Nesting 
+    const Nesting nesting;
+    //! Number of extra threads to pretend having outside the RML
+    const int n_extra;
+    //! If true, check number of threads actually delivered.
+    const bool check_delivered;
+public:
+    DoOneConnection( int n_thread_, Nesting nesting_, int n_extra_, bool check_delivered_ ) : 
+        n_thread(n_thread_), 
+        nesting(nesting_), 
+        n_extra(n_extra_), 
+        check_delivered(check_delivered_)
+    {
+    }
+   
+    //! Test ith connection 
+    void operator()( size_t i ) const;
+};
+
+template<typename Factory,typename Client>
+void DoOneConnection<Factory,Client>::operator()( size_t i ) const {
+    ASSERT( i<MaxClient, NULL );
+    Client* client = new Client;
+    client->initialize( Client::is_omp ? JobArraySize : n_thread, nesting, ClientStackSize[i] );
+    Factory factory;
+    memset( &factory, 0, sizeof(factory) );
+    typename Factory::status_type status = factory.open();
+
+    typename Factory::server_type* server; 
+    status = factory.make_server( server, *client );
+    if( Verbose ) 
+        printf("client %d: opened server n_thread=%d nesting=(%d,%d)\n",
+               client->client_id(), n_thread, nesting.level, nesting.limit);
+
+    client->set_server( server );
+    Checker checker( *server );
+    FireUpJobs( *server, *client, n_thread, n_extra, check_delivered && !client->is_strict() ? &checker : NULL );
+
+    // Close the connection
+    client->expect_close_connection = true;
+    if( Verbose )
+        printf("client %d: calling request_close_connection\n", client->client_id());
+    server->request_close_connection();
+    // Client deletes itself when it sees call to acknowledge_close_connection from server.
+    factory.close();
+}
+
+//! Test with n_threads threads and n_client clients.
+template<typename Factory, typename Client>
+void SimpleTest() {
+    for( int n_thread=MinThread; n_thread<=MaxThread; ++n_thread ) {
+        // Test nested connections
+        DoOneConnection<Factory,Client> doc(n_thread,Nesting(0,1),0,false);
+        doc(0);
+    }
+    // Let RML catch up.
+    while( ClientConstructions!=ClientDestructions ) {
+        MilliSleep(1);
+    }
+}
+
+static void check_server_info( void* arg, const char* server_info )
+{
+    ASSERT( strstr(server_info, (char*)arg), NULL );
+}
+
+template<typename Factory, typename Client>
+void VerifyInitialization( int n_thread ) {
+    Client* client = new Client;
+    client->initialize( Client::is_omp ? JobArraySize : n_thread, Nesting(), ClientStackSize[0] );
+    Factory factory;
+    memset( &factory, 0, sizeof(factory) );
+    typename Factory::status_type status = factory.open();
+    ASSERT( status!=Factory::st_not_found, "could not find RML library" );
+    ASSERT( status!=Factory::st_incompatible, NULL );
+    ASSERT( status==Factory::st_success, NULL );
+    factory.call_with_server_info( check_server_info, (void*)"Intel(R) RML library built:" );
+    typename Factory::server_type* server; 
+    status = factory.make_server( server, *client );
+    ASSERT( status!=Factory::st_incompatible, NULL );
+    ASSERT( status!=Factory::st_not_found, NULL );
+    ASSERT( status==Factory::st_success, NULL );
+    if( Verbose ) 
+        printf("client %d: opened server n_thread=%d nesting=(%d,%d)\n",
+               client->client_id(), n_thread, 0, 0);
+    ASSERT( server, NULL );
+    client->set_server( server );
+
+    DoClientSpecificVerification( *server, n_thread );
+    // Close the connection
+    client->expect_close_connection = true;
+    if( Verbose )
+        printf("client %d: calling request_close_connection\n", client->client_id());
+    server->request_close_connection();
+    // Client deletes itself when it sees call to acknowledge_close_connection from server.
+    factory.close();
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_thread_monitor.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/rml/test/test_thread_monitor.cpp
new file mode 100644 (file)
index 0000000..89ef325
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "thread_monitor.h"
+#include "harness.h"
+#include "harness_memory.h"
+
+class ThreadState {
+    void loop();
+public:
+    static __RML_DECL_THREAD_ROUTINE routine( void* arg ) {
+        static_cast<ThreadState*>(arg)->loop();
+        return 0;
+    }
+    typedef rml::internal::thread_monitor thread_monitor;
+    thread_monitor monitor;
+    volatile int request;
+    volatile int ack;
+    volatile unsigned clock;
+    volatile unsigned stamp;
+    ThreadState() : request(-1), ack(-1) {}
+};
+
+void ThreadState::loop() {
+    for(;;) {
+        ++clock;
+        if( ack==request ) {
+            thread_monitor::cookie c;
+            monitor.prepare_wait(c);
+            if( ack==request ) {
+                if( Verbose ) {
+                    printf("%p: request=%d ack=%d\n", this, request, ack );
+                }
+                monitor.commit_wait(c);
+            } else
+                monitor.cancel_wait();
+        } else {
+            // Throw in delay occasionally
+            switch( request%8 ) {
+                case 0: 
+                case 1:
+                case 5:
+                    rml::internal::thread_monitor::yield();
+            }
+            int r = request;
+            ack = request;
+            if( !r ) return;
+        }
+    }
+}
+
+// Linux on Itanium seems to require at least 1<<18 bytes per stack.
+const size_t MinStackSize = 1<<18;
+const size_t MaxStackSize = 1<<22;
+
+int main( int argc, char* argv[] ) {
+    // Set defaults
+    MinThread = 1;
+    MaxThread = 4;
+    ParseCommandLine( argc, argv );
+
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        ThreadState* t = new ThreadState[p];
+        for( size_t stack_size = MinStackSize; stack_size<=MaxStackSize; stack_size*=2 ) {
+            if( Verbose )
+                printf("launching %d threads\n",p);
+            for( int i=0; i<p; ++i )
+                rml::internal::thread_monitor::launch( ThreadState::routine, t+i, stack_size ); 
+            for( int k=1000; k>=0; --k ) {
+                if( k%8==0 ) {
+                    // Wait for threads to wait.
+                    for( int i=0; i<p; ++i ) {
+                        unsigned count = 0;
+                        do {
+                            t[i].stamp = t[i].clock;
+                            rml::internal::thread_monitor::yield();
+                            if( ++count>=1000 ) {
+                                printf("Warning: thread %d not waiting\n",i);
+                                break;
+                            }
+                        } while( t[i].stamp!=t[i].clock );
+                    }
+                }
+                if( Verbose ) 
+                    printf("notifying threads\n");
+                for( int i=0; i<p; ++i ) {
+                    // Change state visible to launched thread
+                    t[i].request = k;
+                    t[i].monitor.notify();
+                }
+                if( Verbose ) 
+                    printf("waiting for threads to respond\n");
+                for( int i=0; i<p; ++i ) 
+                    // Wait for thread to respond 
+                    while( t[i].ack!=k ) 
+                        rml::internal::thread_monitor::yield();
+            }
+        }
+        delete[] t;
+    }
+
+    printf("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/cache_aligned_allocator.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/cache_aligned_allocator.cpp
new file mode 100644 (file)
index 0000000..18e3d13
--- /dev/null
@@ -0,0 +1,329 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/tbb_allocator.h"
+#include "tbb_misc.h"
+#include "dynamic_link.h"
+#include <cstdlib>
+
+#if _WIN32||_WIN64
+#include <windows.h>
+#else
+#include <dlfcn.h>
+#endif /* _WIN32||_WIN64 */
+
+using namespace std;
+
+#if __TBB_WEAK_SYMBOLS
+
+#pragma weak scalable_malloc
+#pragma weak scalable_free
+
+extern "C" {
+    void* scalable_malloc( size_t );
+    void scalable_free( void* );
+}
+
+#endif /* __TBB_WEAK_SYMBOLS */
+
+#define __TBB_IS_SCALABLE_MALLOC_FIX_READY 0
+
+namespace tbb {
+
+namespace internal {
+
+//! Dummy routine used for first indirect call via MallocHandler.
+static void* DummyMalloc( size_t size );
+
+//! Dummy routine used for first indirect call via FreeHandler.
+static void DummyFree( void * ptr );
+
+//! Handler for memory allocation
+static void* (*MallocHandler)( size_t size ) = &DummyMalloc;
+
+//! Handler for memory deallocation
+static void (*FreeHandler)( void* pointer ) = &DummyFree;
+
+//! Table describing the how to link the handlers.
+static const dynamic_link_descriptor MallocLinkTable[] = {
+    DLD(scalable_malloc, MallocHandler),
+    DLD(scalable_free, FreeHandler),
+};
+
+#if __TBB_IS_SCALABLE_MALLOC_FIX_READY 
+//! Dummy routine used for first indirect call via padded_allocate_handler.
+static void* dummy_padded_allocate( size_t bytes, size_t alignment );
+
+//! Dummy routine used for first indirect call via padded_free_handler.
+static void dummy_padded_free( void * ptr );
+
+// ! Allocates memory using standard malloc. It is used when scalable_allocator is not available
+static void* padded_allocate( size_t bytes, size_t alignment );
+
+// ! Allocates memory using scalable_malloc
+static void* padded_allocate_via_scalable_malloc( size_t bytes, size_t alignment );
+
+// ! Allocates memory using standard free. It is used when scalable_allocator is not available
+static void padded_free( void* p );
+
+//! Handler for padded memory allocation
+static void* (*padded_allocate_handler)( size_t bytes, size_t alignment ) = &dummy_padded_allocate;
+
+//! Handler for padded memory deallocation
+static void (*padded_free_handler)( void* p ) = &dummy_padded_free;
+
+#endif // #if __TBB_IS_SCALABLE_MALLOC_FIX_READY 
+
+
+#if TBB_USE_DEBUG
+#define DEBUG_SUFFIX "_debug"
+#else
+#define DEBUG_SUFFIX
+#endif /* TBB_USE_DEBUG */
+
+// MALLOCLIB_NAME is the name of the TBB memory allocator library.
+#if _WIN32||_WIN64
+#define MALLOCLIB_NAME "tbbmalloc" DEBUG_SUFFIX ".dll"
+#elif __APPLE__
+#define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX ".dylib"
+#elif __linux__
+#define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX  __TBB_STRING(.so.TBB_COMPATIBLE_INTERFACE_VERSION)
+#elif __FreeBSD__ || __sun
+#define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX ".so"
+#else
+#error Unknown OS
+#endif
+
+//! Initialize the allocation/free handler pointers.
+/** Caller is responsible for ensuring this routine is called exactly once.
+    The routine attempts to dynamically link with the TBB memory allocator.
+    If that allocator is not found, it links to malloc and free. */
+void initialize_cache_aligned_allocator() {
+    __TBB_ASSERT( MallocHandler==&DummyMalloc, NULL );
+    bool success = dynamic_link( MALLOCLIB_NAME, MallocLinkTable, 2 );
+    if( !success ) {
+        // If unsuccessful, set the handlers to the default routines.
+        // This must be done now, and not before FillDynanmicLinks runs, because if other
+        // threads call the handlers, we want them to go through the DoOneTimeInitializations logic,
+        // which forces them to wait.
+        FreeHandler = &free;
+        MallocHandler = &malloc;
+#if __TBB_IS_SCALABLE_MALLOC_FIX_READY 
+        padded_allocate_handler = &padded_allocate;
+        padded_free_handler = &padded_free;
+    }else{
+        padded_allocate_handler = &padded_allocate_via_scalable_malloc;
+        __TBB_ASSERT(FreeHandler != &free && FreeHandler != &DummyFree, NULL);
+        padded_free_handler = FreeHandler;
+#endif // __TBB_IS_SCALABLE_MALLOC_FIX_READY 
+    }
+#if !__TBB_RML_STATIC
+    PrintExtraVersionInfo( "ALLOCATOR", success?"scalable_malloc":"malloc" );
+#endif
+}
+
+//! Defined in task.cpp
+extern void DoOneTimeInitializations();
+
+//! Executed on very first call through MallocHandler
+static void* DummyMalloc( size_t size ) {
+    DoOneTimeInitializations();
+    __TBB_ASSERT( MallocHandler!=&DummyMalloc, NULL );
+    return (*MallocHandler)( size );
+}
+
+//! Executed on very first call throught FreeHandler
+static void DummyFree( void * ptr ) {
+    DoOneTimeInitializations();
+    __TBB_ASSERT( FreeHandler!=&DummyFree, NULL );
+    (*FreeHandler)( ptr );
+}
+
+#if __TBB_IS_SCALABLE_MALLOC_FIX_READY 
+//! Executed on very first call through padded_allocate_handler
+static void* dummy_padded_allocate( size_t bytes, size_t alignment ) {
+    DoOneTimeInitializations();
+    __TBB_ASSERT( padded_allocate_handler!=&dummy_padded_allocate, NULL );
+    return (*padded_allocate_handler)(bytes, alignment);
+}
+
+//! Executed on very first call throught padded_free_handler
+static void dummy_padded_free( void * ptr ) {
+    DoOneTimeInitializations();
+    __TBB_ASSERT( padded_free_handler!=&dummy_padded_free, NULL );
+    (*padded_free_handler)( ptr );
+}    
+#endif // __TBB_IS_SCALABLE_MALLOC_FIX_READY 
+
+static size_t NFS_LineSize = 128;
+
+size_t NFS_GetLineSize() {
+    return NFS_LineSize;
+}
+
+//! Requests for blocks this size and higher are handled via malloc/free,
+const size_t BigSize = 4096;
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // unary minus operator applied to unsigned type, result still unsigned
+    #pragma warning( disable: 4146 4706 )
+#endif
+
+void* NFS_Allocate( size_t n, size_t element_size, void* /*hint*/ ) {
+    size_t m = NFS_LineSize;
+    __TBB_ASSERT( m<=NFS_MaxLineSize, "illegal value for NFS_LineSize" );
+    __TBB_ASSERT( (m & m-1)==0, "must be power of two" );
+    size_t bytes = n*element_size;
+#if __TBB_IS_SCALABLE_MALLOC_FIX_READY 
+
+    if (bytes<n || bytes+m<bytes) {
+        // Overflow
+        throw bad_alloc();
+    }
+    
+    void* result = (*padded_allocate_handler)( bytes, m );
+#else
+    unsigned char* base;
+    if( bytes<n || bytes+m<bytes || !(base=(unsigned char*)(bytes>=BigSize?malloc(m+bytes):(*MallocHandler)(m+bytes))) ) {
+        // Overflow
+        throw bad_alloc();
+    }
+    // Round up to next line
+    unsigned char* result = (unsigned char*)((uintptr)(base+m)&-m);
+    // Record where block actually starts.  Use low order bit to record whether we used malloc or MallocHandler.
+    ((uintptr*)result)[-1] = uintptr(base)|(bytes>=BigSize);
+#endif // __TBB_IS_SCALABLE_MALLOC_FIX_READY    
+    /** The test may fail with TBB_IS_SCALABLE_MALLOC_FIX_READY = 1 
+        because scalable_malloc returns addresses aligned to 64 when large block is allocated */
+    __TBB_ASSERT( ((size_t)result&(m-1)) == 0, "The address returned isn't aligned to cache line size" );
+    return result;
+}
+
+void NFS_Free( void* p ) {
+#if __TBB_IS_SCALABLE_MALLOC_FIX_READY 
+    (*padded_free_handler)( p );
+#else
+    if( p ) {
+        __TBB_ASSERT( (uintptr)p>=0x4096, "attempt to free block not obtained from cache_aligned_allocator" );
+        // Recover where block actually starts
+        unsigned char* base = ((unsigned char**)p)[-1];
+        __TBB_ASSERT( (void*)((uintptr)(base+NFS_LineSize)&-NFS_LineSize)==p, "not allocated by NFS_Allocate?" );
+        if( uintptr(base)&1 ) {
+            // Is a big block - use free
+            free(base-1);
+        } else {
+            // Is a small block - use scalable allocator
+            (*FreeHandler)( base );
+        }
+    }
+#endif // __TBB_IS_SCALABLE_MALLOC_FIX_READY
+}
+
+#if __TBB_IS_SCALABLE_MALLOC_FIX_READY
+static void* padded_allocate_via_scalable_malloc( size_t bytes, size_t alignment  ) {  
+    unsigned char* base;
+    if( !(base=(unsigned char*)(*MallocHandler)((bytes+alignment)&-alignment))) {
+        throw bad_alloc();
+    }        
+    return base; // scalable_malloc returns aligned pointer
+}
+
+static void* padded_allocate( size_t bytes, size_t alignment ) {    
+    unsigned char* base;
+    if( !(base=(unsigned char*)malloc(alignment+bytes)) ) {        
+        throw bad_alloc();
+    }
+    // Round up to the next line
+    unsigned char* result = (unsigned char*)((uintptr)(base+alignment)&-alignment);
+    // Record where block actually starts.
+    ((uintptr*)result)[-1] = uintptr(base);
+    return result;    
+}
+
+static void padded_free( void* p ) {
+    if( p ) {
+        __TBB_ASSERT( (uintptr)p>=0x4096, "attempt to free block not obtained from cache_aligned_allocator" );
+        // Recover where block actually starts
+        unsigned char* base = ((unsigned char**)p)[-1];
+        __TBB_ASSERT( (void*)((uintptr)(base+NFS_LineSize)&-NFS_LineSize)==p, "not allocated by NFS_Allocate?" );
+        free(base);
+    }
+}
+#endif // #if __TBB_IS_SCALABLE_MALLOC_FIX_READY
+
+void* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n ) {    
+    void* result;
+    result = (*MallocHandler) (n);
+    if (!result) {
+        // Overflow
+        throw bad_alloc();
+    }
+    return result;
+}
+
+void __TBB_EXPORTED_FUNC deallocate_via_handler_v3( void *p ) {
+    if( p ) {        
+        (*FreeHandler)( p );
+    }
+}
+
+bool __TBB_EXPORTED_FUNC is_malloc_used_v3() {
+    if (MallocHandler == &DummyMalloc) {
+        void* void_ptr = (*MallocHandler)(1);
+        (*FreeHandler)(void_ptr);
+    }
+    __TBB_ASSERT( MallocHandler!=&DummyMalloc && FreeHandler!=&DummyFree, NULL );
+    __TBB_ASSERT(MallocHandler==&malloc && FreeHandler==&free ||
+                  MallocHandler!=&malloc && FreeHandler!=&free, NULL );
+    return MallocHandler == &malloc;
+}
+
+} // namespace internal
+
+} // namespace tbb
+
+#if __TBB_RML_STATIC
+#include "tbb/atomic.h"
+static tbb::atomic<int> module_inited;
+namespace tbb {
+namespace internal {
+void DoOneTimeInitializations() {
+    if( module_inited!=2 ) {
+        if( module_inited.compare_and_swap(1, 0)==0 ) {
+            initialize_cache_aligned_allocator();
+            module_inited = 2;
+        } else {
+            do {
+                __TBB_Yield();
+            } while( module_inited!=2 );
+        }
+    }
+}
+}} //namespace tbb::internal
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/concurrent_hash_map.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/concurrent_hash_map.cpp
new file mode 100644 (file)
index 0000000..d393710
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/concurrent_hash_map.h"
+
+namespace tbb {
+
+namespace internal {
+#if !TBB_NO_LEGACY
+struct hash_map_segment_base {
+    typedef spin_rw_mutex segment_mutex_t;
+    //! Type of a hash code.
+    typedef size_t hashcode_t;
+    //! Log2 of n_segment
+    static const size_t n_segment_bits = 6;
+    //! Maximum size of array of chains
+    static const size_t max_physical_size = size_t(1)<<(8*sizeof(hashcode_t)-n_segment_bits);
+    //! Mutex that protects this segment
+    segment_mutex_t my_mutex;
+    // Number of nodes
+    atomic<size_t> my_logical_size;
+    // Size of chains
+    /** Always zero or a power of two */
+    size_t my_physical_size;
+    //! True if my_logical_size>=my_physical_size.
+    /** Used to support Intel(R) Thread Checker. */
+    bool __TBB_EXPORTED_METHOD internal_grow_predicate() const;
+};
+
+bool hash_map_segment_base::internal_grow_predicate() const {
+    // Intel(R) Thread Checker considers the following reads to be races, so we hide them in the 
+    // library so that Intel(R) Thread Checker will ignore them.  The reads are used in a double-check
+    // context, so the program is nonetheless correct despite the race.
+    return my_logical_size >= my_physical_size && my_physical_size < max_physical_size;
+}
+#endif//!TBB_NO_LEGACY
+
+} // namespace internal
+
+} // namespace tbb
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/concurrent_queue.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/concurrent_queue.cpp
new file mode 100644 (file)
index 0000000..ac7e67a
--- /dev/null
@@ -0,0 +1,841 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <cstring>   // for memset()
+#include "tbb/tbb_stddef.h"
+#include "tbb/tbb_machine.h"
+#include "tbb/_concurrent_queue_internal.h"
+#include "itt_notify.h"
+#include <new>
+#if _WIN32||_WIN64
+#include <windows.h>
+#endif
+using namespace std;
+
+// enable sleep support
+#define __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE 1
+
+#if defined(_MSC_VER) && defined(_Wp64)
+    // Workaround for overzealous compiler warnings in /Wp64 mode
+    #pragma warning (disable: 4267)
+#endif
+
+#define RECORD_EVENTS 0
+
+
+#if __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE
+#if !_WIN32&&!_WIN64
+#include <pthread.h>
+#endif
+#endif
+
+namespace tbb {
+
+namespace internal {
+
+typedef concurrent_queue_base_v3 concurrent_queue_base;
+
+typedef size_t ticket;
+
+//! A queue using simple locking.
+/** For efficient, this class has no constructor.  
+    The caller is expected to zero-initialize it. */
+struct micro_queue {
+    typedef concurrent_queue_base::page page;
+
+    friend class micro_queue_pop_finalizer;
+
+    atomic<page*> head_page;
+    atomic<ticket> head_counter;
+
+    atomic<page*> tail_page;
+    atomic<ticket> tail_counter;
+
+    spin_mutex page_mutex;
+    
+    void push( const void* item, ticket k, concurrent_queue_base& base );
+
+    bool pop( void* dst, ticket k, concurrent_queue_base& base );
+
+    micro_queue& assign( const micro_queue& src, concurrent_queue_base& base );
+
+    page* make_copy ( concurrent_queue_base& base, const page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index ) ;
+
+    void make_invalid( ticket k );
+};
+
+// we need to yank it out of micro_queue because of concurrent_queue_base::deallocate_page being virtual.
+class micro_queue_pop_finalizer: no_copy {
+    typedef concurrent_queue_base::page page;
+    ticket my_ticket;
+    micro_queue& my_queue;
+    page* my_page; 
+    concurrent_queue_base &base;
+public:
+    micro_queue_pop_finalizer( micro_queue& queue, concurrent_queue_base& b, ticket k, page* p ) :
+        my_ticket(k), my_queue(queue), my_page(p), base(b)
+    {}
+    ~micro_queue_pop_finalizer() {
+        page* p = my_page;
+        if( p ) {
+            spin_mutex::scoped_lock lock( my_queue.page_mutex );
+            page* q = p->next;
+            my_queue.head_page = q;
+            if( !q ) {
+                my_queue.tail_page = NULL;
+            }
+        }
+        my_queue.head_counter = my_ticket;
+        if( p )
+           base.deallocate_page( p );
+    }
+};
+
+//! Internal representation of a ConcurrentQueue.
+/** For efficient, this class has no constructor.  
+    The caller is expected to zero-initialize it. */
+class concurrent_queue_rep {
+public:
+#if __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE
+# if _WIN32||_WIN64
+    typedef HANDLE waitvar_t;
+    typedef CRITICAL_SECTION mutexvar_t;
+# else 
+    typedef pthread_cond_t  waitvar_t;
+    typedef pthread_mutex_t mutexvar_t;
+# endif
+#endif /* __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE */
+private:
+    friend struct micro_queue;
+
+    //! Approximately n_queue/golden ratio
+    static const size_t phi = 3;
+
+public:
+    //! Must be power of 2
+    static const size_t n_queue = 8; 
+
+    //! Map ticket to an array index
+    static size_t index( ticket k ) {
+        return k*phi%n_queue;
+    }
+
+#if __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE
+    atomic<ticket> head_counter;
+    waitvar_t  var_wait_for_items;
+    mutexvar_t mtx_items_avail;
+    atomic<size_t> n_invalid_entries;
+    atomic<uint32_t> n_waiting_consumers;
+#if _WIN32||_WIN64
+    uint32_t consumer_wait_generation;
+    uint32_t n_consumers_to_wakeup;
+    char pad1[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(waitvar_t)+sizeof(mutexvar_t)+sizeof(size_t)+sizeof(uint32_t)+sizeof(uint32_t)+sizeof(uint32_t))&(NFS_MaxLineSize-1))];
+#else
+    char pad1[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(waitvar_t)+sizeof(mutexvar_t)+sizeof(size_t)+sizeof(uint32_t))&(NFS_MaxLineSize-1))];
+#endif
+
+    atomic<ticket> tail_counter;
+    waitvar_t  var_wait_for_slots;
+    mutexvar_t mtx_slots_avail;
+    atomic<uint32_t> n_waiting_producers;
+#if _WIN32||_WIN64
+    uint32_t producer_wait_generation;
+    uint32_t n_producers_to_wakeup;
+    char pad2[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(waitvar_t)+sizeof(mutexvar_t)+sizeof(uint32_t)+sizeof(uint32_t)+sizeof(uint32_t))&(NFS_MaxLineSize-1))];
+#else
+    char pad2[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(waitvar_t)+sizeof(mutexvar_t)+sizeof(uint32_t))&(NFS_MaxLineSize-1))];
+#endif
+#else /* !__TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE */
+    atomic<ticket> head_counter;
+    atomic<size_t> n_invalid_entries;
+    char pad1[NFS_MaxLineSize-sizeof(atomic<ticket>)-sizeof(size_t)];
+    atomic<ticket> tail_counter;
+    char pad2[NFS_MaxLineSize-sizeof(atomic<ticket>)];
+#endif /* __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE */
+    micro_queue array[n_queue];    
+
+    micro_queue& choose( ticket k ) {
+        // The formula here approximates LRU in a cache-oblivious way.
+        return array[index(k)];
+    }
+
+    //! Value for effective_capacity that denotes unbounded queue.
+    static const ptrdiff_t infinite_capacity = ptrdiff_t(~size_t(0)/2);
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // unary minus operator applied to unsigned type, result still unsigned
+    #pragma warning( push )
+    #pragma warning( disable: 4146 )
+#endif
+
+static void* invalid_page;
+
+//------------------------------------------------------------------------
+// micro_queue
+//------------------------------------------------------------------------
+void micro_queue::push( const void* item, ticket k, concurrent_queue_base& base ) {
+    k &= -concurrent_queue_rep::n_queue;
+    page* p = NULL;
+    size_t index = k/concurrent_queue_rep::n_queue & (base.items_per_page-1);
+    if( !index ) {
+        try {
+            p = base.allocate_page();
+        } catch (...) {
+            ++base.my_rep->n_invalid_entries;
+            make_invalid( k );
+        }
+        p->mask = 0;
+        p->next = NULL;
+    }
+
+    if( tail_counter!=k ) {
+        atomic_backoff backoff;
+        do {
+            backoff.pause();
+            // no memory. throws an exception; assumes concurrent_queue_rep::n_queue>1
+            if( tail_counter&0x1 ) {
+                ++base.my_rep->n_invalid_entries;
+                throw bad_last_alloc();
+            }
+        } while( tail_counter!=k ) ;
+    }
+        
+    if( p ) {
+        spin_mutex::scoped_lock lock( page_mutex );
+        if( page* q = tail_page )
+            q->next = p;
+        else
+            head_page = p; 
+        tail_page = p;
+    } else {
+        p = tail_page;
+    }
+    ITT_NOTIFY( sync_acquired, p );
+
+    try {
+        base.copy_item( *p, index, item );
+        ITT_NOTIFY( sync_releasing, p );
+        // If no exception was thrown, mark item as present.
+        p->mask |= uintptr(1)<<index;
+        tail_counter += concurrent_queue_rep::n_queue; 
+    } catch (...) {
+        ++base.my_rep->n_invalid_entries;
+        tail_counter += concurrent_queue_rep::n_queue; 
+        throw;
+    }
+}
+
+bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
+    k &= -concurrent_queue_rep::n_queue;
+    spin_wait_until_eq( head_counter, k );
+    spin_wait_while_eq( tail_counter, k );
+    page& p = *head_page;
+    __TBB_ASSERT( &p, NULL );
+    size_t index = k/concurrent_queue_rep::n_queue & (base.items_per_page-1);
+    bool success = false; 
+    {
+        micro_queue_pop_finalizer finalizer( *this, base, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? &p : NULL ); 
+        if( p.mask & uintptr(1)<<index ) {
+            success = true;
+#if DO_ITT_NOTIFY
+            if( ((intptr_t)dst&1) ) {
+                dst = (void*) ((intptr_t)dst&~1);
+                ITT_NOTIFY( sync_acquired, dst );
+            }
+#endif
+            ITT_NOTIFY( sync_acquired, head_page );
+            base.assign_and_destroy_item( dst, p, index );
+            ITT_NOTIFY( sync_releasing, head_page );
+        } else {
+            --base.my_rep->n_invalid_entries;
+        }
+    }
+    return success;
+}
+
+micro_queue& micro_queue::assign( const micro_queue& src, concurrent_queue_base& base )
+{
+    head_counter = src.head_counter;
+    tail_counter = src.tail_counter;
+    page_mutex   = src.page_mutex;
+
+    const page* srcp = src.head_page;
+    if( srcp ) {
+        ticket g_index = head_counter;
+        try {
+            size_t n_items  = (tail_counter-head_counter)/concurrent_queue_rep::n_queue;
+            size_t index = head_counter/concurrent_queue_rep::n_queue & (base.items_per_page-1);
+            size_t end_in_first_page = (index+n_items<base.items_per_page)?(index+n_items):base.items_per_page;
+
+            head_page = make_copy( base, srcp, index, end_in_first_page, g_index );
+            page* cur_page = head_page;
+
+            if( srcp != src.tail_page ) {
+                for( srcp = srcp->next; srcp!=src.tail_page; srcp=srcp->next ) {
+                    cur_page->next = make_copy( base, srcp, 0, base.items_per_page, g_index );
+                    cur_page = cur_page->next;
+                }
+
+                __TBB_ASSERT( srcp==src.tail_page, NULL );
+
+                size_t last_index = tail_counter/concurrent_queue_rep::n_queue & (base.items_per_page-1);
+                if( last_index==0 ) last_index = base.items_per_page;
+
+                cur_page->next = make_copy( base, srcp, 0, last_index, g_index );
+                cur_page = cur_page->next;
+            }
+            tail_page = cur_page;
+        } catch (...) {
+            make_invalid( g_index );
+        }
+    } else {
+        head_page = tail_page = NULL;
+    }
+    return *this;
+}
+
+concurrent_queue_base::page* micro_queue::make_copy( concurrent_queue_base& base, const concurrent_queue_base::page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index )
+{
+    page* new_page = base.allocate_page();
+    new_page->next = NULL;
+    new_page->mask = src_page->mask;
+    for( ; begin_in_page!=end_in_page; ++begin_in_page, ++g_index )
+        if( new_page->mask & uintptr(1)<<begin_in_page )
+            base.copy_page_item( *new_page, begin_in_page, *src_page, begin_in_page );
+    return new_page;
+}
+
+void micro_queue::make_invalid( ticket k )
+{
+    static concurrent_queue_base::page dummy = {static_cast<page*>((void*)1), 0};
+    // mark it so that no more pushes are allowed.
+    invalid_page = &dummy;
+    {
+        spin_mutex::scoped_lock lock( page_mutex );
+        tail_counter = k+concurrent_queue_rep::n_queue+1;
+        if( page* q = tail_page )
+            q->next = static_cast<page*>(invalid_page);
+        else
+            head_page = static_cast<page*>(invalid_page); 
+        tail_page = static_cast<page*>(invalid_page);
+    }
+    throw;
+}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif // warning 4146 is back
+
+//------------------------------------------------------------------------
+// concurrent_queue_base
+//------------------------------------------------------------------------
+concurrent_queue_base_v3::concurrent_queue_base_v3( size_t item_size ) {
+    items_per_page = item_size<=8 ? 32 :
+                     item_size<=16 ? 16 : 
+                     item_size<=32 ? 8 :
+                     item_size<=64 ? 4 :
+                     item_size<=128 ? 2 :
+                     1;
+    my_capacity = size_t(-1)/(item_size>1 ? item_size : 2); 
+    my_rep = cache_aligned_allocator<concurrent_queue_rep>().allocate(1);
+    __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, "alignment error" );
+    __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, "alignment error" );
+    __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, "alignment error" );
+    __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, "alignment error" );
+    memset(my_rep,0,sizeof(concurrent_queue_rep));
+    this->item_size = item_size;
+#if __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE
+#if _WIN32||_WIN64
+    my_rep->var_wait_for_items = CreateEvent( NULL, TRUE/*manual reset*/, FALSE/*not signalled initially*/, NULL);
+    my_rep->var_wait_for_slots = CreateEvent( NULL, TRUE/*manual reset*/, FALSE/*not signalled initially*/, NULL);
+    InitializeCriticalSection( &my_rep->mtx_items_avail );
+    InitializeCriticalSection( &my_rep->mtx_slots_avail );
+#else 
+    // initialize pthread_mutex_t, and pthread_cond_t
+    pthread_mutexattr_t m_attr;
+    pthread_mutexattr_init( &m_attr );
+#if defined(PTHREAD_PRIO_INHERIT) && !__TBB_PRIO_INHERIT_BROKEN
+    pthread_mutexattr_setprotocol( &m_attr, PTHREAD_PRIO_INHERIT );
+#endif
+    pthread_mutex_init( &my_rep->mtx_items_avail, &m_attr );
+    pthread_mutex_init( &my_rep->mtx_slots_avail, &m_attr );
+    pthread_mutexattr_destroy( &m_attr );
+
+    pthread_condattr_t c_attr;
+    pthread_condattr_init( &c_attr );
+    pthread_cond_init( &my_rep->var_wait_for_items, &c_attr );
+    pthread_cond_init( &my_rep->var_wait_for_slots, &c_attr );
+    pthread_condattr_destroy( &c_attr );
+#endif
+#endif /* __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE */
+}
+
+concurrent_queue_base_v3::~concurrent_queue_base_v3() {
+    size_t nq = my_rep->n_queue;
+    for( size_t i=0; i<nq; i++ )
+        __TBB_ASSERT( my_rep->array[i].tail_page==NULL, "pages were not freed properly" );
+#if __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE
+# if _WIN32||_WIN64
+    CloseHandle( my_rep->var_wait_for_items );
+    CloseHandle( my_rep->var_wait_for_slots );
+    DeleteCriticalSection( &my_rep->mtx_items_avail );
+    DeleteCriticalSection( &my_rep->mtx_slots_avail );
+# else
+    pthread_mutex_destroy( &my_rep->mtx_items_avail );
+    pthread_mutex_destroy( &my_rep->mtx_slots_avail );
+    pthread_cond_destroy( &my_rep->var_wait_for_items );
+    pthread_cond_destroy( &my_rep->var_wait_for_slots );
+# endif
+#endif /* __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE */
+    cache_aligned_allocator<concurrent_queue_rep>().deallocate(my_rep,1);
+}
+
+void concurrent_queue_base_v3::internal_push( const void* src ) {
+    concurrent_queue_rep& r = *my_rep;
+#if !__TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE
+    ticket k = r.tail_counter++;
+    ptrdiff_t e = my_capacity;
+    if( e<concurrent_queue_rep::infinite_capacity ) {
+        atomic_backoff backoff;
+        for(;;) {
+            if( (ptrdiff_t)(k-r.head_counter)<e ) break;
+            backoff.pause();
+            e = const_cast<volatile ptrdiff_t&>(my_capacity);
+        }
+    } 
+    r.choose(k).push(src,k,*this);
+#elif _WIN32||_WIN64
+    ticket k = r.tail_counter++;
+    ptrdiff_t e = my_capacity;
+    atomic_backoff backoff;
+#if DO_ITT_NOTIFY
+    bool sync_prepare_done = false;
+#endif
+
+    while( (ptrdiff_t)(k-r.head_counter)>=e ) {
+#if DO_ITT_NOTIFY
+        if( !sync_prepare_done ) {
+            ITT_NOTIFY( sync_prepare, &sync_prepare_done );
+            sync_prepare_done = true;
+        }
+#endif
+        if( !backoff.bounded_pause() ) {
+            EnterCriticalSection( &r.mtx_slots_avail );
+            r.n_waiting_producers++;
+            while( (ptrdiff_t)(k-r.head_counter)>=const_cast<volatile ptrdiff_t&>(my_capacity) ) {
+                uint32_t my_generation = r.producer_wait_generation;
+                for( ;; ) {
+                    LeaveCriticalSection( &r.mtx_slots_avail );
+                    WaitForSingleObject( r.var_wait_for_slots, INFINITE );
+                    EnterCriticalSection( &r.mtx_slots_avail );
+                    if( r.n_producers_to_wakeup > 0 && r.producer_wait_generation != my_generation )
+                        break;
+                }
+                if( --r.n_producers_to_wakeup == 0 )
+                    ResetEvent( r.var_wait_for_slots );
+            }
+            --r.n_waiting_producers;
+            LeaveCriticalSection( &r.mtx_slots_avail );
+            break;
+        }
+        e = const_cast<volatile ptrdiff_t&>(my_capacity);
+    }
+#if DO_ITT_NOTIFY
+    if( sync_prepare_done )
+        ITT_NOTIFY( sync_acquired, &sync_prepare_done );
+#endif
+
+    r.choose( k ).push( src, k, *this );
+
+    if( r.n_waiting_consumers>0 ) {
+        EnterCriticalSection( &r.mtx_items_avail );
+        if( r.n_waiting_consumers>0 ) {
+            r.consumer_wait_generation++;
+            r.n_consumers_to_wakeup = r.n_waiting_consumers;
+            SetEvent( r.var_wait_for_items );
+        }
+        LeaveCriticalSection( &r.mtx_items_avail );
+    }
+#else 
+    ticket k = r.tail_counter++;
+    ptrdiff_t e = my_capacity;
+    atomic_backoff backoff;
+#if DO_ITT_NOTIFY
+    bool sync_prepare_done = false;
+#endif
+    while( (ptrdiff_t)(k-r.head_counter)>=e ) {
+#if DO_ITT_NOTIFY
+        if( !sync_prepare_done ) {
+            ITT_NOTIFY( sync_prepare, &sync_prepare_done );
+            sync_prepare_done = true;
+        }
+#endif
+        if( !backoff.bounded_pause() ) {
+            // queue is full.  go to sleep. let them go to sleep in order.
+            pthread_mutex_lock( &r.mtx_slots_avail );
+            r.n_waiting_producers++;
+            while( (ptrdiff_t)(k-r.head_counter)>=const_cast<volatile ptrdiff_t&>(my_capacity) ) {
+                pthread_cond_wait( &r.var_wait_for_slots, &r.mtx_slots_avail );
+            }
+            --r.n_waiting_producers;
+            pthread_mutex_unlock( &r.mtx_slots_avail );
+            break;
+        }
+        e = const_cast<volatile ptrdiff_t&>(my_capacity);
+    }
+#if DO_ITT_NOTIFY
+    if( sync_prepare_done )
+        ITT_NOTIFY( sync_acquired, &sync_prepare_done );
+#endif
+    r.choose( k ).push( src, k, *this );
+
+    if( r.n_waiting_consumers>0 ) {
+        pthread_mutex_lock( &r.mtx_items_avail );
+        // pthread_cond_broadcast() wakes up all consumers. 
+        if( r.n_waiting_consumers>0 )
+            pthread_cond_broadcast( &r.var_wait_for_items );
+        pthread_mutex_unlock( &r.mtx_items_avail );
+    }
+#endif /* !__TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE */
+}
+
+void concurrent_queue_base_v3::internal_pop( void* dst ) {
+    concurrent_queue_rep& r = *my_rep;
+#if !__TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE
+    ticket k;
+    do {
+        k = r.head_counter++;
+    } while( !r.choose(k).pop(dst,k,*this) );
+#elif _WIN32||_WIN64
+    ticket k;
+    atomic_backoff backoff;
+#if DO_ITT_NOTIFY
+    bool sync_prepare_done = false;
+#endif
+    do {
+        k=r.head_counter++;
+        while( r.tail_counter<=k ) {
+#if DO_ITT_NOTIFY
+            if( !sync_prepare_done ) {
+                ITT_NOTIFY( sync_prepare, dst );
+                dst = (void*) ((intptr_t)dst | 1);
+                sync_prepare_done = true;
+            }
+#endif
+            // Queue is empty; pause and re-try a few times
+            if( !backoff.bounded_pause() ) {
+                // it is really empty.. go to sleep
+                EnterCriticalSection( &r.mtx_items_avail );
+                r.n_waiting_consumers++;
+                while( r.tail_counter<=k ) {
+                    uint32_t my_generation = r.consumer_wait_generation;
+                    for( ;; ) {
+                        LeaveCriticalSection( &r.mtx_items_avail );
+                        WaitForSingleObject( r.var_wait_for_items, INFINITE );
+                        EnterCriticalSection( &r.mtx_items_avail );
+                        if( r.n_consumers_to_wakeup > 0 && r.consumer_wait_generation != my_generation )
+                            break;
+                    }
+                    if( --r.n_consumers_to_wakeup == 0 )
+                        ResetEvent( r.var_wait_for_items );
+                }
+                --r.n_waiting_consumers;
+                LeaveCriticalSection( &r.mtx_items_avail );
+                backoff.reset();
+                break; // break from inner while
+            }
+        } // break to here
+    } while( !r.choose(k).pop(dst,k,*this) );
+
+    // wake up a producer..
+    if( r.n_waiting_producers>0 ) {
+        EnterCriticalSection( &r.mtx_slots_avail );
+        if( r.n_waiting_producers>0 ) {
+            r.producer_wait_generation++;
+            r.n_producers_to_wakeup = r.n_waiting_producers;
+            SetEvent( r.var_wait_for_slots );
+        }
+        LeaveCriticalSection( &r.mtx_slots_avail );
+    }
+#else 
+    ticket k;
+    atomic_backoff backoff;
+#if DO_ITT_NOTIFY
+    bool sync_prepare_done = false;
+#endif
+    do {
+        k = r.head_counter++;
+        while( r.tail_counter<=k ) {
+#if DO_ITT_NOTIFY
+            if( !sync_prepare_done ) {
+                ITT_NOTIFY( sync_prepare, dst );
+                dst = (void*) ((intptr_t)dst | 1);
+                sync_prepare_done = true;
+            }
+#endif
+            // Queue is empty; pause and re-try a few times
+            if( !backoff.bounded_pause() ) {
+                // it is really empty.. go to sleep
+                pthread_mutex_lock( &r.mtx_items_avail );
+                r.n_waiting_consumers++;
+                while( r.tail_counter<=k )
+                    pthread_cond_wait( &r.var_wait_for_items, &r.mtx_items_avail );
+                --r.n_waiting_consumers;
+                pthread_mutex_unlock( &r.mtx_items_avail );
+                backoff.reset();
+                break;
+            }
+        }
+    } while( !r.choose(k).pop(dst,k,*this) );
+
+    if( r.n_waiting_producers>0 ) {
+        pthread_mutex_lock( &r.mtx_slots_avail );
+        if( r.n_waiting_producers>0 )
+            pthread_cond_broadcast( &r.var_wait_for_slots );
+        pthread_mutex_unlock( &r.mtx_slots_avail );
+    }
+#endif /* !__TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE */
+}
+
+bool concurrent_queue_base_v3::internal_pop_if_present( void* dst ) {
+    concurrent_queue_rep& r = *my_rep;
+    ticket k;
+    do {
+        k = r.head_counter;
+        for(;;) {
+            if( r.tail_counter<=k ) {
+                // Queue is empty 
+                return false;
+            }
+            // Queue had item with ticket k when we looked.  Attempt to get that item.
+            ticket tk=k;
+            k = r.head_counter.compare_and_swap( tk+1, tk );
+            if( k==tk )
+                break;
+            // Another thread snatched the item, retry.
+        }
+    } while( !r.choose( k ).pop( dst, k, *this ) );
+
+#if __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE
+#if _WIN32||_WIN64
+    // wake up a producer..
+    if( r.n_waiting_producers>0 ) {
+        EnterCriticalSection( &r.mtx_slots_avail );
+        if( r.n_waiting_producers>0 ) {
+            r.producer_wait_generation++;
+            r.n_producers_to_wakeup = r.n_waiting_producers;
+            SetEvent( r.var_wait_for_slots );
+        }
+        LeaveCriticalSection( &r.mtx_slots_avail );
+    }
+#else /* including MacOS */
+    if( r.n_waiting_producers>0 ) {
+        pthread_mutex_lock( &r.mtx_slots_avail );
+        if( r.n_waiting_producers>0 )
+            pthread_cond_broadcast( &r.var_wait_for_slots );
+        pthread_mutex_unlock( &r.mtx_slots_avail );
+    }
+#endif
+#endif /* __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE */
+
+    return true;
+}
+
+bool concurrent_queue_base_v3::internal_push_if_not_full( const void* src ) {
+    concurrent_queue_rep& r = *my_rep;
+    ticket k = r.tail_counter;
+    for(;;) {
+        if( (ptrdiff_t)(k-r.head_counter)>=my_capacity ) {
+            // Queue is full
+            return false;
+        }
+        // Queue had empty slot with ticket k when we looked.  Attempt to claim that slot.
+        ticket tk=k;
+        k = r.tail_counter.compare_and_swap( tk+1, tk );
+        if( k==tk ) 
+            break;
+        // Another thread claimed the slot, so retry. 
+    }
+    r.choose(k).push(src,k,*this);
+
+#if __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE
+#if _WIN32||_WIN64
+    if( r.n_waiting_consumers>0 ) {
+        EnterCriticalSection( &r.mtx_items_avail );
+        if( r.n_waiting_consumers>0 ) {
+            r.consumer_wait_generation++;
+            r.n_consumers_to_wakeup = r.n_waiting_consumers;
+            SetEvent( r.var_wait_for_items );
+        }
+        LeaveCriticalSection( &r.mtx_items_avail );
+    }
+#else /* including MacOS */
+    if( r.n_waiting_consumers>0 ) {
+        pthread_mutex_lock( &r.mtx_items_avail );
+        if( r.n_waiting_consumers>0 )
+            pthread_cond_broadcast( &r.var_wait_for_items );
+        pthread_mutex_unlock( &r.mtx_items_avail );
+    }
+#endif
+#endif /* __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE */
+    return true;
+}
+
+ptrdiff_t concurrent_queue_base_v3::internal_size() const {
+    __TBB_ASSERT( sizeof(ptrdiff_t)<=sizeof(size_t), NULL );
+    return ptrdiff_t(my_rep->tail_counter-my_rep->head_counter-my_rep->n_invalid_entries);
+}
+
+bool concurrent_queue_base_v3::internal_empty() const {
+    ticket tc = my_rep->tail_counter;
+    ticket hc = my_rep->head_counter;
+    // if tc!=r.tail_counter, the queue was not empty at some point between the two reads.
+    return ( tc==my_rep->tail_counter && ptrdiff_t(tc-hc-my_rep->n_invalid_entries)<=0 );
+}
+
+void concurrent_queue_base_v3::internal_set_capacity( ptrdiff_t capacity, size_t /*item_size*/ ) {
+    my_capacity = capacity<0 ? concurrent_queue_rep::infinite_capacity : capacity;
+}
+
+void concurrent_queue_base_v3::internal_finish_clear() {
+    size_t nq = my_rep->n_queue;
+    for( size_t i=0; i<nq; ++i ) {
+        page* tp = my_rep->array[i].tail_page;
+        __TBB_ASSERT( my_rep->array[i].head_page==tp, "at most one page should remain" );
+        if( tp!=NULL) {
+            if( tp!=invalid_page ) deallocate_page( tp );
+            my_rep->array[i].tail_page = NULL;
+        }
+    }
+}
+
+void concurrent_queue_base_v3::internal_throw_exception() const {
+    throw bad_alloc();
+}
+
+void concurrent_queue_base_v3::assign( const concurrent_queue_base& src ) {
+    items_per_page = src.items_per_page;
+    my_capacity = src.my_capacity;
+
+    // copy concurrent_queue_rep.
+    my_rep->head_counter = src.my_rep->head_counter;
+    my_rep->tail_counter = src.my_rep->tail_counter;
+    my_rep->n_invalid_entries = src.my_rep->n_invalid_entries;
+
+    // copy micro_queues
+    for( size_t i = 0; i<my_rep->n_queue; ++i )
+        my_rep->array[i].assign( src.my_rep->array[i], *this);
+
+    __TBB_ASSERT( my_rep->head_counter==src.my_rep->head_counter && my_rep->tail_counter==src.my_rep->tail_counter, 
+            "the source concurrent queue should not be concurrently modified." );
+}
+
+//------------------------------------------------------------------------
+// concurrent_queue_iterator_rep
+//------------------------------------------------------------------------
+class concurrent_queue_iterator_rep: no_assign {
+public:
+    ticket head_counter;   
+    const concurrent_queue_base& my_queue;
+    concurrent_queue_base::page* array[concurrent_queue_rep::n_queue];
+    concurrent_queue_iterator_rep( const concurrent_queue_base& queue ) : 
+        head_counter(queue.my_rep->head_counter),
+        my_queue(queue)
+    {
+        const concurrent_queue_rep& rep = *queue.my_rep;
+        for( size_t k=0; k<concurrent_queue_rep::n_queue; ++k )
+            array[k] = rep.array[k].head_page;
+    }
+    //! Set item to point to kth element.  Return true if at end of queue or item is marked valid; false otherwise.
+    bool get_item( void*& item, size_t k ) {
+        if( k==my_queue.my_rep->tail_counter ) {
+            item = NULL;
+            return true;
+        } else {
+            concurrent_queue_base::page* p = array[concurrent_queue_rep::index(k)];
+            __TBB_ASSERT(p,NULL);
+            size_t i = k/concurrent_queue_rep::n_queue & (my_queue.items_per_page-1);
+            item = static_cast<unsigned char*>(static_cast<void*>(p+1)) + my_queue.item_size*i;
+            return (p->mask & uintptr(1)<<i)!=0;
+        }
+    }
+};
+
+//------------------------------------------------------------------------
+// concurrent_queue_iterator_base
+//------------------------------------------------------------------------
+concurrent_queue_iterator_base_v3::concurrent_queue_iterator_base_v3( const concurrent_queue_base& queue ) {
+    my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep>().allocate(1);
+    new( my_rep ) concurrent_queue_iterator_rep(queue);
+    size_t k = my_rep->head_counter;
+    if( !my_rep->get_item(my_item, k) ) advance();
+}
+
+void concurrent_queue_iterator_base_v3::assign( const concurrent_queue_iterator_base& other ) {
+    if( my_rep!=other.my_rep ) {
+        if( my_rep ) {
+            cache_aligned_allocator<concurrent_queue_iterator_rep>().deallocate(my_rep, 1);
+            my_rep = NULL;
+        }
+        if( other.my_rep ) {
+            my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep>().allocate(1);
+            new( my_rep ) concurrent_queue_iterator_rep( *other.my_rep );
+        }
+    }
+    my_item = other.my_item;
+}
+
+void concurrent_queue_iterator_base_v3::advance() {
+    __TBB_ASSERT( my_item, "attempt to increment iterator past end of queue" );  
+    size_t k = my_rep->head_counter;
+    const concurrent_queue_base& queue = my_rep->my_queue;
+#if TBB_USE_ASSERT
+    void* tmp;
+    my_rep->get_item(tmp,k);
+    __TBB_ASSERT( my_item==tmp, NULL );
+#endif /* TBB_USE_ASSERT */
+    size_t i = k/concurrent_queue_rep::n_queue & (queue.items_per_page-1);
+    if( i==queue.items_per_page-1 ) {
+        concurrent_queue_base::page*& root = my_rep->array[concurrent_queue_rep::index(k)];
+        root = root->next;
+    }
+    // advance k
+    my_rep->head_counter = ++k;
+    if( !my_rep->get_item(my_item, k) ) advance();
+}
+
+concurrent_queue_iterator_base_v3::~concurrent_queue_iterator_base_v3() {
+    //delete my_rep;
+    cache_aligned_allocator<concurrent_queue_iterator_rep>().deallocate(my_rep, 1);
+    my_rep = NULL;
+}
+
+} // namespace internal
+
+} // namespace tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/concurrent_vector.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/concurrent_vector.cpp
new file mode 100644 (file)
index 0000000..afe602e
--- /dev/null
@@ -0,0 +1,578 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/concurrent_vector.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/tbb_exception.h"
+#include "tbb_misc.h"
+#include "itt_notify.h"
+#include <cstring>
+
+#if defined(_MSC_VER) && defined(_Wp64)
+    // Workaround for overzealous compiler warnings in /Wp64 mode
+    #pragma warning (disable: 4267)
+#endif
+
+using namespace std;
+
+namespace tbb {
+
+namespace internal {
+    class concurrent_vector_base_v3::helper :no_assign {
+public:
+    //! memory page size
+    static const size_type page_size = 4096;
+
+    inline static bool incompact_predicate(size_type size) { // assert size != 0, see source/test/test_vector_layout.cpp
+        return size < page_size || ((size-1)%page_size < page_size/2 && size < page_size * 128); // for more details
+    }
+
+    inline static size_type find_segment_end(const concurrent_vector_base_v3 &v) {
+        segment_t *s = v.my_segment;
+        segment_index_t u = s==v.my_storage? pointers_per_short_table : pointers_per_long_table;
+        segment_index_t k = 0;
+        while( k < u && s[k].array > __TBB_BAD_ALLOC )
+            ++k;
+        return k;
+    }
+
+    // TODO: optimize accesses to my_first_block
+    //! assign first segment size. k - is index of last segment to be allocated, not a count of segments
+    inline static void assign_first_segment_if_neccessary(concurrent_vector_base_v3 &v, segment_index_t k) {
+        if( !v.my_first_block ) {
+            /* There was a suggestion to set first segment according to incompact_predicate:
+            while( k && !helper::incompact_predicate(segment_size( k ) * element_size) )
+                --k; // while previous vector size is compact, decrement
+            // reasons to not do it:
+            // * constructor(n) is not ready to accept fragmented segments
+            // * backward compatibility due to that constructor
+            // * current version gives additional guarantee and faster init.
+            // * two calls to reserve() will give the same effect.
+            */
+            v.my_first_block.compare_and_swap(k+1, 0); // store number of segments
+        }
+    }
+
+    inline static void *allocate_segment(concurrent_vector_base_v3 &v, size_type n) {
+        void *ptr = v.vector_allocator_ptr(v, n);
+        if(!ptr) throw bad_alloc(); // check for bad allocation, throw exception
+        return ptr;
+    }
+
+    //! Publish segment so other threads can see it.
+    inline static void publish_segment( segment_t& s, void* rhs ) {
+    // see also itt_store_pointer_with_release_v3()
+        ITT_NOTIFY( sync_releasing, &s.array );
+        __TBB_store_with_release( s.array, rhs );
+    }
+
+    static size_type enable_segment(concurrent_vector_base_v3 &v, size_type k, size_type element_size) {
+        segment_t* s = v.my_segment; // TODO: optimize out as argument? Optimize accesses to my_first_block
+        __TBB_ASSERT( s[k].array <= __TBB_BAD_ALLOC, "concurrent operation during growth?" );
+        if( !k ) {
+            assign_first_segment_if_neccessary(v, default_initial_segments-1);
+            try {
+                publish_segment(s[0], allocate_segment(v, segment_size(v.my_first_block) ) );
+            } catch(...) { // intercept exception here, assign __TBB_BAD_ALLOC value, re-throw exception
+                publish_segment(s[0], __TBB_BAD_ALLOC); throw;
+            }
+            return 2;
+        }
+        size_type m = segment_size(k);
+        if( !v.my_first_block ) // push_back only
+            spin_wait_while_eq( v.my_first_block, segment_index_t(0) );
+        if( k < v.my_first_block ) {
+            // s[0].array is changed only once ( 0 -> !0 ) and points to uninitialized memory
+            void *array0 = __TBB_load_with_acquire(s[0].array);
+            if( !array0 ) {
+                // sync_prepare called only if there is a wait
+                ITT_NOTIFY(sync_prepare, &s[0].array );
+                spin_wait_while_eq( s[0].array, (void*)0 );
+                array0 = __TBB_load_with_acquire(s[0].array);
+            }
+            ITT_NOTIFY(sync_acquired, &s[0].array);
+            if( array0 <= __TBB_BAD_ALLOC ) { // check for __TBB_BAD_ALLOC of initial segment
+                publish_segment(s[k], __TBB_BAD_ALLOC); // and assign __TBB_BAD_ALLOC here
+                throw bad_last_alloc(); // throw custom exception
+            }
+            publish_segment( s[k],
+                    static_cast<void*>( static_cast<char*>(array0) + segment_base(k)*element_size )
+            );
+        } else {
+            try {
+                publish_segment(s[k], allocate_segment(v, m));
+            } catch(...) { // intercept exception here, assign __TBB_BAD_ALLOC value, re-throw exception
+                publish_segment(s[k], __TBB_BAD_ALLOC); throw;
+            }
+        }
+        return m;
+    }
+
+    // TODO: rename as get_segments_table() and return segment pointer
+    inline static void extend_table_if_necessary(concurrent_vector_base_v3 &v, size_type k, size_type start ) {
+        if(k >= pointers_per_short_table && v.my_segment == v.my_storage)
+            extend_segment_table(v, start );
+    }
+
+    static void extend_segment_table(concurrent_vector_base_v3 &v, size_type start) {
+        if( start > segment_size(pointers_per_short_table) ) start = segment_size(pointers_per_short_table);
+        // If other threads are trying to set pointers in the short segment, wait for them to finish their
+        // assigments before we copy the short segment to the long segment. Note: grow_to_at_least depends on it
+        for( segment_index_t i = 0; segment_base(i) < start && v.my_segment == v.my_storage; i++ )
+            if(!v.my_storage[i].array) {
+                ITT_NOTIFY(sync_prepare, &v.my_storage[i].array);
+                atomic_backoff backoff;
+                do backoff.pause(); while( v.my_segment == v.my_storage && !v.my_storage[i].array );
+                ITT_NOTIFY(sync_acquired, &v.my_storage[i].array);
+            }
+        if( v.my_segment != v.my_storage ) return;
+
+        segment_t* s = (segment_t*)NFS_Allocate( pointers_per_long_table, sizeof(segment_t), NULL );
+        // if( !s ) throw bad_alloc() -- implemented in NFS_Allocate
+        memset( s, 0, pointers_per_long_table*sizeof(segment_t) );
+        for( segment_index_t i = 0; i < pointers_per_short_table; i++)
+            s[i] = v.my_storage[i];
+        if( v.my_segment.compare_and_swap( s, v.my_storage ) != v.my_storage )
+            NFS_Free( s );
+        // else TODO: add ITT_NOTIFY signals for v.my_segment?
+    }
+
+    inline static segment_t &acquire_segment(concurrent_vector_base_v3 &v, size_type index, size_type element_size, bool owner) {
+        segment_t &s = v.my_segment[index]; // TODO: pass v.my_segment as arument
+        if( !__TBB_load_with_acquire(s.array) ) { // do not check for __TBB_BAD_ALLOC 
+            if( owner ) {
+                enable_segment( v, index, element_size );
+            } else {
+                ITT_NOTIFY(sync_prepare, &s.array);
+                spin_wait_while_eq( s.array, (void*)0 );
+                ITT_NOTIFY(sync_acquired, &s.array);
+            }
+        } else {
+            ITT_NOTIFY(sync_acquired, &s.array);
+        }
+        if( s.array <= __TBB_BAD_ALLOC ) // check for __TBB_BAD_ALLOC
+            throw bad_last_alloc(); // throw custom exception, because it's hard to recover after __TBB_BAD_ALLOC correctly
+        return s;
+    }
+
+    ///// non-static fields of helper for exception-safe iteration across segments
+    segment_t *table;// TODO: review all segment_index_t as just short type
+    size_type first_block, k, sz, start, finish, element_size;
+    helper(segment_t *segments, size_type fb, size_type esize, size_type index, size_type s, size_type f) throw()
+        : table(segments), first_block(fb), k(index), sz(0), start(s), finish(f), element_size(esize) {}
+    inline void first_segment() throw() {
+        __TBB_ASSERT( start <= finish, NULL );
+        __TBB_ASSERT( first_block || !finish, NULL );
+        if( k < first_block ) k = 0; // process solid segment at a time
+        size_type base = segment_base( k );
+        __TBB_ASSERT( base <= start, NULL );
+        finish -= base; start -= base; // rebase as offsets from segment k
+        sz = k ? base : segment_size( first_block ); // sz==base for k>0
+    }
+    inline void next_segment() throw() {
+        finish -= sz; start = 0; // offsets from next segment
+        if( !k ) k = first_block;
+        else { ++k; sz <<= 1; }
+    }
+    template<typename F>
+    inline size_type apply(const F &func) {
+        first_segment();
+        while( sz < finish ) { // work for more than one segment
+            func( table[k], static_cast<char*>(table[k].array)+element_size*start, sz-start );
+            next_segment();
+        }
+        func( table[k], static_cast<char*>(table[k].array)+element_size*start, finish-start );
+        return k;
+    }
+    inline void *get_segment_ptr(size_type index, bool wait) {
+        segment_t &s = table[index];
+        if( !__TBB_load_with_acquire(s.array) && wait ) {
+            ITT_NOTIFY(sync_prepare, &s.array);
+            spin_wait_while_eq( s.array, (void*)0 );
+            ITT_NOTIFY(sync_acquired, &s.array);
+        }
+        return s.array;
+    }
+    ~helper() {
+        if( sz >= finish ) return; // the work is done correctly
+        if( !sz ) { // allocation failed, restore the table
+            segment_index_t k_start = k, k_end = segment_index_of(finish-1);
+            if( segment_base( k_start ) < start )
+                get_segment_ptr(k_start++, true); // wait
+            if( k_start < first_block ) {
+                void *array0 = get_segment_ptr(0, start>0); // wait if necessary
+                if( array0 && !k_start ) ++k_start;
+                if( array0 <= __TBB_BAD_ALLOC )
+                    for(; k_start < first_block && k_start <= k_end; ++k_start )
+                        publish_segment(table[k_start], __TBB_BAD_ALLOC);
+                else for(; k_start < first_block && k_start <= k_end; ++k_start )
+                        publish_segment(table[k_start], static_cast<void*>(
+                            static_cast<char*>(array0) + segment_base(k_start)*element_size) );
+            }
+            for(; k_start <= k_end; ++k_start ) // not in first block
+                if( !__TBB_load_with_acquire(table[k_start].array) )
+                    publish_segment(table[k_start], __TBB_BAD_ALLOC);
+            // fill alocated items
+            first_segment();
+            goto recover;
+        }
+        while( sz <= finish ) { // there is still work for at least one segment
+            next_segment();
+recover:
+            void *array = table[k].array;
+            if( array > __TBB_BAD_ALLOC )
+                std::memset( static_cast<char*>(array)+element_size*start, 0, ((sz<finish?sz:finish) - start)*element_size );
+            else __TBB_ASSERT( array == __TBB_BAD_ALLOC, NULL );
+        }
+    }
+    /// TODO: turn into lambda functions when available
+    struct init_body {
+        internal_array_op2 func;
+        const void *arg;
+        init_body(internal_array_op2 init, const void *src) : func(init), arg(src) {}
+        void operator()(segment_t &, void *begin, size_type n) const {
+            func( begin, arg, n );
+        }
+    };
+    struct safe_init_body {
+        internal_array_op2 func;
+        const void *arg;
+        safe_init_body(internal_array_op2 init, const void *src) : func(init), arg(src) {}
+        void operator()(segment_t &s, void *begin, size_type n) const {
+            if( s.array <= __TBB_BAD_ALLOC )
+                throw bad_last_alloc(); // throw custom exception
+            func( begin, arg, n );
+        }
+    };
+    struct destroy_body {
+        internal_array_op1 func;
+        destroy_body(internal_array_op1 destroy) : func(destroy) {}
+        void operator()(segment_t &s, void *begin, size_type n) const {
+            if( s.array > __TBB_BAD_ALLOC )
+                func( begin, n );
+        }
+    };
+};
+
+concurrent_vector_base_v3::~concurrent_vector_base_v3() {
+    segment_t* s = my_segment;
+    if( s != my_storage ) {
+        // Clear short segment.
+        for( segment_index_t i = 0; i < pointers_per_short_table; i++)
+            my_storage[i].array = NULL;
+#if TBB_USE_DEBUG
+        for( segment_index_t i = 0; i < pointers_per_long_table; i++)
+            __TBB_ASSERT( my_segment[i].array <= __TBB_BAD_ALLOC, "should have been freed by clear");
+#endif
+        my_segment = my_storage;
+        NFS_Free( s );
+    }
+}
+
+concurrent_vector_base_v3::size_type concurrent_vector_base_v3::internal_capacity() const {
+    return segment_base( helper::find_segment_end(*this) );
+}
+
+void concurrent_vector_base_v3::internal_throw_exception(size_type t) const {
+    switch(t) {
+        case 0: throw out_of_range("Index out of requested size range");
+        case 1: throw range_error ("Index out of allocated segment slots");
+        case 2: throw range_error ("Index is not allocated");
+    }
+}
+
+void concurrent_vector_base_v3::internal_reserve( size_type n, size_type element_size, size_type max_size ) {
+    if( n>max_size ) {
+        throw length_error("argument to concurrent_vector::reserve exceeds concurrent_vector::max_size()");
+    }
+    __TBB_ASSERT( n, NULL );
+    helper::assign_first_segment_if_neccessary(*this, segment_index_of(n-1));
+    segment_index_t k = helper::find_segment_end(*this);
+    try {
+        for( ; segment_base(k)<n; ++k ) {
+            helper::extend_table_if_necessary(*this, k, 0);
+            if(my_segment[k].array <= __TBB_BAD_ALLOC)
+                helper::enable_segment(*this, k, element_size);
+        }
+    } catch(...) {
+        my_segment[k].array = NULL; throw; // repair and rethrow
+    }
+}
+
+void concurrent_vector_base_v3::internal_copy( const concurrent_vector_base_v3& src, size_type element_size, internal_array_op2 copy ) {
+    size_type n = src.my_early_size;
+    __TBB_ASSERT( my_segment == my_storage, NULL);
+    if( n ) {
+        helper::assign_first_segment_if_neccessary(*this, segment_index_of(n-1));
+        size_type b;
+        for( segment_index_t k=0; (b=segment_base(k))<n; ++k ) {
+            if( (src.my_segment == (segment_t*)src.my_storage && k >= pointers_per_short_table)
+                || src.my_segment[k].array <= __TBB_BAD_ALLOC ) {
+                my_early_size = b; break;
+            }
+            helper::extend_table_if_necessary(*this, k, 0);
+            size_type m = helper::enable_segment(*this, k, element_size);
+            if( m > n-b ) m = n-b;
+            my_early_size = b+m;
+            copy( my_segment[k].array, src.my_segment[k].array, m );
+        }
+    }
+}
+
+void concurrent_vector_base_v3::internal_assign( const concurrent_vector_base_v3& src, size_type element_size, internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy ) {
+    size_type n = src.my_early_size;
+    while( my_early_size>n ) { // TODO: improve
+        segment_index_t k = segment_index_of( my_early_size-1 );
+        size_type b=segment_base(k);
+        size_type new_end = b>=n ? b : n;
+        __TBB_ASSERT( my_early_size>new_end, NULL );
+        if( my_segment[k].array <= __TBB_BAD_ALLOC) // check vector was broken before
+            throw bad_last_alloc(); // throw custom exception
+        // destructors are supposed to not throw any exceptions
+        destroy( (char*)my_segment[k].array+element_size*(new_end-b), my_early_size-new_end );
+        my_early_size = new_end;
+    }
+    size_type dst_initialized_size = my_early_size;
+    my_early_size = n;
+    helper::assign_first_segment_if_neccessary(*this, segment_index_of(n));
+    size_type b;
+    for( segment_index_t k=0; (b=segment_base(k))<n; ++k ) {
+        if( (src.my_segment == (segment_t*)src.my_storage && k >= pointers_per_short_table)
+            || src.my_segment[k].array <= __TBB_BAD_ALLOC ) { // if source is damaged
+                my_early_size = b; break; // TODO: it may cause undestructed items
+        }
+        helper::extend_table_if_necessary(*this, k, 0);
+        if( !my_segment[k].array )
+            helper::enable_segment(*this, k, element_size);
+        else if( my_segment[k].array <= __TBB_BAD_ALLOC )
+            throw bad_last_alloc(); // throw custom exception
+        size_type m = k? segment_size(k) : 2;
+        if( m > n-b ) m = n-b;
+        size_type a = 0;
+        if( dst_initialized_size>b ) {
+            a = dst_initialized_size-b;
+            if( a>m ) a = m;
+            assign( my_segment[k].array, src.my_segment[k].array, a );
+            m -= a;
+            a *= element_size;
+        }
+        if( m>0 )
+            copy( (char*)my_segment[k].array+a, (char*)src.my_segment[k].array+a, m );
+    }
+    __TBB_ASSERT( src.my_early_size==n, "detected use of concurrent_vector::operator= with right side that was concurrently modified" );
+}
+
+void* concurrent_vector_base_v3::internal_push_back( size_type element_size, size_type& index ) {
+    __TBB_ASSERT( sizeof(my_early_size)==sizeof(uintptr), NULL );
+    size_type tmp = __TBB_FetchAndIncrementWacquire(&my_early_size);
+    index = tmp;
+    segment_index_t k_old = segment_index_of( tmp );
+    size_type base = segment_base(k_old);
+    helper::extend_table_if_necessary(*this, k_old, tmp);
+    segment_t& s = helper::acquire_segment(*this, k_old, element_size, base==tmp);
+    size_type j_begin = tmp-base;
+    return (void*)((char*)s.array+element_size*j_begin);
+}
+
+void concurrent_vector_base_v3::internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op2 init, const void *src ) {
+    internal_grow_to_at_least_with_result( new_size, element_size, init, src );
+}
+
+concurrent_vector_base_v3::size_type concurrent_vector_base_v3::internal_grow_to_at_least_with_result( size_type new_size, size_type element_size, internal_array_op2 init, const void *src ) {
+    size_type e = my_early_size;
+    while( e<new_size ) {
+        size_type f = my_early_size.compare_and_swap(new_size,e);
+        if( f==e ) {
+            internal_grow( e, new_size, element_size, init, src );
+            break;
+        }
+        e = f;
+    }
+    // Check/wait for segments allocation completes
+    segment_index_t i, k_old = segment_index_of( new_size-1 );
+    if( k_old >= pointers_per_short_table && my_segment == my_storage ) {
+        spin_wait_while_eq( my_segment, my_storage );
+    }
+    for( i = 0; i <= k_old; ++i ) {
+        segment_t &s = my_segment[i];
+        if(!s.array) {
+            ITT_NOTIFY(sync_prepare, &s.array);
+            atomic_backoff backoff;
+            do backoff.pause();
+            while( !__TBB_load_with_acquire(my_segment[i].array) ); // my_segment may change concurrently
+            ITT_NOTIFY(sync_acquired, &s.array);
+        }
+        if( my_segment[i].array <= __TBB_BAD_ALLOC )
+            throw bad_last_alloc();
+    }
+#if TBB_USE_DEBUG
+    size_type capacity = internal_capacity();
+    __TBB_ASSERT( capacity >= new_size, NULL);
+#endif
+    return e;
+}
+
+concurrent_vector_base_v3::size_type concurrent_vector_base_v3::internal_grow_by( size_type delta, size_type element_size, internal_array_op2 init, const void *src ) {
+    size_type result = my_early_size.fetch_and_add(delta);
+    internal_grow( result, result+delta, element_size, init, src );
+    return result;
+}
+
+void concurrent_vector_base_v3::internal_grow( const size_type start, size_type finish, size_type element_size, internal_array_op2 init, const void *src ) {
+    __TBB_ASSERT( start<finish, "start must be less than finish" );
+    segment_index_t k_start = segment_index_of(start), k_end = segment_index_of(finish-1);
+    helper::assign_first_segment_if_neccessary(*this, k_end);
+    helper::extend_table_if_necessary(*this, k_end, start);
+    helper range(my_segment, my_first_block, element_size, k_start, start, finish);
+    for(; k_end > k_start && k_end >= range.first_block; --k_end ) // allocate segments in reverse order
+        helper::acquire_segment(*this, k_end, element_size, true/*for k_end>k_start*/);
+    for(; k_start <= k_end; ++k_start ) // but allocate first block in straight order
+        helper::acquire_segment(*this, k_start, element_size, segment_base( k_start ) >= start );
+    range.apply( helper::init_body(init, src) );
+}
+
+void concurrent_vector_base_v3::internal_resize( size_type n, size_type element_size, size_type max_size, const void *src,
+                                                internal_array_op1 destroy, internal_array_op2 init ) {
+    size_type j = my_early_size;
+    if( n > j ) { // construct items
+        internal_reserve(n, element_size, max_size);
+        my_early_size = n;
+        helper for_each(my_segment, my_first_block, element_size, segment_index_of(j), j, n);
+        for_each.apply( helper::safe_init_body(init, src) );
+    } else {
+        my_early_size = n;
+        helper for_each(my_segment, my_first_block, element_size, segment_index_of(n), n, j);
+        for_each.apply( helper::destroy_body(destroy) );
+    }
+}
+
+concurrent_vector_base_v3::segment_index_t concurrent_vector_base_v3::internal_clear( internal_array_op1 destroy ) {
+    __TBB_ASSERT( my_segment, NULL );
+    size_type j = my_early_size;
+    my_early_size = 0;
+    helper for_each(my_segment, my_first_block, 0, 0, 0, j); // element_size is safe to be zero if 'start' is zero
+    j = for_each.apply( helper::destroy_body(destroy) );
+    size_type i = helper::find_segment_end(*this);
+    return j < i? i : j+1;
+}
+
+void *concurrent_vector_base_v3::internal_compact( size_type element_size, void *table, internal_array_op1 destroy, internal_array_op2 copy )
+{
+    const size_type my_size = my_early_size;
+    const segment_index_t k_end = helper::find_segment_end(*this); // allocated segments
+    const segment_index_t k_stop = my_size? segment_index_of(my_size-1) + 1 : 0; // number of segments to store existing items: 0=>0; 1,2=>1; 3,4=>2; [5-8]=>3;..
+    const segment_index_t first_block = my_first_block; // number of merged segments, getting values from atomics
+
+    segment_index_t k = first_block;
+    if(k_stop < first_block)
+        k = k_stop;
+    else
+        while (k < k_stop && helper::incompact_predicate(segment_size( k ) * element_size) ) k++;
+    if(k_stop == k_end && k == first_block)
+        return NULL;
+
+    segment_t *const segment_table = my_segment;
+    internal_segments_table &old = *static_cast<internal_segments_table*>( table );
+    memset(&old, 0, sizeof(old));
+
+    if ( k != first_block && k ) // first segment optimization
+    {
+        // exception can occur here
+        void *seg = old.table[0] = helper::allocate_segment( *this, segment_size(k) );
+        old.first_block = k; // fill info for freeing new segment if exception occurs
+        // copy items to the new segment
+        size_type my_segment_size = segment_size( first_block );
+        for (segment_index_t i = 0, j = 0; i < k && j < my_size; j = my_segment_size) {
+            __TBB_ASSERT( segment_table[i].array > __TBB_BAD_ALLOC, NULL);
+            void *s = static_cast<void*>(
+                static_cast<char*>(seg) + segment_base(i)*element_size );
+            if(j + my_segment_size >= my_size) my_segment_size = my_size - j;
+            try { // exception can occur here
+                copy( s, segment_table[i].array, my_segment_size );
+            } catch(...) { // destroy all the already copied items
+                helper for_each(reinterpret_cast<segment_t*>(&old.table[0]), old.first_block, element_size,
+                    0, 0, segment_base(i)+my_segment_size);
+                for_each.apply( helper::destroy_body(destroy) );
+                throw;
+            }
+            my_segment_size = i? segment_size( ++i ) : segment_size( i = first_block );
+        }
+        // commit the changes
+        memcpy(old.table, segment_table, k * sizeof(segment_t));
+        for (segment_index_t i = 0; i < k; i++) {
+            segment_table[i].array = static_cast<void*>(
+                static_cast<char*>(seg) + segment_base(i)*element_size );
+        }
+        old.first_block = first_block; my_first_block = k; // now, first_block != my_first_block
+        // destroy original copies
+        my_segment_size = segment_size( first_block ); // old.first_block actually
+        for (segment_index_t i = 0, j = 0; i < k && j < my_size; j = my_segment_size) {
+            if(j + my_segment_size >= my_size) my_segment_size = my_size - j;
+            // destructors are supposed to not throw any exceptions
+            destroy( old.table[i], my_segment_size );
+            my_segment_size = i? segment_size( ++i ) : segment_size( i = first_block );
+        }
+    }
+    // free unnecessary segments allocated by reserve() call
+    if ( k_stop < k_end ) {
+        old.first_block = first_block;
+        memcpy(old.table+k_stop, segment_table+k_stop, (k_end-k_stop) * sizeof(segment_t));
+        memset(segment_table+k_stop, 0, (k_end-k_stop) * sizeof(segment_t));
+        if( !k ) my_first_block = 0;
+    }
+    return table;
+}
+
+void concurrent_vector_base_v3::internal_swap(concurrent_vector_base_v3& v)
+{
+    size_type my_sz = my_early_size, v_sz = v.my_early_size;
+    if(!my_sz && !v_sz) return;
+    size_type tmp = my_first_block; my_first_block = v.my_first_block; v.my_first_block = tmp;
+    bool my_short = (my_segment == my_storage), v_short  = (v.my_segment == v.my_storage);
+    if ( my_short && v_short ) { // swap both tables
+        char tbl[pointers_per_short_table * sizeof(segment_t)];
+        memcpy(tbl, my_storage, pointers_per_short_table * sizeof(segment_t));
+        memcpy(my_storage, v.my_storage, pointers_per_short_table * sizeof(segment_t));
+        memcpy(v.my_storage, tbl, pointers_per_short_table * sizeof(segment_t));
+    }
+    else if ( my_short ) { // my -> v
+        memcpy(v.my_storage, my_storage, pointers_per_short_table * sizeof(segment_t));
+        my_segment = v.my_segment; v.my_segment = v.my_storage;
+    }
+    else if ( v_short ) { // v -> my
+        memcpy(my_storage, v.my_storage, pointers_per_short_table * sizeof(segment_t));
+        v.my_segment = my_segment; my_segment = my_storage;
+    } else {
+        segment_t *ptr = my_segment; my_segment = v.my_segment; v.my_segment = ptr;
+    }
+    my_early_size = v_sz; v.my_early_size = my_sz;
+}
+
+} // namespace internal
+
+} // tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/dynamic_link.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/dynamic_link.cpp
new file mode 100644 (file)
index 0000000..12d9a30
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "dynamic_link.h"
+
+#ifndef LIBRARY_ASSERT
+#include "tbb/tbb_stddef.h"
+#define LIBRARY_ASSERT(x,y) __TBB_ASSERT(x,y)
+#endif /* LIBRARY_ASSERT */
+
+#if _WIN32||_WIN64
+    #include <malloc.h>     /* alloca */
+#else
+    #include <dlfcn.h>
+#if __FreeBSD__
+    #include <stdlib.h>     /* alloca */
+#else
+    #include <alloca.h>
+#endif
+#endif
+
+OPEN_INTERNAL_NAMESPACE
+
+#if __TBB_WEAK_SYMBOLS
+
+bool dynamic_link( const char* /*library*/, const dynamic_link_descriptor descriptors[], size_t n, size_t required )
+{
+    if ( required == ~(size_t)0 )
+        required = n;
+    LIBRARY_ASSERT( required<=n, "Number of required entry points exceeds their total number" );
+    size_t k = 0;
+    // Check if the first required entries are present in what was loaded into our process
+    while ( k < required && descriptors[k].ptr )
+        ++k;
+    if ( k < required )
+        return false;
+    // Commit all the entry points.
+    for ( k = 0; k < n; ++k )
+        *descriptors[k].handler = (pointer_to_handler) descriptors[k].ptr;
+    return true;
+}
+
+#else /* !__TBB_WEAK_SYMBOLS */
+
+bool dynamic_link( void* module, const dynamic_link_descriptor descriptors[], size_t n, size_t required )
+{
+    pointer_to_handler *h = (pointer_to_handler*)alloca(n * sizeof(pointer_to_handler));
+    if ( required == ~(size_t)0 )
+        required = n;
+    LIBRARY_ASSERT( required<=n, "Number of required entry points exceeds their total number" );
+    size_t k = 0;
+    for ( ; k < n; ++k ) {
+#if _WIN32||_WIN64
+        h[k] = pointer_to_handler(GetProcAddress( (HMODULE)module, descriptors[k].name ));
+#else
+        // Lvalue casting is used; this way icc -strict-ansi does not warn about nonstandard pointer conversion
+        (void *&)h[k] = dlsym( module, descriptors[k].name );
+#endif /* _WIN32||_WIN64 */
+        if ( !h[k] && k < required )
+            return false;
+    }
+    LIBRARY_ASSERT( k == n, "if required entries are initialized, all entries are expected to be walked");
+    // Commit the entry points.
+    // Cannot use memset here, because the writes must be atomic.
+    for( k = 0; k < n; ++k )
+        *descriptors[k].handler = h[k];
+    return true;
+}
+
+bool dynamic_link( const char* library, const dynamic_link_descriptor descriptors[], size_t n, size_t required, dynamic_link_handle* handle )
+{
+#if _WIN32||_WIN64
+    // Interpret non-NULL handle parameter as request to really link against another library.
+    if ( !handle && dynamic_link( GetModuleHandle(NULL), descriptors, n, required ) )
+        // Target library was statically linked into this executable
+        return true;
+    // Prevent Windows from displaying silly message boxes if it fails to load library
+    // (e.g. because of MS runtime problems - one of those crazy manifest related ones)
+    UINT prev_mode = SetErrorMode (SEM_FAILCRITICALERRORS);
+    dynamic_link_handle module = LoadLibrary (library);
+    SetErrorMode (prev_mode);
+#else
+    dynamic_link_handle module = dlopen( library, RTLD_LAZY ); 
+#endif /* _WIN32||_WIN64 */
+    if( module ) {
+        if( !dynamic_link( module, descriptors, n, required ) ) {
+            // Return true if the library is there and it contains all the expected entry points.
+            dynamic_unlink(module);
+            module = NULL;
+        }
+    }
+    if( handle ) 
+        *handle = module;
+    return module!=NULL;
+}
+
+void dynamic_unlink( dynamic_link_handle handle ) {
+    if( handle ) {
+#if _WIN32||_WIN64
+        FreeLibrary( handle );
+#else
+        dlclose( handle );
+#endif /* _WIN32||_WIN64 */    
+    }
+}
+#endif /* !__TBB_WEAK_SYMBOLS */
+
+CLOSE_INTERNAL_NAMESPACE
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/dynamic_link.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/dynamic_link.h
new file mode 100644 (file)
index 0000000..b0c02e0
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_dynamic_link
+#define __TBB_dynamic_link
+
+// Support for dynamically linking to a shared library.
+// By default, the symbols defined here go in namespace tbb::internal.
+// The symbols can be put in another namespace by defining the preprocessor
+// symbols OPEN_INTERNAL_NAMESPACE and CLOSE_INTERNAL_NAMESPACE to open and
+// close the other namespace.  See default definition below for an example.
+
+#ifndef OPEN_INTERNAL_NAMESPACE
+#define OPEN_INTERNAL_NAMESPACE namespace tbb { namespace internal {
+#define CLOSE_INTERNAL_NAMESPACE }}
+#endif /* OPEN_INTERNAL_NAMESPACE */
+
+#include <stddef.h>
+#if _WIN32||_WIN64
+#include <windows.h>
+#endif /* _WIN32||_WIN64 */
+
+OPEN_INTERNAL_NAMESPACE
+
+//! Type definition for a pointer to a void somefunc(void)
+typedef void (*pointer_to_handler)();
+
+// Double cast through the void* from func_ptr in DLD macro is necessary to 
+// prevent warnings from some compilers (g++ 4.1)
+#if __TBB_WEAK_SYMBOLS
+
+#define DLD(s,h) {(pointer_to_handler)&s, (pointer_to_handler*)(void*)(&h)}
+//! Association between a handler name and location of pointer to it.
+struct dynamic_link_descriptor {
+    //! pointer to the handler
+    pointer_to_handler ptr;
+    //! Pointer to the handler
+    pointer_to_handler* handler;
+};
+
+#else /* !__TBB_WEAK_SYMBOLS */
+
+#define DLD(s,h) {#s, (pointer_to_handler*)(void*)(&h)}
+//! Association between a handler name and location of pointer to it.
+struct dynamic_link_descriptor {
+    //! Name of the handler
+    const char* name;
+    //! Pointer to the handler
+    pointer_to_handler* handler;
+};
+
+#endif /* !__TBB_WEAK_SYMBOLS */
+
+#if _WIN32||_WIN64
+typedef HMODULE dynamic_link_handle;
+#else 
+typedef void* dynamic_link_handle;
+#endif /* _WIN32||_WIN64 */
+
+//! Fill in dynamically linked handlers.
+/** 'n' is the length of the array descriptors[].
+    'required' is the number of the initial entries in the array descriptors[] 
+    that have to be found in order for the call to succeed. If the library and 
+    all the required handlers are found, then the corresponding handler pointers 
+    are set, and the return value is true.  Otherwise the original array of 
+    descriptors is left untouched and the return value is false. **/
+bool dynamic_link( const char* libraryname, 
+                   const dynamic_link_descriptor descriptors[], 
+                   size_t n, 
+                   size_t required = ~(size_t)0,
+                   dynamic_link_handle* handle = 0 );
+
+#if !__TBB_WEAK_SYMBOLS
+void dynamic_unlink( dynamic_link_handle handle );
+#endif /* !__TBB_WEAK_SYMBOLS */
+
+CLOSE_INTERNAL_NAMESPACE
+
+#endif /* __TBB_dynamic_link */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/enumerable_thread_specific.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/enumerable_thread_specific.cpp
new file mode 100644 (file)
index 0000000..f576fb3
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/enumerable_thread_specific.h"
+#include "tbb/concurrent_queue.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/atomic.h"
+#include "tbb/spin_mutex.h"
+
+namespace tbb {
+
+    namespace internal {
+
+        // Manages fake TLS keys and fake TLS space
+        // Uses only a single native TLS key through use of an enumerable_thread_specific< ... , ets_key_per_instance >
+        class tls_single_key_manager {
+
+            // Typedefs
+            typedef concurrent_vector<void *> local_vector_type;
+            typedef enumerable_thread_specific< local_vector_type, cache_aligned_allocator<local_vector_type>, ets_key_per_instance > my_ets_type;
+            typedef local_vector_type::size_type fake_key_t;
+
+            // The fake TLS space
+            my_ets_type my_vectors;
+
+            // The next never-yet-assigned fake TLS key
+            atomic< fake_key_t > next_key;
+
+            // A Q of fake TLS keys that can be reused
+            typedef spin_mutex free_mutex_t;
+            free_mutex_t free_mutex;
+
+            struct free_node_t {
+                fake_key_t key;        
+                free_node_t *next;
+            };
+
+            cache_aligned_allocator< free_node_t > my_allocator;
+            free_node_t *free_stack;
+
+            bool pop_if_present( fake_key_t &k ) { 
+                free_node_t *n = NULL;
+                {
+                    free_mutex_t::scoped_lock(free_mutex);
+                    n = free_stack;
+                    if (n) free_stack = n->next;
+                }
+                if ( n ) {
+                    k = n->key;
+                    my_allocator.deallocate(n,1);
+                    return true;
+                }
+                return false;
+            }
+
+            void push( fake_key_t &k ) { 
+                free_node_t *n = my_allocator.allocate(1); 
+                n->key = k;
+                {
+                    free_mutex_t::scoped_lock(free_mutex);
+                    n->next = free_stack;
+                    free_stack = n;
+                }
+            }
+
+        public:
+
+            tls_single_key_manager() : free_stack(NULL)  {
+                next_key = 0;
+            }
+
+            ~tls_single_key_manager() {
+                free_node_t *n = free_stack; 
+                while (n != NULL) {
+                    free_node_t *next = n->next;
+                    my_allocator.deallocate(n,1);
+                    n = next;
+                }
+            }
+
+            // creates or finds an available fake TLS key
+            inline void create_key( fake_key_t &k ) {
+                if ( !(free_stack && pop_if_present( k )) ) {
+                    k = next_key.fetch_and_add(1);     
+                } 
+            }
+
+            // resets the fake TLS space associated with the key and then recycles the key
+            inline void destroy_key( fake_key_t &k ) {
+                for ( my_ets_type::iterator i = my_vectors.begin(); i != my_vectors.end(); ++i ) {
+                    local_vector_type &ivec = *i;
+                    if (ivec.size() > k) 
+                        ivec[k] = NULL;
+                } 
+                push(k);
+            }
+
+            // sets the fake TLS space to point to the given value for this thread
+            inline void set_tls( fake_key_t &k, void *value ) {
+                local_vector_type &my_vector = my_vectors.local();
+                local_vector_type::size_type size = my_vector.size();
+
+                if ( size <= k ) { 
+                    // We use grow_by so that we can initialize the pointers to NULL
+                    my_vector.grow_by( k - size + 1, NULL );
+                }
+                my_vector[k] = value;
+            }
+
+            inline void *get_tls( fake_key_t &k ) {
+                local_vector_type &my_vector = my_vectors.local();
+                if (my_vector.size() > k) 
+                    return my_vector[k];
+                else
+                    return NULL;
+            }
+
+        };
+
+        // The single static instance of tls_single_key_manager
+        static tls_single_key_manager tls_key_manager;
+
+        // The EXPORTED functions
+        void
+        tls_single_key_manager_v4::create_key( tls_key_t &k) {
+            tls_key_manager.create_key( k );
+        }
+
+        void
+        tls_single_key_manager_v4::destroy_key( tls_key_t &k) {
+            tls_key_manager.destroy_key( k );
+        }
+
+        void
+        tls_single_key_manager_v4::set_tls( tls_key_t &k, void *value) {
+             tls_key_manager.set_tls( k, value);
+        }
+
+        void *
+        tls_single_key_manager_v4::get_tls( tls_key_t &k ) {
+            return tls_key_manager.get_tls( k );
+        }
+    }
+
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/gate.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/gate.h
new file mode 100644 (file)
index 0000000..fb12836
--- /dev/null
@@ -0,0 +1,221 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef _TBB_Gate_H
+#define _TBB_Gate_H
+
+#include "itt_notify.h"
+
+namespace tbb {
+
+namespace internal {
+
+#if __TBB_RML
+//! Fake version of Gate for use with RML.
+/** Really just an atomic intptr_t with a compare-and-swap operation,
+    but wrapped in syntax that makes it look like a normal Gate object,
+    in order to minimize source changes for RML in task.cpp. */
+class Gate {
+public:
+    typedef intptr_t state_t;
+   
+    //! Get current state of gate
+    state_t get_state() const {
+        return state;
+    }
+
+#if defined(_MSC_VER) && defined(_Wp64)
+    // Workaround for overzealous compiler warnings in /Wp64 mode
+    #pragma warning (disable: 4244)
+#endif
+
+    bool try_update( intptr_t value, intptr_t comparand ) {
+        return state.compare_and_swap(value,comparand)==comparand;
+    }
+private:
+    atomic<state_t> state;
+};
+
+#elif __TBB_USE_FUTEX
+
+//! Implementation of Gate based on futex.
+/** Use this futex-based implementation where possible, because it is the simplest and usually fastest. */
+class Gate {
+public:
+    typedef intptr_t state_t;
+
+    Gate() {
+        ITT_SYNC_CREATE(&state, SyncType_Scheduler, SyncObj_Gate);
+    }
+
+    //! Get current state of gate
+    state_t get_state() const {
+        return state;
+    }
+    //! Update state=value if state==comparand (flip==false) or state!=comparand (flip==true)
+    void try_update( intptr_t value, intptr_t comparand, bool flip=false ) {
+        __TBB_ASSERT( comparand!=0 || value!=0, "either value or comparand must be non-zero" );
+retry:
+        state_t old_state = state;
+        // First test for condition without using atomic operation
+        if( flip ? old_state!=comparand : old_state==comparand ) {
+            // Now atomically retest condition and set.
+            state_t s = state.compare_and_swap( value, old_state );
+            if( s==old_state ) {
+                // compare_and_swap succeeded
+                if( value!=0 )   
+                    futex_wakeup_all( &state );  // Update was successful and new state is not SNAPSHOT_EMPTY
+            } else {
+                // compare_and_swap failed.  But for != case, failure may be spurious for our purposes if
+                // the value there is nonetheless not equal to value.  This is a fairly rare event, so
+                // there is no need for backoff.  In event of such a failure, we must retry.
+                if( flip && s!=value ) 
+                    goto retry;
+            }
+        }
+    }
+    //! Wait for state!=0.
+    void wait() {
+        if( state==0 )
+            futex_wait( &state, 0 );
+    }
+private:
+    atomic<state_t> state;
+};
+
+#elif USE_WINTHREAD
+
+class Gate {
+public:
+    typedef intptr_t state_t;
+private:
+    //! If state==0, then thread executing wait() suspend until state becomes non-zero.
+    state_t state;
+    CRITICAL_SECTION critical_section;
+    HANDLE event;
+public:
+    //! Initialize with count=0
+    Gate() : state(0) {
+        event = CreateEvent( NULL, true, false, NULL );
+        InitializeCriticalSection( &critical_section );
+        ITT_SYNC_CREATE(&event, SyncType_Scheduler, SyncObj_Gate);
+        ITT_SYNC_CREATE(&critical_section, SyncType_Scheduler, SyncObj_GateLock);
+    }
+    ~Gate() {
+        // Fake prepare/acquired pair for Intel(R) Parallel Amplifier to correctly attribute the operations below
+        ITT_NOTIFY( sync_prepare, &event );
+        CloseHandle( event );
+        DeleteCriticalSection( &critical_section );
+        ITT_NOTIFY( sync_acquired, &event );
+    }
+    //! Get current state of gate
+    state_t get_state() const {
+        return state;
+    }
+    //! Update state=value if state==comparand (flip==false) or state!=comparand (flip==true)
+    void try_update( intptr_t value, intptr_t comparand, bool flip=false ) {
+        __TBB_ASSERT( comparand!=0 || value!=0, "either value or comparand must be non-zero" );
+        EnterCriticalSection( &critical_section );
+        state_t old = state;
+        if( flip ? old!=comparand : old==comparand ) {
+            state = value;
+            if( !old )
+                SetEvent( event );
+            else if( !value )
+                ResetEvent( event );
+        }
+        LeaveCriticalSection( &critical_section );
+    }
+    //! Wait for state!=0.
+    void wait() {
+        if( state==0 ) {
+            WaitForSingleObject( event, INFINITE );
+        }
+    }
+};
+
+#elif USE_PTHREAD
+
+class Gate {
+public:
+    typedef intptr_t state_t;
+private:
+    //! If state==0, then thread executing wait() suspend until state becomes non-zero.
+    state_t state;
+    pthread_mutex_t mutex;
+    pthread_cond_t cond;
+public:
+    //! Initialize with count=0
+    Gate() : state(0)
+    {
+        pthread_mutex_init( &mutex, NULL );
+        pthread_cond_init( &cond, NULL);
+        ITT_SYNC_CREATE(&cond, SyncType_Scheduler, SyncObj_Gate);
+        ITT_SYNC_CREATE(&mutex, SyncType_Scheduler, SyncObj_GateLock);
+    }
+    ~Gate() {
+        pthread_cond_destroy( &cond );
+        pthread_mutex_destroy( &mutex );
+    }
+    //! Get current state of gate
+    state_t get_state() const {
+        return state;
+    }
+    //! Update state=value if state==comparand (flip==false) or state!=comparand (flip==true)
+    void try_update( intptr_t value, intptr_t comparand, bool flip=false ) {
+        __TBB_ASSERT( comparand!=0 || value!=0, "either value or comparand must be non-zero" );
+        pthread_mutex_lock( &mutex );
+        state_t old = state;
+        if( flip ? old!=comparand : old==comparand ) {
+            state = value;
+            if( !old )
+                pthread_cond_broadcast( &cond );
+        }
+        pthread_mutex_unlock( &mutex );
+    }
+    //! Wait for state!=0.
+    void wait() {
+        if( state==0 ) {
+            pthread_mutex_lock( &mutex );
+            while( state==0 ) {
+                pthread_cond_wait( &cond, &mutex );
+            }
+            pthread_mutex_unlock( &mutex );
+        }
+    }
+};
+
+#else
+#error Must define USE_PTHREAD or USE_WINTHREAD
+#endif  /* threading kind */
+
+} // namespace Internal
+
+} // namespace ThreadingBuildingBlocks
+
+#endif /* _TBB_Gate_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia32-masm/atomic_support.asm b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia32-masm/atomic_support.asm
new file mode 100644 (file)
index 0000000..e22bc1c
--- /dev/null
@@ -0,0 +1,196 @@
+; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction.  Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License.  This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+.686
+.model flat,c
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_fetchadd1
+__TBB_machine_fetchadd1:
+       mov edx,4[esp]
+       mov eax,8[esp]
+       lock xadd [edx],al
+       ret
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_fetchstore1
+__TBB_machine_fetchstore1:
+       mov edx,4[esp]
+       mov eax,8[esp]
+       lock xchg [edx],al
+       ret
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_cmpswp1
+__TBB_machine_cmpswp1:
+       mov edx,4[esp]
+       mov ecx,8[esp]
+       mov eax,12[esp]
+       lock cmpxchg [edx],cl
+       ret
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_fetchadd2
+__TBB_machine_fetchadd2:
+       mov edx,4[esp]
+       mov eax,8[esp]
+       lock xadd [edx],ax
+       ret
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_fetchstore2
+__TBB_machine_fetchstore2:
+       mov edx,4[esp]
+       mov eax,8[esp]
+       lock xchg [edx],ax
+       ret
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_cmpswp2
+__TBB_machine_cmpswp2:
+       mov edx,4[esp]
+       mov ecx,8[esp]
+       mov eax,12[esp]
+       lock cmpxchg [edx],cx
+       ret
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_fetchadd4
+__TBB_machine_fetchadd4:
+       mov edx,4[esp]
+       mov eax,8[esp]
+       lock xadd [edx],eax
+       ret
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_fetchstore4
+__TBB_machine_fetchstore4:
+       mov edx,4[esp]
+       mov eax,8[esp]
+       lock xchg [edx],eax
+       ret
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_cmpswp4
+__TBB_machine_cmpswp4:
+       mov edx,4[esp]
+       mov ecx,8[esp]
+       mov eax,12[esp]
+       lock cmpxchg [edx],ecx
+       ret
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_fetchadd8
+__TBB_machine_fetchadd8:
+       push ebx
+       push edi
+       mov edi,12[esp]
+       mov eax,[edi]
+       mov edx,4[edi]
+__TBB_machine_fetchadd8_loop:
+       mov ebx,16[esp]
+       mov ecx,20[esp]
+       add ebx,eax
+       adc ecx,edx
+       lock cmpxchg8b qword ptr [edi]
+       jnz __TBB_machine_fetchadd8_loop
+       pop edi
+       pop ebx
+       ret
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_fetchstore8
+__TBB_machine_fetchstore8:
+       push ebx
+       push edi
+       mov edi,12[esp]
+       mov ebx,16[esp]
+       mov ecx,20[esp]
+       mov eax,[edi]
+       mov edx,4[edi]
+__TBB_machine_fetchstore8_loop:
+       lock cmpxchg8b qword ptr [edi]
+       jnz __TBB_machine_fetchstore8_loop
+       pop edi
+       pop ebx
+       ret
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_cmpswp8
+__TBB_machine_cmpswp8:
+       push ebx
+       push edi
+       mov edi,12[esp]
+       mov ebx,16[esp]
+       mov ecx,20[esp]
+       mov eax,24[esp]
+       mov edx,28[esp]
+       lock cmpxchg8b qword ptr [edi]
+       pop edi
+       pop ebx
+       ret
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_load8
+__TBB_machine_Load8:
+       ; If location is on stack, compiler may have failed to align it correctly, so we do dynamic check.
+       mov ecx,4[esp]
+       test ecx,7
+       jne load_slow
+       ; Load within a cache line
+       sub esp,12
+       fild qword ptr [ecx]
+       fistp qword ptr [esp]
+       mov eax,[esp]
+       mov edx,4[esp]
+       add esp,12
+       ret
+load_slow:
+       ; Load is misaligned. Use cmpxchg8b.
+       push ebx
+       push edi
+       mov edi,ecx
+       xor eax,eax
+       xor ebx,ebx
+       xor ecx,ecx
+       xor edx,edx
+       lock cmpxchg8b qword ptr [edi]
+       pop edi
+       pop ebx
+       ret
+EXTRN __TBB_machine_store8_slow:PROC
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_store8
+__TBB_machine_Store8:
+       ; If location is on stack, compiler may have failed to align it correctly, so we do dynamic check.
+       mov ecx,4[esp]
+       test ecx,7
+       jne __TBB_machine_store8_slow ;; tail call to tbb_misc.cpp
+       fild qword ptr 8[esp]
+       fistp qword ptr [ecx]
+       ret
+end
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia32-masm/lock_byte.asm b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia32-masm/lock_byte.asm
new file mode 100644 (file)
index 0000000..4f560c4
--- /dev/null
@@ -0,0 +1,46 @@
+; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction.  Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License.  This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+; DO NOT EDIT - AUTOMATICALLY GENERATED FROM .s FILE
+.686
+.model flat,c
+.code 
+       ALIGN 4
+       PUBLIC c __TBB_machine_trylockbyte
+__TBB_machine_trylockbyte:
+       mov edx,4[esp]
+       mov al,[edx]
+       mov cl,1
+       test al,1
+       jnz __TBB_machine_trylockbyte_contended
+       lock cmpxchg [edx],cl
+       jne __TBB_machine_trylockbyte_contended
+       mov eax,1
+       ret
+__TBB_machine_trylockbyte_contended:
+       xor eax,eax
+       ret
+end
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/atomic_support.s b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/atomic_support.s
new file mode 100644 (file)
index 0000000..1750289
--- /dev/null
@@ -0,0 +1,678 @@
+// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+        .section .text
+        .align 16
+
+
+        .proc __TBB_machine_fetchadd1__TBB_full_fence#
+        .global __TBB_machine_fetchadd1__TBB_full_fence#
+__TBB_machine_fetchadd1__TBB_full_fence:
+{
+        mf
+        br __TBB_machine_fetchadd1acquire
+}
+        .endp __TBB_machine_fetchadd1__TBB_full_fence#
+
+        .proc __TBB_machine_fetchadd1acquire#
+        .global __TBB_machine_fetchadd1acquire#
+__TBB_machine_fetchadd1acquire:
+
+
+
+
+
+
+
+        ld1 r9=[r32]
+;;
+Retry_1acquire:
+        mov ar.ccv=r9
+        mov r8=r9;
+        add r10=r9,r33
+;;
+        cmpxchg1.acq r9=[r32],r10,ar.ccv
+;;
+        cmp.ne p7,p0=r8,r9
+  (p7) br.cond.dpnt Retry_1acquire
+        br.ret.sptk.many b0
+# 49 "<stdin>"
+        .endp __TBB_machine_fetchadd1acquire#
+# 62 "<stdin>"
+        .section .text
+        .align 16
+        .proc __TBB_machine_fetchstore1__TBB_full_fence#
+        .global __TBB_machine_fetchstore1__TBB_full_fence#
+__TBB_machine_fetchstore1__TBB_full_fence:
+        mf
+;;
+        xchg1 r8=[r32],r33
+        br.ret.sptk.many b0
+        .endp __TBB_machine_fetchstore1__TBB_full_fence#
+
+
+        .proc __TBB_machine_fetchstore1acquire#
+        .global __TBB_machine_fetchstore1acquire#
+__TBB_machine_fetchstore1acquire:
+        xchg1 r8=[r32],r33
+        br.ret.sptk.many b0
+        .endp __TBB_machine_fetchstore1acquire#
+# 88 "<stdin>"
+        .section .text
+        .align 16
+
+
+        .proc __TBB_machine_cmpswp1__TBB_full_fence#
+        .global __TBB_machine_cmpswp1__TBB_full_fence#
+__TBB_machine_cmpswp1__TBB_full_fence:
+{
+        mf
+        br __TBB_machine_cmpswp1acquire
+}
+        .endp __TBB_machine_cmpswp1__TBB_full_fence#
+
+        .proc __TBB_machine_cmpswp1acquire#
+        .global __TBB_machine_cmpswp1acquire#
+__TBB_machine_cmpswp1acquire:
+
+        zxt1 r34=r34
+;;
+
+        mov ar.ccv=r34
+;;
+        cmpxchg1.acq r8=[r32],r33,ar.ccv
+        br.ret.sptk.many b0
+        .endp __TBB_machine_cmpswp1acquire#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+        .section .text
+        .align 16
+
+
+        .proc __TBB_machine_fetchadd2__TBB_full_fence#
+        .global __TBB_machine_fetchadd2__TBB_full_fence#
+__TBB_machine_fetchadd2__TBB_full_fence:
+{
+        mf
+        br __TBB_machine_fetchadd2acquire
+}
+        .endp __TBB_machine_fetchadd2__TBB_full_fence#
+
+        .proc __TBB_machine_fetchadd2acquire#
+        .global __TBB_machine_fetchadd2acquire#
+__TBB_machine_fetchadd2acquire:
+
+
+
+
+
+
+
+        ld2 r9=[r32]
+;;
+Retry_2acquire:
+        mov ar.ccv=r9
+        mov r8=r9;
+        add r10=r9,r33
+;;
+        cmpxchg2.acq r9=[r32],r10,ar.ccv
+;;
+        cmp.ne p7,p0=r8,r9
+  (p7) br.cond.dpnt Retry_2acquire
+        br.ret.sptk.many b0
+# 49 "<stdin>"
+        .endp __TBB_machine_fetchadd2acquire#
+# 62 "<stdin>"
+        .section .text
+        .align 16
+        .proc __TBB_machine_fetchstore2__TBB_full_fence#
+        .global __TBB_machine_fetchstore2__TBB_full_fence#
+__TBB_machine_fetchstore2__TBB_full_fence:
+        mf
+;;
+        xchg2 r8=[r32],r33
+        br.ret.sptk.many b0
+        .endp __TBB_machine_fetchstore2__TBB_full_fence#
+
+
+        .proc __TBB_machine_fetchstore2acquire#
+        .global __TBB_machine_fetchstore2acquire#
+__TBB_machine_fetchstore2acquire:
+        xchg2 r8=[r32],r33
+        br.ret.sptk.many b0
+        .endp __TBB_machine_fetchstore2acquire#
+# 88 "<stdin>"
+        .section .text
+        .align 16
+
+
+        .proc __TBB_machine_cmpswp2__TBB_full_fence#
+        .global __TBB_machine_cmpswp2__TBB_full_fence#
+__TBB_machine_cmpswp2__TBB_full_fence:
+{
+        mf
+        br __TBB_machine_cmpswp2acquire
+}
+        .endp __TBB_machine_cmpswp2__TBB_full_fence#
+
+        .proc __TBB_machine_cmpswp2acquire#
+        .global __TBB_machine_cmpswp2acquire#
+__TBB_machine_cmpswp2acquire:
+
+        zxt2 r34=r34
+;;
+
+        mov ar.ccv=r34
+;;
+        cmpxchg2.acq r8=[r32],r33,ar.ccv
+        br.ret.sptk.many b0
+        .endp __TBB_machine_cmpswp2acquire#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+        .section .text
+        .align 16
+
+
+        .proc __TBB_machine_fetchadd4__TBB_full_fence#
+        .global __TBB_machine_fetchadd4__TBB_full_fence#
+__TBB_machine_fetchadd4__TBB_full_fence:
+{
+        mf
+        br __TBB_machine_fetchadd4acquire
+}
+        .endp __TBB_machine_fetchadd4__TBB_full_fence#
+
+        .proc __TBB_machine_fetchadd4acquire#
+        .global __TBB_machine_fetchadd4acquire#
+__TBB_machine_fetchadd4acquire:
+
+        cmp.eq p6,p0=1,r33
+        cmp.eq p8,p0=-1,r33
+  (p6) br.cond.dptk Inc_4acquire
+  (p8) br.cond.dpnt Dec_4acquire
+;;
+
+        ld4 r9=[r32]
+;;
+Retry_4acquire:
+        mov ar.ccv=r9
+        mov r8=r9;
+        add r10=r9,r33
+;;
+        cmpxchg4.acq r9=[r32],r10,ar.ccv
+;;
+        cmp.ne p7,p0=r8,r9
+  (p7) br.cond.dpnt Retry_4acquire
+        br.ret.sptk.many b0
+
+Inc_4acquire:
+        fetchadd4.acq r8=[r32],1
+        br.ret.sptk.many b0
+Dec_4acquire:
+        fetchadd4.acq r8=[r32],-1
+        br.ret.sptk.many b0
+
+        .endp __TBB_machine_fetchadd4acquire#
+# 62 "<stdin>"
+        .section .text
+        .align 16
+        .proc __TBB_machine_fetchstore4__TBB_full_fence#
+        .global __TBB_machine_fetchstore4__TBB_full_fence#
+__TBB_machine_fetchstore4__TBB_full_fence:
+        mf
+;;
+        xchg4 r8=[r32],r33
+        br.ret.sptk.many b0
+        .endp __TBB_machine_fetchstore4__TBB_full_fence#
+
+
+        .proc __TBB_machine_fetchstore4acquire#
+        .global __TBB_machine_fetchstore4acquire#
+__TBB_machine_fetchstore4acquire:
+        xchg4 r8=[r32],r33
+        br.ret.sptk.many b0
+        .endp __TBB_machine_fetchstore4acquire#
+# 88 "<stdin>"
+        .section .text
+        .align 16
+
+
+        .proc __TBB_machine_cmpswp4__TBB_full_fence#
+        .global __TBB_machine_cmpswp4__TBB_full_fence#
+__TBB_machine_cmpswp4__TBB_full_fence:
+{
+        mf
+        br __TBB_machine_cmpswp4acquire
+}
+        .endp __TBB_machine_cmpswp4__TBB_full_fence#
+
+        .proc __TBB_machine_cmpswp4acquire#
+        .global __TBB_machine_cmpswp4acquire#
+__TBB_machine_cmpswp4acquire:
+
+        zxt4 r34=r34
+;;
+
+        mov ar.ccv=r34
+;;
+        cmpxchg4.acq r8=[r32],r33,ar.ccv
+        br.ret.sptk.many b0
+        .endp __TBB_machine_cmpswp4acquire#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+        .section .text
+        .align 16
+
+
+        .proc __TBB_machine_fetchadd8__TBB_full_fence#
+        .global __TBB_machine_fetchadd8__TBB_full_fence#
+__TBB_machine_fetchadd8__TBB_full_fence:
+{
+        mf
+        br __TBB_machine_fetchadd8acquire
+}
+        .endp __TBB_machine_fetchadd8__TBB_full_fence#
+
+        .proc __TBB_machine_fetchadd8acquire#
+        .global __TBB_machine_fetchadd8acquire#
+__TBB_machine_fetchadd8acquire:
+
+        cmp.eq p6,p0=1,r33
+        cmp.eq p8,p0=-1,r33
+  (p6) br.cond.dptk Inc_8acquire
+  (p8) br.cond.dpnt Dec_8acquire
+;;
+
+        ld8 r9=[r32]
+;;
+Retry_8acquire:
+        mov ar.ccv=r9
+        mov r8=r9;
+        add r10=r9,r33
+;;
+        cmpxchg8.acq r9=[r32],r10,ar.ccv
+;;
+        cmp.ne p7,p0=r8,r9
+  (p7) br.cond.dpnt Retry_8acquire
+        br.ret.sptk.many b0
+
+Inc_8acquire:
+        fetchadd8.acq r8=[r32],1
+        br.ret.sptk.many b0
+Dec_8acquire:
+        fetchadd8.acq r8=[r32],-1
+        br.ret.sptk.many b0
+
+        .endp __TBB_machine_fetchadd8acquire#
+# 62 "<stdin>"
+        .section .text
+        .align 16
+        .proc __TBB_machine_fetchstore8__TBB_full_fence#
+        .global __TBB_machine_fetchstore8__TBB_full_fence#
+__TBB_machine_fetchstore8__TBB_full_fence:
+        mf
+;;
+        xchg8 r8=[r32],r33
+        br.ret.sptk.many b0
+        .endp __TBB_machine_fetchstore8__TBB_full_fence#
+
+
+        .proc __TBB_machine_fetchstore8acquire#
+        .global __TBB_machine_fetchstore8acquire#
+__TBB_machine_fetchstore8acquire:
+        xchg8 r8=[r32],r33
+        br.ret.sptk.many b0
+        .endp __TBB_machine_fetchstore8acquire#
+# 88 "<stdin>"
+        .section .text
+        .align 16
+
+
+        .proc __TBB_machine_cmpswp8__TBB_full_fence#
+        .global __TBB_machine_cmpswp8__TBB_full_fence#
+__TBB_machine_cmpswp8__TBB_full_fence:
+{
+        mf
+        br __TBB_machine_cmpswp8acquire
+}
+        .endp __TBB_machine_cmpswp8__TBB_full_fence#
+
+        .proc __TBB_machine_cmpswp8acquire#
+        .global __TBB_machine_cmpswp8acquire#
+__TBB_machine_cmpswp8acquire:
+
+
+
+
+        mov ar.ccv=r34
+;;
+        cmpxchg8.acq r8=[r32],r33,ar.ccv
+        br.ret.sptk.many b0
+        .endp __TBB_machine_cmpswp8acquire#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+        .section .text
+        .align 16
+# 19 "<stdin>"
+        .proc __TBB_machine_fetchadd1release#
+        .global __TBB_machine_fetchadd1release#
+__TBB_machine_fetchadd1release:
+
+
+
+
+
+
+
+        ld1 r9=[r32]
+;;
+Retry_1release:
+        mov ar.ccv=r9
+        mov r8=r9;
+        add r10=r9,r33
+;;
+        cmpxchg1.rel r9=[r32],r10,ar.ccv
+;;
+        cmp.ne p7,p0=r8,r9
+  (p7) br.cond.dpnt Retry_1release
+        br.ret.sptk.many b0
+# 49 "<stdin>"
+        .endp __TBB_machine_fetchadd1release#
+# 62 "<stdin>"
+        .section .text
+        .align 16
+        .proc __TBB_machine_fetchstore1release#
+        .global __TBB_machine_fetchstore1release#
+__TBB_machine_fetchstore1release:
+        mf
+;;
+        xchg1 r8=[r32],r33
+        br.ret.sptk.many b0
+        .endp __TBB_machine_fetchstore1release#
+# 88 "<stdin>"
+        .section .text
+        .align 16
+# 101 "<stdin>"
+        .proc __TBB_machine_cmpswp1release#
+        .global __TBB_machine_cmpswp1release#
+__TBB_machine_cmpswp1release:
+
+        zxt1 r34=r34
+;;
+
+        mov ar.ccv=r34
+;;
+        cmpxchg1.rel r8=[r32],r33,ar.ccv
+        br.ret.sptk.many b0
+        .endp __TBB_machine_cmpswp1release#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+        .section .text
+        .align 16
+# 19 "<stdin>"
+        .proc __TBB_machine_fetchadd2release#
+        .global __TBB_machine_fetchadd2release#
+__TBB_machine_fetchadd2release:
+
+
+
+
+
+
+
+        ld2 r9=[r32]
+;;
+Retry_2release:
+        mov ar.ccv=r9
+        mov r8=r9;
+        add r10=r9,r33
+;;
+        cmpxchg2.rel r9=[r32],r10,ar.ccv
+;;
+        cmp.ne p7,p0=r8,r9
+  (p7) br.cond.dpnt Retry_2release
+        br.ret.sptk.many b0
+# 49 "<stdin>"
+        .endp __TBB_machine_fetchadd2release#
+# 62 "<stdin>"
+        .section .text
+        .align 16
+        .proc __TBB_machine_fetchstore2release#
+        .global __TBB_machine_fetchstore2release#
+__TBB_machine_fetchstore2release:
+        mf
+;;
+        xchg2 r8=[r32],r33
+        br.ret.sptk.many b0
+        .endp __TBB_machine_fetchstore2release#
+# 88 "<stdin>"
+        .section .text
+        .align 16
+# 101 "<stdin>"
+        .proc __TBB_machine_cmpswp2release#
+        .global __TBB_machine_cmpswp2release#
+__TBB_machine_cmpswp2release:
+
+        zxt2 r34=r34
+;;
+
+        mov ar.ccv=r34
+;;
+        cmpxchg2.rel r8=[r32],r33,ar.ccv
+        br.ret.sptk.many b0
+        .endp __TBB_machine_cmpswp2release#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+        .section .text
+        .align 16
+# 19 "<stdin>"
+        .proc __TBB_machine_fetchadd4release#
+        .global __TBB_machine_fetchadd4release#
+__TBB_machine_fetchadd4release:
+
+        cmp.eq p6,p0=1,r33
+        cmp.eq p8,p0=-1,r33
+  (p6) br.cond.dptk Inc_4release
+  (p8) br.cond.dpnt Dec_4release
+;;
+
+        ld4 r9=[r32]
+;;
+Retry_4release:
+        mov ar.ccv=r9
+        mov r8=r9;
+        add r10=r9,r33
+;;
+        cmpxchg4.rel r9=[r32],r10,ar.ccv
+;;
+        cmp.ne p7,p0=r8,r9
+  (p7) br.cond.dpnt Retry_4release
+        br.ret.sptk.many b0
+
+Inc_4release:
+        fetchadd4.rel r8=[r32],1
+        br.ret.sptk.many b0
+Dec_4release:
+        fetchadd4.rel r8=[r32],-1
+        br.ret.sptk.many b0
+
+        .endp __TBB_machine_fetchadd4release#
+# 62 "<stdin>"
+        .section .text
+        .align 16
+        .proc __TBB_machine_fetchstore4release#
+        .global __TBB_machine_fetchstore4release#
+__TBB_machine_fetchstore4release:
+        mf
+;;
+        xchg4 r8=[r32],r33
+        br.ret.sptk.many b0
+        .endp __TBB_machine_fetchstore4release#
+# 88 "<stdin>"
+        .section .text
+        .align 16
+# 101 "<stdin>"
+        .proc __TBB_machine_cmpswp4release#
+        .global __TBB_machine_cmpswp4release#
+__TBB_machine_cmpswp4release:
+
+        zxt4 r34=r34
+;;
+
+        mov ar.ccv=r34
+;;
+        cmpxchg4.rel r8=[r32],r33,ar.ccv
+        br.ret.sptk.many b0
+        .endp __TBB_machine_cmpswp4release#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+        .section .text
+        .align 16
+# 19 "<stdin>"
+        .proc __TBB_machine_fetchadd8release#
+        .global __TBB_machine_fetchadd8release#
+__TBB_machine_fetchadd8release:
+
+        cmp.eq p6,p0=1,r33
+        cmp.eq p8,p0=-1,r33
+  (p6) br.cond.dptk Inc_8release
+  (p8) br.cond.dpnt Dec_8release
+;;
+
+        ld8 r9=[r32]
+;;
+Retry_8release:
+        mov ar.ccv=r9
+        mov r8=r9;
+        add r10=r9,r33
+;;
+        cmpxchg8.rel r9=[r32],r10,ar.ccv
+;;
+        cmp.ne p7,p0=r8,r9
+  (p7) br.cond.dpnt Retry_8release
+        br.ret.sptk.many b0
+
+Inc_8release:
+        fetchadd8.rel r8=[r32],1
+        br.ret.sptk.many b0
+Dec_8release:
+        fetchadd8.rel r8=[r32],-1
+        br.ret.sptk.many b0
+
+        .endp __TBB_machine_fetchadd8release#
+# 62 "<stdin>"
+        .section .text
+        .align 16
+        .proc __TBB_machine_fetchstore8release#
+        .global __TBB_machine_fetchstore8release#
+__TBB_machine_fetchstore8release:
+        mf
+;;
+        xchg8 r8=[r32],r33
+        br.ret.sptk.many b0
+        .endp __TBB_machine_fetchstore8release#
+# 88 "<stdin>"
+        .section .text
+        .align 16
+# 101 "<stdin>"
+        .proc __TBB_machine_cmpswp8release#
+        .global __TBB_machine_cmpswp8release#
+__TBB_machine_cmpswp8release:
+
+
+
+
+        mov ar.ccv=r34
+;;
+        cmpxchg8.rel r8=[r32],r33,ar.ccv
+        br.ret.sptk.many b0
+        .endp __TBB_machine_cmpswp8release#
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/ia64_misc.s b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/ia64_misc.s
new file mode 100644 (file)
index 0000000..999bfb9
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+       // RSE backing store pointer retrieval
+    .section .text
+    .align 16
+    .proc __TBB_get_bsp#
+    .global __TBB_get_bsp#
+__TBB_get_bsp:
+        mov r8=ar.bsp
+        br.ret.sptk.many b0
+    .endp __TBB_get_bsp#
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/lock_byte.s b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/lock_byte.s
new file mode 100644 (file)
index 0000000..e7f199d
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+       // Support for class TinyLock
+       .section .text
+       .align 16
+       // unsigned int __TBB_machine_trylockbyte( byte& flag );
+       // r32 = address of flag 
+       .proc  __TBB_machine_trylockbyte#
+       .global __TBB_machine_trylockbyte#
+ADDRESS_OF_FLAG=r32
+RETCODE=r8
+FLAG=r9
+BUSY=r10
+SCRATCH=r11
+__TBB_machine_trylockbyte:
+        ld1.acq FLAG=[ADDRESS_OF_FLAG]
+        mov BUSY=1
+        mov RETCODE=0
+;;
+        cmp.ne p6,p0=0,FLAG
+        mov ar.ccv=r0
+(p6)    br.ret.sptk.many b0
+;;
+        cmpxchg1.acq SCRATCH=[ADDRESS_OF_FLAG],BUSY,ar.ccv  // Try to acquire lock
+;;
+        cmp.eq p6,p0=0,SCRATCH
+;;
+(p6)    mov RETCODE=1
+       br.ret.sptk.many b0     
+       .endp __TBB_machine_trylockbyte#
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/log2.s b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/log2.s
new file mode 100644 (file)
index 0000000..2a42888
--- /dev/null
@@ -0,0 +1,67 @@
+// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+       // Support for class ConcurrentVector
+       .section .text
+       .align 16
+       // unsigned long __TBB_machine_lg( unsigned long x );
+       // r32 = x
+       .proc  __TBB_machine_lg#
+       .global __TBB_machine_lg#
+__TBB_machine_lg:
+        shr r16=r32,1  // .x
+;;
+        shr r17=r32,2  // ..x
+       or r32=r32,r16  // xx
+;;
+       shr r16=r32,3   // ...xx
+       or r32=r32,r17  // xxx
+;;
+       shr r17=r32,5   // .....xxx
+       or r32=r32,r16  // xxxxx
+;;
+       shr r16=r32,8   // ........xxxxx
+       or r32=r32,r17  // xxxxxxxx
+;;
+       shr r17=r32,13
+       or r32=r32,r16  // 13x
+;;
+       shr r16=r32,21
+       or r32=r32,r17  // 21x
+;;
+       shr r17=r32,34  
+       or r32=r32,r16  // 34x
+;;
+       shr r16=r32,55
+       or r32=r32,r17  // 55x
+;;
+       or r32=r32,r16  // 64x
+;;
+       popcnt r8=r32
+;;
+       add r8=-1,r8
+       br.ret.sptk.many b0     
+       .endp __TBB_machine_lg#
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/pause.s b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ia64-gas/pause.s
new file mode 100644 (file)
index 0000000..bead89b
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+       .section .text
+       .align 16
+       // void __TBB_machine_pause( long count );
+       // r32 = count
+       .proc  __TBB_machine_pause#
+       .global __TBB_machine_pause#
+count = r32
+__TBB_machine_pause:
+        hint.m 0
+       add count=-1,count
+;;
+       cmp.eq p6,p7=0,count
+(p7)   br.cond.dpnt __TBB_machine_pause
+(p6)           br.ret.sptk.many b0     
+       .endp __TBB_machine_pause#
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ibm_aix51/atomic_support.c b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/ibm_aix51/atomic_support.c
new file mode 100644 (file)
index 0000000..2e052d7
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <stdint.h>
+#include <sys/atomic_op.h>
+
+/* This file must be compiled with gcc.  The IBM compiler doesn't seem to
+   support inline assembly statements (October 2007). */
+
+#ifdef __GNUC__
+
+int32_t __TBB_machine_cas_32 (volatile void* ptr, int32_t value, int32_t comparand) { 
+    __asm__ __volatile__ ("sync\n");  /* memory release operation */
+    compare_and_swap ((atomic_p) ptr, &comparand, value);
+    __asm__ __volatile__ ("sync\n");  /* memory acquire operation */
+    return comparand;
+}
+
+int64_t __TBB_machine_cas_64 (volatile void* ptr, int64_t value, int64_t comparand) { 
+    __asm__ __volatile__ ("sync\n");  /* memory release operation */
+    compare_and_swaplp ((atomic_l) ptr, &comparand, value);
+    __asm__ __volatile__ ("sync\n");  /* memory acquire operation */
+    return comparand;
+}
+
+void __TBB_machine_flush () { 
+    __asm__ __volatile__ ("sync\n");
+}
+
+#endif /* __GNUC__ */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/index.html b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/index.html
new file mode 100644 (file)
index 0000000..c927b94
--- /dev/null
@@ -0,0 +1,32 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains the source code of the TBB core components.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="tools_api">tools_api</A>
+<DD>Source code of the interface components provided by the Intel&reg; Parallel Studio tools.
+<DT><A HREF="intel64-masm">intel64-masm</A>
+<DD>Assembly code for the Intel&reg; 64 architecture.
+<DT><A HREF="ia32-masm">ia32-masm</A>
+<DD>Assembly code for IA32 architecture.
+<DT><A HREF="ia64-gas">ia64-gas</A>
+<DD>Assembly code for IA64 architecture.
+<DT><A HREF="ibm_aix51">ibm_aix51</A>
+<DD>Assembly code for AIX 5.1 port.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright &copy; 2005-2009 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are 
+registered trademarks or trademarks of Intel Corporation or its 
+subsidiaries in the United States and other countries. 
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/intel64-masm/atomic_support.asm b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/intel64-masm/atomic_support.asm
new file mode 100644 (file)
index 0000000..86a2408
--- /dev/null
@@ -0,0 +1,80 @@
+; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction.  Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License.  This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+; DO NOT EDIT - AUTOMATICALLY GENERATED FROM .s FILE
+.code 
+       ALIGN 8
+       PUBLIC __TBB_machine_fetchadd1
+__TBB_machine_fetchadd1:
+       mov rax,rdx
+       lock xadd [rcx],al
+       ret
+.code 
+       ALIGN 8
+       PUBLIC __TBB_machine_fetchstore1
+__TBB_machine_fetchstore1:
+       mov rax,rdx
+       lock xchg [rcx],al
+       ret
+.code 
+       ALIGN 8
+       PUBLIC __TBB_machine_cmpswp1
+__TBB_machine_cmpswp1:
+       mov rax,r8
+       lock cmpxchg [rcx],dl
+       ret
+.code 
+       ALIGN 8
+       PUBLIC __TBB_machine_fetchadd2
+__TBB_machine_fetchadd2:
+       mov rax,rdx
+       lock xadd [rcx],ax
+       ret
+.code 
+       ALIGN 8
+       PUBLIC __TBB_machine_fetchstore2
+__TBB_machine_fetchstore2:
+       mov rax,rdx
+       lock xchg [rcx],ax
+       ret
+.code 
+       ALIGN 8
+       PUBLIC __TBB_machine_cmpswp2
+__TBB_machine_cmpswp2:
+       mov rax,r8
+       lock cmpxchg [rcx],dx
+       ret
+.code
+        ALIGN 8
+        PUBLIC __TBB_machine_pause
+__TBB_machine_pause:
+L1:
+        dw 090f3H; pause
+        add ecx,-1
+        jne L1
+        ret
+end
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_annotate.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_annotate.cpp
new file mode 100644 (file)
index 0000000..b402586
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/tbb_config.h"
+#include "tbb/tbb_machine.h"
+#include "tbb_misc.h"
+#include "dynamic_link.h"
+#include "tbb/cache_aligned_allocator.h" /* NFS_MaxLineSize */
+
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER && DO_ITT_ANNOTATE
+
+#define _ANNOTATE_DECLARE_0(_BASENAME) \
+extern "C" void __Tc##_BASENAME(); \
+namespace tbb { namespace internal { \
+typedef void (*_ANNOTATE_##_BASENAME##_t)(); \
+extern _ANNOTATE_##_BASENAME##_t _ANNOTATE_Handler_##_BASENAME; }}
+
+
+#define _ANNOTATE_DECLARE_1(_BASENAME, _P1TYPE) \
+extern "C" void __Tc##_BASENAME(_P1TYPE p1); \
+namespace tbb { namespace internal { \
+typedef void (*_ANNOTATE_##_BASENAME##_t)(_P1TYPE p1); \
+extern _ANNOTATE_##_BASENAME##_t _ANNOTATE_Handler_##_BASENAME; }}
+
+#define _ANNOTATE_DECLARE_2(_BASENAME, _P1TYPE, _P2TYPE) \
+extern "C" void __Tc##_BASENAME(_P1TYPE p1, _P2TYPE p2); \
+namespace tbb { namespace internal { \
+typedef void (*_ANNOTATE_##_BASENAME##_t)(_P1TYPE p1, _P2TYPE p2); \
+extern _ANNOTATE_##_BASENAME##_t _ANNOTATE_Handler_##_BASENAME; }}
+
+#if _WIN32||_WIN64
+    #include <windows.h>
+#else /* !WIN */
+    #include <dlfcn.h>
+#if __TBB_WEAK_SYMBOLS
+    #pragma weak __TcBeginConcurrencySite
+    #pragma weak __TcEndConcurrencySite
+    #pragma weak __TcBeginTask
+    #pragma weak __TcEndTask
+    #pragma weak __TcSetRecursiveLock
+    #pragma weak __TcUnsetRecursiveLock
+    #pragma weak __TcRecordAllocation
+    #pragma weak __TcWaitForAll
+    #pragma weak __TcSetSharedExclusiveLock
+    #pragma weak __TcUnsetSharedExclusiveLock
+#endif /* __TBB_WEAK_SYMBOLS */
+#endif /* !WIN */
+
+_ANNOTATE_DECLARE_0(BeginConcurrencySite)
+_ANNOTATE_DECLARE_0(EndConcurrencySite)
+_ANNOTATE_DECLARE_0(BeginTask)
+_ANNOTATE_DECLARE_0(EndTask)
+_ANNOTATE_DECLARE_1(SetRecursiveLock,         void*)
+_ANNOTATE_DECLARE_1(UnsetRecursiveLock,       void*)
+_ANNOTATE_DECLARE_2(RecordAllocation,         void*, size_t)
+_ANNOTATE_DECLARE_0(WaitForAll)
+_ANNOTATE_DECLARE_2(SetSharedExclusiveLock,   void*, int)
+_ANNOTATE_DECLARE_1(UnsetSharedExclusiveLock, void*)
+
+namespace tbb {
+namespace internal {
+
+#define _ANNOTATE_DLD(_BASENAME) \
+DLD( __Tc##_BASENAME, _ANNOTATE_Handler_##_BASENAME)
+
+//! Table describing the annotate handlers.
+static const dynamic_link_descriptor Annotate_HandlerTable[] = {
+    _ANNOTATE_DLD(BeginConcurrencySite),
+    _ANNOTATE_DLD(EndConcurrencySite),
+    _ANNOTATE_DLD(BeginTask),
+    _ANNOTATE_DLD(EndTask),
+    _ANNOTATE_DLD(SetRecursiveLock),
+    _ANNOTATE_DLD(UnsetRecursiveLock),
+    _ANNOTATE_DLD(RecordAllocation),
+    _ANNOTATE_DLD(WaitForAll),
+    _ANNOTATE_DLD(SetSharedExclusiveLock),
+    _ANNOTATE_DLD(UnsetSharedExclusiveLock),
+};
+
+static const int Annotate_HandlerTable_size = 
+    sizeof(Annotate_HandlerTable)/sizeof(dynamic_link_descriptor);
+
+# if _WIN32||_WIN64
+#  define LIB_ITT_ANNOTATE "tcwhatif.dll"
+# elif __linux__
+#  define LIB_ITT_ANNOTATE "libtcwhatif.so"
+# else
+#  error Intel(R) Threading Tools not provided for this OS
+# endif
+
+bool Initialize_ITTAnnotate() {
+    bool result = false;
+    if( GetBoolEnvironmentVariable("DO_WHATIF_ANALYSIS") ) {
+        result = dynamic_link(LIB_ITT_ANNOTATE, Annotate_HandlerTable, Annotate_HandlerTable_size, Annotate_HandlerTable_size );
+    }
+    return result;
+}
+
+//! Leading padding before the area where tool notification handlers are placed.
+/** Prevents cache lines where the handler pointers are stored from thrashing.
+    Defined as extern to prevent compiler from placing the padding arrays separately
+    from the handler pointers (which are declared as extern).
+    Declared separately from definition to get rid of compiler warnings. **/
+extern char __ANNOTATE_Handler_leading_padding[NFS_MaxLineSize];
+
+//! Trailing padding after the area where tool notification handlers are placed.
+extern char __ANNOTATE_Handler_trailing_padding[NFS_MaxLineSize];
+
+#define _ANNOTATE_HANDLER(_BASENAME) \
+_ANNOTATE_##_BASENAME##_t _ANNOTATE_Handler_##_BASENAME
+
+char __ANNOTATE_Handler_leading_padding[NFS_MaxLineSize] = {0};
+_ANNOTATE_HANDLER(BeginConcurrencySite);
+_ANNOTATE_HANDLER(EndConcurrencySite);
+_ANNOTATE_HANDLER(BeginTask);
+_ANNOTATE_HANDLER(EndTask);
+_ANNOTATE_HANDLER(SetRecursiveLock);
+_ANNOTATE_HANDLER(UnsetRecursiveLock);
+_ANNOTATE_HANDLER(RecordAllocation);
+_ANNOTATE_HANDLER(WaitForAll);
+_ANNOTATE_HANDLER(SetSharedExclusiveLock);
+_ANNOTATE_HANDLER(UnsetSharedExclusiveLock);
+char __ANNOTATE_Handler_trailing_padding[NFS_MaxLineSize] = {0};
+
+} // namespace internal
+} // namespace tbb
+
+#define _ANNOTATE_CALL_0(_BASENAME) \
+{ _ANNOTATE_##_BASENAME##_t fp = _ANNOTATE_Handler_##_BASENAME; \
+  if (fp) fp(); }
+
+#define _ANNOTATE_CALL_1(_BASENAME, _P1) \
+{ _ANNOTATE_##_BASENAME##_t fp = _ANNOTATE_Handler_##_BASENAME; \
+  if (fp) fp(_P1); }
+
+#define _ANNOTATE_CALL_2(_BASENAME, _P1, _P2) \
+{ _ANNOTATE_##_BASENAME##_t fp = _ANNOTATE_Handler_##_BASENAME; \
+  if (fp) fp(_P1, _P2); }
+
+#define ITT_ANNOTATE_GENERATE
+#include "itt_annotate.h"
+
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER && DO_ITT_ANNOTATE */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_annotate.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_annotate.h
new file mode 100644 (file)
index 0000000..033f434
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_itt_annotate_H
+#define __TBB_itt_annotate_H
+
+#include "tbb/tbb_stddef.h"
+
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER && DO_ITT_ANNOTATE
+
+#ifdef ITT_ANNOTATE_GENERATE
+#define _ITT_ANNOTATE_DECLARE_0(_BASENAME) \
+void ITT_Annotate_##_BASENAME() \
+{ _ANNOTATE_CALL_0(_BASENAME); }
+
+#define _ITT_ANNOTATE_DECLARE_1(_BASENAME, _P1TYPE) \
+void ITT_Annotate_##_BASENAME(_P1TYPE p1) \
+{ _ANNOTATE_CALL_1(_BASENAME, p1); }
+
+#define _ITT_ANNOTATE_DECLARE_2(_BASENAME, _P1TYPE, _P2TYPE) \
+void ITT_Annotate_##_BASENAME(_P1TYPE p1, _P2TYPE p2) \
+{ _ANNOTATE_CALL_2(_BASENAME, p1, p2); }
+
+#else /* !ITT_ANNOTATE_GENERATE */
+#define _ITT_ANNOTATE_DECLARE_0(_BASENAME) \
+extern void ITT_Annotate_##_BASENAME();
+
+#define _ITT_ANNOTATE_DECLARE_1(_BASENAME, _P1TYPE) \
+extern void ITT_Annotate_##_BASENAME(_P1TYPE p1);
+
+#define _ITT_ANNOTATE_DECLARE_2(_BASENAME, _P1TYPE, _P2TYPE) \
+extern void ITT_Annotate_##_BASENAME(_P1TYPE p1, _P2TYPE p2);
+#endif /* !ITT_ANNOTATE_GENERATE */
+
+namespace tbb {
+namespace internal {
+_ITT_ANNOTATE_DECLARE_0(BeginConcurrencySite)
+_ITT_ANNOTATE_DECLARE_0(EndConcurrencySite)
+_ITT_ANNOTATE_DECLARE_0(BeginTask)
+_ITT_ANNOTATE_DECLARE_0(EndTask)
+_ITT_ANNOTATE_DECLARE_1(SetRecursiveLock,         void*)
+_ITT_ANNOTATE_DECLARE_1(UnsetRecursiveLock,       void*)
+_ITT_ANNOTATE_DECLARE_2(RecordAllocation,         void*, size_t)
+_ITT_ANNOTATE_DECLARE_0(WaitForAll)
+_ITT_ANNOTATE_DECLARE_2(SetSharedExclusiveLock,   void*, int)
+_ITT_ANNOTATE_DECLARE_1(UnsetSharedExclusiveLock, void*)
+
+extern bool Initialize_ITTAnnotate();
+
+} // namespace internal
+} // namespace tbb
+
+#define ANN_CALL(name,args) tbb::internal::ITT_Annotate_##name##args
+
+#define ITT_ANNOTATE_BEGIN_SITE()            ANN_CALL(BeginConcurrencySite,())
+#define ITT_ANNOTATE_END_SITE()              ANN_CALL(EndConcurrencySite,())
+#define ITT_ANNOTATE_BEGIN_TASK()            ANN_CALL(BeginTask,())
+#define ITT_ANNOTATE_END_TASK()              ANN_CALL(EndTask,())
+#define ITT_ANNOTATE_ACQUIRE_LOCK(obj)       ANN_CALL(SetRecursiveLock,(obj))
+#define ITT_ANNOTATE_RELEASE_LOCK(obj)       ANN_CALL(UnsetRecursiveLock,(obj))
+#define ITT_ANNOTATE_ACQUIRE_WRITE_LOCK(obj) ANN_CALL(SetSharedExclusiveLock,(obj, 1))
+#define ITT_ANNOTATE_RELEASE_WRITE_LOCK(obj) ANN_CALL(UnsetSharedExclusiveLock,(obj))
+#define ITT_ANNOTATE_ACQUIRE_READ_LOCK(obj)  ANN_CALL(SetSharedExclusiveLock,(obj, 0))
+#define ITT_ANNOTATE_RELEASE_READ_LOCK(obj)  ANN_CALL(UnsetSharedExclusiveLock,(obj))
+#define ITT_ANNOTATE_ALLOCATION(obj, sz)     ANN_CALL(RecordAllocation,(obj, sz))
+#define ITT_ANNOTATE_WAIT_FOR_ALL()          ANN_CALL(WaitForAll,())
+
+#undef _ITT_ANNOTATE_DECLARE_0
+#undef _ITT_ANNOTATE_DECLARE_1
+#undef _ITT_ANNOTATE_DECLARE_2
+
+#else /* !(__TBB_PROVIDE_VIRTUAL_SCHEDULER && DO_ITT_ANNOTATE) */
+
+#define ITT_ANNOTATE_BEGIN_SITE()
+#define ITT_ANNOTATE_END_SITE()
+#define ITT_ANNOTATE_BEGIN_TASK()
+#define ITT_ANNOTATE_END_TASK()
+#define ITT_ANNOTATE_ACQUIRE_LOCK(obj)
+#define ITT_ANNOTATE_RELEASE_LOCK(obj)
+#define ITT_ANNOTATE_ACQUIRE_WRITE_LOCK(obj)
+#define ITT_ANNOTATE_RELEASE_WRITE_LOCK(obj)
+#define ITT_ANNOTATE_ACQUIRE_READ_LOCK(obj)
+#define ITT_ANNOTATE_RELEASE_READ_LOCK(obj)
+#define ITT_ANNOTATE_ALLOCATION(obj, sz)
+#define ITT_ANNOTATE_WAIT_FOR_ALL()
+
+#endif /* !(__TBB_PROVIDE_VIRTUAL_SCHEDULER && DO_ITT_ANNOTATE) */
+
+#endif /* __TBB_itt_annotate_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_notify.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_notify.cpp
new file mode 100644 (file)
index 0000000..27ebbff
--- /dev/null
@@ -0,0 +1,273 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "itt_notify.h"
+#include "tbb/tbb_machine.h"
+
+#include <stdio.h>
+
+namespace tbb {
+    namespace internal {
+
+#if __TBB_NEW_ITT_NOTIFY
+#if DO_ITT_NOTIFY
+
+    extern "C" int __TBB_load_ittnotify();
+
+    bool InitializeITT () {
+        return __TBB_load_ittnotify() != 0;
+    }
+
+
+#endif /* DO_ITT_NOTIFY */
+#endif /* __TBB_NEW_ITT_NOTIFY */
+
+    void itt_store_pointer_with_release_v3( void* dst, void* src ) {
+        ITT_NOTIFY(sync_releasing, dst);
+        __TBB_store_with_release(*static_cast<void**>(dst),src);
+    }
+
+    void* itt_load_pointer_with_acquire_v3( const void* src ) {
+        void* result = __TBB_load_with_acquire(*static_cast<void*const*>(src));
+        ITT_NOTIFY(sync_acquired, const_cast<void*>(src));
+        return result;
+    }
+
+    void* itt_load_pointer_v3( const void* src ) {
+        void* result = *static_cast<void*const*>(src);
+        return result;
+    }
+
+    void itt_set_sync_name_v3( void* obj, const tchar* name) {
+        ITT_SYNC_RENAME(obj, name);
+        (void)obj, (void)name;  // Prevents compiler warning when ITT support is switched off
+    }
+
+    } // namespace internal
+} // namespace tbb
+
+
+#if !__TBB_NEW_ITT_NOTIFY
+
+#include "tbb_misc.h"
+#include "dynamic_link.h"
+#include "tbb/cache_aligned_allocator.h" /* NFS_MaxLineSize */
+
+#if _WIN32||_WIN64
+    #include <windows.h>
+#else /* !WIN */
+    #include <dlfcn.h>
+#if __TBB_WEAK_SYMBOLS
+    #pragma weak __itt_notify_sync_prepare
+    #pragma weak __itt_notify_sync_acquired
+    #pragma weak __itt_notify_sync_releasing
+    #pragma weak __itt_notify_sync_cancel
+    #pragma weak __itt_thr_name_set
+    #pragma weak __itt_thread_set_name
+    #pragma weak __itt_sync_create
+    #pragma weak __itt_sync_rename
+    extern "C" {
+        void __itt_notify_sync_prepare(void *p);
+        void __itt_notify_sync_cancel(void *p);
+        void __itt_notify_sync_acquired(void *p);
+        void __itt_notify_sync_releasing(void *p);
+        int __itt_thr_name_set (void* p, int len);
+        void __itt_thread_set_name (const char* name);
+        void __itt_sync_create( void* obj, const char* name, const char* type, int attribute );
+        void __itt_sync_rename( void* obj, const char* new_name );
+    }
+#endif /* __TBB_WEAK_SYMBOLS */
+#endif /* !WIN */
+
+namespace tbb {
+namespace internal {
+
+#if DO_ITT_NOTIFY
+
+
+//! Table describing the __itt_notify handlers.
+static const dynamic_link_descriptor ITT_HandlerTable[] = {
+    DLD( __itt_notify_sync_prepare, ITT_Handler_sync_prepare),
+    DLD( __itt_notify_sync_acquired, ITT_Handler_sync_acquired),
+    DLD( __itt_notify_sync_releasing, ITT_Handler_sync_releasing),
+    DLD( __itt_notify_sync_cancel, ITT_Handler_sync_cancel),
+# if _WIN32||_WIN64
+    DLD( __itt_thr_name_setW, ITT_Handler_thr_name_set),
+    DLD( __itt_thread_set_nameW, ITT_Handler_thread_set_name),
+# else
+    DLD( __itt_thr_name_set, ITT_Handler_thr_name_set),
+    DLD( __itt_thread_set_name, ITT_Handler_thread_set_name),
+# endif /* _WIN32 || _WIN64 */
+
+
+# if _WIN32||_WIN64
+    DLD( __itt_sync_createW, ITT_Handler_sync_create),
+    DLD( __itt_sync_renameW, ITT_Handler_sync_rename)
+# else
+    DLD( __itt_sync_create, ITT_Handler_sync_create),
+    DLD( __itt_sync_rename, ITT_Handler_sync_rename)
+# endif
+};
+
+static const int ITT_HandlerTable_size = 
+    sizeof(ITT_HandlerTable)/sizeof(dynamic_link_descriptor);
+
+// LIBITTNOTIFY_NAME is the name of the ITT notification library 
+# if _WIN32||_WIN64
+#  define LIBITTNOTIFY_NAME "libittnotify.dll"
+# elif __linux__
+#  define LIBITTNOTIFY_NAME "libittnotify.so"
+# else
+#  error Intel(R) Threading Tools not provided for this OS
+# endif
+
+//! Performs tools support initialization.
+/** Is called by DoOneTimeInitializations and ITT_DoOneTimeInitialization in 
+    a protected (one-time) manner. Not to be invoked directly. **/
+bool InitializeITT() {
+    bool result = false;
+    // Check if we are running under a performance or correctness tool
+    bool t_checker = GetBoolEnvironmentVariable("KMP_FOR_TCHECK");
+    bool t_profiler = GetBoolEnvironmentVariable("KMP_FOR_TPROFILE");
+       __TBB_ASSERT(!(t_checker&&t_profiler), NULL);
+    if ( t_checker || t_profiler ) {
+        // Yes, we are in the tool mode. Try to load libittnotify library.
+        result = dynamic_link( LIBITTNOTIFY_NAME, ITT_HandlerTable, ITT_HandlerTable_size, 4 );
+    }
+    if (result){
+        if ( t_checker ) {
+            current_tool = ITC;
+        } else if ( t_profiler ) {
+            current_tool = ITP;
+        }
+    } else {
+        // Clear away the proxy (dummy) handlers
+        for (int i = 0; i < ITT_HandlerTable_size; i++)
+            *ITT_HandlerTable[i].handler = NULL;
+        current_tool = NONE;
+    }
+    PrintExtraVersionInfo( "ITT", result?"yes":"no" );
+    return result;
+}
+
+//! Performs one-time initialization of tools interoperability mechanisms.
+/** Defined in task.cpp. Makes a protected do-once call to InitializeITT(). **/
+void ITT_DoOneTimeInitialization();
+
+/** The following dummy_xxx functions are proxies that correspond to tool notification 
+    APIs and are used to initialize corresponding pointers to the tool notifications
+    (ITT_Handler_xxx). When the first call to ITT_Handler_xxx takes place before 
+    the whole library initialization (done by DoOneTimeInitializations) happened,
+    the proxy handler performs initialization of the tools support. After this
+    ITT_Handler_xxx will be set to either tool notification pointer or NULL. **/
+void dummy_sync_prepare( volatile void* ptr ) {
+    ITT_DoOneTimeInitialization();
+    __TBB_ASSERT( ITT_Handler_sync_prepare!=&dummy_sync_prepare, NULL );
+    if (ITT_Handler_sync_prepare)
+        (*ITT_Handler_sync_prepare) (ptr);
+}
+
+void dummy_sync_acquired( volatile void* ptr ) {
+    ITT_DoOneTimeInitialization();
+    __TBB_ASSERT( ITT_Handler_sync_acquired!=&dummy_sync_acquired, NULL );
+    if (ITT_Handler_sync_acquired)
+        (*ITT_Handler_sync_acquired) (ptr);
+}
+
+void dummy_sync_releasing( volatile void* ptr ) {
+    ITT_DoOneTimeInitialization();
+    __TBB_ASSERT( ITT_Handler_sync_releasing!=&dummy_sync_releasing, NULL );
+    if (ITT_Handler_sync_releasing)
+        (*ITT_Handler_sync_releasing) (ptr);
+}
+
+void dummy_sync_cancel( volatile void* ptr ) {
+    ITT_DoOneTimeInitialization();
+    __TBB_ASSERT( ITT_Handler_sync_cancel!=&dummy_sync_cancel, NULL );
+    if (ITT_Handler_sync_cancel)
+        (*ITT_Handler_sync_cancel) (ptr);
+}
+
+int dummy_thr_name_set( const tchar* str, int number ) {
+    ITT_DoOneTimeInitialization();
+    __TBB_ASSERT( ITT_Handler_thr_name_set!=&dummy_thr_name_set, NULL );
+    if (ITT_Handler_thr_name_set)
+        return (*ITT_Handler_thr_name_set) (str, number);
+    return -1;
+}
+
+void dummy_thread_set_name( const tchar* name ) {
+    ITT_DoOneTimeInitialization();
+    __TBB_ASSERT( ITT_Handler_thread_set_name!=&dummy_thread_set_name, NULL );
+    if (ITT_Handler_thread_set_name)
+        (*ITT_Handler_thread_set_name)( name );
+}
+
+void dummy_sync_create( void* obj, const tchar* objname, const tchar* objtype, int /*attribute*/ ) {
+    ITT_DoOneTimeInitialization();
+    __TBB_ASSERT( ITT_Handler_sync_create!=&dummy_sync_create, NULL );
+    ITT_SYNC_CREATE( obj, objtype, objname );
+}
+
+void dummy_sync_rename( void* obj, const tchar* new_name ) {
+    ITT_DoOneTimeInitialization();
+    __TBB_ASSERT( ITT_Handler_sync_rename!=&dummy_sync_rename, NULL );
+    ITT_SYNC_RENAME(obj, new_name);
+}
+
+
+
+//! Leading padding before the area where tool notification handlers are placed.
+/** Prevents cache lines where the handler pointers are stored from thrashing.
+    Defined as extern to prevent compiler from placing the padding arrays separately
+    from the handler pointers (which are declared as extern).
+    Declared separately from definition to get rid of compiler warnings. **/
+extern char __ITT_Handler_leading_padding[NFS_MaxLineSize];
+
+//! Trailing padding after the area where tool notification handlers are placed.
+extern char __ITT_Handler_trailing_padding[NFS_MaxLineSize];
+
+char __ITT_Handler_leading_padding[NFS_MaxLineSize] = {0};
+PointerToITT_Handler ITT_Handler_sync_prepare = &dummy_sync_prepare;
+PointerToITT_Handler ITT_Handler_sync_acquired = &dummy_sync_acquired;
+PointerToITT_Handler ITT_Handler_sync_releasing = &dummy_sync_releasing;
+PointerToITT_Handler ITT_Handler_sync_cancel = &dummy_sync_cancel;
+PointerToITT_thr_name_set ITT_Handler_thr_name_set = &dummy_thr_name_set;
+PointerToITT_thread_set_name ITT_Handler_thread_set_name = &dummy_thread_set_name;
+PointerToITT_sync_create ITT_Handler_sync_create = &dummy_sync_create;
+PointerToITT_sync_rename ITT_Handler_sync_rename = &dummy_sync_rename;
+char __ITT_Handler_trailing_padding[NFS_MaxLineSize] = {0};
+
+target_tool current_tool = TO_BE_INITIALIZED;
+
+#endif /* DO_ITT_NOTIFY */
+} // namespace internal 
+
+} // namespace tbb
+
+#endif /* !__TBB_NEW_ITT_NOTIFY */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_notify.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_notify.h
new file mode 100644 (file)
index 0000000..c5dc20b
--- /dev/null
@@ -0,0 +1,207 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef _TBB_ITT_NOTIFY
+#define _TBB_ITT_NOTIFY
+
+#include "tbb/tbb_stddef.h"
+
+#if DO_ITT_NOTIFY
+#if __TBB_NEW_ITT_NOTIFY
+
+#if _WIN32||_WIN64
+    #ifndef UNICODE
+        #define UNICODE
+    #endif
+#endif /* WIN */
+
+#include "tools_api/ittnotify.h"
+
+#if _WIN32||_WIN64
+    #undef _T
+    #undef __itt_event_create
+    #define __itt_event_create __itt_event_createA
+#endif /* WIN */
+
+#endif /* __TBB_NEW_ITT_NOTIFY */
+
+#endif /* DO_ITT_NOTIFY */
+
+namespace tbb {
+//! Unicode support
+#if _WIN32||_WIN64
+    //! Unicode character type. Always wchar_t on Windows.
+    /** We do not use typedefs from Windows TCHAR family to keep consistence of TBB coding style. **/
+    typedef wchar_t tchar;
+    //! Standard Windows macro to markup the string literals. 
+    #define _T(string_literal) L ## string_literal
+#if !__TBB_NEW_ITT_NOTIFY
+    #define tstrlen wcslen
+#endif /* !__TBB_NEW_ITT_NOTIFY */
+#else /* !WIN */
+    typedef char tchar;
+    //! Standard Windows style macro to markup the string literals.
+    #define _T(string_literal) string_literal
+#if !__TBB_NEW_ITT_NOTIFY
+    #define tstrlen strlen
+#endif /* !__TBB_NEW_ITT_NOTIFY */
+#endif /* !WIN */
+} // namespace tbb
+
+#if DO_ITT_NOTIFY
+namespace tbb {
+    //! Display names of internal synchronization types
+    extern const tchar 
+            *SyncType_GlobalLock,
+            *SyncType_Scheduler;
+    //! Display names of internal synchronization components/scenarios
+    extern const tchar 
+            *SyncObj_LibraryInitialization,
+            *SyncObj_SchedulerInitialization,
+            *SyncObj_SchedulersList,
+            *SyncObj_TaskStealingLoop,
+            *SyncObj_WorkerTaskPool,
+            *SyncObj_MasterTaskPool,
+            *SyncObj_GateLock,
+            *SyncObj_Gate,
+            *SyncObj_SchedulerTermination,
+            *SyncObj_ContextsList
+            ;
+
+    namespace internal {
+        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void* obj, const tchar* name); 
+
+    } // namespace internal
+
+} // namespace tbb
+
+#if __TBB_NEW_ITT_NOTIFY
+// const_cast<void*>() is necessary to cast off volatility
+#define ITT_NOTIFY(name,obj)            __itt_notify_##name(const_cast<void*>(static_cast<volatile void*>(obj)))
+#define ITT_THREAD_SET_NAME(name)       __itt_thread_set_name(name)
+#define ITT_SYNC_CREATE(obj, type, name) __itt_sync_create(obj, type, name, 2)
+#define ITT_SYNC_RENAME(obj, name)      __itt_sync_rename(obj, name)
+#endif /* __TBB_NEW_ITT_NOTIFY */
+
+#else /* !DO_ITT_NOTIFY */
+
+#define ITT_NOTIFY(name,obj)            ((void)0)
+#define ITT_THREAD_SET_NAME(name)       ((void)0)
+#define ITT_SYNC_CREATE(obj, type, name) ((void)0)
+#define ITT_SYNC_RENAME(obj, name)      ((void)0)
+
+#endif /* !DO_ITT_NOTIFY */
+
+
+#if !__TBB_NEW_ITT_NOTIFY
+
+#if DO_ITT_NOTIFY
+
+namespace tbb {
+
+//! Identifies performance and correctness tools, which TBB sends special notifications to.
+/** Enumerators must be ORable bit values.
+
+    Initializing global tool indicator with TO_BE_INITIALIZED is required 
+    to avoid bypassing early notification calls made through targeted macros until
+    initialization is performed from somewhere else.
+
+    Yet this entails another problem. The first targeted calls that happen to go
+    into the proxy (dummy) handlers become promiscuous. **/
+enum target_tool {
+    NONE = 0ul,
+    ITC = 1ul,
+    ITP = 2ul,
+    TO_BE_INITIALIZED = ~0ul
+};
+
+namespace internal {
+
+//! Types of the tool notification functions (and corresponding proxy handlers). 
+typedef void (*PointerToITT_Handler)(volatile void*);
+typedef int  (*PointerToITT_thr_name_set)(const tchar*, int);
+typedef void (*PointerToITT_thread_set_name)(const tchar*);
+
+
+typedef void (*PointerToITT_sync_create)(void* obj, const tchar* type, const tchar* name, int attribute);
+typedef void (*PointerToITT_sync_rename)(void* obj, const tchar* new_name);
+
+extern PointerToITT_Handler ITT_Handler_sync_prepare;
+extern PointerToITT_Handler ITT_Handler_sync_acquired;
+extern PointerToITT_Handler ITT_Handler_sync_releasing;
+extern PointerToITT_Handler ITT_Handler_sync_cancel;
+extern PointerToITT_thr_name_set ITT_Handler_thr_name_set;
+extern PointerToITT_thread_set_name ITT_Handler_thread_set_name;
+extern PointerToITT_sync_create ITT_Handler_sync_create;
+extern PointerToITT_sync_rename ITT_Handler_sync_rename;
+
+extern target_tool current_tool;
+
+} // namespace internal 
+
+} // namespace tbb
+
+//! Glues two tokens together.
+#define ITT_HANDLER(name) tbb::internal::ITT_Handler_##name
+#define CALL_ITT_HANDLER(name, arglist) ( ITT_HANDLER(name) ? (void)ITT_HANDLER(name)arglist : (void)0 )
+
+//! Call routine itt_notify_(name) if corresponding handler is available.
+/** For example, use ITT_NOTIFY(sync_releasing,x) to invoke __itt_notify_sync_releasing(x).
+    Ordinarily, preprocessor token gluing games should be avoided.
+    But here, it seemed to be the best way to handle the issue. */
+#define ITT_NOTIFY(name,obj) CALL_ITT_HANDLER(name,(obj))
+//! The same as ITT_NOTIFY but also checks if we are running under appropriate tool.
+/** Parameter tools is an ORed set of target_tool enumerators. **/
+#define ITT_NOTIFY_TOOL(tools,name,obj) ( ITT_HANDLER(name) && ((tools) & tbb::internal::current_tool) ? ITT_HANDLER(name)(obj) : (void)0 )
+
+#define ITT_THREAD_SET_NAME(name) ( \
+            ITT_HANDLER(thread_set_name) ? ITT_HANDLER(thread_set_name)(name)   \
+                                         : CALL_ITT_HANDLER(thr_name_set,(name, tstrlen(name))) )
+
+
+/** 2 is the value of __itt_attr_mutex attribute. **/
+#define ITT_SYNC_CREATE(obj, type, name) CALL_ITT_HANDLER(sync_create,(obj, type, name, 2))
+#define ITT_SYNC_RENAME(obj, name) CALL_ITT_HANDLER(sync_rename,(obj, name))
+
+
+
+#else /* !DO_ITT_NOTIFY */
+
+#define ITT_NOTIFY_TOOL(tools,name,obj) ((void)0)
+
+#endif /* !DO_ITT_NOTIFY */
+
+#if DO_ITT_QUIET
+#define ITT_QUIET(x) (__itt_thr_mode_set(__itt_thr_prop_quiet,(x)?__itt_thr_state_set:__itt_thr_state_clr))
+#else
+#define ITT_QUIET(x) ((void)0)
+#endif /* DO_ITT_QUIET */
+
+#endif /* !__TBB_NEW_ITT_NOTIFY */
+
+#endif /* _TBB_ITT_NOTIFY */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_notify_proxy.c b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/itt_notify_proxy.c
new file mode 100644 (file)
index 0000000..9d4e672
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/tbb_config.h"
+
+/* This declaration in particular shuts up "empty translation unit" warning */
+extern int __TBB_load_ittnotify();
+
+#if __TBB_NEW_ITT_NOTIFY
+#if DO_ITT_NOTIFY
+
+#if _WIN32||_WIN64
+    #ifndef UNICODE
+        #define UNICODE
+    #endif
+#endif /* WIN */
+
+extern void ITT_DoOneTimeInitialization();
+
+#define ITT_SIMPLE_INIT 1
+#define __itt_init_lib_name ITT_DoOneTimeInitialization
+
+#include "tools_api/ittnotify_static.c"
+
+int __TBB_load_ittnotify() {
+    return __itt_init_lib();
+}
+
+#endif /* DO_ITT_NOTIFY */
+#endif /* __TBB_NEW_ITT_NOTIFY */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/lin32-tbb-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/lin32-tbb-export.def
new file mode 100644 (file)
index 0000000..5fc2f53
--- /dev/null
@@ -0,0 +1,316 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/tbb_config.h"
+
+{
+global:
+
+/* cache_aligned_allocator.cpp */
+_ZN3tbb8internal12NFS_AllocateEjjPv;
+_ZN3tbb8internal15NFS_GetLineSizeEv;
+_ZN3tbb8internal8NFS_FreeEPv;
+_ZN3tbb8internal23allocate_via_handler_v3Ej;
+_ZN3tbb8internal25deallocate_via_handler_v3EPv;
+_ZN3tbb8internal17is_malloc_used_v3Ev;
+
+/* task.cpp v3 */
+_ZN3tbb4task13note_affinityEt;
+_ZN3tbb4task22internal_set_ref_countEi;
+_ZN3tbb4task28internal_decrement_ref_countEv;
+_ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE;
+_ZN3tbb4task4selfEv;
+_ZN3tbb4task7destroyERS0_;
+_ZNK3tbb4task26is_owned_by_current_threadEv;
+_ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE;
+_ZN3tbb8internal19allocate_root_proxy8allocateEj;
+_ZN3tbb8internal28affinity_partitioner_base_v36resizeEj;
+_ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE;
+_ZNK3tbb8internal20allocate_child_proxy8allocateEj;
+_ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE;
+_ZNK3tbb8internal27allocate_continuation_proxy8allocateEj;
+_ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE;
+_ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEj;
+_ZTIN3tbb4taskE;
+_ZTSN3tbb4taskE;
+_ZTVN3tbb4taskE;
+_ZN3tbb19task_scheduler_init19default_num_threadsEv;
+_ZN3tbb19task_scheduler_init10initializeEij;
+_ZN3tbb19task_scheduler_init10initializeEi;
+_ZN3tbb19task_scheduler_init9terminateEv;
+_ZN3tbb8internal26task_scheduler_observer_v37observeEb;
+_ZN3tbb10empty_task7executeEv;
+_ZN3tbb10empty_taskD0Ev;
+_ZN3tbb10empty_taskD1Ev;
+_ZTIN3tbb10empty_taskE;
+_ZTSN3tbb10empty_taskE;
+_ZTVN3tbb10empty_taskE;
+
+/* exception handling support */
+#if __TBB_EXCEPTIONS
+_ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEj;
+_ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE;
+_ZNK3tbb18task_group_context28is_group_execution_cancelledEv;
+_ZN3tbb18task_group_context22cancel_group_executionEv;
+_ZN3tbb18task_group_context26register_pending_exceptionEv;
+_ZN3tbb18task_group_context5resetEv;
+_ZN3tbb18task_group_context4initEv;
+_ZN3tbb18task_group_contextD1Ev;
+_ZN3tbb18task_group_contextD2Ev;
+_ZNK3tbb18captured_exception4nameEv;
+_ZNK3tbb18captured_exception4whatEv;
+_ZN3tbb18captured_exception10throw_selfEv;
+_ZN3tbb18captured_exception3setEPKcS2_;
+_ZN3tbb18captured_exception4moveEv;
+_ZN3tbb18captured_exception5clearEv;
+_ZN3tbb18captured_exception7destroyEv;
+_ZN3tbb18captured_exception8allocateEPKcS2_;
+_ZN3tbb18captured_exceptionD0Ev;
+_ZN3tbb18captured_exceptionD1Ev;
+_ZTIN3tbb18captured_exceptionE;
+_ZTSN3tbb18captured_exceptionE;
+_ZTVN3tbb18captured_exceptionE;
+_ZN3tbb13tbb_exceptionD2Ev;
+_ZTIN3tbb13tbb_exceptionE;
+_ZTSN3tbb13tbb_exceptionE;
+_ZTVN3tbb13tbb_exceptionE;
+_ZN3tbb14bad_last_allocD0Ev;
+_ZN3tbb14bad_last_allocD1Ev;
+_ZNK3tbb14bad_last_alloc4whatEv;
+_ZTIN3tbb14bad_last_allocE;
+_ZTSN3tbb14bad_last_allocE;
+_ZTVN3tbb14bad_last_allocE;
+#endif /* __TBB_EXCEPTIONS */
+
+/* tbb_misc.cpp */
+_ZN3tbb17assertion_failureEPKciS1_S1_;
+_ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E;
+_ZN3tbb8internal36get_initial_auto_partitioner_divisorEv;
+_ZN3tbb8internal13handle_perrorEiPKc;
+_ZN3tbb8internal15runtime_warningEPKcz;
+__TBB_machine_store8_slow_perf_warning;
+__TBB_machine_store8_slow;
+TBB_runtime_interface_version;
+_ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev;
+
+/* itt_notify.cpp */
+_ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv;
+_ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_;
+_ZN3tbb8internal20itt_set_sync_name_v3EPvPKc;
+_ZN3tbb8internal19itt_load_pointer_v3EPKv;
+
+/* pipeline.cpp */
+_ZTIN3tbb6filterE;
+_ZTSN3tbb6filterE;
+_ZTVN3tbb6filterE;
+_ZN3tbb6filterD2Ev;
+_ZN3tbb8pipeline10add_filterERNS_6filterE;
+_ZN3tbb8pipeline12inject_tokenERNS_4taskE;
+_ZN3tbb8pipeline13remove_filterERNS_6filterE;
+_ZN3tbb8pipeline3runEj;
+#if __TBB_EXCEPTIONS
+_ZN3tbb8pipeline3runEjRNS_18task_group_contextE;
+#endif
+_ZN3tbb8pipeline5clearEv;
+_ZN3tbb19thread_bound_filter12process_itemEv;
+_ZN3tbb19thread_bound_filter16try_process_itemEv;
+_ZTIN3tbb8pipelineE;
+_ZTSN3tbb8pipelineE;
+_ZTVN3tbb8pipelineE;
+_ZN3tbb8pipelineC1Ev;
+_ZN3tbb8pipelineC2Ev;
+_ZN3tbb8pipelineD0Ev;
+_ZN3tbb8pipelineD1Ev;
+_ZN3tbb8pipelineD2Ev;
+
+/* queuing_rw_mutex.cpp */
+_ZN3tbb16queuing_rw_mutex18internal_constructEv;
+_ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv;
+_ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv;
+_ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b;
+_ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv;
+_ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b;
+
+#if !TBB_NO_LEGACY
+/* spin_rw_mutex.cpp v2 */
+_ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_;
+_ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_;
+_ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_;
+_ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_;
+_ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_;
+_ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_;
+_ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_;
+_ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_;
+_ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_;
+#endif
+
+/* spin_rw_mutex v3 */
+_ZN3tbb16spin_rw_mutex_v318internal_constructEv;
+_ZN3tbb16spin_rw_mutex_v316internal_upgradeEv;
+_ZN3tbb16spin_rw_mutex_v318internal_downgradeEv;
+_ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv;
+_ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv;
+_ZN3tbb16spin_rw_mutex_v323internal_release_readerEv;
+_ZN3tbb16spin_rw_mutex_v323internal_release_writerEv;
+_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv;
+_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv;
+
+/* spin_mutex.cpp */
+_ZN3tbb10spin_mutex18internal_constructEv;
+_ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_;
+_ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv;
+_ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_;
+
+/* mutex.cpp */
+_ZN3tbb5mutex11scoped_lock16internal_acquireERS0_;
+_ZN3tbb5mutex11scoped_lock16internal_releaseEv;
+_ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_;
+_ZN3tbb5mutex16internal_destroyEv;
+_ZN3tbb5mutex18internal_constructEv;
+
+/* recursive_mutex.cpp */
+_ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_;
+_ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv;
+_ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_;
+_ZN3tbb15recursive_mutex16internal_destroyEv;
+_ZN3tbb15recursive_mutex18internal_constructEv;
+
+/* QueuingMutex.cpp */
+_ZN3tbb13queuing_mutex18internal_constructEv;
+_ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_;
+_ZN3tbb13queuing_mutex11scoped_lock7releaseEv;
+_ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_;
+
+#if !TBB_NO_LEGACY
+/* concurrent_hash_map */
+_ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv;
+
+/* concurrent_queue.cpp v2 */
+_ZN3tbb8internal21concurrent_queue_base12internal_popEPv;
+_ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv;
+_ZN3tbb8internal21concurrent_queue_base21internal_set_capacityEij;
+_ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv;
+_ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv;
+_ZN3tbb8internal21concurrent_queue_baseC2Ej;
+_ZN3tbb8internal21concurrent_queue_baseD2Ev;
+_ZTIN3tbb8internal21concurrent_queue_baseE;
+_ZTSN3tbb8internal21concurrent_queue_baseE;
+_ZTVN3tbb8internal21concurrent_queue_baseE;
+_ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_;
+_ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv;
+_ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE;
+_ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev;
+_ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv;
+#endif
+
+/* concurrent_queue v3 */
+/* constructors */
+_ZN3tbb8internal24concurrent_queue_base_v3C2Ej;
+_ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E;
+/* destructors */
+_ZN3tbb8internal24concurrent_queue_base_v3D2Ev;
+_ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev;
+/* typeinfo */
+_ZTIN3tbb8internal24concurrent_queue_base_v3E;
+_ZTSN3tbb8internal24concurrent_queue_base_v3E;
+/* vtable */
+_ZTVN3tbb8internal24concurrent_queue_base_v3E;
+/* methods */
+_ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv;
+_ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_;
+_ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv;
+_ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv;
+_ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv;
+_ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv;
+_ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityEij;
+_ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv;
+_ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv;
+_ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv;
+_ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv;
+_ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_;
+
+#if !TBB_NO_LEGACY
+/* concurrent_vector.cpp v2 */
+_ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_jPFvPvPKvjE;
+_ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvjEb;
+_ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_jPFvPvjEPFvS4_PKvjESA_;
+_ZN3tbb8internal22concurrent_vector_base16internal_grow_byEjjPFvPvjE;
+_ZN3tbb8internal22concurrent_vector_base16internal_reserveEjjj;
+_ZN3tbb8internal22concurrent_vector_base18internal_push_backEjRj;
+_ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEjjPFvPvjE;
+_ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv;
+#endif
+
+/* concurrent_vector v3 */
+_ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_jPFvPvPKvjE;
+_ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvjE;
+_ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_jPFvPvjEPFvS4_PKvjESA_;
+_ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEjjPFvPvPKvjES4_;
+_ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEjjj;
+_ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEjRj;
+_ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEjjPFvPvPKvjES4_;
+_ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv;
+_ZN3tbb8internal25concurrent_vector_base_v316internal_compactEjPvPFvS2_jEPFvS2_PKvjE;
+_ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_;
+_ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEj;
+_ZN3tbb8internal25concurrent_vector_base_v3D2Ev;
+_ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEjjjPKvPFvPvjEPFvS4_S3_jE;
+_ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEjjPFvPvPKvjES4_;
+
+/* tbb_thread */
+_ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_;
+_ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv;
+_ZN3tbb8internal13tbb_thread_v34joinEv;
+_ZN3tbb8internal13tbb_thread_v36detachEv;
+_ZN3tbb8internal15free_closure_v3EPv;
+_ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE;
+_ZN3tbb8internal15thread_yield_v3Ev;
+_ZN3tbb8internal16thread_get_id_v3Ev;
+_ZN3tbb8internal19allocate_closure_v3Ej;
+_ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_;
+
+local:
+
+/* TBB symbols */
+*3tbb*;
+*__TBB*;
+
+/* Intel Compiler (libirc) symbols */
+__intel_*;
+_intel_*;
+get_memcpy_largest_cachelinesize;
+get_memcpy_largest_cache_size;
+get_mem_ops_method;
+init_mem_ops_method;
+irc__get_msg;
+irc__print;
+override_mem_ops_method;
+set_memcpy_largest_cachelinesize;
+set_memcpy_largest_cache_size;
+
+};
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/lin64-tbb-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/lin64-tbb-export.def
new file mode 100644 (file)
index 0000000..40b245b
--- /dev/null
@@ -0,0 +1,311 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/tbb_config.h"
+
+{
+global:
+
+/* cache_aligned_allocator.cpp */
+_ZN3tbb8internal12NFS_AllocateEmmPv;
+_ZN3tbb8internal15NFS_GetLineSizeEv;
+_ZN3tbb8internal8NFS_FreeEPv;
+_ZN3tbb8internal23allocate_via_handler_v3Em;
+_ZN3tbb8internal25deallocate_via_handler_v3EPv;
+_ZN3tbb8internal17is_malloc_used_v3Ev;
+
+/* task.cpp v3 */
+_ZN3tbb4task13note_affinityEt;
+_ZN3tbb4task22internal_set_ref_countEi;
+_ZN3tbb4task28internal_decrement_ref_countEv;
+_ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE;
+_ZN3tbb4task4selfEv;
+_ZN3tbb4task7destroyERS0_;
+_ZNK3tbb4task26is_owned_by_current_threadEv;
+_ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE;
+_ZN3tbb8internal19allocate_root_proxy8allocateEm;
+_ZN3tbb8internal28affinity_partitioner_base_v36resizeEj;
+_ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE;
+_ZNK3tbb8internal20allocate_child_proxy8allocateEm;
+_ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE;
+_ZNK3tbb8internal27allocate_continuation_proxy8allocateEm;
+_ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE;
+_ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm;
+_ZTIN3tbb4taskE;
+_ZTSN3tbb4taskE;
+_ZTVN3tbb4taskE;
+_ZN3tbb19task_scheduler_init19default_num_threadsEv;
+_ZN3tbb19task_scheduler_init10initializeEim;
+_ZN3tbb19task_scheduler_init10initializeEi;
+_ZN3tbb19task_scheduler_init9terminateEv;
+_ZN3tbb8internal26task_scheduler_observer_v37observeEb;
+_ZN3tbb10empty_task7executeEv;
+_ZN3tbb10empty_taskD0Ev;
+_ZN3tbb10empty_taskD1Ev;
+_ZTIN3tbb10empty_taskE;
+_ZTSN3tbb10empty_taskE;
+_ZTVN3tbb10empty_taskE;
+
+/* exception handling support */
+#if __TBB_EXCEPTIONS
+_ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm;
+_ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE;
+_ZNK3tbb18task_group_context28is_group_execution_cancelledEv;
+_ZN3tbb18task_group_context22cancel_group_executionEv;
+_ZN3tbb18task_group_context26register_pending_exceptionEv;
+_ZN3tbb18task_group_context5resetEv;
+_ZN3tbb18task_group_context4initEv;
+_ZN3tbb18task_group_contextD1Ev;
+_ZN3tbb18task_group_contextD2Ev;
+_ZNK3tbb18captured_exception4nameEv;
+_ZNK3tbb18captured_exception4whatEv;
+_ZN3tbb18captured_exception10throw_selfEv;
+_ZN3tbb18captured_exception3setEPKcS2_;
+_ZN3tbb18captured_exception4moveEv;
+_ZN3tbb18captured_exception5clearEv;
+_ZN3tbb18captured_exception7destroyEv;
+_ZN3tbb18captured_exception8allocateEPKcS2_;
+_ZN3tbb18captured_exceptionD0Ev;
+_ZN3tbb18captured_exceptionD1Ev;
+_ZTIN3tbb18captured_exceptionE;
+_ZTSN3tbb18captured_exceptionE;
+_ZTVN3tbb18captured_exceptionE;
+_ZN3tbb13tbb_exceptionD2Ev;
+_ZTIN3tbb13tbb_exceptionE;
+_ZTSN3tbb13tbb_exceptionE;
+_ZTVN3tbb13tbb_exceptionE;
+_ZN3tbb14bad_last_allocD0Ev;
+_ZN3tbb14bad_last_allocD1Ev;
+_ZNK3tbb14bad_last_alloc4whatEv;
+_ZTIN3tbb14bad_last_allocE;
+_ZTSN3tbb14bad_last_allocE;
+_ZTVN3tbb14bad_last_allocE;
+#endif /* __TBB_EXCEPTIONS */
+
+/* tbb_misc.cpp */
+_ZN3tbb17assertion_failureEPKciS1_S1_;
+_ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E;
+_ZN3tbb8internal36get_initial_auto_partitioner_divisorEv;
+_ZN3tbb8internal13handle_perrorEiPKc;
+_ZN3tbb8internal15runtime_warningEPKcz;
+TBB_runtime_interface_version;
+_ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev;
+
+/* itt_notify.cpp */
+_ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv;
+_ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_;
+_ZN3tbb8internal20itt_set_sync_name_v3EPvPKc;
+_ZN3tbb8internal19itt_load_pointer_v3EPKv;
+
+/* pipeline.cpp */
+_ZTIN3tbb6filterE;
+_ZTSN3tbb6filterE;
+_ZTVN3tbb6filterE;
+_ZN3tbb6filterD2Ev;
+_ZN3tbb8pipeline10add_filterERNS_6filterE;
+_ZN3tbb8pipeline12inject_tokenERNS_4taskE;
+_ZN3tbb8pipeline13remove_filterERNS_6filterE;
+_ZN3tbb8pipeline3runEm;
+#if __TBB_EXCEPTIONS
+_ZN3tbb8pipeline3runEmRNS_18task_group_contextE;
+#endif
+_ZN3tbb8pipeline5clearEv;
+_ZN3tbb19thread_bound_filter12process_itemEv;
+_ZN3tbb19thread_bound_filter16try_process_itemEv;
+_ZTIN3tbb8pipelineE;
+_ZTSN3tbb8pipelineE;
+_ZTVN3tbb8pipelineE;
+_ZN3tbb8pipelineC1Ev;
+_ZN3tbb8pipelineC2Ev;
+_ZN3tbb8pipelineD0Ev;
+_ZN3tbb8pipelineD1Ev;
+_ZN3tbb8pipelineD2Ev;
+
+/* queuing_rw_mutex.cpp */
+_ZN3tbb16queuing_rw_mutex18internal_constructEv;
+_ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv;
+_ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv;
+_ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b;
+_ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv;
+_ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b;
+
+#if !TBB_NO_LEGACY
+/* spin_rw_mutex.cpp v2 */
+_ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_;
+_ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_;
+_ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_;
+_ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_;
+_ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_;
+_ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_;
+_ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_;
+_ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_;
+_ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_;
+#endif
+
+/* spin_rw_mutex v3 */
+_ZN3tbb16spin_rw_mutex_v318internal_constructEv;
+_ZN3tbb16spin_rw_mutex_v316internal_upgradeEv;
+_ZN3tbb16spin_rw_mutex_v318internal_downgradeEv;
+_ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv;
+_ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv;
+_ZN3tbb16spin_rw_mutex_v323internal_release_readerEv;
+_ZN3tbb16spin_rw_mutex_v323internal_release_writerEv;
+_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv;
+_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv;
+
+/* spin_mutex.cpp */
+_ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_;
+_ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv;
+_ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_;
+_ZN3tbb10spin_mutex18internal_constructEv;
+
+/* mutex.cpp */
+_ZN3tbb5mutex11scoped_lock16internal_acquireERS0_;
+_ZN3tbb5mutex11scoped_lock16internal_releaseEv;
+_ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_;
+_ZN3tbb5mutex16internal_destroyEv;
+_ZN3tbb5mutex18internal_constructEv;
+
+/* recursive_mutex.cpp */
+_ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_;
+_ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv;
+_ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_;
+_ZN3tbb15recursive_mutex16internal_destroyEv;
+_ZN3tbb15recursive_mutex18internal_constructEv;
+
+/* QueuingMutex.cpp */
+_ZN3tbb13queuing_mutex18internal_constructEv;
+_ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_;
+_ZN3tbb13queuing_mutex11scoped_lock7releaseEv;
+_ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_;
+
+#if !TBB_NO_LEGACY
+/* concurrent_hash_map */
+_ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv;
+
+/* concurrent_queue.cpp v2 */
+_ZN3tbb8internal21concurrent_queue_base12internal_popEPv;
+_ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv;
+_ZN3tbb8internal21concurrent_queue_base21internal_set_capacityElm;
+_ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv;
+_ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv;
+_ZN3tbb8internal21concurrent_queue_baseC2Em;
+_ZN3tbb8internal21concurrent_queue_baseD2Ev;
+_ZTIN3tbb8internal21concurrent_queue_baseE;
+_ZTSN3tbb8internal21concurrent_queue_baseE;
+_ZTVN3tbb8internal21concurrent_queue_baseE;
+_ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_;
+_ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv;
+_ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE;
+_ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev;
+_ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv;
+#endif
+
+/* concurrent_queue v3 */
+/* constructors */
+_ZN3tbb8internal24concurrent_queue_base_v3C2Em;
+_ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E;
+/* destructors */
+_ZN3tbb8internal24concurrent_queue_base_v3D2Ev;
+_ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev;
+/* typeinfo */
+_ZTIN3tbb8internal24concurrent_queue_base_v3E;
+_ZTSN3tbb8internal24concurrent_queue_base_v3E;
+/* vtable */
+_ZTVN3tbb8internal24concurrent_queue_base_v3E;
+/* methods */
+_ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_;
+_ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv;
+_ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv;
+_ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv;
+_ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv;
+_ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv;
+_ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv;
+_ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm;
+_ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv;
+_ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv;
+_ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv;
+_ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_;
+
+#if !TBB_NO_LEGACY
+/* concurrent_vector.cpp v2 */
+_ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE;
+_ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb;
+_ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_;
+_ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE;
+_ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm;
+_ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm;
+_ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE;
+_ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv;
+#endif
+
+/* concurrent_vector v3 */
+_ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE;
+_ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE;
+_ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_;
+_ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_;
+_ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm;
+_ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm;
+_ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_;
+_ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv;
+_ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE;
+_ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_;
+_ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm;
+_ZN3tbb8internal25concurrent_vector_base_v3D2Ev;
+_ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE;
+_ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_;
+
+/* tbb_thread */
+_ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv;
+_ZN3tbb8internal13tbb_thread_v36detachEv;
+_ZN3tbb8internal16thread_get_id_v3Ev;
+_ZN3tbb8internal15free_closure_v3EPv;
+_ZN3tbb8internal13tbb_thread_v34joinEv;
+_ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_;
+_ZN3tbb8internal19allocate_closure_v3Em;
+_ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_;
+_ZN3tbb8internal15thread_yield_v3Ev;
+_ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE;
+
+local:
+
+/* TBB symbols */
+*3tbb*;
+*__TBB*;
+
+/* Intel Compiler (libirc) symbols */
+__intel_*;
+_intel_*;
+get_msg_buf;
+get_text_buf;
+message_catalog;
+print_buf;
+irc__get_msg;
+irc__print;
+
+};
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/lin64ipf-tbb-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/lin64ipf-tbb-export.def
new file mode 100644 (file)
index 0000000..22514d8
--- /dev/null
@@ -0,0 +1,355 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/tbb_config.h"
+
+{
+global:
+
+/* cache_aligned_allocator.cpp */
+_ZN3tbb8internal12NFS_AllocateEmmPv;
+_ZN3tbb8internal15NFS_GetLineSizeEv;
+_ZN3tbb8internal8NFS_FreeEPv;
+_ZN3tbb8internal23allocate_via_handler_v3Em;
+_ZN3tbb8internal25deallocate_via_handler_v3EPv;
+_ZN3tbb8internal17is_malloc_used_v3Ev;
+
+/* task.cpp v3 */
+_ZN3tbb4task13note_affinityEt;
+_ZN3tbb4task22internal_set_ref_countEi;
+_ZN3tbb4task28internal_decrement_ref_countEv;
+_ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE;
+_ZN3tbb4task4selfEv;
+_ZN3tbb4task7destroyERS0_;
+_ZNK3tbb4task26is_owned_by_current_threadEv;
+_ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE;
+_ZN3tbb8internal19allocate_root_proxy8allocateEm;
+_ZN3tbb8internal28affinity_partitioner_base_v36resizeEj;
+_ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE;
+_ZNK3tbb8internal20allocate_child_proxy8allocateEm;
+_ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE;
+_ZNK3tbb8internal27allocate_continuation_proxy8allocateEm;
+_ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE;
+_ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm;
+_ZTIN3tbb4taskE;
+_ZTSN3tbb4taskE;
+_ZTVN3tbb4taskE;
+_ZN3tbb19task_scheduler_init19default_num_threadsEv;
+_ZN3tbb19task_scheduler_init10initializeEim;
+_ZN3tbb19task_scheduler_init10initializeEi;
+_ZN3tbb19task_scheduler_init9terminateEv;
+_ZN3tbb8internal26task_scheduler_observer_v37observeEb;
+_ZN3tbb10empty_task7executeEv;
+_ZN3tbb10empty_taskD0Ev;
+_ZN3tbb10empty_taskD1Ev;
+_ZTIN3tbb10empty_taskE;
+_ZTSN3tbb10empty_taskE;
+_ZTVN3tbb10empty_taskE;
+
+/* exception handling support */
+#if __TBB_EXCEPTIONS
+_ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm;
+_ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE;
+_ZNK3tbb18task_group_context28is_group_execution_cancelledEv;
+_ZN3tbb18task_group_context22cancel_group_executionEv;
+_ZN3tbb18task_group_context26register_pending_exceptionEv;
+_ZN3tbb18task_group_context5resetEv;
+_ZN3tbb18task_group_context4initEv;
+_ZN3tbb18task_group_contextD1Ev;
+_ZN3tbb18task_group_contextD2Ev;
+_ZNK3tbb18captured_exception4nameEv;
+_ZNK3tbb18captured_exception4whatEv;
+_ZN3tbb18captured_exception10throw_selfEv;
+_ZN3tbb18captured_exception3setEPKcS2_;
+_ZN3tbb18captured_exception4moveEv;
+_ZN3tbb18captured_exception5clearEv;
+_ZN3tbb18captured_exception7destroyEv;
+_ZN3tbb18captured_exception8allocateEPKcS2_;
+_ZN3tbb18captured_exceptionD0Ev;
+_ZN3tbb18captured_exceptionD1Ev;
+_ZTIN3tbb18captured_exceptionE;
+_ZTSN3tbb18captured_exceptionE;
+_ZTVN3tbb18captured_exceptionE;
+_ZN3tbb13tbb_exceptionD2Ev;
+_ZTIN3tbb13tbb_exceptionE;
+_ZTSN3tbb13tbb_exceptionE;
+_ZTVN3tbb13tbb_exceptionE;
+_ZN3tbb14bad_last_allocD0Ev;
+_ZN3tbb14bad_last_allocD1Ev;
+_ZNK3tbb14bad_last_alloc4whatEv;
+_ZTIN3tbb14bad_last_allocE;
+_ZTSN3tbb14bad_last_allocE;
+_ZTVN3tbb14bad_last_allocE;
+#endif /* __TBB_EXCEPTIONS */
+
+/* tbb_misc.cpp */
+_ZN3tbb17assertion_failureEPKciS1_S1_;
+_ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E;
+_ZN3tbb8internal36get_initial_auto_partitioner_divisorEv;
+_ZN3tbb8internal13handle_perrorEiPKc;
+_ZN3tbb8internal15runtime_warningEPKcz;
+TBB_runtime_interface_version;
+_ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev;
+
+/* itt_notify.cpp */
+_ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv;
+_ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_;
+_ZN3tbb8internal20itt_set_sync_name_v3EPvPKc;
+_ZN3tbb8internal19itt_load_pointer_v3EPKv;
+
+/* pipeline.cpp */
+_ZTIN3tbb6filterE;
+_ZTSN3tbb6filterE;
+_ZTVN3tbb6filterE;
+_ZN3tbb6filterD2Ev;
+_ZN3tbb8pipeline10add_filterERNS_6filterE;
+_ZN3tbb8pipeline12inject_tokenERNS_4taskE;
+_ZN3tbb8pipeline13remove_filterERNS_6filterE;
+_ZN3tbb8pipeline3runEm;
+#if __TBB_EXCEPTIONS
+_ZN3tbb8pipeline3runEmRNS_18task_group_contextE;
+#endif
+_ZN3tbb8pipeline5clearEv;
+_ZN3tbb19thread_bound_filter12process_itemEv;
+_ZN3tbb19thread_bound_filter16try_process_itemEv;
+_ZTIN3tbb8pipelineE;
+_ZTSN3tbb8pipelineE;
+_ZTVN3tbb8pipelineE;
+_ZN3tbb8pipelineC1Ev;
+_ZN3tbb8pipelineC2Ev;
+_ZN3tbb8pipelineD0Ev;
+_ZN3tbb8pipelineD1Ev;
+_ZN3tbb8pipelineD2Ev;
+
+/* queuing_rw_mutex.cpp */
+_ZN3tbb16queuing_rw_mutex18internal_constructEv;
+_ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv;
+_ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv;
+_ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b;
+_ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv;
+_ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b;
+
+#if !TBB_NO_LEGACY
+/* spin_rw_mutex.cpp v2 */
+_ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_;
+_ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_;
+_ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_;
+_ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_;
+_ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_;
+_ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_;
+_ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_;
+_ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_;
+_ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_;
+#endif
+
+/* spin_rw_mutex v3 */
+_ZN3tbb16spin_rw_mutex_v318internal_constructEv;
+_ZN3tbb16spin_rw_mutex_v316internal_upgradeEv;
+_ZN3tbb16spin_rw_mutex_v318internal_downgradeEv;
+_ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv;
+_ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv;
+_ZN3tbb16spin_rw_mutex_v323internal_release_readerEv;
+_ZN3tbb16spin_rw_mutex_v323internal_release_writerEv;
+_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv;
+_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv;
+
+/* spin_mutex.cpp */
+_ZN3tbb10spin_mutex18internal_constructEv;
+_ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_;
+_ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv;
+_ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_;
+
+/* mutex.cpp */
+_ZN3tbb5mutex11scoped_lock16internal_acquireERS0_;
+_ZN3tbb5mutex11scoped_lock16internal_releaseEv;
+_ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_;
+_ZN3tbb5mutex16internal_destroyEv;
+_ZN3tbb5mutex18internal_constructEv;
+
+/* recursive_mutex.cpp */
+_ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_;
+_ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv;
+_ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_;
+_ZN3tbb15recursive_mutex16internal_destroyEv;
+_ZN3tbb15recursive_mutex18internal_constructEv;
+
+/* QueuingMutex.cpp */
+_ZN3tbb13queuing_mutex18internal_constructEv;
+_ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_;
+_ZN3tbb13queuing_mutex11scoped_lock7releaseEv;
+_ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_;
+
+#if !TBB_NO_LEGACY
+/* concurrent_hash_map */
+_ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv;
+
+/* concurrent_queue.cpp v2 */
+_ZN3tbb8internal21concurrent_queue_base12internal_popEPv;
+_ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv;
+_ZN3tbb8internal21concurrent_queue_base21internal_set_capacityElm;
+_ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv;
+_ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv;
+_ZN3tbb8internal21concurrent_queue_baseC2Em;
+_ZN3tbb8internal21concurrent_queue_baseD2Ev;
+_ZTIN3tbb8internal21concurrent_queue_baseE;
+_ZTSN3tbb8internal21concurrent_queue_baseE;
+_ZTVN3tbb8internal21concurrent_queue_baseE;
+_ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_;
+_ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv;
+_ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE;
+_ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev;
+_ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv;
+#endif
+
+/* concurrent_queue v3 */
+/* constructors */
+_ZN3tbb8internal24concurrent_queue_base_v3C2Em;
+_ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E;
+/* destructors */
+_ZN3tbb8internal24concurrent_queue_base_v3D2Ev;
+_ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev;
+/* typeinfo */
+_ZTIN3tbb8internal24concurrent_queue_base_v3E;
+_ZTSN3tbb8internal24concurrent_queue_base_v3E;
+/* vtable */
+_ZTVN3tbb8internal24concurrent_queue_base_v3E;
+/* methods */
+_ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_;
+_ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv;
+_ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv;
+_ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv;
+_ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv;
+_ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv;
+_ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv;
+_ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm;
+_ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv;
+_ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv;
+_ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv;
+_ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_;
+
+#if !TBB_NO_LEGACY
+/* concurrent_vector.cpp v2 */
+_ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE;
+_ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb;
+_ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_;
+_ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE;
+_ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm;
+_ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm;
+_ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE;
+_ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv;
+#endif
+
+/* concurrent_vector v3 */
+_ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE;
+_ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE;
+_ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_;
+_ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_;
+_ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm;
+_ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm;
+_ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_;
+_ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv;
+_ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE;
+_ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_;
+_ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm;
+_ZN3tbb8internal25concurrent_vector_base_v3D2Ev;
+_ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE;
+_ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_;
+
+/* tbb_thread */
+_ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv;
+_ZN3tbb8internal13tbb_thread_v36detachEv;
+_ZN3tbb8internal16thread_get_id_v3Ev;
+_ZN3tbb8internal15free_closure_v3EPv;
+_ZN3tbb8internal13tbb_thread_v34joinEv;
+_ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_;
+_ZN3tbb8internal19allocate_closure_v3Em;
+_ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_;
+_ZN3tbb8internal15thread_yield_v3Ev;
+_ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE;
+
+/* asm functions */
+__TBB_machine_fetchadd1__TBB_full_fence;
+__TBB_machine_fetchadd2__TBB_full_fence;
+__TBB_machine_fetchadd4__TBB_full_fence;
+__TBB_machine_fetchadd8__TBB_full_fence;
+__TBB_machine_fetchstore1__TBB_full_fence;
+__TBB_machine_fetchstore2__TBB_full_fence;
+__TBB_machine_fetchstore4__TBB_full_fence;
+__TBB_machine_fetchstore8__TBB_full_fence;
+__TBB_machine_fetchadd1acquire;
+__TBB_machine_fetchadd1release;
+__TBB_machine_fetchadd2acquire;
+__TBB_machine_fetchadd2release;
+__TBB_machine_fetchadd4acquire;
+__TBB_machine_fetchadd4release;
+__TBB_machine_fetchadd8acquire;
+__TBB_machine_fetchadd8release;
+__TBB_machine_fetchstore1acquire;
+__TBB_machine_fetchstore1release;
+__TBB_machine_fetchstore2acquire;
+__TBB_machine_fetchstore2release;
+__TBB_machine_fetchstore4acquire;
+__TBB_machine_fetchstore4release;
+__TBB_machine_fetchstore8acquire;
+__TBB_machine_fetchstore8release;
+__TBB_machine_cmpswp1acquire;
+__TBB_machine_cmpswp1release;
+__TBB_machine_cmpswp1__TBB_full_fence;
+__TBB_machine_cmpswp2acquire;
+__TBB_machine_cmpswp2release;
+__TBB_machine_cmpswp2__TBB_full_fence;
+__TBB_machine_cmpswp4acquire;
+__TBB_machine_cmpswp4release;
+__TBB_machine_cmpswp4__TBB_full_fence;
+__TBB_machine_cmpswp8acquire;
+__TBB_machine_cmpswp8release;
+__TBB_machine_cmpswp8__TBB_full_fence;
+__TBB_machine_lg;
+__TBB_machine_lockbyte;
+__TBB_machine_pause;
+__TBB_machine_trylockbyte;
+
+local:
+
+/* TBB symbols */
+*3tbb*;
+*__TBB*;
+
+/* Intel Compiler (libirc) symbols */
+__intel_*;
+_intel_*;
+?0_memcopyA;
+?0_memcopyDu;
+?0_memcpyD;
+?1__memcpy;
+?1__memmove;
+?1__serial_memmove;
+memcpy;
+memset;
+
+};
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/mac32-tbb-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/mac32-tbb-export.def
new file mode 100644 (file)
index 0000000..9366805
--- /dev/null
@@ -0,0 +1,294 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# cache_aligned_allocator.cpp
+__ZN3tbb8internal12NFS_AllocateEmmPv
+__ZN3tbb8internal15NFS_GetLineSizeEv
+__ZN3tbb8internal8NFS_FreeEPv
+__ZN3tbb8internal23allocate_via_handler_v3Em
+__ZN3tbb8internal25deallocate_via_handler_v3EPv
+__ZN3tbb8internal17is_malloc_used_v3Ev
+
+# task.cpp v3
+__ZN3tbb4task13note_affinityEt
+__ZN3tbb4task22internal_set_ref_countEi
+__ZN3tbb4task28internal_decrement_ref_countEv
+__ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE
+__ZN3tbb4task4selfEv
+__ZN3tbb4task7destroyERS0_
+__ZNK3tbb4task26is_owned_by_current_threadEv
+__ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE
+__ZN3tbb8internal19allocate_root_proxy8allocateEm
+__ZN3tbb8internal28affinity_partitioner_base_v36resizeEj
+__ZN3tbb8internal36get_initial_auto_partitioner_divisorEv
+__ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE
+__ZNK3tbb8internal20allocate_child_proxy8allocateEm
+__ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE
+__ZNK3tbb8internal27allocate_continuation_proxy8allocateEm
+__ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE
+__ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm
+__ZTIN3tbb4taskE
+__ZTSN3tbb4taskE
+__ZTVN3tbb4taskE
+__ZN3tbb19task_scheduler_init19default_num_threadsEv
+__ZN3tbb19task_scheduler_init10initializeEim
+__ZN3tbb19task_scheduler_init10initializeEi
+__ZN3tbb19task_scheduler_init9terminateEv
+__ZN3tbb8internal26task_scheduler_observer_v37observeEb
+__ZN3tbb10empty_task7executeEv
+__ZN3tbb10empty_taskD0Ev
+__ZN3tbb10empty_taskD1Ev
+__ZTIN3tbb10empty_taskE
+__ZTSN3tbb10empty_taskE
+__ZTVN3tbb10empty_taskE
+
+# exception handling support
+__ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm
+__ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE
+__ZNK3tbb18task_group_context28is_group_execution_cancelledEv
+__ZN3tbb18task_group_context22cancel_group_executionEv
+__ZN3tbb18task_group_context26register_pending_exceptionEv
+__ZN3tbb18task_group_context5resetEv
+__ZN3tbb18task_group_context4initEv
+__ZN3tbb18task_group_contextD1Ev
+__ZN3tbb18task_group_contextD2Ev
+__ZNK3tbb18captured_exception4nameEv
+__ZNK3tbb18captured_exception4whatEv
+__ZN3tbb18captured_exception10throw_selfEv
+__ZN3tbb18captured_exception3setEPKcS2_
+__ZN3tbb18captured_exception4moveEv
+__ZN3tbb18captured_exception5clearEv
+__ZN3tbb18captured_exception7destroyEv
+__ZN3tbb18captured_exception8allocateEPKcS2_
+__ZN3tbb18captured_exceptionD0Ev
+__ZN3tbb18captured_exceptionD1Ev
+__ZTIN3tbb18captured_exceptionE
+__ZTSN3tbb18captured_exceptionE
+__ZTVN3tbb18captured_exceptionE
+__ZTIN3tbb13tbb_exceptionE
+__ZTSN3tbb13tbb_exceptionE
+__ZTVN3tbb13tbb_exceptionE
+__ZN3tbb14bad_last_allocD0Ev
+__ZN3tbb14bad_last_allocD1Ev
+__ZNK3tbb14bad_last_alloc4whatEv
+__ZTIN3tbb14bad_last_allocE
+__ZTSN3tbb14bad_last_allocE
+__ZTVN3tbb14bad_last_allocE
+
+# Symbols for std exception classes thrown from TBB
+__ZNSt11range_errorD1Ev
+__ZNSt12length_errorD1Ev
+__ZNSt12out_of_rangeD1Ev
+__ZTISt11range_error
+__ZTISt12length_error
+__ZTISt12out_of_range
+__ZTSSt11range_error
+__ZTSSt12length_error
+__ZTSSt12out_of_range
+
+# tbb_misc.cpp
+__ZN3tbb17assertion_failureEPKciS1_S1_
+__ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E
+__ZN3tbb8internal13handle_perrorEiPKc
+__ZN3tbb8internal15runtime_warningEPKcz
+___TBB_machine_store8_slow_perf_warning
+___TBB_machine_store8_slow
+_TBB_runtime_interface_version
+__ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev
+
+# itt_notify.cpp
+__ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv
+__ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_
+__ZN3tbb8internal19itt_load_pointer_v3EPKv
+__ZN3tbb8internal20itt_set_sync_name_v3EPvPKc
+
+# pipeline.cpp
+__ZTIN3tbb6filterE
+__ZTSN3tbb6filterE
+__ZTVN3tbb6filterE
+__ZN3tbb6filterD2Ev
+__ZN3tbb8pipeline10add_filterERNS_6filterE
+__ZN3tbb8pipeline12inject_tokenERNS_4taskE
+__ZN3tbb8pipeline13remove_filterERNS_6filterE
+__ZN3tbb8pipeline3runEm
+__ZN3tbb8pipeline3runEmRNS_18task_group_contextE
+__ZN3tbb8pipeline5clearEv
+__ZN3tbb19thread_bound_filter12process_itemEv
+__ZN3tbb19thread_bound_filter16try_process_itemEv
+__ZN3tbb8pipelineC1Ev
+__ZN3tbb8pipelineC2Ev
+__ZN3tbb8pipelineD0Ev
+__ZN3tbb8pipelineD1Ev
+__ZN3tbb8pipelineD2Ev
+__ZTIN3tbb8pipelineE
+__ZTSN3tbb8pipelineE
+__ZTVN3tbb8pipelineE
+
+# queuing_rw_mutex.cpp
+__ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv
+__ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv
+__ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b
+__ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv
+__ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b
+__ZN3tbb16queuing_rw_mutex18internal_constructEv
+
+#if !TBB_NO_LEGACY
+# spin_rw_mutex.cpp v2
+__ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_
+__ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_
+__ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_
+__ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_
+__ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_
+__ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_
+__ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_
+__ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_
+__ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_
+#endif
+
+# spin_rw_mutex v3
+__ZN3tbb16spin_rw_mutex_v316internal_upgradeEv
+__ZN3tbb16spin_rw_mutex_v318internal_downgradeEv
+__ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv
+__ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv
+__ZN3tbb16spin_rw_mutex_v323internal_release_readerEv
+__ZN3tbb16spin_rw_mutex_v323internal_release_writerEv
+__ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv
+__ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv
+__ZN3tbb16spin_rw_mutex_v318internal_constructEv
+
+# spin_mutex.cpp
+__ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_
+__ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv
+__ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_
+__ZN3tbb10spin_mutex18internal_constructEv
+
+# mutex.cpp
+__ZN3tbb5mutex11scoped_lock16internal_acquireERS0_
+__ZN3tbb5mutex11scoped_lock16internal_releaseEv
+__ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_
+__ZN3tbb5mutex16internal_destroyEv
+__ZN3tbb5mutex18internal_constructEv
+
+# recursive_mutex.cpp
+__ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_
+__ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv
+__ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_
+__ZN3tbb15recursive_mutex16internal_destroyEv
+__ZN3tbb15recursive_mutex18internal_constructEv
+
+# queuing_mutex.cpp
+__ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_
+__ZN3tbb13queuing_mutex11scoped_lock7releaseEv
+__ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_
+__ZN3tbb13queuing_mutex18internal_constructEv
+
+#if !TBB_NO_LEGACY
+# concurrent_hash_map
+__ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv
+
+# concurrent_queue.cpp v2
+__ZN3tbb8internal21concurrent_queue_base12internal_popEPv
+__ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv
+__ZN3tbb8internal21concurrent_queue_base21internal_set_capacityEim
+__ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv
+__ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv
+__ZN3tbb8internal21concurrent_queue_baseC2Em
+__ZN3tbb8internal21concurrent_queue_baseD2Ev
+__ZTIN3tbb8internal21concurrent_queue_baseE
+__ZTSN3tbb8internal21concurrent_queue_baseE
+__ZTVN3tbb8internal21concurrent_queue_baseE
+__ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_
+__ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv
+__ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE
+__ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev
+__ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv
+#endif
+
+# concurrent_queue v3
+# constructors
+__ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E
+__ZN3tbb8internal24concurrent_queue_base_v3C2Em
+# destructors
+__ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev
+__ZN3tbb8internal24concurrent_queue_base_v3D2Ev
+# typeinfo
+__ZTIN3tbb8internal24concurrent_queue_base_v3E
+__ZTSN3tbb8internal24concurrent_queue_base_v3E
+#vtable
+__ZTVN3tbb8internal24concurrent_queue_base_v3E
+# methods
+__ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv
+__ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_
+__ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv
+__ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv
+__ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv
+__ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv
+__ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityEim
+__ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv
+__ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv
+__ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv
+__ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv
+__ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_
+
+#if !TBB_NO_LEGACY
+# concurrent_vector.cpp v2
+__ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE
+__ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb
+__ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_
+__ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE
+__ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm
+__ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm
+__ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE
+__ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv
+#endif
+
+# concurrent_vector v3
+__ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE
+__ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE
+__ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_
+__ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_
+__ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm
+__ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm
+__ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_
+__ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv
+__ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE
+__ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_
+__ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm
+__ZN3tbb8internal25concurrent_vector_base_v3D2Ev
+__ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE
+__ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_
+
+# tbb_thread
+__ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_
+__ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv
+__ZN3tbb8internal13tbb_thread_v34joinEv
+__ZN3tbb8internal13tbb_thread_v36detachEv
+__ZN3tbb8internal15free_closure_v3EPv
+__ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE
+__ZN3tbb8internal15thread_yield_v3Ev
+__ZN3tbb8internal16thread_get_id_v3Ev
+__ZN3tbb8internal19allocate_closure_v3Em
+__ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/mac64-tbb-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/mac64-tbb-export.def
new file mode 100644 (file)
index 0000000..c91c8ce
--- /dev/null
@@ -0,0 +1,292 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# cache_aligned_allocator.cpp
+__ZN3tbb8internal12NFS_AllocateEmmPv
+__ZN3tbb8internal15NFS_GetLineSizeEv
+__ZN3tbb8internal8NFS_FreeEPv
+__ZN3tbb8internal23allocate_via_handler_v3Em
+__ZN3tbb8internal25deallocate_via_handler_v3EPv
+__ZN3tbb8internal17is_malloc_used_v3Ev
+
+# task.cpp v3
+__ZN3tbb4task13note_affinityEt
+__ZN3tbb4task22internal_set_ref_countEi
+__ZN3tbb4task28internal_decrement_ref_countEv
+__ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE
+__ZN3tbb4task4selfEv
+__ZN3tbb4task7destroyERS0_
+__ZNK3tbb4task26is_owned_by_current_threadEv
+__ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE
+__ZN3tbb8internal19allocate_root_proxy8allocateEm
+__ZN3tbb8internal28affinity_partitioner_base_v36resizeEj
+__ZN3tbb8internal36get_initial_auto_partitioner_divisorEv
+__ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE
+__ZNK3tbb8internal20allocate_child_proxy8allocateEm
+__ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE
+__ZNK3tbb8internal27allocate_continuation_proxy8allocateEm
+__ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE
+__ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm
+__ZTIN3tbb4taskE
+__ZTSN3tbb4taskE
+__ZTVN3tbb4taskE
+__ZN3tbb19task_scheduler_init19default_num_threadsEv
+__ZN3tbb19task_scheduler_init10initializeEim
+__ZN3tbb19task_scheduler_init10initializeEi
+__ZN3tbb19task_scheduler_init9terminateEv
+__ZN3tbb8internal26task_scheduler_observer_v37observeEb
+__ZN3tbb10empty_task7executeEv
+__ZN3tbb10empty_taskD0Ev
+__ZN3tbb10empty_taskD1Ev
+__ZTIN3tbb10empty_taskE
+__ZTSN3tbb10empty_taskE
+__ZTVN3tbb10empty_taskE
+
+# exception handling support
+__ZNK3tbb8internal32allocate_root_with_context_proxy8allocateEm
+__ZNK3tbb8internal32allocate_root_with_context_proxy4freeERNS_4taskE
+__ZNK3tbb18task_group_context28is_group_execution_cancelledEv
+__ZN3tbb18task_group_context22cancel_group_executionEv
+__ZN3tbb18task_group_context26register_pending_exceptionEv
+__ZN3tbb18task_group_context5resetEv
+__ZN3tbb18task_group_context4initEv
+__ZN3tbb18task_group_contextD1Ev
+__ZN3tbb18task_group_contextD2Ev
+__ZNK3tbb18captured_exception4nameEv
+__ZNK3tbb18captured_exception4whatEv
+__ZN3tbb18captured_exception10throw_selfEv
+__ZN3tbb18captured_exception3setEPKcS2_
+__ZN3tbb18captured_exception4moveEv
+__ZN3tbb18captured_exception5clearEv
+__ZN3tbb18captured_exception7destroyEv
+__ZN3tbb18captured_exception8allocateEPKcS2_
+__ZN3tbb18captured_exceptionD0Ev
+__ZN3tbb18captured_exceptionD1Ev
+__ZTIN3tbb18captured_exceptionE
+__ZTSN3tbb18captured_exceptionE
+__ZTVN3tbb18captured_exceptionE
+__ZTIN3tbb13tbb_exceptionE
+__ZTSN3tbb13tbb_exceptionE
+__ZTVN3tbb13tbb_exceptionE
+__ZN3tbb14bad_last_allocD0Ev
+__ZN3tbb14bad_last_allocD1Ev
+__ZNK3tbb14bad_last_alloc4whatEv
+__ZTIN3tbb14bad_last_allocE
+__ZTSN3tbb14bad_last_allocE
+__ZTVN3tbb14bad_last_allocE
+
+# Symbols for std exception classes thrown from TBB
+__ZNSt11range_errorD1Ev
+__ZNSt12length_errorD1Ev
+__ZNSt12out_of_rangeD1Ev
+__ZTISt11range_error
+__ZTISt12length_error
+__ZTISt12out_of_range
+__ZTSSt11range_error
+__ZTSSt12length_error
+__ZTSSt12out_of_range
+
+# tbb_misc.cpp
+__ZN3tbb17assertion_failureEPKciS1_S1_
+__ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E
+__ZN3tbb8internal13handle_perrorEiPKc
+__ZN3tbb8internal15runtime_warningEPKcz
+__ZN3tbb8internal33throw_bad_last_alloc_exception_v4Ev
+_TBB_runtime_interface_version
+
+# itt_notify.cpp
+__ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv
+__ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_
+__ZN3tbb8internal19itt_load_pointer_v3EPKv
+__ZN3tbb8internal20itt_set_sync_name_v3EPvPKc
+
+# pipeline.cpp
+__ZTIN3tbb6filterE
+__ZTSN3tbb6filterE
+__ZTVN3tbb6filterE
+__ZN3tbb6filterD2Ev
+__ZN3tbb8pipeline10add_filterERNS_6filterE
+__ZN3tbb8pipeline12inject_tokenERNS_4taskE
+__ZN3tbb8pipeline13remove_filterERNS_6filterE
+__ZN3tbb8pipeline3runEm
+__ZN3tbb8pipeline3runEmRNS_18task_group_contextE
+__ZN3tbb8pipeline5clearEv
+__ZN3tbb19thread_bound_filter12process_itemEv
+__ZN3tbb19thread_bound_filter16try_process_itemEv
+__ZN3tbb8pipelineC1Ev
+__ZN3tbb8pipelineC2Ev
+__ZN3tbb8pipelineD0Ev
+__ZN3tbb8pipelineD1Ev
+__ZN3tbb8pipelineD2Ev
+__ZTIN3tbb8pipelineE
+__ZTSN3tbb8pipelineE
+__ZTVN3tbb8pipelineE
+
+# queuing_rw_mutex.cpp
+__ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv
+__ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv
+__ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b
+__ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv
+__ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b
+__ZN3tbb16queuing_rw_mutex18internal_constructEv
+
+#if !TBB_NO_LEGACY
+# spin_rw_mutex.cpp v2
+__ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_
+__ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_
+__ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_
+__ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_
+__ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_
+__ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_
+__ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_
+__ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_
+__ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_
+#endif
+
+# spin_rw_mutex v3
+__ZN3tbb16spin_rw_mutex_v316internal_upgradeEv
+__ZN3tbb16spin_rw_mutex_v318internal_downgradeEv
+__ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv
+__ZN3tbb16spin_rw_mutex_v323internal_acquire_writerEv
+__ZN3tbb16spin_rw_mutex_v323internal_release_readerEv
+__ZN3tbb16spin_rw_mutex_v323internal_release_writerEv
+__ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv
+__ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv
+__ZN3tbb16spin_rw_mutex_v318internal_constructEv
+
+# spin_mutex.cpp
+__ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_
+__ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv
+__ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_
+__ZN3tbb10spin_mutex18internal_constructEv
+
+# mutex.cpp
+__ZN3tbb5mutex11scoped_lock16internal_acquireERS0_
+__ZN3tbb5mutex11scoped_lock16internal_releaseEv
+__ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_
+__ZN3tbb5mutex16internal_destroyEv
+__ZN3tbb5mutex18internal_constructEv
+
+# recursive_mutex.cpp
+__ZN3tbb15recursive_mutex11scoped_lock16internal_acquireERS0_
+__ZN3tbb15recursive_mutex11scoped_lock16internal_releaseEv
+__ZN3tbb15recursive_mutex11scoped_lock20internal_try_acquireERS0_
+__ZN3tbb15recursive_mutex16internal_destroyEv
+__ZN3tbb15recursive_mutex18internal_constructEv
+
+# queuing_mutex.cpp
+__ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_
+__ZN3tbb13queuing_mutex11scoped_lock7releaseEv
+__ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_
+__ZN3tbb13queuing_mutex18internal_constructEv
+
+#if !TBB_NO_LEGACY
+# concurrent_hash_map
+__ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv
+
+# concurrent_queue.cpp v2
+__ZN3tbb8internal21concurrent_queue_base12internal_popEPv
+__ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv
+__ZN3tbb8internal21concurrent_queue_base21internal_set_capacityElm
+__ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv
+__ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv
+__ZN3tbb8internal21concurrent_queue_baseC2Em
+__ZN3tbb8internal21concurrent_queue_baseD2Ev
+__ZTIN3tbb8internal21concurrent_queue_baseE
+__ZTSN3tbb8internal21concurrent_queue_baseE
+__ZTVN3tbb8internal21concurrent_queue_baseE
+__ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_
+__ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv
+__ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE
+__ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev
+__ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv
+#endif
+
+# concurrent_queue v3
+# constructors
+__ZN3tbb8internal33concurrent_queue_iterator_base_v3C2ERKNS0_24concurrent_queue_base_v3E
+__ZN3tbb8internal24concurrent_queue_base_v3C2Em
+# destructors
+__ZN3tbb8internal33concurrent_queue_iterator_base_v3D2Ev
+__ZN3tbb8internal24concurrent_queue_base_v3D2Ev
+# typeinfo
+__ZTIN3tbb8internal24concurrent_queue_base_v3E
+__ZTSN3tbb8internal24concurrent_queue_base_v3E
+#vtable
+__ZTVN3tbb8internal24concurrent_queue_base_v3E
+# methods
+__ZN3tbb8internal33concurrent_queue_iterator_base_v36assignERKS1_
+__ZN3tbb8internal33concurrent_queue_iterator_base_v37advanceEv
+__ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv
+__ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv
+__ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv
+__ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv
+__ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv
+__ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm
+__ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv
+__ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv
+__ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv
+__ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_
+
+#if !TBB_NO_LEGACY
+# concurrent_vector.cpp v2
+__ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE
+__ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb
+__ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_
+__ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE
+__ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm
+__ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm
+__ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE
+__ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv
+#endif
+
+# concurrent_vector v3
+__ZN3tbb8internal25concurrent_vector_base_v313internal_copyERKS1_mPFvPvPKvmE
+__ZN3tbb8internal25concurrent_vector_base_v314internal_clearEPFvPvmE
+__ZN3tbb8internal25concurrent_vector_base_v315internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_
+__ZN3tbb8internal25concurrent_vector_base_v316internal_grow_byEmmPFvPvPKvmES4_
+__ZN3tbb8internal25concurrent_vector_base_v316internal_reserveEmmm
+__ZN3tbb8internal25concurrent_vector_base_v318internal_push_backEmRm
+__ZN3tbb8internal25concurrent_vector_base_v325internal_grow_to_at_leastEmmPFvPvPKvmES4_
+__ZNK3tbb8internal25concurrent_vector_base_v317internal_capacityEv
+__ZN3tbb8internal25concurrent_vector_base_v316internal_compactEmPvPFvS2_mEPFvS2_PKvmE
+__ZN3tbb8internal25concurrent_vector_base_v313internal_swapERS1_
+__ZNK3tbb8internal25concurrent_vector_base_v324internal_throw_exceptionEm
+__ZN3tbb8internal25concurrent_vector_base_v3D2Ev
+__ZN3tbb8internal25concurrent_vector_base_v315internal_resizeEmmmPKvPFvPvmEPFvS4_S3_mE
+__ZN3tbb8internal25concurrent_vector_base_v337internal_grow_to_at_least_with_resultEmmPFvPvPKvmES4_
+
+# tbb_thread
+__ZN3tbb8internal13tbb_thread_v320hardware_concurrencyEv
+__ZN3tbb8internal13tbb_thread_v36detachEv
+__ZN3tbb8internal16thread_get_id_v3Ev
+__ZN3tbb8internal15free_closure_v3EPv
+__ZN3tbb8internal13tbb_thread_v34joinEv
+__ZN3tbb8internal13tbb_thread_v314internal_startEPFPvS2_ES2_
+__ZN3tbb8internal19allocate_closure_v3Em
+__ZN3tbb8internal7move_v3ERNS0_13tbb_thread_v3ES2_
+__ZN3tbb8internal15thread_yield_v3Ev
+__ZN3tbb8internal15thread_sleep_v3ERKNS_10tick_count10interval_tE
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/mutex.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/mutex.cpp
new file mode 100644 (file)
index 0000000..3c619b6
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/mutex.h"
+#include "itt_notify.h"
+
+namespace tbb {
+    void mutex::scoped_lock::internal_acquire( mutex& m ) {
+
+#if _WIN32||_WIN64
+        switch( m.state ) {
+        case INITIALIZED: 
+        case HELD:
+            EnterCriticalSection( &m.impl );
+            // If a thread comes here, and another thread holds the lock, it will block
+            // in EnterCriticalSection.  When it returns from EnterCriticalSection,
+            // m.state must be set to INITIALIZED.  If the same thread tries to acquire a lock it
+            // aleady holds, the the lock is in HELD state, thus will cause the assertion to fail.
+            __TBB_ASSERT(m.state!=HELD, "mutex::scoped_lock: deadlock caused by attempt to reacquire held mutex");
+            m.state = HELD;
+            break;
+        case DESTROYED: 
+            __TBB_ASSERT(false,"mutex::scoped_lock: mutex already destroyed"); 
+            break;
+        default: 
+            __TBB_ASSERT(false,"mutex::scoped_lock: illegal mutex state");
+            break;
+        }
+#else
+        int error_code = pthread_mutex_lock(&m.impl);
+        __TBB_ASSERT_EX(!error_code,"mutex::scoped_lock: pthread_mutex_lock failed");
+#endif /* _WIN32||_WIN64 */
+        my_mutex = &m;
+    }
+
+void mutex::scoped_lock::internal_release() {
+    __TBB_ASSERT( my_mutex, "mutex::scoped_lock: not holding a mutex" );
+#if _WIN32||_WIN64    
+     switch( my_mutex->state ) {
+        case INITIALIZED: 
+            __TBB_ASSERT(false,"mutex::scoped_lock: try to release the lock without acquisition");
+            break;
+        case HELD:
+            my_mutex->state = INITIALIZED;
+            LeaveCriticalSection(&my_mutex->impl);
+            break;
+        case DESTROYED: 
+            __TBB_ASSERT(false,"mutex::scoped_lock: mutex already destroyed"); 
+            break;
+        default: 
+            __TBB_ASSERT(false,"mutex::scoped_lock: illegal mutex state");
+            break;
+    }
+#else
+     int error_code = pthread_mutex_unlock(&my_mutex->impl);
+     __TBB_ASSERT_EX(!error_code, "mutex::scoped_lock: pthread_mutex_unlock failed");
+#endif /* _WIN32||_WIN64 */
+     my_mutex = NULL;
+}
+
+bool mutex::scoped_lock::internal_try_acquire( mutex& m ) {
+#if _WIN32||_WIN64
+    switch( m.state ) {
+        case INITIALIZED: 
+        case HELD:
+            break;
+        case DESTROYED: 
+            __TBB_ASSERT(false,"mutex::scoped_lock: mutex already destroyed"); 
+            break;
+        default: 
+            __TBB_ASSERT(false,"mutex::scoped_lock: illegal mutex state");
+            break;
+    }
+#endif /* _WIN32||_WIN64 */
+
+    bool result;
+#if _WIN32||_WIN64
+    result = TryEnterCriticalSection(&m.impl)!=0;
+    if( result ) {
+        __TBB_ASSERT(m.state!=HELD, "mutex::scoped_lock: deadlock caused by attempt to reacquire held mutex");
+        m.state = HELD;
+    }
+#else
+    result = pthread_mutex_trylock(&m.impl)==0;
+#endif /* _WIN32||_WIN64 */
+    if( result ) 
+        my_mutex = &m;
+    return result;
+}
+
+void mutex::internal_construct() {
+#if _WIN32||_WIN64
+    InitializeCriticalSection(&impl);
+    state = INITIALIZED;  
+#else
+    int error_code = pthread_mutex_init(&impl,NULL);
+    if( error_code )
+        tbb::internal::handle_perror(error_code,"mutex: pthread_mutex_init failed");
+#endif /* _WIN32||_WIN64*/    
+    ITT_SYNC_CREATE(&impl, _T("tbb::mutex"), _T(""));
+}
+
+void mutex::internal_destroy() {
+#if _WIN32||_WIN64
+    switch( state ) {
+      case INITIALIZED:
+        DeleteCriticalSection(&impl);
+       break;
+      case DESTROYED: 
+        __TBB_ASSERT(false,"mutex: already destroyed");
+        break;
+      default: 
+        __TBB_ASSERT(false,"mutex: illegal state for destruction");
+        break;
+    }
+    state = DESTROYED;
+#else
+    int error_code = pthread_mutex_destroy(&impl); 
+    __TBB_ASSERT_EX(!error_code,"mutex: pthread_mutex_destroy failed");
+#endif /* _WIN32||_WIN64 */
+}
+
+} // namespace tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/pipeline.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/pipeline.cpp
new file mode 100644 (file)
index 0000000..e68892e
--- /dev/null
@@ -0,0 +1,678 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/pipeline.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "itt_notify.h"
+
+
+namespace tbb {
+
+namespace internal {
+
+//! This structure is used to store task information in a input buffer
+struct task_info {
+    void* my_object;
+    //! Invalid unless a task went through an ordered stage.
+    Token my_token;
+    //! False until my_token is set.
+    bool my_token_ready;
+    bool is_valid;
+};
+static task_info empty_info = {NULL, 0, false, false};
+
+//! A buffer of input items for a filter.
+/** Each item is a task_info, inserted into a position in the buffer corresponding to a Token. */
+class input_buffer {
+    friend class tbb::internal::pipeline_root_task;
+    friend class tbb::thread_bound_filter;
+
+    typedef  Token  size_type;
+
+    //! Array of deferred tasks that cannot yet start executing. 
+    task_info* array;
+
+    //! Size of array
+    /** Always 0 or a power of 2 */
+    size_type array_size;
+
+    //! Lowest token that can start executing.
+    /** All prior Token have already been seen. */
+    Token low_token;
+
+    //! Serializes updates.
+    spin_mutex array_mutex;
+
+    //! Resize "array".
+    /** Caller is responsible to acquiring a lock on "array_mutex". */
+    void grow( size_type minimum_size );
+
+    //! Initial size for "array"
+    /** Must be a power of 2 */
+    static const size_type initial_buffer_size = 4;
+
+    //! Used only for out of order buffer.
+    Token high_token;
+
+    //! True for ordered filter, false otherwise. 
+    bool is_ordered;
+
+    //! True for thread-bound filter, false otherwise. 
+    bool is_bound;
+public:
+    //! Construct empty buffer.
+    input_buffer( bool is_ordered_, bool is_bound_ ) : 
+            array(NULL), array_size(0),
+            low_token(0), high_token(0), 
+            is_ordered(is_ordered_), is_bound(is_bound_) {
+        grow(initial_buffer_size);
+        __TBB_ASSERT( array, NULL );
+    }
+
+    //! Destroy the buffer.
+    ~input_buffer() {
+        __TBB_ASSERT( array, NULL );
+        cache_aligned_allocator<task_info>().deallocate(array,array_size);
+        poison_pointer( array );
+    }
+
+    //! Put a token into the buffer.
+    /** If task information was placed into buffer, returns true;
+        otherwise returns false, informing the caller to create and spawn a task.
+    */
+    // Using template to avoid explicit dependency on stage_task
+    template<typename StageTask>
+    bool put_token( StageTask& putter ) {
+        {
+            spin_mutex::scoped_lock lock( array_mutex );
+            Token token;
+            if( is_ordered ) {
+                if( !putter.my_token_ready ) {
+                    putter.my_token = high_token++;
+                    putter.my_token_ready = true;
+                }
+                token = putter.my_token;
+            } else
+                token = high_token++;
+            __TBB_ASSERT( (tokendiff_t)(token-low_token)>=0, NULL );
+            if( token!=low_token || is_bound ) {
+                // Trying to put token that is beyond low_token.
+                // Need to wait until low_token catches up before dispatching.
+                if( token-low_token>=array_size ) 
+                    grow( token-low_token+1 );
+                ITT_NOTIFY( sync_releasing, this );
+                putter.put_task_info(array[token&array_size-1]);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    //! Note that processing of a token is finished.
+    /** Fires up processing of the next token, if processing was deferred. */
+    // Using template to avoid explicit dependency on stage_task
+    template<typename StageTask>
+    void note_done( Token token, StageTask& spawner ) {
+        task_info wakee = empty_info;
+        {
+            spin_mutex::scoped_lock lock( array_mutex );
+            if( !is_ordered || token==low_token ) {
+                // Wake the next task
+                task_info& item = array[++low_token & array_size-1];
+                ITT_NOTIFY( sync_acquired, this );
+                wakee = item;
+                item.is_valid = false;
+            }
+        }
+        if( wakee.is_valid )
+            spawner.spawn_stage_task(wakee);
+    }
+
+#if __TBB_EXCEPTIONS
+    //! The method destroys all data in filters to prevent memory leaks
+    void clear( filter* my_filter ) {
+        long t=low_token;
+        for( size_type i=0; i<array_size; ++i, ++t ){
+            task_info& temp = array[t&array_size-1];
+            if (temp.is_valid ) {
+                my_filter->finalize(temp.my_object);
+                temp.is_valid = false;
+            }
+        }
+    }
+#endif
+
+    bool return_item(task_info& info, bool advance) {
+        spin_mutex::scoped_lock lock( array_mutex );
+        task_info& item = array[low_token&array_size-1];
+        ITT_NOTIFY( sync_acquired, this );
+        if( item.is_valid ) {
+            info = item;
+            item.is_valid = false;
+            if (advance) low_token++;
+            return true;
+        }
+        return false;
+    }
+
+    void put_item( task_info& info ) {
+        info.is_valid = true;
+        spin_mutex::scoped_lock lock( array_mutex );
+        Token token;
+        if( is_ordered ) {
+            if( !info.my_token_ready ) {
+                info.my_token = high_token++;
+                info.my_token_ready = true;
+            }
+            token = info.my_token;
+        } else
+            token = high_token++;
+        __TBB_ASSERT( (tokendiff_t)(token-low_token)>=0, NULL );
+        if( token-low_token>=array_size ) 
+            grow( token-low_token+1 );
+        ITT_NOTIFY( sync_releasing, this );
+        array[token&array_size-1] = info;
+    }
+};
+
+void input_buffer::grow( size_type minimum_size ) {
+    size_type old_size = array_size;
+    size_type new_size = old_size ? 2*old_size : initial_buffer_size;
+    while( new_size<minimum_size ) 
+        new_size*=2;
+    task_info* new_array = cache_aligned_allocator<task_info>().allocate(new_size);
+    task_info* old_array = array;
+    for( size_type i=0; i<new_size; ++i )
+        new_array[i].is_valid = false;
+    long t=low_token;
+    for( size_type i=0; i<old_size; ++i, ++t )
+        new_array[t&new_size-1] = old_array[t&old_size-1];
+    array = new_array;
+    array_size = new_size;
+    if( old_array )
+        cache_aligned_allocator<task_info>().deallocate(old_array,old_size);
+}
+
+class stage_task: public task, public task_info {
+private:
+    friend class tbb::pipeline;
+    pipeline& my_pipeline;
+    filter* my_filter;  
+    //! True if this task has not yet read the input.
+    bool my_at_start;
+public:
+    //! Construct stage_task for first stage in a pipeline.
+    /** Such a stage has not read any input yet. */
+    stage_task( pipeline& pipeline ) :
+        task_info(empty_info),
+        my_pipeline(pipeline), 
+        my_filter(pipeline.filter_list),
+        my_at_start(true)
+    {}
+    //! Construct stage_task for a subsequent stage in a pipeline.
+    stage_task( pipeline& pipeline, filter* filter_, const task_info& info ) :
+        task_info(info),
+        my_pipeline(pipeline), 
+        my_filter(filter_),
+        my_at_start(false)
+    {}
+    //! The virtual task execution method
+    /*override*/ task* execute();
+#if __TBB_EXCEPTIONS
+    ~stage_task()    
+    {
+        if (my_filter && my_object && (my_filter->my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(4)) {
+            __TBB_ASSERT(is_cancelled(), "Tryning to finalize the task that wasn't cancelled");
+            my_filter->finalize(my_object);
+            my_object = NULL;
+        }
+    }
+#endif // __TBB_EXCEPTIONS
+    //! Creates and spawns stage_task from task_info
+    void spawn_stage_task(const task_info& info)
+    {
+        stage_task* clone = new (allocate_additional_child_of(*parent())) 
+                                stage_task( my_pipeline, my_filter, info );
+        spawn(*clone);
+    }
+    //! Puts current task information
+    void put_task_info(task_info &where_to_put ) {
+        where_to_put.my_object = my_object;
+        where_to_put.my_token = my_token;
+        where_to_put.my_token_ready = my_token_ready;
+        where_to_put.is_valid = true;
+    }
+};
+
+task* stage_task::execute() {
+    __TBB_ASSERT( !my_at_start || !my_object, NULL );
+    __TBB_ASSERT( !my_filter->is_bound(), NULL );
+    if( my_at_start ) {
+        if( my_filter->is_serial() ) {
+            my_object = (*my_filter)(my_object);
+            if( my_object ) {
+                if( my_filter->is_ordered() ) {
+                    my_token = my_pipeline.token_counter++; // ideally, with relaxed semantics
+                    my_token_ready = true;
+                } else if( (my_filter->my_filter_mode & my_filter->version_mask) >= __TBB_PIPELINE_VERSION(5) ) {
+                    if( my_pipeline.has_thread_bound_filters )
+                        my_pipeline.token_counter++; // ideally, with relaxed semantics
+                }
+                ITT_NOTIFY( sync_releasing, &my_pipeline.input_tokens );
+                if( --my_pipeline.input_tokens>0 ) 
+                    spawn( *new( allocate_additional_child_of(*parent()) ) stage_task( my_pipeline ) );
+            } else {
+                my_pipeline.end_of_input = true; 
+                return NULL;
+            }
+        } else /*not is_serial*/ {
+            if( my_pipeline.end_of_input )
+                return NULL;
+            if( (my_filter->my_filter_mode & my_filter->version_mask) >= __TBB_PIPELINE_VERSION(5) ) {
+                if( my_pipeline.has_thread_bound_filters )
+                    my_pipeline.token_counter++;
+            }
+            ITT_NOTIFY( sync_releasing, &my_pipeline.input_tokens );
+            if( --my_pipeline.input_tokens>0 )
+                spawn( *new( allocate_additional_child_of(*parent()) ) stage_task( my_pipeline ) );
+            my_object = (*my_filter)(my_object);
+            if( !my_object ) {
+                my_pipeline.end_of_input = true; 
+                if( (my_filter->my_filter_mode & my_filter->version_mask) >= __TBB_PIPELINE_VERSION(5) ) {
+                    if( my_pipeline.has_thread_bound_filters )
+                        my_pipeline.token_counter--;
+                }
+                return NULL;
+            }
+        }
+        my_at_start = false;
+    } else {
+        my_object = (*my_filter)(my_object);
+        if( my_filter->is_serial() )
+            my_filter->my_input_buffer->note_done(my_token, *this);
+    }
+    task* next = NULL;
+    my_filter = my_filter->next_filter_in_pipeline; 
+    if( my_filter ) {
+        // There is another filter to execute.
+        // Crank up priority a notch.
+        add_to_depth(1);
+        if( my_filter->is_serial() ) {
+            // The next filter must execute tokens in order
+            if( my_filter->my_input_buffer->put_token(*this) ){
+                // Can't proceed with the same item
+                if( my_filter->is_bound() ) {
+                    // Find the next non-thread-bound filter
+                    do {
+                        my_filter = my_filter->next_filter_in_pipeline;
+                    } while( my_filter && my_filter->is_bound() );
+                    // Check if there is an item ready to process
+                    if( my_filter && my_filter->my_input_buffer->return_item(*this, !my_filter->is_serial()) ) 
+                        goto process_another_stage;
+                } 
+                my_filter = NULL; // To prevent deleting my_object twice if exception occurs
+                return NULL;
+            }
+        }
+process_another_stage:
+        /* A semi-hackish way to reexecute the same task object immediately without spawning.
+           recycle_as_continuation marks the task for future execution,
+           and then 'this' pointer is returned to bypass spawning. */
+        recycle_as_continuation();
+        next = this;
+    } else {
+        // Reached end of the pipe.  Inject a new token.
+        // The token must be injected before execute() returns, in order to prevent the
+        // parent's reference count from prematurely reaching 0.
+        set_depth( parent()->depth()+1 ); 
+        if( ++my_pipeline.input_tokens==1 ) {
+            ITT_NOTIFY( sync_acquired, &my_pipeline.input_tokens );
+            if( !my_pipeline.end_of_input && !my_pipeline.filter_list->is_bound() ) 
+                spawn( *new( allocate_additional_child_of(*parent()) ) stage_task( my_pipeline ) );
+        }
+    }
+    return next;
+}
+
+class pipeline_root_task: public task {
+    pipeline& my_pipeline;
+    bool do_segment_scanning;
+
+    /*override*/ task* execute() {
+        if( !my_pipeline.end_of_input )
+            if( !my_pipeline.filter_list->is_bound() )
+                if( my_pipeline.input_tokens > 0 ) {
+                    recycle_as_continuation();
+                    set_ref_count(1);
+                    return new( allocate_child() ) stage_task( my_pipeline );
+                }
+        if( do_segment_scanning ) {
+            filter* current_filter = my_pipeline.filter_list->next_segment;
+            /* first non-thread-bound filter that follows thread-bound one 
+            and may have valid items to process */
+            filter* first_suitable_filter = current_filter;
+            while( current_filter ) {
+                __TBB_ASSERT( !current_filter->is_bound(), "filter is thread-bound?" );
+                __TBB_ASSERT( current_filter->prev_filter_in_pipeline->is_bound(), "previous filter is not thread-bound?" );
+                if( !my_pipeline.end_of_input
+                    || (tokendiff_t)(my_pipeline.token_counter - current_filter->my_input_buffer->low_token) > 0 )
+                {
+                    task_info info = empty_info;
+                    if( current_filter->my_input_buffer->return_item(info, !current_filter->is_serial()) ) {
+                        set_ref_count(1);
+                        recycle_as_continuation();
+                        return new( allocate_child() ) stage_task( my_pipeline, current_filter, info);
+                    }
+                    current_filter = current_filter->next_segment;
+                    if( !current_filter ) {
+                        if( !my_pipeline.end_of_input ) {
+                            recycle_as_continuation();
+                            return this;
+                        }
+                        current_filter = first_suitable_filter;
+                        __TBB_Yield();
+                    }
+                } else { 
+                    /* The preceding pipeline segment is empty. 
+                    Fast-forward to the next post-TBF segment. */
+                    first_suitable_filter = first_suitable_filter->next_segment;
+                    current_filter = first_suitable_filter; 
+                }
+            } /* end of while */
+            return NULL;
+        } else { 
+            if( !my_pipeline.end_of_input ) {
+                recycle_as_continuation();
+                return this;
+            }
+            return NULL;
+        }
+    }
+public:
+    pipeline_root_task( pipeline& pipeline ): my_pipeline(pipeline), do_segment_scanning(false)
+    {
+        __TBB_ASSERT( my_pipeline.filter_list, NULL );
+        filter* first = my_pipeline.filter_list;
+        if( (first->my_filter_mode & first->version_mask) >= __TBB_PIPELINE_VERSION(5) ) {
+            // Scanning the pipeline for segments 
+            filter* head_of_previous_segment = first;
+            for(  filter* subfilter=first->next_filter_in_pipeline;
+                  subfilter!=NULL;
+                  subfilter=subfilter->next_filter_in_pipeline )
+            {
+                if( subfilter->prev_filter_in_pipeline->is_bound() && !subfilter->is_bound() ) {
+                    do_segment_scanning = true;
+                    head_of_previous_segment->next_segment = subfilter;
+                    head_of_previous_segment = subfilter;
+                }
+            }
+        }
+    }
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Workaround for overzealous compiler warnings
+    // Suppress compiler warning about constant conditional expression
+    #pragma warning (disable: 4127)
+#endif
+
+// The class destroys end_counter and clears all input buffers if pipeline was cancelled.
+class pipeline_cleaner: internal::no_copy {
+    pipeline& my_pipeline;  
+public:
+    pipeline_cleaner(pipeline& _pipeline) : 
+        my_pipeline(_pipeline)
+    {}
+    ~pipeline_cleaner(){
+#if __TBB_EXCEPTIONS
+        if (my_pipeline.end_counter->is_cancelled()) // Pipeline was cancelled
+            my_pipeline.clear_filters(); 
+#endif
+        my_pipeline.end_counter = NULL;            
+    }
+};
+
+} // namespace internal
+
+void pipeline::inject_token( task& ) {
+    __TBB_ASSERT(0,"illegal call to inject_token");
+}
+
+#if __TBB_EXCEPTIONS
+void pipeline::clear_filters() {
+    for( filter* f = filter_list; f; f = f->next_filter_in_pipeline ) {
+        if ((f->my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(4))
+            if( internal::input_buffer* b = f->my_input_buffer )
+                b->clear(f);
+    }
+}
+#endif
+
+pipeline::pipeline() : 
+    filter_list(NULL),
+    filter_end(NULL),
+    end_counter(NULL),
+    end_of_input(false),
+    has_thread_bound_filters(false)
+{
+    token_counter = 0;
+    input_tokens = 0;
+}
+
+pipeline::~pipeline() {
+    clear();
+}
+
+void pipeline::clear() {
+    filter* next;
+    for( filter* f = filter_list; f; f=next ) {
+        if( internal::input_buffer* b = f->my_input_buffer ) {
+            delete b; 
+            f->my_input_buffer = NULL;
+        }
+        next=f->next_filter_in_pipeline;
+        f->next_filter_in_pipeline = filter::not_in_pipeline();
+        if ( (f->my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(3) ) {
+            f->prev_filter_in_pipeline = filter::not_in_pipeline();
+            f->my_pipeline = NULL;
+        }
+        if ( (f->my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(5) )
+            f->next_segment = NULL;
+    }
+    filter_list = filter_end = NULL;
+}
+
+void pipeline::add_filter( filter& filter_ ) {
+#if TBB_USE_ASSERT
+    if ( (filter_.my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(3) ) 
+        __TBB_ASSERT( filter_.prev_filter_in_pipeline==filter::not_in_pipeline(), "filter already part of pipeline?" );
+    __TBB_ASSERT( filter_.next_filter_in_pipeline==filter::not_in_pipeline(), "filter already part of pipeline?" );
+    __TBB_ASSERT( !end_counter, "invocation of add_filter on running pipeline" );
+#endif    
+    if ( (filter_.my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(3) ) {
+        filter_.my_pipeline = this;
+        filter_.prev_filter_in_pipeline = filter_end;
+        if ( filter_list == NULL)
+            filter_list = &filter_;
+        else
+            filter_end->next_filter_in_pipeline = &filter_;
+        filter_.next_filter_in_pipeline = NULL;
+        filter_end = &filter_;
+    }
+    else
+    {
+        if( !filter_end )
+            filter_end = reinterpret_cast<filter*>(&filter_list);
+        
+        *reinterpret_cast<filter**>(filter_end) = &filter_;
+        filter_end = reinterpret_cast<filter*>(&filter_.next_filter_in_pipeline);
+        *reinterpret_cast<filter**>(filter_end) = NULL;
+    }
+    if( (filter_.my_filter_mode & filter_.version_mask) >= __TBB_PIPELINE_VERSION(5) ) {
+        if( filter_.is_serial() ) {
+            if( filter_.is_bound() )
+                has_thread_bound_filters = true;
+            filter_.my_input_buffer = new internal::input_buffer( filter_.is_ordered(), filter_.is_bound() );
+        }
+        else {
+            if( filter_.prev_filter_in_pipeline && filter_.prev_filter_in_pipeline->is_bound() )
+                filter_.my_input_buffer = new internal::input_buffer( false, false );
+        }
+    } else {
+        if( filter_.is_serial() ) {
+            filter_.my_input_buffer = new internal::input_buffer( filter_.is_ordered(), false );
+        }
+    }
+
+}
+
+void pipeline::remove_filter( filter& filter_ ) {
+    if (&filter_ == filter_list) 
+        filter_list = filter_.next_filter_in_pipeline;
+    else {
+        __TBB_ASSERT( filter_.prev_filter_in_pipeline, "filter list broken?" ); 
+        filter_.prev_filter_in_pipeline->next_filter_in_pipeline = filter_.next_filter_in_pipeline;
+    }
+    if (&filter_ == filter_end)
+        filter_end = filter_.prev_filter_in_pipeline;
+    else {
+        __TBB_ASSERT( filter_.next_filter_in_pipeline, "filter list broken?" ); 
+        filter_.next_filter_in_pipeline->prev_filter_in_pipeline = filter_.prev_filter_in_pipeline;
+    }
+    if( internal::input_buffer* b = filter_.my_input_buffer ) {
+        delete b; 
+        filter_.my_input_buffer = NULL;
+    }
+    filter_.next_filter_in_pipeline = filter_.prev_filter_in_pipeline = filter::not_in_pipeline();
+    if ( (filter_.my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(5) )
+        filter_.next_segment = NULL;
+    filter_.my_pipeline = NULL;
+}
+
+void pipeline::run( size_t max_number_of_live_tokens
+#if __TBB_EXCEPTIONS
+    , tbb::task_group_context& context
+#endif
+    ) {
+    __TBB_ASSERT( max_number_of_live_tokens>0, "pipeline::run must have at least one token" );
+    __TBB_ASSERT( !end_counter, "pipeline already running?" );
+    if( filter_list ) {
+        if( filter_list->next_filter_in_pipeline || !filter_list->is_serial() ) {
+            internal::pipeline_cleaner my_pipeline_cleaner(*this);
+            end_of_input = false;
+#if __TBB_EXCEPTIONS            
+            end_counter = new( task::allocate_root(context) ) internal::pipeline_root_task( *this );
+#else
+            end_counter = new( task::allocate_root() ) internal::pipeline_root_task( *this );
+#endif
+            input_tokens = internal::Token(max_number_of_live_tokens);
+            // Start execution of tasks
+            task::spawn_root_and_wait( *end_counter );
+        } else {
+            // There are no filters, and thus no parallelism is possible.
+            // Just drain the input stream.
+            while( (*filter_list)(NULL) ) 
+                continue;
+        }
+    } 
+}
+
+#if __TBB_EXCEPTIONS
+void pipeline::run( size_t max_number_of_live_tokens ) {
+    tbb::task_group_context context;
+    run(max_number_of_live_tokens, context);
+}
+#endif // __TBB_EXCEPTIONS
+
+filter::~filter() {
+    if ( (my_filter_mode & version_mask) >= __TBB_PIPELINE_VERSION(3) ) {
+        if ( next_filter_in_pipeline != filter::not_in_pipeline() ) { 
+            __TBB_ASSERT( prev_filter_in_pipeline != filter::not_in_pipeline(), "probably filter list is broken" );
+            my_pipeline->remove_filter(*this);
+        } else 
+            __TBB_ASSERT( prev_filter_in_pipeline == filter::not_in_pipeline(), "probably filter list is broken" );
+    } else {
+        __TBB_ASSERT( next_filter_in_pipeline==filter::not_in_pipeline(), "cannot destroy filter that is part of pipeline" );
+    }
+}
+
+thread_bound_filter::result_type thread_bound_filter::process_item() {
+    return internal_process_item(true);
+}
+
+thread_bound_filter::result_type thread_bound_filter::try_process_item() {
+    return internal_process_item(false);
+}
+
+thread_bound_filter::result_type thread_bound_filter::internal_process_item(bool is_blocking) {
+    internal::task_info info = internal::empty_info;
+    
+    if( !prev_filter_in_pipeline ) {
+        if( my_pipeline->end_of_input )
+            return end_of_stream;
+        while( my_pipeline->input_tokens == 0 ) {
+            if( is_blocking )
+                __TBB_Yield();
+            else
+                return item_not_available;
+        }
+        info.my_object = (*this)(info.my_object);
+        if( info.my_object ) {
+            my_pipeline->input_tokens--;
+            if( is_ordered() ) {
+                info.my_token = my_pipeline->token_counter;
+                info.my_token_ready = true;
+            }
+            my_pipeline->token_counter++; // ideally, with relaxed semantics
+        } else {
+            my_pipeline->end_of_input = true; 
+            return end_of_stream; 
+        }
+    } else { /* this is not an input filter */
+        while( !my_input_buffer->return_item(info, /*advance=*/true) ) {
+            if( my_pipeline->end_of_input && my_input_buffer->low_token == my_pipeline->token_counter )
+                return end_of_stream;
+            if( is_blocking )
+                __TBB_Yield();
+            else
+                return item_not_available;
+        }
+        info.my_object = (*this)(info.my_object);
+    }
+    if( next_filter_in_pipeline ) {
+        next_filter_in_pipeline->my_input_buffer->put_item(info);
+    } else {
+        my_pipeline->input_tokens++;
+    }
+
+    return success;
+}
+
+} // tbb
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/private_server.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/private_server.cpp
new file mode 100644 (file)
index 0000000..b41ef0e
--- /dev/null
@@ -0,0 +1,333 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "rml_tbb.h"
+#include "../server/thread_monitor.h"
+#include "tbb/atomic.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/tbb_thread.h"
+
+using rml::internal::thread_monitor;
+
+namespace tbb {
+namespace internal {
+namespace rml {
+
+class private_server;
+
+class private_worker: no_copy {
+    //! State in finite-state machine that controls the worker.
+    /** State diagram:
+        open --> normal --> quit
+          |
+          V
+        plugged
+      */ 
+    enum state_t {
+        //! *this is initialized
+        st_init,
+        //! Associated thread is doing normal life sequence.
+        st_normal,
+        //! Associated thread is end normal life sequence.
+        st_quit,
+        //! Associated thread should skip normal life sequence, because private_server is shutting down.
+        st_plugged
+    };
+    atomic<state_t> my_state;
+    
+    //! Associated server
+    private_server& my_server; 
+
+    //! Associated client
+    tbb_client& my_client; 
+
+    //! Monitor for sleeping when there is no work to do.
+    /** The invariant that holds for sleeping workers is:
+        "my_slack<=0 && my_state==st_normal && I am on server's list of asleep threads" */
+    thread_monitor my_thread_monitor;
+
+    //! Link for list of sleeping workers
+    private_worker* my_next;
+
+    friend class private_server;
+
+    //! Actions executed by the associated thread 
+    void run();
+
+    //! Called by a thread (usually not the associated thread) to commence termination.
+    void start_shutdown();
+
+    static __RML_DECL_THREAD_ROUTINE thread_routine( void* arg );
+
+protected:
+    private_worker( private_server& server, tbb_client& client ) : 
+        my_server(server),
+        my_client(client)
+    {
+        my_state = st_init;
+    }
+
+};
+
+static const size_t cache_line_size = tbb::internal::NFS_MaxLineSize;
+
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Suppress overzealous compiler warnings about uninstantiatble class
+    #pragma warning(push)
+    #pragma warning(disable:4510 4610)
+#endif
+class padded_private_worker: public private_worker {
+    char pad[cache_line_size - sizeof(private_worker)%cache_line_size];
+public:
+    padded_private_worker( private_server& server, tbb_client& client ) : private_worker(server,client) {}
+};
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning(pop)
+#endif
+
+class private_server: public tbb_server, no_copy {
+    tbb_client& my_client;
+    const tbb_client::size_type my_n_thread;
+
+    //! Number of jobs that could use their associated thread minus number of active threads.
+    /** If negative, indicates oversubscription.
+        If positive, indicates that more threads should run. 
+        Can be lowered asynchronously, but must be raised only while holding my_asleep_list_mutex,
+        because raising it impacts the invariant for sleeping threads. */
+    atomic<int> my_slack;
+
+    //! Counter used to determine when to delete this.
+    atomic<int> my_ref_count;
+
+    padded_private_worker* my_thread_array;
+
+    //! List of workers that are asleep or committed to sleeping until notified by another thread.
+    tbb::atomic<private_worker*> my_asleep_list_root;
+
+    //! Protects my_asleep_list_root
+    tbb::spin_mutex my_asleep_list_mutex;
+
+#if TBB_USE_ASSERT
+    atomic<int> my_net_slack_requests;
+#endif /* TBB_USE_ASSERT */
+
+    //! Used for double-check idiom
+    bool has_sleepers() const {
+        return my_asleep_list_root!=NULL;
+    }
+
+    //! Try to add t to list of sleeping workers
+    bool try_insert_in_asleep_list( private_worker& t );
+
+    //! Equivalent of adding additional_slack to my_slack and waking up to 2 threads if my_slack permits.
+    void wake_some( int additional_slack );
+
+    virtual ~private_server();
+    
+    void remove_server_ref() {
+        if( --my_ref_count==0 ) {
+            my_client.acknowledge_close_connection();
+            this->~private_server();
+            tbb::cache_aligned_allocator<private_server>().deallocate( this, 1 );
+        } 
+    }
+
+    friend class private_worker;
+public:
+    private_server( tbb_client& client );
+
+    /*override*/ version_type version() const {
+        return 0;
+    } 
+
+    /*override*/ void request_close_connection() {
+        for( size_t i=0; i<my_n_thread; ++i ) 
+            my_thread_array[i].start_shutdown();
+        remove_server_ref();
+    }
+
+    /*override*/ void yield() {__TBB_Yield();}
+
+    /*override*/ void independent_thread_number_changed( int ) {__TBB_ASSERT(false,NULL);}
+
+    /*override*/ unsigned default_concurrency() const {return tbb::tbb_thread::hardware_concurrency()-1;}
+
+    /*override*/ void adjust_job_count_estimate( int delta );
+};
+
+//------------------------------------------------------------------------
+// Methods of private_worker
+//------------------------------------------------------------------------
+__RML_DECL_THREAD_ROUTINE private_worker::thread_routine( void* arg ) {
+    private_worker* self = static_cast<private_worker*>(arg);
+    self->run();
+    return NULL;
+}
+
+void private_worker::start_shutdown() {
+    state_t s; 
+    // Transition from st_init or st_normal to st_plugged or st_quit
+    do {
+        s = my_state;
+        __TBB_ASSERT( s==st_init||s==st_normal, NULL );
+    } while( my_state.compare_and_swap( s==st_init? st_plugged : st_quit, s )!=s );
+    if( s==st_normal ) {
+        // May have invalidated invariant for sleeping, so wake up the thread.
+        // Note that the notify() here occurs without maintaining invariants for my_slack.
+        // It does not matter, because my_state==st_quit overrides checking of my_slack.
+        my_thread_monitor.notify();
+    } 
+}
+
+void private_worker::run() {
+    if( my_state.compare_and_swap( st_normal, st_init )==st_init ) {
+        ::rml::job& j = *my_client.create_one_job();
+        --my_server.my_slack;
+        while( my_state==st_normal ) {
+            if( my_server.my_slack>=0 ) {
+                my_client.process(j);
+            } else {
+                thread_monitor::cookie c;
+                // Prepare to wait
+                my_thread_monitor.prepare_wait(c);
+                // Check/set the invariant for sleeping
+                if( my_state==st_normal && my_server.try_insert_in_asleep_list(*this) ) {
+                    my_thread_monitor.commit_wait(c);
+                    // Propagate chain reaction
+                    if( my_server.has_sleepers() )
+                        my_server.wake_some(0);
+                } else {
+                    // Invariant broken
+                    my_thread_monitor.cancel_wait();
+                }
+            }
+        }
+        my_client.cleanup(j);
+        ++my_server.my_slack;
+    }
+    my_server.remove_server_ref();
+}
+
+//------------------------------------------------------------------------
+// Methods of private_server
+//------------------------------------------------------------------------
+private_server::private_server( tbb_client& client ) : 
+    my_client(client), 
+    my_n_thread(client.max_job_count()),
+    my_thread_array(NULL) 
+{
+    my_ref_count = my_n_thread+1;
+    my_slack = 0;
+#if TBB_USE_ASSERT
+    my_net_slack_requests = 0;
+#endif /* TBB_USE_ASSERT */
+    my_asleep_list_root = NULL;
+    size_t stack_size = client.min_stack_size();
+    my_thread_array = tbb::cache_aligned_allocator<padded_private_worker>().allocate( my_n_thread );
+    memset( my_thread_array, 0, sizeof(private_worker)*my_n_thread );
+    // FIXME - use recursive chain reaction to launch the threads.
+    for( size_t i=0; i<my_n_thread; ++i ) {
+        private_worker* t = new( &my_thread_array[i] ) padded_private_worker( *this, client ); 
+        thread_monitor::launch( private_worker::thread_routine, t, stack_size );
+    } 
+}
+
+private_server::~private_server() {
+    __TBB_ASSERT( my_net_slack_requests==0, NULL );
+    for( size_t i=my_n_thread; i--; ) 
+        my_thread_array[i].~padded_private_worker();
+    tbb::cache_aligned_allocator<padded_private_worker>().deallocate( my_thread_array, my_n_thread );
+    tbb::internal::poison_pointer( my_thread_array );
+}
+
+inline bool private_server::try_insert_in_asleep_list( private_worker& t ) {
+    tbb::spin_mutex::scoped_lock lock(my_asleep_list_mutex);
+    // Contribute to slack under lock so that if another takes that unit of slack,
+    // it sees us sleeping on the list and wakes us up.
+    int k = ++my_slack;
+    if( k<=0 ) {
+        t.my_next = my_asleep_list_root;
+        my_asleep_list_root = &t;
+        return true;
+    } else {
+        --my_slack;
+        return false;
+    }
+}
+
+void private_server::wake_some( int additional_slack ) {
+    __TBB_ASSERT( additional_slack>=0, NULL );
+    private_worker* wakee[2];
+    private_worker**w = wakee;
+    {
+        tbb::spin_mutex::scoped_lock lock(my_asleep_list_mutex);
+        while( my_asleep_list_root && w<wakee+2 ) {
+            if( additional_slack>0 ) {
+                --additional_slack;
+            } else {
+                // Try to claim unit of slack
+                int old;
+                do {
+                    old = my_slack;
+                    if( old<=0 ) goto done;
+                } while( my_slack.compare_and_swap(old-1,old)!=old );
+            }
+            // Pop sleeping worker to combine with claimed unit of slack
+            my_asleep_list_root = (*w++ = my_asleep_list_root)->my_next;
+        }
+        if( additional_slack ) {
+            // Contribute our unused slack to my_slack.
+            my_slack += additional_slack;
+        }
+    }
+done:
+    while( w>wakee ) 
+        (*--w)->my_thread_monitor.notify();
+}
+
+void private_server::adjust_job_count_estimate( int delta ) {
+#if TBB_USE_ASSERT
+    my_net_slack_requests+=delta;
+#endif /* TBB_USE_ASSERT */
+    if( delta<0 ) {
+        my_slack+=delta;
+    } else if( delta>0 ) {
+        wake_some( delta );
+    }
+}
+
+//! Factory method called from task.cpp to create a private_server.
+tbb_server* make_private_server( tbb_client& client ) {
+    return new( tbb::cache_aligned_allocator<private_server>().allocate(1) ) private_server(client);
+}
+        
+} // namespace rml
+} // namespace internal
+} // namespace tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/queuing_mutex.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/queuing_mutex.cpp
new file mode 100644 (file)
index 0000000..b6334ec
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/tbb_machine.h"
+#include "tbb/tbb_stddef.h"
+#include "tbb_misc.h"
+#include "tbb/queuing_mutex.h"
+#include "itt_notify.h"
+#include "itt_annotate.h"
+
+
+namespace tbb {
+
+using namespace internal;
+
+//! A method to acquire queuing_mutex lock
+void queuing_mutex::scoped_lock::acquire( queuing_mutex& m )
+{
+    __TBB_ASSERT( !this->mutex, "scoped_lock is already holding a mutex");
+
+    // Must set all fields before the fetch_and_store, because once the
+    // fetch_and_store executes, *this becomes accessible to other threads.
+    mutex = &m;
+    next  = NULL;
+    going = 0;
+
+    // The fetch_and_store must have release semantics, because we are
+    // "sending" the fields initialized above to other processors.
+    scoped_lock* pred = m.q_tail.fetch_and_store<tbb::release>(this);
+    if( pred ) {
+        ITT_NOTIFY(sync_prepare, mutex);
+        __TBB_ASSERT( !pred->next, "the predecessor has another successor!");
+        pred->next = this;
+        spin_wait_while_eq( going, 0ul );
+    }
+    ITT_NOTIFY(sync_acquired, mutex);
+    ITT_ANNOTATE_ACQUIRE_LOCK(mutex);
+
+    // Force acquire so that user's critical section receives correct values
+    // from processor that was previously in the user's critical section.
+    __TBB_load_with_acquire(going);
+}
+
+//! A method to acquire queuing_mutex if it is free
+bool queuing_mutex::scoped_lock::try_acquire( queuing_mutex& m )
+{
+    __TBB_ASSERT( !this->mutex, "scoped_lock is already holding a mutex");
+
+    // Must set all fields before the fetch_and_store, because once the
+    // fetch_and_store executes, *this becomes accessible to other threads.
+    next  = NULL;
+    going = 0;
+
+    if( m.q_tail ) return false;
+    // The CAS must have release semantics, because we are
+    // "sending" the fields initialized above to other processors.
+    scoped_lock* pred = m.q_tail.compare_and_swap<tbb::release>(this, NULL);
+
+    // Force acquire so that user's critical section receives correct values
+    // from processor that was previously in the user's critical section.
+    // try_acquire should always have acquire semantic, even if failed.
+    __TBB_load_with_acquire(going);
+    if( !pred ) {
+        mutex = &m;
+        ITT_NOTIFY(sync_acquired, mutex);
+        ITT_ANNOTATE_ACQUIRE_LOCK(mutex);
+        return true;
+    } else return false;
+}
+
+//! A method to release queuing_mutex lock
+void queuing_mutex::scoped_lock::release( )
+{
+    __TBB_ASSERT(this->mutex!=NULL, "no lock acquired");
+
+    ITT_NOTIFY(sync_releasing, mutex);
+    if( !next ) {
+        if( this == mutex->q_tail.compare_and_swap<tbb::release>(NULL, this) ) {
+            // this was the only item in the queue, and the queue is now empty.
+            goto done;
+        }
+        // Someone in the queue
+        spin_wait_while_eq( next, (scoped_lock*)0 );
+    }
+    __TBB_ASSERT(next,NULL);
+    __TBB_store_with_release(next->going, 1);
+done:
+    ITT_ANNOTATE_RELEASE_LOCK(mutex);
+    initialize();
+}
+
+void queuing_mutex::internal_construct() {
+    ITT_SYNC_CREATE(this, _T("tbb::queuing_mutex"), _T(""));
+}
+
+} // namespace tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/queuing_rw_mutex.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/queuing_rw_mutex.cpp
new file mode 100644 (file)
index 0000000..4c70347
--- /dev/null
@@ -0,0 +1,505 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/** Before making any changes in the implementation, please emulate algorithmic changes
+    with SPIN tool using <TBB directory>/tools/spin_models/ReaderWriterMutex.pml.
+    There could be some code looking as "can be restructured" but its structure does matter! */
+
+#include "tbb/tbb_machine.h"
+#include "tbb/tbb_stddef.h"
+#include "tbb/tbb_machine.h"
+#include "tbb/queuing_rw_mutex.h"
+#include "itt_notify.h"
+
+
+namespace tbb {
+
+using namespace internal;
+
+//! Flag bits in a state_t that specify information about a locking request.
+enum state_t_flags {
+    STATE_NONE = 0,
+    STATE_WRITER = 1,
+    STATE_READER = 1<<1,
+    STATE_READER_UNBLOCKNEXT = 1<<2,
+    STATE_COMBINED_WAITINGREADER = STATE_READER | STATE_READER_UNBLOCKNEXT,
+    STATE_ACTIVEREADER = 1<<3,
+    STATE_COMBINED_READER = STATE_COMBINED_WAITINGREADER | STATE_ACTIVEREADER,
+    STATE_UPGRADE_REQUESTED = 1<<4,
+    STATE_UPGRADE_WAITING = 1<<5,
+    STATE_UPGRADE_LOSER = 1<<6,
+    STATE_COMBINED_UPGRADING = STATE_UPGRADE_WAITING | STATE_UPGRADE_LOSER
+};
+
+const unsigned char RELEASED = 0;
+const unsigned char ACQUIRED = 1;
+template<typename T>
+inline atomic<T>& as_atomic( T& t ) {
+    return *(atomic<T>*)&t;
+}
+
+inline bool queuing_rw_mutex::scoped_lock::try_acquire_internal_lock()
+{
+    return as_atomic(internal_lock).compare_and_swap<tbb::acquire>(ACQUIRED,RELEASED) == RELEASED;
+}
+
+inline void queuing_rw_mutex::scoped_lock::acquire_internal_lock()
+{
+    // Usually, we would use the test-test-and-set idiom here, with exponential backoff.
+    // But so far, experiments indicate there is no value in doing so here.
+    while( !try_acquire_internal_lock() ) {
+        __TBB_Pause(1);
+    }
+}
+
+inline void queuing_rw_mutex::scoped_lock::release_internal_lock()
+{
+    __TBB_store_with_release(internal_lock,RELEASED);
+}
+
+inline void queuing_rw_mutex::scoped_lock::wait_for_release_of_internal_lock()
+{
+    spin_wait_until_eq(internal_lock, RELEASED);
+}
+
+inline void queuing_rw_mutex::scoped_lock::unblock_or_wait_on_internal_lock( uintptr_t flag ) {
+    if( flag )
+        wait_for_release_of_internal_lock();
+    else
+        release_internal_lock();
+}
+
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+    // Workaround for overzealous compiler warnings
+    #pragma warning (push)
+    #pragma warning (disable: 4311 4312)
+#endif
+
+//! A view of a T* with additional functionality for twiddling low-order bits.
+template<typename T>
+class tricky_atomic_pointer: no_copy {
+public:
+    typedef typename atomic_rep<sizeof(T*)>::word word;
+
+    template<memory_semantics M>
+    static T* fetch_and_add( T* volatile * location, word addend ) {
+        return reinterpret_cast<T*>( atomic_traits<sizeof(T*),M>::fetch_and_add(location, addend) );
+    }
+    template<memory_semantics M>
+    static T* fetch_and_store( T* volatile * location, T* value ) {
+        return reinterpret_cast<T*>( atomic_traits<sizeof(T*),M>::fetch_and_store(location, reinterpret_cast<word>(value)) );
+    }
+    template<memory_semantics M>
+    static T* compare_and_swap( T* volatile * location, T* value, T* comparand ) {
+        return reinterpret_cast<T*>(
+                 atomic_traits<sizeof(T*),M>::compare_and_swap(location, reinterpret_cast<word>(value),
+                                                              reinterpret_cast<word>(comparand))
+               );
+    }
+
+    T* & ref;
+    tricky_atomic_pointer( T*& original ) : ref(original) {};
+    tricky_atomic_pointer( T* volatile & original ) : ref(original) {};
+    T* operator&( word operand2 ) const {
+        return reinterpret_cast<T*>( reinterpret_cast<word>(ref) & operand2 );
+    }
+    T* operator|( word operand2 ) const {
+        return reinterpret_cast<T*>( reinterpret_cast<word>(ref) | operand2 );
+    }
+};
+
+typedef tricky_atomic_pointer<queuing_rw_mutex::scoped_lock> tricky_pointer;
+
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+    // Workaround for overzealous compiler warnings
+    #pragma warning (pop)
+#endif
+
+//! Mask for low order bit of a pointer.
+static const tricky_pointer::word FLAG = 0x1;
+
+inline
+uintptr get_flag( queuing_rw_mutex::scoped_lock* ptr ) { 
+    return uintptr(tricky_pointer(ptr)&FLAG);
+}
+
+//------------------------------------------------------------------------
+// Methods of queuing_rw_mutex::scoped_lock
+//------------------------------------------------------------------------
+
+void queuing_rw_mutex::scoped_lock::acquire( queuing_rw_mutex& m, bool write )
+{
+    __TBB_ASSERT( !this->mutex, "scoped_lock is already holding a mutex");
+
+    // Must set all fields before the fetch_and_store, because once the
+    // fetch_and_store executes, *this becomes accessible to other threads.
+    mutex = &m;
+    prev  = NULL;
+    next  = NULL;
+    going = 0;
+    state = state_t(write ? STATE_WRITER : STATE_READER);
+    internal_lock = RELEASED;
+
+    queuing_rw_mutex::scoped_lock* pred = m.q_tail.fetch_and_store<tbb::release>(this);
+
+    if( write ) {       // Acquiring for write
+
+        if( pred ) {
+            ITT_NOTIFY(sync_prepare, mutex);
+            pred = tricky_pointer(pred) & ~FLAG;
+            __TBB_ASSERT( !( tricky_pointer(pred) & FLAG ), "use of corrupted pointer!" );
+            __TBB_ASSERT( !pred->next, "the predecessor has another successor!");
+            // ensure release semantics on IPF
+           __TBB_store_with_release(pred->next,this);
+            spin_wait_until_eq(going, 1);
+        }
+
+    } else {            // Acquiring for read
+#if DO_ITT_NOTIFY
+        bool sync_prepare_done = false;
+#endif
+        if( pred ) {
+            unsigned short pred_state;
+            __TBB_ASSERT( !this->prev, "the predecessor is already set" );
+            if( tricky_pointer(pred)&FLAG ) {
+                /* this is only possible if pred is an upgrading reader and it signals us to wait */
+                pred_state = STATE_UPGRADE_WAITING;
+                pred = tricky_pointer(pred) & ~FLAG;
+            } else {
+                // Load pred->state now, because once pred->next becomes
+                // non-NULL, we must assume that *pred might be destroyed.
+                pred_state = pred->state.compare_and_swap<tbb::acquire>(STATE_READER_UNBLOCKNEXT, STATE_READER);
+            }
+            this->prev = pred;
+            __TBB_ASSERT( !( tricky_pointer(pred) & FLAG ), "use of corrupted pointer!" );
+            __TBB_ASSERT( !pred->next, "the predecessor has another successor!");
+            // ensure release semantics on IPF
+           __TBB_store_with_release(pred->next,this);
+            if( pred_state != STATE_ACTIVEREADER ) {
+#if DO_ITT_NOTIFY
+                sync_prepare_done = true;
+                ITT_NOTIFY(sync_prepare, mutex);
+#endif
+                spin_wait_until_eq(going, 1);
+            }
+        }
+        unsigned short old_state = state.compare_and_swap<tbb::acquire>(STATE_ACTIVEREADER, STATE_READER);
+        if( old_state!=STATE_READER ) {
+#if DO_ITT_NOTIFY
+            if( !sync_prepare_done )
+                ITT_NOTIFY(sync_prepare, mutex);
+#endif
+            // Failed to become active reader -> need to unblock the next waiting reader first
+            __TBB_ASSERT( state==STATE_READER_UNBLOCKNEXT, "unexpected state" );
+            spin_wait_while_eq(next, (scoped_lock*)NULL);
+            /* state should be changed before unblocking the next otherwise it might finish
+               and another thread can get our old state and left blocked */
+            state = STATE_ACTIVEREADER;
+            // ensure release semantics on IPF
+           __TBB_store_with_release(next->going,1);
+        }
+    }
+
+    ITT_NOTIFY(sync_acquired, mutex);
+
+    // Force acquire so that user's critical section receives correct values
+    // from processor that was previously in the user's critical section.
+    __TBB_load_with_acquire(going);
+}
+
+bool queuing_rw_mutex::scoped_lock::try_acquire( queuing_rw_mutex& m, bool write )
+{
+    __TBB_ASSERT( !this->mutex, "scoped_lock is already holding a mutex");
+
+    // Must set all fields before the fetch_and_store, because once the
+    // fetch_and_store executes, *this becomes accessible to other threads.
+    prev  = NULL;
+    next  = NULL;
+    going = 0;
+    state = state_t(write ? STATE_WRITER : STATE_ACTIVEREADER);
+    internal_lock = RELEASED;
+
+    if( m.q_tail ) return false;
+    // The CAS must have release semantics, because we are
+    // "sending" the fields initialized above to other processors.
+    queuing_rw_mutex::scoped_lock* pred = m.q_tail.compare_and_swap<tbb::release>(this, NULL);
+
+    // Force acquire so that user's critical section receives correct values
+    // from processor that was previously in the user's critical section.
+    // try_acquire should always have acquire semantic, even if failed.
+    __TBB_load_with_acquire(going);
+
+    if( !pred ) {
+        mutex = &m;
+        ITT_NOTIFY(sync_acquired, mutex);
+        return true;
+    } else return false;
+
+}
+
+void queuing_rw_mutex::scoped_lock::release( )
+{
+    __TBB_ASSERT(this->mutex!=NULL, "no lock acquired");
+
+    ITT_NOTIFY(sync_releasing, mutex);
+
+    if( state == STATE_WRITER ) { // Acquired for write
+
+        // The logic below is the same as "writerUnlock", but restructured to remove "return" in the middle of routine.
+        // In the statement below, acquire semantics of reading 'next' is required
+        // so that following operations with fields of 'next' are safe.
+        scoped_lock* n = __TBB_load_with_acquire(next);
+        if( !n ) {
+            if( this == mutex->q_tail.compare_and_swap<tbb::release>(NULL, this) ) {
+                // this was the only item in the queue, and the queue is now empty.
+                goto done;
+            }
+            spin_wait_while_eq( next, (scoped_lock*)NULL );
+            n = next;
+        }
+        n->going = 2; // protect next queue node from being destroyed too early
+        if( n->state==STATE_UPGRADE_WAITING ) {
+            // the next waiting for upgrade means this writer was upgraded before.
+            acquire_internal_lock();
+            queuing_rw_mutex::scoped_lock* tmp = tricky_pointer::fetch_and_store<tbb::release>(&(n->prev), NULL);
+            n->state = STATE_UPGRADE_LOSER;
+            __TBB_store_with_release(n->going,1);
+            unblock_or_wait_on_internal_lock(get_flag(tmp));
+        } else {
+            __TBB_ASSERT( state & (STATE_COMBINED_WAITINGREADER | STATE_WRITER), "unexpected state" );
+            __TBB_ASSERT( !( tricky_pointer(n->prev) & FLAG ), "use of corrupted pointer!" );
+            n->prev = NULL;
+            // ensure release semantics on IPF
+            __TBB_store_with_release(n->going,1);
+        }
+
+    } else { // Acquired for read
+
+        queuing_rw_mutex::scoped_lock *tmp = NULL;
+retry:
+        // Addition to the original paper: Mark this->prev as in use
+        queuing_rw_mutex::scoped_lock *pred = tricky_pointer::fetch_and_add<tbb::acquire>(&(this->prev), FLAG);
+
+        if( pred ) {
+            if( !(pred->try_acquire_internal_lock()) )
+            {
+                // Failed to acquire the lock on pred. The predecessor either unlinks or upgrades.
+                // In the second case, it could or could not know my "in use" flag - need to check
+                tmp = tricky_pointer::compare_and_swap<tbb::release>(&(this->prev), pred, tricky_pointer(pred)|FLAG );
+                if( !(tricky_pointer(tmp)&FLAG) ) {
+                    // Wait for the predecessor to change this->prev (e.g. during unlink)
+                    spin_wait_while_eq( this->prev, tricky_pointer(pred)|FLAG );
+                    // Now owner of pred is waiting for _us_ to release its lock
+                    pred->release_internal_lock();
+                }
+                else ; // The "in use" flag is back -> the predecessor didn't get it and will release itself; nothing to do
+
+                tmp = NULL;
+                goto retry;
+            }
+            __TBB_ASSERT(pred && pred->internal_lock==ACQUIRED, "predecessor's lock is not acquired");
+            this->prev = pred;
+            acquire_internal_lock();
+
+            __TBB_store_with_release(pred->next,reinterpret_cast<scoped_lock *>(NULL));
+
+            if( !next && this != mutex->q_tail.compare_and_swap<tbb::release>(pred, this) ) {
+                spin_wait_while_eq( next, (void*)NULL );
+            }
+            __TBB_ASSERT( !get_flag(next), "use of corrupted pointer" );
+
+            // ensure acquire semantics of reading 'next'
+            if( __TBB_load_with_acquire(next) ) { // I->next != nil
+                // Equivalent to I->next->prev = I->prev but protected against (prev[n]&FLAG)!=0
+                tmp = tricky_pointer::fetch_and_store<tbb::release>(&(next->prev), pred);
+                // I->prev->next = I->next;
+                __TBB_ASSERT(this->prev==pred, NULL);
+                __TBB_store_with_release(pred->next,next);
+            }
+            // Safe to release in the order opposite to acquiring which makes the code simplier
+            pred->release_internal_lock();
+
+        } else { // No predecessor when we looked
+            acquire_internal_lock();  // "exclusiveLock(&I->EL)"
+            // ensure acquire semantics of reading 'next'
+            scoped_lock* n = __TBB_load_with_acquire(next);
+            if( !n ) {
+                if( this != mutex->q_tail.compare_and_swap<tbb::release>(NULL, this) ) {
+                    spin_wait_while_eq( next, (scoped_lock*)NULL );
+                    n = next;
+                } else {
+                    goto unlock_self;
+                }
+            }
+            n->going = 2; // protect next queue node from being destroyed too early
+            tmp = tricky_pointer::fetch_and_store<tbb::release>(&(n->prev), NULL);
+            // ensure release semantics on IPF
+            __TBB_store_with_release(n->going,1);
+        }
+unlock_self:
+        unblock_or_wait_on_internal_lock(get_flag(tmp));
+    }
+done:
+    spin_wait_while_eq( going, 2 );
+
+    initialize();
+}
+
+bool queuing_rw_mutex::scoped_lock::downgrade_to_reader()
+{
+    __TBB_ASSERT( state==STATE_WRITER, "no sense to downgrade a reader" );
+
+    ITT_NOTIFY(sync_releasing, mutex);
+
+    // ensure acquire semantics of reading 'next'
+    if( ! __TBB_load_with_acquire(next) ) {
+        state = STATE_READER;
+        if( this==mutex->q_tail ) {
+            unsigned short old_state = state.compare_and_swap<tbb::release>(STATE_ACTIVEREADER, STATE_READER);
+            if( old_state==STATE_READER ) {
+                goto downgrade_done;
+            }
+        }
+        /* wait for the next to register */
+        spin_wait_while_eq( next, (void*)NULL );
+    }
+    __TBB_ASSERT( next, "still no successor at this point!" );
+    if( next->state & STATE_COMBINED_WAITINGREADER )
+        __TBB_store_with_release(next->going,1);
+    else if( next->state==STATE_UPGRADE_WAITING )
+        // the next waiting for upgrade means this writer was upgraded before.
+        next->state = STATE_UPGRADE_LOSER;
+    state = STATE_ACTIVEREADER;
+
+downgrade_done:
+    return true;
+}
+
+bool queuing_rw_mutex::scoped_lock::upgrade_to_writer()
+{
+    __TBB_ASSERT( state==STATE_ACTIVEREADER, "only active reader can be upgraded" );
+
+    queuing_rw_mutex::scoped_lock * tmp;
+    queuing_rw_mutex::scoped_lock * me = this;
+
+    ITT_NOTIFY(sync_releasing, mutex);
+    state = STATE_UPGRADE_REQUESTED;
+requested:
+    __TBB_ASSERT( !( tricky_pointer(next) & FLAG ), "use of corrupted pointer!" );
+    acquire_internal_lock();
+    if( this != mutex->q_tail.compare_and_swap<tbb::release>(tricky_pointer(me)|FLAG, this) ) {
+        spin_wait_while_eq( next, (void*)NULL );
+        queuing_rw_mutex::scoped_lock * n;
+        n = tricky_pointer::fetch_and_add<tbb::acquire>(&(this->next), FLAG);
+        unsigned short n_state = n->state;
+        /* the next reader can be blocked by our state. the best thing to do is to unblock it */
+        if( n_state & STATE_COMBINED_WAITINGREADER )
+            __TBB_store_with_release(n->going,1);
+        tmp = tricky_pointer::fetch_and_store<tbb::release>(&(n->prev), this);
+        unblock_or_wait_on_internal_lock(get_flag(tmp));
+        if( n_state & (STATE_COMBINED_READER | STATE_UPGRADE_REQUESTED) ) {
+            // save n|FLAG for simplicity of following comparisons
+            tmp = tricky_pointer(n)|FLAG;
+            atomic_backoff backoff;
+            while(next==tmp) {
+                if( state & STATE_COMBINED_UPGRADING ) {
+                    if( __TBB_load_with_acquire(next)==tmp )
+                        next = n;
+                    goto waiting;
+                }
+                backoff.pause();
+            }
+            __TBB_ASSERT(next!=(tricky_pointer(n)|FLAG), NULL);
+            goto requested;
+        } else {
+            __TBB_ASSERT( n_state & (STATE_WRITER | STATE_UPGRADE_WAITING), "unexpected state");
+            __TBB_ASSERT( (tricky_pointer(n)|FLAG)==next, NULL);
+            next = n;
+        }
+    } else {
+        /* We are in the tail; whoever comes next is blocked by q_tail&FLAG */
+        release_internal_lock();
+    } // if( this != mutex->q_tail... )
+    state.compare_and_swap<tbb::acquire>(STATE_UPGRADE_WAITING, STATE_UPGRADE_REQUESTED);
+
+waiting:
+    __TBB_ASSERT( !( tricky_pointer(next) & FLAG ), "use of corrupted pointer!" );
+    __TBB_ASSERT( state & STATE_COMBINED_UPGRADING, "wrong state at upgrade waiting_retry" );
+    __TBB_ASSERT( me==this, NULL );
+    ITT_NOTIFY(sync_prepare, mutex);
+    /* if noone was blocked by the "corrupted" q_tail, turn it back */
+    mutex->q_tail.compare_and_swap<tbb::release>( this, tricky_pointer(me)|FLAG );
+    queuing_rw_mutex::scoped_lock * pred;
+    pred = tricky_pointer::fetch_and_add<tbb::acquire>(&(this->prev), FLAG);
+    if( pred ) {
+        bool success = pred->try_acquire_internal_lock();
+        pred->state.compare_and_swap<tbb::release>(STATE_UPGRADE_WAITING, STATE_UPGRADE_REQUESTED);
+        if( !success ) {
+            tmp = tricky_pointer::compare_and_swap<tbb::release>(&(this->prev), pred, tricky_pointer(pred)|FLAG );
+            if( tricky_pointer(tmp)&FLAG ) {
+                spin_wait_while_eq(this->prev, pred);
+                pred = this->prev;
+            } else {
+                spin_wait_while_eq( this->prev, tricky_pointer(pred)|FLAG );
+                pred->release_internal_lock();
+            }
+        } else {
+            this->prev = pred;
+            pred->release_internal_lock();
+            spin_wait_while_eq(this->prev, pred);
+            pred = this->prev;
+        }
+        if( pred )
+            goto waiting;
+    } else {
+        // restore the corrupted prev field for possible further use (e.g. if downgrade back to reader)
+        this->prev = pred;
+    }
+    __TBB_ASSERT( !pred && !this->prev, NULL );
+
+    // additional lifetime issue prevention checks
+    // wait for the successor to finish working with my fields
+    wait_for_release_of_internal_lock();
+    // now wait for the predecessor to finish working with my fields
+    spin_wait_while_eq( going, 2 );
+    // there is an acquire semantics statement in the end of spin_wait_while_eq.
+
+    bool result = ( state != STATE_UPGRADE_LOSER );
+    state = STATE_WRITER;
+    going = 1;
+
+    ITT_NOTIFY(sync_acquired, mutex);
+    return result;
+}
+
+void queuing_rw_mutex::internal_construct() {
+    ITT_SYNC_CREATE(this, _T("tbb::queuing_rw_mutex"), _T(""));
+}
+
+} // namespace tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/recursive_mutex.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/recursive_mutex.cpp
new file mode 100644 (file)
index 0000000..95e6290
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/recursive_mutex.h"
+#include "itt_notify.h"
+
+namespace tbb {
+
+void recursive_mutex::scoped_lock::internal_acquire( recursive_mutex& m ) {
+#if _WIN32||_WIN64
+    switch( m.state ) {
+      case INITIALIZED: 
+        // since we cannot look into the internal of the CriticalSection object
+        // we won't know how many times the lock has been acquired, and thus
+        // we won't know when we may safely set the state back to INITIALIZED
+        // if we change the state to HELD as in mutex.cpp.  thus, we won't change
+        // the state for recursive_mutex
+        EnterCriticalSection( &m.impl );
+        break;
+      case DESTROYED: 
+        __TBB_ASSERT(false,"recursive_mutex::scoped_lock: mutex already destroyed"); 
+        break;
+      default: 
+        __TBB_ASSERT(false,"recursive_mutex::scoped_lock: illegal mutex state");
+        break;
+    }
+#else
+    int error_code = pthread_mutex_lock(&m.impl);
+    __TBB_ASSERT_EX(!error_code,"recursive_mutex::scoped_lock: pthread_mutex_lock failed");
+#endif /* _WIN32||_WIN64 */
+    my_mutex = &m;
+}
+
+void recursive_mutex::scoped_lock::internal_release() {
+    __TBB_ASSERT( my_mutex, "recursive_mutex::scoped_lock: not holding a mutex" );
+#if _WIN32||_WIN64    
+    switch( my_mutex->state ) {
+      case INITIALIZED: 
+        LeaveCriticalSection( &my_mutex->impl );
+        break;
+      case DESTROYED: 
+        __TBB_ASSERT(false,"recursive_mutex::scoped_lock: mutex already destroyed"); 
+        break;
+      default: 
+        __TBB_ASSERT(false,"recursive_mutex::scoped_lock: illegal mutex state");
+        break;
+    }
+#else
+     int error_code = pthread_mutex_unlock(&my_mutex->impl);
+     __TBB_ASSERT_EX(!error_code, "recursive_mutex::scoped_lock: pthread_mutex_unlock failed");
+#endif /* _WIN32||_WIN64 */
+     my_mutex = NULL;
+}
+
+bool recursive_mutex::scoped_lock::internal_try_acquire( recursive_mutex& m ) {
+#if _WIN32||_WIN64
+    switch( m.state ) {
+      case INITIALIZED: 
+        break;
+      case DESTROYED: 
+        __TBB_ASSERT(false,"recursive_mutex::scoped_lock: mutex already destroyed"); 
+        break;
+      default: 
+        __TBB_ASSERT(false,"recursive_mutex::scoped_lock: illegal mutex state");
+        break;
+    }
+#endif /* _WIN32||_WIN64 */
+    bool result;
+#if _WIN32||_WIN64
+    result = TryEnterCriticalSection(&m.impl)!=0;
+#else
+    result = pthread_mutex_trylock(&m.impl)==0;
+#endif /* _WIN32||_WIN64 */
+    if( result )
+        my_mutex = &m;
+    return result;
+}
+
+void recursive_mutex::internal_construct() {
+#if _WIN32||_WIN64
+    InitializeCriticalSection(&impl);
+    state = INITIALIZED;
+#else
+    pthread_mutexattr_t mtx_attr;
+    int error_code = pthread_mutexattr_init( &mtx_attr );
+    if( error_code )
+        tbb::internal::handle_perror(error_code,"recursive_mutex: pthread_mutexattr_init failed");
+
+    pthread_mutexattr_settype( &mtx_attr, PTHREAD_MUTEX_RECURSIVE );
+    error_code = pthread_mutex_init( &impl, &mtx_attr );
+    if( error_code )
+        tbb::internal::handle_perror(error_code,"recursive_mutex: pthread_mutex_init failed");
+    pthread_mutexattr_destroy( &mtx_attr );
+#endif /* _WIN32||_WIN64*/    
+    ITT_SYNC_CREATE(&impl, _T("tbb::recursive_mutex"), _T(""));
+}
+
+void recursive_mutex::internal_destroy() {
+#if _WIN32||_WIN64
+    switch( state ) {
+      case INITIALIZED:
+        DeleteCriticalSection(&impl);
+        break;
+      case DESTROYED: 
+        __TBB_ASSERT(false,"recursive_mutex: already destroyed");
+        break;
+      default: 
+         __TBB_ASSERT(false,"recursive_mutex: illegal state for destruction");
+         break;
+    }
+    state = DESTROYED;
+#else
+    int error_code = pthread_mutex_destroy(&impl); 
+    __TBB_ASSERT_EX(!error_code,"recursive_mutex: pthread_mutex_destroy failed");
+#endif /* _WIN32||_WIN64 */
+}
+
+} // namespace tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/spin_mutex.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/spin_mutex.cpp
new file mode 100644 (file)
index 0000000..d8dc1dc
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/tbb_machine.h"
+#include "tbb/spin_mutex.h"
+#include "itt_notify.h"
+#include "itt_annotate.h"
+#include "tbb_misc.h"
+
+namespace tbb {
+
+void spin_mutex::scoped_lock::internal_acquire( spin_mutex& m ) {
+    __TBB_ASSERT( !my_mutex, "already holding a lock on a spin_mutex" );
+    ITT_NOTIFY(sync_prepare, &m);
+    my_unlock_value = __TBB_LockByte(m.flag);
+    my_mutex = &m;
+    ITT_NOTIFY(sync_acquired, &m);
+    ITT_ANNOTATE_ACQUIRE_LOCK(my_mutex);
+}
+
+void spin_mutex::scoped_lock::internal_release() {
+    __TBB_ASSERT( my_mutex, "release on spin_mutex::scoped_lock that is not holding a lock" );
+    __TBB_ASSERT( !(my_unlock_value&1), "corrupted scoped_lock?" );
+
+    ITT_NOTIFY(sync_releasing, my_mutex);
+    __TBB_store_with_release(my_mutex->flag, static_cast<unsigned char>(my_unlock_value));
+    ITT_ANNOTATE_RELEASE_LOCK(my_mutex);
+    my_mutex = NULL;
+}
+
+bool spin_mutex::scoped_lock::internal_try_acquire( spin_mutex& m ) {
+    __TBB_ASSERT( !my_mutex, "already holding a lock on a spin_mutex" );
+    bool result = bool( __TBB_TryLockByte(m.flag) );
+    if( result ) {
+        my_unlock_value = 0;
+        my_mutex = &m;
+        ITT_NOTIFY(sync_acquired, &m);
+        ITT_ANNOTATE_ACQUIRE_LOCK(my_mutex);
+    }
+    return result;
+}
+
+void spin_mutex::internal_construct() {
+    ITT_SYNC_CREATE(this, _T("tbb::spin_mutex"), _T(""));
+}
+
+} // namespace tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/spin_rw_mutex.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/spin_rw_mutex.cpp
new file mode 100644 (file)
index 0000000..8006de6
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/spin_rw_mutex.h"
+#include "tbb/tbb_machine.h"
+#include "itt_notify.h"
+#include "itt_annotate.h"
+
+#if defined(_MSC_VER) && defined(_Wp64)
+    // Workaround for overzealous compiler warnings in /Wp64 mode
+    #pragma warning (disable: 4244)
+#endif
+
+namespace tbb {
+
+template<typename T> // a template can work with private spin_rw_mutex::state_t
+static inline T CAS(volatile T &addr, T newv, T oldv) {
+    // ICC (9.1 and 10.1 tried) unable to do implicit conversion 
+    // from "volatile T*" to "volatile void*", so explicit cast added.
+    return T(__TBB_CompareAndSwapW((volatile void *)&addr, (intptr_t)newv, (intptr_t)oldv));
+}
+
+//! Acquire write lock on the given mutex.
+bool spin_rw_mutex_v3::internal_acquire_writer()
+{
+    ITT_NOTIFY(sync_prepare, this);
+    internal::atomic_backoff backoff;
+    for(;;) {
+        state_t s = const_cast<volatile state_t&>(state); // ensure reloading
+        if( !(s & BUSY) ) { // no readers, no writers
+            if( CAS(state, WRITER, s)==s )
+                break; // successfully stored writer flag
+            backoff.reset(); // we could be very close to complete op.
+        } else if( !(s & WRITER_PENDING) ) { // no pending writers
+            __TBB_AtomicOR(&state, WRITER_PENDING);
+        }
+        backoff.pause();
+    }
+    ITT_NOTIFY(sync_acquired, this);
+    ITT_ANNOTATE_ACQUIRE_WRITE_LOCK(this);
+    return false;
+}
+
+//! Release writer lock on the given mutex
+void spin_rw_mutex_v3::internal_release_writer() 
+{
+    ITT_NOTIFY(sync_releasing, this);
+    __TBB_AtomicAND( &state, READERS );
+    ITT_ANNOTATE_RELEASE_WRITE_LOCK(this);
+}
+
+//! Acquire read lock on given mutex.
+void spin_rw_mutex_v3::internal_acquire_reader() 
+{
+    ITT_NOTIFY(sync_prepare, this);
+    internal::atomic_backoff backoff;
+    for(;;) {
+        state_t s = const_cast<volatile state_t&>(state); // ensure reloading
+        if( !(s & (WRITER|WRITER_PENDING)) ) { // no writer or write requests
+            state_t t = (state_t)__TBB_FetchAndAddW( &state, (intptr_t) ONE_READER );
+            if( !( t&WRITER )) 
+                break; // successfully stored increased number of readers
+            // writer got there first, undo the increment
+            __TBB_FetchAndAddW( &state, -(intptr_t)ONE_READER );
+        }
+        backoff.pause();
+    }
+
+    ITT_NOTIFY(sync_acquired, this);
+    __TBB_ASSERT( state & READERS, "invalid state of a read lock: no readers" );
+    ITT_ANNOTATE_ACQUIRE_READ_LOCK(this);
+}
+
+//! Upgrade reader to become a writer.
+/** Returns true if the upgrade happened without re-acquiring the lock and false if opposite */
+bool spin_rw_mutex_v3::internal_upgrade() 
+{
+    state_t s = state;
+    __TBB_ASSERT( s & READERS, "invalid state before upgrade: no readers " );
+    // check and set writer-pending flag
+    // required conditions: either no pending writers, or we are the only reader
+    // (with multiple readers and pending writer, another upgrade could have been requested)
+    while( (s & READERS)==ONE_READER || !(s & WRITER_PENDING) ) {
+        state_t old_s = s;
+        if( (s=CAS(state, s | WRITER | WRITER_PENDING, s))==old_s ) {
+            internal::atomic_backoff backoff;
+            ITT_NOTIFY(sync_prepare, this);
+            // the state should be 0...0111, i.e. 1 reader and waiting writer;
+            // both new readers and writers are blocked
+            while( (state & READERS) != ONE_READER ) // more than 1 reader
+                backoff.pause(); 
+            __TBB_ASSERT((state&(WRITER_PENDING|WRITER))==(WRITER_PENDING|WRITER),"invalid state when upgrading to writer");
+
+            __TBB_FetchAndAddW( &state,  - (intptr_t)(ONE_READER+WRITER_PENDING));
+            ITT_NOTIFY(sync_acquired, this);
+            ITT_ANNOTATE_RELEASE_READ_LOCK(this);
+            ITT_ANNOTATE_ACQUIRE_WRITE_LOCK(this);
+            return true; // successfully upgraded
+        }
+    }
+    // slow reacquire
+    internal_release_reader();
+    return internal_acquire_writer(); // always returns false
+}
+
+//! Downgrade writer to a reader
+void spin_rw_mutex_v3::internal_downgrade() {
+    ITT_NOTIFY(sync_releasing, this);
+    __TBB_FetchAndAddW( &state, (intptr_t)(ONE_READER-WRITER));
+    __TBB_ASSERT( state & READERS, "invalid state after downgrade: no readers" );
+    ITT_ANNOTATE_RELEASE_WRITE_LOCK(this);
+    ITT_ANNOTATE_ACQUIRE_READ_LOCK(this);
+}
+
+//! Release read lock on the given mutex
+void spin_rw_mutex_v3::internal_release_reader()
+{
+    __TBB_ASSERT( state & READERS, "invalid state of a read lock: no readers" );
+    ITT_NOTIFY(sync_releasing, this); // release reader
+    __TBB_FetchAndAddWrelease( &state,-(intptr_t)ONE_READER);
+    ITT_ANNOTATE_RELEASE_READ_LOCK(this);
+}
+
+//! Try to acquire write lock on the given mutex
+bool spin_rw_mutex_v3::internal_try_acquire_writer()
+{
+    // for a writer: only possible to acquire if no active readers or writers
+    state_t s = state;
+    if( !(s & BUSY) ) // no readers, no writers; mask is 1..1101
+        if( CAS(state, WRITER, s)==s ) {
+            ITT_NOTIFY(sync_acquired, this);
+            ITT_ANNOTATE_ACQUIRE_WRITE_LOCK(this);
+            return true; // successfully stored writer flag
+        }
+    return false;
+}
+
+//! Try to acquire read lock on the given mutex
+bool spin_rw_mutex_v3::internal_try_acquire_reader()
+{
+    // for a reader: acquire if no active or waiting writers
+    state_t s = state;
+    if( !(s & (WRITER|WRITER_PENDING)) ) { // no writers
+        state_t t = (state_t)__TBB_FetchAndAddW( &state, (intptr_t) ONE_READER );
+        if( !( t&WRITER )) {  // got the lock
+            ITT_NOTIFY(sync_acquired, this);
+            ITT_ANNOTATE_ACQUIRE_READ_LOCK(this);
+            return true; // successfully stored increased number of readers
+        }
+        // writer got there first, undo the increment
+        __TBB_FetchAndAddW( &state, -(intptr_t)ONE_READER );
+    }
+    return false;
+}
+
+
+void spin_rw_mutex_v3::internal_construct() {
+    ITT_SYNC_CREATE(this, _T("tbb::spin_rw_mutex"), _T(""));
+}
+} // namespace tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/task.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/task.cpp
new file mode 100644 (file)
index 0000000..4574343
--- /dev/null
@@ -0,0 +1,5130 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/* This file contains the TBB task scheduler. There are many classes
+   lumped together here because very few are exposed to the outside
+   world, and by putting them in a single translation unit, the
+   compiler's optimizer might be able to do a better job. */
+
+#if USE_PTHREAD
+
+    // Some pthreads documentation says that <pthread.h> must be first header.
+    #include <pthread.h>
+    #define __TBB_THREAD_ROUTINE 
+
+#elif USE_WINTHREAD
+
+    #include <windows.h>
+    #include <process.h>        /* Need _beginthreadex from there */
+    #include <malloc.h>         /* Need _alloca from there */
+    #define __TBB_THREAD_ROUTINE WINAPI
+
+#else
+
+    #error Must define USE_PTHREAD or USE_WINTHREAD
+
+#endif
+
+#include <cassert>
+#include <cstddef>
+#include <cstdlib>
+#include <cstring>
+#include <cstdio>
+#include <new>
+#include "tbb/tbb_stddef.h"
+
+/* Temporarily change "private" to "public" while including "tbb/task.h".
+   This hack allows us to avoid publishing internal types and methods
+   in the public header files just for sake of friend declarations. */
+#define private public
+#include "tbb/task.h"
+#if __TBB_EXCEPTIONS
+#include "tbb/tbb_exception.h"
+#endif /* __TBB_EXCEPTIONS */
+#undef private
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/tbb_machine.h"
+#include "tbb/mutex.h"
+#include "tbb/atomic.h"
+#include "tbb/gate.h"
+#if __TBB_SCHEDULER_OBSERVER
+#include "tbb/task_scheduler_observer.h"
+#include "tbb/spin_rw_mutex.h"
+#include "tbb/aligned_space.h"
+#endif /* __TBB_SCHEDULER_OBSERVER */
+#if __TBB_EXCEPTIONS
+#include "tbb/spin_mutex.h"
+#endif /* __TBB_EXCEPTIONS */
+
+#include "tbb/partitioner.h"
+
+#if __TBB_RML
+#include "../rml/include/rml_tbb.h"
+
+namespace tbb {
+    namespace internal {
+        namespace rml {
+            tbb_server* make_private_server( tbb_client& client );
+        }
+    }
+}
+#endif /*__TBB_RML */
+
+#if DO_TBB_TRACE
+#include <cstdio>
+#define TBB_TRACE(x) ((void)std::printf x)
+#else
+#define TBB_TRACE(x) ((void)(0))
+#endif /* DO_TBB_TRACE */
+
+#if TBB_USE_ASSERT
+#define COUNT_TASK_NODES 1
+#endif /* TBB_USE_ASSERT */
+
+/* If nonzero, then gather statistics */
+#ifndef STATISTICS
+#define STATISTICS 0
+#endif /* STATISTICS */
+
+#if STATISTICS
+#define GATHER_STATISTIC(x) (x)
+#else
+#define GATHER_STATISTIC(x) ((void)0)
+#endif /* STATISTICS */
+
+#if __TBB_EXCEPTIONS
+// The standard offsetof macro does not work for us since its usage is restricted 
+// by POD-types only. Using 0x1000 (not NULL) is necessary to appease GCC.
+#define __TBB_offsetof(class_name, member_name) \
+    ((ptrdiff_t)&(reinterpret_cast<class_name*>(0x1000)->member_name) - 0x1000)
+// Returns address of the object containing a member with the given name and address
+#define __TBB_get_object_addr(class_name, member_name, member_addr) \
+    reinterpret_cast<class_name*>((char*)member_addr - __TBB_offsetof(class_name, member_name))
+#endif /* __TBB_EXCEPTIONS */
+
+// Macro __TBB_ALLOC_TASK_ARGS is an attempt to get rid of ugly ifdefs 
+// in the main part of the code. It drops some of its arguments depending on
+// whether the corresponding controlling macros are defined. 
+// The first argument is just a convenience allowing to keep comma before the macro usage.
+#if __TBB_EXCEPTIONS
+#if __TBB_TASK_DEQUE
+    #define __TBB_ALLOC_TASK_ARGS(arg1, depth, context) arg1, context
+#else /* !__TBB_TASK_DEQUE */
+    #define __TBB_ALLOC_TASK_ARGS(arg1, depth, context) arg1, depth, context
+#endif /* !__TBB_TASK_DEQUE */
+#else /* !__TBB_EXCEPTIONS */
+#if __TBB_TASK_DEQUE
+    #define __TBB_ALLOC_TASK_ARGS(arg1, depth, context) arg1
+#else /* !__TBB_TASK_DEQUE */
+    #define __TBB_ALLOC_TASK_ARGS(arg1, depth, context) arg1, depth
+#endif /* !__TBB_TASK_DEQUE */
+#endif /* !__TBB_EXCEPTIONS */
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Workaround for overzealous compiler warnings
+    // These particular warnings are so ubquitous that no attempt is made to narrow 
+    // the scope of the warnings.
+    #pragma warning (disable: 4100 4127 4312 4244 4267 4706)
+#endif
+
+// internal headers
+#include "tbb_misc.h"
+#include "itt_notify.h"
+#include "tls.h"
+#include "itt_annotate.h"
+
+namespace tbb {
+
+using namespace std;
+
+#if DO_ITT_NOTIFY
+    const tchar 
+            *SyncType_GlobalLock = _T("TbbGlobalLock"),
+            *SyncType_Scheduler = _T("%Constant")
+            ;
+    const tchar 
+            *SyncObj_LibraryInitialization = _T("TbbLibraryInitialization"),
+            *SyncObj_SchedulerInitialization = _T("TbbSchedulerInitialization"),
+            *SyncObj_SchedulersList = _T("TbbSchedulersList"),
+            *SyncObj_WorkerLifeCycleMgmt = _T("TBB Scheduler"),
+            *SyncObj_TaskStealingLoop = _T("TBB Scheduler"),
+            *SyncObj_WorkerTaskPool = _T("TBB Scheduler"),
+            *SyncObj_MasterTaskPool = _T("TBB Scheduler"),
+            *SyncObj_TaskPoolSpinning = _T("TBB Scheduler"),
+            *SyncObj_Mailbox = _T("TBB Scheduler"),
+            *SyncObj_TaskReturnList = _T("TBB Scheduler"),
+            *SyncObj_GateLock = _T("TBB Scheduler"),
+            *SyncObj_Gate = _T("TBB Scheduler"),
+            *SyncObj_ContextsList = _T("TBB Scheduler")
+            ;
+#endif /* DO_ITT_NOTIFY */
+
+namespace internal {
+
+const stack_size_type MByte = 1<<20;
+#if !defined(__TBB_WORDSIZE)
+const stack_size_type ThreadStackSize = 1*MByte;
+#elif __TBB_WORDSIZE<=4
+const stack_size_type ThreadStackSize = 2*MByte;
+#else
+const stack_size_type ThreadStackSize = 4*MByte;
+#endif
+
+#if USE_PTHREAD
+typedef void* thread_routine_return_type;
+#else
+typedef unsigned thread_routine_return_type;
+#endif
+
+#if __TBB_TASK_DEQUE
+//------------------------------------------------------------------------
+// General utility section
+//------------------------------------------------------------------------
+
+#if TBB_USE_ASSERT
+    #define __TBB_POISON_DEQUE 1
+#endif /* TBB_USE_ASSERT */
+
+#if __TBB_POISON_DEQUE
+    #if __ia64__
+        task* const poisoned_taskptr = (task*)0xDDEEAADDDEADBEEF;
+    #elif _WIN64
+        task* const poisoned_taskptr = (task*)0xDDEEAADDDEADBEEF;
+    #else
+        task* const poisoned_taskptr = (task*)0xDEADBEEF;
+    #endif
+
+    #define __TBB_POISON_TASK_PTR(ptr) ptr = poisoned_taskptr
+    #define __TBB_ASSERT_VALID_TASK_PTR(ptr) __TBB_ASSERT( ptr != poisoned_taskptr, "task pointer in the deque is poisoned" )
+#else /* !__TBB_POISON_DEQUE */
+    #define __TBB_POISON_TASK_PTR(ptr) ((void)0)
+    #define __TBB_ASSERT_VALID_TASK_PTR(ptr) ((void)0)
+#endif /* !__TBB_POISON_DEQUE */
+
+
+//! Vector that grows without reallocations, and stores items in the reverse order.
+/** Requires to initialize its first segment with a preallocated memory chunk
+    (usually it is static array or an array allocated on the stack).
+    The second template parameter specifies maximal number of segments. Each next 
+    segment is twice as large as the previous one. **/
+template<typename T, size_t max_segments = 16>
+class fast_reverse_vector
+{
+public:
+    fast_reverse_vector ( T* initial_segment, size_t segment_size )
+        : m_cur_segment(initial_segment)
+        , m_cur_segment_size(segment_size)
+        , m_pos(segment_size)
+        , m_num_segments(0)
+        , m_size(0)
+    {
+        __TBB_ASSERT ( initial_segment && segment_size, "Nonempty initial segment must be supplied");
+    }
+
+    ~fast_reverse_vector ()
+    {
+        for ( size_t i = 1; i < m_num_segments; ++i )
+            NFS_Free( m_segments[i] );
+    }
+
+    size_t size () const { return m_size + m_cur_segment_size - m_pos; }
+
+    void push_back ( const T& val )
+    {
+        if ( !m_pos ) {
+            m_segments[m_num_segments++] = m_cur_segment;
+            __TBB_ASSERT ( m_num_segments < max_segments, "Maximal capacity exceeded" );
+            m_size += m_cur_segment_size;
+            m_cur_segment_size *= 2;
+            m_pos = m_cur_segment_size;
+            m_cur_segment = (T*)NFS_Allocate( m_cur_segment_size * sizeof(T), 1, NULL );
+        }
+        m_cur_segment[--m_pos] = val;
+    }
+
+    //! Copies the contents of the vector into the dst array. 
+    /** Can only be used when T is a POD type, as copying does not invoke copy constructors. **/
+    void copy_memory ( T* dst ) const
+    {
+        size_t size = m_cur_segment_size - m_pos;
+        memcpy( dst, m_cur_segment + m_pos, size * sizeof(T) );
+        dst += size;
+        size = m_cur_segment_size / 2;
+        for ( long i = (long)m_num_segments - 1; i >= 0; --i ) {
+            memcpy( dst, m_segments[i], size * sizeof(T) );
+            dst += size;
+            size /= 2;
+        }
+    }
+
+protected:
+    //! The current (not completely filled) segment
+    T       *m_cur_segment;
+
+    //! Capacity of m_cur_segment
+    size_t  m_cur_segment_size;
+
+    //! Insertion position in m_cur_segment
+    size_t  m_pos;
+
+    //! Array of filled segments (has fixed size specified by the second template parameter)
+    T       *m_segments[max_segments];
+    
+    //! Number of filled segments (the size of m_segments)
+    size_t  m_num_segments;
+
+    //! Number of items in the segments in m_segments
+    size_t  m_size;
+
+}; // class fast_reverse_vector
+
+//------------------------------------------------------------------------
+// End of general utility section
+//------------------------------------------------------------------------
+#endif /* __TBB_TASK_DEQUE */
+
+//! Alignment for a task object
+const size_t task_alignment = 16;
+
+//! Number of bytes reserved for a task prefix
+/** If not exactly sizeof(task_prefix), the extra bytes *precede* the task_prefix. */
+const size_t task_prefix_reservation_size = ((sizeof(internal::task_prefix)-1)/task_alignment+1)*task_alignment;
+
+template<typename SchedulerTraits> class CustomScheduler;
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+template<typename SchedulerTraits> class VirtualScheduler;
+#endif
+
+#if !__TBB_TASK_DEQUE
+typedef task::depth_type depth_type;
+#endif /* !__TBB_TASK_DEQUE */
+
+class mail_outbox;
+
+struct task_proxy: public task {
+    static const intptr pool_bit = 1;
+    static const intptr mailbox_bit = 2;
+    /* All but two low-order bits represent a (task*).
+       Two low-order bits mean:
+       1 = proxy is/was/will be in task pool
+       2 = proxy is/was/will be in mailbox */
+    intptr task_and_tag;
+
+    //! Pointer to next task_proxy in a mailbox
+    task_proxy* next_in_mailbox;
+
+    //! Mailbox to which this was mailed.
+    mail_outbox* outbox;
+};
+
+//! Internal representation of mail_outbox, without padding.
+class unpadded_mail_outbox {
+protected:
+    //! Pointer to first task_proxy in mailbox, or NULL if box is empty. 
+    task_proxy* my_first;
+
+    //! Pointer to last task_proxy in mailbox, or NULL if box is empty. 
+    /** Low-order bit set to 1 to represent lock on the box. */
+    task_proxy* my_last;
+
+    //! Owner of mailbox is not executing a task, and has drained its own task pool.
+    bool my_is_idle;
+};
+
+//! Class representing where mail is put.
+/** Padded to occupy a cache line. */
+class mail_outbox: unpadded_mail_outbox {
+    char pad[NFS_MaxLineSize-sizeof(unpadded_mail_outbox)];
+
+    //! Acquire lock on the box.
+    task_proxy* acquire() {
+        atomic_backoff backoff;
+        for(;;) {
+            // No fence on load, because subsequent compare-and-swap has the necessary fence.
+            intptr last = (intptr)my_last;
+            if( (last&1)==0 && __TBB_CompareAndSwapW(&my_last,last|1,last)==last) {
+                __TBB_ASSERT( (my_first==NULL)==((intptr(my_last)&~1)==0), NULL );
+                return (task_proxy*)last;
+            }
+            backoff.pause();
+        }
+    }
+    task_proxy* internal_pop() {
+        //! No fence on load of my_first, because if it is NULL, there's nothing further to read from another thread.
+        task_proxy* result = my_first;
+        if( result ) {
+            if( task_proxy* f = __TBB_load_with_acquire(result->next_in_mailbox) ) {
+                // No lock required
+                __TBB_store_with_release( my_first, f );
+            } else {
+                // acquire() has the necessary fence.
+                task_proxy* l = acquire();
+                __TBB_ASSERT(result==my_first,NULL); 
+                if( !(my_first = result->next_in_mailbox) ) 
+                    l=0;
+                __TBB_store_with_release( my_last, l );
+            }
+        }
+        return result;
+    }
+public:
+    friend class mail_inbox;
+
+    //! Push task_proxy onto the mailbox queue of another thread.
+    void push( task_proxy& t ) {
+        __TBB_ASSERT(&t!=NULL, NULL);
+        t.next_in_mailbox = NULL; 
+        if( task_proxy* l = acquire() ) {
+            l->next_in_mailbox = &t;
+        } else {
+            my_first=&t;
+        }
+        // Fence required because caller is sending the task_proxy to another thread.
+        __TBB_store_with_release( my_last, &t );
+    }
+#if TBB_USE_ASSERT
+    //! Verify that *this is initialized empty mailbox.
+    /** Raise assertion if *this is not in initialized state, or sizeof(this) is wrong.
+        Instead of providing a constructor, we provide this assertion, because for
+        brevity and speed, we depend upon a memset to initialize instances of this class */
+    void assert_is_initialized() const {
+        __TBB_ASSERT( sizeof(*this)==NFS_MaxLineSize, NULL );
+        __TBB_ASSERT( !my_first, NULL );
+        __TBB_ASSERT( !my_last, NULL );
+        __TBB_ASSERT( !my_is_idle, NULL );
+    }
+#endif /* TBB_USE_ASSERT */
+
+    //! Drain the mailbox 
+    intptr drain() {
+        intptr k = 0;
+        // No fences here because other threads have already quit.
+        for( ; task_proxy* t = my_first; ++k ) {
+            my_first = t->next_in_mailbox;
+            NFS_Free((char*)t-task_prefix_reservation_size);
+        }
+        return k;  
+    }
+
+    //! True if thread that owns this mailbox is looking for work.
+    bool recipient_is_idle() {
+        return my_is_idle;
+    }
+};
+
+//! Class representing source of mail.
+class mail_inbox {
+    //! Corresponding sink where mail that we receive will be put.
+    mail_outbox* my_putter;
+public:
+    //! Construct unattached inbox
+    mail_inbox() : my_putter(NULL) {}
+
+    //! Attach inbox to a corresponding outbox. 
+    void attach( mail_outbox& putter ) {
+        __TBB_ASSERT(!my_putter,"already attached");
+        my_putter = &putter;
+    }
+    //! Detach inbox from its outbox
+    void detach() {
+        __TBB_ASSERT(my_putter,"not attached");
+        my_putter = NULL;
+    }
+    //! Get next piece of mail, or NULL if mailbox is empty.
+    task_proxy* pop() {
+        return my_putter->internal_pop();
+    }
+    void set_is_idle( bool value ) {
+        if( my_putter ) {
+            __TBB_ASSERT( my_putter->my_is_idle==!value, NULL );
+            my_putter->my_is_idle = value;
+        }
+    }
+#if DO_ITT_NOTIFY
+    //! Get pointer to corresponding outbox used for ITT_NOTIFY calls.
+    void* outbox() const {return my_putter;}
+#endif /* DO_ITT_NOTIFY */ 
+};
+
+#if __TBB_SCHEDULER_OBSERVER
+//------------------------------------------------------------------------
+// observer_proxy
+//------------------------------------------------------------------------
+class observer_proxy {
+    friend class task_scheduler_observer_v3;
+    //! Reference count used for garbage collection.
+    /** 1 for reference from my task_scheduler_observer.
+        1 for each local_last_observer_proxy that points to me. 
+        No accounting for predecessor in the global list. 
+        No accounting for global_last_observer_proxy that points to me. */
+    atomic<int> gc_ref_count;
+    //! Pointer to next task_scheduler_observer 
+    /** Valid even when *this has been removed from the global list. */
+    observer_proxy* next; 
+    //! Pointer to previous task_scheduler_observer in global list.
+    observer_proxy* prev; 
+    //! Associated observer
+    task_scheduler_observer* observer;
+    //! Account for removing reference from p.  No effect if p is NULL.
+    void remove_ref_slow();
+    void remove_from_list(); 
+    observer_proxy( task_scheduler_observer_v3& wo ); 
+public:
+    static observer_proxy* process_list( observer_proxy* local_last, bool is_worker, bool is_entry );
+};
+#endif /* __TBB_SCHEDULER_OBSERVER */
+
+#if !__TBB_TASK_DEQUE
+//------------------------------------------------------------------------
+// TaskPool
+//------------------------------------------------------------------------
+
+//! Prefix to a TaskPool
+class TaskPoolPrefix {
+    static const unsigned null_arena_index = ~0u;
+
+    unsigned arena_index;
+
+    //! Index of first non-empty element of TaskPool::array
+    depth_type steal_begin;
+
+    friend class GenericScheduler;
+    friend class TaskPool;
+}; // class TaskPoolPrefix
+
+//! Pool of tasks, organized as a deque.
+class TaskPool {
+    typedef size_t size_type;
+
+    static const size_type min_array_size = (NFS_MaxLineSize-sizeof(TaskPoolPrefix))/sizeof(task*);
+
+    /** Must be last field, because it is really array of indeterminate length. */
+    task* array[min_array_size];
+
+    //! Get reference to prefix portion
+    TaskPoolPrefix& prefix() const {return ((TaskPoolPrefix*)(void*)this)[-1];}
+
+    //! Return number of bytes required to allocate a pool with given number of array elements.
+    static size_t byte_size( size_type array_size ) {
+        return sizeof(TaskPoolPrefix)+array_size*sizeof(task*);
+    }
+
+    //! Allocate TaskPool object with given number of array elements.
+    static TaskPool* allocate_task_pool( size_type array_size ) {
+        __TBB_ASSERT( array_size>0, NULL );
+        size_t n = byte_size(array_size);
+        unsigned char* storage = (unsigned char*)NFS_Allocate( n, 1, NULL );
+        memset( storage, 0, n );
+        return (TaskPool*)(storage+sizeof(TaskPoolPrefix));
+    }
+
+    //! Deallocate a TaskPool that was allocated by method allocate.
+    void free_task_pool() {
+        __TBB_ASSERT( this, "attempt to free NULL TaskPool" );
+        NFS_Free( &prefix() );
+    }
+
+    friend class GenericScheduler;
+    template<typename SchedulerTraits> friend class internal::CustomScheduler;
+
+#if TBB_USE_ASSERT
+    bool assert_okay() const {
+        __TBB_ASSERT( this!=NULL, NULL );
+        __TBB_ASSERT( prefix().steal_begin>=-4, NULL );
+        return true;
+    }
+#endif /* TBB_USE_ASSERT */
+}; // class TaskPool
+#endif /* !__TBB_TASK_DEQUE */
+
+//------------------------------------------------------------------------
+// Arena
+//------------------------------------------------------------------------
+
+class Arena;
+class GenericScheduler;
+
+struct WorkerDescriptor {
+    //! NULL until worker is published.  -1 if worker should not be published.
+    GenericScheduler* scheduler;
+
+#if !__TBB_RML
+    Arena* arena;
+
+    //! Start worker thread for this descriptor.
+    void start_one_worker_thread();
+#endif /* !__TBB_RML */
+};
+
+//! The useful contents of an ArenaPrefix
+class UnpaddedArenaPrefix: no_copy 
+#if __TBB_RML
+   ,rml::tbb_client
+#endif /* __TBB_RML */
+{
+    friend class GenericScheduler;
+    template<typename SchedulerTraits> friend class internal::CustomScheduler;
+    friend class Arena;
+    friend class Governor;
+    friend struct WorkerDescriptor;
+
+#if __TBB_TASK_DEQUE
+    //! Arena slot to try to acquire first for the next new master.
+    unsigned limit;
+#else /* !__TBB_TASK_DEQUE */
+    //! One more than index of highest arena slot currently in use.
+    atomic<size_t> limit;
+#endif /* !__TBB_TASK_DEQUE */
+
+    //! Number of masters that own this arena.
+    /** This may be smaller than the number of masters who have entered the arena. */
+    unsigned number_of_masters;
+
+    //! Total number of slots in the arena
+    const unsigned number_of_slots;
+
+    //! Number of workers that belong to this arena
+    const unsigned number_of_workers;
+
+#if __TBB_RML
+    //! Pointer to the RML server object that services requests for this arena.
+    rml::tbb_server* server;
+    //! Counter used to allocate job indices
+    tbb::atomic<size_t> next_job_index;
+#else
+    //! Number of workers still using this arena (plus one if a master is still using the arena)
+    atomic<int> gc_ref_count;
+#endif /* !__TBB_RML */
+
+    //! Stack size of worker threads
+    stack_size_type stack_size;
+
+    //! Array of workers.
+    WorkerDescriptor* worker_list;
+
+#if COUNT_TASK_NODES
+    //! Net number of nodes that have been allocated from heap.
+    /** Updated each time a scheduler is destroyed. */
+    atomic<intptr> task_node_count;
+#endif /* COUNT_TASK_NODES */
+
+    //! Gate at which worker threads wait until a master spawns a task.
+    Gate gate;
+protected:
+    UnpaddedArenaPrefix( unsigned number_of_slots_, unsigned number_of_workers_ ) :
+        number_of_masters(1),
+        number_of_slots(number_of_slots_),
+        number_of_workers(number_of_workers_)
+    {
+#if COUNT_TASK_NODES
+        task_node_count = 0;
+#endif /* COUNT_TASK_NODES */
+        limit = number_of_workers_;
+#if __TBB_RML
+        server = NULL;
+        stack_size = 0;
+        next_job_index = 0;
+#else
+        gc_ref_count = number_of_workers_+1; 
+#endif /* !__TBB_RML */
+    }
+#if __TBB_RML
+    void open_connection_to_rml();
+
+private:
+    //! Return reference to corresponding arena.
+    Arena& arena();
+
+    /*override*/ version_type version() const {
+        return 0;
+    }
+
+    /*override*/ unsigned max_job_count() const {
+        return number_of_workers;
+    }
+
+    /*override*/ size_t min_stack_size() const {
+        return stack_size;
+    }
+
+    /*override*/ policy_type policy() const {
+        return throughput;
+    }
+
+    /*override*/ job* create_one_job();
+
+    /*override*/ void cleanup( job& j );
+
+    /*override*/ void acknowledge_close_connection();
+
+    /*override*/ void process( job& j );
+#endif /* __TBB_RML */
+};
+
+//! The prefix to Arena with padding.
+class ArenaPrefix: public UnpaddedArenaPrefix {
+    //! Padding to fill out to multiple of cache line size.
+    char pad[(sizeof(UnpaddedArenaPrefix)/NFS_MaxLineSize+1)*NFS_MaxLineSize-sizeof(UnpaddedArenaPrefix)];
+
+public:
+    ArenaPrefix( unsigned number_of_slots_, unsigned number_of_workers_ ) :
+        UnpaddedArenaPrefix(number_of_slots_,number_of_workers_)
+    {
+    }
+};
+
+#if __TBB_TASK_DEQUE
+
+struct ArenaSlot {
+    // Task pool (the deque of task pointers) of the scheduler that owns this slot
+    /** Also is used to specify if the slot is empty or locked:
+         0 - empty
+        -1 - locked **/
+    task** task_pool;
+
+    //! Index of the first ready task in the deque.
+    /** Modified by thieves, and by the owner during compaction/reallocation **/
+    size_t head;
+
+    //! Padding to avoid false sharing caused by the thieves accessing this slot
+    char pad1[NFS_MaxLineSize - sizeof(size_t) - sizeof(task**)];
+
+    //! Index of the element following the last ready task in the deque.
+    /** Modified by the owner thread. **/
+    size_t tail;
+
+    //! Padding to avoid false sharing caused by the thieves accessing the next slot
+    char pad2[NFS_MaxLineSize - sizeof(size_t)];
+};
+
+#else /* !__TBB_TASK_DEQUE */
+
+struct UnpaddedArenaSlot {
+    //! Holds copy of task_pool->deepest and a lock bit
+    /** Computed as 2*task_pool->deepest+(is_locked).
+        I.e., the low order bit indicates whether the slot is locked. 
+        -2 denotes an empty task pool
+        -3 denotes an unused arena slot that is locked
+        -4 denotes an unused arena slot that is unlocked */
+    depth_type steal_end;
+    TaskPool* task_pool;
+    bool owner_waits;
+};
+
+struct ArenaSlot: UnpaddedArenaSlot {
+    char pad[NFS_MaxLineSize-sizeof(UnpaddedArenaSlot)];
+};
+#endif /* !__TBB_TASK_DEQUE */
+
+class Arena {
+#if __TBB_RML
+    friend class UnpaddedArenaPrefix;
+#endif /* __TBB_RML */
+    friend class GenericScheduler;
+    template<typename SchedulerTraits> friend class internal::CustomScheduler;
+    friend class Governor;
+    friend struct WorkerDescriptor;
+
+    //! Get reference to prefix portion
+    ArenaPrefix& prefix() const {return ((ArenaPrefix*)(void*)this)[-1];}
+
+    //! Get reference to mailbox corresponding to given affinity_id.
+    mail_outbox& mailbox( affinity_id id ) {
+        __TBB_ASSERT( 0<id, "id must be positive integer" );
+        __TBB_ASSERT( id <= prefix().number_of_slots, "id out of bounds" );
+        return ((mail_outbox*)&prefix())[-(int)id];
+    }
+
+    //! Allocate an instance of Arena, and prepare everything to start workers.
+    static Arena* allocate_arena( unsigned number_of_slots, unsigned number_of_workers, stack_size_type stack_size );
+
+    void free_arena() {
+        // Drain mailboxes
+        // TODO: each scheduler should plug-and-drain its own mailbox when it terminates.
+        intptr drain_count = 0;
+        for( unsigned i=1; i<=prefix().number_of_slots; ++i )
+            drain_count += mailbox(i).drain();
+#if COUNT_TASK_NODES
+        prefix().task_node_count -= drain_count;
+#if !TEST_ASSEMBLY_ROUTINES
+        if( prefix().task_node_count ) {
+            fprintf(stderr,"warning: leaked %ld task objects\n", long(prefix().task_node_count));
+        }
+#endif /* !TEST_ASSEMBLY_ROUTINES */
+#endif /* COUNT_TASK_NODES */
+        void* storage  = &mailbox(prefix().number_of_slots);
+        delete[] prefix().worker_list;
+        prefix().~ArenaPrefix();
+        NFS_Free( storage );
+    }
+
+    //! No tasks to steal since last snapshot was taken
+    static const Gate::state_t SNAPSHOT_EMPTY = 0;
+
+    //! At least one task has been offered for stealing since the last snapshot started
+    static const Gate::state_t SNAPSHOT_FULL = -1;
+
+#if __TBB_RML
+    //! Server is going away and hence further calls to adjust_job_count_estimate are unsafe.
+    static const Gate::state_t SNAPSHOT_SERVER_GOING_AWAY = -2;
+#else
+    //! Gate is permanently open
+    static const Gate::state_t SNAPSHOT_PERMANENTLY_OPEN = -2;
+#endif /* !__TBB_RML */
+
+    //! If necessary, inform gate that task was added to pool recently.
+    void mark_pool_full();
+
+#if __TBB_RML
+    //! Check if pool is empty.
+    /** Return true if pool is empty or being cleaned up. */
+    bool check_if_pool_is_empty();
+#else
+    //! Wait while pool is empty
+    /** Return true if pool transitioned from non-empty to empty while thread was waiting. */
+    bool wait_while_pool_is_empty();
+#endif /* __TBB_RML */
+
+    //! Terminate worker threads
+    /** Wait for worker threads to complete. */
+    void terminate_workers();
+
+#if !__TBB_RML
+    //! Remove a reference to the arena, and free the arena if no references remain.
+    void remove_gc_reference();
+#endif /* !__TBB_RML */
+
+#if COUNT_TASK_NODES
+    //! Returns the number of task objects "living" in worker threads
+    inline intptr workers_task_node_count();
+#endif
+
+    /** Must be last field */
+    ArenaSlot slot[1];
+};
+
+//------------------------------------------------------------------------
+//! Traits classes for scheduler
+//------------------------------------------------------------------------
+
+struct DefaultSchedulerTraits {
+    static const int id = 0;
+    static const bool itt_possible = true;
+    static const bool has_slow_atomic = false;
+    static const bool execute_when_spawned = false;
+};
+
+struct IntelSchedulerTraits {
+    static const int id = 1;
+    static const bool itt_possible = false;
+#if __TBB_x86_32||__TBB_x86_64
+    static const bool has_slow_atomic = true;
+#else
+    static const bool has_slow_atomic = false;
+#endif /* __TBB_x86_32||__TBB_x86_64 */
+    static const bool execute_when_spawned = false;
+};
+
+struct VirtualSchedulerTraits {
+    static const int id = 2;
+    static const bool itt_possible = true;
+    static const bool has_slow_atomic = false;
+    static const bool execute_when_spawned = true;
+};
+
+//------------------------------------------------------------------------
+// Class __TBB_InitOnce
+//------------------------------------------------------------------------
+
+//! Class that supports TBB initialization. 
+/** It handles acquisition and release of global resources (e.g. TLS) during startup and shutdown,
+    as well as synchronization for DoOneTimeInitializations. */
+class __TBB_InitOnce {
+    friend void DoOneTimeInitializations();
+
+    static atomic<int> count;
+
+    //! Platform specific code to acquire resources.
+    static void acquire_resources();
+
+    //! Platform specific code to release resources.
+    static void release_resources();
+
+    static bool InitializationDone;
+#if USE_PTHREAD
+    static pthread_mutex_t  InitializationLock;
+public:
+    static void lock() {
+        int status = pthread_mutex_lock( &InitializationLock );
+        if( status )
+            handle_perror(status,"pthread_mutex_lock");
+    }
+    static void unlock() {
+        int status = pthread_mutex_unlock( &InitializationLock );
+        if( status )
+            handle_perror(status,"pthread_mutex_unlock");
+    }
+#else /* USE_WINTHREAD */
+    static CRITICAL_SECTION InitializationLock;
+public:
+    static void lock()   { EnterCriticalSection( &InitializationLock ); }
+    static void unlock() { LeaveCriticalSection( &InitializationLock ); }
+#endif
+
+    static bool initialization_done() {
+        return __TBB_load_with_acquire(InitializationDone);
+    }
+
+    //! Add initial reference to resources. 
+    /** We assume that dynamic loading of the library prevents any other threads from entering the library
+        until this constructor has finished running. */
+    __TBB_InitOnce() { add_ref(); }
+
+    //! Remove the initial reference to resources.
+    /** This is not necessarily the last reference if other threads are still running.
+        If the extra reference from DoOneTimeInitializations is present, remove it as well.*/
+    ~__TBB_InitOnce();
+
+    //! Add reference to resources.  If first reference added, acquire the resources.
+    static void add_ref() {
+        if( ++count==1 )
+            acquire_resources();
+    }
+    //! Remove reference to resources.  If last reference removed, release the resources.
+    static void remove_ref() {
+        int k = --count;
+        __TBB_ASSERT(k>=0,"removed __TBB_InitOnce ref that was not added?"); 
+        if( k==0 ) 
+            release_resources();
+    }
+}; // class __TBB_InitOnce
+
+//------------------------------------------------------------------------
+// Class Governor
+//------------------------------------------------------------------------
+
+//! The class handles access to the single instance of Arena, and to TLS to keep scheduler instances.
+/** It also supports automatic on-demand intialization of the TBB scheduler.
+    The class contains only static data members and methods.*/
+class Governor {
+    friend class __TBB_InitOnce;
+
+    static basic_tls<GenericScheduler*> theTLS;
+    static Arena* theArena;
+    static mutex  theArenaMutex;
+
+    //! Create key for thread-local storage.
+    static void create_tls() {
+#if __TBB_TASK_SCHEDULER_AUTO_INIT && USE_PTHREAD
+        int status = theTLS.create(auto_terminate);
+#else
+        int status = theTLS.create();
+#endif /* __TBB_TASK_SCHEDULER_AUTO_INIT */
+        if( status )
+            handle_perror(status, "TBB failed to initialize TLS storage\n");
+    }
+
+    //! Destroy the thread-local storage key.
+    static void destroy_tls() {
+#if TBB_USE_ASSERT
+        if( __TBB_InitOnce::initialization_done() && local_scheduler() ) 
+            fprintf(stderr, "TBB is unloaded while tbb::task_scheduler_init object is alive?");
+#endif
+        int status = theTLS.destroy();
+        if( status )
+            handle_perror(status, "TBB failed to destroy TLS storage");
+    }
+    
+#if __TBB_TASK_SCHEDULER_AUTO_INIT
+    //! The internal routine to undo automatic initialization.
+    /** The signature is written with void* so that the routine
+        can be the destructor argument to pthread_key_create. */
+    static void auto_terminate(void* scheduler);
+#endif /* __TBB_TASK_SCHEDULER_AUTO_INIT */
+
+public:
+    //! Obtain the instance of arena to register a new master thread
+    /** If there is no active arena, create one. */
+    static Arena* obtain_arena( int number_of_threads, stack_size_type thread_stack_size )
+    {
+        Arena* a;
+        mutex::scoped_lock lock( theArenaMutex );
+        a = theArena;
+        if( a ) {
+            a->prefix().number_of_masters += 1;
+        } else {
+            if( number_of_threads==task_scheduler_init::automatic )
+                number_of_threads = task_scheduler_init::default_num_threads();
+            a = Arena::allocate_arena( 2*number_of_threads, number_of_threads-1,
+                                       thread_stack_size?thread_stack_size:ThreadStackSize );
+            __TBB_ASSERT( a->prefix().number_of_masters==1, NULL );
+            // Publish the Arena.  
+            // A memory release fence is not required here, because workers have not started yet,
+            // and concurrent masters inspect theArena while holding theArenaMutex.
+            __TBB_ASSERT( !theArena, NULL );
+            theArena = a;
+#if __TBB_RML
+            // Must create server under lock, otherwise second master might see arena without a server.
+            a->prefix().open_connection_to_rml();
+#endif /* __TBB_RML */
+            lock.release();
+#if !__TBB_RML
+            // Attach threads to workers
+            if( number_of_threads>1 ) // there should be worker threads
+                a->prefix().worker_list[0].start_one_worker_thread();
+#endif /* __TBB_RML */
+        }
+        return a;
+    }
+
+    //! Dereference arena when a master thread stops using TBB.
+    /** If no more masters in the arena, terminate workers and destroy it. */
+    static void finish_with_arena() {
+        Arena* a;
+        {
+            mutex::scoped_lock lock( theArenaMutex );
+            a = theArena;
+            __TBB_ASSERT( a, "theArena is missing" );
+            if( --(a->prefix().number_of_masters) )
+                a = NULL;
+            else {
+                theArena = NULL;
+#if __TBB_RML
+                // Must do this while holding lock, otherwise terminate message might reach
+                // RML thread *after* initialize message reaches it for the next arena, which
+                // which causes TLS to be set to new value before old one is erased!
+                a->terminate_workers();
+#endif /* __TBB_RML */
+            }
+        }
+#if !__TBB_RML
+        if( a )
+            a->terminate_workers();
+#endif /* __TBB_RML */
+    }
+
+    static size_t number_of_workers_in_arena() {
+        __TBB_ASSERT( theArena, "thread did not activate a task_scheduler_init object?" );
+        // No fence required to read theArena, because it does not change after the thread starts.
+        return theArena->prefix().number_of_workers;
+    }
+
+    //! Register TBB scheduler instance in thread local storage.
+    inline static void sign_on(GenericScheduler* s);
+
+    //! Unregister TBB scheduler instance from thread local storage.
+    inline static void sign_off(GenericScheduler* s);
+
+    //! Obtain the thread local instance of TBB scheduler.
+    /** Returns NULL if this is the first time the thread has requested a scheduler.
+        It's the client's responsibility to check for the NULL, because in many
+        contexts, we can prove that it cannot be NULL. */
+    static GenericScheduler* local_scheduler() {
+        __TBB_ASSERT( __TBB_InitOnce::initialization_done(), "thread did not activate a task_scheduler_init object?" );
+        return theTLS.get();
+    }
+
+#if __TBB_TASK_SCHEDULER_AUTO_INIT
+    //! Create a thread local instance of TBB scheduler on demand.
+    static GenericScheduler* local_scheduler_with_auto_init();
+
+    //! Undo automatic initialization if necessary; call when a thread exits.
+    static void terminate_auto_initialized_scheduler() {
+        auto_terminate(theTLS.get());
+    }
+#endif /* __TBB_TASK_SCHEDULER_AUTO_INIT */
+
+}; // class Governor
+
+//------------------------------------------------------------------------
+// Begin shared data layout.
+//
+// The following global data items are read-only after initialization.
+// The first item is aligned on a 128 byte boundary so that it starts a new cache line.
+//------------------------------------------------------------------------
+
+basic_tls<GenericScheduler*> Governor::theTLS;
+Arena * Governor::theArena;
+mutex   Governor::theArenaMutex;
+
+//! Number of hardware threads
+/** One more than the default number of workers. */
+static int DefaultNumberOfThreads;
+
+//! T::id for the scheduler traits type T to use for the scheduler
+/** For example, the default value is DefaultSchedulerTraits::id. */
+static int SchedulerTraitsId;
+
+//! Counter of references to global shared resources such as TLS.
+atomic<int> __TBB_InitOnce::count;
+
+#if USE_PTHREAD
+    pthread_mutex_t  __TBB_InitOnce::InitializationLock = PTHREAD_MUTEX_INITIALIZER;
+#else
+    CRITICAL_SECTION __TBB_InitOnce::InitializationLock;
+#endif
+
+//! Flag that is set to true after one-time initializations are done.
+bool __TBB_InitOnce::InitializationDone;
+
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+static bool use_virtual_scheduler = false;
+static bool virtual_scheduler_omit_wait = false;
+static int virtual_scheduler_task_depth = 0;
+static int virtual_scheduler_last_spawn_depth = 0;
+#endif
+
+#if DO_ITT_NOTIFY
+    static bool ITT_Present;
+    static bool ITT_InitializationDone;
+#endif
+
+#if __TBB_RML
+static rml::tbb_factory rml_server_factory;
+//! Set to true if private statically linked RML server should be used instead of shared server.
+static bool use_private_rml;
+#endif /* __TBB_RML */
+
+#if (__linux__ || __APPLE__) && __GNUC__ && !(__INTEL_COMPILER && __TBB_ipf)
+    // Use GCC-style attribute to set the highest initialization priority (the lowest possible number)
+    // ICC for IA-64 has a bug in handling init_priority so skipping in this case
+    static __TBB_InitOnce __TBB_InitOnceHiddenInstance __attribute__((init_priority (101)));
+#elif !(_WIN32||_WIN64) || __TBB_TASK_CPP_DIRECTLY_INCLUDED
+    static __TBB_InitOnce __TBB_InitOnceHiddenInstance;
+#endif
+
+#if __TBB_SCHEDULER_OBSERVER
+typedef spin_rw_mutex::scoped_lock task_scheduler_observer_mutex_scoped_lock;
+/** aligned_space used here to shut up warnings when mutex destructor is called while threads are still using it. */
+static aligned_space<spin_rw_mutex,1> the_task_scheduler_observer_mutex;
+static observer_proxy* global_first_observer_proxy;
+static observer_proxy* global_last_observer_proxy;
+#endif /* __TBB_SCHEDULER_OBSERVER */
+
+//! Table of primes used by fast random-number generator.
+/** Also serves to keep anything else from being placed in the same
+    cache line as the global data items preceding it. */
+static const unsigned Primes[] = {
+    0x9e3779b1, 0xffe6cc59, 0x2109f6dd, 0x43977ab5,
+    0xba5703f5, 0xb495a877, 0xe1626741, 0x79695e6b,
+    0xbc98c09f, 0xd5bee2b3, 0x287488f9, 0x3af18231,
+    0x9677cd4d, 0xbe3a6929, 0xadc6a877, 0xdcf0674b,
+    0xbe4d6fe9, 0x5f15e201, 0x99afc3fd, 0xf3f16801,
+    0xe222cfff, 0x24ba5fdb, 0x0620452d, 0x79f149e3,
+    0xc8b93f49, 0x972702cd, 0xb07dd827, 0x6c97d5ed,
+    0x085a3d61, 0x46eb5ea7, 0x3d9910ed, 0x2e687b5b,
+    0x29609227, 0x6eb081f1, 0x0954c4e1, 0x9d114db9,
+    0x542acfa9, 0xb3e6bd7b, 0x0742d917, 0xe9f3ffa7,
+    0x54581edb, 0xf2480f45, 0x0bb9288f, 0xef1affc7,
+    0x85fa0ca7, 0x3ccc14db, 0xe6baf34b, 0x343377f7,
+    0x5ca19031, 0xe6d9293b, 0xf0a9f391, 0x5d2e980b,
+    0xfc411073, 0xc3749363, 0xb892d829, 0x3549366b,
+    0x629750ad, 0xb98294e5, 0x892d9483, 0xc235baf3,
+    0x3d2402a3, 0x6bdef3c9, 0xbec333cd, 0x40c9520f
+};
+
+#if STATISTICS
+//! Class for collecting statistics
+/** There should be only one instance of this class. 
+    Results are written to a file "statistics.txt" in tab-separated format. */
+static class statistics {
+public:
+    statistics() {
+        my_file = fopen("statistics.txt","w");
+        if( !my_file ) {
+            perror("fopen(\"statistics.txt\"\")");
+            exit(1);
+        }
+        fprintf(my_file,"%13s\t%13s\t%13s\t%13s\t%13s\t%13s\n", "execute", "steal", "mail", "proxy_execute", "proxy_steal", "proxy_bypass" );
+    }
+    ~statistics() {
+        fclose(my_file);
+    }
+    void record( long execute_count, long steal_count, long mail_received_count, 
+                 long proxy_execute_count, long proxy_steal_count, long proxy_bypass_count ) {
+        mutex::scoped_lock lock(my_mutex);
+        fprintf (my_file,"%13ld\t%13ld\t%13ld\t%13ld\t%13ld\t%13ld\n", execute_count, steal_count, mail_received_count, 
+                                                           proxy_execute_count, proxy_steal_count, proxy_bypass_count );
+    }
+private:
+    //! File into which statistics are written.
+    FILE* my_file;
+    //! Mutex that serializes accesses to my_file
+    mutex my_mutex;
+} the_statistics;
+#endif /* STATISTICS */
+
+#if __TBB_EXCEPTIONS
+    struct scheduler_list_node_t {
+        scheduler_list_node_t *my_prev,
+                              *my_next;
+    };
+
+    //! Head of the list of master thread schedulers.
+    static scheduler_list_node_t the_scheduler_list_head;
+
+    //! Mutex protecting access to the list of schedulers.
+    static mutex the_scheduler_list_mutex;
+
+//! Counter that is incremented whenever new cancellation signal is sent to a task group.
+/** Together with GenericScheduler::local_cancel_count forms cross-thread signaling
+    mechanism that allows to avoid locking at the hot path of normal execution flow.
+
+    When a descendant task group context is being registered or unregistered,
+    the global and local counters are compared. If they differ, it means that 
+    a cancellation signal is being propagated, and registration/deregistration
+    routines take slower branch that may block (at most one thread of the pool
+    can be blocked at any moment). Otherwise the control path is lock-free and fast. **/
+    static uintptr_t global_cancel_count = 0;
+
+    //! Context to be associated with dummy tasks of worker threads schedulers.
+    /** It is never used for its direct purpose, and is introduced solely for the sake 
+        of avoiding one extra conditional branch in the end of wait_for_all method. **/
+    static task_group_context dummy_context(task_group_context::isolated);
+#endif /* __TBB_EXCEPTIONS */
+
+//------------------------------------------------------------------------
+// End of shared data layout
+//------------------------------------------------------------------------
+
+//! Amount of time to pause between steals.
+/** The default values below were found to be best empirically for K-Means
+    on the 32-way Altix and 4-way (*2 for HT) fxqlin04. */
+#if __TBB_ipf
+static const long PauseTime = 1500;
+#else 
+static const long PauseTime = 80;
+#endif
+
+//------------------------------------------------------------------------
+// One-time Initializations
+//------------------------------------------------------------------------
+
+//! Defined in cache_aligned_allocator.cpp
+extern void initialize_cache_aligned_allocator();
+
+#if DO_ITT_NOTIFY
+//! Performs initialization of tools support.
+/** Defined in task.cpp. Must be called in a protected do-once manner.
+    \return true if notification hooks were installed, false otherwise. **/
+bool InitializeITT();
+
+/** Calls tools interoperability mechanisms initialization routine in a protected 
+    manner ensuring that it is done only once.
+    Used by dummy handlers only. **/
+extern "C"
+void ITT_DoOneTimeInitialization() {
+#if !TBB_USE_DEBUG
+    // In debug builds constructor of one of the static TBB mutexes is called 
+    // first and invokes proxy ITT handler before our do-once mutex is initialized.
+    // Since this kind of initialization takes place under the loader lock, it is
+    // safe to omit synchronization here.
+    __TBB_InitOnce::lock();
+#endif
+    if ( !ITT_InitializationDone ) {
+        ITT_Present = InitializeITT();
+        ITT_InitializationDone = true;
+    }
+#if !TBB_USE_DEBUG
+    __TBB_InitOnce::unlock();
+#endif
+}
+#endif /* DO_ITT_NOTIFY */
+
+//! Performs lazy one-time initializations.
+void DoOneTimeInitializations() {
+    __TBB_InitOnce::lock();
+    // No fence required for load of InitializationDone, because we are inside a critical section.
+    if( !__TBB_InitOnce::InitializationDone ) {
+        __TBB_InitOnce::add_ref();
+        if( GetBoolEnvironmentVariable("TBB_VERSION") )
+            PrintVersion();
+        bool have_itt = false;
+#if DO_ITT_NOTIFY
+        if ( !ITT_InitializationDone ) {
+            ITT_Present = InitializeITT();
+            ITT_InitializationDone = true;
+        }
+        have_itt = ITT_Present;
+#endif /* DO_ITT_NOTIFY */
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+#if DO_ITT_ANNOTATE
+        use_virtual_scheduler = Initialize_ITTAnnotate();
+#endif /* DO_ITT_ANNOTATE */
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+        initialize_cache_aligned_allocator();
+#if __TBB_RML
+        ::rml::factory::status_type status = rml_server_factory.open(); 
+        if( status!=::rml::factory::st_success ) {
+            use_private_rml = true;
+            PrintExtraVersionInfo( "RML", "private" );
+        } else {
+            PrintExtraVersionInfo( "RML", "shared" );
+            rml_server_factory.call_with_server_info( PrintRMLVersionInfo, (void*)"" );
+        }
+#endif /* __TBB_RML */
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+        if( use_virtual_scheduler ) {
+            SchedulerTraitsId = VirtualSchedulerTraits::id;
+        }
+        else if( !have_itt )
+            SchedulerTraitsId = IntelSchedulerTraits::id;
+#else /* !__TBB_PROVIDE_VIRTUAL_SCHEDULER */
+        if( !have_itt )
+            SchedulerTraitsId = IntelSchedulerTraits::id;
+#endif /* !__TBB_PROVIDE_VIRTUAL_SCHEDULER */
+#if __TBB_EXCEPTIONS
+        else {
+            ITT_SYNC_CREATE(&the_scheduler_list_mutex, SyncType_GlobalLock, SyncObj_SchedulersList);
+        }
+#endif /* __TBB_EXCEPTIONS */
+        PrintExtraVersionInfo( "SCHEDULER",
+                               SchedulerTraitsId==IntelSchedulerTraits::id ? "Intel" : 
+                               SchedulerTraitsId==VirtualSchedulerTraits::id ? "Virtual" : "default" );
+#if __TBB_EXCEPTIONS
+        the_scheduler_list_head.my_next = &the_scheduler_list_head;
+        the_scheduler_list_head.my_prev = &the_scheduler_list_head;
+#endif /* __TBB_EXCEPTIONS */
+        __TBB_InitOnce::InitializationDone = true;
+    }
+    __TBB_InitOnce::unlock();
+}
+
+//------------------------------------------------------------------------
+// Methods of class __TBB_InitOnce
+//------------------------------------------------------------------------
+
+__TBB_InitOnce::~__TBB_InitOnce() { 
+    remove_ref();
+    // It is assumed that InitializationDone is not set after file-scope destructors start running,
+    // and thus no race on InitializationDone is possible.
+    if( initialization_done() ) {
+        // Remove reference that we added in DoOneTimeInitializations.
+        remove_ref();  
+    }
+} 
+
+void __TBB_InitOnce::acquire_resources() {
+    Governor::create_tls();
+#if _WIN32||_WIN64
+    InitializeCriticalSection(&InitializationLock);
+#endif
+    ITT_SYNC_CREATE(&InitializationLock, SyncType_GlobalLock, SyncObj_LibraryInitialization);
+    ITT_SYNC_CREATE(&(Governor::theArenaMutex), SyncType_GlobalLock, SyncObj_SchedulerInitialization);
+}
+
+void __TBB_InitOnce::release_resources() {
+#if __TBB_RML
+    rml_server_factory.close();
+#endif /* __TBB_RML */
+#if _WIN32||_WIN64
+    DeleteCriticalSection(&InitializationLock);
+#endif
+    Governor::destroy_tls();
+}
+
+#if (_WIN32||_WIN64) && !__TBB_TASK_CPP_DIRECTLY_INCLUDED
+//! Windows "DllMain" that handles startup and shutdown of dynamic library.
+extern "C" bool WINAPI DllMain( HANDLE /*hinstDLL*/, DWORD reason, LPVOID /*lpvReserved*/ ) {
+    switch( reason ) {
+        case DLL_PROCESS_ATTACH:
+            __TBB_InitOnce::add_ref();
+            break;
+        case DLL_PROCESS_DETACH:
+            __TBB_InitOnce::remove_ref();
+            // It is assumed that InitializationDone is not set after DLL_PROCESS_DETACH,
+            // and thus no race on InitializationDone is possible.
+            if( __TBB_InitOnce::initialization_done() ) {
+                // Remove reference that we added in DoOneTimeInitializations.
+                __TBB_InitOnce::remove_ref();
+            }
+            break;
+#if __TBB_TASK_SCHEDULER_AUTO_INIT
+        case DLL_THREAD_DETACH:
+            Governor::terminate_auto_initialized_scheduler();
+            break;
+#endif /* __TBB_TASK_SCHEDULER_AUTO_INIT */
+    }
+    return true;
+}
+#endif /* (_WIN32||_WIN64) && !__TBB_TASK_CPP_DIRECTLY_INCLUDED */
+
+//------------------------------------------------------------------------
+// FastRandom
+//------------------------------------------------------------------------
+
+//! A fast random number generator.
+/** Uses linear congruential method. */
+class FastRandom {
+    unsigned x, a;
+public:
+    //! Get a random number.
+    unsigned short get() {
+        unsigned short r = x>>16;
+        x = x*a+1;
+        return r;
+    }
+    //! Construct a random number generator.
+    FastRandom( unsigned seed ) {
+        x = seed;
+        a = Primes[seed%(sizeof(Primes)/sizeof(Primes[0]))];
+    }
+};
+
+//------------------------------------------------------------------------
+// GenericScheduler
+//------------------------------------------------------------------------
+
+//  A pure virtual destructor should still have a body
+//  so the one for tbb::internal::scheduler::~scheduler() is provided here
+scheduler::~scheduler( ) {}
+
+#if __TBB_TASK_DEQUE
+    #define EmptyTaskPool ((task**)0u)
+    #define LockedTaskPool ((task**)~0u)
+#endif /* __TBB_TASK_DEQUE */
+
+#if __TBB_RELAXED_OWNERSHIP
+    #define LocalSpawn local_spawn
+#else
+    #define LocalSpawn spawn
+#endif
+
+//! Cilk-style task scheduler.
+/** None of the fields here are every read or written by threads other than
+    the thread that creates the instance.
+
+    Class GenericScheduler is an abstract base class that contains most of the scheduler,
+    except for tweaks specific to processors and tools (e.g. VTune).
+    The derived template class CustomScheduler<SchedulerTraits> fills in the tweaks. */
+class GenericScheduler: public scheduler 
+#if __TBB_RML
+   ,public ::rml::job
+#endif /*__TBB_RML */
+{
+#if !__TBB_TASK_DEQUE
+    typedef task::depth_type depth_type;
+#endif /* !__TBB_TASK_DEQUE */
+    friend class tbb::task;
+    friend class tbb::task_scheduler_init;
+#if __TBB_RML
+    friend class UnpaddedArenaPrefix;
+#else /* !__TBB_RML */
+    friend struct WorkerDescriptor;
+#endif /* !__TBB_RML */
+    friend class Arena;
+    friend class allocate_root_proxy;
+    friend class Governor;
+#if __TBB_EXCEPTIONS
+    friend class allocate_root_with_context_proxy;
+    friend class tbb::task_group_context;
+#endif /* __TBB_EXCEPTIONS */
+#if __TBB_SCHEDULER_OBSERVER
+    friend class task_scheduler_observer_v3;
+#endif /* __TBB_SCHEDULER_OBSERVER */
+    friend class scheduler;
+    template<typename SchedulerTraits> friend class internal::CustomScheduler;
+
+    //! If sizeof(task) is <=quick_task_size, it is handled on a free list instead of malloc'd.
+    static const size_t quick_task_size = 256-task_prefix_reservation_size;
+
+    //! Definitions for bits in task_prefix::extra_state
+    enum internal_state_t {
+        //! Tag for TBB <3.0 tasks.
+        es_version_2_task = 0,
+        //! Tag for TBB 3.0 tasks.
+        es_version_3_task = 1,
+        //! Tag for TBB 3.0 task_proxy.
+        es_task_proxy = 2,
+        //! Indicates tasks that are emulated as stolen by the virtual scheduler
+        es_virtual_steal = 4,
+        //! Set if ref_count might be changed by another thread.  Used for debugging.
+        es_ref_count_active = 0x40
+    };
+    
+    static bool is_version_3_task( task& t ) {
+        return (t.prefix().extra_state & 0x3F)==0x1;
+    }
+
+#if __TBB_TASK_DEQUE
+    //! Position in the call stack specifying its maximal filling when stealing is still allowed
+    uintptr_t my_stealing_threshold;
+#if __TBB_ipf
+    //! Position in the RSE backup area specifying its maximal filling when stealing is still allowed
+    uintptr_t my_rsb_stealing_threshold;
+#endif
+
+    static const size_t null_arena_index = ~0u;
+
+    //! Index of the arena slot the scheduler occupies now, or occupied last time.
+    size_t arena_index;
+
+    //! Capacity of ready tasks deque (number of elements - pointers to task).
+    size_t task_pool_size;
+
+    //! Dummy slot used when scheduler is not in arena
+    /** Only its "head" and "tail" members are ever used. The scheduler uses 
+        the "task_pool" shortcut to access the task deque. **/
+    ArenaSlot dummy_slot;
+
+    //! Pointer to the slot in the arena we own at the moment.
+    /** When out of arena it points to this scheduler's dummy_slot. **/
+    mutable ArenaSlot* arena_slot;
+
+#else /* !__TBB_TASK_DEQUE */
+    
+    //! Deepest non-empty level.
+    /** Not read by thieves. -1 if array is empty. */
+    depth_type deepest;
+
+    //! The physical number of slots in "array".
+    TaskPool::size_type array_size;
+
+    //! Dummy slot used when scheduler is not in arena
+    UnpaddedArenaSlot dummy_slot;
+
+    //! Pointer to my slot in the arena
+    mutable UnpaddedArenaSlot* arena_slot;
+#endif /* !__TBB_TASK_DEQUE */
+
+    bool in_arena () const { return arena_slot != &dummy_slot; }
+
+    //! The arena that I own (if master) or belong to (if worker)
+    Arena* const arena;
+
+    //! Random number generator used for picking a random victim from which to steal.
+    FastRandom random;
+
+    //! Free list of small tasks that can be reused.
+    task* free_list;
+
+    //! Innermost task whose task::execute() is running.
+    task* innermost_running_task;
+
+    //! Fake root task created by slave threads.
+    /** The task is used as the "parent" argument to method wait_for_all. */
+    task* dummy_task;
+
+    //! Reference count for scheduler
+    /** Number of task_scheduler_init objects that point to this scheduler */
+    long ref_count;
+
+    mail_inbox inbox;
+
+    void attach_mailbox( affinity_id id ) {
+        __TBB_ASSERT(id>0,NULL);
+        inbox.attach( arena->mailbox(id) );
+        my_affinity_id = id;
+    }
+
+    //! The mailbox id assigned to this scheduler.
+    /** The id is assigned upon first entry into the arena.
+        TODO: how are id's being garbage collected? 
+        TODO: master thread may enter arena and leave and then reenter.
+                We want to give it the same affinity_id upon reentry, if practical.
+      */
+    affinity_id my_affinity_id;
+
+    /* A couple of bools can be located here because space is otherwise just padding after my_affinity_id. */
+
+    //! True if this is assigned to thread local storage by registering with Governor.
+    bool is_registered;
+
+#if __TBB_TASK_SCHEDULER_AUTO_INIT
+    //! True if *this was created by automatic TBB initialization
+    bool is_auto_initialized;
+#endif /* __TBB_TASK_SCHEDULER_AUTO_INIT */
+
+#if __TBB_SCHEDULER_OBSERVER
+    //! Last observer_proxy processed by this scheduler
+    observer_proxy* local_last_observer_proxy;
+
+    //! Notify any entry observers that have been created since the last call by this thread.
+    void notify_entry_observers() {
+        local_last_observer_proxy = observer_proxy::process_list(local_last_observer_proxy,is_worker(),/*is_entry=*/true);
+    }
+    //! Notify all exit observers that this thread is no longer participating in task scheduling.
+    void notify_exit_observers( bool is_worker ) {
+        observer_proxy::process_list(local_last_observer_proxy,is_worker,/*is_entry=*/false);
+    }
+#endif /* __TBB_SCHEDULER_OBSERVER */
+
+#if COUNT_TASK_NODES
+    //! Net number of big task objects that have been allocated but not yet freed.
+    intptr task_node_count;
+#endif /* COUNT_TASK_NODES */
+
+#if STATISTICS
+    long current_active;
+    long current_length;
+    //! Number of big tasks that have been malloc'd.
+    /** To find total number of tasks malloc'd, compute (current_big_malloc+small_task_count) */
+    long current_big_malloc;
+    long execute_count;
+    //! Number of tasks stolen
+    long steal_count;
+    //! Number of tasks received from mailbox
+    long mail_received_count;
+    long proxy_execute_count;
+    long proxy_steal_count;
+    long proxy_bypass_count;
+#endif /* STATISTICS */
+
+#if __TBB_TASK_DEQUE
+    //! Sets up the data necessary for the stealing limiting heuristics
+    void init_stack_info ();
+
+    //! Returns true if stealing is allowed
+    bool can_steal () {
+        int anchor;
+#if __TBB_ipf
+        return my_stealing_threshold < (uintptr_t)&anchor && (uintptr_t)__TBB_get_bsp() < my_rsb_stealing_threshold;
+#else
+        return my_stealing_threshold < (uintptr_t)&anchor;
+#endif
+    }
+
+    //! Actions common to enter_arena and try_enter_arena
+    void do_enter_arena();
+
+    //! Used by workers to enter the arena 
+    /** Does not lock the task pool in case if arena slot has been successfully grabbed. **/
+    void enter_arena();
+
+    //! Used by masters to try to enter the arena
+    /** Does not lock the task pool in case if arena slot has been successfully grabbed. **/
+    void try_enter_arena();
+
+    //! Leave the arena
+    void leave_arena();
+
+    //! Locks victim's task pool, and returns pointer to it. The pointer can be NULL.
+    task** lock_task_pool( ArenaSlot* victim_arena_slot ) const;
+
+    //! Unlocks victim's task pool
+    void unlock_task_pool( ArenaSlot* victim_arena_slot, task** victim_task_pool ) const;
+
+#else /* !__TBB_TASK_DEQUE */
+
+    //! Try to enter the arena
+    /** On return, guarantees that task pool has been acquired. */
+    void try_enter_arena();
+
+    //! Leave the arena
+    void leave_arena( bool compress );
+#endif /* !__TBB_TASK_DEQUE */
+
+    //! Locks the local task pool
+    void acquire_task_pool() const;
+
+    //! Unlocks the local task pool
+    void release_task_pool() const;
+
+    //! Get a task from the local pool.
+#if __TBB_TASK_DEQUE
+    //! Checks if t is affinitized to another thread, and if so, bundles it as proxy.
+    /** Returns either t or proxy containing t. **/
+    task* prepare_for_spawning( task* t );
+
+    /** Called only by the pool owner.
+        Returns the pointer to the task or NULL if the pool is empty. 
+        In the latter case compacts the pool. **/
+    task* get_task();
+#else /* !__TBB_TASK_DEQUE */
+    /** Called only by the thread that owns *this.
+        Gets task only if there is one at depth d or deeper in the pool.
+        If successful, unlinks the task and returns a pointer to it.
+        Otherwise returns NULL. */
+    task* get_task( depth_type d );
+#endif /* !__TBB_TASK_DEQUE */
+
+    //! Attempt to get a task from the mailbox.
+    /** Called only by the thread that owns *this.
+        Gets a task only if there is one not yet executed by another thread.
+        If successful, unlinks the task and returns a pointer to it.
+        Otherwise returns NULL. */
+    task* get_mailbox_task();
+
+    //! True if t is a task_proxy
+    static bool is_proxy( const task& t ) {
+        return t.prefix().extra_state==es_task_proxy;
+    }
+
+    //! Extracts task pointer from task_proxy, and frees the proxy.
+    /** Return NULL if underlying task was claimed by mailbox. */
+    task* strip_proxy( task_proxy* result );
+
+    //! Steal task from another scheduler's ready pool.
+#if __TBB_TASK_DEQUE
+    task* steal_task( ArenaSlot& victim_arena_slot );
+#else /* !__TBB_TASK_DEQUE */
+    task* steal_task( UnpaddedArenaSlot& arena_slot, depth_type d );
+#endif /* !__TBB_TASK_DEQUE */
+
+#if __TBB_TASK_DEQUE
+    /** Initial size of the task deque sufficient to serve without reallocation
+        4 nested paralle_for calls with iteration space of 65535 grains each. **/
+    static const size_t min_task_pool_size = 64;
+
+    //! Allocate task pool containing at least n elements.
+    task** allocate_task_pool( size_t n );
+
+    //! Deallocate task pool that was allocated by means of allocate_task_pool.
+    static void free_task_pool( task** pool ) {
+        __TBB_ASSERT( pool, "attempt to free NULL TaskPool" );
+        NFS_Free( pool );
+    }
+
+    //! Grow ready task deque to at least n elements.
+    void grow( size_t n );
+#else /* !__TBB_TASK_DEQUE */
+    //! Grow "array" to at least "minimum_size" elements.
+    void grow( TaskPool::size_type minimum_size );
+#endif /* !__TBB_TASK_DEQUE */
+
+    //! Initialize a scheduler for a master thread.
+    static GenericScheduler* create_master( Arena* a );
+
+    //! Perform necessary cleanup when a master thread stops using TBB.
+    void cleanup_master();
+
+    //! Initialize a scheduler for a worker thread.
+    static GenericScheduler* create_worker( Arena& a, size_t index );
+
+#if !__TBB_RML
+    //! Initialize a heap (or subheap) of schedulers.
+    /** The workers are started up as a binary tree, where each vertex in the tree
+        starts any children it has. The tree is implicitly arranged like a binary heap. */
+    static GenericScheduler* create_worker_heap( WorkerDescriptor& w );
+#endif /* !__TBB_RML */
+
+    //! Top-level routine for worker threads
+    /** Argument arg is a WorkerDescriptor*, cast to a (void*). */
+    static thread_routine_return_type __TBB_THREAD_ROUTINE worker_routine( void* arg );
+
+    //! Perform necessary cleanup when a worker thread finishes.
+    static void cleanup_worker( void* arg );
+
+protected:
+    GenericScheduler( Arena* arena );
+
+#if TBB_USE_ASSERT
+    //! Check that internal data structures are in consistent state.
+    /** Raises __TBB_ASSERT failure if inconsistency is found. */
+    bool assert_okay() const;
+#endif /* TBB_USE_ASSERT */
+
+public:
+#if __TBB_RELAXED_OWNERSHIP
+    void local_spawn( task& first, task*& next );
+    void local_spawn_root_and_wait( task& first, task*& next );
+
+    /*override*/ 
+    void spawn( task& first, task*& next ) {
+        Governor::local_scheduler()->local_spawn( first, next );
+    }
+    /*override*/ 
+    void spawn_root_and_wait( task& first, task*& next ) {
+        Governor::local_scheduler()->local_spawn_root_and_wait( first, next );
+    }
+#else /* !__TBB_RELAXED_OWNERSHIP */
+    /*override*/ void spawn( task& first, task*& next );
+
+    /*override*/ void spawn_root_and_wait( task& first, task*& next );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+
+    //! Allocate and construct a scheduler object.
+    static GenericScheduler* allocate_scheduler( Arena* arena );
+
+    //! Destroy and deallocate scheduler that was created with method allocate.
+    void free_scheduler();
+
+    //! Allocate task object, either from the heap or a free list.
+    /** Returns uninitialized task object with initialized prefix. */
+    task& allocate_task( size_t number_of_bytes, 
+                       __TBB_ALLOC_TASK_ARGS(task* parent, depth_type depth, task_group_context* context) );
+
+    //! Optimization hint to free_task that enables it omit unnecessary tests and code.
+    enum hint {
+        //! No hint 
+        no_hint=0,
+        //! Task is known to have been allocated by this scheduler
+        is_local=1,
+        //! Task is known to be a small task.
+        /** Task should be returned to the free list of *some* scheduler, possibly not this scheduler. */
+        is_small=2,
+        //! Bitwise-OR of is_local and is_small.  
+        /** Task should be returned to free list of this scheduler. */
+        is_small_local=3
+    };
+
+    //! Put task on free list.
+    /** Does not call destructor. */
+    template<hint h>
+    void free_task( task& t );
+
+    void free_task_proxy( task_proxy& tp ) {
+#if TBB_USE_ASSERT
+        poison_pointer( tp.outbox );
+        poison_pointer( tp.next_in_mailbox );
+        tp.task_and_tag = 0xDEADBEEF;
+#endif /* TBB_USE_ASSERT */
+        free_task<is_small>(tp);
+    }
+
+    //! Return task object to the memory allocator.
+    void deallocate_task( task& t ) {
+#if TBB_USE_ASSERT
+        task_prefix& p = t.prefix();
+        p.state = 0xFF;
+        p.extra_state = 0xFF; 
+        poison_pointer(p.next);
+#endif /* TBB_USE_ASSERT */
+        NFS_Free((char*)&t-task_prefix_reservation_size);
+#if COUNT_TASK_NODES
+        task_node_count -= 1;
+#endif /* COUNT_TASK_NODES */
+    }
+
+    //! True if running on a worker thread, false otherwise.
+    inline bool is_worker() {
+#if __TBB_TASK_DEQUE
+        return arena_index < arena->prefix().number_of_workers;
+#else /* !__TBB_TASK_DEQUE */
+        return (dummy_slot.task_pool->prefix().arena_index < arena->prefix().number_of_workers);
+#endif /* !__TBB_TASK_DEQUE */
+    }
+
+#if TEST_ASSEMBLY_ROUTINES
+    /** Defined in test_assembly.cpp */
+    void test_assembly_routines();
+#endif /* TEST_ASSEMBLY_ROUTINES */
+
+#if COUNT_TASK_NODES
+    intptr get_task_node_count( bool count_arena_workers = false ) {
+        return task_node_count + (count_arena_workers? arena->workers_task_node_count(): 0);
+    }
+#endif /* COUNT_TASK_NODES */
+
+    //! Special value used to mark return_list as not taking any more entries.
+    static task* plugged_return_list() {return (task*)(intptr)(-1);}
+
+    //! Number of small tasks that have been allocated by this scheduler. 
+    intptr small_task_count;
+
+    //! List of small tasks that have been returned to this scheduler by other schedulers.
+    task* return_list;
+
+    //! Free a small task t that that was allocated by a different scheduler 
+    void free_nonlocal_small_task( task& t ); 
+
+#if __TBB_EXCEPTIONS
+    //! Padding isolating thread local members from members that can be written to by other threads.
+    char _padding1[NFS_MaxLineSize - sizeof(context_list_node_t)];
+
+    //! Head of the thread specific list of task group contexts.
+    context_list_node_t context_list_head;
+
+    //! Mutex protecting access to the list of task group contexts.
+    spin_mutex context_list_mutex;
+
+    //! Used to form the list of master thread schedulers.
+    scheduler_list_node_t my_node;
+
+    //! Thread local counter of cancellation requests.
+    /** When this counter equals global_cancel_count, the cancellation state known
+        to this thread is synchronized with the global cancellation state.
+        \sa #global_cancel_count **/
+    uintptr_t local_cancel_count;
+
+    //! Propagates cancellation request to all descendants of the argument context.
+    void propagate_cancellation ( task_group_context* ctx );
+
+    //! Propagates cancellation request to contexts registered by this scheduler.
+    void propagate_cancellation ();
+#endif /* __TBB_EXCEPTIONS */
+}; // class GenericScheduler
+
+//------------------------------------------------------------------------
+// auto_empty_task
+//------------------------------------------------------------------------
+
+//! Smart holder for the empty task class with automatic destruction
+class auto_empty_task {
+    task* my_task;
+    GenericScheduler* my_scheduler;
+public:
+    auto_empty_task ( __TBB_ALLOC_TASK_ARGS(GenericScheduler *s, int depth, task_group_context* context) ) 
+        : my_task( new(&s->allocate_task(sizeof(empty_task), __TBB_ALLOC_TASK_ARGS(NULL, depth, context))) empty_task )
+        , my_scheduler(s)
+    {}
+    // empty_task has trivial destructor, so there's no need to call it.
+    ~auto_empty_task () { my_scheduler->free_task<GenericScheduler::is_small_local>(*my_task); }
+
+    operator task& () { return *my_task; }
+    task* operator & () { return my_task; }
+    task_prefix& prefix () { return my_task->prefix(); }
+}; // class auto_empty_task
+
+//------------------------------------------------------------------------
+// Methods of class Governor that need full definition of GenericScheduler
+//------------------------------------------------------------------------
+
+void Governor::sign_on(GenericScheduler* s) {
+    __TBB_ASSERT( !s->is_registered, NULL );  
+    s->is_registered = true;
+    __TBB_InitOnce::add_ref();
+    theTLS.set(s);
+}
+
+void Governor::sign_off(GenericScheduler* s) {
+    if( s->is_registered ) {
+#if __TBB_TASK_SCHEDULER_AUTO_INIT && USE_PTHREAD
+        __TBB_ASSERT( theTLS.get()==s || !s->is_worker() && !theTLS.get(), "attempt to unregister a wrong scheduler instance" );
+#else
+        __TBB_ASSERT( theTLS.get()==s, "attempt to unregister a wrong scheduler instance" );
+#endif /* __TBB_TASK_SCHEDULER_AUTO_INIT && USE_PTHREAD */
+        theTLS.set(NULL);
+        s->is_registered = false;
+        __TBB_InitOnce::remove_ref();
+    }
+}
+
+#if __TBB_TASK_SCHEDULER_AUTO_INIT
+GenericScheduler* Governor::local_scheduler_with_auto_init() {
+    GenericScheduler* s = theTLS.get();
+    if( !s ) {
+        if( !__TBB_InitOnce::initialization_done() ) 
+            DoOneTimeInitializations();
+        __TBB_ASSERT( __TBB_InitOnce::initialization_done(), "library initialization failed?" );
+        // use the same argument values as default constructor of task_scheduler_init
+        s = GenericScheduler::create_master(obtain_arena(task_scheduler_init::automatic,0));
+        s->is_auto_initialized = true;
+        TBB_TRACE(("Scheduler was initialized automatically: s=%p\n",s));
+    }
+    __TBB_ASSERT(s, "somehow a scheduler object was not created?");
+    return s;
+}
+
+void Governor::auto_terminate(void* arg){
+    GenericScheduler* s = static_cast<GenericScheduler*>(arg);
+    if( s && s->is_auto_initialized ) {
+        if( !--(s->ref_count) )
+            s->cleanup_master();
+    }
+}
+#endif /* __TBB_TASK_SCHEDULER_AUTO_INIT */
+
+//------------------------------------------------------------------------
+// GenericScheduler implementation
+//------------------------------------------------------------------------
+
+inline task& GenericScheduler::allocate_task( size_t number_of_bytes, 
+                                            __TBB_ALLOC_TASK_ARGS(task* parent, depth_type depth, task_group_context* context) ) {
+    GATHER_STATISTIC(current_active+=1);
+    task* t = free_list;
+    if( number_of_bytes<=quick_task_size ) {
+        if( t ) {
+            GATHER_STATISTIC(current_length-=1);
+            __TBB_ASSERT( t->state()==task::freed, "free list of tasks is corrupted" );
+            free_list = t->prefix().next;
+            ITT_ANNOTATE_ALLOCATION(&t->prefix(), task_prefix_reservation_size+quick_task_size);
+        } else if( return_list ) {
+            // No fence required for read of return_list above, because __TBB_FetchAndStoreW has a fence.
+            t = (task*)__TBB_FetchAndStoreW( &return_list, 0 );
+            __TBB_ASSERT( t, "another thread emptied the return_list" );
+            __TBB_ASSERT( t->prefix().origin==this, "task returned to wrong return_list" );
+            ITT_NOTIFY( sync_acquired, &return_list );
+            free_list = t->prefix().next;
+            ITT_ANNOTATE_ALLOCATION(&t->prefix(), task_prefix_reservation_size+quick_task_size);
+        } else {
+            t = (task*)((char*)NFS_Allocate( task_prefix_reservation_size+quick_task_size, 1, NULL ) + task_prefix_reservation_size );
+#if COUNT_TASK_NODES
+            ++task_node_count;
+#endif /* COUNT_TASK_NODES */
+            t->prefix().origin = this;
+            ++small_task_count;
+        }
+    } else {
+        GATHER_STATISTIC(current_big_malloc+=1);
+        t = (task*)((char*)NFS_Allocate( task_prefix_reservation_size+number_of_bytes, 1, NULL ) + task_prefix_reservation_size );
+#if COUNT_TASK_NODES
+        ++task_node_count;
+#endif /* COUNT_TASK_NODES */
+        t->prefix().origin = NULL;
+    }
+    task_prefix& p = t->prefix();
+#if __TBB_EXCEPTIONS
+    p.context = context;
+#endif /* __TBB_EXCEPTIONS */
+    p.owner = this;
+    p.ref_count = 0;
+#if __TBB_TASK_DEQUE
+    // Assign some not outrageously out-of-place value for a while
+    p.depth = 0;
+#else /* !__TBB_TASK_DEQUE */
+    p.depth = int(depth);
+#endif /* !__TBB_TASK_DEQUE */
+    p.parent = parent;
+    // In TBB 3.0 and later, the constructor for task sets extra_state to indicate the version of the tbb/task.h header.
+    // In TBB 2.0 and earlier, the constructor leaves extra_state as zero.
+    p.extra_state = 0;
+    p.affinity = 0;
+    p.state = task::allocated;
+    return *t;
+}
+
+template<GenericScheduler::hint h>
+inline void GenericScheduler::free_task( task& t ) {
+    GATHER_STATISTIC(current_active-=1);
+    task_prefix& p = t.prefix();
+    // Verify that optimization hints are correct.
+    __TBB_ASSERT( h!=is_small_local || p.origin==this, NULL );
+    __TBB_ASSERT( !(h&is_small) || p.origin, NULL );
+#if TBB_USE_ASSERT
+    p.depth = 0xDEADBEEF;
+    p.ref_count = 0xDEADBEEF;
+    poison_pointer(p.owner);
+#endif /* TBB_USE_ASSERT */
+    __TBB_ASSERT( 1L<<t.state() & (1L<<task::executing|1L<<task::allocated), NULL );
+    p.state = task::freed;
+    if( h==is_small_local || p.origin==this ) {
+        GATHER_STATISTIC(current_length+=1);
+        p.next = free_list;
+        free_list = &t;
+    } else if( !(h&is_local) && p.origin ) {
+        free_nonlocal_small_task(t);
+    } else {
+        deallocate_task(t);
+    }
+}
+
+void GenericScheduler::free_nonlocal_small_task( task& t ) {
+    __TBB_ASSERT( t.state()==task::freed, NULL );
+    GenericScheduler& s = *static_cast<GenericScheduler*>(t.prefix().origin);
+    __TBB_ASSERT( &s!=this, NULL );
+    for(;;) {
+        task* old = s.return_list;
+        if( old==plugged_return_list() ) 
+            break;
+        // Atomically insert t at head of s.return_list
+        t.prefix().next = old; 
+        ITT_NOTIFY( sync_releasing, &s.return_list );
+        if( __TBB_CompareAndSwapW( &s.return_list, (intptr)&t, (intptr)old )==(intptr)old ) 
+            return;
+    }
+    deallocate_task(t);
+    if( __TBB_FetchAndDecrementWrelease( &s.small_task_count )==1 ) {
+        // We freed the last task allocated by scheduler s, so it's our responsibility
+        // to free the scheduler.
+        NFS_Free( &s );
+    }
+}
+
+//------------------------------------------------------------------------
+// CustomScheduler
+//------------------------------------------------------------------------
+
+//! A scheduler with a customized evaluation loop.
+/** The customization can use SchedulerTraits to make decisions without needing a run-time check. */
+template<typename SchedulerTraits>
+class CustomScheduler: private GenericScheduler {
+    //! Scheduler loop that dispatches tasks.
+    /** If child is non-NULL, it is dispatched first.
+        Then, until "parent" has a reference count of 1, other task are dispatched or stolen. */
+#if __TBB_RELAXED_OWNERSHIP
+    void local_wait_for_all( task& parent, task* child );
+
+    /*override*/
+    void wait_for_all( task& parent, task* child ) {
+        static_cast<CustomScheduler*>(Governor::local_scheduler())->local_wait_for_all( parent, child );
+    }
+#else /* !__TBB_RELAXED_OWNERSHIP */
+    /*override*/void wait_for_all( task& parent, task* child );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+
+    typedef CustomScheduler<SchedulerTraits> scheduler_type;
+
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+    void immediate_execute(task& child, bool from_spawn);
+    template<typename SchedulerTraits> friend class internal::VirtualScheduler;
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+
+    //! Construct a CustomScheduler
+    CustomScheduler( Arena* arena ) : GenericScheduler(arena) {}
+
+    static bool tally_completion_of_one_predecessor( task& s ) {
+        task_prefix& p = s.prefix();
+        if( SchedulerTraits::itt_possible )
+            ITT_NOTIFY(sync_releasing, &p.ref_count);
+        if( SchedulerTraits::has_slow_atomic && p.ref_count==1 ) {
+            p.ref_count=0;
+        } else {
+            reference_count k = __TBB_FetchAndDecrementWrelease(&p.ref_count);
+            __TBB_ASSERT( k>0, "completion of task caused parent's reference count to underflow" );
+            if( k!=1 ) 
+                return false;
+        }
+        if( SchedulerTraits::itt_possible )
+            ITT_NOTIFY(sync_acquired, &p.ref_count);
+        return true;
+    }
+
+public:
+    static GenericScheduler* allocate_scheduler( Arena* arena ) {
+        __TBB_ASSERT( arena, "missing arena" );
+        scheduler_type* s = (scheduler_type*)NFS_Allocate(sizeof(scheduler_type),1,NULL);
+        new( s ) scheduler_type(  arena );
+#if __TBB_TASK_DEQUE
+        __TBB_ASSERT( s->assert_okay(), NULL );
+#else /* !__TBB_TASK_DEQUE */
+        __TBB_ASSERT( s->dummy_slot.task_pool->assert_okay(), NULL );
+#endif /* !__TBB_TASK_DEQUE */
+        ITT_SYNC_CREATE(s, SyncType_Scheduler, SyncObj_TaskPoolSpinning);
+        return s;
+    }
+};
+
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+//! Used by the virtual scheduler to immediately execute a task.
+/** Immediately executes a task bypassing the task queue/arena. The from_spawn
+    parameter is used to identify tasks which orginated by a call to spawn, or
+    equivalent, as opposed to bypassed tasks or combined spawn/wait_for_all
+    mechanisms such as spawn_and_wait_for_all. Semantically, tasks which are
+    from_spawn require their parent's reference count to be greater than 1 and
+    are always identified as stolen via is_stolen_task / note_affinity. */
+template<typename SchedulerTraits>
+void CustomScheduler<SchedulerTraits>::immediate_execute(task& child, bool from_spawn) {
+    if( SchedulerTraits::execute_when_spawned ) {
+        task *parent = child.parent();
+        int saved_last_spawn_depth = virtual_scheduler_last_spawn_depth;
+
+        if(from_spawn) {
+            child.prefix().extra_state |= es_virtual_steal;
+            virtual_scheduler_last_spawn_depth = virtual_scheduler_task_depth + 1;
+        }
+        else {
+            // This is necessary to deal with recycled tasks.
+            child.prefix().extra_state &= ~(es_virtual_steal);
+        }
+        virtual_scheduler_omit_wait = true;
+
+        if(!parent) {
+            auto_empty_task dummy( __TBB_ALLOC_TASK_ARGS(this, child.prefix().depth-1, child.prefix().context) );
+            child.prefix().parent = &dummy;
+            dummy.prefix().ref_count = 2;
+            wait_for_all(dummy, &child);
+        }
+        else {
+            wait_for_all(*parent, &child);
+        }
+
+        virtual_scheduler_last_spawn_depth = saved_last_spawn_depth;
+    }
+    else {
+        __TBB_ASSERT(false, "immediate_execute must be used with the virtual scheduler");
+    }
+}
+
+//------------------------------------------------------------------------
+// VirtualScheduler
+//------------------------------------------------------------------------
+
+//! A single thread scheduler that executes tasks immediately when spawned
+/** The scheduler executes tasks in the order that would occur if an infinite
+    number of threads were running and every task was immediately stolen and
+    executed when spawned. The majority of the implementation is contained
+    within CustomScheduler and is enabled through the SchedulerTraits flag
+    execute_when_spawned. */
+template<typename SchedulerTraits>
+class VirtualScheduler: private CustomScheduler< SchedulerTraits> {
+    typedef VirtualScheduler<SchedulerTraits> scheduler_type;
+
+    //! Construct a VirtualScheduler
+    VirtualScheduler( Arena* arena ) : CustomScheduler(arena)
+    {
+        __TBB_ASSERT(SchedulerTraits::execute_when_spawned, NULL);
+    }
+
+    void spawn( task& first, task*& next ) {
+        task *t_next = NULL;
+        for( task* t = &first; ; t = t_next ) {
+            bool end = &t->prefix().next == &next;
+            t_next = t->prefix().next;
+            immediate_execute(*t, true);
+            if( end )
+                break;
+        }
+    }
+
+public:
+    static GenericScheduler* allocate_scheduler( Arena* arena ) {
+        __TBB_ASSERT( arena, "missing arena" );
+        scheduler_type* s = (scheduler_type*)NFS_Allocate(sizeof(scheduler_type),1,NULL);
+        new( s ) scheduler_type(  arena );
+#if __TBB_TASK_DEQUE
+        __TBB_ASSERT( s->assert_okay(), NULL );
+#else /* !__TBB_TASK_DEQUE */
+        __TBB_ASSERT( s->dummy_slot.task_pool->assert_okay(), NULL );
+#endif /* !__TBB_TASK_DEQUE */
+        ITT_SYNC_CREATE(s, SyncType_Scheduler, SyncObj_TaskPoolSpinning);
+        return s;
+    }
+};
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+
+//------------------------------------------------------------------------
+// AssertOkay
+//------------------------------------------------------------------------
+#if TBB_USE_ASSERT
+/** Logically, this method should be a member of class task.
+    But we do not want to publish it, so it is here instead. */
+static bool AssertOkay( const task& task ) {
+    __TBB_ASSERT( &task!=NULL, NULL );
+    __TBB_ASSERT( (uintptr)&task % task_alignment == 0, "misaligned task" );
+    __TBB_ASSERT( (unsigned)task.state()<=(unsigned)task::recycle, "corrupt task (invalid state)" );
+#if !__TBB_TASK_DEQUE
+    __TBB_ASSERT( task.prefix().depth<1L<<30, "corrupt task (absurd depth)" );
+#endif /* !__TBB_TASK_DEQUE */
+    return true;
+}
+#endif /* TBB_USE_ASSERT */
+
+//------------------------------------------------------------------------
+// Methods of Arena
+//------------------------------------------------------------------------
+Arena* Arena::allocate_arena( unsigned number_of_slots, unsigned number_of_workers, stack_size_type stack_size) {
+    __TBB_ASSERT( sizeof(ArenaPrefix) % NFS_GetLineSize()==0, "ArenaPrefix not multiple of cache line size" );
+    __TBB_ASSERT( sizeof(mail_outbox)==NFS_MaxLineSize, NULL );
+    size_t n = sizeof(ArenaPrefix) + number_of_slots*(sizeof(mail_outbox)+sizeof(ArenaSlot));
+
+    unsigned char* storage = (unsigned char*)NFS_Allocate( n, 1, NULL );
+    memset( storage, 0, n );
+    Arena* a = (Arena*)(storage + sizeof(ArenaPrefix)+ number_of_slots*(sizeof(mail_outbox)));
+    __TBB_ASSERT( sizeof(a->slot[0]) % NFS_GetLineSize()==0, "Arena::slot size not multiple of cache line size" );
+    __TBB_ASSERT( (uintptr)a % NFS_GetLineSize()==0, NULL );
+    new( &a->prefix() ) ArenaPrefix( number_of_slots, number_of_workers );
+
+    // Allocate the worker_list
+    WorkerDescriptor * w = new WorkerDescriptor[number_of_workers];
+    memset( w, 0, sizeof(WorkerDescriptor)*(number_of_workers));
+    a->prefix().worker_list = w;
+
+#if TBB_USE_ASSERT
+    // Verify that earlier memset initialized the mailboxes.
+    for( unsigned j=1; j<=number_of_slots; ++j ) {
+        a->mailbox(j).assert_is_initialized();
+    }
+#endif /* TBB_USE_ASSERT */
+
+    a->prefix().stack_size = stack_size;
+    size_t k;
+    // Mark each worker slot as locked and unused
+    for( k=0; k<number_of_workers; ++k ) {
+#if __TBB_TASK_DEQUE
+        // All slots are set to null meaning that they are free
+#else /* !__TBB_TASK_DEQUE */
+        a->slot[k].steal_end = -3;
+#endif /* !__TBB_TASK_DEQUE */
+#if !__TBB_RML
+        w[k].arena = a;
+#endif /* __TBB_RML */
+        ITT_SYNC_CREATE(a->slot + k, SyncType_Scheduler, SyncObj_WorkerTaskPool);
+        ITT_SYNC_CREATE(&w[k].scheduler, SyncType_Scheduler, SyncObj_WorkerLifeCycleMgmt);
+        ITT_SYNC_CREATE(&a->mailbox(k+1), SyncType_Scheduler, SyncObj_Mailbox);
+    }
+    // Mark rest of slots as unused
+    for( ; k<number_of_slots; ++k ) {
+#if !__TBB_TASK_DEQUE
+        a->slot[k].steal_end = -4;
+#endif /* !__TBB_TASK_DEQUE */
+        ITT_SYNC_CREATE(a->slot + k, SyncType_Scheduler, SyncObj_MasterTaskPool);
+        ITT_SYNC_CREATE(&a->mailbox(k+1), SyncType_Scheduler, SyncObj_Mailbox);
+    }
+
+    return a;
+}
+
+inline void Arena::mark_pool_full() {
+    // Double-check idiom that is deliberately sloppy about memory fences.
+    // Technically, to avoid missed wakeups, there should be a full memory fence between the point we 
+    // released the task pool (i.e. spawned task) and read the gate's state.  However, adding such a 
+    // fence might hurt overall performance more than it helps, because the fence would be executed 
+    // on every task pool release, even when stealing does not occur.  Since TBB allows parallelism, 
+    // but never promises parallelism, the missed wakeup is not a correctness problem.
+    Gate::state_t snapshot = prefix().gate.get_state();
+    if( snapshot!=SNAPSHOT_FULL ) 
+#if __TBB_RML
+        if( snapshot!=SNAPSHOT_SERVER_GOING_AWAY )
+            if( prefix().gate.try_update( SNAPSHOT_FULL, snapshot ) ) 
+                if( snapshot==SNAPSHOT_EMPTY )
+                    prefix().server->adjust_job_count_estimate( int(prefix().number_of_workers) );
+#else
+        prefix().gate.try_update( SNAPSHOT_FULL, SNAPSHOT_PERMANENTLY_OPEN, true );
+#endif /* __TBB_RML */
+}
+
+#if __TBB_RML
+bool Arena::check_if_pool_is_empty() 
+#else
+bool Arena::wait_while_pool_is_empty() 
+#endif  /* __TBB_RML */
+{
+    for(;;) {
+        Gate::state_t snapshot = prefix().gate.get_state();
+        switch( snapshot ) {
+            case SNAPSHOT_EMPTY:
+#if __TBB_RML
+            case SNAPSHOT_SERVER_GOING_AWAY:
+#else
+                prefix().gate.wait();
+#endif /* !__TBB_RML */
+                return true;
+            case SNAPSHOT_FULL: {
+                // Use unique id for "busy" in order to avoid ABA problems.
+                const Gate::state_t busy = Gate::state_t(this);
+                // Request permission to take snapshot
+                prefix().gate.try_update( busy, SNAPSHOT_FULL );
+                if( prefix().gate.get_state()==busy ) {
+                    // Got permission.  Take the snapshot.
+                    size_t n = prefix().limit;
+                    size_t k; 
+                    for( k=0; k<n; ++k ) 
+#if __TBB_TASK_DEQUE
+                        if( slot[k].task_pool != EmptyTaskPool && slot[k].head < slot[k].tail )
+#else /* !__TBB_TASK_DEQUE */
+                        if( slot[k].steal_end>=0 ) 
+#endif /* !__TBB_TASK_DEQUE */
+                            break;
+                    // Test and test-and-set.
+                    if( prefix().gate.get_state()==busy ) {
+                        if( k>=n ) {
+#if __TBB_RML
+                            if( prefix().gate.try_update( SNAPSHOT_EMPTY, busy ) ) {
+                                prefix().server->adjust_job_count_estimate( -int(prefix().number_of_workers) );
+                                return true;
+                            }
+#else
+                            prefix().gate.try_update( SNAPSHOT_EMPTY, busy );
+                            continue;
+#endif /* !__TBB_RML */
+                        } else {
+                            prefix().gate.try_update( SNAPSHOT_FULL, busy );
+                        }
+                    }
+                } 
+                return false;
+            }
+            default:
+                // Another thread is taking a snapshot or gate is permanently open.
+                return false;
+        }
+    }
+}
+
+void Arena::terminate_workers() {
+#if __TBB_RML
+    for(;;) {
+        Gate::state_t snapshot = prefix().gate.get_state();
+        if( snapshot==SNAPSHOT_SERVER_GOING_AWAY ) 
+            break;
+        if( prefix().gate.try_update( SNAPSHOT_SERVER_GOING_AWAY, snapshot ) ) {
+            if( snapshot!=SNAPSHOT_EMPTY )
+                prefix().server->adjust_job_count_estimate( -int(prefix().number_of_workers) );
+            break;
+        }
+    }
+    prefix().server->request_close_connection();
+#else
+    int n = prefix().number_of_workers;
+    __TBB_ASSERT( n>=0, "negative number of workers; casting error?" );
+    for( int i=n; --i>=0; ) {
+        WorkerDescriptor& w = prefix().worker_list[i];
+        if( w.scheduler || __TBB_CompareAndSwapW( &w.scheduler, intptr(-1), intptr(0) ) ) {
+            // Worker published itself.  Tell worker to quit.
+            ITT_NOTIFY(sync_acquired, &w.scheduler);
+            task* t = __TBB_load_with_acquire(w.scheduler)->dummy_task;
+            ITT_NOTIFY(sync_releasing, &t->prefix().ref_count);
+            t->prefix().ref_count = 1;
+        } else {
+            // Worker did not publish itself yet, and we have set w.scheduler to -1, 
+            // which tells the worker that it should never publish itself.
+        }
+    }
+    // Permanently wake up sleeping workers
+    prefix().gate.try_update( SNAPSHOT_PERMANENTLY_OPEN, SNAPSHOT_PERMANENTLY_OPEN, true );
+    remove_gc_reference();
+#endif /* !__TBB_RML */
+}
+
+#if !__TBB_RML
+void Arena::remove_gc_reference() {
+    __TBB_ASSERT( this, "attempt to remove reference to NULL Arena" );
+    if( --prefix().gc_ref_count==0 ) {
+        free_arena();
+    }
+}
+#endif /* !__TBB_RML */
+
+#if COUNT_TASK_NODES
+intptr Arena::workers_task_node_count() {
+    intptr result = 0;
+    for( unsigned i=0; i<prefix().number_of_workers; ++i ) {
+        GenericScheduler* s = prefix().worker_list[i].scheduler;
+        if( s )
+            result += s->task_node_count;
+    }
+    return result;
+}
+#endif
+
+//------------------------------------------------------------------------
+// Methods of GenericScheduler
+//------------------------------------------------------------------------
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Suppress overzealous compiler warning about using 'this' in base initializer list. 
+    #pragma warning(push)
+    #pragma warning(disable:4355)
+#endif
+
+GenericScheduler::GenericScheduler( Arena* arena_ ) :
+#if __TBB_TASK_DEQUE
+    arena_index(null_arena_index),
+    task_pool_size(0),
+#else /* !__TBB_TASK_DEQUE */
+    deepest(-1),
+    array_size(0),
+#endif /* !__TBB_TASK_DEQUE */
+    arena_slot(&dummy_slot),
+    arena(arena_),
+    random( unsigned(this-(GenericScheduler*)NULL) ),
+    free_list(NULL),
+    innermost_running_task(NULL),
+    dummy_task(NULL),
+    ref_count(1),
+    my_affinity_id(0),
+    is_registered(false),
+#if __TBB_TASK_SCHEDULER_AUTO_INIT
+    is_auto_initialized(false),
+#endif /* __TBB_TASK_SCHEDULER_AUTO_INIT */
+#if __TBB_SCHEDULER_OBSERVER
+    local_last_observer_proxy(NULL),
+#endif /* __TBB_SCHEDULER_OBSERVER */
+#if COUNT_TASK_NODES
+    task_node_count(0),
+#endif /* COUNT_TASK_NODES */
+#if STATISTICS
+    current_active(0),
+    current_length(0),
+    current_big_malloc(0),
+    execute_count(0),
+    steal_count(0),
+    mail_received_count(0),
+    proxy_execute_count(0),
+    proxy_steal_count(0),
+    proxy_bypass_count(0),
+#endif /* STATISTICS */
+    small_task_count(1),   // Extra 1 is a guard reference
+    return_list(NULL)
+{
+#if __TBB_TASK_DEQUE
+    dummy_slot.task_pool = allocate_task_pool( min_task_pool_size );
+    dummy_slot.head = dummy_slot.tail = 0;
+#else /* !__TBB_TASK_DEQUE */
+    TaskPool* t = TaskPool::allocate_task_pool(TaskPool::min_array_size);
+    dummy_slot.task_pool = t;
+    t->prefix().steal_begin = depth_type(array_size);
+    t->prefix().arena_index = TaskPoolPrefix::null_arena_index;
+    dummy_slot.steal_end = -2;
+    dummy_slot.owner_waits = false;
+    array_size = TaskPool::min_array_size;
+#endif /* !__TBB_TASK_DEQUE */
+    dummy_task = &allocate_task( sizeof(task), __TBB_ALLOC_TASK_ARGS(NULL, -1, NULL) );
+#if __TBB_EXCEPTIONS
+    context_list_head.my_prev = &context_list_head;
+    context_list_head.my_next = &context_list_head;
+    ITT_SYNC_CREATE(&context_list_mutex, SyncType_Scheduler, SyncObj_ContextsList);
+#endif /* __TBB_EXCEPTIONS */
+    dummy_task->prefix().ref_count = 2;
+    ITT_SYNC_CREATE(&dummy_task->prefix().ref_count, SyncType_Scheduler, SyncObj_WorkerLifeCycleMgmt);
+    ITT_SYNC_CREATE(&return_list, SyncType_Scheduler, SyncObj_TaskReturnList);
+    __TBB_ASSERT( assert_okay(), "constructor error" );
+}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning(pop)
+#endif // warning 4355 is back
+
+#if TBB_USE_ASSERT
+bool GenericScheduler::assert_okay() const {
+#if TBB_USE_ASSERT>=2||TEST_ASSEMBLY_ROUTINES
+    acquire_task_pool();
+#if __TBB_TASK_DEQUE
+    task** tp = dummy_slot.task_pool;
+    __TBB_ASSERT( task_pool_size >= min_task_pool_size, NULL );
+    __TBB_ASSERT( arena_slot->head <= arena_slot->tail, NULL );
+    for ( size_t i = arena_slot->head; i < arena_slot->tail; ++i ) {
+        __TBB_ASSERT( (uintptr_t)tp[i] + 1 > 1u, "nil or invalid task pointer in the deque" );
+        __TBB_ASSERT( tp[i]->prefix().state == task::ready ||
+                      tp[i]->prefix().extra_state == es_task_proxy, "task in the deque has invalid state" );
+    }
+#else /* !__TBB_TASK_DEQUE */
+    __TBB_ASSERT( array_size>=TaskPool::min_array_size, NULL );
+    TaskPool* tp = dummy_slot.task_pool;
+    __TBB_ASSERT( tp, NULL );
+    for( depth_type k=0; k<depth_type(array_size); ++k ) {
+        for( task* t = tp->array[k]; t; t=t->prefix().next ) {
+            __TBB_ASSERT( deepest>=k, "deepest not set properly" );
+            __TBB_ASSERT( t->prefix().depth==k, NULL );
+            __TBB_ASSERT( t->prefix().owner==this, NULL );
+        }
+    }
+#endif /* !__TBB_TASK_DEQUE */
+    release_task_pool();
+#endif /* TBB_USE_ASSERT>=2||TEST_ASSEMBLY_ROUTINES */
+    return true;
+}
+#endif /* TBB_USE_ASSERT */
+
+#if __TBB_EXCEPTIONS
+
+void GenericScheduler::propagate_cancellation () {
+    spin_mutex::scoped_lock lock(context_list_mutex);
+    // Acquire fence is necessary to ensure that the subsequent node->my_next load 
+    // returned the correct value in case it was just inserted in another thread.
+    // The fence also ensures visibility of the correct my_parent value.
+    context_list_node_t *node = __TBB_load_with_acquire(context_list_head.my_next);
+    while ( node != &context_list_head ) {
+        task_group_context *ctx = __TBB_get_object_addr(task_group_context, my_node, node);
+            // The absence of acquire fence while reading my_cancellation_requested may result 
+            // in repeated traversals of the same parents chain if another group (precedent or 
+            // descendant) belonging to the tree being canceled sends cancellation request of 
+            // its own around the same time.
+        if ( !ctx->my_cancellation_requested )
+            ctx->propagate_cancellation_from_ancestors();
+        node = node->my_next;
+        __TBB_ASSERT( ctx->is_alive(), "Walked into a destroyed context while propagating cancellation" );
+    }
+}
+
+/** Propagates cancellation down the tree of dependent contexts by walking each 
+    thread's local list of contexts **/
+void GenericScheduler::propagate_cancellation ( task_group_context* ctx ) {
+    __TBB_ASSERT ( ctx->my_cancellation_requested, "No cancellation request in the context" );
+    // The whole propagation algorithm is under the lock in order to ensure correctness 
+    // in case of parallel cancellations at the different levels of the context tree.
+    // See the note 2 at the bottom of the file.
+    mutex::scoped_lock lock(the_scheduler_list_mutex);
+    // Advance global cancellation state
+    __TBB_FetchAndAddWrelease(&global_cancel_count, 1);
+    // First propagate to workers using arena to access their context lists
+    size_t num_workers = arena->prefix().number_of_workers;
+    for ( size_t i = 0; i < num_workers; ++i ) {
+        // No fence is necessary here since the context list of worker's scheduler 
+        // can contain anything of interest only after the first stealing was done
+        // by that worker. And doing it applies the necessary fence
+        GenericScheduler *s = arena->prefix().worker_list[i].scheduler;
+        // If the worker is in the middle of its startup sequence, skip it.
+        if ( s )
+            s->propagate_cancellation();
+    }
+    // Then propagate to masters using the global list of master's schedulers
+    scheduler_list_node_t *node = the_scheduler_list_head.my_next;
+    while ( node != &the_scheduler_list_head ) {
+        __TBB_get_object_addr(GenericScheduler, my_node, node)->propagate_cancellation();
+        node = node->my_next;
+    }
+    // Now sync up the local counters
+    for ( size_t i = 0; i < num_workers; ++i ) {
+        GenericScheduler *s = arena->prefix().worker_list[i].scheduler;
+        // If the worker is in the middle of its startup sequence, skip it.
+        if ( s )
+            s->local_cancel_count = global_cancel_count;
+    }
+    node = the_scheduler_list_head.my_next;
+    while ( node != &the_scheduler_list_head ) {
+        __TBB_get_object_addr(GenericScheduler, my_node, node)->local_cancel_count = global_cancel_count;
+        node = node->my_next;
+    }
+}
+#endif /* __TBB_EXCEPTIONS */
+
+
+#if __TBB_TASK_DEQUE
+
+void GenericScheduler::init_stack_info () {
+    // Stacks are growing top-down. Highest address is called "stack base", 
+    // and the lowest is "stack limit".
+#if USE_WINTHREAD
+#if defined(_MSC_VER)&&_MSC_VER<1400 && !_WIN64
+    NT_TIB  *pteb = (NT_TIB*)__TBB_machine_get_current_teb();
+#else
+    NT_TIB  *pteb = (NT_TIB*)NtCurrentTeb();
+#endif
+    __TBB_ASSERT( &pteb < pteb->StackBase && &pteb > pteb->StackLimit, "invalid stack info in TEB" );
+    my_stealing_threshold = (uintptr_t)pteb->StackBase / 2 + (uintptr_t)pteb->StackLimit / 2;
+#else /* USE_PTHREAD */
+    // There is no portable way to get stack base address in Posix, so we use 
+    // non-portable method (on all modern Linux) or the simplified approach 
+    // based on the common sense assumptions. The most important assumption 
+    // is that the main thread's stack size is not less than that of other threads.
+    size_t  stack_size = arena->prefix().stack_size;
+    void    *stack_base = &stack_size;
+#if __TBB_ipf
+    void    *rsb_base = __TBB_get_bsp();
+#endif
+#if __linux__
+    size_t  np_stack_size = 0;
+    void    *stack_limit = NULL;
+    pthread_attr_t  attr_stack, np_attr_stack;
+    if( 0 == pthread_getattr_np(pthread_self(), &np_attr_stack) ) {
+        if ( 0 == pthread_attr_getstack(&np_attr_stack, &stack_limit, &np_stack_size) ) {
+            if ( 0 == pthread_attr_init(&attr_stack) ) {
+                if ( 0 == pthread_attr_getstacksize(&attr_stack, &stack_size) )
+                {
+                    stack_base = (char*)stack_limit + np_stack_size;
+                    if ( np_stack_size < stack_size ) {
+                        // We are in a secondary thread. Use reliable data.
+#if __TBB_ipf
+                        // IA64 stack is split into RSE backup and memory parts
+                        rsb_base = stack_limit;
+                        stack_size = np_stack_size/2;
+#else
+                        stack_size = np_stack_size;
+#endif /* !__TBB_ipf */
+                    }
+                    // We are either in the main thread or this thread stack 
+                    // is bigger that that of the main one. As we cannot discern
+                    // these cases we fall back to the default (heuristic) values.
+                }
+                pthread_attr_destroy(&attr_stack);
+            }
+        }
+        pthread_attr_destroy(&np_attr_stack);
+    }
+#endif /* __linux__ */
+    __TBB_ASSERT( stack_size>0, "stack size must be positive" );
+    my_stealing_threshold = (uintptr_t)((char*)stack_base - stack_size/2);
+#if __TBB_ipf
+    my_rsb_stealing_threshold = (uintptr_t)((char*)rsb_base + stack_size/2);
+#endif
+#endif /* USE_PTHREAD */
+}
+
+task** GenericScheduler::allocate_task_pool( size_t n ) {
+    __TBB_ASSERT( n > task_pool_size, "Cannot shrink the task pool" );
+    size_t byte_size = ((n * sizeof(task*) + NFS_MaxLineSize - 1) / NFS_MaxLineSize) * NFS_MaxLineSize;
+    task_pool_size = byte_size / sizeof(task*);
+    task** new_pool = (task**)NFS_Allocate( byte_size, 1, NULL );
+    // No need to clear the fresh deque since valid items are designated by the head and tail members.
+#if TBB_USE_ASSERT>=2
+    // But clear it in the high vigilance debug mode
+    memset( new_pool, -1, n );
+#endif /* TBB_USE_ASSERT>=2 */
+    return new_pool;
+}
+
+void GenericScheduler::grow( size_t new_size ) {
+    __TBB_ASSERT( assert_okay(), NULL );
+    if ( new_size < 2 * task_pool_size )
+        new_size = 2 * task_pool_size;
+    task** new_pool = allocate_task_pool( new_size ); // updates task_pool_size
+    task** old_pool = dummy_slot.task_pool;
+    acquire_task_pool();    // requires the old dummy_slot.task_pool value
+    size_t new_tail = arena_slot->tail - arena_slot->head;
+    __TBB_ASSERT( new_tail <= task_pool_size, "new task pool is too short" );
+    memcpy( new_pool, old_pool + arena_slot->head, arena_slot->tail * sizeof(task*) );
+    arena_slot->head = 0;
+    arena_slot->tail = new_tail;
+    dummy_slot.task_pool = new_pool;
+    release_task_pool();    // updates the task pool pointer in our arena slot
+    free_task_pool( old_pool );
+    __TBB_ASSERT( assert_okay(), NULL );
+}
+
+#else /* !__TBB_TASK_DEQUE */
+
+void GenericScheduler::grow( TaskPool::size_type minimum_size ) {
+    __TBB_ASSERT( assert_okay(), NULL );
+    TaskPool::size_type b_size = 2*minimum_size;
+    __TBB_ASSERT( b_size > array_size, "ready task pool cannot shrink" );
+    TaskPool* new_pool = TaskPool::allocate_task_pool( b_size );
+    __TBB_ASSERT( assert_okay(), NULL );
+    acquire_task_pool();
+    TaskPool* old_pool = dummy_slot.task_pool;
+    memcpy( &new_pool->prefix(), &old_pool->prefix(), TaskPool::byte_size(array_size) );
+    arena_slot->task_pool = dummy_slot.task_pool = new_pool;
+    array_size = b_size;
+    release_task_pool();
+    old_pool->free_task_pool();
+    __TBB_ASSERT( assert_okay(), NULL );
+}
+#endif /* !__TBB_TASK_DEQUE */
+
+GenericScheduler* GenericScheduler::allocate_scheduler( Arena* arena ) {
+    switch( SchedulerTraitsId ) {
+        /* DefaultSchedulerTraits::id is listed explicitly as a case so that the host compiler
+           will issue an error message if it is the same as another id in the list. */
+        default:
+        case DefaultSchedulerTraits::id:
+            return CustomScheduler<DefaultSchedulerTraits>::allocate_scheduler(arena);
+        case IntelSchedulerTraits::id:
+            return CustomScheduler<IntelSchedulerTraits>::allocate_scheduler(arena);
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+        case VirtualSchedulerTraits::id:
+            return VirtualScheduler<VirtualSchedulerTraits>::allocate_scheduler(arena);
+#endif
+    }
+}
+
+void GenericScheduler::free_scheduler() {
+    if( in_arena() ) {
+#if __TBB_TASK_DEQUE
+        acquire_task_pool();
+        leave_arena();
+#else /* !__TBB_TASK_DEQUE */
+        leave_arena(/*compress=*/false);
+#endif /* !__TBB_TASK_DEQUE */
+    }
+#if __TBB_EXCEPTIONS
+    task_group_context* &context = dummy_task->prefix().context;
+    // Only master thread's dummy task has a context
+    if ( context != &dummy_context) {
+        //! \todo Add assertion that master's dummy task context does not have children
+        context->task_group_context::~task_group_context();
+        NFS_Free(context);
+        {
+            mutex::scoped_lock lock(the_scheduler_list_mutex);
+            my_node.my_next->my_prev = my_node.my_prev;
+            my_node.my_prev->my_next = my_node.my_next;
+        }
+    }
+#endif /* __TBB_EXCEPTIONS */
+    free_task<is_small_local>( *dummy_task );
+
+    // k accounts for a guard reference and each task that we deallocate.
+    intptr k = 1;
+    for(;;) {
+        while( task* t = free_list ) {
+            free_list = t->prefix().next;
+            deallocate_task(*t);
+            ++k;
+        }
+        if( return_list==plugged_return_list() ) 
+            break;
+        free_list = (task*)__TBB_FetchAndStoreW( &return_list, (intptr)plugged_return_list() );
+    }
+
+#if COUNT_TASK_NODES
+    arena->prefix().task_node_count += task_node_count;
+#endif /* COUNT_TASK_NODES */
+#if STATISTICS
+    the_statistics.record( execute_count, steal_count, mail_received_count,
+                           proxy_execute_count, proxy_steal_count, proxy_bypass_count );
+#endif /* STATISTICS */
+#if __TBB_TASK_DEQUE
+    free_task_pool( dummy_slot.task_pool );
+#else /* !__TBB_TASK_DEQUE */
+    dummy_slot.task_pool->free_task_pool();
+#endif /* !__TBB_TASK_DEQUE */
+    dummy_slot.task_pool = NULL;
+    // Update small_task_count last.  Doing so sooner might cause another thread to free *this.
+    __TBB_ASSERT( small_task_count>=k, "small_task_count corrupted" );
+    Governor::sign_off(this);
+    if( __TBB_FetchAndAddW( &small_task_count, -k )==k ) 
+        NFS_Free( this );
+}
+
+#if __TBB_TASK_DEQUE
+/** ATTENTION: 
+    This method is mostly the same as GenericScheduler::lock_task_pool(), with 
+    a little different logic of slot state checks (slot is either locked or points 
+    to our task pool).
+    Thus if either of them is changed, consider changing the counterpart as well. **/
+inline void GenericScheduler::acquire_task_pool() const {
+    if ( !in_arena() )
+        return; // we are not in arena - nothing to lock
+    atomic_backoff backoff;
+    bool sync_prepare_done = false;
+    for(;;) {
+#if TBB_USE_ASSERT
+        __TBB_ASSERT( arena_slot == arena->slot + arena_index, "invalid arena slot index" );
+        // Local copy of the arena slot task pool pointer is necessary for the next 
+        // assertion to work correctly to exclude asynchronous state transition effect.
+        task** tp = arena_slot->task_pool;
+        __TBB_ASSERT( tp == LockedTaskPool || tp == dummy_slot.task_pool, "slot ownership corrupt?" );
+#endif
+        if( arena_slot->task_pool != LockedTaskPool && 
+            __TBB_CompareAndSwapW( &arena_slot->task_pool, (intptr_t)LockedTaskPool, 
+                                   (intptr_t)dummy_slot.task_pool ) == (intptr_t)dummy_slot.task_pool )
+        {
+            // We acquired our own slot
+            ITT_NOTIFY(sync_acquired, arena_slot);
+            break;
+        } 
+        else if( !sync_prepare_done ) {
+            // Start waiting
+            ITT_NOTIFY(sync_prepare, arena_slot);
+            sync_prepare_done = true;
+        }
+        // Someone else acquired a lock, so pause and do exponential backoff.
+        backoff.pause();
+#if TEST_ASSEMBLY_ROUTINES
+        __TBB_ASSERT( arena_slot->task_pool == LockedTaskPool || 
+                      arena_slot->task_pool == dummy_slot.task_pool, NULL );
+#endif /* TEST_ASSEMBLY_ROUTINES */
+    }
+    __TBB_ASSERT( arena_slot->task_pool == LockedTaskPool, "not really acquired task pool" );
+} // GenericScheduler::acquire_task_pool
+
+inline void GenericScheduler::release_task_pool() const {
+    if ( !in_arena() )
+        return; // we are not in arena - nothing to unlock
+    __TBB_ASSERT( arena_slot, "we are not in arena" );
+    __TBB_ASSERT( arena_slot->task_pool == LockedTaskPool, "arena slot is not locked" );
+    ITT_NOTIFY(sync_releasing, arena_slot);
+    __TBB_store_with_release( arena_slot->task_pool, dummy_slot.task_pool );
+}
+
+/** ATTENTION: 
+    This method is mostly the same as GenericScheduler::acquire_task_pool(), 
+    with a little different logic of slot state checks (slot can be empty, locked 
+    or point to any task pool other than ours, and asynchronous transitions between 
+    all these states are possible).
+    Thus if any of them is changed, consider changing the counterpart as well **/
+inline task** GenericScheduler::lock_task_pool( ArenaSlot* victim_arena_slot ) const {
+    task** victim_task_pool;
+    atomic_backoff backoff;
+    bool sync_prepare_done = false;
+    for(;;) {
+        victim_task_pool = victim_arena_slot->task_pool;
+        // TODO: Investigate the effect of bailing out on the locked pool without trying to lock it.
+        //       When doing this update assertion in the end of the method.
+        if ( victim_task_pool == EmptyTaskPool ) {
+            // The victim thread emptied its task pool - nothing to lock
+            if( sync_prepare_done )
+                ITT_NOTIFY(sync_cancel, victim_arena_slot);
+            break;
+        }
+        if( victim_task_pool != LockedTaskPool && 
+            __TBB_CompareAndSwapW( &victim_arena_slot->task_pool, 
+                (intptr_t)LockedTaskPool, (intptr_t)victim_task_pool ) == (intptr_t)victim_task_pool )
+        {
+            // We've locked victim's task pool
+            ITT_NOTIFY(sync_acquired, victim_arena_slot);
+            break;
+        }
+        else if( !sync_prepare_done ) {
+            // Start waiting
+            ITT_NOTIFY(sync_prepare, victim_arena_slot);
+            sync_prepare_done = true;
+        }
+        // Someone else acquired a lock, so pause and do exponential backoff.
+        backoff.pause();
+    }
+    __TBB_ASSERT( victim_task_pool == EmptyTaskPool || 
+                  victim_arena_slot->task_pool == LockedTaskPool && victim_task_pool != LockedTaskPool, 
+                  "not really locked victim's task pool?" );
+    return victim_task_pool;
+} // GenericScheduler::lock_task_pool
+
+inline void GenericScheduler::unlock_task_pool( ArenaSlot* victim_arena_slot, 
+                                                task** victim_task_pool ) const {
+    __TBB_ASSERT( victim_arena_slot, "empty victim arena slot pointer" );
+    __TBB_ASSERT( victim_arena_slot->task_pool == LockedTaskPool, "victim arena slot is not locked" );
+    ITT_NOTIFY(sync_releasing, victim_arena_slot);
+    __TBB_store_with_release( victim_arena_slot->task_pool, victim_task_pool );
+}
+
+#else /* !__TBB_TASK_DEQUE */
+
+inline void GenericScheduler::acquire_task_pool() const {
+    __TBB_ASSERT( arena_slot, "arena_slot not set" );
+    __TBB_ASSERT( deepest>=-1, NULL );
+    __TBB_ASSERT( arena_slot->owner_waits==false, "slot ownership corrupt?" );
+    atomic_backoff backoff;
+    bool sync_prepare_done = false;
+    for(;;) {
+#if TEST_ASSEMBLY_ROUTINES
+        __TBB_ASSERT( (arena_slot->steal_end&1)==0, "already acquired" );
+#endif /* TEST_ASSEMBLY_ROUTINES */
+        __TBB_ASSERT( !in_arena() || arena_slot==&arena->slot[dummy_slot.task_pool->prefix().arena_index], "slot ownership corrupt?" );
+        __TBB_ASSERT( arena_slot->task_pool==dummy_slot.task_pool, "slot ownership corrupt?" );
+        depth_type steal_end = arena_slot->steal_end;
+        if( (steal_end&1)==0 && (__TBB_CompareAndSwapW( &arena_slot->steal_end, steal_end|1, steal_end )&1)==0 ) {
+            // We acquired our own slot
+            ITT_NOTIFY(sync_acquired, arena_slot);
+            arena_slot->owner_waits = false;
+            break;
+        } else {
+            // Someone else acquired a lock, so pause and do exponential backoff.
+            if( !sync_prepare_done ) {
+                // Start waiting
+                ITT_NOTIFY(sync_prepare, arena_slot);
+                sync_prepare_done = true;
+            } else {
+                // after 2nd attempt, still can't acquire own pool;
+                // need notify others that the owner is waiting
+                arena_slot->owner_waits = true;
+            }
+            backoff.pause();
+#if TEST_ASSEMBLY_ROUTINES
+            __TBB_ASSERT( arena_slot->task_pool==dummy_slot.task_pool, NULL );
+#endif /* TEST_ASSEMBLY_ROUTINES */
+        }
+    }
+    __TBB_ASSERT( arena_slot->steal_end>>1 <= depth_type(array_size), NULL );
+    __TBB_ASSERT( dummy_slot.task_pool->prefix().steal_begin<=depth_type(array_size), NULL );
+    __TBB_ASSERT( deepest<=depth_type(array_size), NULL );
+} // GenericScheduler::acquire_task_pool
+
+inline void GenericScheduler::release_task_pool() const {
+    __TBB_ASSERT( arena_slot->steal_end>>1 <= depth_type(array_size), NULL );
+    __TBB_ASSERT( dummy_slot.task_pool->prefix().steal_begin<=depth_type(array_size), NULL );
+    __TBB_ASSERT( deepest<=depth_type(array_size), NULL );
+    ITT_NOTIFY(sync_releasing, arena_slot);
+    __TBB_store_with_release( arena_slot->steal_end, 2*deepest );
+}
+#endif /* !__TBB_TASK_DEQUE */
+
+#if __TBB_TASK_DEQUE
+inline task* GenericScheduler::prepare_for_spawning( task* t ) {
+    __TBB_ASSERT( t->state()==task::allocated, "attempt to spawn task that is not in 'allocated' state" );
+    t->prefix().owner = this;
+    t->prefix().state = task::ready;
+#if TBB_USE_ASSERT
+    if( task* parent = t->parent() ) {
+        internal::reference_count ref_count = parent->prefix().ref_count;
+        __TBB_ASSERT( ref_count>=0, "attempt to spawn task whose parent has a ref_count<0" );
+        __TBB_ASSERT( ref_count!=0, "attempt to spawn task whose parent has a ref_count==0 (forgot to set_ref_count?)" );
+        parent->prefix().extra_state |= es_ref_count_active;
+    }
+#endif /* TBB_USE_ASSERT */
+    affinity_id dst_thread = t->prefix().affinity;
+    __TBB_ASSERT( dst_thread == 0 || is_version_3_task(*t), "backwards compatibility to TBB 2.0 tasks is broken" );
+    if( dst_thread != 0 && dst_thread != my_affinity_id ) {
+        task_proxy& proxy = (task_proxy&)allocate_task( sizeof(task_proxy), 
+                                                      __TBB_ALLOC_TASK_ARGS(NULL, t->depth(), NULL) );
+        // Mark as a proxy
+        proxy.prefix().extra_state = es_task_proxy;
+        proxy.outbox = &arena->mailbox(dst_thread);
+        proxy.task_and_tag = intptr(t)|3;
+        proxy.next_in_mailbox = NULL;
+        ITT_NOTIFY( sync_releasing, proxy.outbox );
+        // Mail the proxy - after this point t may be destroyed by another thread at any moment.
+        proxy.outbox->push(proxy);
+        return &proxy;
+    }
+    return t;
+}
+#endif /* __TBB_TASK_DEQUE */
+
+/** Conceptually, this method should be a member of class scheduler.
+    But doing so would force us to publish class scheduler in the headers. */
+#if __TBB_RELAXED_OWNERSHIP
+void GenericScheduler::local_spawn( task& first, task*& next ) {
+    __TBB_ASSERT( Governor::local_scheduler() == this, NULL );
+#else /* !__TBB_RELAXED_OWNERSHIP */
+void GenericScheduler::spawn( task& first, task*& next ) {
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+    __TBB_ASSERT( assert_okay(), NULL );
+#if __TBB_TASK_DEQUE
+    if ( &first.prefix().next == &next ) {
+        // Single task is being spawned
+        if ( arena_slot->tail == task_pool_size ) {
+            // 1 compensates for head possibly temporarily incremented by a thief
+            if ( arena_slot->head > 1 ) {
+                // Move the busy part of the deque to the beginning of the allocated space
+                acquire_task_pool();
+                arena_slot->tail -= arena_slot->head;
+                memmove( dummy_slot.task_pool, dummy_slot.task_pool + arena_slot->head, arena_slot->tail * sizeof(task*) );
+                arena_slot->head = 0;
+                release_task_pool();
+            }
+            else {
+                grow( task_pool_size + 1 );
+            }
+        }
+        dummy_slot.task_pool[arena_slot->tail] = prepare_for_spawning( &first );
+        ITT_NOTIFY(sync_releasing, arena_slot);
+        // The following store with release is required on ia64 only
+        size_t new_tail = arena_slot->tail + 1;
+        __TBB_store_with_release( arena_slot->tail, new_tail );
+        __TBB_ASSERT ( arena_slot->tail <= task_pool_size, "task deque end was overwritten" );
+    }
+    else {
+        // Task list is being spawned
+        const size_t initial_capacity = 64;
+        task *arr[initial_capacity];
+        fast_reverse_vector<task*> tasks(arr, initial_capacity);
+        task *t_next = NULL;
+        for( task* t = &first; ; t = t_next ) {
+            // After prepare_for_spawning returns t may already have been destroyed. 
+            // So milk it while it is alive.
+            bool end = &t->prefix().next == &next;
+            t_next = t->prefix().next;
+            tasks.push_back( prepare_for_spawning(t) );
+            if( end )
+                break;
+        }
+        size_t num_tasks = tasks.size();
+        __TBB_ASSERT ( arena_index != null_arena_index, "invalid arena slot index" );
+        if ( arena_slot->tail + num_tasks > task_pool_size ) {
+            // 1 compensates for head possibly temporarily incremented by a thief
+            size_t new_size = arena_slot->tail - arena_slot->head + num_tasks + 1;
+            if ( new_size <= task_pool_size ) {
+                // Move the busy part of the deque to the beginning of the allocated space
+                acquire_task_pool();
+                arena_slot->tail -= arena_slot->head;
+                memmove( dummy_slot.task_pool, dummy_slot.task_pool + arena_slot->head, arena_slot->tail * sizeof(task*) );
+                arena_slot->head = 0;
+                release_task_pool();
+            }
+            else {
+                grow( new_size );
+            }
+        }
+#if DO_ITT_NOTIFY
+        else {
+            // The preceding if-branch issues the same ittnotify inside release_task_pool() or grow() methods
+            ITT_NOTIFY(sync_releasing, arena_slot);
+        }
+#endif /* DO_ITT_NOTIFY */
+        tasks.copy_memory( dummy_slot.task_pool + arena_slot->tail );
+        // The following store with release is required on ia64 only
+        size_t new_tail = arena_slot->tail + num_tasks;
+        __TBB_store_with_release( arena_slot->tail, new_tail );
+        __TBB_ASSERT ( arena_slot->tail <= task_pool_size, "task deque end was overwritten" );
+    }
+    if ( !in_arena() ) {
+        if ( is_worker() )
+            enter_arena();
+        else
+            try_enter_arena();
+    }
+#else /* !__TBB_TASK_DEQUE */
+    task* first_ptr = &first;
+    task** link = &first_ptr;
+    for( task* t = first_ptr; ; t=*link ) {
+        __TBB_ASSERT( t->prefix().depth==first.prefix().depth, "tasks must have same depth" );
+        __TBB_ASSERT( t->state()==task::allocated, "attempt to spawn task that is not in 'allocated' state" );
+        t->prefix().owner = this;
+        t->prefix().state = task::ready;
+#if TBB_USE_ASSERT
+        if( task* parent = t->parent() ) {
+            internal::reference_count ref_count = parent->prefix().ref_count;
+            __TBB_ASSERT( ref_count>=0, "attempt to spawn task whose parent has a ref_count<0" );
+            __TBB_ASSERT( ref_count!=0, "attempt to spawn task whose parent has a ref_count==0 (forgot to set_ref_count?)" );
+            parent->prefix().extra_state |= es_ref_count_active;
+        }
+#endif /* TBB_USE_ASSERT */
+        affinity_id dst_thread=t->prefix().affinity;
+        __TBB_ASSERT( dst_thread==0 || is_version_3_task(*t), "backwards compatibility to TBB 2.0 tasks is broken" );
+        if( dst_thread!=0 && dst_thread!=my_affinity_id ) {
+            task_proxy& proxy = (task_proxy&)allocate_task( sizeof(task_proxy), 
+                                                          __TBB_ALLOC_TASK_ARGS(NULL, t->depth(), NULL) );
+            // Mark as a proxy
+            proxy.prefix().extra_state = es_task_proxy;
+            proxy.outbox = &arena->mailbox(dst_thread);
+            proxy.task_and_tag = intptr(t)|3;
+            proxy.next_in_mailbox = NULL;
+            // Link proxy into list where the original task was.
+            *link = &proxy;
+            link = &proxy.prefix().next;
+            proxy.prefix().next = t->prefix().next;
+            ITT_NOTIFY( sync_releasing, proxy.outbox );
+            // Mail the proxy - after this point, t->prefix().next may be changed by another thread.
+            proxy.outbox->push(proxy);
+        } else {
+            link = &t->prefix().next;
+        }
+        if( &t->prefix().next==&next )
+            break;
+    }
+    task::depth_type d = first_ptr->prefix().depth;
+    __TBB_ASSERT(depth_type(array_size)>0, "casting overflow?");
+    if( d>=depth_type(array_size) ) {
+        grow( d+1 );
+    }
+    __TBB_ASSERT( assert_okay(), NULL );
+    if( !in_arena() ) {
+        try_enter_arena();
+        __TBB_ASSERT( arena_slot->steal_end&1, NULL );
+    } else {
+        acquire_task_pool();
+    }
+    TaskPool* tp = dummy_slot.task_pool;
+
+    *link = tp->array[d];
+    tp->array[d] = first_ptr;
+
+    if( d>deepest )
+        deepest = d;
+    if( d<tp->prefix().steal_begin )
+        tp->prefix().steal_begin = d;
+
+    release_task_pool();
+#endif /* !__TBB_TASK_DEQUE */
+
+    arena->mark_pool_full();
+    __TBB_ASSERT( assert_okay(), NULL );
+
+    TBB_TRACE(("%p.internal_spawn exit\n", this ));
+}
+
+#if __TBB_RELAXED_OWNERSHIP
+void GenericScheduler::local_spawn_root_and_wait( task& first, task*& next ) {
+    __TBB_ASSERT( Governor::local_scheduler() == this, NULL );
+#else /* !__TBB_RELAXED_OWNERSHIP */
+void GenericScheduler::spawn_root_and_wait( task& first, task*& next ) {
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+    __TBB_ASSERT( &first, NULL );
+    auto_empty_task dummy( __TBB_ALLOC_TASK_ARGS(this, first.prefix().depth-1, first.prefix().context) );
+    internal::reference_count n = 0;
+    for( task* t=&first; ; t=t->prefix().next ) {
+        ++n;
+#if !__TBB_RELAXED_OWNERSHIP
+        __TBB_ASSERT( t->is_owned_by_current_thread(), "root task not owned by current thread" );
+#endif
+        __TBB_ASSERT( !t->prefix().parent, "not a root task, or already running" );
+        t->prefix().parent = &dummy;
+        if( &t->prefix().next==&next ) break;
+#if __TBB_EXCEPTIONS
+        __TBB_ASSERT( t->prefix().context == t->prefix().next->prefix().context, 
+                    "all the root tasks in list must share the same context");
+#endif /* __TBB_EXCEPTIONS */
+    }
+    dummy.prefix().ref_count = n+1;
+    if( n>1 )
+        LocalSpawn( *first.prefix().next, next );
+    TBB_TRACE(("spawn_root_and_wait((task_list*)%p): calling %p.loop\n",&first,this));
+    wait_for_all( dummy, &first );
+    TBB_TRACE(("spawn_root_and_wait((task_list*)%p): return\n",&first));
+}
+
+inline task* GenericScheduler::get_mailbox_task() {
+    __TBB_ASSERT( my_affinity_id>0, "not in arena" );
+    task* result = NULL;
+    while( task_proxy* t = inbox.pop() ) {
+        intptr tat = __TBB_load_with_acquire(t->task_and_tag);
+        __TBB_ASSERT( tat==task_proxy::mailbox_bit || tat==(tat|3)&&tat!=3, NULL );
+        if( tat!=task_proxy::mailbox_bit && __TBB_CompareAndSwapW( &t->task_and_tag, task_proxy::pool_bit, tat )==tat ) {
+            // Successfully grabbed the task, and left pool seeker with job of freeing the proxy.
+            ITT_NOTIFY( sync_acquired, inbox.outbox() );
+            result = (task*)(tat & ~3);
+            result->prefix().owner = this;
+            break;
+        }
+        free_task_proxy( *t );
+    }
+    return result;
+}
+
+inline task* GenericScheduler::strip_proxy( task_proxy* tp ) {
+    __TBB_ASSERT( tp->prefix().extra_state==es_task_proxy, NULL );
+    intptr tat = __TBB_load_with_acquire(tp->task_and_tag);
+    if( (tat&3)==3 ) {
+        // proxy is shared by a pool and a mailbox.
+        // Attempt to transition it to "empty proxy in mailbox" state.
+        if( __TBB_CompareAndSwapW( &tp->task_and_tag, task_proxy::mailbox_bit, tat )==tat ) {
+            // Successfully grabbed the task, and left the mailbox with the job of freeing the proxy.
+            return (task*)(tat&~3);
+        }
+        __TBB_ASSERT( tp->task_and_tag==task_proxy::pool_bit, NULL );
+    } else {
+        // We have exclusive access to the proxy
+        __TBB_ASSERT( (tat&3)==task_proxy::pool_bit, "task did not come from pool?" );
+        __TBB_ASSERT ( !(tat&~3), "Empty proxy in the pool contains non-zero task pointer" );
+    }
+#if TBB_USE_ASSERT
+    tp->prefix().state = task::allocated;
+#endif
+    free_task_proxy( *tp );
+    // Another thread grabbed the underlying task via their mailbox
+    return NULL;
+}
+
+#if __TBB_TASK_DEQUE
+inline task* GenericScheduler::get_task() {
+    task* result = NULL;
+retry:
+    --arena_slot->tail;
+    __TBB_rel_acq_fence();
+    if ( (intptr_t)arena_slot->head > (intptr_t)arena_slot->tail ) {
+        acquire_task_pool();
+        if ( (intptr_t)arena_slot->head <= (intptr_t)arena_slot->tail ) {
+            // The thief backed off - grab the task
+            __TBB_ASSERT_VALID_TASK_PTR( dummy_slot.task_pool[arena_slot->tail] );
+            result = dummy_slot.task_pool[arena_slot->tail];
+            __TBB_POISON_TASK_PTR( dummy_slot.task_pool[arena_slot->tail] );
+        }
+        else {
+            __TBB_ASSERT ( arena_slot->head == arena_slot->tail + 1, "victim/thief arbitration algorithm failure" );
+        }
+        if ( (intptr_t)arena_slot->head < (intptr_t)arena_slot->tail ) {
+            release_task_pool();
+        }
+        else {
+            // In any case the deque is empty now, so compact it
+            arena_slot->head = arena_slot->tail = 0;
+            if ( in_arena() )
+                leave_arena();
+        }
+    }
+    else {
+        __TBB_ASSERT_VALID_TASK_PTR( dummy_slot.task_pool[arena_slot->tail] );
+        result = dummy_slot.task_pool[arena_slot->tail];
+        __TBB_POISON_TASK_PTR( dummy_slot.task_pool[arena_slot->tail] );
+    }
+    if( result && is_proxy(*result) ) {
+        result = strip_proxy((task_proxy*)result);
+        if( !result ) {
+            goto retry;
+        }
+        GATHER_STATISTIC( ++proxy_execute_count );
+        // Following assertion should be true because TBB 2.0 tasks never specify affinity, and hence are not proxied.
+        __TBB_ASSERT( is_version_3_task(*result), "backwards compatibility with TBB 2.0 broken" );
+        // Task affinity has changed.
+        innermost_running_task = result;
+        result->note_affinity(my_affinity_id);
+    }
+    return result;
+} // GenericScheduler::get_task
+
+task* GenericScheduler::steal_task( ArenaSlot& victim_slot ) {
+    task** victim_pool = lock_task_pool( &victim_slot );
+    if ( !victim_pool )
+        return NULL;
+    const size_t none = ~0u;
+    size_t first_skipped_proxy = none;
+    task* result = NULL;
+retry:
+    ++victim_slot.head;
+    __TBB_rel_acq_fence();
+    if ( (intptr_t)victim_slot.head > (intptr_t)victim_slot.tail ) {
+        --victim_slot.head;
+    }
+    else {
+        __TBB_ASSERT_VALID_TASK_PTR( victim_pool[victim_slot.head - 1]);
+        result = victim_pool[victim_slot.head - 1];
+        if( is_proxy(*result) ) {
+            task_proxy& tp = *static_cast<task_proxy*>(result);
+            // If task will likely be grabbed by whom it was mailed to, skip it.
+            if( (tp.task_and_tag & 3) == 3 && tp.outbox->recipient_is_idle() ) {
+                if ( first_skipped_proxy == none )
+                    first_skipped_proxy = victim_slot.head - 1;
+                result = NULL;
+                goto retry;
+            }
+        }
+        __TBB_POISON_TASK_PTR(victim_pool[victim_slot.head - 1]);
+    }
+    if ( first_skipped_proxy != none ) {
+        if ( result ) {
+            victim_pool[victim_slot.head - 1] = victim_pool[first_skipped_proxy];
+            __TBB_POISON_TASK_PTR( victim_pool[first_skipped_proxy] );
+            __TBB_store_with_release( victim_slot.head, first_skipped_proxy + 1 );
+        }
+        else
+            __TBB_store_with_release( victim_slot.head, first_skipped_proxy );
+    }
+    unlock_task_pool( &victim_slot, victim_pool );
+    return result;
+}
+
+#else /* !__TBB_TASK_DEQUE */
+
+inline task* GenericScheduler::get_task( depth_type d ) {
+    task* result = NULL;
+    // parallel_reduce has a subtle dependence on the order in which tasks are
+    // selected from the deque for execution.  If the task selected is not the
+    // next immediate task -- i.e. there is a hole between the previous task and
+    // the task selected -- then the selected task must be treated as stolen and
+    // the body of the task split in order to ensure the correctness of the join
+    // operations.
+retry:
+    if( deepest>=d ) {
+        acquire_task_pool();
+        task** a = dummy_slot.task_pool->array;
+        depth_type i = deepest;
+        do {
+            if( (result = a[i]) ) {
+                if( !(a[i] = result->prefix().next) )
+                    --i;
+                break;
+            }
+        } while( --i>=d );
+        deepest = i;
+        release_task_pool();
+    }
+    if( result ) {
+        if( is_proxy(*result) ) {
+            result = strip_proxy((task_proxy*)result);
+            if( !result ) {
+                goto retry;
+            }
+            GATHER_STATISTIC( ++proxy_execute_count );
+            // Following assertion should be true because TBB 2.0 tasks never specify affinity, and hence are not proxied.
+            __TBB_ASSERT( is_version_3_task(*result), "backwards compatibility with TBB 2.0 broken" );
+            // Task affinity has changed.
+            innermost_running_task = result;
+            result->note_affinity(my_affinity_id);
+        }
+    }
+    return result;
+} // GenericScheduler::get_task
+
+task* GenericScheduler::steal_task( UnpaddedArenaSlot& arena_slot, depth_type d ) {
+    task* result = NULL;
+    atomic_backoff backoff;
+    bool sync_prepare_done = false;
+    depth_type steal_end = arena_slot.steal_end;
+    for(;;) {
+        if( steal_end>>1<d ) {
+            // Nothing of interest to steal
+            if( sync_prepare_done )
+                ITT_NOTIFY(sync_cancel, &arena_slot);
+            goto done;
+        }
+        if( steal_end&1 ) {
+            // Someone else has lock on it.
+            if( arena_slot.owner_waits ) {
+                // The pool owner is waiting for it, so need to abandon locking attempts
+                if( sync_prepare_done )
+                    ITT_NOTIFY(sync_cancel, &arena_slot);
+                goto done;
+            }
+            if( !sync_prepare_done ) {
+                ITT_NOTIFY(sync_prepare, &arena_slot);
+                sync_prepare_done = true;
+            }
+            // While waiting, do exponential backoff
+            backoff.pause();
+            steal_end = arena_slot.steal_end;
+        } else {
+            depth_type tmp = steal_end;
+            steal_end = __TBB_CompareAndSwapW( &arena_slot.steal_end, steal_end+1, steal_end );
+            if( tmp==steal_end ) {
+                ITT_NOTIFY(sync_acquired, &arena_slot);
+                break;
+            }
+        }
+    }
+{
+    TaskPool* tp = arena_slot.task_pool;
+    depth_type i = tp->prefix().steal_begin;
+    if( i<d )
+        i = d;
+    for(; i<=steal_end>>1; ++i ) {
+        for( task** r = &tp->array[i]; (result=*r)!=NULL; r = &result->prefix().next ) {
+            if( is_proxy(*result) ) {
+                task_proxy& tp = *static_cast<task_proxy*>(result);
+                // If task will likely be grabbed by whom it was mailed to, skip it.
+                if( (tp.task_and_tag&3)==3 && tp.outbox->recipient_is_idle() ) 
+                    continue;
+            }
+            // Remove result from linked list
+            *r = result->prefix().next;
+            // Unlike get_task, we do not adjust i if array[i] becomes NULL.
+            // The reason is that it is a waste of time, because steal_task
+            // is relatively infrequent compared to insert_task, and the
+            // latter updates steal_begin too.
+            goto found;
+        }
+    }
+found:
+    if( tp->prefix().steal_begin>=d ) {
+        tp->prefix().steal_begin = i;
+        if( i>steal_end>>1 ) {
+            // Pool is empty.  This is important information for threads taking snapshots.
+            steal_end = -2;
+        }
+    }
+    // Release the task pool
+    ITT_NOTIFY(sync_releasing, &arena_slot);
+    __TBB_store_with_release( arena_slot.steal_end, steal_end );
+}
+done:
+    return result;
+}
+#endif /* !__TBB_TASK_DEQUE */
+
+#define ConcurrentWaitsEnabled(t) (t.prefix().context->my_version_and_traits & task_group_context::concurrent_wait)
+#define CancellationInfoPresent(t) (t->prefix().context->my_cancellation_requested)
+
+#if TBB_USE_CAPTURED_EXCEPTION
+    #define TbbCurrentException(context, TbbCapturedException) TbbCapturedException
+#else
+    #define TbbCurrentException(context, TbbCapturedException) \
+        context->my_version_and_traits & task_group_context::exact_exception    \
+            ? tbb_exception_ptr::allocate()    \
+            : tbb_exception_ptr::allocate( *(TbbCapturedException) );
+#endif /* !TBB_USE_CAPTURED_EXCEPTION */
+
+#define TbbRegisterCurrentException(context, TbbCapturedException) \
+    if ( context->cancel_group_execution() ) {  \
+        /* We are the first to signal cancellation, so store the exception that caused it. */  \
+        context->my_exception = TbbCurrentException( context, TbbCapturedException ); \
+    }
+
+#define TbbCatchAll(context)  \
+    catch ( tbb_exception& exc ) {  \
+        TbbRegisterCurrentException( context, exc.move() );   \
+    } catch ( std::exception& exc ) {   \
+        TbbRegisterCurrentException( context, captured_exception::allocate(typeid(exc).name(), exc.what()) ); \
+    } catch ( ... ) {   \
+        TbbRegisterCurrentException( context, captured_exception::allocate("...", "Unidentified exception") );\
+    }
+
+#if __TBB_RELAXED_OWNERSHIP
+template<typename SchedulerTraits>
+void CustomScheduler<SchedulerTraits>::local_wait_for_all( task& parent, task* child ) {
+    __TBB_ASSERT( Governor::local_scheduler() == this, NULL );
+    if( child ) {
+        child->prefix().owner = this;
+    }
+#else /* !__TBB_RELAXED_OWNERSHIP */
+template<typename SchedulerTraits>
+void CustomScheduler<SchedulerTraits>::wait_for_all( task& parent, task* child ) {
+    __TBB_ASSERT( !child || child->prefix().owner == this, "task child is not owned by the current thread" );
+    __TBB_ASSERT( !child || !child->parent() || child->parent() == &parent, "child has a wrong parent" );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+    if( SchedulerTraits::execute_when_spawned )
+        __TBB_ASSERT( parent.ref_count() >= (child && !virtual_scheduler_omit_wait ? 2 : 1), "ref_count is too small" );
+    else {
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+    __TBB_ASSERT( parent.ref_count() >= (child && child->parent() == &parent ? 2 : 1), "ref_count is too small" );
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+    }
+#endif
+    __TBB_ASSERT( assert_okay(), NULL );
+    // Using parent's refcount in sync_prepare (in the stealing loop below) is 
+    // a workaround for TP. We need to name it here to display correctly in Ampl.
+    if( SchedulerTraits::itt_possible )
+        ITT_SYNC_CREATE(&parent.prefix().ref_count, SyncType_Scheduler, SyncObj_TaskStealingLoop);
+#if __TBB_EXCEPTIONS
+    __TBB_ASSERT( parent.prefix().context || (is_worker() && &parent == dummy_task), "parent task does not have context" );
+#endif /* __TBB_EXCEPTIONS */
+    task* t = child;
+    task* t_next = NULL;
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+    bool logical_task;
+    bool next_logical_task;
+    bool omit_wait; 
+    int my_task_depth;
+    bool virtual_scheduler_cleanup;
+    if( SchedulerTraits::execute_when_spawned ) {
+        logical_task = true;
+        omit_wait = virtual_scheduler_omit_wait;
+        virtual_scheduler_omit_wait = false;
+        next_logical_task = false;
+        my_task_depth = 0;
+        virtual_scheduler_cleanup = false;
+    }
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+#if __TBB_TASK_DEQUE
+    // Constants all_work_done and all_local_work_done are actually unreacheable 
+    // refcount values that prevent early quitting the dispatch loop. They are 
+    // defined to be in the middle of the range of negative values representable 
+    // by the reference_count type.
+    static const reference_count 
+        // For nested dispatch loops in masters and any dispatch loops in workers
+        parents_work_done = 1,
+        // For outermost dispatch loops in masters
+        all_work_done = (reference_count)3 << (sizeof(reference_count) * 8 - 2),
+        // For termination dispatch loops in masters
+        all_local_work_done = all_work_done + 1;
+    reference_count quit_point;
+    if( innermost_running_task == dummy_task ) {
+        // We are in the outermost task dispatch loop of a master thread,
+        __TBB_ASSERT( !is_worker(), NULL );
+        quit_point = &parent == dummy_task ? all_local_work_done : all_work_done;
+    } else {
+        quit_point = parents_work_done;
+    }
+#else /* !__TBB_TASK_DEQUE */
+    depth_type d;
+    if( innermost_running_task==dummy_task ) {
+        // We are in the outermost task dispatch loop of a master thread.
+        __TBB_ASSERT( !is_worker(), NULL );
+        // Forcefully make this loop operate at zero depth.
+        d = 0;
+    } else {
+        d = parent.prefix().depth+1;
+    }
+#endif /* !__TBB_TASK_DEQUE */
+    task* old_innermost_running_task = innermost_running_task;
+#if __TBB_EXCEPTIONS
+exception_was_caught:
+    try {
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+    if(SchedulerTraits::execute_when_spawned) {
+        if(virtual_scheduler_cleanup) {
+            virtual_scheduler_cleanup = false;
+            goto virtual_scheduler_exception_was_caught;
+        }
+    }
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+#endif /* __TBB_EXCEPTIONS */
+    // Outer loop steals tasks when necessary.
+    for(;;) {
+        // Middle loop evaluates tasks that are pulled off "array".
+        do {
+            // Inner loop evaluates tasks that are handed directly to us by other tasks.
+            while(t) {
+#if TBB_USE_ASSERT
+                __TBB_ASSERT(!is_proxy(*t),"unexpected proxy");
+                __TBB_ASSERT( t->prefix().owner==this, NULL );
+#if __TBB_EXCEPTIONS
+                if ( !t->prefix().context->my_cancellation_requested ) 
+#endif
+                    __TBB_ASSERT( 1L<<t->state() & (1L<<task::allocated|1L<<task::ready|1L<<task::reexecute), NULL );
+                __TBB_ASSERT(assert_okay(),NULL);
+#endif /* TBB_USE_ASSERT */
+                t_next = NULL;
+                innermost_running_task = t;
+                t->prefix().state = task::executing;
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+                task *t_parent = t->parent();
+                if(SchedulerTraits::execute_when_spawned) {
+                    if(logical_task) {
+                        ITT_ANNOTATE_BEGIN_TASK();
+                        ++virtual_scheduler_task_depth;
+                    }
+                    else {
+                        // Wait before continuation
+                        ITT_ANNOTATE_WAIT_FOR_ALL();
+                    }
+                    my_task_depth = virtual_scheduler_task_depth;
+                    next_logical_task = true;
+                }
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+#if __TBB_EXCEPTIONS
+                if ( !t->prefix().context->my_cancellation_requested )
+#endif
+                {
+                    TBB_TRACE(("%p.wait_for_all: %p.execute\n",this,t));
+                    GATHER_STATISTIC( ++execute_count );
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+                    if (SchedulerTraits::execute_when_spawned) {
+                        if(t_parent && (t->prefix().extra_state & es_virtual_steal)) {
+                            t->note_affinity(0);
+                        }
+                    }
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+                    t_next = t->execute();
+#if STATISTICS
+                    if (t_next) {
+                        affinity_id next_affinity=t_next->prefix().affinity;
+                        if (next_affinity != 0 && next_affinity != my_affinity_id)
+                            GATHER_STATISTIC( ++proxy_bypass_count );
+                    }
+#endif
+                }
+                if( t_next ) {
+                    __TBB_ASSERT( t_next->state()==task::allocated,
+                                "if task::execute() returns task, it must be marked as allocated" );
+                    // The store here has a subtle secondary effect - it fetches *t_next into cache.
+                    t_next->prefix().owner = this;
+                }
+                __TBB_ASSERT(assert_okay(),NULL);
+                switch( task::state_type(t->prefix().state) ) {
+                    case task::executing: {
+                        // this block was copied below to case task::recycle
+                        // when making changes, check it too
+                        task* s = t->parent();
+                        __TBB_ASSERT( innermost_running_task==t, NULL );
+                        __TBB_ASSERT( t->prefix().ref_count==0, "Task still has children after it has been executed" );
+                        t->~task();
+                        if( s ) {
+                            if( tally_completion_of_one_predecessor(*s) ) {
+#if !__TBB_TASK_DEQUE
+                                depth_type s_depth = __TBB_load_with_acquire(s->prefix().depth);
+#endif /* !__TBB_TASK_DEQUE */
+#if TBB_USE_ASSERT
+                                s->prefix().extra_state &= ~es_ref_count_active;
+#endif /* TBB_USE_ASSERT */
+                                s->prefix().owner = this;
+
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+                                if( SchedulerTraits::execute_when_spawned ) {
+                                    task *t_immed = t_next;
+                                    t_next = s;
+                                    next_logical_task = false;
+                                    if( t_immed )
+                                        immediate_execute(*t_immed, false);
+                                } else {
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+#if __TBB_TASK_DEQUE
+                                if( !t_next ) {
+#else /* !__TBB_TASK_DEQUE */
+                                if( !t_next && s_depth>=deepest && s_depth>=d ) {
+                                    // Eliminate spawn/get_task pair.
+                                    // The elimination is valid because the spawn would set deepest==s_depth,
+                                    // and the subsequent call to get_task(d) would grab task s and
+                                    // restore deepest to its former value.
+#endif /* !__TBB_TASK_DEQUE */
+                                    t_next = s;
+                                } else {
+                                    LocalSpawn( *s, s->prefix().next );
+                                    __TBB_ASSERT(assert_okay(),NULL);
+                                }
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+                                }
+#endif
+                            }
+                        }
+                        free_task<no_hint>( *t );
+                        break;
+                    }
+
+                    case task::recycle: { // state set by recycle_as_safe_continuation()
+                        t->prefix().state = task::allocated;
+                        // for safe continuation, need atomically decrement ref_count;
+                        // the block was copied from above case task::executing, and changed.
+                        // Use "s" here as name for t, so that code resembles case task::executing more closely.
+                        task* const& s = t;
+                        if( tally_completion_of_one_predecessor(*s) ) {
+                            // Unused load is put here for sake of inserting an "acquire" fence.
+#if !__TBB_TASK_DEQUE
+                            (void)__TBB_load_with_acquire(s->prefix().depth);
+#endif /* !__TBB_TASK_DEQUE */
+#if TBB_USE_ASSERT
+                            s->prefix().extra_state &= ~es_ref_count_active;
+                            __TBB_ASSERT( s->prefix().owner==this, "ownership corrupt?" );
+#if !__TBB_TASK_DEQUE
+                            __TBB_ASSERT( s->prefix().depth>=d, NULL );
+#endif /* !__TBB_TASK_DEQUE */
+#endif /* TBB_USE_ASSERT */
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+                            if (SchedulerTraits::execute_when_spawned) {
+                                task *t_immed = t_next;
+                                t_next = s;
+                                next_logical_task = false;
+                                if( t_immed )
+                                    immediate_execute(*t_immed, false);
+                            } else {
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+                            if( !t_next ) {
+                                t_next = s;
+                            } else {
+                                LocalSpawn( *s, s->prefix().next );
+                                __TBB_ASSERT(assert_okay(),NULL);
+                            }
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+                            }
+#endif
+                        }
+                        break;
+                    }
+
+                    case task::reexecute: // set by recycle_to_reexecute()
+                        __TBB_ASSERT( t_next && t_next != t, "reexecution requires that method 'execute' return another task" );
+                        TBB_TRACE(("%p.wait_for_all: put task %p back into array",this,t));
+                        t->prefix().state = task::allocated;
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+                        if (SchedulerTraits::execute_when_spawned) {
+                            immediate_execute(*t, true);
+                        }
+                        else {
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+                        LocalSpawn( *t, t->prefix().next );
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+                        }
+#endif
+                        __TBB_ASSERT(assert_okay(),NULL);
+                        break;
+#if TBB_USE_ASSERT
+                    case task::allocated:
+                        break;
+                    case task::ready:
+                        __TBB_ASSERT( false, "task is in READY state upon return from method execute()" );
+                        break;
+                    default:
+                        __TBB_ASSERT( false, "illegal state" );
+#else
+                    default: // just to shut up some compilation warnings
+                        break;
+#endif /* TBB_USE_ASSERT */
+                }
+#if !__TBB_TASK_DEQUE
+                __TBB_ASSERT( !t_next||t_next->prefix().depth>=d, NULL );
+#endif /* !__TBB_TASK_DEQUE */
+
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+virtual_scheduler_exception_was_caught:
+                if (SchedulerTraits::execute_when_spawned) {
+                    if(next_logical_task && t_next) {
+                        task *t_immed = t_next;
+                        t_next = NULL;
+                        immediate_execute(*t_immed, false);
+                    }
+                    if(!logical_task || (my_task_depth == virtual_scheduler_task_depth)) {
+                        if(virtual_scheduler_task_depth) {
+                            ITT_ANNOTATE_END_TASK();
+                            --virtual_scheduler_task_depth;
+                        }
+                    }
+                    if(t_next) {
+                        if(!next_logical_task && (virtual_scheduler_task_depth < virtual_scheduler_last_spawn_depth))
+                            t_next->prefix().extra_state |= es_virtual_steal;
+                        else
+                            t_next->prefix().extra_state &= ~(es_virtual_steal);
+                    }
+
+                    logical_task = next_logical_task;
+                }
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+                t = t_next;
+            } // end of scheduler bypass loop
+            __TBB_ASSERT(assert_okay(),NULL);
+
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+            // The virtual scheduler should have no queued tasks
+            if( SchedulerTraits::execute_when_spawned )
+                break;            
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+#if __TBB_TASK_DEQUE
+            // If the parent's descendants are finished with and we are not in 
+            // the outermost dispatch loop of a master thread, then we are done.
+            // This is necessary to prevent unbounded stack growth in case of deep
+            // wait_for_all nesting. 
+            // Note that we cannot return from master's outermost dispatch loop 
+            // until we process all the tasks in the local pool, since in case 
+            // of multiple masters this could have left some of them forever 
+            // waiting for their stolen children to be processed.
+            if ( parent.prefix().ref_count == quit_point )
+                break;
+            t = get_task();
+#else /* !__TBB_TASK_DEQUE */
+            t = get_task( d );
+#endif /* !__TBB_TASK_DEQUE */
+            __TBB_ASSERT(!t || !is_proxy(*t),"unexpected proxy");
+#if TBB_USE_ASSERT
+            __TBB_ASSERT(assert_okay(),NULL);
+            if(t) {
+                AssertOkay(*t);
+                __TBB_ASSERT( t->prefix().owner==this, "thread got task that it does not own" );
+            }
+#endif /* TBB_USE_ASSERT */
+        } while( t ); // end of local task array processing loop
+
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+        // The virtual scheduler has no stealing 
+        if(SchedulerTraits::execute_when_spawned) {
+            goto done;
+        }
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+
+#if __TBB_TASK_DEQUE
+        if ( quit_point == all_local_work_done ) {
+            __TBB_ASSERT( arena_slot == &dummy_slot && arena_slot->head == 0 && arena_slot->tail == 0, NULL );
+            innermost_running_task = old_innermost_running_task;
+            return;
+        }
+#endif
+        inbox.set_is_idle( true );
+        __TBB_ASSERT( arena->prefix().number_of_workers>0||parent.prefix().ref_count==1, "deadlock detected" );
+        // The state "failure_count==-1" is used only when itt_possible is true,
+        // and denotes that a sync_prepare has not yet been issued.
+        for( int failure_count = -static_cast<int>(SchedulerTraits::itt_possible);; ++failure_count) {
+            if( parent.prefix().ref_count==1 ) {
+                if( SchedulerTraits::itt_possible ) {
+                    if( failure_count!=-1 ) {
+                        ITT_NOTIFY(sync_prepare, &parent.prefix().ref_count);
+                        // Notify Intel(R) Thread Profiler that thread has stopped spinning.
+                        ITT_NOTIFY(sync_acquired, this);
+                    }
+                    ITT_NOTIFY(sync_acquired, &parent.prefix().ref_count);
+                }
+                inbox.set_is_idle( false );
+                goto done;
+            }
+            // Try to steal a task from a random victim.
+            size_t n = arena->prefix().limit;
+            if( n>1 ) {
+                if( !my_affinity_id || !(t=get_mailbox_task()) ) {
+#if __TBB_TASK_DEQUE
+                    if ( !can_steal() )
+                        goto fail;
+#endif /* __TBB_TASK_DEQUE */
+                    size_t k = random.get() % (n-1);
+                    ArenaSlot* victim = &arena->slot[k];
+#if __TBB_TASK_DEQUE
+                    // The following condition excludes the master that might have 
+                    // already taken our previous place in the arena from the list .
+                    // of potential victims. But since such a situation can take 
+                    // place only in case of significant oversubscription, keeping
+                    // the checks simple seems to be preferable to complicating the code.
+                    if( k >= arena_index )
+                        ++victim;               // Adjusts random distribution to exclude self
+                    t = steal_task( *victim );
+#else /* !__TBB_TASK_DEQUE */
+                    if( victim>=arena_slot )
+                        ++victim;               // Adjusts random distribution to exclude self
+                    t = steal_task( *victim, d );
+#endif /* !__TBB_TASK_DEQUE */
+                    if( !t ) goto fail;
+                    if( is_proxy(*t) ) {
+                        t = strip_proxy((task_proxy*)t);
+                        if( !t ) goto fail;
+                        GATHER_STATISTIC( ++proxy_steal_count );
+                    }
+                    GATHER_STATISTIC( ++steal_count );
+                    if( is_version_3_task(*t) ) {
+                        innermost_running_task = t;
+                        t->note_affinity( my_affinity_id );
+                    }
+                } else {
+                    GATHER_STATISTIC( ++mail_received_count );
+                }
+                __TBB_ASSERT(t,NULL);
+#if __TBB_SCHEDULER_OBSERVER
+                // No memory fence required for read of global_last_observer_proxy, because prior fence on steal/mailbox suffices.
+                if( local_last_observer_proxy!=global_last_observer_proxy ) {
+                    notify_entry_observers();
+                }
+#endif /* __TBB_SCHEDULER_OBSERVER */
+                {
+#if !__TBB_TASK_DEQUE
+                    __TBB_ASSERT( t->prefix().depth>=d, NULL );
+#endif /* !__TBB_TASK_DEQUE */
+                    if( SchedulerTraits::itt_possible ) {
+                        if( failure_count!=-1 ) {
+                            // FIXME - might be victim, or might be selected from a mailbox
+                            // Notify Intel(R) Thread Profiler that thread has stopped spinning.
+                            ITT_NOTIFY(sync_acquired, this);
+                            // FIXME - might be victim, or might be selected from a mailbox
+                        }
+                    }
+                    __TBB_ASSERT(t,NULL);
+                    inbox.set_is_idle( false );
+                    break;
+                }
+            }
+fail:
+            if( SchedulerTraits::itt_possible && failure_count==-1 ) {
+                // The first attempt to steal work failed, so notify Intel(R) Thread Profiler that
+                // the thread has started spinning.  Ideally, we would do this notification
+                // *before* the first failed attempt to steal, but at that point we do not
+                // know that the steal will fail.
+                ITT_NOTIFY(sync_prepare, this);
+                failure_count = 0;
+            }
+            // Pause, even if we are going to yield, because the yield might return immediately.
+            __TBB_Pause(PauseTime);
+            int yield_threshold = 2*int(n);
+            if( failure_count>=yield_threshold ) {
+                __TBB_Yield();
+                if( failure_count>=yield_threshold+100 ) {
+#if __TBB_TASK_DEQUE
+                    bool call_wait = !old_innermost_running_task;
+#else
+                    bool call_wait = d==0 && is_worker();
+#endif
+#if __TBB_RML
+                    if( call_wait && arena->check_if_pool_is_empty() ) {
+                        inbox.set_is_idle( false );
+                        __TBB_ASSERT( !old_innermost_running_task, NULL );
+                        // Restore innermost_running_task to its original value.
+                        innermost_running_task = NULL;
+                        return;
+                    }
+                    failure_count = yield_threshold;
+#else 
+                    if( call_wait && arena->wait_while_pool_is_empty() )
+                        failure_count = 0;
+                    else
+                        failure_count = yield_threshold;
+#endif /* __TBB_RML */
+                }
+            }
+        }
+        __TBB_ASSERT(t,NULL);
+        __TBB_ASSERT(!is_proxy(*t),"unexpected proxy");
+        t->prefix().owner = this;
+    } // end of stealing loop
+#if __TBB_EXCEPTIONS
+    } TbbCatchAll( t->prefix().context );
+
+    if( task::state_type(t->prefix().state) == task::recycle ) { // state set by recycle_as_safe_continuation()
+        t->prefix().state = task::allocated;
+        // for safe continuation, need to atomically decrement ref_count;
+        if( SchedulerTraits::itt_possible )
+            ITT_NOTIFY(sync_releasing, &t->prefix().ref_count);
+        if( __TBB_FetchAndDecrementWrelease(&t->prefix().ref_count)==1 ) {
+            if( SchedulerTraits::itt_possible )
+                ITT_NOTIFY(sync_acquired, &t->prefix().ref_count);
+        }else{
+            t = NULL;
+        }
+    }
+
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+    if(SchedulerTraits::execute_when_spawned) {
+        virtual_scheduler_cleanup = true;
+    }
+#endif
+    goto exception_was_caught;
+#endif /* __TBB_EXCEPTIONS */
+done:
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+    if( SchedulerTraits::execute_when_spawned ) {
+        if(!omit_wait) {
+            ITT_ANNOTATE_WAIT_FOR_ALL();
+            parent.prefix().ref_count = 0;
+        }
+    }
+    else {
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+    if ( !ConcurrentWaitsEnabled(parent) )
+        parent.prefix().ref_count = 0;
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+    }
+#endif
+#if TBB_USE_ASSERT
+    parent.prefix().extra_state &= ~es_ref_count_active;
+#endif /* TBB_USE_ASSERT */
+    innermost_running_task = old_innermost_running_task;
+#if !__TBB_TASK_DEQUE
+    if( deepest<0 && innermost_running_task==dummy_task && in_arena() ) {
+        leave_arena(/*compress=*/true);
+    }
+#endif /* !__TBB_TASK_DEQUE */
+#if __TBB_EXCEPTIONS
+    __TBB_ASSERT(parent.prefix().context && dummy_task->prefix().context, NULL);
+    task_group_context* parent_ctx = parent.prefix().context;
+    if ( parent_ctx->my_cancellation_requested ) {
+        task_group_context::exception_container_type *pe = parent_ctx->my_exception;
+        if ( innermost_running_task == dummy_task && parent_ctx == dummy_task->prefix().context ) {
+            // We are in the outermost task dispatch loop of a master thread, and 
+            // the whole task tree has been collapsed. So we may clear cancellation data.
+            parent_ctx->my_cancellation_requested = 0;
+            __TBB_ASSERT(dummy_task->prefix().context == parent_ctx || !CancellationInfoPresent(dummy_task), 
+                         "Unexpected exception or cancellation data in the dummy task");
+            // If possible, add assertion that master's dummy task context does not have children
+        }
+        if ( pe )
+            pe->throw_self();
+    }
+    __TBB_ASSERT(!is_worker() || !CancellationInfoPresent(dummy_task), 
+                 "Worker's dummy task context modified");
+    __TBB_ASSERT(innermost_running_task != dummy_task || !CancellationInfoPresent(dummy_task), 
+                 "Unexpected exception or cancellation data in the master's dummy task");
+#endif /* __TBB_EXCEPTIONS */
+    __TBB_ASSERT( assert_okay(), NULL );
+}
+
+#undef CancellationInfoPresent
+
+#if __TBB_TASK_DEQUE
+inline void GenericScheduler::do_enter_arena() {
+    arena_slot = &arena->slot[arena_index];
+    __TBB_ASSERT ( arena_slot->head == arena_slot->tail, "task deque of a free slot must be empty" );
+    arena_slot->head = dummy_slot.head;
+    arena_slot->tail = dummy_slot.tail;
+    // Release signal on behalf of previously spawned tasks (when this thread was not in arena yet)
+    ITT_NOTIFY(sync_releasing, arena_slot);
+    __TBB_store_with_release( arena_slot->task_pool, dummy_slot.task_pool );
+    // We'll leave arena only when it's empty, so clean up local instances of indices.
+    dummy_slot.head = dummy_slot.tail = 0;
+}
+
+void GenericScheduler::enter_arena() {
+    __TBB_ASSERT ( is_worker(), "only workers should use enter_arena()" );
+    __TBB_ASSERT ( arena, "no arena: initialization not completed?" );
+    __TBB_ASSERT ( !in_arena(), "worker already in arena?" );
+    __TBB_ASSERT ( arena_index < arena->prefix().number_of_workers, "invalid worker arena slot index" );
+    __TBB_ASSERT ( arena->slot[arena_index].task_pool == EmptyTaskPool, "someone else grabbed my arena slot?" );
+    do_enter_arena();
+}
+
+void GenericScheduler::try_enter_arena() {
+    __TBB_ASSERT ( !is_worker(), "only masters should use try_enter_arena()" );
+    __TBB_ASSERT ( arena, "no arena: initialization not completed?" );
+    __TBB_ASSERT ( !in_arena(), "master already in arena?" );
+    __TBB_ASSERT ( arena_index >= arena->prefix().number_of_workers && 
+                   arena_index < arena->prefix().number_of_slots, "invalid arena slot hint value" );
+
+
+    size_t h = arena_index;
+    // We do not lock task pool upon successful entering arena
+    if( arena->slot[h].task_pool != EmptyTaskPool || 
+        __TBB_CompareAndSwapW( &arena->slot[h].task_pool, (intptr_t)LockedTaskPool, 
+                                                          (intptr_t)EmptyTaskPool ) != (intptr_t)EmptyTaskPool )
+    {
+        // Hinted arena slot is already busy, try some of the others at random
+        unsigned first = arena->prefix().number_of_workers,
+                 last = arena->prefix().number_of_slots;
+        unsigned n = last - first - 1;
+        /// \todo Is this limit reasonable?
+        size_t max_attempts = last - first;
+        for (;;) {
+            size_t k = first + random.get() % n;
+            if( k >= h )
+                ++k;    // Adjusts random distribution to exclude previously tried slot
+            h = k;
+            if( arena->slot[h].task_pool == EmptyTaskPool && 
+                __TBB_CompareAndSwapW( &arena->slot[h].task_pool, (intptr_t)LockedTaskPool, 
+                                                                  (intptr_t)EmptyTaskPool ) == (intptr_t)EmptyTaskPool )
+            {
+                break;
+            }
+            if ( --max_attempts == 0 ) {
+                // After so many attempts we are still unable to find a vacant arena slot.
+                // Cease the vain effort and work outside of arena for a while.
+                return;
+            }
+        }
+    }
+    // Successfully claimed a slot in the arena.
+    ITT_NOTIFY(sync_acquired, &arena->slot[h]);
+    __TBB_ASSERT ( arena->slot[h].task_pool == LockedTaskPool, "Arena slot is not actually acquired" );
+    arena_index = h;
+    do_enter_arena();
+    attach_mailbox( affinity_id(h+1) );
+}
+
+void GenericScheduler::leave_arena() {
+    __TBB_ASSERT( in_arena(), "Not in arena" );
+    // Do not reset arena_index. It will be used to (attempt to) re-acquire the slot next time
+    __TBB_ASSERT( &arena->slot[arena_index] == arena_slot, "Arena slot and slot index mismatch" );
+    __TBB_ASSERT ( arena_slot->task_pool == LockedTaskPool, "Task pool must be locked when leaving arena" );
+    __TBB_ASSERT ( arena_slot->head == arena_slot->tail, "Cannot leave arena when the task pool is not empty" );
+    if ( !is_worker() ) {
+        my_affinity_id = 0;
+        inbox.detach();
+    }
+    ITT_NOTIFY(sync_releasing, &arena->slot[arena_index]);
+    __TBB_store_with_release( arena_slot->task_pool, EmptyTaskPool );
+    arena_slot = &dummy_slot;
+}
+
+#else /* !__TBB_TASK_DEQUE */
+
+void GenericScheduler::try_enter_arena() {
+    __TBB_ASSERT( arena, NULL );
+    __TBB_ASSERT( arena_slot, "arena_slot not set" );
+    __TBB_ASSERT( !in_arena(), "already in arena?" );
+    unsigned n = arena->prefix().number_of_slots;
+    unsigned j = unsigned(arena->prefix().limit);
+    for( unsigned k=j; k<n; ++k ) {
+        if( arena->slot[k].steal_end==-4 && __TBB_CompareAndSwapW( &arena->slot[k].steal_end, -4|1, -4 )==-4 ) {
+            __TBB_ASSERT( arena->slot[k].steal_end==-3, "slot not really acquired?" );
+            ITT_NOTIFY(sync_acquired,&arena->slot[k]);
+            dummy_slot.task_pool->prefix().arena_index = k;
+            arena->slot[k].task_pool = dummy_slot.task_pool;
+            arena->slot[k].owner_waits = false;
+            arena_slot = &arena->slot[k];
+            // Successfully claimed a spot in the arena.  Update arena->prefix().limit.
+            do {
+                j = unsigned(arena->prefix().limit.compare_and_swap( k+1, j ));
+            } while( j<=k );
+            attach_mailbox( k+1 );
+            break;
+        }
+    }
+    __TBB_store_with_release( arena_slot->steal_end, 2*deepest+1 );
+}
+
+void GenericScheduler::leave_arena( bool compress ) {
+    __TBB_ASSERT( in_arena(), "not in arena" );
+    // Remove myself from the arena.
+    acquire_task_pool();
+#if TBB_USE_ASSERT
+    for( depth_type i=0; i<deepest; ++i )
+        __TBB_ASSERT( !dummy_slot.task_pool->array[i], "leaving arena, but have tasks to do" );
+#endif /* TBB_USE_ASSERT */
+    size_t k = dummy_slot.task_pool->prefix().arena_index;
+    __TBB_ASSERT( &arena->slot[k]==arena_slot, NULL );
+    arena_slot->task_pool = NULL;
+    my_affinity_id = 0;
+    inbox.detach();
+    dummy_slot.task_pool->prefix().arena_index = TaskPoolPrefix::null_arena_index;
+    arena_slot = &dummy_slot;
+    arena_slot->owner_waits  = false;
+    size_t n = arena->prefix().number_of_workers;
+    __TBB_ASSERT( !compress || k>=n, "must be master to compress" );
+    size_t new_limit = arena->prefix().limit;
+    if( compress && new_limit==k+1 ) {
+        // Garbage collect some slots
+        for(;;) {
+            new_limit = arena->prefix().limit.compare_and_swap( k, k+1 );
+            ITT_NOTIFY(sync_releasing, &arena->slot[k]);
+            __TBB_store_with_release( arena->slot[k].steal_end, -4 );
+            if( new_limit!=k+1 ) break;
+            if( --k<n ) break;
+            if( arena->slot[k].steal_end==-4 && __TBB_CompareAndSwapW( &arena->slot[k].steal_end, -4|1, -4 )==-4 ) {
+                ITT_NOTIFY(sync_acquired,&arena->slot[k]);
+            } else {
+                break;
+            }
+        }
+    } else {
+        ITT_NOTIFY(sync_releasing, &arena->slot[k]);
+        __TBB_store_with_release( arena->slot[k].steal_end, -4 );
+    }
+}
+#endif /* !__TBB_TASK_DEQUE */
+
+GenericScheduler* GenericScheduler::create_worker( Arena& a, size_t index ) {
+    GenericScheduler* s = GenericScheduler::allocate_scheduler(&a);
+
+    // Put myself into the arena
+#if !__TBB_TASK_DEQUE
+    ArenaSlot& slot = a.slot[index];
+    __TBB_ASSERT( slot.steal_end==-3, "slot not allocated as locked worker?" );
+    s->arena_slot = &slot;
+#endif /* !__TBB_TASK_DEQUE */
+#if __TBB_EXCEPTIONS
+    s->dummy_task->prefix().context = &dummy_context;
+    // Sync up the local cancellation state with the global one. No need for fence here.
+    s->local_cancel_count = global_cancel_count;
+#endif /* __TBB_EXCEPTIONS */
+    s->attach_mailbox( index+1 );
+#if __TBB_TASK_DEQUE
+    s->arena_index = index;
+    s->init_stack_info();
+#else /* !__TBB_TASK_DEQUE */
+    TaskPool* t = s->dummy_slot.task_pool;
+    t->prefix().arena_index = index;
+    ITT_NOTIFY(sync_releasing, &slot);
+    slot.task_pool = t;
+    slot.steal_end = -2;
+    slot.owner_waits = false;
+#endif /* !__TBB_TASK_DEQUE */
+
+#if __TBB_RML
+    __TBB_store_with_release( a.prefix().worker_list[index].scheduler, s );
+#endif /* __TBB_RML */
+    return s;
+}
+
+#if !__TBB_RML
+GenericScheduler* GenericScheduler::create_worker_heap( WorkerDescriptor& w ) {
+    __TBB_ASSERT( (uintptr)w.scheduler+1<2u, NULL );
+    unsigned n = w.arena->prefix().number_of_workers;
+    WorkerDescriptor* worker_list = w.arena->prefix().worker_list;
+    __TBB_ASSERT( &w >= worker_list, NULL );
+    unsigned i = unsigned(&w - worker_list);
+    __TBB_ASSERT( i<n, NULL );
+
+    // Start my children
+    if( 2*i+1<n ) {
+        // Have a left child, so start it.
+        worker_list[2*i+1].start_one_worker_thread();
+        if( 2*i+2<n ) {
+            // Have a right child, so start it.
+            worker_list[2*i+2].start_one_worker_thread();
+        }
+    }
+
+    GenericScheduler* s = GenericScheduler::create_worker(*w.arena,i);
+
+    // Attempt to publish worker
+    ITT_NOTIFY(sync_releasing, &w.scheduler);
+    // Note: really need only release fence on the compare-and-swap.
+    if( __TBB_CompareAndSwapW( &w.scheduler, (intptr)s, intptr(0) )==-1 ) {
+        // Master thread has already commenced terminate_workers() and not waited for us to respond.
+        // Thus we are responsible for cleaning up ourselves.
+        s->dummy_task->prefix().ref_count = 0;
+        // Do not register scheduler in thread local storage, because the storage may be gone.
+    } else {
+        __TBB_ASSERT( w.scheduler==s, NULL );
+        Governor::sign_on(s);
+    }
+    return s;
+}
+#endif /* !__TBB_RML */
+
+GenericScheduler* GenericScheduler::create_master( Arena* arena ) {
+    GenericScheduler* s = GenericScheduler::allocate_scheduler( arena );
+    task& t = *s->dummy_task;
+    s->innermost_running_task = &t;
+    t.prefix().ref_count = 1;
+    Governor::sign_on(s);
+#if __TBB_EXCEPTIONS || __TBB_TASK_DEQUE
+#if __TBB_EXCEPTIONS
+    // Context to be used by root tasks by default (if the user has not specified one).
+    // Allocation is done by NFS allocator because we cannot reuse memory allocated 
+    // for task objects since the free list is empty at the moment.
+    t.prefix().context = new ( NFS_Allocate(sizeof(task_group_context), 1, NULL) ) task_group_context(task_group_context::isolated);
+    scheduler_list_node_t &node = s->my_node;
+    {
+        mutex::scoped_lock lock(the_scheduler_list_mutex);
+        node.my_next = the_scheduler_list_head.my_next;
+        node.my_prev = &the_scheduler_list_head;
+        the_scheduler_list_head.my_next->my_prev = &node;
+        the_scheduler_list_head.my_next = &node;
+#endif /* __TBB_EXCEPTIONS */
+#if __TBB_TASK_DEQUE
+        unsigned last = arena->prefix().number_of_slots,
+                 cur_limit = arena->prefix().limit;
+        // This slot index assignment is just a hint to ...
+        if ( cur_limit < last ) {
+            // ... to prevent competition between the first few masters.
+            s->arena_index = cur_limit++;
+            // In the absence of exception handling this code is a subject to data 
+            // race in case of multiple masters concurrently entering empty arena.
+            // But it does not affect correctness, and can only result in a few 
+            // masters competing for the same arena slot during the first acquisition.
+            // The cost of competition is low in comparison to that of oversubscription.
+            arena->prefix().limit = cur_limit;
+        }
+        else {
+            // ... to minimize the probability of competition between multiple masters.
+            unsigned first = arena->prefix().number_of_workers;
+            s->arena_index = first + s->random.get() % (last - first);
+        }
+#endif /* __TBB_TASK_DEQUE */
+#if __TBB_EXCEPTIONS
+    }
+#endif
+#if __TBB_TASK_DEQUE
+    s->init_stack_info();
+#endif
+#if __TBB_EXCEPTIONS
+    // Sync up the local cancellation state with the global one. No need for fence here.
+    s->local_cancel_count = global_cancel_count;
+#endif
+#endif /* __TBB_EXCEPTIONS | __TBB_TASK_DEQUE */
+    __TBB_ASSERT( &task::self()==&t, NULL );
+#if __TBB_SCHEDULER_OBSERVER
+    // Process any existing observers.
+    s->notify_entry_observers();
+#endif /* __TBB_SCHEDULER_OBSERVER */
+    return s;
+}
+
+#if !__TBB_RML
+thread_routine_return_type __TBB_THREAD_ROUTINE GenericScheduler::worker_routine( void* arg )
+{
+    ITT_THREAD_SET_NAME(_T("TBB Worker Thread"));
+
+    GenericScheduler& scheduler = *create_worker_heap(*(WorkerDescriptor*)arg);
+
+    if( scheduler.dummy_task->prefix().ref_count==0 ) {
+        // No sense to start anything because shutdown has been requested
+        cleanup_worker(&scheduler);
+        return thread_routine_return_type(0);
+    }
+
+#if USE_PTHREAD
+    pthread_cleanup_push( cleanup_worker, &scheduler );
+#else /* USE_WINTHREAD */
+    class raii_finalizer : internal::no_copy {
+        GenericScheduler& scheduler;
+    public:
+        explicit raii_finalizer(GenericScheduler& sch) : scheduler(sch) {}
+        ~raii_finalizer() { cleanup_worker(&scheduler); }
+    } finalizer(scheduler);
+#endif
+
+#if (_WIN32||_WIN64)&&!__TBB_ipf
+    // Deal with 64K aliasing.  The formula for "offset" is a Fibonacci hash function,
+    // which has the desirable feature of spreading out the offsets fairly evenly
+    // without knowing the total number of offsets, and furthermore unlikely to
+    // accidentally cancel out other 64K aliasing schemes that Microsoft might implement later.
+    // See Knuth Vol 3. "Theorem S" for details on Fibonacci hashing.
+#if __TBB_TASK_DEQUE
+    size_t offset = (scheduler.arena_index + 1) * 40503U % (1U << 16);
+#else /* !__TBB_TASK_DEQUE */
+    size_t offset = (scheduler.dummy_slot.task_pool->prefix().arena_index+1) * 40503U % (1U<<16);
+#endif /* !__TBB_TASK_DEQUE */
+    // The following statement is really does need "volatile", otherwise the compiler might remove the _alloca.
+    void* volatile sink_for_alloca = _alloca(offset);
+    __TBB_ASSERT_EX(sink_for_alloca, "_alloca failed");
+#else
+    // Linux thread allocators avoid 64K aliasing.
+#endif /* _WIN32||_WIN64 */
+
+    scheduler.wait_for_all(*scheduler.dummy_task,NULL);
+
+#if USE_PTHREAD
+    pthread_cleanup_pop( true );
+#endif
+    return thread_routine_return_type(0);
+}
+#endif /* __TBB_RML */
+
+void GenericScheduler::cleanup_worker( void* arg ) {
+    TBB_TRACE(("%p.cleanup_worker entered\n",arg));
+    GenericScheduler& s = *(GenericScheduler*)arg;
+    __TBB_ASSERT( s.dummy_slot.task_pool, "cleaning up worker with missing task pool" );
+#if __TBB_SCHEDULER_OBSERVER
+    s.notify_exit_observers(/*is_worker=*/true);
+#endif /* __TBB_SCHEDULER_OBSERVER */
+#if !__TBB_RML
+    Arena* a = s.arena;
+#endif /* !__TBB_RML */
+#if __TBB_TASK_DEQUE
+    __TBB_ASSERT( s.arena_slot->task_pool == EmptyTaskPool || s.arena_slot->head == s.arena_slot->tail, 
+                  "worker has unfinished work at run down" );
+#else
+    __TBB_ASSERT( s.arena_slot!=&s.dummy_slot, "worker not in arena?" );
+#endif /* __TBB_TASK_DEQUE */
+    s.free_scheduler();
+#if !__TBB_RML
+    a->remove_gc_reference();
+#endif /* !__TBB_RML */
+}
+
+void GenericScheduler::cleanup_master() {
+    TBB_TRACE(("%p.cleanup_master entered\n",this));
+    GenericScheduler& s = *this; // for similarity with cleanup_worker
+    __TBB_ASSERT( s.dummy_slot.task_pool, "cleaning up master with missing task pool" );
+#if __TBB_SCHEDULER_OBSERVER
+    s.notify_exit_observers(/*is_worker=*/false);
+#endif /* __TBB_SCHEDULER_OBSERVER */
+#if __TBB_TASK_DEQUE
+    if( arena_slot->task_pool != EmptyTaskPool && arena_slot->head < arena_slot->tail )
+        s.wait_for_all( *dummy_task, NULL );
+#endif /* __TBB_TASK_DEQUE */
+    s.free_scheduler();
+    Governor::finish_with_arena();
+}
+
+#if __TBB_RML
+//------------------------------------------------------------------------
+// UnpaddedArenaPrefix
+//------------------------------------------------------------------------
+inline Arena& UnpaddedArenaPrefix::arena() {
+    return *static_cast<Arena*>(static_cast<void*>( static_cast<ArenaPrefix*>(this)+1 ));
+}
+
+void UnpaddedArenaPrefix::process( job& j ) {
+    GenericScheduler& s = static_cast<GenericScheduler&>(j);
+    __TBB_ASSERT( &s==Governor::local_scheduler(), NULL );
+    __TBB_ASSERT( !s.innermost_running_task, NULL );
+    s.wait_for_all(*s.dummy_task,NULL);
+    __TBB_ASSERT( !s.innermost_running_task, NULL );
+}
+
+void UnpaddedArenaPrefix::cleanup( job& j ) {
+    GenericScheduler& s = static_cast<GenericScheduler&>(j);
+    GenericScheduler::cleanup_worker( &s );
+}
+
+void UnpaddedArenaPrefix::open_connection_to_rml() {
+    __TBB_ASSERT( !server, NULL );
+    __TBB_ASSERT( stack_size>0, NULL );
+    if( !use_private_rml ) {
+        ::rml::factory::status_type status = rml_server_factory.make_server( server, *this );
+        if( status==::rml::factory::st_success ) {
+            __TBB_ASSERT( server, NULL );
+            return;
+        }
+        use_private_rml = true;
+        fprintf(stderr,"warning from TBB: make_server failed with status %x, falling back on private rml",status);
+    }
+    server = rml::make_private_server( *this );
+}
+
+void UnpaddedArenaPrefix::acknowledge_close_connection() {
+    arena().free_arena();
+}
+
+::rml::job* UnpaddedArenaPrefix::create_one_job() {
+    GenericScheduler* s = GenericScheduler::create_worker( arena(), next_job_index++ );
+    Governor::sign_on(s);
+    return s;
+}
+#else
+//------------------------------------------------------------------------
+// WorkerDescriptor
+//------------------------------------------------------------------------
+void WorkerDescriptor::start_one_worker_thread() {
+// Worker threads are detached right after creation. They must take care of own cleanup.
+#if USE_WINTHREAD
+    unsigned thread_id;
+    unsigned stack_size = (unsigned)arena->prefix().stack_size;
+    __TBB_ASSERT( stack_size == arena->prefix().stack_size, "Requested stack size is too large for Windows" );
+    // The return type of _beginthreadex is "uintptr_t" on new MS compilers,
+    // and 'unsigned long' on old MS compilers.  Our uintptr works for both.
+    uintptr status = _beginthreadex( NULL, stack_size, GenericScheduler::worker_routine, this, 0, &thread_id );
+    if( status==0 )
+        handle_perror(errno,"__beginthreadex");
+    else {
+        // Fake prepare/acquired pair on a fake object (need some thread-specific object 
+        // not used anywhere else) for Intel(R) Parallel Amplifier to correctly attribute the operations below.
+        ITT_SYNC_CREATE(&arena, SyncType_Scheduler, SyncObj_WorkerLifeCycleMgmt);
+        ITT_NOTIFY( sync_prepare, &arena);
+        CloseHandle((HANDLE)status); // detach
+        ITT_NOTIFY( sync_acquired, &arena );
+    }
+#else /* USE_PTHREAD */
+    int status;
+    pthread_attr_t stack_size;
+    status = pthread_attr_init( &stack_size );
+    if( status )
+        handle_perror( status, "pthread_attr_init" );
+    __TBB_ASSERT( arena->prefix().stack_size > 0, "No default worker stack size set" );
+    status = pthread_attr_setstacksize( &stack_size, arena->prefix().stack_size );
+    if( status )
+        handle_perror( status, "pthread_attr_setstacksize" );
+    pthread_t handle;
+    // This if is due to an Intel Compiler Bug, tracker # C70996
+    // This #if should be removed as soon as the bug is fixed
+#if __APPLE__ && __TBB_x86_64
+    static void *(*r)(void*) = GenericScheduler::worker_routine;
+    status = pthread_create( &handle, &stack_size, r, this );
+#else
+    status = pthread_create( &handle, &stack_size, GenericScheduler::worker_routine, this );
+#endif
+    if( status )
+        handle_perror( status, "pthread_create" );
+    status = pthread_detach( handle );
+    if( status )
+        handle_perror( status, "pthread_detach" );
+#endif /* USE_WINTHREAD */
+}
+#endif /*__TBB_RML */
+
+//------------------------------------------------------------------------
+// Methods of allocate_root_proxy
+//------------------------------------------------------------------------
+task& allocate_root_proxy::allocate( size_t size ) {
+#if __TBB_TASK_SCHEDULER_AUTO_INIT
+    internal::GenericScheduler* v = Governor::local_scheduler_with_auto_init();
+#else
+    internal::GenericScheduler* v = Governor::local_scheduler();
+#endif /* __TBB_TASK_SCHEDULER_AUTO_INIT */
+    __TBB_ASSERT( v, "thread did not activate a task_scheduler_init object?" );
+#if __TBB_EXCEPTIONS
+    task_prefix& p = v->innermost_running_task->prefix();
+#endif
+    // New root task becomes part of the currently running task's cancellation context
+    return v->allocate_task( size, __TBB_ALLOC_TASK_ARGS(NULL, p.depth+1, p.context) );
+}
+
+void allocate_root_proxy::free( task& task ) {
+    internal::GenericScheduler* v = Governor::local_scheduler();
+    __TBB_ASSERT( v, "thread does not have initialized task_scheduler_init object?" );
+#if __TBB_EXCEPTIONS
+    // No need to do anything here as long as there is no context -> task connection
+#endif /* __TBB_EXCEPTIONS */
+    v->free_task<GenericScheduler::is_local>( task );
+}
+
+#if __TBB_EXCEPTIONS
+//------------------------------------------------------------------------
+// Methods of allocate_root_with_context_proxy
+//------------------------------------------------------------------------
+task& allocate_root_with_context_proxy::allocate( size_t size ) const {
+    internal::GenericScheduler* v = Governor::local_scheduler();
+    __TBB_ASSERT( v, "thread did not activate a task_scheduler_init object?" );
+    task_prefix& p = v->innermost_running_task->prefix();
+    task& t = v->allocate_task( size, __TBB_ALLOC_TASK_ARGS(NULL, p.depth+1, &my_context) );
+    // The supported usage model prohibits concurrent initial binding. Thus we 
+    // do not need interlocked operations or fences here.
+    if ( my_context.my_kind == task_group_context::binding_required ) {
+        __TBB_ASSERT ( my_context.my_owner, "Context without owner" );
+        __TBB_ASSERT ( !my_context.my_parent, "Parent context set before initial binding" );
+        // If we are in the outermost task dispatch loop of a master thread, then
+        // there is nothing to bind this context to, and we skip the binding part.
+        if ( v->innermost_running_task != v->dummy_task ) {
+            // By not using the fence here we get faster code in case of normal execution 
+            // flow in exchange of a bit higher probability that in cases when cancellation 
+            // is in flight we will take deeper traversal branch. Normally cache coherency 
+            // mechanisms are efficient enough to deliver updated value most of the time.
+            uintptr_t local_count_snapshot = ((GenericScheduler*)my_context.my_owner)->local_cancel_count;
+            __TBB_store_with_release(my_context.my_parent, p.context);
+            uintptr_t global_count_snapshot = __TBB_load_with_acquire(global_cancel_count);
+            if ( !my_context.my_cancellation_requested ) {
+                if ( local_count_snapshot == global_count_snapshot ) {
+                    // It is possible that there is active cancellation request in our 
+                    // parents chain. Fortunately the equality of the local and global 
+                    // counters means that if this is the case it's already been propagated
+                    // to our parent.
+                    my_context.my_cancellation_requested = p.context->my_cancellation_requested;
+                } else {
+                    // Another thread was propagating cancellation request at the moment 
+                    // when we set our parent, but since we do not use locks we could've 
+                    // been skipped. So we have to make sure that we get the cancellation 
+                    // request if one of our ancestors has been canceled.
+                    my_context.propagate_cancellation_from_ancestors();
+                }
+            }
+        }
+        my_context.my_kind = task_group_context::binding_completed;
+    }
+    // else the context either has already been associated with its parent or is isolated
+    return t;
+}
+
+void allocate_root_with_context_proxy::free( task& task ) const {
+    internal::GenericScheduler* v = Governor::local_scheduler();
+    __TBB_ASSERT( v, "thread does not have initialized task_scheduler_init object?" );
+    // No need to do anything here as long as unbinding is performed by context destructor only.
+    v->free_task<GenericScheduler::is_local>( task );
+}
+#endif /* __TBB_EXCEPTIONS */
+
+//------------------------------------------------------------------------
+// Methods of allocate_continuation_proxy
+//------------------------------------------------------------------------
+task& allocate_continuation_proxy::allocate( size_t size ) const {
+    task& t = *((task*)this);
+    __TBB_ASSERT( AssertOkay(t), NULL );
+#if __TBB_RELAXED_OWNERSHIP
+    GenericScheduler* s = Governor::local_scheduler();
+#else /* !__TBB_RELAXED_OWNERSHIP */
+    GenericScheduler* s = static_cast<GenericScheduler*>(t.prefix().owner);
+    __TBB_ASSERT( Governor::local_scheduler()==s, "thread does not own this" );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+    task* parent = t.parent();
+    t.prefix().parent = NULL;
+    return s->allocate_task( size, __TBB_ALLOC_TASK_ARGS(parent, t.prefix().depth, t.prefix().context) );
+}
+
+void allocate_continuation_proxy::free( task& mytask ) const {
+    // Restore the parent as it was before the corresponding allocate was called.
+    ((task*)this)->prefix().parent = mytask.parent();
+    Governor::local_scheduler()->free_task<GenericScheduler::is_local>(mytask);
+}
+
+//------------------------------------------------------------------------
+// Methods of allocate_child_proxy
+//------------------------------------------------------------------------
+task& allocate_child_proxy::allocate( size_t size ) const {
+    task& t = *((task*)this);
+    __TBB_ASSERT( AssertOkay(t), NULL );
+#if __TBB_RELAXED_OWNERSHIP
+    GenericScheduler* s = Governor::local_scheduler();
+#else /* !__TBB_RELAXED_OWNERSHIP */
+    GenericScheduler* s = static_cast<GenericScheduler*>(t.prefix().owner);
+    __TBB_ASSERT( Governor::local_scheduler()==s, "thread does not own this" );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+    return s->allocate_task( size, __TBB_ALLOC_TASK_ARGS(&t, t.prefix().depth+1, t.prefix().context) );
+}
+
+void allocate_child_proxy::free( task& mytask ) const {
+    Governor::local_scheduler()->free_task<GenericScheduler::is_local>(mytask);
+}
+
+//------------------------------------------------------------------------
+// Methods of allocate_additional_child_of_proxy
+//------------------------------------------------------------------------
+task& allocate_additional_child_of_proxy::allocate( size_t size ) const {
+    __TBB_ASSERT( AssertOkay(self), NULL );
+    parent.increment_ref_count();
+#if __TBB_RELAXED_OWNERSHIP
+    GenericScheduler* s = Governor::local_scheduler();
+#else /* !__TBB_RELAXED_OWNERSHIP */
+    GenericScheduler* s = static_cast<GenericScheduler*>(self.prefix().owner);
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+    return s->allocate_task( size, __TBB_ALLOC_TASK_ARGS(&parent, parent.prefix().depth+1, parent.prefix().context) );
+}
+
+void allocate_additional_child_of_proxy::free( task& task ) const {
+    // Undo the increment.  We do not check the result of the fetch-and-decrement.
+    // We could consider be spawning the task if the fetch-and-decrement returns 1.
+    // But we do not know that was the programmer's intention.
+    // Furthermore, if it was the programmer's intention, the program has a fundamental
+    // race condition (that we warn about in Reference manual), because the
+    // reference count might have become zero before the corresponding call to
+    // allocate_additional_child_of_proxy::allocate.
+    parent.internal_decrement_ref_count();
+    Governor::local_scheduler()->free_task<GenericScheduler::is_local>(task);
+}
+
+//------------------------------------------------------------------------
+// Support for auto_partitioner
+//------------------------------------------------------------------------
+size_t get_initial_auto_partitioner_divisor() {
+    const size_t X_FACTOR = 4;
+    return X_FACTOR * (Governor::number_of_workers_in_arena()+1);
+}
+
+//------------------------------------------------------------------------
+// Methods of affinity_partitioner_base_v3
+//------------------------------------------------------------------------
+void affinity_partitioner_base_v3::resize( unsigned factor ) {
+    // Check factor to avoid asking for number of workers while there might be no arena.
+    size_t new_size = factor ? factor*(Governor::number_of_workers_in_arena()+1) : 0;
+    if( new_size!=my_size ) {
+        if( my_array ) {
+            NFS_Free( my_array );
+            // Following two assignments must be done here for sake of exception safety.
+            my_array = NULL;
+            my_size = 0;
+        } 
+        if( new_size ) {
+            my_array = static_cast<affinity_id*>(NFS_Allocate(new_size,sizeof(affinity_id), NULL ));
+            memset( my_array, 0, sizeof(affinity_id)*new_size );
+            my_size = new_size;
+        } 
+    } 
+}
+
+} // namespace internal
+
+using namespace tbb::internal;
+
+#if __TBB_EXCEPTIONS
+
+//------------------------------------------------------------------------
+// captured_exception
+//------------------------------------------------------------------------
+
+inline 
+void copy_string ( char*& dst, const char* src ) {
+    if ( src ) {
+        size_t len = strlen(src) + 1;
+        dst = (char*)allocate_via_handler_v3(len);
+        strncpy (dst, src, len);
+    }
+    else
+        dst = NULL;
+}
+
+void captured_exception::set ( const char* name, const char* info ) throw()
+{
+    copy_string(const_cast<char*&>(my_exception_name), name);
+    copy_string(const_cast<char*&>(my_exception_info), info);
+}
+
+void captured_exception::clear () throw() {
+    deallocate_via_handler_v3 (const_cast<char*>(my_exception_name));
+    deallocate_via_handler_v3 (const_cast<char*>(my_exception_info));
+}
+
+captured_exception* captured_exception::move () throw() {
+    captured_exception *e = (captured_exception*)allocate_via_handler_v3(sizeof(captured_exception));
+    if ( e ) {
+        new (e) captured_exception();
+        e->my_exception_name = my_exception_name;
+        e->my_exception_info = my_exception_info;
+        e->my_dynamic = true;
+        my_exception_name = my_exception_info = NULL;
+    }
+    return e;
+}
+
+void captured_exception::destroy () throw() {
+    __TBB_ASSERT ( my_dynamic, "Method destroy can be used only on objects created by clone or allocate" );
+    if ( my_dynamic ) {
+        this->captured_exception::~captured_exception();
+        deallocate_via_handler_v3 (this);
+    }
+}
+
+captured_exception* captured_exception::allocate ( const char* name, const char* info ) {
+    captured_exception *e = (captured_exception*)allocate_via_handler_v3( sizeof(captured_exception) );
+    if ( e ) {
+        new (e) captured_exception(name, info);
+        e->my_dynamic = true;
+    }
+    return e;
+}
+
+const char* captured_exception::name() const throw() {
+    return my_exception_name;
+}
+
+const char* captured_exception::what() const throw() {
+    return my_exception_info;
+}
+
+
+//------------------------------------------------------------------------
+// tbb_exception_ptr
+//------------------------------------------------------------------------
+
+#if !TBB_USE_CAPTURED_EXCEPTION
+
+namespace internal {
+
+template<typename T>
+tbb_exception_ptr* AllocateExceptionContainer( const T& src ) {
+    tbb_exception_ptr *eptr = (tbb_exception_ptr*)allocate_via_handler_v3( sizeof(tbb_exception_ptr) );
+    if ( eptr )
+        new (eptr) tbb_exception_ptr(src);
+    return eptr;
+}
+
+tbb_exception_ptr* tbb_exception_ptr::allocate () {
+    return AllocateExceptionContainer( std::current_exception() );
+}
+
+tbb_exception_ptr* tbb_exception_ptr::allocate ( const tbb_exception& ) {
+    return AllocateExceptionContainer( std::current_exception() );
+}
+
+tbb_exception_ptr* tbb_exception_ptr::allocate ( const captured_exception& src ) {
+    return AllocateExceptionContainer( src );
+}
+
+void tbb_exception_ptr::destroy () throw() {
+    this->tbb_exception_ptr::~tbb_exception_ptr();
+    deallocate_via_handler_v3 (this);
+}
+
+} // namespace internal
+#endif /* !TBB_USE_CAPTURED_EXCEPTION */
+
+
+//------------------------------------------------------------------------
+// task_group_context
+//------------------------------------------------------------------------
+
+task_group_context::~task_group_context () {
+    if ( my_kind != isolated ) {
+        __TBB_ASSERT ( Governor::local_scheduler() == my_owner, "Task group context is destructed by wrong thread" );
+        GenericScheduler *s = (GenericScheduler*)my_owner;
+        my_node.my_next->my_prev = my_node.my_prev;
+        uintptr_t local_count_snapshot = s->local_cancel_count;
+        my_node.my_prev->my_next = my_node.my_next;
+        __TBB_rel_acq_fence();
+        if ( local_count_snapshot != global_cancel_count ) {
+            // Another thread was propagating cancellation request when we removed
+            // ourselves from the list. We must ensure that it does not access us 
+            // when this destructor finishes. We'll be able to acquire the lock 
+            // below only after the other thread finishes with us.
+            spin_mutex::scoped_lock lock(s->context_list_mutex);
+        }
+    }
+#if TBB_USE_DEBUG
+    my_version_and_traits = 0xDeadBeef;
+#endif /* TBB_USE_DEBUG */
+    if ( my_exception )
+        my_exception->destroy();
+}
+
+void task_group_context::init () {
+    __TBB_ASSERT ( sizeof(uintptr_t) < 32, "Layout of my_version_and_traits must be reconsidered on this platform" );
+    __TBB_ASSERT ( sizeof(task_group_context) == 2 * NFS_MaxLineSize, "Context class has wrong size - check padding and members alignment" );
+    __TBB_ASSERT ( (uintptr_t(this) & (sizeof(my_cancellation_requested) - 1)) == 0, "Context is improperly aligned" );
+    __TBB_ASSERT ( my_kind == isolated || my_kind == bound, "Context can be created only as isolated or bound" );
+    my_parent = NULL;
+    my_cancellation_requested = 0;
+    my_exception = NULL;
+    if ( my_kind == bound ) {
+#if __TBB_TASK_SCHEDULER_AUTO_INIT
+        GenericScheduler *s = Governor::local_scheduler_with_auto_init();
+#else
+        GenericScheduler *s = Governor::local_scheduler();
+#endif /* __TBB_TASK_SCHEDULER_AUTO_INIT */
+        my_owner = s;
+        __TBB_ASSERT ( my_owner, "Thread has not activated a task_scheduler_init object?" );
+        // Backward links are used by this thread only, thus no fences are necessary
+        my_node.my_prev = &s->context_list_head;
+        s->context_list_head.my_next->my_prev = &my_node;
+        // The only operation on the thread local list of contexts that may be performed 
+        // concurrently is its traversal by another thread while propagating cancellation
+        // request. Therefore the release fence below is necessary to ensure that the new 
+        // value of my_node.my_next is visible to the traversing thread 
+        // after it reads new value of v->context_list_head.my_next.
+        my_node.my_next = s->context_list_head.my_next;
+        __TBB_store_with_release(s->context_list_head.my_next, &my_node);
+    }
+}
+
+bool task_group_context::cancel_group_execution () {
+    __TBB_ASSERT ( my_cancellation_requested == 0 || my_cancellation_requested == 1, "Invalid cancellation state");
+    if ( my_cancellation_requested || __TBB_CompareAndSwapW(&my_cancellation_requested, 1, 0) ) {
+        // This task group has already been canceled
+        return false;
+    }
+    Governor::local_scheduler()->propagate_cancellation(this);
+    return true;
+}
+
+bool task_group_context::is_group_execution_cancelled () const {
+    return my_cancellation_requested != 0;
+}
+
+// IMPORTANT: It is assumed that this method is not used concurrently!
+void task_group_context::reset () {
+    //! \todo Add assertion that this context does not have children
+    // No fences are necessary since this context can be accessed from another thread
+    // only after stealing happened (which means necessary fences were used).
+    if ( my_exception )  {
+        my_exception->destroy();
+        my_exception = NULL;
+    }
+    my_cancellation_requested = 0;
+}
+
+void task_group_context::propagate_cancellation_from_ancestors () {
+    task_group_context *parent = my_parent;
+    while ( parent && !parent->my_cancellation_requested )
+        parent = parent->my_parent;
+    if ( parent ) {
+        // One of our ancestor groups was canceled. Cancel all its descendants.
+        task_group_context *ctx = this;
+        do {
+            __TBB_store_with_release(ctx->my_cancellation_requested, 1);
+            ctx = ctx->my_parent;
+        } while ( ctx != parent );
+    }
+}
+
+void task_group_context::register_pending_exception () {
+    if ( my_cancellation_requested )
+        return;
+    try {
+        throw;
+    } TbbCatchAll( this );
+}
+
+#endif /* __TBB_EXCEPTIONS */
+
+//------------------------------------------------------------------------
+// task
+//------------------------------------------------------------------------
+
+void task::internal_set_ref_count( int count ) {
+    __TBB_ASSERT( count>=0, "count must not be negative" );
+    __TBB_ASSERT( !(prefix().extra_state&GenericScheduler::es_ref_count_active), "ref_count race detected" );
+    ITT_NOTIFY(sync_releasing, &prefix().ref_count);
+    prefix().ref_count = count;
+}
+
+internal::reference_count task::internal_decrement_ref_count() {
+    ITT_NOTIFY( sync_releasing, &prefix().ref_count );
+    internal::reference_count k = __TBB_FetchAndDecrementWrelease( &prefix().ref_count );
+    __TBB_ASSERT( k>=1, "task's reference count underflowed" );
+    if( k==1 )
+        ITT_NOTIFY( sync_acquired, &prefix().ref_count );
+    return k-1;
+}
+
+task& task::self() {
+#if __TBB_TASK_SCHEDULER_AUTO_INIT
+    GenericScheduler *v = Governor::local_scheduler_with_auto_init();
+#else
+    GenericScheduler *v = Governor::local_scheduler();
+#endif /* __TBB_TASK_SCHEDULER_AUTO_INIT */
+    __TBB_ASSERT( v->assert_okay(), NULL );
+    __TBB_ASSERT( v->innermost_running_task, NULL );
+    return *v->innermost_running_task;
+}
+
+bool task::is_owned_by_current_thread() const {
+#if __TBB_RELAXED_OWNERSHIP
+    return true;
+#else /* !__TBB_RELAXED_OWNERSHIP */
+    return Governor::local_scheduler()==prefix().owner;
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+}
+
+void task::destroy( task& victim ) {
+#if !__TBB_RELAXED_OWNERSHIP
+    __TBB_ASSERT( is_owned_by_current_thread(), "task-destroyer is not owned by the current thread" );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+    __TBB_ASSERT( victim.prefix().ref_count== (ConcurrentWaitsEnabled(victim) ? 1 : 0), "Task being destroyed must not have children" );
+    __TBB_ASSERT( victim.state()==task::allocated, "illegal state for victim task" );
+    task* parent = victim.parent();
+    victim.~task();
+    if( parent ) {
+        __TBB_ASSERT( parent->state()==task::allocated, "attempt to destroy child of running or corrupted parent?" );
+        parent->internal_decrement_ref_count();
+    }
+    Governor::local_scheduler()->free_task<GenericScheduler::no_hint>( victim );
+}
+
+void task::spawn_and_wait_for_all( task_list& list ) {
+#if !__TBB_RELAXED_OWNERSHIP
+    __TBB_ASSERT( is_owned_by_current_thread(), "'this' not owned by current thread" );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+    scheduler* s = Governor::local_scheduler();
+    task* t = list.first;
+    if( t ) {
+        if( &t->prefix().next!=list.next_ptr )
+            s->spawn( *t->prefix().next, *list.next_ptr );
+        list.clear();
+    }
+    s->wait_for_all( *this, t );
+}
+
+/** Defined out of line so that compiler does not replicate task's vtable. 
+    It's pointless to define it inline anyway, because all call sites to it are virtual calls
+    that the compiler is unlikely to optimize. */
+void task::note_affinity( affinity_id ) {
+}
+
+//------------------------------------------------------------------------
+// task_scheduler_init
+//------------------------------------------------------------------------
+
+void task_scheduler_init::initialize( int number_of_threads ) {
+    initialize( number_of_threads, 0 );
+}
+
+void task_scheduler_init::initialize( int number_of_threads, stack_size_type thread_stack_size ) {
+    if( number_of_threads!=deferred ) {
+        __TBB_ASSERT( !my_scheduler, "task_scheduler_init already initialized" );
+        __TBB_ASSERT( number_of_threads==-1 || number_of_threads>=1,
+                    "number_of_threads for task_scheduler_init must be -1 or positive" );
+        // Double-check
+        if( !__TBB_InitOnce::initialization_done() ) {
+            DoOneTimeInitializations();
+        }
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+        if( use_virtual_scheduler ) {
+            number_of_threads = 1;
+            ITT_ANNOTATE_BEGIN_SITE();
+        }
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+        GenericScheduler* s = Governor::local_scheduler();
+        if( s ) {
+            s->ref_count += 1;
+        } else {
+            Arena* a = Governor::obtain_arena(number_of_threads,thread_stack_size);
+            s = GenericScheduler::create_master( a );
+        }
+        my_scheduler = s;
+    } else {
+        __TBB_ASSERT( !thread_stack_size, "deferred initialization ignores stack size setting" );
+    }
+}
+
+void task_scheduler_init::terminate() {
+    TBB_TRACE(("task_scheduler_init::terminate(): this=%p\n", this));
+    GenericScheduler* s = static_cast<GenericScheduler*>(my_scheduler);
+    my_scheduler = NULL;
+    __TBB_ASSERT( s, "task_scheduler_init::terminate without corresponding task_scheduler_init::initialize()");
+#if __TBB_PROVIDE_VIRTUAL_SCHEDULER
+    if( use_virtual_scheduler ) {
+        ITT_ANNOTATE_END_SITE();
+    }
+#endif /* __TBB_PROVIDE_VIRTUAL_SCHEDULER */
+    if( !--(s->ref_count) )
+        s->cleanup_master();
+}
+
+int task_scheduler_init::default_num_threads() {
+    // No memory fence required, because at worst each invoking thread calls NumberOfHardwareThreads.
+    int n = DefaultNumberOfThreads;
+    if( !n ) {
+        DefaultNumberOfThreads = n = DetectNumberOfWorkers();
+    }
+    return n;
+}
+
+#if __TBB_SCHEDULER_OBSERVER
+//------------------------------------------------------------------------
+// Methods of observer_proxy
+//------------------------------------------------------------------------
+namespace internal {
+
+#if TBB_USE_ASSERT
+static atomic<int> observer_proxy_count;
+
+struct check_observer_proxy_count {
+    ~check_observer_proxy_count() {
+        if( observer_proxy_count!=0 ) {
+            fprintf(stderr,"warning: leaked %ld observer_proxy objects\n", long(observer_proxy_count));
+        }
+    }
+};
+
+static check_observer_proxy_count the_check_observer_proxy_count;
+#endif /* TBB_USE_ASSERT */
+
+observer_proxy::observer_proxy( task_scheduler_observer_v3& tso ) : next(NULL), observer(&tso) {
+#if TBB_USE_ASSERT
+    ++observer_proxy_count;
+#endif /* TBB_USE_ASSERT */
+    // 1 for observer
+    gc_ref_count = 1;
+    {
+        // Append to the global list
+        task_scheduler_observer_mutex_scoped_lock lock(the_task_scheduler_observer_mutex.begin()[0],/*is_writer=*/true);
+        observer_proxy* p = global_last_observer_proxy;
+        prev = p;
+        if( p ) 
+            p->next=this;
+        else 
+            global_first_observer_proxy = this;
+        global_last_observer_proxy = this;
+    }
+}
+
+void observer_proxy::remove_from_list() {
+    // Take myself off the global list.  
+    if( next ) 
+        next->prev = prev;
+    else 
+        global_last_observer_proxy = prev;
+    if( prev )
+        prev->next = next;
+    else 
+        global_first_observer_proxy = next;
+#if TBB_USE_ASSERT
+    poison_pointer(prev);
+    poison_pointer(next);
+    gc_ref_count = -666;
+#endif /* TBB_USE_ASSERT */
+}
+
+void observer_proxy::remove_ref_slow() {
+    int r = gc_ref_count;
+    while(r>1) {
+        __TBB_ASSERT( r!=0, NULL );
+        int r_old = gc_ref_count.compare_and_swap(r-1,r);
+        if( r_old==r ) {
+            // Successfully decremented count.
+            return;
+        } 
+        r = r_old;
+    } 
+    __TBB_ASSERT( r==1, NULL );
+    // Reference count might go to zero
+    {
+        task_scheduler_observer_mutex_scoped_lock lock(the_task_scheduler_observer_mutex.begin()[0],/*is_writer=*/true);
+        r = --gc_ref_count;
+        if( !r ) {
+            remove_from_list();
+        } 
+    }
+    if( !r ) {
+        __TBB_ASSERT( gc_ref_count == -666, NULL );
+#if TBB_USE_ASSERT
+        --observer_proxy_count;
+#endif /* TBB_USE_ASSERT */
+        delete this;
+    }
+}
+
+observer_proxy* observer_proxy::process_list( observer_proxy* local_last, bool is_worker, bool is_entry ) {
+    // Pointer p marches though the list.
+    // If is_entry, start with our previous list position, otherwise start at beginning of list.
+    observer_proxy* p = is_entry ? local_last : NULL;
+    for(;;) { 
+        task_scheduler_observer* tso=NULL;
+        // Hold lock on list only long enough to advance to next proxy in list.
+        { 
+            task_scheduler_observer_mutex_scoped_lock lock(the_task_scheduler_observer_mutex.begin()[0],/*is_writer=*/false);
+            do {
+                if( local_last && local_last->observer ) {
+                    // 2 = 1 for observer and 1 for local_last
+                    __TBB_ASSERT( local_last->gc_ref_count>=2, NULL );  
+                    // Can decrement count quickly, because it cannot become zero here.
+                    --local_last->gc_ref_count;
+                    local_last = NULL;
+                } else {
+                    // Use slow form of decrementing the reference count, after lock is released.
+                }  
+                if( p ) {
+                    // We were already processing the list.
+                    if( observer_proxy* q = p->next ) {
+                        // Step to next item in list.
+                        p=q;
+                    } else {
+                        // At end of list.
+                        if( is_entry ) {  
+                            // Remember current position in the list, so we can start at on the next call.
+                            ++p->gc_ref_count;
+                        } else {
+                            // Finishin running off the end of the list
+                            p=NULL;
+                        }
+                        goto done;
+                    }
+                } else {
+                    // Starting pass through the list
+                    p = global_first_observer_proxy;
+                    if( !p ) 
+                        goto done;
+                } 
+                tso = p->observer;
+            } while( !tso );
+            ++p->gc_ref_count;
+            ++tso->my_busy_count;
+        }
+        __TBB_ASSERT( !local_last || p!=local_last, NULL );
+        if( local_last )
+            local_last->remove_ref_slow();
+        // Do not hold any locks on the list while calling user's code.
+        try {    
+            if( is_entry )
+                tso->on_scheduler_entry( is_worker );
+            else
+                tso->on_scheduler_exit( is_worker );
+        } catch(...) {
+            // Suppress exception, because user routines are supposed to be observing, not changing
+            // behavior of a master or worker thread.
+#if TBB_USE_ASSERT
+            fprintf(stderr,"warning: %s threw exception\n",is_entry?"on_scheduler_entry":"on_scheduler_exit"); 
+#endif /* __TBB_USE_ASSERT */        
+        }
+        intptr bc = --tso->my_busy_count;
+        __TBB_ASSERT_EX( bc>=0, "my_busy_count underflowed" );
+        local_last = p;
+    }
+done:
+    // Return new value to be used as local_last next time.
+    if( local_last )
+        local_last->remove_ref_slow();
+    __TBB_ASSERT( !p || is_entry, NULL );
+    return p;
+}
+
+void task_scheduler_observer_v3::observe( bool state ) {
+    if( state ) {
+        if( !my_proxy ) {
+            if( !__TBB_InitOnce::initialization_done() )
+                DoOneTimeInitializations();
+            my_busy_count = 0;
+            my_proxy = new observer_proxy(*this);
+            if( GenericScheduler* s = Governor::local_scheduler() ) {
+                // Notify newly created observer of its own thread.
+                // Any other pending observers are notified too.
+                s->notify_entry_observers();
+            }
+        } 
+    } else {
+        if( observer_proxy* proxy = my_proxy ) {
+            my_proxy = NULL;
+            __TBB_ASSERT( proxy->gc_ref_count>=1, "reference for observer missing" );
+            {
+                task_scheduler_observer_mutex_scoped_lock lock(the_task_scheduler_observer_mutex.begin()[0],/*is_writer=*/true);
+                proxy->observer = NULL;
+            }
+            proxy->remove_ref_slow();
+            while( my_busy_count ) {
+                __TBB_Yield();
+            }
+        }
+    }
+}
+
+} // namespace internal
+#endif /* __TBB_SCHEDULER_OBSERVER */
+
+} // namespace tbb
+
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_assert_impl.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_assert_impl.h
new file mode 100644 (file)
index 0000000..2a381f9
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// IMPORTANT: To use assertion handling in TBB, exactly one of the TBB source files
+// should #include tbb_assert_impl.h thus instantiating assertion handling routines.
+// The intent of putting it to a separate file is to allow some tests to use it
+// as well in order to avoid dependency on the library.
+
+// include headers for required function declarations
+#include <cstdlib>
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#if _MSC_VER
+#include <crtdbg.h>
+#define __TBB_USE_DBGBREAK_DLG TBB_USE_DEBUG
+#endif
+
+#if _MSC_VER >= 1400
+#define __TBB_EXPORTED_FUNC   __cdecl
+#else
+#define __TBB_EXPORTED_FUNC
+#endif
+
+using namespace std;
+
+namespace tbb {
+    //! Type for an assertion handler
+    typedef void(*assertion_handler_type)( const char* filename, int line, const char* expression, const char * comment );
+
+    static assertion_handler_type assertion_handler;
+
+    assertion_handler_type __TBB_EXPORTED_FUNC set_assertion_handler( assertion_handler_type new_handler ) {
+        assertion_handler_type old_handler = assertion_handler;
+        assertion_handler = new_handler;
+        return old_handler;
+    }
+
+    void __TBB_EXPORTED_FUNC assertion_failure( const char* filename, int line, const char* expression, const char* comment ) {
+        if( assertion_handler_type a = assertion_handler ) {
+            (*a)(filename,line,expression,comment);
+        } else {
+            static bool already_failed;
+            if( !already_failed ) {
+                already_failed = true;
+                fprintf( stderr, "Assertion %s failed on line %d of file %s\n",
+                         expression, line, filename );
+                if( comment )
+                    fprintf( stderr, "Detailed description: %s\n", comment );
+#if __TBB_USE_DBGBREAK_DLG
+                if(1 == _CrtDbgReport(_CRT_ASSERT, filename, line, "tbb_debug.dll", "%s\r\n%s", expression, comment?comment:""))
+                        _CrtDbgBreak();
+#else
+                fflush(stderr);
+                abort();
+#endif
+            }
+        }
+    }
+
+#if defined(_MSC_VER)&&_MSC_VER<1400
+#   define vsnprintf _vsnprintf
+#endif
+
+    namespace internal {
+        //! Report a runtime warning.
+        void __TBB_EXPORTED_FUNC runtime_warning( const char* format, ... )
+        {
+            char str[1024]; memset(str, 0, 1024);
+            va_list args; va_start(args, format);
+            vsnprintf( str, 1024-1, format, args);
+            fprintf( stderr, "TBB Warning: %s\n", str);
+        }
+    } // namespace internal
+
+} /* namespace tbb */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_misc.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_misc.cpp
new file mode 100644 (file)
index 0000000..75ba5d5
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Source file for miscellaneous entities that are infrequently referenced by 
+// an executing program.
+
+#include "tbb/tbb_stddef.h"
+// Out-of-line TBB assertion handling routines are instantiated here.
+#include "tbb_assert_impl.h"
+
+#include "tbb_misc.h"
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#if defined(__EXCEPTIONS) || defined(_CPPUNWIND) || defined(__SUNPRO_CC)
+    #include "tbb/tbb_exception.h"
+    #include <string> // std::string is used to construct runtime_error
+    #include <stdexcept>
+#endif
+
+using namespace std;
+
+#include "tbb/tbb_machine.h"
+
+namespace tbb {
+
+namespace internal {
+
+#if defined(__EXCEPTIONS) || defined(_CPPUNWIND) || defined(__SUNPRO_CC)
+// The above preprocessor symbols are defined by compilers when exception handling is enabled.
+// However, in some cases it could be disabled for this file.
+
+void handle_perror( int error_code, const char* what ) {
+    char buf[128];
+    sprintf(buf,"%s: ",what);
+    char* end = strchr(buf,0);
+    size_t n = buf+sizeof(buf)-end;
+    strncpy( end, strerror( error_code ), n );
+    // Ensure that buffer ends in terminator.
+    buf[sizeof(buf)-1] = 0; 
+    throw runtime_error(buf);
+}
+
+void throw_bad_last_alloc_exception_v4() 
+{
+    throw bad_last_alloc();
+}
+#endif //__EXCEPTIONS || _CPPUNWIND
+
+bool GetBoolEnvironmentVariable( const char * name ) {
+    if( const char* s = getenv(name) )
+        return strcmp(s,"0") != 0;
+    return false;
+}
+
+#include "tbb_version.h"
+
+/** The leading "\0" is here so that applying "strings" to the binary delivers a clean result. */
+static const char VersionString[] = "\0" TBB_VERSION_STRINGS;
+
+static bool PrintVersionFlag = false;
+
+void PrintVersion() {
+    PrintVersionFlag = true;
+    fputs(VersionString+1,stderr);
+}
+
+void PrintExtraVersionInfo( const char* category, const char* description ) {
+    if( PrintVersionFlag ) 
+        fprintf(stderr, "%s: %s\t%s\n", "TBB", category, description );
+}
+
+void PrintRMLVersionInfo( void* arg, const char* server_info )
+{
+    PrintExtraVersionInfo( server_info, (const char *)arg );
+}
+
+} // namespace internal
+extern "C" int TBB_runtime_interface_version() {
+    return TBB_INTERFACE_VERSION;
+}
+
+} // namespace tbb
+
+#if !__TBB_RML_STATIC
+#if __TBB_x86_32
+
+#include "tbb/atomic.h"
+
+// in MSVC environment, int64_t defined in tbb::internal namespace only (see tbb_stddef.h)
+#if _MSC_VER
+using tbb::internal::int64_t;
+#endif
+
+//! Warn about 8-byte store that crosses a cache line.
+extern "C" void __TBB_machine_store8_slow_perf_warning( volatile void *ptr ) {
+    // Report run-time warning unless we have already recently reported warning for that address.
+    const unsigned n = 4;
+    static tbb::atomic<void*> cache[n];
+    static tbb::atomic<unsigned> k;
+    for( unsigned i=0; i<n; ++i ) 
+        if( ptr==cache[i] ) 
+            goto done;
+    cache[(k++)%n] = const_cast<void*>(ptr);
+    tbb::internal::runtime_warning( "atomic store on misaligned 8-byte location %p is slow", ptr );
+done:;
+}
+
+//! Handle 8-byte store that crosses a cache line.
+extern "C" void __TBB_machine_store8_slow( volatile void *ptr, int64_t value ) {
+    for( tbb::internal::atomic_backoff b;; b.pause() ) {
+        int64_t tmp = *(int64_t*)ptr;
+        if( __TBB_machine_cmpswp8(ptr,value,tmp)==tmp ) 
+            break;
+    }
+}
+
+#endif /* __TBB_x86_32 */
+#endif /* !__TBB_RML_STATIC */
+
+#if __TBB_ipf
+extern "C" intptr_t __TBB_machine_lockbyte( volatile unsigned char& flag ) {
+    if ( !__TBB_TryLockByte(flag) ) {
+        tbb::internal::atomic_backoff b;
+        do {
+            b.pause();
+        } while ( !__TBB_TryLockByte(flag) );
+    }
+    return 0;
+}
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_misc.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_misc.h
new file mode 100644 (file)
index 0000000..7481899
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef _TBB_tbb_misc_H
+#define _TBB_tbb_misc_H
+
+#include "tbb/tbb_stddef.h"
+#include "tbb/tbb_machine.h"
+
+#if _WIN32||_WIN64
+#include <windows.h>
+#elif defined(__linux__)
+#include <sys/sysinfo.h>
+#elif defined(__sun)
+#include <sys/sysinfo.h>
+#include <unistd.h>
+#elif defined(__APPLE__)
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#elif defined(__FreeBSD__)
+#include <unistd.h>
+#endif
+
+namespace tbb {
+
+namespace internal {
+
+#if defined(__TBB_DetectNumberOfWorkers)
+static inline int DetectNumberOfWorkers() {
+    return __TBB_DetectNumberOfWorkers(); 
+}
+
+#else
+
+#if _WIN32||_WIN64
+static inline int DetectNumberOfWorkers() {
+    SYSTEM_INFO si;
+    GetSystemInfo(&si);
+    return static_cast<int>(si.dwNumberOfProcessors);
+}
+
+#elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun) 
+static inline int DetectNumberOfWorkers() {
+    long number_of_workers;
+
+#if (defined(__FreeBSD__) || defined(__sun)) && defined(_SC_NPROCESSORS_ONLN) 
+    number_of_workers = sysconf(_SC_NPROCESSORS_ONLN);
+
+// In theory, sysconf should work everywhere.
+// But in practice, system-specific methods are more reliable
+#elif defined(__linux__)
+    number_of_workers = get_nprocs();
+#elif defined(__APPLE__)
+    int name[2] = {CTL_HW, HW_AVAILCPU};
+    int ncpu;
+    size_t size = sizeof(ncpu);
+    sysctl( name, 2, &ncpu, &size, NULL, 0 );
+    number_of_workers = ncpu;
+#else
+#error DetectNumberOfWorkers: Method to detect the number of online CPUs is unknown
+#endif
+
+// Fail-safety strap
+    if ( number_of_workers < 1 ) {
+        number_of_workers = 1;
+    }
+    
+    return number_of_workers;
+}
+
+#else
+#error DetectNumberOfWorkers: OS detection method is unknown
+
+#endif /* os kind */
+
+#endif
+
+// assertion_failure is declared in tbb/tbb_stddef.h because it user code
+// needs to see its declaration.
+
+//! Throw std::runtime_error of form "(what): (strerror of error_code)"
+/* The "what" should be fairly short, not more than about 64 characters.
+   Because we control all the call sites to handle_perror, it is pointless
+   to bullet-proof it for very long strings.
+
+   Design note: ADR put this routine off to the side in tbb_misc.cpp instead of
+   Task.cpp because the throw generates a pathetic lot of code, and ADR wanted
+   this large chunk of code to be placed on a cold page. */
+void __TBB_EXPORTED_FUNC handle_perror( int error_code, const char* what );
+
+//! True if environment variable with given name is set and not 0; otherwise false.
+bool GetBoolEnvironmentVariable( const char * name );
+
+//! Print TBB version information on stderr
+void PrintVersion();
+
+//! Print extra TBB version information on stderr
+void PrintExtraVersionInfo( const char* category, const char* description );
+
+//! A callback routine to print RML version information on stderr
+void PrintRMLVersionInfo( void* arg, const char* server_info );
+
+} // namespace internal
+
+} // namespace tbb
+
+#endif /* _TBB_tbb_misc_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_resource.rc b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_resource.rc
new file mode 100644 (file)
index 0000000..f82c8ce
--- /dev/null
@@ -0,0 +1,126 @@
+// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// Microsoft Visual C++ generated resource script.
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC                     1
+#define _APS_NEXT_RESOURCE_VALUE        102
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1001
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <winresrc.h>
+#define ENDL "\r\n"
+#include "tbb_version.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Neutral resources
+
+//#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+// manifest integration
+#ifdef TBB_MANIFEST
+#include "winuser.h"
+2 RT_MANIFEST tbbmanifest.exe.manifest
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION TBB_VERNUMBERS
+ PRODUCTVERSION TBB_VERNUMBERS
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "000004b0"
+        BEGIN
+            VALUE "CompanyName", "Intel Corporation\0"
+            VALUE "FileDescription", "Threading Building Blocks library\0"
+            VALUE "FileVersion", TBB_VERSION "\0"
+//what is it?            VALUE "InternalName", "tbb\0"
+            VALUE "LegalCopyright", "Copyright (C) 2006\0"
+            VALUE "LegalTrademarks", "\0"
+#ifndef TBB_USE_DEBUG
+            VALUE "OriginalFilename", "tbb.dll\0"
+#else
+            VALUE "OriginalFilename", "tbb_debug.dll\0"
+#endif
+            VALUE "ProductName", "Threading Building Blocks\0"
+            VALUE "ProductVersion", TBB_VERSION "\0"
+            VALUE "Comments", TBB_VERSION_STRINGS "\0"
+            VALUE "PrivateBuild", "\0"
+            VALUE "SpecialBuild", "\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x0, 1200
+    END
+END
+
+//#endif    // Neutral resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_thread.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_thread.cpp
new file mode 100644 (file)
index 0000000..bb328e2
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#if _WIN32||_WIN64
+#include <process.h>        /* Need _beginthreadex from there */
+#include <stdexcept>        /* Need std::runtime_error from there */
+#include <string>           /* Need std::string from there */
+#endif // _WIN32||_WIN64
+#include "tbb_misc.h" // for handle_perror
+#include "tbb/tbb_stddef.h"
+#include "tbb/tbb_thread.h"
+#include "tbb/tbb_allocator.h"
+#include "tbb/task_scheduler_init.h" /* Need task_scheduler_init::default_num_threads() */
+
+namespace tbb {
+
+namespace internal {
+
+//! Allocate a closure
+void* allocate_closure_v3( size_t size )
+{
+    return allocate_via_handler_v3( size );
+}
+
+//! Free a closure allocated by allocate_closure_v3
+void free_closure_v3( void *ptr )
+{
+    deallocate_via_handler_v3( ptr );
+}
+
+#if _WIN32||_WIN64 
+#if defined(__EXCEPTIONS) || defined(_CPPUNWIND)
+// The above preprocessor symbols are defined by compilers when exception handling is enabled.
+
+void handle_win_error( int error_code ) 
+{
+    LPTSTR msg_buf;
+
+    FormatMessage(
+        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
+        FORMAT_MESSAGE_FROM_SYSTEM |
+        FORMAT_MESSAGE_IGNORE_INSERTS,
+        NULL,
+        error_code,
+        0,
+        (LPTSTR) &msg_buf,
+        0, NULL );
+    const std::string msg_str(msg_buf);
+    LocalFree(msg_buf);
+    throw std::runtime_error(msg_str);
+}
+#endif //__EXCEPTIONS || _CPPUNWIND
+#endif // _WIN32||_WIN64
+
+void tbb_thread_v3::join()
+{
+    __TBB_ASSERT( joinable(), "thread should be joinable when join called" );
+#if _WIN32||_WIN64 
+    DWORD status = WaitForSingleObject( my_handle, INFINITE );
+    if ( status == WAIT_FAILED )
+        handle_win_error( GetLastError() );
+    BOOL close_stat = CloseHandle( my_handle );
+    if ( close_stat == 0 )
+        handle_win_error( GetLastError() );
+    my_thread_id = 0;
+#else
+    int status = pthread_join( my_handle, NULL );
+    if( status )
+        handle_perror( status, "pthread_join" );
+#endif // _WIN32||_WIN64 
+    my_handle = 0;
+}
+
+void tbb_thread_v3::detach() {
+    __TBB_ASSERT( joinable(), "only joinable thread can be detached" );
+#if _WIN32||_WIN64
+    BOOL status = CloseHandle( my_handle );
+    if ( status == 0 )
+      handle_win_error( GetLastError() );
+    my_thread_id = 0;
+#else
+    int status = pthread_detach( my_handle );
+    if( status )
+        handle_perror( status, "pthread_detach" );
+#endif // _WIN32||_WIN64
+    my_handle = 0;
+}
+
+const size_t MB = 1<<20;
+#if !defined(__TBB_WORDSIZE)
+const size_t ThreadStackSize = 1*MB;
+#elif __TBB_WORDSIZE<=4
+const size_t ThreadStackSize = 2*MB;
+#else
+const size_t ThreadStackSize = 4*MB;
+#endif
+
+void tbb_thread_v3::internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine),
+                                    void* closure ) {
+#if _WIN32||_WIN64
+    unsigned thread_id;
+    // The return type of _beginthreadex is "uintptr_t" on new MS compilers,
+    // and 'unsigned long' on old MS compilers.  Our uintptr works for both.
+    uintptr status = _beginthreadex( NULL, ThreadStackSize, start_routine,
+                                     closure, 0, &thread_id ); 
+    if( status==0 )
+        handle_perror(errno,"__beginthreadex");
+    else {
+        my_handle = (HANDLE)status;
+        my_thread_id = thread_id;
+    }
+#else
+    pthread_t thread_handle;
+    int status;
+    pthread_attr_t stack_size;
+    status = pthread_attr_init( &stack_size );
+    if( status )
+        handle_perror( status, "pthread_attr_init" );
+    status = pthread_attr_setstacksize( &stack_size, ThreadStackSize );
+    if( status )
+        handle_perror( status, "pthread_attr_setstacksize" );
+
+    status = pthread_create( &thread_handle, &stack_size, start_routine, closure );
+    if( status )
+        handle_perror( status, "pthread_create" );
+
+    my_handle = thread_handle;
+#endif // _WIN32||_WIN64
+}
+
+unsigned tbb_thread_v3::hardware_concurrency() {
+    return task_scheduler_init::default_num_threads();
+}
+
+tbb_thread_v3::id thread_get_id_v3() {
+#if _WIN32||_WIN64
+    return tbb_thread_v3::id( GetCurrentThreadId() );
+#else
+    return tbb_thread_v3::id( pthread_self() );
+#endif // _WIN32||_WIN64
+}
+    
+void move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 )
+{
+    if (t1.joinable())
+        t1.detach();
+    t1.my_handle = t2.my_handle;
+    t2.my_handle = 0;
+#if _WIN32||_WIN64
+    t1.my_thread_id = t2.my_thread_id;
+    t2.my_thread_id = 0;
+#endif // _WIN32||_WIN64
+}
+
+void thread_yield_v3()
+{
+    __TBB_Yield();
+}
+
+void thread_sleep_v3(const tick_count::interval_t &i)
+{
+#if _WIN32||_WIN64
+     tick_count t0 = tick_count::now();
+     tick_count t1 = t0;
+     for(;;) {
+         double remainder = (i-(t1-t0)).seconds()*1e3;  // milliseconds remaining to sleep
+         if( remainder<=0 ) break;
+         DWORD t = remainder>=INFINITE ? INFINITE-1 : DWORD(remainder);
+         Sleep( t );
+         t1 = tick_count::now();
+    }
+#else
+    struct timespec req;
+    double sec = i.seconds();
+
+    req.tv_sec = static_cast<long>(sec);
+    req.tv_nsec = static_cast<long>( (sec - req.tv_sec)*1e9 );
+    nanosleep(&req, NULL);
+#endif // _WIN32||_WIN64
+}
+
+} // internal
+
+} // tbb
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_version.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tbb_version.h
new file mode 100644 (file)
index 0000000..cd86de0
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Please define version number in the file:
+#include "tbb/tbb_stddef.h"
+
+// And don't touch anything below
+#ifndef ENDL
+#define ENDL "\n"
+#endif
+#include "version_string.tmp"
+
+#ifndef __TBB_VERSION_STRINGS
+#pragma message("Warning: version_string.tmp isn't generated properly by version_info.sh script!")
+// here is an example of macros value:
+#define __TBB_VERSION_STRINGS \
+"TBB: BUILD_HOST\tUnknown\n" \
+"TBB: BUILD_ARCH\tUnknown\n" \
+"TBB: BUILD_OS\t\tUnknown\n" \
+"TBB: BUILD_CL\t\tUnknown\n" \
+"TBB: BUILD_COMPILER\tUnknown\n" \
+"TBB: BUILD_COMMAND\tUnknown\n"
+#endif
+#ifndef __TBB_DATETIME
+#ifdef RC_INVOKED
+#define __TBB_DATETIME "Unknown"
+#else
+#define __TBB_DATETIME __DATE__ __TIME__
+#endif
+#endif
+
+#define __TBB_VERSION_NUMBER "TBB: VERSION\t\t" __TBB_STRING(TBB_VERSION_MAJOR.TBB_VERSION_MINOR) ENDL
+#define __TBB_INTERFACE_VERSION_NUMBER "TBB: INTERFACE VERSION\t" __TBB_STRING(TBB_INTERFACE_VERSION) ENDL
+#define __TBB_VERSION_DATETIME "TBB: BUILD_DATE\t\t" __TBB_DATETIME ENDL
+#ifndef TBB_USE_DEBUG
+    #define __TBB_VERSION_USE_DEBUG "TBB: TBB_USE_DEBUG\tundefined" ENDL
+#elif TBB_USE_DEBUG==0
+    #define __TBB_VERSION_USE_DEBUG "TBB: TBB_USE_DEBUG\t0" ENDL
+#elif TBB_USE_DEBUG==1
+    #define __TBB_VERSION_USE_DEBUG "TBB: TBB_USE_DEBUG\t1" ENDL
+#elif TBB_USE_DEBUG==2
+    #define __TBB_VERSION_USE_DEBUG "TBB: TBB_USE_DEBUG\t2" ENDL
+#else
+    #error Unexpected value for TBB_USE_DEBUG
+#endif
+#ifndef TBB_USE_ASSERT
+    #define __TBB_VERSION_USE_ASSERT "TBB: TBB_USE_ASSERT\tundefined" ENDL
+#elif TBB_USE_ASSERT==0
+    #define __TBB_VERSION_USE_ASSERT "TBB: TBB_USE_ASSERT\t0" ENDL
+#elif TBB_USE_ASSERT==1
+    #define __TBB_VERSION_USE_ASSERT "TBB: TBB_USE_ASSERT\t1" ENDL
+#elif TBB_USE_ASSERT==2
+    #define __TBB_VERSION_USE_ASSERT "TBB: TBB_USE_ASSERT\t2" ENDL
+#else
+    #error Unexpected value for TBB_USE_ASSERT
+#endif
+#ifndef DO_ITT_NOTIFY
+    #define __TBB_VERSION_DO_NOTIFY "TBB: DO_ITT_NOTIFY\tundefined" ENDL
+#elif DO_ITT_NOTIFY==1
+    #define __TBB_VERSION_DO_NOTIFY "TBB: DO_ITT_NOTIFY\t1" ENDL
+#elif DO_ITT_NOTIFY==0
+    #define __TBB_VERSION_DO_NOTIFY
+#else
+    #error Unexpected value for DO_ITT_NOTIFY
+#endif
+
+#define TBB_VERSION_STRINGS __TBB_VERSION_NUMBER __TBB_INTERFACE_VERSION_NUMBER __TBB_VERSION_DATETIME __TBB_VERSION_STRINGS __TBB_VERSION_USE_DEBUG __TBB_VERSION_USE_ASSERT __TBB_VERSION_DO_NOTIFY
+
+// numbers
+#ifndef __TBB_VERSION_YMD
+#define __TBB_VERSION_YMD 0, 0
+#endif
+
+#define TBB_VERNUMBERS TBB_VERSION_MAJOR, TBB_VERSION_MINOR, __TBB_VERSION_YMD
+
+#define TBB_VERSION __TBB_STRING(TBB_VERNUMBERS)
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tls.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tls.h
new file mode 100644 (file)
index 0000000..2e4768c
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef _TBB_tls_H
+#define _TBB_tls_H
+
+#if USE_PTHREAD
+#include <pthread.h>
+#else /* assume USE_WINTHREAD */
+#include <windows.h>
+#endif
+
+namespace tbb {
+
+namespace internal {
+
+typedef void (*tls_dtor_t)(void*);
+
+//! Basic cross-platform wrapper class for TLS operations.
+template <typename T>
+class basic_tls {
+#if USE_PTHREAD
+    typedef pthread_key_t tls_key_t;
+public:
+    int  create( tls_dtor_t dtor = NULL ) {
+        return pthread_key_create(&my_key, dtor);
+    }
+    int  destroy()      { return pthread_key_delete(my_key); }
+    void set( T value ) { pthread_setspecific(my_key, (void*)value); }
+    T    get()          { return (T)pthread_getspecific(my_key); }
+#else /* USE_WINTHREAD */
+    typedef DWORD tls_key_t;
+public:
+    int create() {
+        tls_key_t tmp = TlsAlloc();
+        if( tmp==TLS_OUT_OF_INDEXES )
+            return TLS_OUT_OF_INDEXES;
+        my_key = tmp;
+        return 0;
+    }
+    int  destroy()      { TlsFree(my_key); my_key=0; return 0; }
+    void set( T value ) { TlsSetValue(my_key, (LPVOID)value); }
+    T    get()          { return (T)TlsGetValue(my_key); }
+#endif
+private:
+    tls_key_t my_key;
+};
+
+//! More advanced TLS support template class.
+/** It supports RAII and to some extent mimic __declspec(thread) variables. */
+template <typename T>
+class tls : public basic_tls<T> {
+    typedef basic_tls<T> base;
+public:
+    tls()  { base::create();  }
+    ~tls() { base::destroy(); }
+    T operator=(T value) { base::set(value); return value; }
+    operator T() { return base::get(); }
+};
+
+template <typename T>
+class tls<T*> : basic_tls<T*> {
+    typedef basic_tls<T*> base;
+    static void internal_dtor(void* ptr) {
+        if (ptr) delete (T*)ptr;
+    }
+    T* internal_get() {
+        T* result = base::get();
+        if (!result) {
+            result = new T;
+            base::set(result);
+        }
+        return result;
+    }
+public:
+    tls()  {
+#if USE_PTHREAD
+        base::create( internal_dtor );
+#else
+        base::create();
+#endif
+    }
+    ~tls() { base::destroy(); }
+    T* operator=(T* value) { base::set(value); return value; }
+    operator T*()   { return  internal_get(); }
+    T* operator->() { return  internal_get(); }
+    T& operator*()  { return *internal_get(); }
+};
+
+} // namespace internal
+
+} // namespace tbb
+
+#endif /* _TBB_tls_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/_config.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/_config.h
new file mode 100644 (file)
index 0000000..17c97e5
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __CONFIG_H_
+#define __CONFIG_H_
+
+#ifndef ITT_OS_WIN
+#  define ITT_OS_WIN   1
+#endif /* ITT_OS_WIN */
+
+#ifndef ITT_OS_LINUX
+#  define ITT_OS_LINUX 2
+#endif /* ITT_OS_LINUX */
+
+#ifndef ITT_OS_MAC
+#  define ITT_OS_MAC   3
+#endif /* ITT_OS_MAC */
+
+#ifndef ITT_OS
+#  if defined WIN32 || defined _WIN32
+#    define ITT_OS ITT_OS_WIN
+#  elif defined( __APPLE__ ) && defined( __MACH__ )
+#    define ITT_OS ITT_OS_MAC
+#  else
+#    define ITT_OS ITT_OS_LINUX
+#  endif
+#endif /* ITT_OS */
+
+#ifndef ITT_ARCH_IA32
+#  define ITT_ARCH_IA32  1
+#endif /* ITT_ARCH_IA32 */
+
+#ifndef ITT_ARCH_IA32E
+#  define ITT_ARCH_IA32E 2
+#endif /* ITT_ARCH_IA32E */
+
+#ifndef ITT_ARCH_IA64
+#  define ITT_ARCH_IA64  3
+#endif /* ITT_ARCH_IA64 */
+
+
+#ifndef ITT_ARCH
+#  if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
+#    define ITT_ARCH ITT_ARCH_IA32E
+#  elif defined _M_IA64 || defined __ia64
+#    define ITT_ARCH ITT_ARCH_IA64
+#  else
+#    define ITT_ARCH ITT_ARCH_IA32
+#  endif
+#endif
+
+#ifndef ITT_PLATFORM_WIN
+#  define ITT_PLATFORM_WIN 1
+#endif /* ITT_PLATFORM_WIN */ 
+
+#ifndef ITT_PLATFORM_POSIX
+#  define ITT_PLATFORM_POSIX 2
+#endif /* ITT_PLATFORM_POSIX */
+
+#ifndef ITT_PLATFORM
+#  if ITT_OS==ITT_OS_WIN
+#    define ITT_PLATFORM ITT_PLATFORM_WIN
+#  else
+#    define ITT_PLATFORM ITT_PLATFORM_POSIX
+#  endif /* _WIN32 */
+#endif /* ITT_PLATFORM */
+
+#endif /* __CONFIG_H_ */
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/_disable_warnings.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/_disable_warnings.h
new file mode 100644 (file)
index 0000000..e32f24f
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "_config.h"
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+
+#pragma warning (disable: 593)  /* parameter "XXXX" was set but never used                 */
+#pragma warning (disable: 344)  /* typedef name has already been declared (with same type) */
+#pragma warning (disable: 174)  /* expression has no effect                                */
+
+#elif defined __INTEL_COMPILER
+
+#pragma warning (disable: 869)  /* parameter "XXXXX" was never referenced                  */
+#pragma warning (disable: 1418) /* external function definition with no prior declaration  */
+
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/_ittnotify_static.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/_ittnotify_static.h
new file mode 100644 (file)
index 0000000..9604b4c
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "_config.h"
+
+#ifndef ITT_STUB
+#define ITT_STUB ITT_STUBV
+#endif /* ITT_STUB */
+
+#ifndef ITTAPI_CALL
+#define ITTAPI_CALL CDECL
+#endif /* ITTAPI_CALL */
+
+/* parameters for macro:
+   type, func_name, arguments, params, func_name_in_dll, group
+   */
+
+ITT_STUBV(void, pause,(void),(), pause, __itt_control_group)
+
+ITT_STUBV(void, resume,(void),(), resume, __itt_control_group)
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+
+ITT_STUB(int, markA,(__itt_mark_type mt, const char *parameter),(mt,parameter), markA, __itt_mark_group)
+
+ITT_STUB(int, markW,(__itt_mark_type mt, const wchar_t *parameter),(mt,parameter), markW, __itt_mark_group)
+
+ITT_STUB(int, mark_globalA,(__itt_mark_type mt, const char *parameter),(mt,parameter), mark_globalA, __itt_mark_group)
+
+ITT_STUB(int, mark_globalW,(__itt_mark_type mt, const wchar_t *parameter),(mt,parameter), mark_globalW, __itt_mark_group)
+
+ITT_STUBV(void, thread_set_nameA,( const char *name),(name), thread_set_nameA, __itt_thread_group)
+
+ITT_STUBV(void, thread_set_nameW,( const wchar_t *name),(name), thread_set_nameW, __itt_thread_group)
+
+ITT_STUBV(void, sync_createA,(void *addr, const char *objtype, const char *objname, int attribute), (addr, objtype, objname, attribute), sync_createA, __itt_sync_group | __itt_fsync_group)
+
+ITT_STUBV(void, sync_createW,(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute), (addr, objtype, objname, attribute), sync_createW, __itt_sync_group | __itt_fsync_group)
+
+ITT_STUBV(void, sync_renameA, (void *addr, const char *name), (addr, name), sync_renameA, __itt_sync_group | __itt_fsync_group)
+
+ITT_STUBV(void, sync_renameW, (void *addr, const wchar_t *name), (addr, name), sync_renameW, __itt_sync_group | __itt_fsync_group)
+#else /* WIN32 */
+
+ITT_STUB(int, mark,(__itt_mark_type mt, const char *parameter),(mt,parameter), mark, __itt_mark_group)
+ITT_STUB(int, mark_global,(__itt_mark_type mt, const char *parameter),(mt,parameter), mark_global, __itt_mark_group)
+
+ITT_STUBV(void, sync_set_name,(void *addr, const char *objtype, const char *objname, int attribute),(addr,objtype,objname,attribute), sync_set_name, __itt_sync_group | __itt_fsync_group)
+
+ITT_STUBV(void, thread_set_name,( const char *name),(name), thread_set_name, __itt_thread_group)
+
+ITT_STUBV(void, sync_create,(void *addr, const char *objtype, const char *objname, int attribute), (addr, objtype, objname, attribute), sync_create, __itt_sync_group | __itt_fsync_group)
+
+ITT_STUBV(void, sync_rename, (void *addr, const char *name), (addr, name), sync_rename, __itt_sync_group | __itt_fsync_group)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+ITT_STUBV(void, sync_destroy,(void *addr), (addr), sync_destroy, __itt_sync_group | __itt_fsync_group)
+
+ITT_STUB(int, mark_off,(__itt_mark_type mt),(mt), mark_off, __itt_mark_group)
+ITT_STUB(int, mark_global_off,(__itt_mark_type mt),(mt), mark_global_off, __itt_mark_group)
+
+ITT_STUBV(void, thread_ignore,(void),(), thread_ignore, __itt_thread_group)
+
+ITT_STUBV(void, sync_prepare,(void* addr),(addr), sync_prepare, __itt_sync_group | __itt_fsync_group)
+
+ITT_STUBV(void, sync_cancel,(void *addr),(addr), sync_cancel, __itt_sync_group)
+
+ITT_STUBV(void, sync_acquired,(void *addr),(addr), sync_acquired, __itt_sync_group)
+
+ITT_STUBV(void, sync_releasing,(void* addr),(addr), sync_releasing, __itt_sync_group)
+
+ITT_STUBV(void, sync_released,(void* addr),(addr), sync_released, __itt_sync_group)
+
+ITT_STUBV(void, memory_read,( void *address, size_t size ), (address, size), memory_read, __itt_all_group)
+ITT_STUBV(void, memory_write,( void *address, size_t size ), (address, size), memory_write, __itt_all_group)
+ITT_STUBV(void, memory_update,( void *address, size_t size ), (address, size), memory_update, __itt_all_group)
+
+ITT_STUB(int, jit_notify_event,(__itt_jit_jvm_event event_type, void* event_data),(event_type, event_data), jit_notify_event, __itt_jit_group)
+
+#ifndef NO_ITT_LEGACY
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(__itt_mark_type, mark_createA,(const char *name),(name), mark_createA, __itt_mark_group)
+ITT_STUB(__itt_mark_type, mark_createW,(const wchar_t *name),(name), mark_createW, __itt_mark_group)
+#else /* WIN32 */
+ITT_STUB(__itt_mark_type, mark_create,(const char *name),(name), mark_create, __itt_mark_group)
+#endif
+ITT_STUBV(void, fsync_prepare,(void* addr),(addr), sync_prepare, __itt_fsync_group)
+
+ITT_STUBV(void, fsync_cancel,(void *addr),(addr), sync_cancel, __itt_fsync_group)
+
+ITT_STUBV(void, fsync_acquired,(void *addr),(addr), sync_acquired, __itt_fsync_group)
+
+ITT_STUBV(void, fsync_releasing,(void* addr),(addr), sync_releasing, __itt_fsync_group)
+
+ITT_STUBV(void, fsync_released,(void* addr),(addr), sync_released, __itt_fsync_group)
+
+ITT_STUBV(void, notify_sync_prepare,(void *p),(p), notify_sync_prepare, __itt_sync_group | __itt_fsync_group)
+
+ITT_STUBV(void, notify_sync_cancel,(void *p),(p), notify_sync_cancel, __itt_sync_group | __itt_fsync_group)
+
+ITT_STUBV(void, notify_sync_acquired,(void *p),(p), notify_sync_acquired, __itt_sync_group | __itt_fsync_group)
+
+ITT_STUBV(void, notify_sync_releasing,(void *p),(p), notify_sync_releasing, __itt_sync_group | __itt_fsync_group)
+
+ITT_STUBV(void, notify_cpath_target,(void),(), notify_cpath_target, __itt_all_group)
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(void, sync_set_nameA,(void *addr, const char *objtype, const char *objname, int attribute),(addr,objtype,objname,attribute), sync_set_nameA, __itt_sync_group | __itt_fsync_group)
+
+ITT_STUBV(void, sync_set_nameW,(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute),(addr,objtype,objname,attribute), sync_set_nameW, __itt_sync_group | __itt_fsync_group)
+
+ITT_STUB (int, thr_name_setA,( char *name, int namelen ),(name,namelen), thr_name_setA, __itt_thread_group)
+
+ITT_STUB (int, thr_name_setW,( wchar_t *name, int namelen ),(name,namelen), thr_name_setW, __itt_thread_group)
+
+ITT_STUB (__itt_event, event_createA,( char *name, int namelen ),(name,namelen), event_createA, __itt_mark_group)
+
+ITT_STUB (__itt_event, event_createW,( wchar_t *name, int namelen ),(name,namelen), event_createW, __itt_mark_group)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB (int, thr_name_set,( char *name, int namelen ),(name,namelen), thr_name_set, __itt_thread_group)
+
+ITT_STUB (__itt_event, event_create,( char *name, int namelen ),(name,namelen), event_create, __itt_mark_group)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+ITT_STUBV(void, thr_ignore,(void),(), thr_ignore, __itt_thread_group)
+
+ITT_STUB (int, event_start,( __itt_event event ),(event), event_start, __itt_mark_group)
+
+ITT_STUB (int, event_end,( __itt_event event ),(event), event_end, __itt_mark_group)
+
+ITT_STUB (__itt_state_t, state_get, (void), (), state_get, __itt_all_group)
+ITT_STUB (__itt_state_t, state_set,( __itt_state_t state), (state), state_set, __itt_all_group)
+ITT_STUB (__itt_obj_state_t, obj_mode_set, ( __itt_obj_prop_t prop, __itt_obj_state_t state), (prop, state), obj_mode_set, __itt_all_group)
+ITT_STUB (__itt_thr_state_t, thr_mode_set, (__itt_thr_prop_t prop, __itt_thr_state_t state), (prop, state), thr_mode_set, __itt_all_group)
+
+ITT_STUB (const char*, api_version,(void),(), api_version, __itt_all_group)
+ITT_STUB (unsigned int, jit_get_new_method_id, (void), (), jit_get_new_method_id, __itt_jit_group)
+
+#endif /* NO_ITT_LEGACY */
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/ittnotify.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/ittnotify.h
new file mode 100644 (file)
index 0000000..e9ebb0f
--- /dev/null
@@ -0,0 +1,1234 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/** @mainpage
+ * Ability to control the collection during runtime. User API can be inserted into the user application.
+ * Commands include:
+       - Pause/resume analysis
+       - Stop analysis and application, view results
+       - Cancel analysis and application without generating results
+       - Mark current time in results
+ * The User API provides ability to control the collection, set marks at the execution of specific user code and
+ * specify custom synchronization primitives implemented without standard system APIs. 
+ * 
+ * Use case: User inserts API calls to the desired places in her code. The code is then compiled and
+ * linked with static part of User API library. User can recompile the code with specific macro defined 
+ * to enable API calls.  If this macro is not defined there is no run-time overhead and no need to  link 
+ * with static part of User API library. During  runtime the static library loads and initializes the dynamic part.
+ * In case of instrumentation-based collection, only a stub library is loaded; otherwise a proxy library is loaded,
+ * which calls the collector.
+ * 
+ * User API set is native (C/C++) only (no MRTE support). As amitigation can use JNI or C/C++ function 
+ * call from managed code where needed. If the collector causes significant overhead or data storage, then 
+ * pausing analysis should reduce the overhead to minimal levels.
+*/
+/** @example example.cpp
+ * @brief The following example program shows the usage of User API
+ */
+
+#ifndef _ITTNOTIFY_H_
+#define _ITTNOTIFY_H_
+/** @file ittnotify.h
+ *  @brief Header file which contains declaration of user API functions and types
+ */
+
+/** @cond exclude_from_documentation */
+#ifndef ITT_OS_WIN
+#  define ITT_OS_WIN   1
+#endif /* ITT_OS_WIN */
+
+#ifndef ITT_OS_LINUX
+#  define ITT_OS_LINUX 2
+#endif /* ITT_OS_LINUX */
+
+#ifndef ITT_OS_MAC
+#  define ITT_OS_MAC   3
+#endif /* ITT_OS_MAC */
+
+#ifndef ITT_OS
+#  if defined WIN32 || defined _WIN32
+#    define ITT_OS ITT_OS_WIN
+#  elif defined( __APPLE__ ) && defined( __MACH__ )
+#    define ITT_OS ITT_OS_MAC
+#  else
+#    define ITT_OS ITT_OS_LINUX
+#  endif
+#endif /* ITT_OS */
+
+#ifndef ITT_PLATFORM_WIN
+#  define ITT_PLATFORM_WIN 1
+#endif /* ITT_PLATFORM_WIN */ 
+
+#ifndef ITT_PLATFORM_POSIX
+#  define ITT_PLATFORM_POSIX 2
+#endif /* ITT_PLATFORM_POSIX */
+
+#ifndef ITT_PLATFORM
+#  if ITT_OS==ITT_OS_WIN
+#    define ITT_PLATFORM ITT_PLATFORM_WIN
+#  else
+#    define ITT_PLATFORM ITT_PLATFORM_POSIX
+#  endif /* _WIN32 */
+#endif /* ITT_PLATFORM */
+
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#include <tchar.h>
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define ITTAPI_CALL CDECL
+
+#ifndef CDECL
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#    define CDECL __cdecl
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#    define CDECL
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* CDECL */
+
+/** @endcond */
+
+/** @brief user event type */
+typedef int __itt_mark_type;
+typedef int __itt_event;
+typedef int __itt_state_t;
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#  ifdef UNICODE
+     typedef wchar_t __itt_char;
+#  else /* UNICODE */
+     typedef char __itt_char;
+#  endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @brief Typedef for char or wchar_t (if Unicode symbol is allowed) on Windows.
+  * And typedef for char on Linux. 
+  */
+     typedef char __itt_char;
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @cond exclude_from_documentation */
+typedef enum __itt_obj_state {
+    __itt_obj_state_err = 0,
+    __itt_obj_state_clr = 1,
+    __itt_obj_state_set = 2,
+    __itt_obj_state_use = 3
+} __itt_obj_state_t;
+
+typedef enum __itt_thr_state {
+    __itt_thr_state_err = 0,
+    __itt_thr_state_clr = 1,
+    __itt_thr_state_set = 2
+} __itt_thr_state_t;
+
+typedef enum __itt_obj_prop {
+    __itt_obj_prop_watch    = 1,
+    __itt_obj_prop_ignore   = 2,
+    __itt_obj_prop_sharable = 3
+} __itt_obj_prop_t;
+
+typedef enum __itt_thr_prop {
+    __itt_thr_prop_quiet = 1
+} __itt_thr_prop_t;
+/** @endcond */
+typedef enum __itt_error_code {
+    __itt_error_success       = 0, /*!< no error                */
+    __itt_error_no_module     = 1, /*!< module can't be loaded  */
+    __itt_error_no_symbol     = 2, /*!< symbol not found        */
+    __itt_error_unknown_group = 3, /*!< unknown group specified */
+    __itt_error_cant_read_env = 4  /*!< variable value too long */
+} __itt_error_code;
+
+typedef void (__itt_error_notification_t)(__itt_error_code code, const char* msg);
+
+/*******************************************
+ * Various constants used by JIT functions *
+ *******************************************/
+
+ /*! @enum ___itt_jit_jvm_event
+  * event notification 
+  */
+ typedef enum ___itt_jit_jvm_event
+ {
+
+   __itt_JVM_EVENT_TYPE_SHUTDOWN = 2,           /*!< Shutdown. Program exiting. EventSpecificData NA*/      
+   __itt_JVM_EVENT_TYPE_METHOD_LOAD_FINISHED=13,/*!< JIT profiling. Issued after method code jitted into memory but before code is executed
+                                                                                                *  event_data is an __itt_JIT_Method_Load */
+   __itt_JVM_EVENT_TYPE_METHOD_UNLOAD_START     /*!< JIT profiling. Issued before unload. Method code will no longer be executed, but code and info are still in memory.
+                                                                                        *      The VTune profiler may capture method code only at this point. event_data is __itt_JIT_Method_Id */
+
+ } __itt_jit_jvm_event;
+
+/*! @enum ___itt_jit_environment_type
+ * @brief Enumerator for the environment of methods 
+ */
+typedef enum ___itt_jit_environment_type
+{
+    __itt_JIT_JITTINGAPI = 2
+} __itt_jit_environment_type;
+
+/**********************************
+ * Data structures for the events *
+ **********************************/
+
+ /*! @struct ___itt_jit_method_id
+  * @brief structure for the events: __itt_iJVM_EVENT_TYPE_METHOD_UNLOAD_START    
+  */
+typedef struct ___itt_jit_method_id 
+{
+       /** @brief Id of the method (same as the one passed in the __itt_JIT_Method_Load struct */
+    unsigned int       method_id;  
+
+} *__itt_pjit_method_id, __itt_jit_method_id;
+
+/*! @struct ___itt_jit_line_number_info
+ *  @brief structure for the events: __itt_iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED 
+ */
+typedef struct ___itt_jit_line_number_info 
+{
+       /** @brief x86 Offset from the begining of the method */
+    unsigned int        offset;    
+       /** @brief source line number from the begining of the source file. */
+    unsigned int        line_number;     
+
+} *__itt_pjit_line_number_info, __itt_jit_line_number_info;
+/*! @struct ___itt_jit_method_load
+ *  @brief structure for the events: __itt_iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED 
+ */
+typedef struct ___itt_jit_method_load 
+{
+       /** @brief unique method ID - can be any unique value, (except 0 - 999) */
+    unsigned int        method_id;
+    /** @brief method name (can be with or without the class and signature, in any case the class name will be added to it) */
+    char*               method_name;
+    /** @brief virtual address of that method  - This determines the method range for the iJVM_EVENT_TYPE_ENTER/LEAVE_METHOD_ADDR events */
+       void*               method_load_address;
+    /** @brief Size in memory - Must be exact */
+       unsigned int        method_size;
+    /** @brief Line Table size in number of entries - Zero if none */
+       unsigned int        line_number_size;
+    /** @brief Pointer to the begining of the line numbers info array */
+       __itt_pjit_line_number_info line_number_table;
+    /** @brief unique class ID */
+       unsigned int        class_id;
+    /** @brief class file name */
+       char*               class_file_name;
+    /** @brief source file name */
+       char*               source_file_name;
+    /** @brief bits supplied by the user for saving in the JIT file... */
+       void*               user_data;
+    /** @brief the size of the user data buffer */
+       unsigned int        user_data_size;
+    /** @note no need to fill this field, it's filled by VTune */
+       __itt_jit_environment_type env;
+} *__itt_pjit_method_load, __itt_jit_method_load;
+
+/** 
+ * @brief General behavior: application continues to run, but no profiling information is being collected
+
+ * - Pausing occurs not only for the current thread but for all process as well as spawned processes
+ * - Intel(R) Parallel Inspector: does not analyze or report errors that involve memory access.
+ * - Intel(R) Parallel Inspector: Other errors are reported as usual. Pausing data collection in
+     Intel(R) Parallel Inspector only pauses tracing and analyzing memory access. It does not pause
+     tracing or analyzing threading APIs.
+ * - Intel(R) Parallel Amplifier: does continue to record when new threads are started
+ * - Other effects: possible reduction of runtime overhead
+ */
+void ITTAPI_CALL __itt_pause(void);
+
+/** 
+ * @brief General behavior: application continues to run, collector resumes profiling information 
+ * collection for all threads and processes of profiled application
+ */
+void ITTAPI_CALL __itt_resume(void);
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_mark_type ITTAPI_CALL __itt_mark_createA(const char *name);
+__itt_mark_type ITTAPI_CALL __itt_mark_createW(const wchar_t *name);
+#ifdef UNICODE
+#  define __itt_mark_create __itt_mark_createW
+#  define __itt_mark_create_ptr __itt_mark_createW_ptr
+#else /* UNICODE */
+#  define __itt_mark_create __itt_mark_createA
+#  define __itt_mark_create_ptr __itt_mark_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @brief Creates a user event type (mark) with the specified name using char or Unicode string.
+ * @param[in] name - name of mark to create
+ * @return Returns a handle to the mark type
+ */
+__itt_mark_type ITTAPI_CALL __itt_mark_create(const __itt_char* name);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+int ITTAPI_CALL __itt_markA(__itt_mark_type mt, const char *parameter);
+int ITTAPI_CALL __itt_markW(__itt_mark_type mt, const wchar_t *parameter);
+
+int ITTAPI_CALL __itt_mark_globalA(__itt_mark_type mt, const char *parameter);
+int ITTAPI_CALL __itt_mark_globalW(__itt_mark_type mt, const wchar_t *parameter);
+
+#ifdef UNICODE
+#  define __itt_mark __itt_markW
+#  define __itt_mark_ptr __itt_markW_ptr
+
+#  define __itt_mark_global __itt_mark_globalW
+#  define __itt_mark_global_ptr __itt_mark_globalW_ptr
+#else /* UNICODE  */
+#  define __itt_mark __itt_markA
+#  define __itt_mark_ptr __itt_markA_ptr
+
+#  define __itt_mark_global __itt_mark_globalA
+#  define __itt_mark_global_ptr __itt_mark_globalA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @brief Creates a "discrete" user event type (mark) of the specified type and an optional parameter using char or Unicode string.
+
+ * - The mark of "discrete" type is placed to collection results in case of success. It appears in overtime view(s) as a special tick sign. 
+ * - The call is "synchronous" - function returns after mark is actually added to results.
+ * - This function is useful, for example, to mark different phases of application (beginning of the next mark automatically meand end of current region).
+ * - Can be used together with "continuous" marks (see below) at the same collection session
+ * @param[in] mt - mark, created by __itt_mark_create(const __itt_char* name) function
+ * @param[in] parameter - string parameter of mark
+ * @return Returns zero value in case of success, non-zero value otherwise.
+ */
+int ITTAPI_CALL __itt_mark(__itt_mark_type mt, const __itt_char* parameter);
+/** @brief Use this if necessary to create a "discrete" user event type (mark) for process
+ * rather then for one thread
+ * @see int ITTAPI_CALL __itt_mark(__itt_mark_type mt, const __itt_char* parameter);
+ */
+int ITTAPI_CALL __itt_mark_global(__itt_mark_type mt, const __itt_char* parameter);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** 
+ * @brief Creates an "end" point for "continuous" mark with specified name.
+
+ * - Returns zero value in case of success, non-zero value otherwise. Also returns non-zero value when preceding "begin" point for the mark with the same name failed to be created or not created. (*)
+ * - The mark of "continuous" type is placed to collection results in case of success. It appears in overtime view(s) as a special tick sign (different from "discrete" mark) together with line from corresponding "begin" mark to "end" mark. (*) * - Continuous marks can overlap (*) and be nested inside each other. Discrete mark can be nested inside marked region
+ * 
+ * @param[in] mt - mark, created by __itt_mark_create(const __itt_char* name) function
+ * 
+ * @return Returns zero value in case of success, non-zero value otherwise.
+ */
+int ITTAPI_CALL __itt_mark_off(__itt_mark_type mt);
+/** @brief Use this if necessary to create an "end" point for mark of process
+ * @see int ITTAPI_CALL __itt_mark_off(__itt_mark_type mt);
+ */
+int ITTAPI_CALL __itt_mark_global_off(__itt_mark_type mt);
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI_CALL __itt_thread_set_nameA(const char *name);
+void ITTAPI_CALL __itt_thread_set_nameW(const wchar_t *name);
+#ifdef UNICODE
+#  define __itt_thread_set_name __itt_thread_set_nameW
+#  define __itt_thread_set_name_ptr __itt_thread_set_nameW_ptr
+#else /* UNICODE */
+#  define __itt_thread_set_name __itt_thread_set_nameA
+#  define __itt_thread_set_name_ptr __itt_thread_set_nameA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @brief Sets thread name using char or Unicode string
+ * @param[in] name - name of thread
+ */
+void ITTAPI_CALL __itt_thread_set_name(const __itt_char* name);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @brief Mark current thread as ignored from this point on, for the duration of its existence. */
+void ITTAPI_CALL __itt_thread_ignore(void);
+/** @brief Is called when sync object is destroyed (needed to track lifetime of objects) */
+void ITTAPI_CALL __itt_sync_destroy(void *addr);
+/** @brief Enter spin loop on user-defined sync object */
+void ITTAPI_CALL __itt_sync_prepare(void* addr);
+/** @brief Quit spin loop without acquiring spin object */
+void ITTAPI_CALL __itt_sync_cancel(void *addr);
+/** @brief Successful spin loop completion (sync object acquired) */
+void ITTAPI_CALL __itt_sync_acquired(void *addr);
+/** @brief Start sync object releasing code. Is called before the lock release call. */
+void ITTAPI_CALL __itt_sync_releasing(void* addr);
+/** @brief Sync object released. Is called after the release call */
+void ITTAPI_CALL __itt_sync_released(void* addr);
+
+/** @brief Fast synchronization which does no require spinning.
+
+  * - This special function is to be used by TBB and OpenMP libraries only when they know 
+  *   there is no spin but they need to suppress TC warnings about shared variable modifications.
+  * - It only has corresponding pointers in static library and does not have corresponding function
+  *   in dynamic library.
+  * @see void ITTAPI_CALL __itt_sync_prepare(void* addr);
+*/
+void ITTAPI_CALL __itt_fsync_prepare(void* addr);
+/** @brief Fast synchronization which does no require spinning.
+
+  * - This special function is to be used by TBB and OpenMP libraries only when they know 
+  *   there is no spin but they need to suppress TC warnings about shared variable modifications.
+  * - It only has corresponding pointers in static library and does not have corresponding function
+  *   in dynamic library.
+  * @see void ITTAPI_CALL __itt_sync_cancel(void *addr);
+*/
+void ITTAPI_CALL __itt_fsync_cancel(void *addr);
+/** @brief Fast synchronization which does no require spinning.
+
+  * - This special function is to be used by TBB and OpenMP libraries only when they know 
+  *   there is no spin but they need to suppress TC warnings about shared variable modifications.
+  * - It only has corresponding pointers in static library and does not have corresponding function
+  *   in dynamic library.
+  * @see void ITTAPI_CALL __itt_sync_acquired(void *addr);
+*/
+void ITTAPI_CALL __itt_fsync_acquired(void *addr);
+/** @brief Fast synchronization which does no require spinning.
+
+  * - This special function is to be used by TBB and OpenMP libraries only when they know 
+  *   there is no spin but they need to suppress TC warnings about shared variable modifications.
+  * - It only has corresponding pointers in static library and does not have corresponding function
+  *   in dynamic library.
+  * @see void ITTAPI_CALL __itt_sync_releasing(void* addr);
+*/
+void ITTAPI_CALL __itt_fsync_releasing(void* addr);
+/** @brief Fast synchronization which does no require spinning.
+
+  * - This special function is to be used by TBB and OpenMP libraries only when they know 
+  *   there is no spin but they need to suppress TC warnings about shared variable modifications.
+  * - It only has corresponding pointers in static library and does not have corresponding function
+  *   in dynamic library.
+  * @see void ITTAPI_CALL __itt_sync_released(void* addr);
+*/
+void ITTAPI_CALL __itt_fsync_released(void* addr);
+
+/** @hideinitializer
+ * @brief possible value of attribute argument for sync object type
+ */
+#define __itt_attr_barrier 1
+/** @hideinitializer 
+ * @brief possible value of attribute argument for sync object type
+ */
+#define __itt_attr_mutex   2
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI_CALL __itt_sync_set_nameA(void *addr, const char *objtype, const char *objname, int attribute);
+void ITTAPI_CALL __itt_sync_set_nameW(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute);
+#ifdef UNICODE
+#  define __itt_sync_set_name __itt_sync_set_nameW
+#  define __itt_sync_set_name_ptr __itt_sync_set_nameW_ptr
+#else /* UNICODE */
+#  define __itt_sync_set_name __itt_sync_set_nameA
+#  define __itt_sync_set_name_ptr __itt_sync_set_nameA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @deprecated Legacy API 
+ * @brief Assign a name to a sync object using char or Unicode string
+ *  @param[in] addr -    pointer to the sync object. You should use a real pointer to your object
+ *                       to make sure that the values don't clash with other object addresses
+ *  @param[in] objtype - null-terminated object type string. If NULL is passed, the object will
+ *                       be assumed to be of generic "User Synchronization" type
+ *  @param[in] objname - null-terminated object name string. If NULL, no name will be assigned
+ *                       to the object -- you can use the __itt_sync_rename call later to assign
+ *                       the name
+ *  @param[in] attribute - one of [ #__itt_attr_barrier , #__itt_attr_mutex] values which defines the
+ *                       exact semantics of how prepare/acquired/releasing calls work.
+ */
+void ITTAPI_CALL __itt_sync_set_name(void *addr, const __itt_char* objtype, const __itt_char* objname, int attribute);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI_CALL __itt_sync_createA(void *addr, const char *objtype, const char *objname, int attribute);
+void ITTAPI_CALL __itt_sync_createW(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute);
+#ifdef UNICODE
+#define __itt_sync_create __itt_sync_createW
+#  define __itt_sync_create_ptr __itt_sync_createW_ptr
+#else /* UNICODE */
+#define __itt_sync_create __itt_sync_createA
+#  define __itt_sync_create_ptr __itt_sync_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @brief Register the creation of a sync object using char or Unicode string
+ *  @param[in] addr -    pointer to the sync object. You should use a real pointer to your object
+ *                       to make sure that the values don't clash with other object addresses
+ *  @param[in] objtype - null-terminated object type string. If NULL is passed, the object will
+ *                       be assumed to be of generic "User Synchronization" type
+ *  @param[in] objname - null-terminated object name string. If NULL, no name will be assigned
+ *                       to the object -- you can use the __itt_sync_rename call later to assign
+ *                       the name
+ *  @param[in] attribute - one of [ #__itt_attr_barrier, #__itt_attr_mutex] values which defines the
+ *                       exact semantics of how prepare/acquired/releasing calls work.
+**/
+void ITTAPI_CALL __itt_sync_create(void *addr, const __itt_char* objtype, const __itt_char* objname, int attribute);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @brief Assign a name to a sync object using char or Unicode string.
+
+ * Sometimes you cannot assign the name to a sync object in the __itt_sync_set_name call because it
+ * is not yet known there. In this case you should use the rename call which allows to assign the
+ * name after the creation has been registered. The renaming can be done multiple times. All waits
+ * after a new name has been assigned will be attributed to the sync object with this name.
+ * @param[in] addr -    pointer to the sync object
+ * @param[in] name - null-terminated object name string
+**/
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI_CALL __itt_sync_renameA(void *addr, const char *name);
+void ITTAPI_CALL __itt_sync_renameW(void *addr, const wchar_t *name);
+#ifdef UNICODE
+#define __itt_sync_rename __itt_sync_renameW
+#  define __itt_sync_rename_ptr __itt_sync_renameW_ptr
+#else /* UNICODE */
+#define __itt_sync_rename __itt_sync_renameA
+#  define __itt_sync_rename_ptr __itt_sync_renameA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+void ITTAPI_CALL __itt_sync_rename(void *addr, const __itt_char* name);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentaion */
+int __itt_jit_notify_event(__itt_jit_jvm_event event_type, void* event_data);
+unsigned int __itt_jit_get_new_method_id(void);
+const char* ITTAPI_CALL __itt_api_version(void);
+__itt_error_notification_t* __itt_set_error_handler(__itt_error_notification_t*);
+
+#if ITT_OS == ITT_OS_WIN
+#define LIBITTNOTIFY_CC __cdecl
+#define LIBITTNOTIFY_EXPORT __declspec(dllexport) 
+#define LIBITTNOTIFY_IMPORT __declspec(dllimport) 
+#elif ITT_OS == ITT_OS_MAC || ITT_OS == ITT_OS_LINUX
+#define LIBITTNOTIFY_CC /* nothing */
+#define LIBITTNOTIFY_EXPORT /* nothing */
+#define LIBITTNOTIFY_IMPORT /* nothing */
+#else /* ITT_OS == ITT_OS_WIN */
+#error "Unsupported OS"
+#endif /* ITT_OS == ITT_OS_WIN */
+
+#define LIBITTNOTIFY_API
+/** @endcond */
+
+/** @deprecated Legacy API
+ * @brief Hand instrumentation of user synchronization 
+ */
+LIBITTNOTIFY_API void LIBITTNOTIFY_CC __itt_notify_sync_prepare(void *p);
+/** @deprecated Legacy API
+ * @brief Hand instrumentation of user synchronization 
+ */
+LIBITTNOTIFY_API void LIBITTNOTIFY_CC __itt_notify_sync_cancel(void *p);
+/** @deprecated Legacy API
+ * @brief Hand instrumentation of user synchronization 
+ */
+LIBITTNOTIFY_API void LIBITTNOTIFY_CC __itt_notify_sync_acquired(void *p);
+/** @deprecated Legacy API
+ * @brief Hand instrumentation of user synchronization 
+ */
+LIBITTNOTIFY_API void LIBITTNOTIFY_CC __itt_notify_sync_releasing(void *p);
+/** @deprecated Legacy API
+ * @brief itt_notify_cpath_target is handled by Thread Profiler only.
+ *  Inform Thread Profiler that the current thread has recahed a critical path target. 
+ */
+LIBITTNOTIFY_API void LIBITTNOTIFY_CC __itt_notify_cpath_target(void);
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+LIBITTNOTIFY_API int LIBITTNOTIFY_CC __itt_thr_name_setA( char *name, int namelen );
+LIBITTNOTIFY_API int LIBITTNOTIFY_CC __itt_thr_name_setW( wchar_t *name, int namelen );
+# ifdef UNICODE
+#  define __itt_thr_name_set __itt_thr_name_setW
+#  define __itt_thr_name_set_ptr __itt_thr_name_setW_ptr
+# else
+#  define __itt_thr_name_set __itt_thr_name_setA
+#  define __itt_thr_name_set_ptr __itt_thr_name_setA_ptr
+# endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @deprecated Legacy API
+ * @brief Set name to be associated with thread in analysis GUI.
+ *  Return __itt_err upon failure (name or namelen being null,name and namelen mismatched)
+ */
+LIBITTNOTIFY_API int LIBITTNOTIFY_CC __itt_thr_name_set( __itt_char *name, int namelen );
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @brief Mark current thread as ignored from this point on, for the duration of its existence. */
+LIBITTNOTIFY_API void LIBITTNOTIFY_CC  __itt_thr_ignore(void);
+
+/* User event notification                                                                    */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+/** @deprecated Legacy API 
+ * @brief User event notification.
+ * Event create APIs return non-zero event identifier upon success and __itt_err otherwise
+ * (name or namelen being null/name and namelen not matching, user event feature not enabled)
+ */
+LIBITTNOTIFY_API __itt_event LIBITTNOTIFY_CC __itt_event_createA( char *name, int namelen );
+LIBITTNOTIFY_API __itt_event LIBITTNOTIFY_CC __itt_event_createW( wchar_t *name, int namelen );
+# ifdef UNICODE
+#  define __itt_event_create __itt_event_createW
+#  define __itt_event_create_ptr __itt_event_createW_ptr
+# else
+#  define __itt_event_create __itt_event_createA
+#  define __itt_event_create_ptr __itt_event_createA_ptr
+# endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @deprecated Legacy API 
+ * @brief User event notification.
+ * Event create APIs return non-zero event identifier upon success and __itt_err otherwise
+ * (name or namelen being null/name and namelen not matching, user event feature not enabled)
+ */
+LIBITTNOTIFY_API __itt_event LIBITTNOTIFY_CC __itt_event_create( __itt_char *name, int namelen );
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @deprecated Legacy API 
+ * @brief Record an event occurance. 
+ * These APIs return __itt_err upon failure (invalid event id/user event feature not enabled) 
+ */
+LIBITTNOTIFY_API int LIBITTNOTIFY_CC __itt_event_start( __itt_event event );
+/** @deprecated Legacy API 
+ * @brief Record an event occurance.  event_end is optional if events do not have durations. 
+ * These APIs return __itt_err upon failure (invalid event id/user event feature not enabled) 
+ */
+LIBITTNOTIFY_API int LIBITTNOTIFY_CC __itt_event_end( __itt_event event ); /** optional */
+
+
+/** @deprecated Legacy API 
+ * @brief managing thread and object states
+ */
+LIBITTNOTIFY_API __itt_state_t LIBITTNOTIFY_CC __itt_state_get(void);
+/** @deprecated Legacy API 
+ * @brief managing thread and object states
+ */
+LIBITTNOTIFY_API __itt_state_t LIBITTNOTIFY_CC __itt_state_set( __itt_state_t );
+
+/** @deprecated Legacy API 
+ * @brief managing thread and object modes
+ */
+LIBITTNOTIFY_API __itt_thr_state_t LIBITTNOTIFY_CC __itt_thr_mode_set( __itt_thr_prop_t, __itt_thr_state_t );
+/** @deprecated Legacy API 
+ * @brief managing thread and object modes
+ */
+LIBITTNOTIFY_API __itt_obj_state_t LIBITTNOTIFY_CC __itt_obj_mode_set( __itt_obj_prop_t, __itt_obj_state_t );
+
+/** @deprecated Non-supported Legacy API
+ * @brief Inform the tool of memory accesses on reading
+ */
+LIBITTNOTIFY_API void LIBITTNOTIFY_CC __itt_memory_read( void *address, size_t size );
+/** @deprecated Non-supported Legacy API
+ * @brief Inform the tool of memory accesses on writing
+ */
+LIBITTNOTIFY_API void LIBITTNOTIFY_CC __itt_memory_write( void *address, size_t size );
+/** @deprecated Non-supported Legacy API
+ * @brief Inform the tool of memory accesses on updating
+ */
+LIBITTNOTIFY_API void LIBITTNOTIFY_CC __itt_memory_update( void *address, size_t size );
+
+/** @cond exclude_from_documentation */
+/* The following 3 are currently for INTERNAL use only */
+/** @internal */
+LIBITTNOTIFY_API void LIBITTNOTIFY_CC __itt_test_delay( int );
+/** @internal */
+LIBITTNOTIFY_API void LIBITTNOTIFY_CC __itt_test_seq_init( void *, int );
+/** @internal */
+LIBITTNOTIFY_API void LIBITTNOTIFY_CC __itt_test_seq_wait( void *, int );
+/** @endcond */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+/* *********************************************************************************
+   *********************************************************************************
+   ********************************************************************************* */
+/** @cond exclude_from_documentation */
+#define ITT_JOIN_AUX(p,n) p##n
+#define ITT_JOIN(p,n) ITT_JOIN_AUX(p,n)
+
+#ifndef INTEL_ITTNOTIFY_PREFIX
+#define INTEL_ITTNOTIFY_PREFIX __itt_
+#endif /* INTEL_ITTNOTIFY_PREFIX */
+#ifndef INTEL_ITTNOTIFY_POSTFIX
+#  define INTEL_ITTNOTIFY_POSTFIX _ptr_
+#endif /* INTEL_ITTNOTIFY_POSTFIX */
+
+#ifndef _ITTNOTIFY_H_MACRO_BODY_
+
+#define ____ITTNOTIFY_NAME_(p,n) p##n
+#define ___ITTNOTIFY_NAME_(p,n) ____ITTNOTIFY_NAME_(p,n)
+#define __ITTNOTIFY_NAME_(n) ___ITTNOTIFY_NAME_(INTEL_ITTNOTIFY_PREFIX,n)
+#define _ITTNOTIFY_NAME_(n) __ITTNOTIFY_NAME_(ITT_JOIN(n,INTEL_ITTNOTIFY_POSTFIX))
+
+#ifdef ITT_STUBV
+#undef ITT_STUBV
+#endif
+#define ITT_STUBV(type,name,args,params)                     \
+    typedef type (ITTAPI_CALL* ITT_JOIN(_ITTNOTIFY_NAME_(name),_t)) args; \
+    extern ITT_JOIN(_ITTNOTIFY_NAME_(name),_t) _ITTNOTIFY_NAME_(name);
+#undef ITT_STUB
+#define ITT_STUB ITT_STUBV
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define __itt_error_handler ITT_JOIN(INTEL_ITTNOTIFY_PREFIX, error_handler)
+void __itt_error_handler(__itt_jit_jvm_event event_type, void* event_data);
+
+extern const __itt_state_t _ITTNOTIFY_NAME_(state_err);
+extern const __itt_event   _ITTNOTIFY_NAME_(event_err);
+extern const int           _ITTNOTIFY_NAME_(err);
+
+#define __itt_state_err _ITTNOTIFY_NAME_(state_err)
+#define __itt_event_err _ITTNOTIFY_NAME_(event_err)
+#define __itt_err       _ITTNOTIFY_NAME_(err)
+
+ITT_STUBV(void, pause,(void),())
+ITT_STUBV(void, resume,(void),())
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+
+ITT_STUB(__itt_mark_type, mark_createA,(const char *name),(name))
+
+ITT_STUB(__itt_mark_type, mark_createW,(const wchar_t *name),(name))
+
+ITT_STUB(int, markA,(__itt_mark_type mt, const char *parameter),(mt,parameter))
+
+ITT_STUB(int, markW,(__itt_mark_type mt, const wchar_t *parameter),(mt,parameter))
+
+ITT_STUB(int, mark_globalA,(__itt_mark_type mt, const char *parameter),(mt,parameter))
+
+ITT_STUB(int, mark_globalW,(__itt_mark_type mt, const wchar_t *parameter),(mt,parameter))
+
+ITT_STUBV(void, thread_set_nameA,( const char *name),(name))
+
+ITT_STUBV(void, thread_set_nameW,( const wchar_t *name),(name))
+
+ITT_STUBV(void, sync_createA,(void *addr, const char *objtype, const char *objname, int attribute), (addr, objtype, objname, attribute))
+
+ITT_STUBV(void, sync_createW,(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute), (addr, objtype, objname, attribute))
+
+ITT_STUBV(void, sync_renameA, (void *addr, const char *name), (addr, name))
+
+ITT_STUBV(void, sync_renameW, (void *addr, const wchar_t *name), (addr, name))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+ITT_STUB(__itt_mark_type, mark_create,(const char *name),(name))
+
+ITT_STUB(int, mark,(__itt_mark_type mt, const char *parameter),(mt,parameter))
+
+ITT_STUB(int, mark_global,(__itt_mark_type mt, const char *parameter),(mt,parameter))
+
+ITT_STUBV(void, sync_set_name,(void *addr, const char *objtype, const char *objname, int attribute),(addr,objtype,objname,attribute))
+
+ITT_STUBV(void, thread_set_name,( const char *name),(name))
+
+ITT_STUBV(void, sync_create,(void *addr, const char *objtype, const char *objname, int attribute), (addr, objtype, objname, attribute))
+
+ITT_STUBV(void, sync_rename, (void *addr, const char *name), (addr, name))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+ITT_STUB(int, mark_off,(__itt_mark_type mt),(mt))
+
+ITT_STUB(int, mark_global_off,(__itt_mark_type mt),(mt))
+
+ITT_STUBV(void, thread_ignore,(void),())
+
+ITT_STUBV(void, sync_prepare,(void* addr),(addr))
+
+ITT_STUBV(void, sync_cancel,(void *addr),(addr))
+
+ITT_STUBV(void, sync_acquired,(void *addr),(addr))
+
+ITT_STUBV(void, sync_releasing,(void* addr),(addr))
+
+ITT_STUBV(void, sync_released,(void* addr),(addr))
+
+ITT_STUBV(void, fsync_prepare,(void* addr),(addr))
+
+ITT_STUBV(void, fsync_cancel,(void *addr),(addr))
+
+ITT_STUBV(void, fsync_acquired,(void *addr),(addr))
+
+ITT_STUBV(void, fsync_releasing,(void* addr),(addr))
+
+ITT_STUBV(void, fsync_released,(void* addr),(addr))
+
+ITT_STUBV(void, sync_destroy,(void *addr), (addr))
+
+ITT_STUBV(void, notify_sync_prepare,(void *p),(p))
+
+ITT_STUBV(void, notify_sync_cancel,(void *p),(p))
+
+ITT_STUBV(void, notify_sync_acquired,(void *p),(p))
+
+ITT_STUBV(void, notify_sync_releasing,(void *p),(p))
+
+ITT_STUBV(void, notify_cpath_target,(),())
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(void, sync_set_nameA,(void *addr, const char *objtype, const char *objname, int attribute),(addr,objtype,objname,attribute))
+
+ITT_STUBV(void, sync_set_nameW,(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute),(addr,objtype,objname,attribute))
+
+ITT_STUB (int, thr_name_setA,( char *name, int namelen ),(name,namelen))
+
+ITT_STUB (int, thr_name_setW,( wchar_t *name, int namelen ),(name,namelen))
+
+ITT_STUB (__itt_event, event_createA,( char *name, int namelen ),(name,namelen))
+
+ITT_STUB (__itt_event, event_createW,( wchar_t *name, int namelen ),(name,namelen))
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB (int, thr_name_set,( char *name, int namelen ),(name,namelen))
+
+ITT_STUB (__itt_event, event_create,( char *name, int namelen ),(name,namelen))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+ITT_STUBV(void, thr_ignore,(void),())
+
+ITT_STUB (int, event_start,( __itt_event event ),(event))
+
+ITT_STUB (int, event_end,( __itt_event event ),(event))
+
+ITT_STUB (__itt_state_t, state_get, (), ())
+ITT_STUB (__itt_state_t, state_set,( __itt_state_t state), (state))
+ITT_STUB (__itt_obj_state_t, obj_mode_set, ( __itt_obj_prop_t prop, __itt_obj_state_t state), (prop, state))
+ITT_STUB (__itt_thr_state_t, thr_mode_set, (__itt_thr_prop_t prop, __itt_thr_state_t state), (prop, state))
+
+ITT_STUB(const char*, api_version,(void),())
+
+ITT_STUB(int, jit_notify_event, (__itt_jit_jvm_event event_type, void* event_data), (event_type, event_data))
+ITT_STUB(unsigned int, jit_get_new_method_id, (void), ())
+
+ITT_STUBV(void, memory_read,( void *address, size_t size ), (address, size))
+ITT_STUBV(void, memory_write,( void *address, size_t size ), (address, size))
+ITT_STUBV(void, memory_update,( void *address, size_t size ), (address, size))
+
+ITT_STUBV(void, test_delay, (int p1), (p1))
+ITT_STUBV(void, test_seq_init, ( void* p1, int p2), (p1, p2))
+ITT_STUBV(void, test_seq_wait, ( void* p1, int p2), (p1, p2))
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+
+#ifndef INTEL_NO_ITTNOTIFY_API
+
+#define __ITTNOTIFY_VOID_CALL__(n) (!_ITTNOTIFY_NAME_(n)) ? (void)0 : _ITTNOTIFY_NAME_(n)
+#define __ITTNOTIFY_DATA_CALL__(n) (!_ITTNOTIFY_NAME_(n)) ? 0 : _ITTNOTIFY_NAME_(n)
+
+#define __itt_pause __ITTNOTIFY_VOID_CALL__(pause)
+#define __itt_pause_ptr _ITTNOTIFY_NAME_(pause)
+
+#define __itt_resume __ITTNOTIFY_VOID_CALL__(resume)
+#define __itt_resume_ptr _ITTNOTIFY_NAME_(resume)
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+
+#define __itt_mark_createA __ITTNOTIFY_DATA_CALL__(mark_createA)
+#define __itt_mark_createA_ptr _ITTNOTIFY_NAME_(mark_createA)
+
+#define __itt_mark_createW __ITTNOTIFY_DATA_CALL__(mark_createW)
+#define __itt_mark_createW_ptr _ITTNOTIFY_NAME_(mark_createW)
+
+#define __itt_markA __ITTNOTIFY_DATA_CALL__(markA)
+#define __itt_markA_ptr _ITTNOTIFY_NAME_(markA)
+
+#define __itt_markW __ITTNOTIFY_DATA_CALL__(markW)
+#define __itt_markW_ptr _ITTNOTIFY_NAME_(markW)
+
+#define __itt_mark_globalA __ITTNOTIFY_DATA_CALL__(mark_globalA)
+#define __itt_mark_globalA_ptr _ITTNOTIFY_NAME_(mark_globalA)
+
+#define __itt_mark_globalW __ITTNOTIFY_DATA_CALL__(mark_globalW)
+#define __itt_mark_globalW_ptr _ITTNOTIFY_NAME_(mark_globalW)
+
+#define __itt_thread_set_nameA __ITTNOTIFY_VOID_CALL__(thread_set_nameA)
+#define __itt_thread_set_nameA_ptr _ITTNOTIFY_NAME_(thread_set_nameA)
+
+#define __itt_thread_set_nameW __ITTNOTIFY_VOID_CALL__(thread_set_nameW)
+#define __itt_thread_set_nameW_ptr _ITTNOTIFY_NAME_(thread_set_nameW)
+
+#define __itt_sync_createA __ITTNOTIFY_VOID_CALL__(sync_createA)
+#define __itt_sync_createA_ptr _ITTNOTIFY_NAME_(sync_createA)
+
+#define __itt_sync_createW __ITTNOTIFY_VOID_CALL__(sync_createW)
+#define __itt_sync_createW_ptr _ITTNOTIFY_NAME_(sync_createW)
+
+#define __itt_sync_renameA __ITTNOTIFY_VOID_CALL__(sync_renameA)
+#define __itt_sync_renameA_ptr _ITTNOTIFY_NAME_(sync_renameA)
+
+#define __itt_sync_renameW __ITTNOTIFY_VOID_CALL__(sync_renameW)
+#define __itt_sync_renameW_ptr _ITTNOTIFY_NAME_(sync_renameW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#define __itt_mark_create __ITTNOTIFY_DATA_CALL__(mark_create)
+#define __itt_mark_create_ptr _ITTNOTIFY_NAME_(mark_create)
+
+#define __itt_mark __ITTNOTIFY_DATA_CALL__(mark)
+#define __itt_mark_ptr _ITTNOTIFY_NAME_(mark)
+
+#define __itt_mark_global __ITTNOTIFY_DATA_CALL__(mark_global)
+#define __itt_mark_global_ptr _ITTNOTIFY_NAME_(mark_global)
+
+#define __itt_sync_set_name __ITTNOTIFY_VOID_CALL__(sync_set_name)
+#define __itt_sync_set_name_ptr _ITTNOTIFY_NAME_(sync_set_name)
+
+#define __itt_thread_set_name __ITTNOTIFY_VOID_CALL__(thread_set_name)
+#define __itt_thread_set_name_ptr _ITTNOTIFY_NAME_(thread_set_name)
+
+#define __itt_sync_create __ITTNOTIFY_VOID_CALL__(sync_create)
+#define __itt_sync_create_ptr _ITTNOTIFY_NAME_(sync_create)
+
+#define __itt_sync_rename __ITTNOTIFY_VOID_CALL__(sync_rename)
+#define __itt_sync_rename_ptr _ITTNOTIFY_NAME_(sync_rename)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#define __itt_mark_off __ITTNOTIFY_DATA_CALL__(mark_off)
+#define __itt_mark_off_ptr _ITTNOTIFY_NAME_(mark_off)
+
+#define __itt_thread_ignore __ITTNOTIFY_VOID_CALL__(thread_ignore)
+#define __itt_thread_ignore_ptr _ITTNOTIFY_NAME_(thread_ignore)
+
+#define __itt_sync_prepare __ITTNOTIFY_VOID_CALL__(sync_prepare)
+#define __itt_sync_prepare_ptr _ITTNOTIFY_NAME_(sync_prepare)
+
+#define __itt_sync_cancel __ITTNOTIFY_VOID_CALL__(sync_cancel)
+#define __itt_sync_cancel_ptr _ITTNOTIFY_NAME_(sync_cancel)
+
+#define __itt_sync_acquired __ITTNOTIFY_VOID_CALL__(sync_acquired)
+#define __itt_sync_acquired_ptr _ITTNOTIFY_NAME_(sync_acquired)
+
+#define __itt_sync_releasing __ITTNOTIFY_VOID_CALL__(sync_releasing)
+#define __itt_sync_releasing_ptr _ITTNOTIFY_NAME_(sync_releasing)
+
+#define __itt_sync_released __ITTNOTIFY_VOID_CALL__(sync_released)
+#define __itt_sync_released_ptr _ITTNOTIFY_NAME_(sync_released)
+
+#define __itt_fsync_prepare __ITTNOTIFY_VOID_CALL__(fsync_prepare)
+#define __itt_fsync_prepare_ptr _ITTNOTIFY_NAME_(fsync_prepare)
+
+#define __itt_fsync_cancel __ITTNOTIFY_VOID_CALL__(fsync_cancel)
+#define __itt_fsync_cancel_ptr _ITTNOTIFY_NAME_(fsync_cancel)
+
+#define __itt_fsync_acquired __ITTNOTIFY_VOID_CALL__(fsync_acquired)
+#define __itt_fsync_acquired_ptr _ITTNOTIFY_NAME_(fsync_acquired)
+
+#define __itt_fsync_releasing __ITTNOTIFY_VOID_CALL__(fsync_releasing)
+#define __itt_fsync_releasing_ptr _ITTNOTIFY_NAME_(fsync_releasing)
+
+#define __itt_fsync_released __ITTNOTIFY_VOID_CALL__(fsync_released)
+#define __itt_fsync_released_ptr _ITTNOTIFY_NAME_(fsync_released)
+
+#define __itt_sync_destroy __ITTNOTIFY_VOID_CALL__(sync_destroy)
+#define __itt_sync_destroy_ptr _ITTNOTIFY_NAME_(sync_destroy)
+
+#define __itt_notify_sync_prepare __ITTNOTIFY_VOID_CALL__(notify_sync_prepare)
+#define __itt_notify_sync_prepare_ptr _ITTNOTIFY_NAME_(notify_sync_prepare)
+
+#define __itt_notify_sync_cancel __ITTNOTIFY_VOID_CALL__(notify_sync_cancel)
+#define __itt_notify_sync_cancel_ptr _ITTNOTIFY_NAME_(notify_sync_cancel)
+
+#define __itt_notify_sync_acquired __ITTNOTIFY_VOID_CALL__(notify_sync_acquired)
+#define __itt_notify_sync_acquired_ptr _ITTNOTIFY_NAME_(notify_sync_acquired)
+
+#define __itt_notify_sync_releasing __ITTNOTIFY_VOID_CALL__(notify_sync_releasing)
+#define __itt_notify_sync_releasing_ptr _ITTNOTIFY_NAME_(notify_sync_releasing)
+
+#define __itt_notify_cpath_target __ITTNOTIFY_VOID_CALL__(notify_cpath_target)
+#define __itt_notify_cpath_target_ptr _ITTNOTIFY_NAME_(notify_cpath_target)
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_sync_set_nameA __ITTNOTIFY_VOID_CALL__(sync_set_nameA)
+#define __itt_sync_set_nameA_ptr _ITTNOTIFY_NAME_(sync_set_nameA)
+
+#define __itt_sync_set_nameW __ITTNOTIFY_VOID_CALL__(sync_set_nameW)
+#define __itt_sync_set_nameW_ptr _ITTNOTIFY_NAME_(sync_set_nameW)
+
+#define __itt_thr_name_setA __ITTNOTIFY_DATA_CALL__(thr_name_setA)
+#define __itt_thr_name_setA_ptr _ITTNOTIFY_NAME_(thr_name_setA)
+
+#define __itt_thr_name_setW __ITTNOTIFY_DATA_CALL__(thr_name_setW)
+#define __itt_thr_name_setW_ptr _ITTNOTIFY_NAME_(thr_name_setW)
+
+#define __itt_event_createA __ITTNOTIFY_DATA_CALL__(event_createA)
+#define __itt_event_createA_ptr _ITTNOTIFY_NAME_(event_createA)
+
+#define __itt_event_createW __ITTNOTIFY_DATA_CALL__(event_createW)
+#define __itt_event_createW_ptr _ITTNOTIFY_NAME_(event_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_thr_name_set __ITTNOTIFY_DATA_CALL__(thr_name_set)
+#define __itt_thr_name_set_ptr _ITTNOTIFY_NAME_(thr_name_set)
+
+#define __itt_event_create __ITTNOTIFY_DATA_CALL__(event_create)
+#define __itt_event_create_ptr _ITTNOTIFY_NAME_(event_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#define __itt_thr_ignore __ITTNOTIFY_VOID_CALL__(thr_ignore)
+#define __itt_thr_ignore_ptr _ITTNOTIFY_NAME_(thr_ignore)
+
+#define __itt_event_start __ITTNOTIFY_DATA_CALL__(event_start)
+#define __itt_event_start_ptr _ITTNOTIFY_NAME_(event_start)
+
+#define __itt_event_end __ITTNOTIFY_DATA_CALL__(event_end)
+#define __itt_event_end_ptr _ITTNOTIFY_NAME_(event_end)
+
+#define __itt_state_get __ITTNOTIFY_DATA_CALL__(state_get)
+#define __itt_state_get_ptr _ITTNOTIFY_NAME_(state_get)
+
+#define __itt_state_set __ITTNOTIFY_DATA_CALL__(state_set)
+#define __itt_state_set_ptr _ITTNOTIFY_NAME_(state_set)
+
+#define __itt_obj_mode_set __ITTNOTIFY_DATA_CALL__(obj_mode_set)
+#define __itt_obj_mode_set_ptr _ITTNOTIFY_NAME_(obj_mode_set)
+
+#define __itt_thr_mode_set __ITTNOTIFY_DATA_CALL__(thr_mode_set)
+#define __itt_thr_mode_set_ptr _ITTNOTIFY_NAME_(thr_mode_set)
+
+#define __itt_api_version __ITTNOTIFY_DATA_CALL__(api_version)
+#define __itt_api_version_ptr _ITTNOTIFY_NAME_(api_version)
+
+#define __itt_jit_notify_event __ITTNOTIFY_DATA_CALL__(jit_notify_event)
+#define __itt_jit_notify_event_ptr _ITTNOTIFY_NAME_(jit_notify_event)
+
+#define __itt_jit_get_new_method_id __ITTNOTIFY_DATA_CALL__(jit_get_new_method_id)
+#define __itt_jit_get_new_method_id_ptr _ITTNOTIFY_NAME_(jit_get_new_method_id)
+
+#define __itt_memory_read __ITTNOTIFY_VOID_CALL__(memory_read)
+#define __itt_memory_read_ptr _ITTNOTIFY_NAME_(memory_read)
+
+#define __itt_memory_write __ITTNOTIFY_VOID_CALL__(memory_write)
+#define __itt_memory_write_ptr _ITTNOTIFY_NAME_(memory_write)
+
+#define __itt_memory_update __ITTNOTIFY_VOID_CALL__(memory_update)
+#define __itt_memory_update_ptr _ITTNOTIFY_NAME_(memory_update)
+
+
+#define __itt_test_delay __ITTNOTIFY_VOID_CALL__(test_delay)
+#define __itt_test_delay_ptr _ITTNOTIFY_NAME_(test_delay)
+
+#define __itt_test_seq_init __ITTNOTIFY_VOID_CALL__(test_seq_init)
+#define __itt_test_seq_init_ptr _ITTNOTIFY_NAME_(test_seq_init)
+
+#define __itt_test_seq_wait __ITTNOTIFY_VOID_CALL__(test_seq_wait)
+#define __itt_test_seq_wait_ptr _ITTNOTIFY_NAME_(test_seq_wait)
+
+#define __itt_set_error_handler ITT_JOIN(INTEL_ITTNOTIFY_PREFIX, set_error_handler)
+
+#else /* INTEL_NO_ITTNOTIFY_API */
+
+#define __itt_pause()
+#define __itt_pause_ptr 0
+
+#define __itt_resume()
+#define __itt_resume_ptr 0
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+
+#define __itt_mark_createA(name) (__itt_mark_type)0
+#define __itt_mark_createA_ptr 0
+
+#define __itt_mark_createW(name) (__itt_mark_type)0
+#define __itt_mark_createW_ptr 0
+
+#define __itt_markA(mt,parameter) (int)0
+#define __itt_markA_ptr 0
+
+#define __itt_markW(mt,parameter) (int)0
+#define __itt_markW_ptr 0
+
+#define __itt_mark_globalA(mt,parameter) (int)0
+#define __itt_mark_globalA_ptr 0
+
+#define __itt_mark_globalW(mt,parameter) (int)0
+#define __itt_mark_globalW_ptr 0
+
+#define __itt_thread_set_nameA(name)
+#define __itt_thread_set_nameA_ptr 0
+
+#define __itt_thread_set_nameW(name)
+#define __itt_thread_set_nameW_ptr 0
+
+#define __itt_sync_createA(addr, objtype, objname, attribute)
+#define __itt_sync_createA_ptr 0
+
+#define __itt_sync_createW(addr, objtype, objname, attribute)
+#define __itt_sync_createW_ptr 0
+
+#define __itt_sync_renameA(addr, name)
+#define __itt_sync_renameA_ptr 0
+
+#define __itt_sync_renameW(addr, name)
+#define __itt_sync_renameW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#define __itt_mark_create(name) (__itt_mark_type)0
+#define __itt_mark_create_ptr 0
+
+#define __itt_mark(mt,parameter) (int)0
+#define __itt_mark_ptr 0
+
+#define __itt_mark_global(mt,parameter) (int)0
+#define __itt_mark_global_ptr 0
+
+#define __itt_sync_set_name(addr,objtype,objname,attribute)
+#define __itt_sync_set_name_ptr 0
+
+#define __itt_thread_set_name(name)
+#define __itt_thread_set_name_ptr 0
+
+#define __itt_sync_create(addr, objtype, objname, attribute)
+#define __itt_sync_create_ptr 0
+
+#define __itt_sync_rename(addr, name)
+#define __itt_sync_rename_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#define __itt_mark_off(mt) (int)0
+#define __itt_mark_off_ptr 0
+
+#define __itt_thread_ignore()
+#define __itt_thread_ignore_ptr 0
+
+#define __itt_sync_prepare(addr)
+#define __itt_sync_prepare_ptr 0
+
+#define __itt_sync_cancel(addr)
+#define __itt_sync_cancel_ptr 0
+
+#define __itt_sync_acquired(addr)
+#define __itt_sync_acquired_ptr 0
+
+#define __itt_sync_releasing(addr)
+#define __itt_sync_releasing_ptr 0
+
+#define __itt_sync_released(addr)
+#define __itt_sync_released_ptr 0
+
+#define __itt_fsync_prepare(addr)
+#define __itt_fsync_prepare_ptr 0
+
+#define __itt_fsync_cancel(addr)
+#define __itt_fsync_cancel_ptr 0
+
+#define __itt_fsync_acquired(addr)
+#define __itt_fsync_acquired_ptr 0
+
+#define __itt_fsync_releasing(addr)
+#define __itt_fsync_releasing_ptr 0
+
+#define __itt_fsync_released(addr)
+#define __itt_fsync_released_ptr 0
+
+#define __itt_sync_destroy(addr)
+#define __itt_sync_destroy_ptr 0
+
+#define __itt_notify_sync_prepare(p)
+#define __itt_notify_sync_prepare_ptr 0
+
+#define __itt_notify_sync_cancel(p)
+#define __itt_notify_sync_cancel_ptr 0
+
+#define __itt_notify_sync_acquired(p)
+#define __itt_notify_sync_acquired_ptr 0
+
+#define __itt_notify_sync_releasing(p)
+#define __itt_notify_sync_releasing_ptr 0
+
+#define __itt_notify_cpath_target()
+#define __itt_notify_cpath_target_ptr 0
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_sync_set_nameA(addr,objtype,objname,attribute)
+#define __itt_sync_set_nameA_ptr 0
+
+#define __itt_sync_set_nameW(addr,objtype,objname,attribute)
+#define __itt_sync_set_nameW_ptr 0
+
+#define __itt_thr_name_setA(name,namelen) (int)0
+#define __itt_thr_name_setA_ptr 0
+
+#define __itt_thr_name_setW(name,namelen) (int)0
+#define __itt_thr_name_setW_ptr 0
+
+#define __itt_event_createA(name,namelen) (__itt_event)0
+#define __itt_event_createA_ptr 0
+
+#define __itt_event_createW(name,namelen) (__itt_event)0
+#define __itt_event_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_thr_name_set(name,namelen) (int)0
+#define __itt_thr_name_set_ptr 0
+
+#define __itt_event_create(name,namelen) (__itt_event)0
+#define __itt_event_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#define __itt_thr_ignore()
+#define __itt_thr_ignore_ptr 0
+
+#define __itt_event_start(event) (int)0
+#define __itt_event_start_ptr 0
+
+#define __itt_event_end(event) (int)0
+#define __itt_event_end_ptr 0
+
+#define __itt_state_get() (__itt_state_t)0
+#define __itt_state_get_ptr 0
+
+#define __itt_state_set(state) (__itt_state_t)0
+#define __itt_state_set_ptr 0
+
+#define __itt_obj_mode_set(prop, state) (__itt_obj_state_t)0
+#define __itt_obj_mode_set_ptr 0
+
+#define __itt_thr_mode_set(prop, state) (__itt_thr_state_t)0
+#define __itt_thr_mode_set_ptr 0
+
+#define __itt_api_version() (const char*)0
+#define __itt_api_version_ptr 0
+
+#define __itt_jit_notify_event(event_type,event_data) (int)0
+#define __itt_jit_notify_event_ptr 0
+
+#define __itt_jit_get_new_method_id() (unsigned int)0
+#define __itt_jit_get_new_method_id_ptr 0
+
+#define __itt_memory_read(address, size)
+#define __itt_memory_read_ptr 0
+
+#define __itt_memory_write(address, size)
+#define __itt_memory_write_ptr 0
+
+#define __itt_memory_update(address, size)
+#define __itt_memory_update_ptr 0
+
+#define __itt_test_delay(p1)
+#define __itt_test_delay_ptr 0
+
+#define __itt_test_seq_init(p1,p2)
+#define __itt_test_seq_init_ptr 0
+
+#define __itt_test_seq_wait(p1,p2)
+#define __itt_test_seq_wait_ptr 0
+
+#define __itt_set_error_handler(x)
+
+#endif /* INTEL_NO_ITTNOTIFY_API */
+
+#endif /* _ITTNOTIFY_H_MACRO_BODY_ */
+
+#endif /* _ITTNOTIFY_H_ */
+/** @endcond */
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/ittnotify_static.c b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/tools_api/ittnotify_static.c
new file mode 100644 (file)
index 0000000..d03758b
--- /dev/null
@@ -0,0 +1,577 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "_config.h"
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#include <windows.h>
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#include <pthread.h>
+#include <dlfcn.h>
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define __ITT_INTERNAL_INCLUDE
+
+#define _ITTNOTIFY_H_MACRO_BODY_
+
+#include "_disable_warnings.h"
+
+#include "ittnotify.h"
+
+#ifdef __cplusplus
+#  define ITT_EXTERN_C extern "C"
+#else
+#  define ITT_EXTERN_C /* nothing */
+#endif /* __cplusplus */
+
+#ifndef __itt_init_lib_name
+#  define __itt_init_lib_name __itt_init_lib
+#endif /* __itt_init_lib_name */
+
+static int __itt_init_lib(void);
+
+#ifndef INTEL_ITTNOTIFY_PREFIX
+#define INTEL_ITTNOTIFY_PREFIX __itt_
+#endif /* INTEL_ITTNOTIFY_PREFIX */
+#ifndef INTEL_ITTNOTIFY_POSTFIX
+#  define INTEL_ITTNOTIFY_POSTFIX _ptr_
+#endif /* INTEL_ITTNOTIFY_POSTFIX */
+
+#define ___N_(p,n) p##n
+#define __N_(p,n) ___N_(p,n)
+#define _N_(n) __N_(INTEL_ITTNOTIFY_PREFIX,n)
+
+/* building pointers to imported funcs */
+#undef ITT_STUBV
+#undef ITT_STUB
+#define ITT_STUB(type,name,args,params,ptr,group)                       \
+    static type ITTAPI_CALL ITT_JOIN(_N_(name),_init) args;             \
+    typedef type ITTAPI_CALL name##_t args;                             \
+    ITT_EXTERN_C name##_t* ITT_JOIN(_N_(name),INTEL_ITTNOTIFY_POSTFIX) = ITT_JOIN(_N_(name),_init); \
+    static type ITTAPI_CALL ITT_JOIN(_N_(name),_init) args              \
+    {                                                                   \
+        __itt_init_lib_name();                                          \
+        if(ITT_JOIN(_N_(name),INTEL_ITTNOTIFY_POSTFIX))                                             \
+            return ITT_JOIN(_N_(name),INTEL_ITTNOTIFY_POSTFIX) params;                              \
+        else                                                            \
+            return (type)0;                                             \
+    }
+
+#define ITT_STUBV(type,name,args,params,ptr,group)                      \
+    static type ITTAPI_CALL ITT_JOIN(_N_(name),_init) args;             \
+    typedef type ITTAPI_CALL name##_t args;                             \
+    ITT_EXTERN_C name##_t* ITT_JOIN(_N_(name),INTEL_ITTNOTIFY_POSTFIX) = ITT_JOIN(_N_(name),_init); \
+    static type ITTAPI_CALL ITT_JOIN(_N_(name),_init) args              \
+    {                                                                   \
+        __itt_init_lib_name();                                          \
+        if(ITT_JOIN(_N_(name),INTEL_ITTNOTIFY_POSTFIX))                                             \
+            ITT_JOIN(_N_(name),INTEL_ITTNOTIFY_POSTFIX) params;                                     \
+        else                                                            \
+            return;                                                     \
+    }
+
+const __itt_state_t _N_(state_err) = 0;
+const __itt_event _N_(event_err) = 0;
+const int _N_(err) = 0;
+
+#include "_ittnotify_static.h"
+
+typedef enum ___itt_group_id
+{
+    __itt_none_group    = 0,
+    __itt_control_group = 1,
+    __itt_thread_group  = 2,
+    __itt_mark_group    = 4,
+    __itt_sync_group    = 8,
+    __itt_fsync_group   = 16,
+    __itt_jit_group     = 32,
+    __itt_all_group     = -1
+} __itt_group_id;
+
+
+#ifndef CDECL
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#    define CDECL __cdecl
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#    define CDECL
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* CDECL */
+
+#ifndef STDCALL
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#    define STDCALL __stdcall
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#    define STDCALL
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* STDCALL */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+    typedef FARPROC FPTR;
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+    typedef void* FPTR;
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+
+/* OS communication functions */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+typedef HMODULE lib_t;
+typedef CRITICAL_SECTION mutex_t;
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+typedef void* lib_t;
+typedef pthread_mutex_t mutex_t;
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+static lib_t ittnotify_lib;
+
+static __itt_error_notification_t* error_handler = 0;
+
+#if ITT_OS==ITT_OS_WIN
+static const char* ittnotify_lib_name = "libittnotify.dll";
+#elif ITT_OS==ITT_OS_LINUX
+static const char* ittnotify_lib_name = "libittnotify.so";
+#elif ITT_OS==ITT_OS_MAC
+static const char* ittnotify_lib_name = "libittnotify.dylib";
+#else
+#error Unsupported or unknown OS.
+#endif
+
+#ifndef LIB_VAR_NAME
+#if ITT_ARCH==ITT_ARCH_IA32
+#define LIB_VAR_NAME INTEL_LIBITTNOTIFY32
+#else
+#define LIB_VAR_NAME INTEL_LIBITTNOTIFY64
+#endif
+#endif /* LIB_VAR_NAME */
+
+#define __TO_STR(x) #x
+#define _TO_STR(x) __TO_STR(x)
+
+static int __itt_fstrcmp(const char* s1, const char* s2)
+{
+    int i;
+
+    if(!s1 && !s2)
+        return 0;
+    else if(!s1 && s2)
+        return -1;
+    else if(s1 && !s2)
+        return 1;
+
+    for(i = 0; s1[i] || s2[i]; i++)
+        if(s1[i] > s2[i])
+            return 1;
+        else if(s1[i] < s2[i])
+            return -1;
+    return 0;
+}
+
+static const char* __itt_fsplit(const char* s, const char* sep, const char** out, int* len)
+{
+    int i;
+    int j;
+
+    if(!s || !sep || !out || !len)
+        return 0;
+
+    for(i = 0; s[i]; i++)
+    {
+        int b = 0;
+        for(j = 0; sep[j]; j++)
+            if(s[i] == sep[j])
+            {
+                b = 1;
+                break;
+            }
+        if(!b)
+            break;
+    }
+
+    if(!s[i])
+        return 0;
+
+    *len = 0;
+    *out = s + i;
+
+    for(; s[i]; i++, (*len)++)
+    {
+        int b = 0;
+        for(j = 0; sep[j]; j++)
+            if(s[i] == sep[j])
+            {
+                b = 1;
+                break;
+            }
+        if(b)
+            break;
+    }
+
+    for(; s[i]; i++)
+    {
+        int b = 0;
+        for(j = 0; sep[j]; j++)
+            if(s[i] == sep[j])
+            {
+                b = 1;
+                break;
+            }
+        if(!b)
+            break;
+    }
+
+    return s + i;
+}
+
+static char* __itt_fstrcpyn(char* dst, const char* src, int len)
+{
+    int i;
+
+    if(!src || !dst)
+        return 0;
+
+    for(i = 0; i < len; i++)
+        dst[i] = src[i];
+    dst[len] = 0;
+    return dst;
+}
+
+#ifdef ITT_NOTIFY_EXT_REPORT
+#  define ERROR_HANDLER ITT_JOIN(INTEL_ITTNOTIFY_PREFIX, error_handler)
+ITT_EXTERN_C void ERROR_HANDLER(__itt_error_code, const char* msg);
+#endif /* ITT_NOTIFY_EXT_REPORT */
+
+static void __itt_report_error(__itt_error_code code, const char* msg)
+{
+    if(error_handler)
+        error_handler(code, msg);
+#ifdef ITT_NOTIFY_EXT_REPORT
+    ERROR_HANDLER(code, msg);
+#endif /* ITT_NOTIFY_EXT_REPORT */
+}
+
+static const char* __itt_get_env_var(const char* name)
+{
+    static char env_value[4096];
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+    int i;
+    DWORD rc;
+    for(i = 0; i < sizeof(env_value); i++)
+        env_value[i] = 0;
+    rc = GetEnvironmentVariableA(name, env_value, sizeof(env_value) - 1);
+    if(rc >= sizeof(env_value))
+        __itt_report_error(__itt_error_cant_read_env, name);
+    else if(!rc)
+        return 0;
+    else
+        return env_value;
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+    char* env = getenv(name);
+    int i;
+    for(i = 0; i < sizeof(env_value); i++)
+        env_value[i] = 0;
+    if(env)
+    {
+        if(strlen(env) >= sizeof(env_value))
+        {
+            __itt_report_error(__itt_error_cant_read_env, name);
+            return 0;
+        }
+        strncpy(env_value, env, sizeof(env_value) - 1);
+        return env_value;
+    }
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+    return 0;
+}
+
+static const char* __itt_get_lib_name()
+{
+    const char* lib_name = __itt_get_env_var(_TO_STR(LIB_VAR_NAME));
+    if(!lib_name)
+        lib_name = ittnotify_lib_name;
+
+    return lib_name;
+}
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#  define __itt_get_proc(lib, name) GetProcAddress(lib, name)
+#  define __itt_init_mutex(mutex)   InitializeCriticalSection(mutex)
+#  define __itt_mutex_lock(mutex)   EnterCriticalSection(mutex)
+#  define __itt_mutex_unlock(mutex) LeaveCriticalSection(mutex)
+#  define __itt_load_lib(name)      LoadLibraryA(name)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#  define __itt_get_proc(lib, name) dlsym(lib, name)
+#  define __itt_init_mutex(mutex)   pthread_mutex_init(mutex, 0)
+#  define __itt_mutex_lock(mutex)   pthread_mutex_lock(mutex)
+#  define __itt_mutex_unlock(mutex) pthread_mutex_unlock(mutex)
+#  define __itt_load_lib(name)      dlopen(name, RTLD_LAZY)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#ifndef ITT_SIMPLE_INIT
+/* function stubs */
+
+#undef ITT_STUBV
+#undef ITT_STUB
+
+#define ITT_STUBV(type,name,args,params,ptr,group) \
+ITT_EXTERN_C type ITTAPI_CALL _N_(name) args                \
+{                                                  \
+    __itt_init_lib_name();                         \
+    if(ITT_JOIN(_N_(name),INTEL_ITTNOTIFY_POSTFIX))         \
+        ITT_JOIN(_N_(name),INTEL_ITTNOTIFY_POSTFIX) params; \
+    else                                           \
+        return;                                    \
+}
+
+#define ITT_STUB(type,name,args,params,ptr,group) \
+ITT_EXTERN_C type ITTAPI_CALL _N_(name) args                        \
+{                                                 \
+    __itt_init_lib_name();                        \
+    if(ITT_JOIN(_N_(name),INTEL_ITTNOTIFY_POSTFIX))                 \
+        return ITT_JOIN(_N_(name),INTEL_ITTNOTIFY_POSTFIX) params;  \
+    else                                          \
+        return (type)0;                           \
+}
+
+#include "_ittnotify_static.h"
+
+#endif /* ITT_SIMPLE_INIT */
+
+typedef struct ___itt_group_list
+{
+    __itt_group_id id;
+    const char*    name;
+} __itt_group_list;
+
+static __itt_group_list group_list[] = {
+    {__itt_control_group, "control"},
+    {__itt_thread_group,  "thread"},
+    {__itt_mark_group,    "mark"},
+    {__itt_sync_group,    "sync"},
+    {__itt_fsync_group,   "fsync"},
+    {__itt_jit_group,     "jit"},
+    {__itt_all_group,     "all"},
+    {__itt_none_group,    0}
+};
+
+typedef struct ___itt_group_alias
+{
+    const char*    env_var;
+    __itt_group_id groups;
+} __itt_group_alias;
+
+static __itt_group_alias group_alias[] = {
+    {"KMP_FOR_TPROFILE", (__itt_group_id)(__itt_control_group | __itt_thread_group | __itt_sync_group | __itt_mark_group)},
+    {"KMP_FOR_TCHECK", (__itt_group_id)(__itt_control_group | __itt_thread_group | __itt_fsync_group | __itt_mark_group)},
+    {0, __itt_none_group}
+};
+
+typedef struct ___itt_func_map
+{
+    const char*    name;
+    void**         func_ptr;
+    __itt_group_id group;
+} __itt_func_map;
+
+
+#define _P_(name) ITT_JOIN(_N_(name),INTEL_ITTNOTIFY_POSTFIX)
+
+#define ITT_STRINGIZE_AUX(p) #p
+#define ITT_STRINGIZE(p) ITT_STRINGIZE_AUX(p)
+
+#define __ptr_(pname,name,group) {ITT_STRINGIZE(ITT_JOIN(__itt_,pname)), (void**)(void*)&_P_(name), (__itt_group_id)(group)},
+
+#undef ITT_STUB
+#undef ITT_STUBV
+
+#define ITT_STUB(type,name,args,params,ptr,group) __ptr_(ptr,name,group)
+#define ITT_STUBV ITT_STUB
+
+static __itt_func_map func_map[] = {
+#include "_ittnotify_static.h"
+    {0, 0, __itt_none_group}
+};
+
+static __itt_group_id __itt_get_groups()
+{
+    __itt_group_id res = __itt_none_group;
+
+    const char* group_str = __itt_get_env_var("INTEL_ITTNOTIFY_GROUPS");
+    if(group_str)
+    {
+        char gr[255];
+        const char* chunk;
+        int len;
+        while((group_str = __itt_fsplit(group_str, ",; ", &chunk, &len)) != 0)
+        {
+            int j;
+            int group_detected = 0;
+            __itt_fstrcpyn(gr, chunk, len);
+            for(j = 0; group_list[j].name; j++)
+            {
+                if(!__itt_fstrcmp(gr, group_list[j].name))
+                {
+                    res = (__itt_group_id)(res | group_list[j].id);
+                    group_detected = 1;
+                    break;
+                }
+            }
+
+            if(!group_detected)
+                __itt_report_error(__itt_error_unknown_group, gr);
+        }
+        return res;
+    }
+    else
+    {
+        int i;
+        for(i = 0; group_alias[i].env_var; i++)
+            if(__itt_get_env_var(group_alias[i].env_var))
+                return group_alias[i].groups;
+    }
+
+    return res;
+}
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#pragma warning(push)
+#pragma warning(disable: 4054)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+static int __itt_init_lib()
+{
+    static volatile int init = 0;
+    static int result = 0;
+
+#ifndef ITT_SIMPLE_INIT
+
+#if ITT_PLATFORM==ITT_PLATFORM_POSIX
+    static mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+#else
+    static volatile int mutex_initialized = 0;
+    static mutex_t mutex;
+    static LONG inter_counter = 0;
+#endif
+
+    if(!init)
+    {
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+        if(!mutex_initialized)
+        {
+            if(InterlockedIncrement(&inter_counter) == 1)
+            {
+                __itt_init_mutex(&mutex);
+                mutex_initialized = 1;
+            }
+            else
+                while(!mutex_initialized)
+                    SwitchToThread();
+        }
+#endif
+
+        __itt_mutex_lock(&mutex);
+#endif /* ITT_SIMPLE_INIT */
+        if(!init)
+        {
+            int i;
+
+            __itt_group_id groups = __itt_get_groups();
+
+            for(i = 0; func_map[i].name; i++)
+                *func_map[i].func_ptr = 0;
+
+            if(groups != __itt_none_group)
+            {
+#ifdef ITT_COMPLETE_GROUP
+                __itt_group_id zero_group = __itt_none_group;
+#endif /* ITT_COMPLETE_GROUP */
+
+                ittnotify_lib = __itt_load_lib(__itt_get_lib_name());
+                if(ittnotify_lib)
+                {
+                    for(i = 0; func_map[i].name; i++)
+                    {
+                        if(func_map[i].name && func_map[i].func_ptr && (func_map[i].group & groups))
+                        {
+                            *func_map[i].func_ptr = (void*)__itt_get_proc(ittnotify_lib, func_map[i].name);
+                            if(!(*func_map[i].func_ptr) && func_map[i].name)
+                            {
+                                __itt_report_error(__itt_error_no_symbol, func_map[i].name);
+#ifdef ITT_COMPLETE_GROUP
+                                zero_group = (__itt_group_id)(zero_group | func_map[i].group);
+#endif /* ITT_COMPLETE_GROUP */
+                            }
+                            else
+                                result = 1;
+                        }
+                    }
+                }
+                else
+                {
+                    __itt_report_error(__itt_error_no_module, __itt_get_lib_name());
+                }
+
+#ifdef ITT_COMPLETE_GROUP
+                for(i = 0; func_map[i].name; i++)
+                    if(func_map[i].group & zero_group)
+                        *func_map[i].func_ptr = 0;
+
+                result = 0;
+
+                for(i = 0; func_map[i].name; i++) /* evaluating if any function ptr is non empty */
+                    if(*func_map[i].func_ptr)
+                    {
+                        result = 1;
+                        break;
+                    }
+#endif /* ITT_COMPLETE_GROUP */
+            }
+
+            init = 1; /* first checking of 'init' flag happened out of mutex, that is why setting flag to 1 */
+                      /* must be after call table is filled (to avoid condition races) */
+        }
+#ifndef ITT_SIMPLE_INIT
+        __itt_mutex_unlock(&mutex);
+    }
+#endif /* ITT_SIMPLE_INIT */
+    return result;
+}
+
+#define SET_ERROR_HANDLER ITT_JOIN(INTEL_ITTNOTIFY_PREFIX, set_error_handler)
+
+ITT_EXTERN_C __itt_error_notification_t* SET_ERROR_HANDLER(__itt_error_notification_t* handler)
+{
+    __itt_error_notification_t* prev = error_handler;
+    error_handler = handler;
+    return prev;
+}
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#pragma warning(pop)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/win32-tbb-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/win32-tbb-export.def
new file mode 100644 (file)
index 0000000..ff7ac01
--- /dev/null
@@ -0,0 +1,257 @@
+; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction.  Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License.  This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+#include "tbb/tbb_config.h"
+
+EXPORTS
+
+; Assembly-language support that is called directly by clients
+;__TBB_machine_cmpswp1
+;__TBB_machine_cmpswp2
+;__TBB_machine_cmpswp4
+__TBB_machine_cmpswp8
+;__TBB_machine_fetchadd1
+;__TBB_machine_fetchadd2
+;__TBB_machine_fetchadd4
+__TBB_machine_fetchadd8
+;__TBB_machine_fetchstore1
+;__TBB_machine_fetchstore2
+;__TBB_machine_fetchstore4
+__TBB_machine_fetchstore8
+__TBB_machine_store8
+__TBB_machine_load8
+__TBB_machine_trylockbyte
+
+; cache_aligned_allocator.cpp
+?NFS_Allocate@internal@tbb@@YAPAXIIPAX@Z
+?NFS_GetLineSize@internal@tbb@@YAIXZ
+?NFS_Free@internal@tbb@@YAXPAX@Z
+?allocate_via_handler_v3@internal@tbb@@YAPAXI@Z
+?deallocate_via_handler_v3@internal@tbb@@YAXPAX@Z
+?is_malloc_used_v3@internal@tbb@@YA_NXZ
+
+; task.cpp v3
+?allocate@allocate_additional_child_of_proxy@internal@tbb@@QBEAAVtask@3@I@Z
+?allocate@allocate_child_proxy@internal@tbb@@QBEAAVtask@3@I@Z
+?allocate@allocate_continuation_proxy@internal@tbb@@QBEAAVtask@3@I@Z
+?allocate@allocate_root_proxy@internal@tbb@@SAAAVtask@3@I@Z
+?destroy@task@tbb@@QAEXAAV12@@Z
+?free@allocate_additional_child_of_proxy@internal@tbb@@QBEXAAVtask@3@@Z
+?free@allocate_child_proxy@internal@tbb@@QBEXAAVtask@3@@Z
+?free@allocate_continuation_proxy@internal@tbb@@QBEXAAVtask@3@@Z
+?free@allocate_root_proxy@internal@tbb@@SAXAAVtask@3@@Z
+?internal_set_ref_count@task@tbb@@AAEXH@Z
+?internal_decrement_ref_count@task@tbb@@AAEHXZ
+?is_owned_by_current_thread@task@tbb@@QBE_NXZ
+?note_affinity@task@tbb@@UAEXG@Z
+?resize@affinity_partitioner_base_v3@internal@tbb@@AAEXI@Z
+?self@task@tbb@@SAAAV12@XZ
+?spawn_and_wait_for_all@task@tbb@@QAEXAAVtask_list@2@@Z
+?default_num_threads@task_scheduler_init@tbb@@SAHXZ
+?initialize@task_scheduler_init@tbb@@QAEXHI@Z
+?initialize@task_scheduler_init@tbb@@QAEXH@Z
+?terminate@task_scheduler_init@tbb@@QAEXXZ
+?observe@task_scheduler_observer_v3@internal@tbb@@QAEX_N@Z
+
+; exception handling support
+#if __TBB_EXCEPTIONS
+?allocate@allocate_root_with_context_proxy@internal@tbb@@QBEAAVtask@3@I@Z
+?free@allocate_root_with_context_proxy@internal@tbb@@QBEXAAVtask@3@@Z
+?is_group_execution_cancelled@task_group_context@tbb@@QBE_NXZ
+?cancel_group_execution@task_group_context@tbb@@QAE_NXZ
+?reset@task_group_context@tbb@@QAEXXZ
+?init@task_group_context@tbb@@IAEXXZ
+?register_pending_exception@task_group_context@tbb@@QAEXXZ
+??1task_group_context@tbb@@QAE@XZ
+?name@captured_exception@tbb@@UBEPBDXZ
+?what@captured_exception@tbb@@UBEPBDXZ
+??1captured_exception@tbb@@UAE@XZ
+#endif /* __TBB_EXCEPTIONS */
+
+; tbb_misc.cpp
+?assertion_failure@tbb@@YAXPBDH00@Z
+?get_initial_auto_partitioner_divisor@internal@tbb@@YAIXZ
+?handle_perror@internal@tbb@@YAXHPBD@Z
+?set_assertion_handler@tbb@@YAP6AXPBDH00@ZP6AX0H00@Z@Z
+?runtime_warning@internal@tbb@@YAXPBDZZ
+TBB_runtime_interface_version
+?throw_bad_last_alloc_exception_v4@internal@tbb@@YAXXZ
+
+; itt_notify.cpp
+?itt_load_pointer_with_acquire_v3@internal@tbb@@YAPAXPBX@Z
+?itt_store_pointer_with_release_v3@internal@tbb@@YAXPAX0@Z
+?itt_set_sync_name_v3@internal@tbb@@YAXPAXPB_W@Z
+?itt_load_pointer_v3@internal@tbb@@YAPAXPBX@Z
+
+; pipeline.cpp
+??0pipeline@tbb@@QAE@XZ
+??1filter@tbb@@UAE@XZ
+??1pipeline@tbb@@UAE@XZ
+??_7pipeline@tbb@@6B@
+?add_filter@pipeline@tbb@@QAEXAAVfilter@2@@Z
+?clear@pipeline@tbb@@QAEXXZ
+?inject_token@pipeline@tbb@@AAEXAAVtask@2@@Z
+?run@pipeline@tbb@@QAEXI@Z
+#if __TBB_EXCEPTIONS
+?run@pipeline@tbb@@QAEXIAAVtask_group_context@2@@Z
+#endif
+?process_item@thread_bound_filter@tbb@@QAE?AW4result_type@12@XZ
+?try_process_item@thread_bound_filter@tbb@@QAE?AW4result_type@12@XZ
+
+; queuing_rw_mutex.cpp
+?internal_construct@queuing_rw_mutex@tbb@@QAEXXZ
+?acquire@scoped_lock@queuing_rw_mutex@tbb@@QAEXAAV23@_N@Z
+?downgrade_to_reader@scoped_lock@queuing_rw_mutex@tbb@@QAE_NXZ
+?release@scoped_lock@queuing_rw_mutex@tbb@@QAEXXZ
+?upgrade_to_writer@scoped_lock@queuing_rw_mutex@tbb@@QAE_NXZ
+?try_acquire@scoped_lock@queuing_rw_mutex@tbb@@QAE_NAAV23@_N@Z
+
+#if !TBB_NO_LEGACY
+; spin_rw_mutex.cpp v2
+?internal_acquire_reader@spin_rw_mutex@tbb@@CAXPAV12@@Z
+?internal_acquire_writer@spin_rw_mutex@tbb@@CA_NPAV12@@Z
+?internal_downgrade@spin_rw_mutex@tbb@@CAXPAV12@@Z
+?internal_itt_releasing@spin_rw_mutex@tbb@@CAXPAV12@@Z
+?internal_release_reader@spin_rw_mutex@tbb@@CAXPAV12@@Z
+?internal_release_writer@spin_rw_mutex@tbb@@CAXPAV12@@Z
+?internal_upgrade@spin_rw_mutex@tbb@@CA_NPAV12@@Z
+?internal_try_acquire_writer@spin_rw_mutex@tbb@@CA_NPAV12@@Z
+?internal_try_acquire_reader@spin_rw_mutex@tbb@@CA_NPAV12@@Z
+#endif
+
+; spin_rw_mutex v3
+?internal_construct@spin_rw_mutex_v3@tbb@@AAEXXZ
+?internal_upgrade@spin_rw_mutex_v3@tbb@@AAE_NXZ
+?internal_downgrade@spin_rw_mutex_v3@tbb@@AAEXXZ
+?internal_acquire_reader@spin_rw_mutex_v3@tbb@@AAEXXZ
+?internal_acquire_writer@spin_rw_mutex_v3@tbb@@AAE_NXZ
+?internal_release_reader@spin_rw_mutex_v3@tbb@@AAEXXZ
+?internal_release_writer@spin_rw_mutex_v3@tbb@@AAEXXZ
+?internal_try_acquire_reader@spin_rw_mutex_v3@tbb@@AAE_NXZ
+?internal_try_acquire_writer@spin_rw_mutex_v3@tbb@@AAE_NXZ
+
+; spin_mutex.cpp
+?internal_construct@spin_mutex@tbb@@QAEXXZ
+?internal_acquire@scoped_lock@spin_mutex@tbb@@AAEXAAV23@@Z
+?internal_release@scoped_lock@spin_mutex@tbb@@AAEXXZ
+?internal_try_acquire@scoped_lock@spin_mutex@tbb@@AAE_NAAV23@@Z
+
+; mutex.cpp
+?internal_acquire@scoped_lock@mutex@tbb@@AAEXAAV23@@Z
+?internal_release@scoped_lock@mutex@tbb@@AAEXXZ
+?internal_try_acquire@scoped_lock@mutex@tbb@@AAE_NAAV23@@Z
+?internal_construct@mutex@tbb@@AAEXXZ
+?internal_destroy@mutex@tbb@@AAEXXZ
+
+; recursive_mutex.cpp
+?internal_acquire@scoped_lock@recursive_mutex@tbb@@AAEXAAV23@@Z
+?internal_release@scoped_lock@recursive_mutex@tbb@@AAEXXZ
+?internal_try_acquire@scoped_lock@recursive_mutex@tbb@@AAE_NAAV23@@Z
+?internal_construct@recursive_mutex@tbb@@AAEXXZ
+?internal_destroy@recursive_mutex@tbb@@AAEXXZ
+
+; queuing_mutex.cpp
+?internal_construct@queuing_mutex@tbb@@QAEXXZ
+?acquire@scoped_lock@queuing_mutex@tbb@@QAEXAAV23@@Z
+?release@scoped_lock@queuing_mutex@tbb@@QAEXXZ
+?try_acquire@scoped_lock@queuing_mutex@tbb@@QAE_NAAV23@@Z
+
+#if !TBB_NO_LEGACY
+; concurrent_hash_map.cpp
+?internal_grow_predicate@hash_map_segment_base@internal@tbb@@QBE_NXZ
+
+; concurrent_queue.cpp v2
+?advance@concurrent_queue_iterator_base@internal@tbb@@IAEXXZ
+?assign@concurrent_queue_iterator_base@internal@tbb@@IAEXABV123@@Z
+?internal_size@concurrent_queue_base@internal@tbb@@IBEHXZ
+??0concurrent_queue_base@internal@tbb@@IAE@I@Z
+??0concurrent_queue_iterator_base@internal@tbb@@IAE@ABVconcurrent_queue_base@12@@Z
+??1concurrent_queue_base@internal@tbb@@MAE@XZ
+??1concurrent_queue_iterator_base@internal@tbb@@IAE@XZ
+?internal_pop@concurrent_queue_base@internal@tbb@@IAEXPAX@Z
+?internal_pop_if_present@concurrent_queue_base@internal@tbb@@IAE_NPAX@Z
+?internal_push@concurrent_queue_base@internal@tbb@@IAEXPBX@Z
+?internal_push_if_not_full@concurrent_queue_base@internal@tbb@@IAE_NPBX@Z
+?internal_set_capacity@concurrent_queue_base@internal@tbb@@IAEXHI@Z
+#endif
+
+; concurrent_queue v3
+??1concurrent_queue_iterator_base_v3@internal@tbb@@IAE@XZ
+??0concurrent_queue_iterator_base_v3@internal@tbb@@IAE@ABVconcurrent_queue_base_v3@12@@Z
+?advance@concurrent_queue_iterator_base_v3@internal@tbb@@IAEXXZ
+?assign@concurrent_queue_iterator_base_v3@internal@tbb@@IAEXABV123@@Z
+??0concurrent_queue_base_v3@internal@tbb@@IAE@I@Z
+??1concurrent_queue_base_v3@internal@tbb@@MAE@XZ
+?internal_pop@concurrent_queue_base_v3@internal@tbb@@IAEXPAX@Z
+?internal_pop_if_present@concurrent_queue_base_v3@internal@tbb@@IAE_NPAX@Z
+?internal_push@concurrent_queue_base_v3@internal@tbb@@IAEXPBX@Z
+?internal_push_if_not_full@concurrent_queue_base_v3@internal@tbb@@IAE_NPBX@Z
+?internal_size@concurrent_queue_base_v3@internal@tbb@@IBEHXZ
+?internal_empty@concurrent_queue_base_v3@internal@tbb@@IBE_NXZ
+?internal_set_capacity@concurrent_queue_base_v3@internal@tbb@@IAEXHI@Z
+?internal_finish_clear@concurrent_queue_base_v3@internal@tbb@@IAEXXZ
+?internal_throw_exception@concurrent_queue_base_v3@internal@tbb@@IBEXXZ
+?assign@concurrent_queue_base_v3@internal@tbb@@IAEXABV123@@Z
+
+#if !TBB_NO_LEGACY
+; concurrent_vector.cpp v2
+?internal_assign@concurrent_vector_base@internal@tbb@@IAEXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z
+?internal_capacity@concurrent_vector_base@internal@tbb@@IBEIXZ
+?internal_clear@concurrent_vector_base@internal@tbb@@IAEXP6AXPAXI@Z_N@Z
+?internal_copy@concurrent_vector_base@internal@tbb@@IAEXABV123@IP6AXPAXPBXI@Z@Z
+?internal_grow_by@concurrent_vector_base@internal@tbb@@IAEIIIP6AXPAXI@Z@Z
+?internal_grow_to_at_least@concurrent_vector_base@internal@tbb@@IAEXIIP6AXPAXI@Z@Z
+?internal_push_back@concurrent_vector_base@internal@tbb@@IAEPAXIAAI@Z
+?internal_reserve@concurrent_vector_base@internal@tbb@@IAEXIII@Z
+#endif
+
+; concurrent_vector v3
+??1concurrent_vector_base_v3@internal@tbb@@IAE@XZ
+?internal_assign@concurrent_vector_base_v3@internal@tbb@@IAEXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z
+?internal_capacity@concurrent_vector_base_v3@internal@tbb@@IBEIXZ
+?internal_clear@concurrent_vector_base_v3@internal@tbb@@IAEIP6AXPAXI@Z@Z
+?internal_copy@concurrent_vector_base_v3@internal@tbb@@IAEXABV123@IP6AXPAXPBXI@Z@Z
+?internal_grow_by@concurrent_vector_base_v3@internal@tbb@@IAEIIIP6AXPAXPBXI@Z1@Z
+?internal_grow_to_at_least@concurrent_vector_base_v3@internal@tbb@@IAEXIIP6AXPAXPBXI@Z1@Z
+?internal_push_back@concurrent_vector_base_v3@internal@tbb@@IAEPAXIAAI@Z
+?internal_reserve@concurrent_vector_base_v3@internal@tbb@@IAEXIII@Z
+?internal_compact@concurrent_vector_base_v3@internal@tbb@@IAEPAXIPAXP6AX0I@ZP6AX0PBXI@Z@Z
+?internal_swap@concurrent_vector_base_v3@internal@tbb@@IAEXAAV123@@Z
+?internal_throw_exception@concurrent_vector_base_v3@internal@tbb@@IBEXI@Z
+?internal_resize@concurrent_vector_base_v3@internal@tbb@@IAEXIIIPBXP6AXPAXI@ZP6AX10I@Z@Z
+?internal_grow_to_at_least_with_result@concurrent_vector_base_v3@internal@tbb@@IAEIIIP6AXPAXPBXI@Z1@Z
+
+; tbb_thread
+?join@tbb_thread_v3@internal@tbb@@QAEXXZ
+?detach@tbb_thread_v3@internal@tbb@@QAEXXZ
+?internal_start@tbb_thread_v3@internal@tbb@@AAEXP6GIPAX@Z0@Z
+?allocate_closure_v3@internal@tbb@@YAPAXI@Z
+?free_closure_v3@internal@tbb@@YAXPAX@Z
+?hardware_concurrency@tbb_thread_v3@internal@tbb@@SAIXZ
+?thread_yield_v3@internal@tbb@@YAXXZ
+?thread_sleep_v3@internal@tbb@@YAXABVinterval_t@tick_count@2@@Z
+?move_v3@internal@tbb@@YAXAAVtbb_thread_v3@12@0@Z
+?thread_get_id_v3@internal@tbb@@YA?AVid@tbb_thread_v3@12@XZ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/win64-tbb-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbb/win64-tbb-export.def
new file mode 100644 (file)
index 0000000..5c18884
--- /dev/null
@@ -0,0 +1,253 @@
+; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction.  Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License.  This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+; This file is organized with a section for each .cpp file.
+; Each of these sections is in alphabetical order.
+
+#include "tbb/tbb_config.h"
+
+EXPORTS
+
+; Assembly-language support that is called directly by clients
+__TBB_machine_cmpswp1
+__TBB_machine_fetchadd1
+__TBB_machine_fetchstore1
+__TBB_machine_cmpswp2
+__TBB_machine_fetchadd2
+__TBB_machine_fetchstore2
+__TBB_machine_pause
+
+; cache_aligned_allocator.cpp
+?NFS_Allocate@internal@tbb@@YAPEAX_K0PEAX@Z
+?NFS_GetLineSize@internal@tbb@@YA_KXZ
+?NFS_Free@internal@tbb@@YAXPEAX@Z
+?allocate_via_handler_v3@internal@tbb@@YAPEAX_K@Z
+?deallocate_via_handler_v3@internal@tbb@@YAXPEAX@Z
+?is_malloc_used_v3@internal@tbb@@YA_NXZ
+
+
+; task.cpp v3
+?resize@affinity_partitioner_base_v3@internal@tbb@@AEAAXI@Z
+?allocate@allocate_additional_child_of_proxy@internal@tbb@@QEBAAEAVtask@3@_K@Z
+?allocate@allocate_child_proxy@internal@tbb@@QEBAAEAVtask@3@_K@Z
+?allocate@allocate_continuation_proxy@internal@tbb@@QEBAAEAVtask@3@_K@Z
+?allocate@allocate_root_proxy@internal@tbb@@SAAEAVtask@3@_K@Z
+?destroy@task@tbb@@QEAAXAEAV12@@Z
+?free@allocate_additional_child_of_proxy@internal@tbb@@QEBAXAEAVtask@3@@Z
+?free@allocate_child_proxy@internal@tbb@@QEBAXAEAVtask@3@@Z
+?free@allocate_continuation_proxy@internal@tbb@@QEBAXAEAVtask@3@@Z
+?free@allocate_root_proxy@internal@tbb@@SAXAEAVtask@3@@Z
+?internal_set_ref_count@task@tbb@@AEAAXH@Z
+?internal_decrement_ref_count@task@tbb@@AEAA_JXZ
+?is_owned_by_current_thread@task@tbb@@QEBA_NXZ
+?note_affinity@task@tbb@@UEAAXG@Z
+?self@task@tbb@@SAAEAV12@XZ
+?spawn_and_wait_for_all@task@tbb@@QEAAXAEAVtask_list@2@@Z
+?default_num_threads@task_scheduler_init@tbb@@SAHXZ
+?initialize@task_scheduler_init@tbb@@QEAAXH_K@Z
+?initialize@task_scheduler_init@tbb@@QEAAXH@Z
+?terminate@task_scheduler_init@tbb@@QEAAXXZ
+?observe@task_scheduler_observer_v3@internal@tbb@@QEAAX_N@Z
+
+; exception handling support
+#if __TBB_EXCEPTIONS
+?allocate@allocate_root_with_context_proxy@internal@tbb@@QEBAAEAVtask@3@_K@Z
+?free@allocate_root_with_context_proxy@internal@tbb@@QEBAXAEAVtask@3@@Z
+?is_group_execution_cancelled@task_group_context@tbb@@QEBA_NXZ
+?cancel_group_execution@task_group_context@tbb@@QEAA_NXZ
+?reset@task_group_context@tbb@@QEAAXXZ
+?init@task_group_context@tbb@@IEAAXXZ
+?register_pending_exception@task_group_context@tbb@@QEAAXXZ
+??1task_group_context@tbb@@QEAA@XZ
+?name@captured_exception@tbb@@UEBAPEBDXZ
+?what@captured_exception@tbb@@UEBAPEBDXZ
+??1captured_exception@tbb@@UEAA@XZ
+#endif /* __TBB_EXCEPTIONS */
+
+; tbb_misc.cpp
+?assertion_failure@tbb@@YAXPEBDH00@Z
+?get_initial_auto_partitioner_divisor@internal@tbb@@YA_KXZ
+?handle_perror@internal@tbb@@YAXHPEBD@Z
+?set_assertion_handler@tbb@@YAP6AXPEBDH00@ZP6AX0H00@Z@Z
+?runtime_warning@internal@tbb@@YAXPEBDZZ
+TBB_runtime_interface_version
+?throw_bad_last_alloc_exception_v4@internal@tbb@@YAXXZ
+
+; itt_notify.cpp
+?itt_load_pointer_with_acquire_v3@internal@tbb@@YAPEAXPEBX@Z
+?itt_store_pointer_with_release_v3@internal@tbb@@YAXPEAX0@Z
+?itt_load_pointer_v3@internal@tbb@@YAPEAXPEBX@Z
+?itt_set_sync_name_v3@internal@tbb@@YAXPEAXPEB_W@Z
+
+; pipeline.cpp
+??_7pipeline@tbb@@6B@
+??0pipeline@tbb@@QEAA@XZ
+??1filter@tbb@@UEAA@XZ
+??1pipeline@tbb@@UEAA@XZ
+?add_filter@pipeline@tbb@@QEAAXAEAVfilter@2@@Z
+?clear@pipeline@tbb@@QEAAXXZ
+?inject_token@pipeline@tbb@@AEAAXAEAVtask@2@@Z
+?run@pipeline@tbb@@QEAAX_K@Z
+#if __TBB_EXCEPTIONS
+?run@pipeline@tbb@@QEAAX_KAEAVtask_group_context@2@@Z
+#endif
+?process_item@thread_bound_filter@tbb@@QEAA?AW4result_type@12@XZ
+?try_process_item@thread_bound_filter@tbb@@QEAA?AW4result_type@12@XZ
+
+; queuing_rw_mutex.cpp
+?internal_construct@queuing_rw_mutex@tbb@@QEAAXXZ
+?acquire@scoped_lock@queuing_rw_mutex@tbb@@QEAAXAEAV23@_N@Z
+?downgrade_to_reader@scoped_lock@queuing_rw_mutex@tbb@@QEAA_NXZ
+?release@scoped_lock@queuing_rw_mutex@tbb@@QEAAXXZ
+?upgrade_to_writer@scoped_lock@queuing_rw_mutex@tbb@@QEAA_NXZ
+?try_acquire@scoped_lock@queuing_rw_mutex@tbb@@QEAA_NAEAV23@_N@Z
+
+#if !TBB_NO_LEGACY
+; spin_rw_mutex.cpp v2
+?internal_itt_releasing@spin_rw_mutex@tbb@@CAXPEAV12@@Z
+?internal_acquire_writer@spin_rw_mutex@tbb@@CA_NPEAV12@@Z
+?internal_acquire_reader@spin_rw_mutex@tbb@@CAXPEAV12@@Z
+?internal_downgrade@spin_rw_mutex@tbb@@CAXPEAV12@@Z
+?internal_upgrade@spin_rw_mutex@tbb@@CA_NPEAV12@@Z
+?internal_release_reader@spin_rw_mutex@tbb@@CAXPEAV12@@Z
+?internal_release_writer@spin_rw_mutex@tbb@@CAXPEAV12@@Z
+?internal_try_acquire_writer@spin_rw_mutex@tbb@@CA_NPEAV12@@Z
+?internal_try_acquire_reader@spin_rw_mutex@tbb@@CA_NPEAV12@@Z
+#endif
+
+; spin_rw_mutex v3
+?internal_construct@spin_rw_mutex_v3@tbb@@AEAAXXZ
+?internal_upgrade@spin_rw_mutex_v3@tbb@@AEAA_NXZ
+?internal_downgrade@spin_rw_mutex_v3@tbb@@AEAAXXZ
+?internal_acquire_reader@spin_rw_mutex_v3@tbb@@AEAAXXZ
+?internal_acquire_writer@spin_rw_mutex_v3@tbb@@AEAA_NXZ
+?internal_release_reader@spin_rw_mutex_v3@tbb@@AEAAXXZ
+?internal_release_writer@spin_rw_mutex_v3@tbb@@AEAAXXZ
+?internal_try_acquire_reader@spin_rw_mutex_v3@tbb@@AEAA_NXZ
+?internal_try_acquire_writer@spin_rw_mutex_v3@tbb@@AEAA_NXZ
+
+; spin_mutex.cpp
+?internal_construct@spin_mutex@tbb@@QEAAXXZ
+?internal_acquire@scoped_lock@spin_mutex@tbb@@AEAAXAEAV23@@Z
+?internal_release@scoped_lock@spin_mutex@tbb@@AEAAXXZ
+?internal_try_acquire@scoped_lock@spin_mutex@tbb@@AEAA_NAEAV23@@Z
+
+; mutex.cpp
+?internal_acquire@scoped_lock@mutex@tbb@@AEAAXAEAV23@@Z
+?internal_release@scoped_lock@mutex@tbb@@AEAAXXZ
+?internal_try_acquire@scoped_lock@mutex@tbb@@AEAA_NAEAV23@@Z
+?internal_construct@mutex@tbb@@AEAAXXZ
+?internal_destroy@mutex@tbb@@AEAAXXZ
+
+; recursive_mutex.cpp
+?internal_construct@recursive_mutex@tbb@@AEAAXXZ
+?internal_destroy@recursive_mutex@tbb@@AEAAXXZ
+?internal_acquire@scoped_lock@recursive_mutex@tbb@@AEAAXAEAV23@@Z
+?internal_try_acquire@scoped_lock@recursive_mutex@tbb@@AEAA_NAEAV23@@Z
+?internal_release@scoped_lock@recursive_mutex@tbb@@AEAAXXZ
+
+; queuing_mutex.cpp
+?internal_construct@queuing_mutex@tbb@@QEAAXXZ
+?acquire@scoped_lock@queuing_mutex@tbb@@QEAAXAEAV23@@Z
+?release@scoped_lock@queuing_mutex@tbb@@QEAAXXZ
+?try_acquire@scoped_lock@queuing_mutex@tbb@@QEAA_NAEAV23@@Z
+
+#if !TBB_NO_LEGACY
+; concurrent_hash_map.cpp
+?internal_grow_predicate@hash_map_segment_base@internal@tbb@@QEBA_NXZ
+
+; concurrent_queue.cpp v2
+??0concurrent_queue_base@internal@tbb@@IEAA@_K@Z
+??0concurrent_queue_iterator_base@internal@tbb@@IEAA@AEBVconcurrent_queue_base@12@@Z
+??1concurrent_queue_base@internal@tbb@@MEAA@XZ
+??1concurrent_queue_iterator_base@internal@tbb@@IEAA@XZ
+?advance@concurrent_queue_iterator_base@internal@tbb@@IEAAXXZ
+?assign@concurrent_queue_iterator_base@internal@tbb@@IEAAXAEBV123@@Z
+?internal_pop@concurrent_queue_base@internal@tbb@@IEAAXPEAX@Z
+?internal_pop_if_present@concurrent_queue_base@internal@tbb@@IEAA_NPEAX@Z
+?internal_push@concurrent_queue_base@internal@tbb@@IEAAXPEBX@Z
+?internal_push_if_not_full@concurrent_queue_base@internal@tbb@@IEAA_NPEBX@Z
+?internal_set_capacity@concurrent_queue_base@internal@tbb@@IEAAX_J_K@Z
+?internal_size@concurrent_queue_base@internal@tbb@@IEBA_JXZ
+#endif
+
+; concurrent_queue v3
+??0concurrent_queue_iterator_base_v3@internal@tbb@@IEAA@AEBVconcurrent_queue_base_v3@12@@Z
+??1concurrent_queue_iterator_base_v3@internal@tbb@@IEAA@XZ
+?assign@concurrent_queue_iterator_base_v3@internal@tbb@@IEAAXAEBV123@@Z
+?advance@concurrent_queue_iterator_base_v3@internal@tbb@@IEAAXXZ
+??0concurrent_queue_base_v3@internal@tbb@@IEAA@_K@Z
+??1concurrent_queue_base_v3@internal@tbb@@MEAA@XZ
+?internal_push@concurrent_queue_base_v3@internal@tbb@@IEAAXPEBX@Z
+?internal_push_if_not_full@concurrent_queue_base_v3@internal@tbb@@IEAA_NPEBX@Z
+?internal_pop@concurrent_queue_base_v3@internal@tbb@@IEAAXPEAX@Z
+?internal_pop_if_present@concurrent_queue_base_v3@internal@tbb@@IEAA_NPEAX@Z
+?internal_size@concurrent_queue_base_v3@internal@tbb@@IEBA_JXZ
+?internal_empty@concurrent_queue_base_v3@internal@tbb@@IEBA_NXZ
+?internal_finish_clear@concurrent_queue_base_v3@internal@tbb@@IEAAXXZ
+?internal_set_capacity@concurrent_queue_base_v3@internal@tbb@@IEAAX_J_K@Z
+?internal_throw_exception@concurrent_queue_base_v3@internal@tbb@@IEBAXXZ
+?assign@concurrent_queue_base_v3@internal@tbb@@IEAAXAEBV123@@Z
+
+#if !TBB_NO_LEGACY
+; concurrent_vector.cpp v2
+?internal_assign@concurrent_vector_base@internal@tbb@@IEAAXAEBV123@_KP6AXPEAX1@ZP6AX2PEBX1@Z5@Z
+?internal_capacity@concurrent_vector_base@internal@tbb@@IEBA_KXZ
+?internal_clear@concurrent_vector_base@internal@tbb@@IEAAXP6AXPEAX_K@Z_N@Z
+?internal_copy@concurrent_vector_base@internal@tbb@@IEAAXAEBV123@_KP6AXPEAXPEBX1@Z@Z
+?internal_grow_by@concurrent_vector_base@internal@tbb@@IEAA_K_K0P6AXPEAX0@Z@Z
+?internal_grow_to_at_least@concurrent_vector_base@internal@tbb@@IEAAX_K0P6AXPEAX0@Z@Z
+?internal_push_back@concurrent_vector_base@internal@tbb@@IEAAPEAX_KAEA_K@Z
+?internal_reserve@concurrent_vector_base@internal@tbb@@IEAAX_K00@Z
+#endif
+
+; concurrent_vector v3
+??1concurrent_vector_base_v3@internal@tbb@@IEAA@XZ
+?internal_assign@concurrent_vector_base_v3@internal@tbb@@IEAAXAEBV123@_KP6AXPEAX1@ZP6AX2PEBX1@Z5@Z
+?internal_capacity@concurrent_vector_base_v3@internal@tbb@@IEBA_KXZ
+?internal_clear@concurrent_vector_base_v3@internal@tbb@@IEAA_KP6AXPEAX_K@Z@Z
+?internal_copy@concurrent_vector_base_v3@internal@tbb@@IEAAXAEBV123@_KP6AXPEAXPEBX1@Z@Z
+?internal_grow_by@concurrent_vector_base_v3@internal@tbb@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z
+?internal_grow_to_at_least@concurrent_vector_base_v3@internal@tbb@@IEAAX_K0P6AXPEAXPEBX0@Z2@Z
+?internal_push_back@concurrent_vector_base_v3@internal@tbb@@IEAAPEAX_KAEA_K@Z
+?internal_reserve@concurrent_vector_base_v3@internal@tbb@@IEAAX_K00@Z
+?internal_compact@concurrent_vector_base_v3@internal@tbb@@IEAAPEAX_KPEAXP6AX10@ZP6AX1PEBX0@Z@Z
+?internal_swap@concurrent_vector_base_v3@internal@tbb@@IEAAXAEAV123@@Z
+?internal_throw_exception@concurrent_vector_base_v3@internal@tbb@@IEBAX_K@Z
+?internal_resize@concurrent_vector_base_v3@internal@tbb@@IEAAX_K00PEBXP6AXPEAX0@ZP6AX210@Z@Z
+?internal_grow_to_at_least_with_result@concurrent_vector_base_v3@internal@tbb@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z
+
+; tbb_thread
+?allocate_closure_v3@internal@tbb@@YAPEAX_K@Z
+?detach@tbb_thread_v3@internal@tbb@@QEAAXXZ
+?free_closure_v3@internal@tbb@@YAXPEAX@Z
+?hardware_concurrency@tbb_thread_v3@internal@tbb@@SAIXZ
+?internal_start@tbb_thread_v3@internal@tbb@@AEAAXP6AIPEAX@Z0@Z
+?join@tbb_thread_v3@internal@tbb@@QEAAXXZ
+?move_v3@internal@tbb@@YAXAEAVtbb_thread_v3@12@0@Z
+?thread_get_id_v3@internal@tbb@@YA?AVid@tbb_thread_v3@12@XZ
+?thread_sleep_v3@internal@tbb@@YAXAEBVinterval_t@tick_count@2@@Z
+?thread_yield_v3@internal@tbb@@YAXXZ
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/Customize.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/Customize.h
new file mode 100644 (file)
index 0000000..0723018
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef _TBB_malloc_Customize_H_
+#define _TBB_malloc_Customize_H_
+
+/* Thread shutdown notification callback */
+/* redefine the name of the callback to meet TBB requirements
+   for externally visible names of service functions */
+#define mallocThreadShutdownNotification __TBB_mallocThreadShutdownNotification
+#define mallocProcessShutdownNotification __TBB_mallocProcessShutdownNotification
+
+extern "C" void mallocThreadShutdownNotification(void *);
+extern "C" void mallocProcessShutdownNotification(void);
+
+// customizing MALLOC_ASSERT macro
+#include "tbb/tbb_stddef.h"
+#define MALLOC_ASSERT(assertion, message) __TBB_ASSERT(assertion, message)
+
+#ifndef MALLOC_DEBUG
+#define MALLOC_DEBUG TBB_USE_DEBUG
+#endif
+
+#include "tbb/tbb_machine.h"
+
+#if DO_ITT_NOTIFY
+#include "tbb/itt_notify.h"
+#define MALLOC_ITT_SYNC_PREPARE(pointer) ITT_NOTIFY(sync_prepare, (pointer))
+#define MALLOC_ITT_SYNC_ACQUIRED(pointer) ITT_NOTIFY(sync_acquired, (pointer))
+#define MALLOC_ITT_SYNC_RELEASING(pointer) ITT_NOTIFY(sync_releasing, (pointer))
+#define MALLOC_ITT_SYNC_CANCEL(pointer) ITT_NOTIFY(sync_cancel, (pointer))
+#else
+#define MALLOC_ITT_SYNC_PREPARE(pointer) ((void)0)
+#define MALLOC_ITT_SYNC_ACQUIRED(pointer) ((void)0)
+#define MALLOC_ITT_SYNC_RELEASING(pointer) ((void)0)
+#define MALLOC_ITT_SYNC_CANCEL(pointer) ((void)0)
+#endif
+
+//! Stripped down version of spin_mutex.
+/** Instances of MallocMutex must be declared in memory that is zero-initialized.
+    There are no constructors.  This is a feature that lets it be
+    used in situations where the mutex might be used while file-scope constructors
+    are running.
+
+    There are no methods "acquire" or "release".  The scoped_lock must be used
+    in a strict block-scoped locking pattern.  Omitting these methods permitted
+    further simplication. */
+class MallocMutex {
+    unsigned char value;
+
+    //! Deny assignment
+    void operator=( MallocMutex& MallocMutex );
+public:
+    class scoped_lock {
+        const unsigned char value;
+        MallocMutex& mutex;
+    public:
+        scoped_lock( MallocMutex& m ) : value( __TBB_LockByte(m.value)), mutex(m) {}
+        ~scoped_lock() { __TBB_store_with_release(mutex.value, value); }
+    };
+    friend class scoped_lock;
+};
+
+inline intptr_t AtomicIncrement( volatile intptr_t& counter ) {
+    return __TBB_FetchAndAddW( &counter, 1 )+1;
+}
+
+inline uintptr_t AtomicIncrement( volatile uintptr_t& counter ) {
+    return __TBB_FetchAndAddW( &counter, 1 )+1;
+}
+
+inline uintptr_t AtomicAdd( volatile uintptr_t& counter, uintptr_t value ) {
+    return __TBB_FetchAndAddW( &counter, value );
+}
+
+inline intptr_t AtomicCompareExchange( volatile intptr_t& location, intptr_t new_value, intptr_t comparand) {
+    return __TBB_CompareAndSwapW( &location, new_value, comparand );
+}
+
+#define USE_DEFAULT_MEMORY_MAPPING 1
+
+namespace rml {
+namespace internal {
+    void init_tbbmalloc();
+} } // namespaces
+
+#define MALLOC_EXTRA_INITIALIZATION rml::internal::init_tbbmalloc()
+
+// To support malloc replacement with LD_PRELOAD
+#include "proxy.h"
+
+#if MALLOC_LD_PRELOAD
+extern "C" void * __TBB_malloc_proxy(size_t)  __attribute__ ((weak));
+#endif
+
+#endif /* _TBB_malloc_Customize_H_ */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/LifoQueue.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/LifoQueue.h
new file mode 100644 (file)
index 0000000..9a81dd9
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef _itt_common_malloc_LifoQueue_H_
+#define _itt_common_malloc_LifoQueue_H_
+
+#include "TypeDefinitions.h"
+#include <string.h> // for memset()
+
+//! Checking the synchronization method
+/** FINE_GRAIN_LOCKS is the only variant for now; should be defined for LifoQueue */
+#ifndef FINE_GRAIN_LOCKS
+#define FINE_GRAIN_LOCKS
+#endif
+
+namespace rml {
+
+namespace internal {
+
+class LifoQueue {
+public:
+    inline LifoQueue();
+    inline void push(void** ptr);
+    inline void* pop(void);
+
+private:
+    void * top;
+#ifdef FINE_GRAIN_LOCKS
+    MallocMutex lock;
+#endif /* FINE_GRAIN_LOCKS     */
+};
+
+#ifdef FINE_GRAIN_LOCKS
+/* LifoQueue assumes zero initialization so a vector of it can be created
+ * by just allocating some space with no call to constructor.
+ * On Linux, it seems to be necessary to avoid linking with C++ libraries.
+ *
+ * By usage convention there is no race on the initialization. */
+LifoQueue::LifoQueue( ) : top(NULL)
+{
+    // MallocMutex assumes zero initialization
+    memset(&lock, 0, sizeof(MallocMutex));
+}
+
+void LifoQueue::push( void **ptr )
+{   
+    MallocMutex::scoped_lock scoped_cs(lock);
+    *ptr = top;
+    top = ptr;
+}
+
+void * LifoQueue::pop( )
+{   
+    void **result=NULL;
+    {
+        MallocMutex::scoped_lock scoped_cs(lock);
+        if (!top) goto done;
+        result = (void **) top;
+        top = *result;
+    } 
+    *result = NULL;
+done:
+    return result;
+}
+
+#endif /* FINE_GRAIN_LOCKS     */
+
+} // namespace internal
+} // namespace rml
+
+#endif /* _itt_common_malloc_LifoQueue_H_ */
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/MapMemory.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/MapMemory.h
new file mode 100644 (file)
index 0000000..77daff0
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef _itt_shared_malloc_MapMemory_H
+#define _itt_shared_malloc_MapMemory_H
+
+#if __linux__ || __APPLE__
+#include <sys/mman.h>
+
+#define MEMORY_MAPPING_USES_MALLOC 0
+void* MapMemory (size_t bytes)
+{
+    void* result = 0;
+#ifndef MAP_ANONYMOUS
+// Mac OS* X defines MAP_ANON, which is deprecated in Linux.
+#define MAP_ANONYMOUS MAP_ANON
+#endif /* MAP_ANONYMOUS */
+    result = mmap(result, bytes, (PROT_READ | PROT_WRITE), MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+    return result==MAP_FAILED? 0: result;
+}
+
+int UnmapMemory(void *area, size_t bytes)
+{
+    return munmap(area, bytes);
+}
+
+#elif _WIN32 || _WIN64
+#include <windows.h>
+
+#define MEMORY_MAPPING_USES_MALLOC 0
+void* MapMemory (size_t bytes)
+{
+    /* Is VirtualAlloc thread safe? */
+    return VirtualAlloc(NULL, bytes, (MEM_RESERVE | MEM_COMMIT | MEM_TOP_DOWN), PAGE_READWRITE);
+}
+
+int UnmapMemory(void *area, size_t bytes)
+{
+    BOOL result = VirtualFree(area, 0, MEM_RELEASE);
+    return !result;
+}
+
+#else
+#include <stdlib.h>
+
+void* MapMemory (size_t bytes)
+{
+    return malloc( bytes );
+}
+
+int UnmapMemory(void *area, size_t bytes)
+{
+    free( area );
+    return 0;
+}
+
+#endif /* OS dependent */
+
+#endif /* _itt_shared_malloc_MapMemory_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/MemoryAllocator.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/MemoryAllocator.cpp
new file mode 100644 (file)
index 0000000..3186219
--- /dev/null
@@ -0,0 +1,2089 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+
+#include "TypeDefinitions.h" /* Also includes customization layer Customize.h */
+
+#if USE_PTHREAD
+    // Some pthreads documentation says that <pthreads.h> must be first header.
+    #include <pthread.h>
+    #define TlsSetValue_func pthread_setspecific
+    #define TlsGetValue_func pthread_getspecific
+    typedef pthread_key_t tls_key_t;
+    #include <sched.h>
+    inline void do_yield() {sched_yield();}
+
+#elif USE_WINTHREAD
+    #define _WIN32_WINNT 0x0400
+    #include <windows.h>
+    #define TlsSetValue_func TlsSetValue
+    #define TlsGetValue_func TlsGetValue
+    typedef DWORD tls_key_t;
+    inline void do_yield() {SwitchToThread();}
+
+#else
+    #error Must define USE_PTHREAD or USE_WINTHREAD
+
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#if MALLOC_LD_PRELOAD 
+#include <new>        /* for placement new */
+#endif
+
+extern "C" {
+    void * scalable_malloc(size_t size);
+    void   scalable_free(void *object);
+}
+
+/********* Various compile-time options        **************/
+
+#define MALLOC_TRACE 0
+
+#if MALLOC_TRACE
+#define TRACEF(x) printf x
+#else
+#define TRACEF(x) ((void)0)
+#endif /* MALLOC_TRACE */
+
+#define ASSERT_TEXT NULL
+
+//! Define the main synchronization method
+/** It should be specified before including LifoQueue.h */
+#define FINE_GRAIN_LOCKS
+#include "LifoQueue.h"
+
+#define COLLECT_STATISTICS MALLOC_DEBUG && defined(MALLOCENV_COLLECT_STATISTICS)
+#include "Statistics.h"
+
+#define FREELIST_NONBLOCKING 1
+
+// If USE_MALLOC_FOR_LARGE_OBJECT is nonzero, then large allocations are done via malloc.
+// Otherwise large allocations are done using the scalable allocator's block allocator.
+// As of 06.Jun.17, using malloc is about 10x faster on Linux.
+#if !_WIN32
+#define USE_MALLOC_FOR_LARGE_OBJECT 1
+#endif
+
+/********* End compile-time options        **************/
+
+namespace rml {
+
+namespace internal {
+
+/******* A helper class to support overriding malloc with scalable_malloc *******/
+#if MALLOC_LD_PRELOAD 
+class recursive_malloc_call_protector {
+    static MallocMutex rmc_mutex;
+
+    MallocMutex::scoped_lock* lock_acquired;
+    char scoped_lock_space[sizeof(MallocMutex::scoped_lock)+1];
+public:
+    recursive_malloc_call_protector(bool condition) : lock_acquired(NULL) {
+        if (condition) {
+            lock_acquired = new (scoped_lock_space) MallocMutex::scoped_lock( rmc_mutex );
+            rml::internal::lockRecursiveMallocFlag();
+        }
+    }
+    ~recursive_malloc_call_protector() {
+        if (lock_acquired) {
+            rml::internal::unlockRecursiveMallocFlag();
+            lock_acquired->~scoped_lock();
+        }
+    }
+};
+
+MallocMutex recursive_malloc_call_protector::rmc_mutex;
+
+#define malloc_proxy __TBB_malloc_proxy
+
+#else /* MALLOC_LD_PRELOAD */
+class recursive_malloc_call_protector {
+public:
+    recursive_malloc_call_protector(bool) {}
+    ~recursive_malloc_call_protector() {}
+};
+const bool malloc_proxy = false;
+#endif /* MALLOC_LD_PRELOAD */
+
+/*********** Code to provide thread ID and a thread-local void pointer **********/
+
+typedef intptr_t ThreadId;
+
+static ThreadId ThreadIdCount;
+
+static tls_key_t TLS_pointer_key;
+static tls_key_t Tid_key;
+
+static inline ThreadId  getThreadId(void)
+{
+    ThreadId result;
+    result = reinterpret_cast<ThreadId>(TlsGetValue_func(Tid_key));
+    if( !result ) {
+        recursive_malloc_call_protector scoped(/*condition=*/malloc_proxy);
+        // Thread-local value is zero -> first call from this thread,
+        // need to initialize with next ID value (IDs start from 1)
+        result = AtomicIncrement(ThreadIdCount); // returned new value!
+        TlsSetValue_func( Tid_key, reinterpret_cast<void*>(result) );
+    }
+    return result;
+}
+
+static inline void* getThreadMallocTLS() {
+    void *result;
+    result = TlsGetValue_func( TLS_pointer_key );
+// The assert below is incorrect: with lazy initialization, it fails on the first call of the function.
+//    MALLOC_ASSERT( result, "Memory allocator not initialized" );
+    return result;
+}
+
+static inline void  setThreadMallocTLS( void * newvalue ) {
+    recursive_malloc_call_protector scoped(/*condition=*/malloc_proxy);
+    TlsSetValue_func( TLS_pointer_key, newvalue );
+}
+
+/*********** End code to provide thread ID and a TLS pointer **********/
+
+/*
+ * The identifier to make sure that memory is allocated by scalable_malloc.
+ */
+const uint64_t theMallocUniqueID=0xE3C7AF89A1E2D8C1ULL; 
+
+/*
+ * This number of bins in the TLS that leads to blocks that we can allocate in.
+ */
+const uint32_t numBlockBinLimit = 32;
+
+ /*
+  * The number of bins to cache large objects.
+  */
+const uint32_t numLargeObjectBins = 1024; // for 1024 max cached size is near 8MB
+/********* The data structures and global objects        **************/
+
+struct FreeObject {
+    FreeObject  *next;
+};
+
+/*
+ * The following constant is used to define the size of struct Block, the block header.
+ * The intent is to have the size of a Block multiple of the cache line size, this allows us to
+ * get good alignment at the cost of some overhead equal to the amount of padding included in the Block.
+ */
+
+const int blockHeaderAlignment = 64; // a common size of a cache line
+
+struct Block;
+
+/* The 'next' field in the block header has to maintain some invariants:
+ *   it needs to be on a 16K boundary and the first field in the block.
+ *   Any value stored there needs to have the lower 14 bits set to 0
+ *   so that various assert work. This means that if you want to smash this memory
+ *   for debugging purposes you will need to obey this invariant.
+ * The total size of the header needs to be a power of 2 to simplify
+ * the alignment requirements. For now it is a 128 byte structure.
+ * To avoid false sharing, the fields changed only locally are separated 
+ * from the fields changed by foreign threads.
+ * Changing the size of the block header would require to change
+ * some bin allocation sizes, in particular "fitting" sizes (see above).
+ */
+
+struct LocalBlockFields {
+    Block       *next;            /* This field needs to be on a 16K boundary and the first field in the block
+                                     for LIFO lists to work. */
+    uint64_t     mallocUniqueID;  /* The field to identify memory allocated by scalable_malloc */
+    Block       *previous;        /* Use double linked list to speed up removal */
+    unsigned int objectSize;
+    unsigned int owner;
+    FreeObject  *bumpPtr;         /* Bump pointer moves from the end to the beginning of a block */
+    FreeObject  *freeList;
+    unsigned int allocatedCount;  /* Number of objects allocated (obviously by the owning thread) */
+    unsigned int isFull;
+};
+
+struct Block : public LocalBlockFields {
+    size_t       __pad_local_fields[(blockHeaderAlignment-sizeof(LocalBlockFields))/sizeof(size_t)];
+    FreeObject  *publicFreeList;
+    Block       *nextPrivatizable;
+    size_t       __pad_public_fields[(blockHeaderAlignment-2*sizeof(void*))/sizeof(size_t)];
+};
+
+struct Bin {
+    Block      *activeBlk;
+    Block      *mailbox;
+    MallocMutex mailLock;
+};
+
+/*
+ * This is a LIFO linked list that one can init, push or pop from
+ */
+static LifoQueue freeBlockList;
+
+/*
+ * When a block that is not completely free is returned for reuse by other threads
+ * this is where the block goes.
+ *
+ * LifoQueue assumes zero initialization; so below its constructors are omitted,
+ * to avoid linking with C++ libraries on Linux.
+ */
+static char globalBinSpace[sizeof(LifoQueue)*numBlockBinLimit];
+static LifoQueue* globalSizeBins = (LifoQueue*)globalBinSpace;
+
+static struct LargeObjectCacheStat {
+    uintptr_t age;
+    size_t cacheSize;
+} loCacheStat;
+
+class CachedObjectsList {
+    struct CachedObject {
+        CachedObject *next,
+                     *prev;
+        uintptr_t     age;
+    };
+
+    CachedObject *first,
+                 *last;
+    /* age of an oldest object in the list; equal to last->age, if last defined,
+       used for quick cheching it without acquiring the lock. */
+    uintptr_t     oldest;
+    /* currAge when something was excluded out of list because of the age,
+       not because of cache hit */
+    uintptr_t     lastCleanedAge;
+    /* Current threshold value for the objects of a particular size. 
+       Set on cache miss. */
+    uintptr_t     ageThreshold;
+
+    MallocMutex   lock;
+    /* CachedObjectsList should be placed in zero-initialized memory,
+       ctor not needed. */
+    CachedObjectsList();
+public:
+    inline void push(void *buf, uintptr_t currAge);
+    inline CachedObject* pop(uintptr_t currAge);
+    void releaseLastIfOld(uintptr_t currAge, size_t size);
+};
+
+/*
+ * Array of bins with lists of recently freed objects cached for re-use.
+ */
+static char globalCachedObjectBinsSpace[sizeof(CachedObjectsList)*numLargeObjectBins];
+static CachedObjectsList* globalCachedObjectBins = (CachedObjectsList*)globalCachedObjectBinsSpace;
+
+/********* End of the data structures                    **************/
+
+/********** Various numeric parameters controlling allocations ********/
+
+/*
+ * The size of the TLS should be enough to hold numBlockBinLimit bins.
+ */
+const uint32_t tlsSize = numBlockBinLimit * sizeof(Bin);
+
+/*
+ * blockSize - the size of a block, it must be larger than maxSegregatedObjectSize.
+ *
+ */
+const uintptr_t blockSize = 16*1024;
+
+/*
+ * There are bins for all 8 byte aligned objects less than this segregated size; 8 bins in total
+ */
+const uint32_t minSmallObjectIndex = 0;
+const uint32_t numSmallObjectBins = 8;
+const uint32_t maxSmallObjectSize = 64;
+
+/*
+ * There are 4 bins between each couple of powers of 2 [64-128-256-...]
+ * from maxSmallObjectSize till this size; 16 bins in total
+ */
+const uint32_t minSegregatedObjectIndex = minSmallObjectIndex+numSmallObjectBins;
+const uint32_t numSegregatedObjectBins = 16;
+const uint32_t maxSegregatedObjectSize = 1024;
+
+/*
+ * And there are 5 bins with the following allocation sizes: 1792, 2688, 3968, 5376, 8064.
+ * They selected to fit 9, 6, 4, 3, and 2 sizes per a block, and also are multiples of 128.
+ * If sizeof(Block) changes from 128, these sizes require close attention!
+ */
+const uint32_t minFittingIndex = minSegregatedObjectIndex+numSegregatedObjectBins;
+const uint32_t numFittingBins = 5;
+
+const uint32_t fittingAlignment = 128;
+
+#define SET_FITTING_SIZE(N) ( (blockSize-sizeof(Block))/N ) & ~(fittingAlignment-1)
+const uint32_t fittingSize1 = SET_FITTING_SIZE(9);
+const uint32_t fittingSize2 = SET_FITTING_SIZE(6);
+const uint32_t fittingSize3 = SET_FITTING_SIZE(4);
+const uint32_t fittingSize4 = SET_FITTING_SIZE(3);
+const uint32_t fittingSize5 = SET_FITTING_SIZE(2);
+#undef SET_FITTING_SIZE
+
+/*
+ * The total number of thread-specific Block-based bins
+ */
+const uint32_t numBlockBins = minFittingIndex+numFittingBins;
+
+/*
+ * Objects of this size and larger are considered large objects.
+ */
+const uint32_t minLargeObjectSize = fittingSize5 + 1;
+
+/*
+ * Difference between object sizes in large object bins
+ */
+const uint32_t largeObjectCacheStep = 8*1024;
+
+/*
+ * Object cache cleanup frequency.
+ * It should be power of 2 for the fast checking.
+ */
+const unsigned cacheCleanupFreq = 256;
+
+/*
+ * Get virtual memory in pieces of this size: 0x0100000 is 1 megabyte decimal
+ */
+static size_t mmapRequestSize = 0x0100000;
+
+/********** End of numeric parameters controlling allocations *********/
+
+#if __INTEL_COMPILER || _MSC_VER
+#define NOINLINE(decl) __declspec(noinline) decl
+#elif __GNUC__
+#define NOINLINE(decl) decl __attribute__ ((noinline))
+#else
+#define NOINLINE(decl) decl
+#endif
+
+static NOINLINE( Block* getPublicFreeListBlock(Bin* bin) );
+static NOINLINE( void moveBlockToBinFront(Block *block) );
+static NOINLINE( void processLessUsedBlock(Block *block) );
+
+#undef NOINLINE
+
+/*********** Code to acquire memory from the OS or other executive ****************/
+
+#if USE_DEFAULT_MEMORY_MAPPING
+#include "MapMemory.h"
+#else
+/* assume MapMemory and UnmapMemory are customized */
+#endif
+
+/*
+ * Returns 0 if failure for any reason
+ * otherwise returns a pointer to the newly available memory.
+ */
+static void* getMemory (size_t bytes)
+{
+    void *result = 0;
+    // TODO: either make sure the assertion below is always valid, or remove it.
+    /*MALLOC_ASSERT( bytes>=minLargeObjectSize, "request too small" );*/
+#if MEMORY_MAPPING_USES_MALLOC
+    recursive_malloc_call_protector scoped(/*condition=*/malloc_proxy);
+#endif
+    result = MapMemory(bytes);
+#if MALLOC_TRACE
+    if (!result) {
+        TRACEF(( "[ScalableMalloc trace] getMemory unsuccess, can't get %d bytes from OS\n", bytes ));
+    } else {
+        TRACEF(( "[ScalableMalloc trace] - getMemory success returning %p\n", result ));
+    }
+#endif
+    return result;
+}
+
+#if USE_MALLOC_FOR_LARGE_OBJECT
+
+// (get|free)RawMemory only necessary for the USE_MALLOC_FOR_LARGE_OBJECT case
+static inline void* getRawMemory (size_t size)
+{
+    void *object;
+#if MALLOC_LD_PRELOAD
+    if (malloc_proxy) {
+        if ( rml::internal::original_malloc_found ){
+            object = (*rml::internal::original_malloc_ptr)(size);
+        }else{
+            MALLOC_ASSERT( 0, "Original allocators not found, can't allocate large object." );
+            return NULL;
+        }
+    } else
+#endif /* MALLOC_LD_PRELOAD */
+        object = malloc(size);
+    return object;
+}
+
+static inline void freeRawMemory (void *object, size_t /*size*/)
+{
+#if MALLOC_LD_PRELOAD
+    if (malloc_proxy) {
+        if ( rml::internal::original_malloc_found ){
+            (*rml::internal::original_free_ptr)(object);
+        }else{
+            MALLOC_ASSERT( 0, ASSERT_TEXT );
+        }
+    } else
+#endif /* MALLOC_LD_PRELOAD */
+        free(object);
+}
+
+#else /* USE_MALLOC_FOR_LARGE_OBJECT */
+
+static void returnMemory(void *area, size_t bytes)
+{
+    int retcode = UnmapMemory(area, bytes);
+#if MALLOC_TRACE
+    if (retcode) {
+        TRACEF(( "[ScalableMalloc trace] returnMemory unsuccess for %p; perhaps it has already been freed or was never allocated.\n", area ));
+    }
+#endif
+    return;
+}
+
+static inline void* getRawMemory (size_t size) { return getMemory(size); }
+
+static inline void freeRawMemory (void *object, size_t size) {
+    returnMemory(object, size);
+}
+
+#endif /* USE_MALLOC_FOR_LARGE_OBJECT */
+
+/********* End memory acquisition code ********************************/
+
+/********* Now some rough utility code to deal with indexing the size bins. **************/
+
+/*
+ * Given a number return the highest non-zero bit in it. It is intended to work with 32-bit values only.
+ * Moreover, on IPF, for sake of simplicity and performance, it is narrowed to only serve for 64 to 1023.
+ * This is enough for current algorithm of distribution of sizes among bins.
+ */
+#if _WIN64 && _MSC_VER>=1400 && !__INTEL_COMPILER
+extern "C" unsigned char _BitScanReverse( unsigned long* i, unsigned long w );
+#pragma intrinsic(_BitScanReverse)
+#endif
+static inline unsigned int highestBitPos(unsigned int n)
+{
+    unsigned int pos;
+#if __ARCH_x86_32||__ARCH_x86_64
+
+# if __linux__||__APPLE__||__FreeBSD__||__sun||__MINGW32__
+    __asm__ ("bsr %1,%0" : "=r"(pos) : "r"(n));
+# elif (_WIN32 && (!_WIN64 || __INTEL_COMPILER))
+    __asm
+    {
+        bsr eax, n
+        mov pos, eax
+    }
+# elif _WIN64 && _MSC_VER>=1400
+    _BitScanReverse((unsigned long*)&pos, (unsigned long)n);
+# else
+#   error highestBitPos() not implemented for this platform
+# endif
+
+#elif __ARCH_ipf || __ARCH_other
+    static unsigned int bsr[16] = {0,6,7,7,8,8,8,8,9,9,9,9,9,9,9,9};
+    MALLOC_ASSERT( n>=64 && n<1024, ASSERT_TEXT );
+    pos = bsr[ n>>6 ];
+#else
+#   error highestBitPos() not implemented for this platform
+#endif /* __ARCH_* */
+    return pos;
+}
+
+/*
+ * Depending on indexRequest, for a given size return either the index into the bin
+ * for objects of this size, or the actual size of objects in this bin.
+ */
+template<bool indexRequest>
+static unsigned int getIndexOrObjectSize (unsigned int size)
+{
+    if (size <= maxSmallObjectSize) { // selection from 4/8/16/24/32/40/48/56/64
+         /* Index 0 holds up to 8 bytes, Index 1 16 and so forth */
+        return indexRequest ? (size - 1) >> 3 : alignUp(size,8);
+    }
+    else if (size <= maxSegregatedObjectSize ) { // 80/96/112/128 / 160/192/224/256 / 320/384/448/512 / 640/768/896/1024
+        unsigned int order = highestBitPos(size-1); // which group of bin sizes?
+        MALLOC_ASSERT( 6<=order && order<=9, ASSERT_TEXT );
+        if (indexRequest)
+            return minSegregatedObjectIndex - (4*6) - 4 + (4*order) + ((size-1)>>(order-2));
+        else {
+            unsigned int alignment = 128 >> (9-order); // alignment in the group
+            MALLOC_ASSERT( alignment==16 || alignment==32 || alignment==64 || alignment==128, ASSERT_TEXT );
+            return alignUp(size,alignment);
+        }
+    }
+    else {
+        if( size <= fittingSize3 ) {
+            if( size <= fittingSize2 ) {
+                if( size <= fittingSize1 )
+                    return indexRequest ? minFittingIndex : fittingSize1; 
+                else
+                    return indexRequest ? minFittingIndex+1 : fittingSize2;
+            } else
+                return indexRequest ? minFittingIndex+2 : fittingSize3;
+        } else {
+            if( size <= fittingSize5 ) {
+                if( size <= fittingSize4 )
+                    return indexRequest ? minFittingIndex+3 : fittingSize4;
+                else
+                    return indexRequest ? minFittingIndex+4 : fittingSize5;
+            } else {
+                MALLOC_ASSERT( 0,ASSERT_TEXT ); // this should not happen
+                return ~0U;
+            }
+        }
+    }
+}
+
+static unsigned int getIndex (unsigned int size)
+{
+    return getIndexOrObjectSize</*indexRequest*/true>(size);
+}
+
+static unsigned int getObjectSize (unsigned int size)
+{
+    return getIndexOrObjectSize</*indexRequest*/false>(size);
+}
+
+/*
+ * Initialization code.
+ *
+ */
+
+/*
+ * Big Blocks are the blocks we get from the OS or some similar place using getMemory above.
+ * They are placed on the freeBlockList once they are acquired.
+ */
+
+static inline void *alignBigBlock(void *unalignedBigBlock)
+{
+    void *alignedBigBlock;
+    /* align the entireHeap so all blocks are aligned. */
+    alignedBigBlock = alignUp(unalignedBigBlock, blockSize);
+    return alignedBigBlock;
+}
+
+/* Divide the big block into smaller bigBlocks that hold this many blocks.
+ * This is done since we really need a lot of blocks on the freeBlockList or there will be
+ * contention problems.
+ */
+const unsigned int blocksPerBigBlock = 16;
+
+/* Returns 0 if unsuccessful, otherwise 1. */
+static int mallocBigBlock()
+{
+    void *unalignedBigBlock;
+    void *alignedBigBlock;
+    void *bigBlockCeiling;
+    Block *splitBlock;
+    void *splitEdge;
+    size_t bigBlockSplitSize;
+
+    unalignedBigBlock = getMemory(mmapRequestSize);
+
+    if (!unalignedBigBlock) {
+        TRACEF(( "[ScalableMalloc trace] in mallocBigBlock, getMemory returns 0\n" ));
+        /* We can't get any more memory from the OS or executive so return 0 */
+        return 0;
+    }
+
+    alignedBigBlock = alignBigBlock(unalignedBigBlock);
+    bigBlockCeiling = (void*)((uintptr_t)unalignedBigBlock + mmapRequestSize);
+
+    bigBlockSplitSize = blocksPerBigBlock * blockSize;
+
+    splitBlock = (Block*)alignedBigBlock;
+
+    while ( ((uintptr_t)splitBlock + blockSize) <= (uintptr_t)bigBlockCeiling ) {
+        splitEdge = (void*)((uintptr_t)splitBlock + bigBlockSplitSize);
+        if( splitEdge > bigBlockCeiling) {
+            splitEdge = alignDown(bigBlockCeiling, blockSize);
+        }
+        splitBlock->bumpPtr = (FreeObject*)splitEdge;
+        freeBlockList.push((void**) splitBlock);
+        splitBlock = (Block*)splitEdge;
+    }
+
+    TRACEF(( "[ScalableMalloc trace] in mallocBigBlock returning 1\n" ));
+    return 1;
+}
+
+/*
+ * The malloc routines themselves need to be able to occasionally malloc some space,
+ * in order to set up the structures used by the thread local structures. This
+ * routine preforms that fuctions.
+ */
+
+/*
+ * Forward Refs
+ */
+static void initEmptyBlock(Block *block, size_t size);
+static Block *getEmptyBlock(size_t size);
+
+static MallocMutex bootStrapLock;
+
+static Block      *bootStrapBlock = NULL;
+static Block      *bootStrapBlockUsed = NULL;
+static FreeObject *bootStrapObjectList = NULL; 
+
+static void *bootStrapMalloc(size_t size)
+{
+    FreeObject *result;
+
+    MALLOC_ASSERT( size == tlsSize, ASSERT_TEXT );
+
+    { // Lock with acquire
+        MallocMutex::scoped_lock scoped_cs(bootStrapLock);
+
+        if( bootStrapObjectList) {
+            result = bootStrapObjectList;
+            bootStrapObjectList = bootStrapObjectList->next;
+        } else {
+            if (!bootStrapBlock) {
+                bootStrapBlock = getEmptyBlock(size);
+            }
+            result = bootStrapBlock->bumpPtr;
+            bootStrapBlock->bumpPtr = (FreeObject *)((uintptr_t)bootStrapBlock->bumpPtr - bootStrapBlock->objectSize);
+            if ((uintptr_t)bootStrapBlock->bumpPtr < (uintptr_t)bootStrapBlock+sizeof(Block)) {
+                bootStrapBlock->bumpPtr = NULL;
+                bootStrapBlock->next = bootStrapBlockUsed;
+                bootStrapBlockUsed = bootStrapBlock;
+                bootStrapBlock = NULL;
+            }
+        }
+    } // Unlock with release
+
+    memset (result, 0, size);
+    return (void*)result;
+}
+
+static void bootStrapFree(void* ptr)
+{
+    MALLOC_ASSERT( ptr, ASSERT_TEXT );
+    { // Lock with acquire
+        MallocMutex::scoped_lock scoped_cs(bootStrapLock);
+        ((FreeObject*)ptr)->next = bootStrapObjectList;
+        bootStrapObjectList = (FreeObject*)ptr;
+    } // Unlock with release
+}
+
+/********* End rough utility code  **************/
+
+/********* Thread and block related code      *************/
+
+#if MALLOC_DEBUG>1
+/* The debug version verifies the TLSBin as needed */
+static void verifyTLSBin (Bin* bin, size_t size)
+{
+    Block* temp;
+    Bin*   tls;
+    uint32_t index = getIndex(size);
+    uint32_t objSize = getObjectSize(size);
+
+    tls = (Bin*)getThreadMallocTLS();
+    MALLOC_ASSERT( bin == tls+index, ASSERT_TEXT );
+
+    if (tls[index].activeBlk) {
+        MALLOC_ASSERT( tls[index].activeBlk->mallocUniqueID==theMallocUniqueID, ASSERT_TEXT );
+        MALLOC_ASSERT( tls[index].activeBlk->owner == getThreadId(), ASSERT_TEXT );
+        MALLOC_ASSERT( tls[index].activeBlk->objectSize == objSize, ASSERT_TEXT );
+
+        for (temp = tls[index].activeBlk->next; temp; temp=temp->next) {
+            MALLOC_ASSERT( temp!=tls[index].activeBlk, ASSERT_TEXT );
+            MALLOC_ASSERT( temp->mallocUniqueID==theMallocUniqueID, ASSERT_TEXT );
+            MALLOC_ASSERT( temp->owner == getThreadId(), ASSERT_TEXT );
+            MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );
+            MALLOC_ASSERT( temp->previous->next == temp, ASSERT_TEXT );
+            if (temp->next) {
+                MALLOC_ASSERT( temp->next->previous == temp, ASSERT_TEXT );
+            }
+        }
+        for (temp = tls[index].activeBlk->previous; temp; temp=temp->previous) {
+            MALLOC_ASSERT( temp!=tls[index].activeBlk, ASSERT_TEXT );
+            MALLOC_ASSERT( temp->mallocUniqueID==theMallocUniqueID, ASSERT_TEXT );
+            MALLOC_ASSERT( temp->owner == getThreadId(), ASSERT_TEXT );
+            MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );
+            MALLOC_ASSERT( temp->next->previous == temp, ASSERT_TEXT );
+            if (temp->previous) {
+                MALLOC_ASSERT( temp->previous->next == temp, ASSERT_TEXT );
+            }
+        }
+    }
+}
+#else
+inline static void verifyTLSBin (Bin*, size_t) {}
+#endif /* MALLOC_DEBUG>1 */
+
+/*
+ * Add a block to the start of this tls bin list.
+ */
+static void pushTLSBin (Bin* bin, Block* block)
+{
+    /* The objectSize should be defined and not a parameter
+       because the function is applied to partially filled blocks as well */
+    unsigned int size = block->objectSize;
+    Block* activeBlk;
+
+    MALLOC_ASSERT( block->owner == getThreadId(), ASSERT_TEXT );
+    MALLOC_ASSERT( block->objectSize != 0, ASSERT_TEXT );
+    MALLOC_ASSERT( block->next == NULL, ASSERT_TEXT );
+    MALLOC_ASSERT( block->previous == NULL, ASSERT_TEXT );
+
+    MALLOC_ASSERT( bin, ASSERT_TEXT );
+    verifyTLSBin(bin, size);
+    activeBlk = bin->activeBlk;
+
+    block->next = activeBlk;
+    if( activeBlk ) {
+        block->previous = activeBlk->previous;
+        activeBlk->previous = block;
+        if( block->previous )
+            block->previous->next = block;
+    } else {
+        bin->activeBlk = block;
+    }
+
+    verifyTLSBin(bin, size);
+}
+
+/*
+ * Take a block out of its tls bin (e.g. before removal).
+ */
+static void outofTLSBin (Bin* bin, Block* block)
+{
+    unsigned int size = block->objectSize;
+
+    MALLOC_ASSERT( block->owner == getThreadId(), ASSERT_TEXT );
+    MALLOC_ASSERT( block->objectSize != 0, ASSERT_TEXT );
+
+    MALLOC_ASSERT( bin, ASSERT_TEXT );
+    verifyTLSBin(bin, size);
+
+    if (block == bin->activeBlk) {
+        bin->activeBlk = block->previous? block->previous : block->next;
+    }
+    /* Delink the block */
+    if (block->previous) {
+        MALLOC_ASSERT( block->previous->next == block, ASSERT_TEXT );
+        block->previous->next = block->next;
+    }
+    if (block->next) {
+        MALLOC_ASSERT( block->next->previous == block, ASSERT_TEXT );
+        block->next->previous = block->previous;
+    }
+    block->next = NULL;
+    block->previous = NULL;
+
+    verifyTLSBin(bin, size);
+}
+
+/*
+ * Return the bin for the given size. If the TLS bin structure is absent, create it.
+ */
+static Bin* getAllocationBin(size_t size)
+{
+    Bin* tls = (Bin*)getThreadMallocTLS();
+    if( !tls ) {
+        MALLOC_ASSERT( tlsSize >= sizeof(Bin) * numBlockBins, ASSERT_TEXT );
+        tls = (Bin*) bootStrapMalloc(tlsSize);
+        /* the block contains zeroes after bootStrapMalloc, so bins are initialized */
+#if MALLOC_DEBUG
+        for (int i = 0; i < numBlockBinLimit; i++) {
+            MALLOC_ASSERT( tls[i].activeBlk == 0, ASSERT_TEXT );
+            MALLOC_ASSERT( tls[i].mailbox == 0, ASSERT_TEXT );
+        }
+#endif
+        setThreadMallocTLS(tls);
+    }
+    MALLOC_ASSERT( tls, ASSERT_TEXT );
+    return tls+getIndex(size);
+}
+
+const float emptyEnoughRatio = 1.0 / 4.0; /* "Reactivate" a block if this share of its objects is free. */
+
+static unsigned int emptyEnoughToUse (Block *mallocBlock)
+{
+    const float threshold = (blockSize - sizeof(Block)) * (1-emptyEnoughRatio);
+
+    if (mallocBlock->bumpPtr) {
+        /* If we are still using a bump ptr for this block it is empty enough to use. */
+        STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), examineEmptyEnough);
+        mallocBlock->isFull = 0;
+        return 1;
+    }
+
+    /* allocatedCount shows how many objects in the block are in use; however it still counts
+       blocks freed by other threads; so prior call to privatizePublicFreeList() is recommended */
+    mallocBlock->isFull = (mallocBlock->allocatedCount*mallocBlock->objectSize > threshold)? 1: 0;
+#if COLLECT_STATISTICS
+    if (mallocBlock->isFull)
+        STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), examineNotEmpty);
+    else
+        STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), examineEmptyEnough);
+#endif
+    return 1-mallocBlock->isFull;
+}
+
+/* Restore the bump pointer for an empty block that is planned to use */
+static void restoreBumpPtr (Block *block)
+{
+    MALLOC_ASSERT( block->allocatedCount == 0, ASSERT_TEXT );
+    MALLOC_ASSERT( block->publicFreeList == NULL, ASSERT_TEXT );
+    STAT_increment(block->owner, getIndex(block->objectSize), freeRestoreBumpPtr);
+    block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize - block->objectSize);
+    block->freeList = NULL;
+    block->isFull = 0;
+}
+
+#if !(FREELIST_NONBLOCKING)
+static MallocMutex publicFreeListLock; // lock for changes of publicFreeList
+#endif
+
+const uintptr_t UNUSABLE = 0x1;
+inline bool isSolidPtr( void* ptr )
+{
+    return (UNUSABLE|(uintptr_t)ptr)!=UNUSABLE;
+}
+inline bool isNotForUse( void* ptr )
+{
+    return (uintptr_t)ptr==UNUSABLE;
+}
+
+static void freePublicObject (Block *block, FreeObject *objectToFree)
+{
+    Bin* theBin;
+    FreeObject *publicFreeList;
+
+#if FREELIST_NONBLOCKING
+    FreeObject *temp = block->publicFreeList;
+    MALLOC_ITT_SYNC_RELEASING(&block->publicFreeList);
+    do {
+        publicFreeList = objectToFree->next = temp;
+        temp = (FreeObject*)AtomicCompareExchange(
+                                (intptr_t&)block->publicFreeList,
+                                (intptr_t)objectToFree, (intptr_t)publicFreeList );
+        // no backoff necessary because trying to make change, not waiting for a change
+    } while( temp != publicFreeList );
+#else
+    STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);
+    {
+        MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
+        publicFreeList = objectToFree->next = block->publicFreeList;
+        block->publicFreeList = objectToFree;
+    }
+#endif
+
+    if( publicFreeList==NULL ) {
+        // if the block is abandoned, its nextPrivatizable pointer should be UNUSABLE
+        // otherwise, it should point to the bin the block belongs to.
+        // reading nextPrivatizable is thread-safe below, because:
+        // 1) the executing thread atomically got publicFreeList==NULL and changed it to non-NULL;
+        // 2) only owning thread can change it back to NULL,
+        // 3) but it can not be done until the block is put to the mailbox
+        // So the executing thread is now the only one that can change nextPrivatizable
+        if( !isNotForUse(block->nextPrivatizable) ) {
+            MALLOC_ASSERT( block->nextPrivatizable!=NULL, ASSERT_TEXT );
+            MALLOC_ASSERT( block->owner!=0, ASSERT_TEXT );
+            theBin = (Bin*) block->nextPrivatizable;
+            MallocMutex::scoped_lock scoped_cs(theBin->mailLock);
+            block->nextPrivatizable = theBin->mailbox;
+            theBin->mailbox = block;
+        } else {
+            MALLOC_ASSERT( block->owner==0, ASSERT_TEXT );
+        }
+    }
+    STAT_increment(getThreadId(), ThreadCommonCounters, freeToOtherThread);
+    STAT_increment(block->owner, getIndex(block->objectSize), freeByOtherThread);
+}
+
+static void privatizePublicFreeList (Block *mallocBlock)
+{
+    FreeObject *temp, *publicFreeList;
+
+    MALLOC_ASSERT( mallocBlock->owner == getThreadId(), ASSERT_TEXT );
+#if FREELIST_NONBLOCKING
+    temp = mallocBlock->publicFreeList;
+    do {
+        publicFreeList = temp;
+        temp = (FreeObject*)AtomicCompareExchange(
+                                (intptr_t&)mallocBlock->publicFreeList,
+                                0, (intptr_t)publicFreeList);
+        // no backoff necessary because trying to make change, not waiting for a change
+    } while( temp != publicFreeList );
+    MALLOC_ITT_SYNC_ACQUIRED(&mallocBlock->publicFreeList);
+#else
+    STAT_increment(mallocBlock->owner, ThreadCommonCounters, lockPublicFreeList);
+    {
+        MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
+        publicFreeList = mallocBlock->publicFreeList;
+        mallocBlock->publicFreeList = NULL;
+    }
+    temp = publicFreeList;
+#endif
+
+    MALLOC_ASSERT( publicFreeList && publicFreeList==temp, ASSERT_TEXT ); // there should be something in publicFreeList!
+    if( !isNotForUse(temp) ) { // return/getPartialBlock could set it to UNUSABLE
+        MALLOC_ASSERT( mallocBlock->allocatedCount <= (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT );
+        /* other threads did not change the counter freeing our blocks */
+        mallocBlock->allocatedCount--;
+        while( isSolidPtr(temp->next) ){ // the list will end with either NULL or UNUSABLE
+            temp = temp->next;
+            mallocBlock->allocatedCount--;
+        }
+        MALLOC_ASSERT( mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT );
+        /* merge with local freeList */
+        temp->next = mallocBlock->freeList;
+        mallocBlock->freeList = publicFreeList;
+        STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), allocPrivatized);
+    }
+}
+
+static Block* getPublicFreeListBlock (Bin* bin)
+{
+    Block* block;
+    MALLOC_ASSERT( bin, ASSERT_TEXT );
+// the counter should be changed    STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);
+    {
+        MallocMutex::scoped_lock scoped_cs(bin->mailLock);
+        block = bin->mailbox;
+        if( block ) {
+            MALLOC_ASSERT( block->owner == getThreadId(), ASSERT_TEXT );
+            MALLOC_ASSERT( !isNotForUse(block->nextPrivatizable), ASSERT_TEXT );
+            bin->mailbox = block->nextPrivatizable;
+            block->nextPrivatizable = (Block*) bin;
+        }
+    }
+    if( block ) {
+        MALLOC_ASSERT( isSolidPtr(block->publicFreeList), ASSERT_TEXT );
+        privatizePublicFreeList(block);
+    }
+    return block;
+}
+
+static Block *getPartialBlock(Bin* bin, unsigned int size)
+{
+    Block *result;
+    MALLOC_ASSERT( bin, ASSERT_TEXT );
+    unsigned int index = getIndex(size);
+    result = (Block *) globalSizeBins[index].pop();
+    if (result) {
+        MALLOC_ASSERT( result->mallocUniqueID==theMallocUniqueID, ASSERT_TEXT );
+        result->next = NULL;
+        result->previous = NULL;
+        MALLOC_ASSERT( result->publicFreeList!=NULL, ASSERT_TEXT );
+        /* There is not a race here since no other thread owns this block */
+        MALLOC_ASSERT( result->owner == 0, ASSERT_TEXT );
+        result->owner = getThreadId();
+        // It is safe to change nextPrivatizable, as publicFreeList is not null
+        MALLOC_ASSERT( isNotForUse(result->nextPrivatizable), ASSERT_TEXT );
+        result->nextPrivatizable = (Block*)bin;
+        // the next call is required to change publicFreeList to 0
+        privatizePublicFreeList(result);
+        if( result->allocatedCount ) {
+            // check its fullness and set result->isFull
+            emptyEnoughToUse(result);
+        } else {
+            restoreBumpPtr(result);
+        }
+        MALLOC_ASSERT( !isNotForUse(result->publicFreeList), ASSERT_TEXT );
+        STAT_increment(result->owner, index, allocBlockPublic);
+    }
+    return result;
+}
+
+static void returnPartialBlock(Bin* bin, Block *block)
+{
+    unsigned int index = getIndex(block->objectSize);
+    MALLOC_ASSERT( bin, ASSERT_TEXT );
+    MALLOC_ASSERT( block->owner==getThreadId(), ASSERT_TEXT );
+    STAT_increment(block->owner, index, freeBlockPublic);
+    // need to set publicFreeList to non-zero, so other threads
+    // will not change nextPrivatizable and it can be zeroed.
+    if ((intptr_t)block->nextPrivatizable==(intptr_t)bin) {
+        void* oldval;
+#if FREELIST_NONBLOCKING
+        oldval = (void*)AtomicCompareExchange((intptr_t&)block->publicFreeList, (intptr_t)UNUSABLE, 0);
+#else
+        STAT_increment(block->owner, ThreadCommonCounters, lockPublicFreeList);
+        {
+            MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
+            if ( (oldval=block->publicFreeList)==NULL )
+                (uintptr_t&)(block->publicFreeList) = UNUSABLE;
+        }
+#endif
+        if ( oldval!=NULL ) {
+            // another thread freed an object; we need to wait until it finishes.
+            // I believe there is no need for exponential backoff, as the wait here is not for a lock;
+            // but need to yield, so the thread we wait has a chance to run.
+            int count = 256;
+            while( (intptr_t)const_cast<Block* volatile &>(block->nextPrivatizable)==(intptr_t)bin ) {
+                if (--count==0) {
+                    do_yield();
+                    count = 256;
+                }
+            }
+        }
+    } else {
+        MALLOC_ASSERT( isSolidPtr(block->publicFreeList), ASSERT_TEXT );
+    }
+    MALLOC_ASSERT( block->publicFreeList!=NULL, ASSERT_TEXT );
+    // now it is safe to change our data
+    block->previous = NULL;
+    block->owner = 0;
+    // it is caller responsibility to ensure that the list of blocks
+    // formed by nextPrivatizable pointers is kept consistent if required.
+    // if only called from thread shutdown code, it does not matter.
+    (uintptr_t&)(block->nextPrivatizable) = UNUSABLE;
+    globalSizeBins[index].push((void **)block);
+}
+
+static void initEmptyBlock(Block *block, size_t size)
+{
+    // Having getIndex and getObjectSize called next to each other
+    // allows better compiler optimization as they basically share the code.
+    unsigned int index      = getIndex(size);
+    unsigned int objectSize = getObjectSize(size); 
+    Bin* tls = (Bin*)getThreadMallocTLS();
+#if MALLOC_DEBUG
+    memset (block, 0x0e5, blockSize);
+#endif
+    block->mallocUniqueID = theMallocUniqueID;
+    block->next = NULL;
+    block->previous = NULL;
+    block->objectSize = objectSize;
+    block->owner = getThreadId();
+    // bump pointer should be prepared for first allocation - thus mode it down to objectSize
+    block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize - objectSize);
+    block->freeList = NULL;
+    block->allocatedCount = 0;
+    block->isFull = 0;
+
+    block->publicFreeList = NULL;
+    // each block should have the address where the head of the list of "privatizable" blocks is kept
+    // the only exception is a block for boot strap which is initialized when TLS is yet NULL
+    block->nextPrivatizable = tls? (Block*)(tls + index) : NULL;
+    TRACEF(( "[ScalableMalloc trace] Empty block %p is initialized, owner is %d, objectSize is %d, bumpPtr is %p\n",
+             block, block->owner, block->objectSize, block->bumpPtr ));
+  }
+
+/* Return an empty uninitialized block in a non-blocking fashion. */
+static Block *getEmptyBlock(size_t size)
+{
+    Block *result;
+    Block *bigBlock;
+
+    result = NULL;
+
+    bigBlock = (Block *) freeBlockList.pop();
+
+    while (!bigBlock) {
+        /* We are out of blocks so go to the OS and get another one */
+        if (!mallocBigBlock()) {
+            return NULL;
+        }
+        bigBlock = (Block *) freeBlockList.pop();
+    }
+
+    // check alignment
+    MALLOC_ASSERT( isAligned( bigBlock, blockSize ), ASSERT_TEXT );
+    MALLOC_ASSERT( isAligned( bigBlock->bumpPtr, blockSize ), ASSERT_TEXT );
+    // block should be at least as big as blockSize; otherwise the previous block can be damaged.
+    MALLOC_ASSERT( (uintptr_t)bigBlock->bumpPtr >= (uintptr_t)bigBlock + blockSize, ASSERT_TEXT );
+    bigBlock->bumpPtr = (FreeObject *)((uintptr_t)bigBlock->bumpPtr - blockSize);
+    result = (Block *)bigBlock->bumpPtr;
+    if ( result!=bigBlock ) {
+        TRACEF(( "[ScalableMalloc trace] Pushing partial rest of block back on.\n" ));
+        freeBlockList.push((void **)bigBlock);
+    }
+    initEmptyBlock(result, size);
+    STAT_increment(result->owner, getIndex(result->objectSize), allocBlockNew);
+
+    return result;
+}
+
+/* We have a block give it back to the malloc block manager */
+static void returnEmptyBlock (Block *block, bool keepTheBin = true)
+{
+    // it is caller's responsibility to ensure no data is lost before calling this
+    MALLOC_ASSERT( block->allocatedCount==0, ASSERT_TEXT );
+    MALLOC_ASSERT( block->publicFreeList==NULL, ASSERT_TEXT );
+    if (keepTheBin) {
+        /* We should keep the TLS bin structure */
+        MALLOC_ASSERT( block->next == NULL, ASSERT_TEXT );
+        MALLOC_ASSERT( block->previous == NULL, ASSERT_TEXT );
+    }
+    STAT_increment(block->owner, getIndex(block->objectSize), freeBlockBack);
+
+    block->publicFreeList = NULL;
+    block->nextPrivatizable = NULL;
+
+    block->mallocUniqueID=0;
+    block->next = NULL;
+    block->previous = NULL;
+    block->objectSize = 0;
+    block->owner = (unsigned)-1;
+    // for an empty block, bump pointer should point right after the end of the block
+    block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize);
+    block->freeList = NULL;
+    block->allocatedCount = 0;
+    block->isFull = 0;
+    freeBlockList.push((void **)block);
+}
+
+inline static Block* getActiveBlock( Bin* bin )
+{
+    MALLOC_ASSERT( bin, ASSERT_TEXT );
+    return bin->activeBlk;
+}
+
+inline static void setActiveBlock (Bin* bin, Block *block)
+{
+    MALLOC_ASSERT( bin, ASSERT_TEXT );
+    MALLOC_ASSERT( block->owner == getThreadId(), ASSERT_TEXT );
+    // it is the caller responsibility to keep bin consistence (i.e. ensure this block is in the bin list)
+    bin->activeBlk = block;
+}
+
+inline static Block* setPreviousBlockActive( Bin* bin )
+{
+    MALLOC_ASSERT( bin && bin->activeBlk, ASSERT_TEXT );
+    Block* temp = bin->activeBlk->previous;
+    if( temp ) {
+        MALLOC_ASSERT( temp->isFull == 0, ASSERT_TEXT );
+        bin->activeBlk = temp;
+    }
+    return temp;
+}
+
+/********* End thread related code  *************/
+
+/********* Library initialization *************/
+
+//! Value indicating the state of initialization.
+/* 0 = initialization not started.
+ * 1 = initialization started but not finished.
+ * 2 = initialization finished.
+ * In theory, we only need values 0 and 2. But value 1 is nonetheless
+ * useful for detecting errors in the double-check pattern.
+ */
+static int mallocInitialized;   // implicitly initialized to 0
+static MallocMutex initAndShutMutex;
+
+extern "C" void mallocThreadShutdownNotification(void*);
+
+/*
+ * Allocator initialization routine;
+ * it is called lazily on the very first scalable_malloc call.
+ */
+static void initMemoryManager()
+{
+    TRACEF(( "[ScalableMalloc trace] sizeof(Block) is %d (expected 128); sizeof(uintptr_t) is %d\n",
+             sizeof(Block), sizeof(uintptr_t) ));
+    MALLOC_ASSERT( 2*blockHeaderAlignment == sizeof(Block), ASSERT_TEXT );
+
+// Create keys for thread-local storage and for thread id
+// TODO: add error handling, and on error do something better than exit(1)
+#if USE_WINTHREAD
+    TLS_pointer_key = TlsAlloc();
+    Tid_key = TlsAlloc();
+#else
+    int status1 = pthread_key_create( &TLS_pointer_key, mallocThreadShutdownNotification );
+    int status2 = pthread_key_create( &Tid_key, NULL );
+    if ( status1 || status2 ) {
+        fprintf (stderr, "The memory manager cannot create tls key during initialization; exiting \n");
+        exit(1);
+    }
+#endif /* USE_WINTHREAD */
+#if COLLECT_STATISTICS
+    initStatisticsCollection();
+#endif
+
+    TRACEF(( "[ScalableMalloc trace] Asking for a mallocBigBlock\n" ));
+    if (!mallocBigBlock()) {
+        fprintf (stderr, "The memory manager cannot access sufficient memory to initialize; exiting \n");
+        exit(1);
+    }
+}
+
+//! Ensures that initMemoryManager() is called once and only once.
+/** Does not return until initMemoryManager() has been completed by a thread.
+    There is no need to call this routine if mallocInitialized==2 . */
+static inline void checkInitialization()
+{
+    if (mallocInitialized==2) return;
+    MallocMutex::scoped_lock lock( initAndShutMutex );
+    if (mallocInitialized!=2) {
+        MALLOC_ASSERT( mallocInitialized==0, ASSERT_TEXT );
+        mallocInitialized = 1;
+        initMemoryManager();
+#ifdef  MALLOC_EXTRA_INITIALIZATION
+        recursive_malloc_call_protector scoped(/*condition=*/malloc_proxy);
+        MALLOC_EXTRA_INITIALIZATION;
+#endif
+        MALLOC_ASSERT( mallocInitialized==1, ASSERT_TEXT );
+        mallocInitialized = 2;
+    }
+    MALLOC_ASSERT( mallocInitialized==2, ASSERT_TEXT ); /* It can't be 0 or I would have initialized it */
+}
+
+/********* End library initialization *************/
+
+/********* The malloc show begins     *************/
+
+
+/********* Allocation of large objects ************/
+
+/*
+ * The program wants a large object that we are not prepared to deal with.
+ * so we pass the problem on to the OS. Large Objects are the only objects in
+ * the system that begin on a 16K byte boundary since the blocks used for smaller
+ * objects have the Block structure at each 16K boundary.
+ *
+ */
+
+struct LargeObjectHeader {
+    void        *unalignedResult;   /* The base of the memory returned from getMemory, this is what is used to return this to the OS */
+    size_t       unalignedSize;     /* The size that was requested from getMemory */
+    uint64_t     mallocUniqueID;    /* The field to check whether the memory was allocated by scalable_malloc */
+    size_t       objectSize;        /* The size originally requested by a client */
+};
+
+void CachedObjectsList::push(void *buf, uintptr_t currAge)
+{   
+    CachedObject *ptr = (CachedObject*)buf;
+    ptr->prev = NULL;
+    ptr->age  = currAge;
+
+    MallocMutex::scoped_lock scoped_cs(lock);
+    ptr->next = first;
+    first = ptr;
+    if (ptr->next) ptr->next->prev = ptr;
+    if (!last) {
+        MALLOC_ASSERT(0 == oldest, ASSERT_TEXT);
+        oldest = currAge;
+        last = ptr;
+    }
+}
+
+CachedObjectsList::CachedObject *CachedObjectsList::pop(uintptr_t currAge)
+{   
+    CachedObject *result=NULL;
+    {
+        MallocMutex::scoped_lock scoped_cs(lock);
+        if (first) {
+            result = first;
+            first = result->next;
+            if (first)  
+                first->prev = NULL;
+            else {
+                last = NULL;
+                oldest = 0;
+            }
+        } else {
+            /* If cache miss occured, set ageThreshold to twice the difference 
+               between current time and last time cache was cleaned. */
+            ageThreshold = 2*(currAge - lastCleanedAge);
+        }
+    }
+    return result;
+}
+
+void CachedObjectsList::releaseLastIfOld(uintptr_t currAge, size_t size)
+{
+    CachedObject *toRelease = NULL;
+    /* oldest may be more recent then age, that's why cast to signed type
+       was used. age overflow is also processed correctly. */
+    if (last && (intptr_t)(currAge - oldest) > ageThreshold) {
+        MallocMutex::scoped_lock scoped_cs(lock);
+        // double check
+        if (last && (intptr_t)(currAge - last->age) > ageThreshold) {
+            do {
+                last = last->prev;
+            } while (last && (intptr_t)(currAge - last->age) > ageThreshold);
+            if (last) {
+                toRelease = last->next;
+                oldest = last->age;
+                last->next = NULL;
+            } else {
+                toRelease = first;
+                first = NULL;
+                oldest = 0;
+            }
+            MALLOC_ASSERT( toRelease, ASSERT_TEXT );
+            lastCleanedAge = toRelease->age;
+        } 
+        else 
+            return;
+    }
+    while ( toRelease ) {
+        CachedObject *helper = toRelease->next;
+        freeRawMemory(toRelease, size);
+        toRelease = helper;
+    }
+}
+
+/* A predicate checks whether an object starts on blockSize boundary */
+static inline unsigned int isLargeObject(void *object)
+{
+    return isAligned(object, blockSize);
+}
+
+static uintptr_t cleanupCacheIfNeed ()
+{
+    /* loCacheStat.age overflow is OK, as we only want difference between 
+     * its current value and some recent.
+     *
+     * Both malloc and free should increment loCacheStat.age, as in 
+     * a different case mulitiple cache object would have same age,
+     * and accuracy of predictors suffers.
+     */
+    uintptr_t currAge = AtomicIncrement(loCacheStat.age);
+
+    if ( 0 == currAge % cacheCleanupFreq ) {
+        size_t objSize;
+        int i;
+
+        for (i = numLargeObjectBins-1, 
+             objSize = (numLargeObjectBins-1)*largeObjectCacheStep+blockSize; 
+             i >= 0; 
+             i--, objSize-=largeObjectCacheStep) {
+            /* cached object size on iteration is
+             * i*largeObjectCacheStep+blockSize, it seems iterative
+             * computation of it improves performance.
+             */
+            // release from cache objects that are older then ageThreshold
+            globalCachedObjectBins[i].releaseLastIfOld(currAge, objSize);
+        }
+    }
+    return currAge;
+}
+
+static void* allocateCachedLargeObject (size_t size)
+{
+    MALLOC_ASSERT( size%largeObjectCacheStep==0, ASSERT_TEXT );
+    void *block = NULL;
+    // blockSize is the minimal alignment and thus the minimal size of a large object.
+    size_t idx = (size-blockSize)/largeObjectCacheStep;
+    if (idx<numLargeObjectBins) {
+        uintptr_t currAge = cleanupCacheIfNeed();
+        block = globalCachedObjectBins[idx].pop(currAge);
+        if (block) {
+            STAT_increment(getThreadId(), ThreadCommonCounters, allocCachedLargeObj);
+        }
+    }
+    return block;
+}
+
+static inline void* mallocLargeObject (size_t size, size_t alignment)
+{
+    size_t allocationSize = alignUp(size+sizeof(LargeObjectHeader)+alignment, 
+                                    largeObjectCacheStep);
+
+    void * unalignedArea  = allocateCachedLargeObject(allocationSize);
+    if (!unalignedArea) {
+        unalignedArea = getRawMemory(allocationSize);
+        if (!unalignedArea)
+            return NULL; /* We can't get any more memory from the OS or executive */
+        STAT_increment(getThreadId(), ThreadCommonCounters, allocNewLargeObj);
+    }
+    void *alignedArea = (void*)alignUp((uintptr_t)unalignedArea+sizeof(LargeObjectHeader), alignment);
+    LargeObjectHeader *header = (LargeObjectHeader*)((uintptr_t)alignedArea-sizeof(LargeObjectHeader));
+    header->unalignedResult = unalignedArea;
+    header->mallocUniqueID=theMallocUniqueID;
+    header->unalignedSize = allocationSize;
+    header->objectSize = size;
+    MALLOC_ASSERT( isLargeObject(alignedArea), ASSERT_TEXT );
+    return alignedArea;
+}
+
+static bool freeLargeObjectToCache (LargeObjectHeader* header)
+{
+    size_t size = header->unalignedSize;
+    size_t idx = (size-blockSize)/largeObjectCacheStep;
+    if (idx<numLargeObjectBins) {
+        MALLOC_ASSERT( size%largeObjectCacheStep==0, ASSERT_TEXT );
+        uintptr_t currAge = cleanupCacheIfNeed ();
+        globalCachedObjectBins[idx].push(header->unalignedResult, currAge);
+
+        STAT_increment(getThreadId(), ThreadCommonCounters, cacheLargeObj);
+        return true;
+    }
+    return false;
+}
+
+static inline void freeLargeObject (void *object)
+{
+    LargeObjectHeader *header;
+    header = (LargeObjectHeader *)((uintptr_t)object - sizeof(LargeObjectHeader));
+    header->mallocUniqueID = 0;
+    if (!freeLargeObjectToCache(header)) {
+        freeRawMemory(header->unalignedResult, header->unalignedSize);
+        STAT_increment(getThreadId(), ThreadCommonCounters, freeLargeObj);
+    }
+}
+
+/*********** End allocation of large objects **********/
+
+
+static FreeObject *allocateFromFreeList(Block *mallocBlock)
+{
+    FreeObject *result;
+
+    if (!mallocBlock->freeList) {
+        return NULL;
+    }
+
+    result = mallocBlock->freeList;
+    MALLOC_ASSERT( result, ASSERT_TEXT );
+
+    mallocBlock->freeList = result->next;
+    MALLOC_ASSERT( mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT );
+    mallocBlock->allocatedCount++;
+    STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), allocFreeListUsed);
+
+    return result;
+}
+
+static FreeObject *allocateFromBumpPtr(Block *mallocBlock)
+{
+    FreeObject *result = mallocBlock->bumpPtr;
+    if (result) {
+        mallocBlock->bumpPtr =
+            (FreeObject *) ((uintptr_t) mallocBlock->bumpPtr - mallocBlock->objectSize);
+        if ( (uintptr_t)mallocBlock->bumpPtr < (uintptr_t)mallocBlock+sizeof(Block) ) {
+            mallocBlock->bumpPtr = NULL;
+        }
+        MALLOC_ASSERT( mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT );
+        mallocBlock->allocatedCount++;
+        STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), allocBumpPtrUsed);
+    }
+    return result;
+}
+
+inline static FreeObject* allocateFromBlock( Block *mallocBlock )
+{
+    FreeObject *result;
+
+    MALLOC_ASSERT( mallocBlock->owner == getThreadId(), ASSERT_TEXT );
+
+    /* for better cache locality, first looking in the free list. */
+    if ( (result = allocateFromFreeList(mallocBlock)) ) {
+        return result;
+    }
+    MALLOC_ASSERT( !mallocBlock->freeList, ASSERT_TEXT );
+
+    /* if free list is empty, try thread local bump pointer allocation. */
+    if ( (result = allocateFromBumpPtr(mallocBlock)) ) {
+        return result;
+    }
+    MALLOC_ASSERT( !mallocBlock->bumpPtr, ASSERT_TEXT );
+
+    /* the block is considered full. */
+    mallocBlock->isFull = 1;
+    return NULL;
+}
+
+static void moveBlockToBinFront(Block *block)
+{
+    Bin* bin = getAllocationBin(block->objectSize);
+    /* move the block to the front of the bin */
+    outofTLSBin(bin, block);
+    pushTLSBin(bin, block);
+}
+
+static void processLessUsedBlock(Block *block)
+{
+    Bin* bin = getAllocationBin(block->objectSize);
+    if (block != getActiveBlock(bin) && block != getActiveBlock(bin)->previous ) {
+        /* We are not actively using this block; return it to the general block pool */
+        outofTLSBin(bin, block);
+        returnEmptyBlock(block);
+    } else {
+        /* all objects are free - let's restore the bump pointer */
+        restoreBumpPtr(block);
+    }
+}
+
+/*
+ * All aligned allocations fall into one of the following categories:
+ *  1. if both request size and alignment are <= maxSegregatedObjectSize,
+ *       we just align the size up, and request this amount, because for every size
+ *       aligned to some power of 2, the allocated object is at least that aligned.
+ * 2. for bigger size, check if already guaranteed fittingAlignment is enough.
+ * 3. if size+alignment<minLargeObjectSize, we take an object of fittingSizeN and align
+ *       its address up; given such pointer, scalable_free could find the real object.
+ * 4. otherwise, aligned large object is allocated.
+ */
+static void *allocateAligned(size_t size, size_t alignment)
+{
+    MALLOC_ASSERT( isPowerOfTwo(alignment), ASSERT_TEXT );
+
+    void *result;
+    if (size<=maxSegregatedObjectSize && alignment<=maxSegregatedObjectSize)
+        result = scalable_malloc(alignUp(size? size: sizeof(size_t), alignment));
+    else if (alignment<=fittingAlignment)
+        result = scalable_malloc(size);
+    else if (size+alignment < minLargeObjectSize) {
+        void *unaligned = scalable_malloc(size+alignment);
+        if (!unaligned) return NULL;
+        result = alignUp(unaligned, alignment);
+    } else {
+        /* This can be the first allocation call. */
+        checkInitialization();
+        /* To correctly detect kind of allocation in scalable_free we need 
+           to distinguish memory allocated as large object.
+           This is done via alignment that is greater than can be found in Block.
+        */ 
+        result = mallocLargeObject(size, blockSize>alignment? blockSize: alignment);
+    }
+
+    MALLOC_ASSERT( isAligned(result, alignment), ASSERT_TEXT );
+    return result;
+}
+
+static void *reallocAligned(void *ptr, size_t size, size_t alignment = 0)
+{
+    void *result;
+    size_t copySize;
+
+    if (isLargeObject(ptr)) {
+        LargeObjectHeader* loh = (LargeObjectHeader *)((uintptr_t)ptr - sizeof(LargeObjectHeader));
+        MALLOC_ASSERT( loh->mallocUniqueID==theMallocUniqueID, ASSERT_TEXT );
+        copySize = loh->unalignedSize-((uintptr_t)ptr-(uintptr_t)loh->unalignedResult);
+        if (size <= copySize && (0==alignment || isAligned(ptr, alignment))) {
+            loh->objectSize = size;
+            return ptr;
+        } else {
+            copySize = loh->objectSize;
+            result = alignment ? allocateAligned(size, alignment) : scalable_malloc(size);
+        }
+    } else {
+        Block* block = (Block *)alignDown(ptr, blockSize);
+        MALLOC_ASSERT( block->mallocUniqueID==theMallocUniqueID, ASSERT_TEXT );
+        copySize = block->objectSize;
+        if (size <= copySize && (0==alignment || isAligned(ptr, alignment))) {
+            return ptr;
+        } else {
+            result = alignment ? allocateAligned(size, alignment) : scalable_malloc(size);
+        }
+    }
+    if (result) {
+        memcpy(result, ptr, copySize<size? copySize: size);
+        scalable_free(ptr);
+    }
+    return result;
+}
+
+/* A predicate checks if an object is properly placed inside its block */
+static inline bool isProperlyPlaced(const void *object, const Block *block)
+{
+    return 0 == ((uintptr_t)block + blockSize - (uintptr_t)object) % block->objectSize;
+}
+
+/* Finds the real object inside the block */
+static inline FreeObject *findAllocatedObject(const void *address, const Block *block)
+{
+    // calculate offset from the end of the block space
+    uintptr_t offset = (uintptr_t)block + blockSize - (uintptr_t)address;
+    MALLOC_ASSERT( offset<blockSize-sizeof(Block), ASSERT_TEXT );
+    // find offset difference from a multiple of allocation size
+    offset %= block->objectSize;
+    // and move the address down to where the real object starts.
+    return (FreeObject*)((uintptr_t)address - (offset? block->objectSize-offset: 0));
+}
+
+} // namespace internal
+} // namespace rml
+
+using namespace rml::internal;
+
+/*
+ * When a thread is shutting down this routine should be called to remove all the thread ids
+ * from the malloc blocks and replace them with a NULL thread id.
+ *
+ */
+#if MALLOC_TRACE
+static unsigned int threadGoingDownCount = 0;
+#endif
+
+/*
+ * for pthreads, the function is set as a callback in pthread_key_create for TLS bin.
+ * it will be automatically called at thread exit with the key value as the argument.
+ *
+ * for Windows, it should be called directly e.g. from DllMain; the argument can be NULL
+ * one should include "TypeDefinitions.h" for the declaration of this function.
+*/
+extern "C" void mallocThreadShutdownNotification(void* arg)
+{
+    Bin   *tls;
+    Block *threadBlock;
+    Block *threadlessBlock;
+    unsigned int index;
+
+    {
+        MallocMutex::scoped_lock lock( initAndShutMutex );
+        if ( mallocInitialized == 0 ) return;
+    }
+
+    TRACEF(( "[ScalableMalloc trace] Thread id %d blocks return start %d\n",
+             getThreadId(),  threadGoingDownCount++ ));
+#ifdef USE_WINTHREAD
+    tls = (Bin*)getThreadMallocTLS();
+#else
+    tls = (Bin*)arg;
+#endif
+    if (tls) {
+        for (index = 0; index < numBlockBins; index++) {
+            if (tls[index].activeBlk==NULL)
+                continue;
+            threadlessBlock = tls[index].activeBlk->previous;
+            while (threadlessBlock) {
+                threadBlock = threadlessBlock->previous;
+                if (threadlessBlock->allocatedCount==0 && threadlessBlock->publicFreeList==NULL) {
+                    /* we destroy the thread, no need to keep its TLS bin -> the second param is false */
+                    returnEmptyBlock(threadlessBlock, false);
+                } else {
+                    returnPartialBlock(tls+index, threadlessBlock);
+                }
+                threadlessBlock = threadBlock;
+            }
+            threadlessBlock = tls[index].activeBlk;
+            while (threadlessBlock) {
+                threadBlock = threadlessBlock->next;
+                if (threadlessBlock->allocatedCount==0 && threadlessBlock->publicFreeList==NULL) {
+                    /* we destroy the thread, no need to keep its TLS bin -> the second param is false */
+                    returnEmptyBlock(threadlessBlock, false);
+                } else {
+                    returnPartialBlock(tls+index, threadlessBlock);
+                }
+                threadlessBlock = threadBlock;
+            }
+            tls[index].activeBlk = 0;
+        }
+        bootStrapFree((void*)tls);
+        setThreadMallocTLS(NULL);
+    }
+
+    TRACEF(( "[ScalableMalloc trace] Thread id %d blocks return end\n", getThreadId() ));
+}
+
+extern "C" void mallocProcessShutdownNotification(void)
+{
+    // for now, this function is only necessary for dumping statistics
+#if COLLECT_STATISTICS
+    ThreadId nThreads = ThreadIdCount;
+    for( int i=1; i<=nThreads && i<MAX_THREADS; ++i )
+        STAT_print(i);
+#endif
+}
+
+/********* The malloc code          *************/
+
+extern "C" void * scalable_malloc(size_t size)
+{
+    Bin* bin;
+    Block * mallocBlock;
+    FreeObject *result;
+
+    if (!size) size = sizeof(size_t);
+
+    /* This returns only after malloc is initialized */
+    checkInitialization();
+
+    /*
+     * Use Large Object Allocation
+     */
+    if (size >= minLargeObjectSize) {
+        result = (FreeObject*)mallocLargeObject(size, blockSize);
+        if (!result) errno = ENOMEM;
+        return result;
+    }
+
+    /*
+     * Get an element in thread-local array corresponding to the given size;
+     * It keeps ptr to the active block for allocations of this size
+     */
+    bin = getAllocationBin(size);
+
+    /* Get the block of you want to try to allocate in. */
+    mallocBlock = getActiveBlock(bin);
+
+    if (mallocBlock) {
+        do {
+            if( (result = allocateFromBlock(mallocBlock)) ) {
+                return result;
+            }
+            // the previous block, if any, should be empty enough
+        } while( (mallocBlock = setPreviousBlockActive(bin)) );
+    }
+    MALLOC_ASSERT( !(bin->activeBlk) || bin->activeBlk->isFull==1, ASSERT_TEXT );
+
+    /*
+     * else privatize publicly freed objects in some block and allocate from it
+     */
+    mallocBlock = getPublicFreeListBlock( bin );
+    if (mallocBlock) {
+        if (emptyEnoughToUse(mallocBlock)) {
+            /* move the block to the front of the bin */
+            outofTLSBin(bin, mallocBlock);
+            pushTLSBin(bin, mallocBlock);
+        }
+        MALLOC_ASSERT( mallocBlock->freeList, ASSERT_TEXT );
+        if ( (result = allocateFromFreeList(mallocBlock)) ) {
+            return result;
+        }
+        /* Else something strange happened, need to retry from the beginning; */
+        TRACEF(( "[ScalableMalloc trace] Something is wrong: no objects in public free list; reentering.\n" ));
+        return scalable_malloc(size);
+    }
+
+    /*
+     * no suitable own blocks, try to get a partial block that some other thread has discarded.
+     */
+    mallocBlock = getPartialBlock(bin, size);
+    while (mallocBlock) {
+        pushTLSBin(bin, mallocBlock);
+// guaranteed by pushTLSBin: MALLOC_ASSERT( *bin==mallocBlock || (*bin)->previous==mallocBlock, ASSERT_TEXT );
+        setActiveBlock(bin, mallocBlock);
+        if( (result = allocateFromBlock(mallocBlock)) ) {
+            return result;
+        }
+        mallocBlock = getPartialBlock(bin, size);
+    }
+
+    /*
+     * else try to get a new empty block
+     */
+    mallocBlock = getEmptyBlock(size);
+    if (mallocBlock) {
+        pushTLSBin(bin, mallocBlock);
+// guaranteed by pushTLSBin: MALLOC_ASSERT( *bin==mallocBlock || (*bin)->previous==mallocBlock, ASSERT_TEXT );
+        setActiveBlock(bin, mallocBlock);
+        if( (result = allocateFromBlock(mallocBlock)) ) {
+            return result;
+        }
+        /* Else something strange happened, need to retry from the beginning; */
+        TRACEF(( "[ScalableMalloc trace] Something is wrong: no objects in empty block; reentering.\n" ));
+        return scalable_malloc(size);
+    }
+    /*
+     * else nothing works so return NULL
+     */
+    TRACEF(( "[ScalableMalloc trace] No memory found, returning NULL.\n" ));
+    errno = ENOMEM;
+    return NULL;
+}
+
+/********* End the malloc code      *************/
+
+/********* The free code            *************/
+
+extern "C" void scalable_free (void *object) {
+    Block *block;
+    ThreadId myTid;
+    FreeObject *objectToFree;
+
+    if (!object) {
+        return;
+    }
+
+    if (isLargeObject(object)) {
+        freeLargeObject(object);
+        return;
+    }
+
+    myTid = getThreadId();
+
+    block = (Block *)alignDown(object, blockSize);/* mask low bits to get the block */
+    MALLOC_ASSERT( block->mallocUniqueID == theMallocUniqueID, ASSERT_TEXT );
+    MALLOC_ASSERT( block->allocatedCount, ASSERT_TEXT );
+
+    // Due to aligned allocations, a pointer passed to scalable_free
+    // might differ from the address of internally allocated object.
+    // Small objects however should always be fine.    
+    if (block->objectSize <= maxSegregatedObjectSize)
+        objectToFree = (FreeObject*)object;
+    // "Fitting size" allocations are suspicious if aligned higher than naturally
+    else {
+        if ( ! isAligned(object,2*fittingAlignment) )
+        // TODO: the above check is questionable - it gives false negatives in ~50% cases,
+        //       so might even be slower in average than unconditional use of findAllocatedObject.
+        // here it should be a "real" object
+            objectToFree = (FreeObject*)object;
+        else
+        // here object can be an aligned address, so applying additional checks
+            objectToFree = findAllocatedObject(object, block);
+        MALLOC_ASSERT( isAligned(objectToFree,fittingAlignment), ASSERT_TEXT );
+    }
+    MALLOC_ASSERT( isProperlyPlaced(objectToFree, block), ASSERT_TEXT );
+
+    if (myTid == block->owner) {
+        objectToFree->next = block->freeList;
+        block->freeList = objectToFree;
+        block->allocatedCount--;
+        MALLOC_ASSERT( block->allocatedCount < (blockSize-sizeof(Block))/block->objectSize, ASSERT_TEXT );
+#if COLLECT_STATISTICS
+        if (getActiveBlock(getAllocationBin(block->objectSize)) != block)
+            STAT_increment(myTid, getIndex(block->objectSize), freeToInactiveBlock);
+        else
+            STAT_increment(myTid, getIndex(block->objectSize), freeToActiveBlock);
+#endif
+        if (block->isFull) {
+            if (emptyEnoughToUse(block))
+                moveBlockToBinFront(block);
+        } else {
+            if (block->allocatedCount==0 && block->publicFreeList==NULL)
+                processLessUsedBlock(block);
+        }
+    } else { /* Slower path to add to the shared list, the allocatedCount is updated by the owner thread in malloc. */
+        freePublicObject (block, objectToFree);
+    }
+}
+
+/* 
+ * Unsuccessful dereference is possible only here, not before this call. 
+ * Separate function created to isolate SEH code here, as it has bad influence
+ * on compiler optimization.
+ */
+static inline uint64_t safer_dereference (uint64_t *ptr)
+{
+    uint64_t id;
+#if _MSC_VER
+    __try {
+#endif
+        id = *ptr;
+#if _MSC_VER
+    } __except( GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION? 
+                EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH ) {
+        id = 0;
+    }
+#endif
+    return id;
+}
+
+/*
+ * A variant that provides additional memory safety, by checking whether the given address
+ * was obtained with this allocator, and if not redirecting to the provided alternative call.
+ */
+extern "C" void safer_scalable_free (void *object, void (*original_free)(void*)) 
+{
+    if (!object)
+        return;
+
+    // Check if the memory was allocated by scalable_malloc
+    uint64_t id =
+        safer_dereference( isLargeObject(object)?
+                           &((LargeObjectHeader*)((uintptr_t)object-sizeof(LargeObjectHeader)))->mallocUniqueID :
+                           &((Block *)alignDown(object, blockSize))->mallocUniqueID );
+
+    if (id==theMallocUniqueID)
+        scalable_free(object);
+    else if (original_free)
+        original_free(object);
+}
+
+/********* End the free code        *************/
+
+/********* Code for scalable_realloc       ***********/
+
+/*
+ * From K&R
+ * "realloc changes the size of the object pointed to by p to size. The contents will
+ * be unchanged up to the minimum of the old and the new sizes. If the new size is larger,
+ * the new space is uninitialized. realloc returns a pointer to the new space, or
+ * NULL if the request cannot be satisfied, in which case *p is unchanged."
+ *
+ */
+extern "C" void* scalable_realloc(void* ptr, size_t size)
+{
+    /* corner cases left out of reallocAligned to not deal with errno there */
+    if (!ptr) {
+        return scalable_malloc(size);
+    }
+    if (!size) {
+        scalable_free(ptr);
+        return NULL;
+    }
+    void* tmp = reallocAligned(ptr, size, 0);
+    if (!tmp) errno = ENOMEM;
+    return tmp;
+}
+
+/*
+ * A variant that provides additional memory safety, by checking whether the given address
+ * was obtained with this allocator, and if not redirecting to the provided alternative call.
+ */
+extern "C" void* safer_scalable_realloc (void* ptr, size_t sz, void* (*original_realloc)(void*,size_t)) 
+{
+    if (!ptr) {
+        return scalable_malloc(sz);
+    }
+    // Check if the memory was allocated by scalable_malloc
+    uint64_t id =
+        safer_dereference( isLargeObject(ptr)?
+                           &((LargeObjectHeader*)((uintptr_t)ptr-sizeof(LargeObjectHeader)))->mallocUniqueID :
+                           &((Block *)alignDown(ptr, blockSize))->mallocUniqueID );
+
+    if (id==theMallocUniqueID) {
+        if (!sz) {
+            scalable_free(ptr);
+            return NULL;
+        }
+        void* tmp = reallocAligned(ptr, sz, 0);
+        if (!tmp) errno = ENOMEM;
+        return tmp;
+    }
+    else if (original_realloc)
+        return original_realloc(ptr,sz);
+#if USE_WINTHREAD
+    // old memory is leaked, not much can be done with it, as original_free is not available
+    else if (sz) {
+        // tring to find maximal size of safe copy
+        MEMORY_BASIC_INFORMATION memInfo;
+        if (sizeof(memInfo) != VirtualQuery(ptr, &memInfo, sizeof(memInfo)))
+            return NULL;
+        size_t oldSize = 
+            memInfo.RegionSize - ((uintptr_t)ptr - (uintptr_t)memInfo.BaseAddress);
+        void *newBuf = scalable_malloc(sz);
+        memcpy(newBuf, ptr, sz<oldSize? sz : oldSize);
+        return newBuf;
+    }
+#endif
+    return NULL;
+}
+
+/********* End code for scalable_realloc   ***********/
+
+/********* Code for scalable_calloc   ***********/
+
+/*
+ * From K&R
+ * calloc returns a pointer to space for an array of nobj objects, 
+ * each of size size, or NULL if the request cannot be satisfied. 
+ * The space is initialized to zero bytes.
+ *
+ */
+
+extern "C" void * scalable_calloc(size_t nobj, size_t size)
+{
+    size_t arraySize = nobj * size;
+    void* result = scalable_malloc(arraySize);
+    if (result)
+        memset(result, 0, arraySize);
+    return result;
+}
+
+/********* End code for scalable_calloc   ***********/
+
+/********* Code for aligned allocation API **********/
+
+extern "C" int scalable_posix_memalign(void **memptr, size_t alignment, size_t size)
+{
+    if ( !isPowerOfTwoMultiple(alignment, sizeof(void*)) )
+        return EINVAL;
+    void *result = allocateAligned(size, alignment);
+    if (!result)
+        return ENOMEM;
+    *memptr = result;
+    return 0;
+}
+
+extern "C" void * scalable_aligned_malloc(size_t size, size_t alignment)
+{
+    if (!isPowerOfTwo(alignment) || 0==size) {
+        errno = EINVAL;
+        return NULL;
+    }
+    void* tmp = allocateAligned(size, alignment);
+    if (!tmp) 
+        errno = ENOMEM;
+    return tmp;
+}
+
+extern "C" void * scalable_aligned_realloc(void *ptr, size_t size, size_t alignment)
+{
+    /* corner cases left out of reallocAligned to not deal with errno there */
+    if (!isPowerOfTwo(alignment)) {
+        errno = EINVAL;
+        return NULL;
+    }
+    if (!ptr) {
+        return allocateAligned(size, alignment);
+    }
+    // Check if the memory was allocated by scalable_malloc
+    uint64_t id = isLargeObject(ptr)?
+                    ((LargeObjectHeader*)((uintptr_t)ptr-sizeof(LargeObjectHeader)))->mallocUniqueID:
+                    ((Block *)alignDown(ptr, blockSize))->mallocUniqueID;
+    if (!size) {
+        if (id==theMallocUniqueID)
+            scalable_free(ptr);
+        return NULL;
+    }
+    if (id!=theMallocUniqueID)
+        return NULL;
+
+    void* tmp = reallocAligned(ptr, size, alignment);
+    if (!tmp) errno = ENOMEM;
+    return tmp;
+}
+
+/********* End code for scalable_aligned_realloc   ***********/
+
+extern "C" void scalable_aligned_free(void *ptr)
+{
+    scalable_free(ptr);
+}
+
+/********* end code for aligned allocation API **********/
+
+/********* Code for scalable_msize       ***********/
+
+/*
+ * Returns the size of a memory block allocated in the heap.
+ */
+extern "C" size_t scalable_msize(void* ptr)
+{
+    if (ptr) {
+        if (isLargeObject(ptr)) {
+            LargeObjectHeader* loh = (LargeObjectHeader*)((uintptr_t)ptr - sizeof(LargeObjectHeader));
+            if (loh->mallocUniqueID==theMallocUniqueID)
+                return loh->unalignedSize-((uintptr_t)ptr-(uintptr_t)loh->unalignedResult);
+        } else {
+            Block* block = (Block *)alignDown(ptr, blockSize);
+            if (block->mallocUniqueID==theMallocUniqueID)
+                return block->objectSize;
+        }
+    }
+    errno = EINVAL;
+    // Unlike _msize, return 0 in case of parameter error.
+    // Returning size_t(-1) looks more like the way to troubles.
+    return 0;
+}
+
+/********* End code for scalable_msize   ***********/
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/Statistics.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/Statistics.h
new file mode 100644 (file)
index 0000000..6eeff1a
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#define MAX_THREADS 1024
+#define NUM_OF_BINS 30
+#define ThreadCommonCounters NUM_OF_BINS
+
+enum counter_type {
+    allocBlockNew = 0,
+    allocBlockPublic,
+    allocBumpPtrUsed,
+    allocFreeListUsed,
+    allocPrivatized,
+    examineEmptyEnough,
+    examineNotEmpty,
+    freeRestoreBumpPtr,
+    freeByOtherThread,
+    freeToActiveBlock,
+    freeToInactiveBlock,
+    freeBlockPublic,
+    freeBlockBack,
+    MaxCounters
+};
+enum common_counter_type {
+    allocNewLargeObj = 0,
+    allocCachedLargeObj,
+    cacheLargeObj,
+    freeLargeObj,
+    lockPublicFreeList,
+    freeToOtherThread
+};
+
+#if COLLECT_STATISTICS
+/* Statistics reporting callback registred via a static object dtor 
+   on Posix or DLL_PROCESS_DETACH on Windows.
+ */
+
+static bool reportAllocationStatistics;
+
+struct bin_counters {
+    int counter[MaxCounters];
+};
+
+static bin_counters statistic[MAX_THREADS][NUM_OF_BINS+1]; //zero-initialized;
+
+static inline int STAT_increment(int thread, int bin, int ctr)
+{
+    return reportAllocationStatistics && thread < MAX_THREADS ? ++(statistic[thread][bin].counter[ctr]) : 0;
+}
+
+static inline void initStatisticsCollection() {
+#if defined(MALLOCENV_COLLECT_STATISTICS)
+    if (NULL != getenv(MALLOCENV_COLLECT_STATISTICS))
+        reportAllocationStatistics = true;
+#endif
+}
+
+#else
+#define STAT_increment(a,b,c) ((void)0)
+#endif /* COLLECT_STATISTICS */
+
+static inline void STAT_print(int thread)
+{
+#if COLLECT_STATISTICS
+    if (!reportAllocationStatistics)
+        return;
+
+    char filename[100];
+#if USE_PTHREAD
+    sprintf(filename, "stat_ScalableMalloc_proc%04d_thr%04d.log", getpid(), thread);
+#else
+    sprintf(filename, "stat_ScalableMalloc_thr%04d.log", thread);
+#endif
+    FILE* outfile = fopen(filename, "w");
+    for(int i=0; i<NUM_OF_BINS; ++i)
+    {
+        bin_counters& ctrs = statistic[thread][i];
+        fprintf(outfile, "Thr%04d Bin%02d", thread, i);
+        fprintf(outfile, ": allocNewBlocks %5d", ctrs.counter[allocBlockNew]);
+        fprintf(outfile, ", allocPublicBlocks %5d", ctrs.counter[allocBlockPublic]);
+        fprintf(outfile, ", restoreBumpPtr %5d", ctrs.counter[freeRestoreBumpPtr]);
+        fprintf(outfile, ", privatizeCalled %10d", ctrs.counter[allocPrivatized]);
+        fprintf(outfile, ", emptyEnough %10d", ctrs.counter[examineEmptyEnough]);
+        fprintf(outfile, ", notEmptyEnough %10d", ctrs.counter[examineNotEmpty]);
+        fprintf(outfile, ", freeBlocksPublic %5d", ctrs.counter[freeBlockPublic]);
+        fprintf(outfile, ", freeBlocksBack %5d", ctrs.counter[freeBlockBack]);
+        fprintf(outfile, "\n");
+    }
+    for(int i=0; i<NUM_OF_BINS; ++i)
+    {
+        bin_counters& ctrs = statistic[thread][i];
+        fprintf(outfile, "Thr%04d Bin%02d", thread, i);
+        fprintf(outfile, ": allocBumpPtr %10d", ctrs.counter[allocBumpPtrUsed]);
+        fprintf(outfile, ", allocFreeList %10d", ctrs.counter[allocFreeListUsed]);
+        fprintf(outfile, ", freeToActiveBlk %10d", ctrs.counter[freeToActiveBlock]);
+        fprintf(outfile, ", freeToInactive  %10d", ctrs.counter[freeToInactiveBlock]);
+        fprintf(outfile, ", freedByOther %10d", ctrs.counter[freeByOtherThread]);
+        fprintf(outfile, "\n");
+    }
+    bin_counters& ctrs = statistic[thread][ThreadCommonCounters];
+    fprintf(outfile, "Thr%04d common counters", thread);
+    fprintf(outfile, ": allocNewLargeObject %5d", ctrs.counter[allocNewLargeObj]);
+    fprintf(outfile, ": allocCachedLargeObject %5d", ctrs.counter[allocCachedLargeObj]);
+    fprintf(outfile, ", cacheLargeObject %5d", ctrs.counter[cacheLargeObj]);
+    fprintf(outfile, ", freeLargeObject %5d", ctrs.counter[freeLargeObj]);
+    fprintf(outfile, ", lockPublicFreeList %5d", ctrs.counter[lockPublicFreeList]);
+    fprintf(outfile, ", freeToOtherThread %10d", ctrs.counter[freeToOtherThread]);
+    fprintf(outfile, "\n");
+
+    fclose(outfile);
+#endif
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/TypeDefinitions.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/TypeDefinitions.h
new file mode 100644 (file)
index 0000000..0fa9580
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef _itt_shared_malloc_TypeDefinitions_H_
+#define _itt_shared_malloc_TypeDefinitions_H_
+
+// Define preprocessor symbols used to determine architecture
+#if _WIN32||_WIN64
+#   if defined(_M_AMD64)
+#       define __ARCH_x86_64 1
+#   elif defined(_M_IA64)
+#       define __ARCH_ipf 1
+#   elif defined(_M_IX86)||defined(__i386__) // the latter for MinGW support
+#       define __ARCH_x86_32 1
+#   else
+#       error Unknown processor architecture for Windows
+#   endif
+#   define USE_WINTHREAD 1
+#else /* Assume generic Unix */
+#   if __x86_64__
+#       define __ARCH_x86_64 1
+#   elif __ia64__
+#       define __ARCH_ipf 1
+#   elif __i386__ || __i386
+#       define __ARCH_x86_32 1
+#   else
+#       define __ARCH_other 1
+#   endif
+#   define USE_PTHREAD 1
+#endif
+
+// Include files containing declarations of intptr_t and uintptr_t
+#if _MSC_VER
+#include <stddef.h>
+typedef unsigned __int32 uint32_t;
+typedef unsigned __int64 uint64_t;
+#else
+#include <stdint.h>
+#endif
+
+//! PROVIDE YOUR OWN Customize.h IF YOU FEEL NECESSARY
+#include "Customize.h"
+
+/*
+ * Functions to align an integer down or up to the given power of two,
+ * and test for such an alignment, and for power of two.
+ */
+template<typename T>
+static inline T alignDown(T arg, uintptr_t alignment) {
+    return T( (uintptr_t)arg                & ~(alignment-1));
+}
+template<typename T>
+static inline T alignUp  (T arg, uintptr_t alignment) {
+    return T(((uintptr_t)arg+(alignment-1)) & ~(alignment-1));
+    // /*is this better?*/ return (((uintptr_t)arg-1) | (alignment-1)) + 1;
+}
+template<typename T>
+static inline bool isAligned(T arg, uintptr_t alignment) {
+    return 0==((uintptr_t)arg & (alignment-1));
+}
+static inline bool isPowerOfTwo(uintptr_t arg) {
+    return arg && (0==(arg & (arg-1)));
+}
+static inline bool isPowerOfTwoMultiple(uintptr_t arg, uintptr_t divisor) {
+    // Divisor is assumed to be a power of two (which is valid for current uses).
+    MALLOC_ASSERT( isPowerOfTwo(divisor), "Divisor should be a power of two" );
+    return arg && (0==(arg & (arg-divisor)));
+}
+
+namespace rml {
+namespace internal {
+
+void lockRecursiveMallocFlag();
+void unlockRecursiveMallocFlag();
+
+extern bool  original_malloc_found;
+extern void* (*original_malloc_ptr)(size_t);
+extern void  (*original_free_ptr)(void*);
+
+} } // namespaces
+
+#endif /* _itt_shared_malloc_TypeDefinitions_H_ */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/lin-tbbmalloc-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/lin-tbbmalloc-export.def
new file mode 100644 (file)
index 0000000..8613438
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+{
+global:
+
+scalable_calloc;
+scalable_free;
+scalable_malloc;
+scalable_realloc;
+scalable_posix_memalign;
+scalable_aligned_malloc;
+scalable_aligned_realloc;
+scalable_aligned_free;
+__TBB_internal_calloc;
+__TBB_internal_free;
+__TBB_internal_malloc;
+__TBB_internal_realloc;
+__TBB_internal_posix_memalign;
+
+local:
+
+/* TBB symbols */
+*3rml8internal*;
+*3tbb*;
+*__TBB*;
+__itt_*;
+ITT_DoOneTimeInitialization;
+TBB_runtime_interface_version;
+
+/* Intel Compiler (libirc) symbols */
+__intel_*;
+_intel_*;
+get_memcpy_largest_cachelinesize;
+get_memcpy_largest_cache_size;
+get_mem_ops_method;
+init_mem_ops_method;
+irc__get_msg;
+irc__print;
+override_mem_ops_method;
+set_memcpy_largest_cachelinesize;
+set_memcpy_largest_cache_size;
+
+};
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/lin32-proxy-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/lin32-proxy-export.def
new file mode 100644 (file)
index 0000000..16411ce
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+{
+global:
+calloc;
+free;
+malloc;
+realloc;
+posix_memalign;
+memalign;
+valloc;
+pvalloc;
+mallinfo;
+mallopt;
+__TBB_malloc_proxy;
+__TBB_internal_find_original_malloc;
+_ZdaPv; /* next ones are new/delete */
+_ZdaPvRKSt9nothrow_t;
+_ZdlPv;
+_ZdlPvRKSt9nothrow_t;
+_Znaj;
+_ZnajRKSt9nothrow_t;
+_Znwj;
+_ZnwjRKSt9nothrow_t;
+
+local:
+
+/* TBB symbols */
+*3rml8internal*;
+*3tbb*;
+*__TBB*;
+
+};
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/lin64-proxy-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/lin64-proxy-export.def
new file mode 100644 (file)
index 0000000..21a0f08
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+{
+global:
+calloc;
+free;
+malloc;
+realloc;
+posix_memalign;
+memalign;
+valloc;
+pvalloc;
+mallinfo;
+mallopt;
+__TBB_malloc_proxy;
+__TBB_internal_find_original_malloc;
+_ZdaPv;  /* next ones are new/delete */
+_ZdaPvRKSt9nothrow_t;
+_ZdlPv;
+_ZdlPvRKSt9nothrow_t;
+_Znam;
+_ZnamRKSt9nothrow_t;
+_Znwm;
+_ZnwmRKSt9nothrow_t;
+
+local:
+
+/* TBB symbols */
+*3rml8internal*;
+*3tbb*;
+*__TBB*;
+
+};
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/lin64ipf-proxy-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/lin64ipf-proxy-export.def
new file mode 100644 (file)
index 0000000..21a0f08
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+{
+global:
+calloc;
+free;
+malloc;
+realloc;
+posix_memalign;
+memalign;
+valloc;
+pvalloc;
+mallinfo;
+mallopt;
+__TBB_malloc_proxy;
+__TBB_internal_find_original_malloc;
+_ZdaPv;  /* next ones are new/delete */
+_ZdaPvRKSt9nothrow_t;
+_ZdlPv;
+_ZdlPvRKSt9nothrow_t;
+_Znam;
+_ZnamRKSt9nothrow_t;
+_Znwm;
+_ZnwmRKSt9nothrow_t;
+
+local:
+
+/* TBB symbols */
+*3rml8internal*;
+*3tbb*;
+*__TBB*;
+
+};
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/mac32-tbbmalloc-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/mac32-tbbmalloc-export.def
new file mode 100644 (file)
index 0000000..6736ba0
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# MemoryAllocator.cpp
+_scalable_calloc
+_scalable_free
+_scalable_malloc
+_scalable_realloc
+_scalable_posix_memalign
+_scalable_aligned_malloc
+_scalable_aligned_realloc
+_scalable_aligned_free
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/mac64-tbbmalloc-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/mac64-tbbmalloc-export.def
new file mode 100644 (file)
index 0000000..6736ba0
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction.  Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License.  This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# MemoryAllocator.cpp
+_scalable_calloc
+_scalable_free
+_scalable_malloc
+_scalable_realloc
+_scalable_posix_memalign
+_scalable_aligned_malloc
+_scalable_aligned_realloc
+_scalable_aligned_free
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/proxy.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/proxy.cpp
new file mode 100644 (file)
index 0000000..ff27603
--- /dev/null
@@ -0,0 +1,352 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "proxy.h"
+
+#if MALLOC_LD_PRELOAD
+
+/*** service functions and variables ***/
+
+#include <unistd.h> // for sysconf
+#include <dlfcn.h>
+
+static long memoryPageSize;
+
+static inline void initPageSize()
+{
+    memoryPageSize = sysconf(_SC_PAGESIZE);
+}
+
+/* For the expected behaviour (i.e., finding malloc/free/etc from libc.so, 
+   not from ld-linux.so) dlsym(RTLD_NEXT) should be called from 
+   a LD_PRELOADed library, not another dynamic library.
+   So we have to put find_original_malloc here.
+ */
+extern "C" bool __TBB_internal_find_original_malloc(int num, const char *names[],
+                                                        void *ptrs[])
+{
+    for (int i=0; i<num; i++)
+        if (NULL == (ptrs[i] = dlsym (RTLD_NEXT, names[i])))
+            return false;
+
+    return true;
+}
+
+/* __TBB_malloc_proxy used as a weak symbol by libtbbmalloc for: 
+   1) detection that the proxy library is loaded
+   2) check that dlsym("malloc") found something different from our replacement malloc
+*/
+extern "C" void *__TBB_malloc_proxy() __attribute__ ((alias ("malloc")));
+
+#ifndef __THROW
+#define __THROW
+#endif
+
+/*** replacements for malloc and the family ***/
+
+extern "C" {
+
+void *malloc(size_t size) __THROW
+{
+    return __TBB_internal_malloc(size);
+}
+
+void * calloc(size_t num, size_t size) __THROW
+{
+    return __TBB_internal_calloc(num, size);
+}
+
+void free(void *object) __THROW
+{
+    __TBB_internal_free(object);
+}
+
+void * realloc(void* ptr, size_t sz) __THROW
+{
+    return __TBB_internal_realloc(ptr, sz);
+}
+
+int posix_memalign(void **memptr, size_t alignment, size_t size) __THROW
+{
+    return __TBB_internal_posix_memalign(memptr, alignment, size);
+}
+
+/* The older *NIX interface for aligned allocations;
+   it's formally substituted by posix_memalign and deprecated,
+   so we do not expect it to cause cyclic dependency with C RTL. */
+void * memalign(size_t alignment, size_t size)  __THROW
+{
+    return scalable_aligned_malloc(size, alignment);
+}
+
+/* valloc allocates memory aligned on a page boundary */
+void * valloc(size_t size) __THROW
+{
+    if (! memoryPageSize) initPageSize();
+
+    return scalable_aligned_malloc(size, memoryPageSize);
+}
+
+/* pvalloc allocates smallest set of complete pages which can hold 
+   the requested number of bytes. Result is aligned on page boundary. */
+void * pvalloc(size_t size) __THROW
+{
+    if (! memoryPageSize) initPageSize();
+       // align size up to the page size
+       size = ((size-1) | (memoryPageSize-1)) + 1;
+
+    return scalable_aligned_malloc(size, memoryPageSize);
+}
+
+int mallopt(int /*param*/, int /*value*/) __THROW
+{
+    return 1;
+}
+
+} /* extern "C" */
+
+#if __linux__
+#include <malloc.h>
+#include <string.h> // for memset
+
+extern "C" struct mallinfo mallinfo() __THROW
+{
+    struct mallinfo m;
+    memset(&m, 0, sizeof(struct mallinfo));
+
+    return m;
+}
+#endif /* __linux__ */
+
+/*** replacements for global operators new and delete ***/
+
+#include <new>
+
+void * operator new(size_t sz) throw (std::bad_alloc) {
+    void *res = scalable_malloc(sz);
+    if (NULL == res) throw std::bad_alloc();
+    return res;
+}
+void* operator new[](size_t sz) throw (std::bad_alloc) {
+    void *res = scalable_malloc(sz);
+    if (NULL == res) throw std::bad_alloc();
+    return res;
+}
+void operator delete(void* ptr) throw() {
+    scalable_free(ptr);
+}
+void operator delete[](void* ptr) throw() {
+    scalable_free(ptr);
+}
+void* operator new(size_t sz, const std::nothrow_t&) throw() {
+    return scalable_malloc(sz);
+}
+void* operator new[](std::size_t sz, const std::nothrow_t&) throw() {
+    return scalable_malloc(sz);
+}
+void operator delete(void* ptr, const std::nothrow_t&) throw() {
+    scalable_free(ptr);
+}
+void operator delete[](void* ptr, const std::nothrow_t&) throw() {
+    scalable_free(ptr);
+}
+
+#endif /* MALLOC_LD_PRELOAD */
+
+
+#ifdef _WIN32
+#include <windows.h>
+
+#include <stdio.h>
+#include "tbb_function_replacement.h"
+
+extern "C" void safer_scalable_free( void *ptr, void*);
+extern "C" void* safer_scalable_realloc( void *ptr, size_t, void* );
+
+void safer_scalable_free2( void *ptr)
+    {
+    safer_scalable_free( ptr, NULL );
+    }
+void* safer_scalable_realloc2( void *ptr, size_t size )
+    {
+    return safer_scalable_realloc( ptr, size, NULL );
+    }
+
+/*** replacements for global operators new and delete ***/
+
+#include <new>
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning( push )
+#pragma warning( disable : 4290 )
+#endif
+
+void * operator_new(size_t sz) throw (std::bad_alloc) {
+    void *res = scalable_malloc(sz);
+    if (NULL == res) throw std::bad_alloc();
+    return res;
+}
+void* operator_new_arr(size_t sz) throw (std::bad_alloc) {
+    void *res = scalable_malloc(sz);
+    if (NULL == res) throw std::bad_alloc();
+    return res;
+}
+void operator_delete(void* ptr) throw() {
+    safer_scalable_free2(ptr);
+}
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning( pop )
+#endif
+
+void operator_delete_arr(void* ptr) throw() {
+    safer_scalable_free2(ptr);
+}
+void* operator_new_t(size_t sz, const std::nothrow_t&) throw() {
+    return scalable_malloc(sz);
+}
+void* operator_new_arr_t(std::size_t sz, const std::nothrow_t&) throw() {
+    return scalable_malloc(sz);
+}
+void operator_delete_t(void* ptr, const std::nothrow_t&) throw() {
+    safer_scalable_free2(ptr);
+}
+void operator_delete_arr_t(void* ptr, const std::nothrow_t&) throw() {
+    safer_scalable_free2(ptr);
+}
+
+const char* modules_to_replace[] = {
+    "msvcr80d.dll",
+    "msvcr80.dll",
+    "msvcr90d.dll",
+    "msvcr90.dll",
+    "msvcr70d.dll",
+    "msvcr70.dll",
+    "msvcr71d.dll",
+    "msvcr71.dll",
+    };
+
+/*
+We need to replace following functions:
+malloc
+calloc
+realloc
+free
+_msize
+_aligned_malloc
+_aligned_realloc
+_aligned_free
+??2@YAPAXI@Z      operator new                         (ia32)
+??_U@YAPAXI@Z     void * operator new[] (size_t size)  (ia32)
+??3@YAXPAX@Z      operator delete                      (ia32)  
+??_V@YAXPAX@Z     operator delete[]                    (ia32)
+??2@YAPEAX_K@Z    void * operator new(unsigned __int64)   (intel64)
+??_V@YAXPEAX@Z    void * operator new[](unsigned __int64) (intel64)
+??3@YAXPEAX@Z     operator delete                         (intel64)  
+??_V@YAXPEAX@Z    operator delete[]                       (intel64)
+??2@YAPAXIABUnothrow_t@std@@@Z      void * operator new (size_t sz, const std::nothrow_t&) throw()  (optional)
+??_U@YAPAXIABUnothrow_t@std@@@Z     void * operator new[] (size_t sz, const std::nothrow_t&) throw() (optional)
+*/
+
+typedef struct FRData_t {
+    //char *_module;
+    const char *_func;
+    FUNCPTR _fptr;
+    FRR_ON_ERROR _on_error;
+} FRDATA;
+
+FRDATA routines_to_replace[] = {
+    { "malloc",  (FUNCPTR)scalable_malloc, FRR_FAIL },
+    { "calloc",  (FUNCPTR)scalable_calloc, FRR_FAIL },
+    { "realloc", (FUNCPTR)safer_scalable_realloc2, FRR_FAIL },
+    { "free",    (FUNCPTR)safer_scalable_free2, FRR_FAIL },
+    { "_msize",  (FUNCPTR)scalable_msize, FRR_FAIL },
+    { "_aligned_malloc",  (FUNCPTR)scalable_aligned_malloc, FRR_FAIL },
+    { "_aligned_realloc", (FUNCPTR)scalable_aligned_realloc, FRR_FAIL },
+    { "_aligned_free",    (FUNCPTR)safer_scalable_free2, FRR_FAIL },
+#if _WIN64
+    { "??2@YAPEAX_K@Z", (FUNCPTR)operator_new, FRR_FAIL },
+    { "??_U@YAPEAX_K@Z", (FUNCPTR)operator_new_arr, FRR_FAIL },
+    { "??3@YAXPEAX@Z", (FUNCPTR)operator_delete, FRR_FAIL },
+    { "??_V@YAXPEAX@Z", (FUNCPTR)operator_delete_arr, FRR_FAIL },
+#else 
+    { "??2@YAPAXI@Z", (FUNCPTR)operator_new, FRR_FAIL },
+    { "??_U@YAPAXI@Z", (FUNCPTR)operator_new_arr, FRR_FAIL },
+    { "??3@YAXPAX@Z", (FUNCPTR)operator_delete, FRR_FAIL },
+    { "??_V@YAXPAX@Z", (FUNCPTR)operator_delete_arr, FRR_FAIL },
+#endif
+    { "??2@YAPAXIABUnothrow_t@std@@@Z", (FUNCPTR)operator_new_t, FRR_IGNORE },
+    { "??_U@YAPAXIABUnothrow_t@std@@@Z", (FUNCPTR)operator_new_arr_t, FRR_IGNORE }
+};
+
+void doMallocReplacement()
+{
+    int i,j;
+
+    // Replace malloc functions
+    int modules_to_replace_count = sizeof(modules_to_replace) / sizeof(modules_to_replace[0]);
+    int routines_to_replace_count = sizeof(routines_to_replace) / sizeof(routines_to_replace[0]);
+    for ( j=0; j<modules_to_replace_count; j++ )
+        for (i = 0; i < routines_to_replace_count; i++)
+        {
+            FRR_TYPE type = ReplaceFunction( modules_to_replace[j], routines_to_replace[i]._func, routines_to_replace[i]._fptr );
+            if (type == FRR_NODLL) break;
+            if (type != FRR_OK && routines_to_replace[i]._on_error==FRR_FAIL)
+            {
+                fprintf(stderr, "Failed to replace function %s in module %s\n",
+                        routines_to_replace[i]._func, modules_to_replace[j]);
+                exit(1);
+            }
+        }
+
+}
+
+extern "C" BOOL WINAPI DllMain( HINSTANCE hInst, DWORD callReason, LPVOID reserved )
+{
+
+    if ( callReason==DLL_PROCESS_ATTACH && reserved && hInst ) {
+#if TBBMALLOC_USE_TBB_FOR_ALLOCATOR_ENV_CONTROLLED
+        char pinEnvVariable[50];
+        if( GetEnvironmentVariable("TBBMALLOC_USE_TBB_FOR_ALLOCATOR", pinEnvVariable, 50))
+        {
+            doMallocReplacement();
+        }
+#else
+        doMallocReplacement();
+#endif
+    }
+
+    return TRUE;
+}
+
+// Just to make the linker happy and link the DLL to the application
+extern "C" __declspec(dllexport) void __TBB_malloc_proxy()
+{
+
+}
+
+#endif //_WIN32
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/proxy.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/proxy.h
new file mode 100644 (file)
index 0000000..67bd1bb
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef _TBB_malloc_proxy_H_
+#define _TBB_malloc_proxy_H_
+
+#if __linux__
+#define MALLOC_LD_PRELOAD 1
+#endif
+
+#include <stddef.h>
+
+extern "C" {
+    void * scalable_malloc(size_t size);
+    void * scalable_calloc(size_t nobj, size_t size);
+    void   scalable_free(void *ptr);
+    void * scalable_realloc(void* ptr, size_t size);
+    void * scalable_aligned_malloc(size_t size, size_t alignment);
+    void * scalable_aligned_realloc(void* ptr, size_t size, size_t alignment);
+    int    scalable_posix_memalign(void **memptr, size_t alignment, size_t size);
+    size_t scalable_msize(void *ptr);
+
+    void * __TBB_internal_malloc(size_t size);
+    void * __TBB_internal_calloc(size_t num, size_t size);
+    void   __TBB_internal_free(void *ptr);
+    void * __TBB_internal_realloc(void* ptr, size_t sz);
+    int    __TBB_internal_posix_memalign(void **memptr, size_t alignment, size_t size);
+    
+    bool   __TBB_internal_find_original_malloc(int num, const char *names[], void *table[]);
+} // extern "C"
+
+#endif /* _TBB_malloc_proxy_H_ */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/tbb_function_replacement.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/tbb_function_replacement.cpp
new file mode 100644 (file)
index 0000000..0a2b528
--- /dev/null
@@ -0,0 +1,366 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+//We works on windows only
+#ifdef _WIN32
+#define _CRT_SECURE_NO_DEPRECATE 1
+
+#include <windows.h>
+#include <new>
+#include "tbb_function_replacement.h"
+
+inline UINT_PTR Ptr2Addrint(LPVOID ptr)
+{
+    Int2Ptr i2p;
+    i2p.lpv = ptr;
+    return i2p.uip;
+}
+
+inline LPVOID Addrint2Ptr(UINT_PTR ptr)
+{
+    Int2Ptr i2p;
+    i2p.uip = ptr;
+    return i2p.lpv;
+}
+
+// Use this value as the maximum size the trampoline region
+const int MAX_PROBE_SIZE = 16;
+
+// The size of a jump relative instruction "e9 00 00 00 00"
+const int SIZE_OF_RELJUMP = 5;
+
+// The size of jump RIP relative indirect "ff 25 00 00 00 00"
+const int SIZE_OF_INDJUMP = 6;
+
+// The size of address we put in the location (in Intel64)
+const int SIZE_OF_ADDRESS = 8;
+
+// The max distance covered in 32 bits: 2^31 - 1 - C
+// where C should not be smaller than any of SIZE_OF_* costants.
+// The latter is important to correctly handle "backward" jumps.
+const __int64 MAX_DISTANCE = (((__int64)1 << 31) - 1) - SIZE_OF_ADDRESS;
+
+// The maximum number of distinct buffers in memory
+const int MAX_NUM_BUFFERS = 256;
+
+// Is the distance between addr1 and addr2 smaller than dist
+inline bool IsInDistance(UINT_PTR addr1, UINT_PTR addr2, __int64 dist)
+{
+    __int64 diff = addr1>addr2 ? addr1-addr2 : addr2-addr1;
+    return diff<dist;
+}
+
+/*
+ * When inserting a probe in 64 bits process the distance between the insertion
+ * point and the target may be bigger than 2^32. In this case we are using 
+ * indirect jump through memory where the offset to this memory location
+ * is smaller than 2^32 and it contains the absolute address (8 bytes).
+ *
+ * This class is used to hold the pages used for the above trampolines.
+ * Since this utility will be used to replace malloc functions this implementation
+ * doesn't allocate memory dynamically.
+ *
+ * The struct MemoryBuffer holds the data about a page in the memory used for
+ * replacing functions in Intel64 where the target is too far to be replaced
+ * with a short jump. All the calculations of m_base and m_next are in a multiple
+ * of SIZE_OF_ADDRESS (which is 8 in Win64).
+ */
+class MemoryProvider {
+private:
+    struct MemoryBuffer {
+        UINT_PTR m_base;    // base address of the buffer
+        UINT_PTR m_next;    // next free location in the buffer
+        DWORD    m_size;    // size of buffer
+
+        // Default constructor
+        MemoryBuffer() : m_base(0), m_next(0), m_size(0) {}
+
+        // Constructor
+        MemoryBuffer(void *base, DWORD size)
+        {
+            m_base = Ptr2Addrint(base);
+            m_next = m_base;
+            m_size = size;
+        }
+    };
+
+MemoryBuffer *CreateBuffer(UINT_PTR addr)
+    {
+        // No more room in the pages database
+        if (m_lastBuffer - m_pages == MAX_NUM_BUFFERS)
+            return 0;
+
+        void *newAddr = Addrint2Ptr(addr);
+        // Get information for the region which the given address belongs to
+        MEMORY_BASIC_INFORMATION memInfo;
+        if (VirtualQuery(newAddr, &memInfo, sizeof(memInfo)) != sizeof(memInfo))
+            return 0;
+
+        for(;;) {
+            // The new address to check is beyond the current region and aligned to allocation size
+            newAddr = Addrint2Ptr( (Ptr2Addrint(memInfo.BaseAddress) + memInfo.RegionSize + m_allocSize) & ~(UINT_PTR)(m_allocSize-1) );
+
+            // Check that the address is in the right distance.
+            // VirtualAlloc can only round the address down; so it will remain in the right distance
+            if (!IsInDistance(addr, Ptr2Addrint(newAddr), MAX_DISTANCE))
+                break;
+
+            if (VirtualQuery(newAddr, &memInfo, sizeof(memInfo)) != sizeof(memInfo))
+                break;
+
+            if (memInfo.State == MEM_FREE && memInfo.RegionSize >= m_allocSize)
+            {
+                // Found a free region, try to allocate a page in this region
+                void *newPage = VirtualAlloc(newAddr, m_allocSize, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);
+                if (!newPage)
+                    break;
+
+                // Add the new page to the pages database
+                MemoryBuffer *pBuff = new (m_lastBuffer) MemoryBuffer(newPage, m_allocSize);
+                ++m_lastBuffer;
+                return pBuff;
+            }
+        }
+
+        // Failed to find a buffer in the distance
+        return 0;
+    }
+
+public:
+    MemoryProvider() 
+    { 
+        SYSTEM_INFO sysInfo;
+        GetSystemInfo(&sysInfo);
+        m_allocSize = sysInfo.dwAllocationGranularity; 
+        m_lastBuffer = &m_pages[0];
+    }
+
+    // We can't free the pages in the destructor because the trampolines
+    // are using these memory locations and a replaced function might be called
+    // after the destructor was called.
+    ~MemoryProvider() 
+    {
+    }
+
+    // Return a memory location in distance less than 2^31 from input address 
+    UINT_PTR GetLocation(UINT_PTR addr)
+    {
+        MemoryBuffer *pBuff = m_pages;
+        for (; pBuff<m_lastBuffer && IsInDistance(pBuff->m_next, addr, MAX_DISTANCE); ++pBuff)
+        {
+            if (pBuff->m_next < pBuff->m_base + pBuff->m_size)
+            {
+                UINT_PTR loc = pBuff->m_next;
+                pBuff->m_next += SIZE_OF_ADDRESS;
+                return loc;
+            }
+        }
+
+        pBuff = CreateBuffer(addr);
+        if(!pBuff)
+            return 0;
+
+        UINT_PTR loc = pBuff->m_next;
+        pBuff->m_next += SIZE_OF_ADDRESS;
+        return loc;
+    }
+
+private:
+    MemoryBuffer m_pages[MAX_NUM_BUFFERS];
+    MemoryBuffer *m_lastBuffer;
+    DWORD m_allocSize;
+};
+
+static MemoryProvider memProvider;
+
+// Insert jump relative instruction to the input address
+// RETURN: the size of the trampoline or 0 on failure
+static DWORD InsertTrampoline32(void *inpAddr, void *targetAddr)
+{
+    UINT_PTR srcAddr = Ptr2Addrint(inpAddr);
+    UINT_PTR tgtAddr = Ptr2Addrint(targetAddr);
+    // Check that the target fits in 32 bits
+    if (!IsInDistance(srcAddr, tgtAddr, MAX_DISTANCE))
+        return 0;
+
+    // The following will work correctly even if srcAddr>tgtAddr, as long as
+    // address difference is less than 2^31, which is guaranteed by IsInDistance.
+    UINT_PTR offset = tgtAddr - srcAddr - SIZE_OF_RELJUMP;
+    UINT offset32 = (UINT)(offset & 0xFFFFFFFF);
+    UCHAR *codePtr = (UCHAR *)inpAddr;
+
+    // Fill the buffer
+    *codePtr++ = 0xE9;
+    memcpy(codePtr, &offset32, sizeof(offset32));
+    return SIZE_OF_RELJUMP;
+}
+
+
+// This function is called when the offset doesn't fit in 32 bits
+// 1  Find and allocate a page in the small distance (<2^31) from input address
+// 2  Put jump RIP relative indirect through the address in the close page
+// 3  Put the absolute address of the target in the allocated location
+// RETURN: the size of the trampoline or 0 on failure
+static DWORD InsertTrampoline64(void *inpAddr, void *targetAddr)
+{
+    UINT_PTR srcAddr = Ptr2Addrint(inpAddr);
+    UINT_PTR tgtAddr = Ptr2Addrint(targetAddr);
+
+    // Get a location close to the source address
+    UINT_PTR location = memProvider.GetLocation(srcAddr);
+    if (!location)
+        return 0;
+
+    UINT_PTR offset = location - srcAddr - SIZE_OF_INDJUMP;
+    UINT offset32 = (INT)(offset & 0xFFFFFFFF);
+
+    // Fill the location
+    UINT_PTR *locPtr = (UINT_PTR *)Addrint2Ptr(location);
+    *locPtr = tgtAddr;
+
+    // Fill the buffer
+    UCHAR *codePtr = (UCHAR *)inpAddr;
+    *codePtr++ = 0xFF;
+    *codePtr++ = 0x25;
+    memcpy(codePtr, &offset32, sizeof(offset32));
+    return SIZE_OF_INDJUMP;
+}
+
+
+// Insert a jump instruction in the inpAddr to the targetAddr
+// 1. Get the memory protection of the page containing the input address
+// 2. Change the memory protection to writable
+// 3. Call InsertTrampoline32 or InsertTrampoline64
+// 4. Restore memory protection
+// RETURN: FALSE on failure, TRUE on success
+static bool InsertTrampoline(void *inpAddr, void *targetAddr)
+{
+    DWORD probeSize;
+
+    // Change page protection to EXECUTE+WRITE
+    DWORD origProt = 0;
+    if (!VirtualProtect(inpAddr, MAX_PROBE_SIZE, PAGE_EXECUTE_WRITECOPY, &origProt))
+        return FALSE;
+
+    probeSize = InsertTrampoline32(inpAddr, targetAddr);
+    if (!probeSize)
+        probeSize = InsertTrampoline64(inpAddr, targetAddr);
+
+    // Restore original protection
+    VirtualProtect(inpAddr, MAX_PROBE_SIZE, origProt, &origProt);
+
+    if (!probeSize)
+        return FALSE;
+
+    FlushInstructionCache(GetCurrentProcess(), inpAddr, probeSize);
+    return TRUE;
+}
+
+FRR_TYPE ReplaceFunctionA(const char *dllName, const char *funcName, FUNCPTR newFunc)
+{
+    // Cache the results of the last search for the module
+    // Assume that there was no DLL unload between 
+    static char cachedName[MAX_PATH+1];
+    static HMODULE cachedHM = 0;
+
+    if (!dllName || !*dllName)
+        return FRR_NODLL;
+
+    if (!cachedHM || strncmp(dllName, cachedName, MAX_PATH) != 0)
+    {
+        // Find the module handle for the input dll
+        HMODULE hModule = GetModuleHandleA(dllName);
+        if (hModule == 0)
+        {
+            // Couldn't find the module with the input name
+            cachedHM = 0;
+            return FRR_NODLL;
+        }
+
+        cachedHM = hModule;
+        strncpy(cachedName, dllName, MAX_PATH);
+    }
+
+    FARPROC inpFunc = GetProcAddress(cachedHM, funcName);
+    if (inpFunc == 0)
+    {
+        // Function was not found
+        return FRR_NOFUNC;
+    }
+
+    if (!InsertTrampoline((void*)inpFunc, (void*)newFunc))
+    {
+        // Failed to insert the trampoline to the target address
+        return FRR_FAILED;
+    }
+
+    return FRR_OK;
+}
+
+FRR_TYPE ReplaceFunctionW(const wchar_t *dllName, const char *funcName, FUNCPTR newFunc)
+{
+    // Cache the results of the last search for the module
+    // Assume that there was no DLL unload between 
+    static wchar_t cachedName[MAX_PATH+1];
+    static HMODULE cachedHM = 0;
+
+    if (!dllName || !*dllName)
+        return FRR_NODLL;
+
+    if (!cachedHM || wcsncmp(dllName, cachedName, MAX_PATH) != 0)
+    {
+        // Find the module handle for the input dll
+        HMODULE hModule = GetModuleHandleW(dllName);
+        if (hModule == 0)
+        {
+            // Couldn't find the module with the input name
+            cachedHM = 0;
+            return FRR_NODLL;
+        }
+
+        cachedHM = hModule;
+        wcsncpy(cachedName, dllName, MAX_PATH);
+    }
+
+    FARPROC inpFunc = GetProcAddress(cachedHM, funcName);
+    if (inpFunc == 0)
+    {
+        // Function was not found
+        return FRR_NOFUNC;
+    }
+
+    if (!InsertTrampoline((void*)inpFunc, (void*)newFunc))
+    {
+        // Failed to insert the trampoline to the target address
+        return FRR_FAILED;
+    }
+
+    return FRR_OK;
+}
+
+#endif //_WIN32
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/tbb_function_replacement.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/tbb_function_replacement.h
new file mode 100644 (file)
index 0000000..90d1eef
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef __TBB_function_replacement_H
+#define __TBB_function_replacement_H
+
+typedef enum {
+    FRR_OK,     /* Succeeded in replacing the function */
+    FRR_NODLL,  /* The requested DLL was not found */
+    FRR_NOFUNC, /* The requested function was not found */
+    FRR_FAILED, /* The function replacement request failed */
+} FRR_TYPE;
+
+typedef enum {
+    FRR_FAIL,     /* Required function */
+    FRR_IGNORE,   /* optional function */
+} FRR_ON_ERROR;
+
+typedef void (*FUNCPTR)();
+
+#ifndef UNICODE
+#define ReplaceFunction ReplaceFunctionA
+#else
+#define ReplaceFunction ReplaceFunctionW
+#endif //UNICODE
+
+FRR_TYPE ReplaceFunctionA(const char *dllName, const char *funcName, FUNCPTR newFunc);
+FRR_TYPE ReplaceFunctionW(const wchar_t *dllName, const char *funcName, FUNCPTR newFunc);
+
+// Utilities to convert between ADDRESS and LPVOID
+union Int2Ptr {
+    UINT_PTR uip;
+    LPVOID lpv;
+};
+
+inline UINT_PTR Ptr2Addrint(LPVOID ptr);
+inline LPVOID Addrint2Ptr(UINT_PTR ptr);
+
+#endif //__TBB_function_replacement_H
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/tbbmalloc.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/tbbmalloc.cpp
new file mode 100644 (file)
index 0000000..d742e48
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "TypeDefinitions.h" // Customize.h and proxy.h get included
+
+#include "tbb/itt_notify.cpp"
+
+#if MALLOC_LD_PRELOAD
+
+#include <pthread.h>
+#include <stdio.h>
+#include <unistd.h>
+#if __sun
+#include <string.h> /* for memset */
+#include <errno.h>
+#endif
+
+extern "C" {
+
+void   safer_scalable_free( void*, void (*)(void*) );
+void * safer_scalable_realloc( void*, size_t, void* (*)(void*,size_t) );
+
+bool __TBB_internal_find_original_malloc(int num, const char *names[], void *table[])  __attribute__ ((weak));
+
+}
+
+#define malloc_proxy __TBB_malloc_proxy
+
+#endif /* MALLOC_LD_PRELOAD */
+
+namespace rml {
+namespace internal {
+
+#if MALLOC_LD_PRELOAD
+
+void* (*original_malloc_ptr)(size_t) = 0;
+void  (*original_free_ptr)(void*) = 0;
+static void* (*original_calloc_ptr)(size_t,size_t) = 0;
+static void* (*original_realloc_ptr)(void*,size_t) = 0;
+
+#endif /* MALLOC_LD_PRELOAD */
+
+#if __TBB_NEW_ITT_NOTIFY
+extern "C" 
+#endif
+void ITT_DoOneTimeInitialization() {} // required for itt_notify.cpp to work
+
+#if DO_ITT_NOTIFY
+/** Caller is responsible for ensuring this routine is called exactly once. */
+void MallocInitializeITT() {
+#if __TBB_NEW_ITT_NOTIFY
+    tbb::internal::__TBB_load_ittnotify();
+#else
+    bool success = false;
+    // Check if we are running under control of VTune.
+    if( GetBoolEnvironmentVariable("KMP_FOR_TCHECK") || GetBoolEnvironmentVariable("KMP_FOR_TPROFILE") ) {
+        // Yes, we are under control of VTune.  Check for libittnotify library.
+        success = dynamic_link( LIBITTNOTIFY_NAME, ITT_HandlerTable, 5 );
+    }
+    if (!success){
+        for (int i = 0; i < 5; i++)
+            *ITT_HandlerTable[i].handler = NULL;
+    }
+#endif /* !__TBB_NEW_ITT_NOTIFY */
+}
+#endif /* DO_ITT_NOTIFY */
+
+void init_tbbmalloc() {
+#if MALLOC_LD_PRELOAD
+    if (malloc_proxy && __TBB_internal_find_original_malloc) {
+        const char *alloc_names[] = { "malloc", "free", "realloc", "calloc"};
+        void *orig_alloc_ptrs[4];
+
+        if (__TBB_internal_find_original_malloc(4, alloc_names, orig_alloc_ptrs)) {
+            (void *&)original_malloc_ptr  = orig_alloc_ptrs[0];
+            (void *&)original_free_ptr    = orig_alloc_ptrs[1];
+            (void *&)original_realloc_ptr = orig_alloc_ptrs[2];
+            (void *&)original_calloc_ptr  = orig_alloc_ptrs[3];
+            MALLOC_ASSERT( original_malloc_ptr!=malloc_proxy,
+                           "standard malloc not found" );
+/* It's workaround for a bug in GNU Libc 2.9 (as it shipped with Fedora 10).
+   1st call to libc's malloc should be not from threaded code.
+ */
+            original_free_ptr(original_malloc_ptr(1024));
+            original_malloc_found = 1;
+        }
+    }
+#endif /* MALLOC_LD_PRELOAD */
+
+#if DO_ITT_NOTIFY
+    MallocInitializeITT();
+#endif
+}
+
+#if !(_WIN32||_WIN64)
+struct RegisterProcessShutdownNotification {
+    ~RegisterProcessShutdownNotification() {
+        mallocProcessShutdownNotification();
+    }
+};
+
+static RegisterProcessShutdownNotification reg;
+#endif
+
+#if MALLOC_LD_PRELOAD
+
+bool  original_malloc_found;
+
+pthread_t   recursive_malloc_call_thread;
+int         recursive_malloc_call_flag;
+
+void lockRecursiveMallocFlag()
+{
+    recursive_malloc_call_thread = pthread_self();
+    recursive_malloc_call_flag = 1;
+}
+void unlockRecursiveMallocFlag()
+{
+    recursive_malloc_call_flag = 0;
+}
+static inline bool underRecursiveMallocFlag()
+{
+    return recursive_malloc_call_flag
+        && pthread_equal( recursive_malloc_call_thread, pthread_self());
+}
+
+extern "C" {
+
+void * __TBB_internal_malloc(size_t size)
+{
+    if ( underRecursiveMallocFlag() ) {
+        if ( original_malloc_found ){
+            return original_malloc_ptr(size);
+        }else{
+            return NULL;
+        }
+    }else{
+        return (void*)scalable_malloc(size);
+    }
+}
+
+void * __TBB_internal_calloc(size_t num, size_t size)
+{
+    if ( underRecursiveMallocFlag() ) {
+        if ( original_malloc_found ){
+#if __sun
+            /* There seem to be run time problems on Solaris if original_calloc_ptr is used. */
+            size_t arraySize = num * size;
+            void *result = original_malloc_ptr(arraySize);
+            if (result)
+                memset(result, 0, arraySize);
+            return result;
+#else
+            return original_calloc_ptr(num, size);
+#endif
+        }else{
+            return NULL;
+        }
+    }else{
+        return scalable_calloc(num, size);
+    }
+}
+
+int __TBB_internal_posix_memalign(void **memptr, size_t alignment, size_t size)
+{
+    MALLOC_ASSERT( !underRecursiveMallocFlag(), 
+                   "posix_memalign not expected to create a cyclic dependency" );
+    return scalable_posix_memalign(memptr, alignment, size);
+}
+
+void* __TBB_internal_realloc(void* ptr, size_t sz)
+{
+    return safer_scalable_realloc(ptr, sz, original_realloc_ptr);
+}
+
+void __TBB_internal_free(void *object)
+{
+    safer_scalable_free(object, original_free_ptr);
+}
+
+} /* extern "C" */
+
+#endif /* MALLOC_LD_PRELOAD */
+
+} } // namespaces
+
+#ifdef _WIN32
+#include <windows.h>
+
+extern "C" BOOL WINAPI DllMain( HINSTANCE hInst, DWORD callReason, LPVOID )
+{
+
+    if (callReason==DLL_THREAD_DETACH)
+    {
+        mallocThreadShutdownNotification(NULL);
+    }
+    else if (callReason==DLL_PROCESS_DETACH)
+    {
+        mallocProcessShutdownNotification();
+    }
+    return TRUE;
+}
+
+#endif //_WIN32
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/tbbmalloc.rc b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/tbbmalloc.rc
new file mode 100644 (file)
index 0000000..389ac7c
--- /dev/null
@@ -0,0 +1,129 @@
+// Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// Microsoft Visual C++ generated resource script.
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC                     1
+#define _APS_NEXT_RESOURCE_VALUE        102
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1001
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <winresrc.h>
+#define ENDL "\r\n"
+#include "tbb/tbb_version.h"
+
+#define TBBMALLOC_VERNUMBERS TBB_VERSION_MAJOR, TBB_VERSION_MINOR, __TBB_VERSION_YMD
+#define TBBMALLOC_VERSION __TBB_STRING(TBBMALLOC_VERNUMBERS)
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Neutral resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+// manifest integration
+#ifdef TBB_MANIFEST
+#include "winuser.h"
+2 RT_MANIFEST tbbmanifest.exe.manifest
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION TBBMALLOC_VERNUMBERS
+ PRODUCTVERSION TBB_VERNUMBERS
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "000004b0"
+        BEGIN
+            VALUE "CompanyName", "Intel Corporation\0"
+            VALUE "FileDescription", "Scalable Allocator library\0"
+            VALUE "FileVersion", TBBMALLOC_VERSION "\0"
+//what is it?            VALUE "InternalName", "tbbmalloc\0"
+            VALUE "LegalCopyright", "Copyright (C) 2006\0"
+            VALUE "LegalTrademarks", "\0"
+#ifndef TBB_USE_DEBUG
+            VALUE "OriginalFilename", "tbbmalloc.dll\0"
+#else
+            VALUE "OriginalFilename", "tbbmalloc_debug.dll\0"
+#endif
+            VALUE "ProductName", "Threading Building Blocks\0"
+            VALUE "ProductVersion", TBB_VERSION "\0"
+            VALUE "Comments", TBB_VERSION_STRINGS "\0"
+            VALUE "PrivateBuild", "\0"
+            VALUE "SpecialBuild", "\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x0, 1200
+    END
+END
+
+#endif    // Neutral resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/win-gcc-tbbmalloc-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/win-gcc-tbbmalloc-export.def
new file mode 100644 (file)
index 0000000..afefd89
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    The source code contained or described herein and all documents related
+    to the source code ("Material") are owned by Intel Corporation or its
+    suppliers or licensors.  Title to the Material remains with Intel
+    Corporation or its suppliers and licensors.  The Material is protected
+    by worldwide copyright laws and treaty provisions.  No part of the
+    Material may be used, copied, reproduced, modified, published, uploaded,
+    posted, transmitted, distributed, or disclosed in any way without
+    Intel's prior express written permission.
+
+    No license under any patent, copyright, trade secret or other
+    intellectual property right is granted to or conferred upon you by
+    disclosure or delivery of the Materials, either expressly, by
+    implication, inducement, estoppel or otherwise.  Any license under such
+    intellectual property rights must be express and approved by Intel in
+    writing.
+*/
+
+{
+global:
+scalable_calloc;
+scalable_free;
+scalable_malloc;
+scalable_realloc;
+scalable_posix_memalign;
+scalable_aligned_malloc;
+scalable_aligned_realloc;
+scalable_aligned_free;
+safer_scalable_free;
+safer_scalable_realloc;
+local:*;
+};
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/win32-tbbmalloc-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/win32-tbbmalloc-export.def
new file mode 100644 (file)
index 0000000..a048103
--- /dev/null
@@ -0,0 +1,40 @@
+; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction.  Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License.  This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+EXPORTS
+
+; MemoryAllocator.cpp
+scalable_calloc
+scalable_free
+scalable_malloc
+scalable_realloc
+scalable_posix_memalign
+scalable_aligned_malloc
+scalable_aligned_realloc
+scalable_aligned_free
+safer_scalable_free
+safer_scalable_realloc
+scalable_msize
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/win64-tbbmalloc-export.def b/deal.II/contrib/tbb/tbb22_20090809oss/src/tbbmalloc/win64-tbbmalloc-export.def
new file mode 100644 (file)
index 0000000..a048103
--- /dev/null
@@ -0,0 +1,40 @@
+; Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction.  Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License.  This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+EXPORTS
+
+; MemoryAllocator.cpp
+scalable_calloc
+scalable_free
+scalable_malloc
+scalable_realloc
+scalable_posix_memalign
+scalable_aligned_malloc
+scalable_aligned_realloc
+scalable_aligned_free
+safer_scalable_free
+safer_scalable_realloc
+scalable_msize
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness.h
new file mode 100644 (file)
index 0000000..1642227
--- /dev/null
@@ -0,0 +1,394 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Declarations for rock-bottom simple test harness.
+// Just include this file to use it.
+// Every test is presumed to have a command line of the form "foo [-v] [nthread]"
+// The default for nthread is 2.
+
+#ifndef tbb_tests_harness_H
+#define tbb_tests_harness_H
+
+#define __TBB_LAMBDAS_PRESENT  ( _MSC_VER >= 1600 && !__INTEL_COMPILER || __INTEL_COMPILER >= 1100 && _TBB_CPP0X )
+#define __TBB_LAMBDA_AS_TEMPL_PARAM_BROKEN (__INTEL_COMPILER == 1100 || __INTEL_COMPILER == 1110)
+
+#if __SUNPRO_CC
+#include <stdlib.h>
+#include <string.h>
+#else
+#include <cstdlib>
+#include <cstring>
+#endif
+#include <new>
+
+#if __LRB__
+#include "harness_lrb.h"
+#else
+#define __TBB_TEST_EXPORT
+#define REPORT_FATAL_ERROR REPORT
+#endif /* !__LRB__ */
+
+#if _WIN32||_WIN64
+    #include <windows.h>
+    #include <process.h>
+#else
+    #include <pthread.h>
+#endif
+#if __linux__
+#include <sys/utsname.h> /* for uname */
+#include <errno.h>       /* for use in LinuxKernelVersion() */
+#endif
+
+#include "harness_report.h"
+
+#if !HARNESS_NO_ASSERT
+#include "harness_assert.h"
+
+typedef void (*test_error_extra_t)(void);
+static test_error_extra_t ErrorExtraCall; 
+//! Set additional handler to process failed assertions
+void SetHarnessErrorProcessing( test_error_extra_t extra_call ) {
+    ErrorExtraCall = extra_call;
+    // TODO: add tbb::set_assertion_handler(ReportError);
+}
+//! Reports errors issued by failed assertions
+void ReportError( const char* filename, int line, const char* expression, const char * message ) {
+    REPORT_FATAL_ERROR("%s:%d, assertion %s: %s\n", filename, line, expression, message ? message : "failed" );
+    if( ErrorExtraCall )
+        (*ErrorExtraCall)();
+#if TBB_TERMINATE_ON_ASSERT
+    TerminateProcess(GetCurrentProcess(), 1);
+#elif TBB_EXIT_ON_ASSERT
+    exit(1);
+#else
+    abort();
+#endif /* TBB_EXIT_ON_ASSERT */
+}
+//! Reports warnings issued by failed warning assertions
+void ReportWarning( const char* filename, int line, const char* expression, const char * message ) {
+    REPORT("Warning: %s:%d, assertion %s: %s\n", filename, line, expression, message ? message : "failed" );
+}
+#else
+#define ASSERT(p,msg) ((void)0)
+#define ASSERT_WARNING(p,msg) ((void)0)
+#endif /* HARNESS_NO_ASSERT */
+
+#if !HARNESS_NO_PARSE_COMMAND_LINE
+//! Controls level of commentary.
+/** If true, makes the test print commentary.  If false, test should print "done" and nothing more. */
+static bool Verbose;
+
+//! Minimum number of threads
+/** The default is 0, which is typically interpreted by tests as "run without TBB". */
+static int MinThread = 0;
+
+//! Maximum number of threads
+static int MaxThread = 2;
+
+//! Parse command line of the form "name [-v] [nthread]"
+/** Sets Verbose, MinThread, and MaxThread accordingly.
+    The nthread argument can be a single number or a range of the form m:n.
+    A single number m is interpreted as if written m:m. 
+    The numbers must be non-negative.  
+    Clients often treat the value 0 as "run sequentially." */
+static void ParseCommandLine( int argc, char* argv[] ) {
+    int i = 1;  
+    if( i<argc ) {
+        if( strcmp( argv[i], "-v" )==0 ) {
+            Verbose = true;
+            ++i;
+        }
+    }
+    if( i<argc ) {
+        char* endptr;
+        MinThread = strtol( argv[i], &endptr, 0 );
+        if( *endptr==':' )
+            MaxThread = strtol( endptr+1, &endptr, 0 );
+        else if( *endptr=='\0' ) 
+            MaxThread = MinThread;
+        if( *endptr!='\0' ) {
+            REPORT_FATAL_ERROR("garbled nthread range\n");
+            exit(1);
+        }    
+        if( MinThread<0 ) {
+            REPORT_FATAL_ERROR("nthread must be nonnegative\n");
+            exit(1);
+        }
+        if( MaxThread<MinThread ) {
+            REPORT_FATAL_ERROR("nthread range is backwards\n");
+            exit(1);
+        }
+        ++i;
+    }
+#if __TBB_STDARGS_BROKEN
+    if ( !argc )
+        argc = 1;
+    else {
+        while ( i < argc && argv[i][0] == 0 )
+            ++i;
+    }
+#endif /* __TBB_STDARGS_BROKEN */
+    if( i!=argc ) {
+        REPORT_FATAL_ERROR("Usage: %s [-v] [nthread|minthread:maxthread]\n", argv[0] );
+        exit(1);
+    }
+}
+#endif /* HARNESS_NO_PARSE_COMMAND_LINE */
+
+//! Base class for prohibiting compiler-generated operator=
+class NoAssign {
+    //! Assignment not allowed
+    void operator=( const NoAssign& );
+public:
+#if __GNUC__
+    //! Explicitly define default construction, because otherwise gcc issues gratuitous warning.
+    NoAssign() {}
+#endif /* __GNUC__ */
+};
+
+//! Base class for prohibiting compiler-generated copy constructor or operator=
+class NoCopy: NoAssign {
+    //! Copy construction not allowed  
+    NoCopy( const NoCopy& );
+public:
+    NoCopy() {}
+};
+
+//! For internal use by template function NativeParallelFor
+template<typename Index, typename Body>
+class NativeParallelForTask: NoCopy {
+public:
+    NativeParallelForTask( Index index_, const Body& body_ ) :
+        index(index_),
+        body(body_)
+    {}
+
+    //! Start task
+    void start() {
+#if _WIN32||_WIN64
+        unsigned thread_id;
+        thread_handle = (HANDLE)_beginthreadex( NULL, 0, thread_function, this, 0, &thread_id );
+        ASSERT( thread_handle!=0, "NativeParallelFor: _beginthreadex failed" );
+#else
+#if __ICC==1100
+    #pragma warning (push)
+    #pragma warning (disable: 2193)
+#endif /* __ICC==1100 */
+        // Some machines may have very large hard stack limit. When the test is 
+        // launched by make, the default stack size is set to the hard limit, and 
+        // calls to pthread_create fail with out-of-memory error. 
+        // Therefore we set the stack size explicitly (as for TBB worker threads).
+        const size_t MByte = 1<<20;
+#if __i386__||__i386
+        const size_t stack_size = 1*MByte;
+#elif __x86_64__
+        const size_t stack_size = 2*MByte;
+#else
+        const size_t stack_size = 4*MByte;
+#endif
+        pthread_attr_t attr_stack;
+        int status = pthread_attr_init(&attr_stack);
+        ASSERT(0==status, "NativeParallelFor: pthread_attr_init failed");
+        status = pthread_attr_setstacksize( &attr_stack, stack_size );
+        ASSERT(0==status, "NativeParallelFor: pthread_attr_setstacksize failed");
+        status = pthread_create(&thread_id, &attr_stack, thread_function, this);
+        ASSERT(0==status, "NativeParallelFor: pthread_create failed");
+        pthread_attr_destroy(&attr_stack);
+#if __ICC==1100
+    #pragma warning (pop)
+#endif
+#endif /* _WIN32||_WIN64 */
+    }
+
+    //! Wait for task to finish
+    void wait_to_finish() {
+#if _WIN32||_WIN64
+        DWORD status = WaitForSingleObject( thread_handle, INFINITE );
+        ASSERT( status!=WAIT_FAILED, "WaitForSingleObject failed" );
+        CloseHandle( thread_handle );
+#else
+        int status = pthread_join( thread_id, NULL );
+        ASSERT( !status, "pthread_join failed" );
+#endif 
+    }
+
+private:
+#if _WIN32||_WIN64
+    HANDLE thread_handle;
+#else
+    pthread_t thread_id;
+#endif
+
+    //! Range over which task will invoke the body.
+    const Index index;
+
+    //! Body to invoke over the range.
+    const Body body;
+
+#if _WIN32||_WIN64
+    static unsigned __stdcall thread_function( void* object )
+#else
+    static void* thread_function(void* object)
+#endif
+    {
+        NativeParallelForTask& self = *static_cast<NativeParallelForTask*>(object);
+#if defined(__EXCEPTIONS) || defined(_CPPUNWIND) || defined(__SUNPRO_CC)
+        try {
+            (self.body)(self.index);
+        } catch(...) {
+            ASSERT( false, "uncaught exception" );
+        }
+#else
+        (self.body)(self.index);
+#endif// exceptions are enabled
+        return 0;
+    }
+};
+
+//! Execute body(i) in parallel for i in the interval [0,n).
+/** Each iteration is performed by a separate thread. */
+template<typename Index, typename Body>
+void NativeParallelFor( Index n, const Body& body ) {
+    typedef NativeParallelForTask<Index,Body> task;
+
+    if( n>0 ) {
+        // Allocate array to hold the tasks
+        task* array = static_cast<task*>(operator new( n*sizeof(task) ));
+
+        // Construct the tasks
+        for( Index i=0; i!=n; ++i ) 
+            new( &array[i] ) task(i,body);
+
+        // Start the tasks
+        for( Index i=0; i!=n; ++i )
+            array[i].start();
+
+        // Wait for the tasks to finish and destroy each one.
+        for( Index i=n; i; --i ) {
+            array[i-1].wait_to_finish();
+            array[i-1].~task();
+        }
+
+        // Deallocate the task array
+        operator delete(array);
+    }
+}
+
+//! The function to zero-initialize arrays; useful to avoid warnings
+template <typename T>
+void zero_fill(void* array, size_t N) {
+    memset(array, 0, sizeof(T)*N);
+}
+
+#ifndef min
+    //! Utility template function returning lesser of the two values.
+    /** Provided here to avoid including not strict safe <algorithm>.\n
+        In case operands cause signed/unsigned or size mismatch warnings it is caller's
+        responsibility to do the appropriate cast before calling the function. **/
+    template<typename T1, typename T2>
+    T1 min ( const T1& val1, const T2& val2 ) {
+        return val1 < val2 ? val1 : val2;
+    }
+#endif /* !min */
+
+#ifndef max
+    //! Utility template function returning greater of the two values. Provided here to avoid including not strict safe <algorithm>.
+    /** Provided here to avoid including not strict safe <algorithm>.\n
+        In case operands cause signed/unsigned or size mismatch warnings it is caller's
+        responsibility to do the appropriate cast before calling the function. **/
+    template<typename T1, typename T2>
+    T1 max ( const T1& val1, const T2& val2 ) {
+        return val1 < val2 ? val2 : val1;
+    }
+#endif /* !max */
+
+#if __linux__
+inline unsigned LinuxKernelVersion()
+{
+    unsigned a, b, c;
+    struct utsname utsnameBuf;
+    
+    if (-1 == uname(&utsnameBuf)) {
+        REPORT_FATAL_ERROR("Can't call uname: errno %d\n", errno);
+        exit(1);
+    }
+    if (3 != sscanf(utsnameBuf.release, "%u.%u.%u", &a, &b, &c)) {
+        REPORT_FATAL_ERROR("Unable to parse OS release '%s'\n", utsnameBuf.release);
+        exit(1);
+    }
+    return 1000000*a+1000*b+c;
+}
+#endif
+
+namespace Harness {
+
+#if !HARNESS_NO_ASSERT
+//! Base class that asserts that no operations are made with the object after its destruction.
+class NoAfterlife {
+protected:
+    enum state_t {
+        LIVE=0x56781234,
+        DEAD=0xDEADBEEF
+    } m_state;
+
+public:
+    NoAfterlife() : m_state(LIVE) {}
+    NoAfterlife( const NoAfterlife& src ) : m_state(LIVE) {
+        ASSERT( src.IsLive(), "Constructing from the dead source" );
+    }
+    ~NoAfterlife() {
+        ASSERT( IsLive(), "Repeated destructor call" );
+        m_state = DEAD;
+    }
+    const NoAfterlife& operator=( const NoAfterlife& src ) {
+        ASSERT( IsLive(), NULL );
+        ASSERT( src.IsLive(), NULL );
+        return *this;
+    }
+    void AssertLive() const {
+        ASSERT( IsLive(), "Already dead" );
+    }
+    bool IsLive() const {
+        return m_state == LIVE;
+    }
+}; // NoAfterlife
+#endif /* !HARNESS_NO_ASSERT */
+
+#if _WIN32 || _WIN64
+    void Sleep ( int ms ) { ::Sleep(ms); }
+#else /* !WIN */
+    void Sleep ( int ms ) {
+        timespec  requested = { ms / 1000, (ms % 1000)*1000000 };
+        timespec  remaining = {0};
+        nanosleep(&requested, &remaining);
+    }
+#endif /* !WIN */
+
+} // namespace Harness
+
+#endif /* tbb_tests_harness_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_allocator.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_allocator.h
new file mode 100644 (file)
index 0000000..db335b4
--- /dev/null
@@ -0,0 +1,279 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Declarations for simple estimate of the memory being used by a program.
+// Not yet implemented for Mac.
+// This header is an optional part of the test harness.
+// It assumes that "harness_assert.h" has already been included.
+
+#if __linux__
+#include <unistd.h>
+#elif __APPLE__ || __sun
+#include <unistd.h>
+#elif _WIN32
+#include <windows.h>
+#endif
+#include <new>
+#include <stdexcept>
+#include <tbb/atomic.h>
+
+#if __SUNPRO_CC
+using std::printf;
+#endif
+
+#if defined(_MSC_VER) && defined(_Wp64)
+    // Workaround for overzealous compiler warnings in /Wp64 mode
+    #pragma warning (push)
+    #pragma warning (disable: 4267)
+#endif
+
+
+template <typename base_alloc_t, typename count_t = tbb::atomic<size_t> >
+class static_counting_allocator : public base_alloc_t
+{
+public:
+    typedef typename base_alloc_t::pointer pointer;
+    typedef typename base_alloc_t::const_pointer const_pointer;
+    typedef typename base_alloc_t::reference reference;
+    typedef typename base_alloc_t::const_reference const_reference;
+    typedef typename base_alloc_t::value_type value_type;
+    typedef typename base_alloc_t::size_type size_type;
+    typedef typename base_alloc_t::difference_type difference_type;
+    template<typename U> struct rebind {
+        typedef static_counting_allocator<typename base_alloc_t::template rebind<U>::other,count_t> other;
+    };
+
+    static size_t max_items;
+    static count_t items_allocated;
+    static count_t items_freed;
+    static count_t allocations;
+    static count_t frees;
+    static bool verbose, throwing;
+
+    static_counting_allocator() throw() { }
+
+    static_counting_allocator(const static_counting_allocator&) throw() { }
+
+    template<typename U, typename C>
+    static_counting_allocator(const static_counting_allocator<U, C>&) throw() { }
+
+    bool operator==(const static_counting_allocator &a) const
+    { return true; }
+
+    pointer allocate(const size_type n)
+    {
+        if(verbose) printf("\t+%d|", int(n));
+        if(max_items && items_allocated + n >= max_items) {
+            if(verbose) printf("items limit hits!");
+            if(throwing) throw std::bad_alloc();
+            return NULL;
+        }
+        allocations++;
+        items_allocated += n;
+        return base_alloc_t::allocate(n, pointer(0));
+    }
+
+    pointer allocate(const size_type n, const void * const)
+    {   return allocate(n); }
+
+    void deallocate(const pointer ptr, const size_type n)
+    {
+        if(verbose) printf("\t-%d|", int(n));
+        frees++;
+        items_freed += n;
+        base_alloc_t::deallocate(ptr, n);
+    }
+
+    static void init_counters(bool v = false) {
+        verbose = v;
+        if(verbose) printf("\n------------------------------------------- Allocations:\n");
+        items_allocated = 0;
+        items_freed = 0;
+        allocations = 0;
+        frees = 0;
+        max_items = 0;
+    }
+
+    static void set_limits(size_type max = 0, bool do_throw = true) {
+        max_items = max;
+        throwing = do_throw;
+    }
+};
+
+template <typename base_alloc_t, typename count_t>
+size_t static_counting_allocator<base_alloc_t, count_t>::max_items;
+template <typename base_alloc_t, typename count_t>
+count_t static_counting_allocator<base_alloc_t, count_t>::items_allocated;
+template <typename base_alloc_t, typename count_t>
+count_t static_counting_allocator<base_alloc_t, count_t>::items_freed;
+template <typename base_alloc_t, typename count_t>
+count_t static_counting_allocator<base_alloc_t, count_t>::allocations;
+template <typename base_alloc_t, typename count_t>
+count_t static_counting_allocator<base_alloc_t, count_t>::frees;
+template <typename base_alloc_t, typename count_t>
+bool static_counting_allocator<base_alloc_t, count_t>::verbose;
+template <typename base_alloc_t, typename count_t>
+bool static_counting_allocator<base_alloc_t, count_t>::throwing;
+
+template <typename base_alloc_t, typename count_t = tbb::atomic<size_t> >
+class local_counting_allocator : public base_alloc_t
+{
+public:
+    typedef typename base_alloc_t::pointer pointer;
+    typedef typename base_alloc_t::const_pointer const_pointer;
+    typedef typename base_alloc_t::reference reference;
+    typedef typename base_alloc_t::const_reference const_reference;
+    typedef typename base_alloc_t::value_type value_type;
+    typedef typename base_alloc_t::size_type size_type;
+    typedef typename base_alloc_t::difference_type difference_type;
+    template<typename U> struct rebind {
+        typedef local_counting_allocator<typename base_alloc_t::template rebind<U>::other,count_t> other;
+    };
+
+    count_t items_allocated;
+    count_t items_freed;
+    count_t allocations;
+    count_t frees;
+    size_t max_items;
+
+    local_counting_allocator() throw() {
+        items_allocated = 0;
+        items_freed = 0;
+        allocations = 0;
+        frees = 0;
+        max_items = 0;
+    }
+
+    local_counting_allocator(const local_counting_allocator &a) throw()
+        : items_allocated(a.items_allocated)
+        , items_freed(a.items_freed)
+        , allocations(a.allocations)
+        , frees(a.frees)
+        , max_items(a.max_items)
+    { }
+
+    template<typename U, typename C>
+    local_counting_allocator(const static_counting_allocator<U,C> &) throw() {
+        items_allocated = static_counting_allocator<U,C>::items_allocated;
+        items_freed = static_counting_allocator<U,C>::items_freed;
+        allocations = static_counting_allocator<U,C>::allocations;
+        frees = static_counting_allocator<U,C>::frees;
+        max_items = static_counting_allocator<U,C>::max_items;
+    }
+
+    template<typename U, typename C>
+    local_counting_allocator(const local_counting_allocator<U,C> &a) throw()
+        : items_allocated(a.items_allocated)
+        , items_freed(a.items_freed)
+        , allocations(a.allocations)
+        , frees(a.frees)
+        , max_items(a.max_items)
+    { }
+
+    bool operator==(const local_counting_allocator &a) const
+    { return &a == this; }
+
+    pointer allocate(const size_type n)
+    {
+        if(max_items && items_allocated + n >= max_items)
+            throw std::bad_alloc();
+        ++allocations;
+        items_allocated += n;
+        return base_alloc_t::allocate(n, pointer(0));
+    }
+
+    pointer allocate(const size_type n, const void * const)
+    { return allocate(n); }
+
+    void deallocate(const pointer ptr, const size_type n)
+    {
+        ++frees;
+        items_freed += n;
+        base_alloc_t::deallocate(ptr, n);
+    }
+
+    void set_limits(size_type max = 0) {
+        max_items = max;
+    }
+};
+
+template <typename T, template<typename X> class Allocator = std::allocator>
+class debug_allocator : public Allocator<T>
+{
+public:
+    typedef Allocator<T> base_allocator_type;
+    typedef typename base_allocator_type::value_type value_type;
+    typedef typename base_allocator_type::pointer pointer;
+    typedef typename base_allocator_type::const_pointer const_pointer;
+    typedef typename base_allocator_type::reference reference;
+    typedef typename base_allocator_type::const_reference const_reference;
+    typedef typename base_allocator_type::size_type size_type;
+    typedef typename base_allocator_type::difference_type difference_type;
+    template<typename U> struct rebind {
+        typedef debug_allocator<U, Allocator> other;
+    };
+
+    debug_allocator() throw() { }
+    debug_allocator(const debug_allocator &a) throw() : base_allocator_type( a ) { }
+    template<typename U>
+    debug_allocator(const debug_allocator<U> &a) throw() : base_allocator_type( Allocator<U>( a ) ) { }
+
+    pointer allocate(const size_type n, const void *hint = 0 ) {
+        pointer ptr = base_allocator_type::allocate( n, hint );
+        std::memset( ptr, 0xE3E3E3E3, n * sizeof(value_type) );
+        return ptr;
+    }
+};
+
+//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
+/** @ingroup memory_allocation */
+template<template<typename T> class Allocator> 
+class debug_allocator<void, Allocator> : public Allocator<void> {
+public:
+    typedef Allocator<void> base_allocator_type;
+    typedef typename base_allocator_type::value_type value_type;
+    typedef typename base_allocator_type::pointer pointer;
+    typedef typename base_allocator_type::const_pointer const_pointer;
+    template<typename U> struct rebind {
+        typedef debug_allocator<U, Allocator> other;
+    };
+};
+
+template<typename T1, template<typename X1> class B1, typename T2, template<typename X2> class B2>
+inline bool operator==( const debug_allocator<T1,B1> &a, const debug_allocator<T2,B2> &b) {
+    return static_cast< B1<T1> >(a) == static_cast< B2<T2> >(b);
+}
+template<typename T1, template<typename X1> class B1, typename T2, template<typename X2> class B2>
+inline bool operator!=( const debug_allocator<T1,B1> &a, const debug_allocator<T2,B2> &b) {
+    return static_cast< B1<T1> >(a) != static_cast< B2<T2> >(b);
+}
+
+#if defined(_MSC_VER) && defined(_Wp64)
+    // Workaround for overzealous compiler warnings in /Wp64 mode
+    #pragma warning (pop)
+#endif // warning 4267 is back
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_assert.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_assert.h
new file mode 100644 (file)
index 0000000..bc21edb
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Just the assertion portion of the harness.
+// This is useful for writing portions of tests that include
+// the minimal number of necessary header files.
+//
+// The full "harness.h" must be included later.
+
+#ifndef harness_assert_H
+#define harness_assert_H
+
+void ReportError( const char* filename, int line, const char* expression, const char* message); 
+void ReportWarning( const char* filename, int line, const char* expression, const char* message); 
+
+#define ASSERT(p,message) ((p)?(void)0:ReportError(__FILE__,__LINE__,#p,message))
+#define ASSERT_WARNING(p,message) ((p)?(void)0:ReportWarning(__FILE__,__LINE__,#p,message))
+
+//! Compile-time error if x and y have different types
+template<typename T>
+void AssertSameType( const T& /*x*/, const T& /*y*/ ) {}
+
+#endif /* harness_assert_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_bad_expr.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_bad_expr.h
new file mode 100644 (file)
index 0000000..ce9591a
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Declarations for checking __TBB_ASSERT checks inside TBB.
+// This header is an optional part of the test harness.
+// It assumes that "harness.h" has already been included.
+
+//! Check that expression x raises assertion failure with message containing given substring.
+/** Assumes that tbb::set_assertion_handler( AssertionFailureHandler ) was called earlier. */
+#define TRY_BAD_EXPR(x,substr)          \
+    {                                   \
+        const char* message = NULL;     \
+        bool okay = false;              \
+        try {                           \
+            x;                          \
+        } catch( AssertionFailure a ) { \
+            okay = true;                \
+            message = a.message;        \
+        }                               \
+        CheckAssertionFailure(__LINE__,#x,okay,message,substr); \
+    }
+
+//! Exception object that holds a message.
+struct AssertionFailure {
+    const char* message;
+    AssertionFailure( const char* filename, int line, const char* expression, const char* comment );
+};
+
+AssertionFailure::AssertionFailure( const char* filename, int line, const char* expression, const char* comment ) : 
+    message(comment) 
+{
+    ASSERT(filename,"missing filename");
+    ASSERT(0<line,"line number must be positive");
+    // All of our current files have fewer than 4000 lines.
+    ASSERT(line<5000,"dubiously high line number");
+    ASSERT(expression,"missing expression");
+}
+
+void AssertionFailureHandler( const char* filename, int line, const char* expression, const char* comment ) {
+    throw AssertionFailure(filename,line,expression,comment);
+}
+
+void CheckAssertionFailure( int line, const char* expression, bool okay, const char* message, const char* substr ) {
+    if( !okay ) {
+        REPORT("Line %d, %s failed to fail\n", line, expression );
+        abort();
+    } else if( !message ) {
+        REPORT("Line %d, %s failed without a message\n", line, expression );
+        abort();
+    } else if( strstr(message,substr)==0 ) {                            
+        REPORT("Line %d, %s failed with message '%s' missing substring '%s'\n", __LINE__, expression, message, substr );
+        abort();
+    }
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_barrier.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_barrier.h
new file mode 100644 (file)
index 0000000..cbb6dd1
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/atomic.h"
+
+#ifndef harness_barrier_H
+#define harness_barrier_H
+
+namespace Harness {
+
+class SpinBarrier
+{
+    unsigned numThreads;
+    tbb::atomic<unsigned> numThreadsFinished; /* threads reached barrier in this epoch */
+    tbb::atomic<unsigned> epoch;   /* how many times this barrier used - XXX move to a separate cache line */
+
+    struct DummyCallback {
+        void operator() () const {}
+    };
+
+    SpinBarrier( const SpinBarrier& );    // no copy ctor
+    void operator=( const SpinBarrier& ); // no assignment 
+public:
+    SpinBarrier( unsigned nthreads = 0 ) { initialize(nthreads); };
+
+    void initialize( unsigned nthreads ) {
+        numThreads = nthreads;
+        numThreadsFinished = 0;
+        epoch = 0;
+    };
+
+    // onOpenBarrierCallback is called by last thread arrived on a barrier
+    template<typename Callback>
+    bool wait(const Callback &onOpenBarrierCallback)
+    { // return true if last thread
+        unsigned myEpoch = epoch;
+        int threadsLeft = numThreads - numThreadsFinished.fetch_and_increment() - 1;
+        ASSERT(threadsLeft>=0, "Broken barrier");
+        if (threadsLeft > 0) {
+            /* not the last threading reaching barrier, wait until epoch changes & return 0 */
+            tbb::internal::spin_wait_while_eq(epoch, myEpoch);
+            return false;
+        }
+        /* No more threads left to enter, so I'm the last one reaching this epoch;
+           reset the barrier, increment epoch, and return non-zero */
+        onOpenBarrierCallback();
+        numThreadsFinished = 0;
+        epoch = myEpoch+1; /* wakes up threads waiting to exit this epoch */
+        return true;
+    }
+    bool wait()
+    {
+        return wait(DummyCallback());
+    }
+};
+
+}
+
+#endif //harness_barrier_H
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_concurrency_tracker.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_concurrency_tracker.h
new file mode 100644 (file)
index 0000000..61caede
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef tbb_tests_harness_concurrency_tracker_H
+#define tbb_tests_harness_concurrency_tracker_H
+
+#include "harness.h"
+#include "tbb/atomic.h"
+#include "../tbb/tls.h"
+
+namespace Harness {
+
+static tbb::atomic<unsigned> ctInstantParallelism;
+static tbb::atomic<unsigned> ctPeakParallelism;
+static tbb::internal::tls<uintptr_t>  ctNested;
+
+class ConcurrencyTracker {
+    bool    m_Outer;
+
+    static void Started () {
+        unsigned p = ++ctInstantParallelism;
+        unsigned q = ctPeakParallelism;
+        while( q<p ) {
+            q = ctPeakParallelism.compare_and_swap(p,q);
+        }
+    }
+
+    static void Stopped () {
+        ASSERT ( ctInstantParallelism > 0, "Mismatched call to ConcurrencyTracker::Stopped()" );
+        --ctInstantParallelism;
+    }
+public:
+    ConcurrencyTracker() : m_Outer(false) {
+        uintptr_t nested = ctNested;
+        ASSERT (nested == 0 || nested == 1, NULL);
+        if ( !ctNested ) {
+            Started();
+            m_Outer = true;
+            ctNested = 1;
+        }
+    }
+    ~ConcurrencyTracker() {
+        if ( m_Outer ) {
+            Stopped();
+            ctNested = 0;
+        }
+    }
+
+    static unsigned PeakParallelism() { return ctPeakParallelism; }
+    static unsigned InstantParallelism() { return ctInstantParallelism; }
+
+    static void Reset() {
+        ASSERT (ctInstantParallelism == 0, "Reset cannot be called when concurrency tracking is underway");
+        ctInstantParallelism = ctPeakParallelism = 0;
+    }
+}; // ConcurrencyTracker
+
+} // namespace Harness
+
+#endif /* tbb_tests_harness_concurrency_tracker_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_cpu.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_cpu.h
new file mode 100644 (file)
index 0000000..b9b3dba
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Declarations for simple estimate of CPU time being used by a program.
+// This header is an optional part of the test harness.
+// It assumes that "harness_assert.h" has already been included.
+
+#if _WIN32
+#include <windows.h>
+#else
+#include <sys/time.h>
+#include <sys/resource.h>
+#endif
+
+//! Return time (in seconds) spent by the current process in user mode.
+/*  Returns 0 if not implemented on platform. */
+static double GetCPUUserTime() { 
+#if _WIN32
+    FILETIME my_times[4];
+    bool status = GetProcessTimes(GetCurrentProcess(), my_times, my_times+1, my_times+2, my_times+3)!=0;
+    ASSERT( status, NULL );
+    LARGE_INTEGER usrtime;
+    usrtime.LowPart = my_times[3].dwLowDateTime;
+    usrtime.HighPart = my_times[3].dwHighDateTime;
+    return double(usrtime.QuadPart)*1E-7;
+#else
+    // Generic UNIX, including __APPLE__
+
+    // On Linux, there is no good way to get CPU usage info for the current process:
+    //   getrusage(RUSAGE_SELF, ...) that is used now only returns info for the calling thread;
+    //   getrusage(RUSAGE_CHILDREN, ...) only counts for finished children threads;
+    //   tms_utime and tms_cutime got with times(struct tms*) are equivalent to the above items;
+    //   finally, /proc/self/task/<task_id>/stat doesn't exist on older kernels 
+    //      and it isn't quite convenient to read it for every task_id.
+
+    struct rusage resources;
+    bool status = getrusage(RUSAGE_SELF, &resources)==0;
+    ASSERT( status, NULL );
+    return (double(resources.ru_utime.tv_sec)*1E6 + double(resources.ru_utime.tv_usec))*1E-6;
+#endif
+}
+
+#include "tbb/tick_count.h"
+#include <cstdio>
+
+// The resolution of GetCPUUserTime is 10-15 ms or so; waittime should be a few times bigger.
+const double WAITTIME = 0.1; // in seconds, i.e. 100 ms
+const double THRESHOLD = WAITTIME/100;
+
+static void TestCPUUserTime( int nthreads, int nactive = 1 ) {
+    // The test will always pass on Linux; read the comments in GetCPUUserTime for details
+    // Also it will not detect spinning issues on systems with only one processing core.
+
+    static double minimal_waittime = WAITTIME;
+    int nworkers = nthreads-nactive;
+    if( !nworkers ) return;
+
+    double usrtime;
+    double lastusrtime = GetCPUUserTime();
+    while( (usrtime=GetCPUUserTime())-lastusrtime < THRESHOLD )
+        ; // wait for GetCPUUserTime update
+    lastusrtime = usrtime;
+    
+    // Test that all workers sleep when no work.
+    double waittime;
+    tbb::tick_count stamp = tbb::tick_count::now();
+    while( ((waittime=(tbb::tick_count::now()-stamp).seconds()) < minimal_waittime) 
+        || ((usrtime=GetCPUUserTime()-lastusrtime) < THRESHOLD) )
+        ; // Wait for workers to go sleep
+
+    while( nactive>1 && usrtime-nactive*waittime<0 ) {
+        // probably the number of active threads was mispredicted
+        --nactive; ++nworkers;
+    }
+    double avg_worker_usrtime = (usrtime-nactive*waittime)/nworkers;
+
+    if( avg_worker_usrtime > waittime/2 )
+        REPORT( "ERROR: %d worker threads are spinning; waittime: %g; usrtime: %g; avg worker usrtime: %g\n",
+                nworkers, waittime, usrtime, avg_worker_usrtime);
+    else if( Verbose )
+        REPORT("%d worker threads; waittime: %g; usrtime: %g; avg worker usrtime: %g\n",
+                        nworkers, waittime, usrtime, avg_worker_usrtime);
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_eh.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_eh.h
new file mode 100644 (file)
index 0000000..9998c86
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <typeinfo>
+#include "tbb/atomic.h"
+#include "harness.h"
+#include "harness_concurrency_tracker.h"
+
+namespace Harness {
+#if _WIN32 || _WIN64
+    typedef DWORD tid_t;
+    tid_t CurrentTid () { return GetCurrentThreadId(); }
+#else /* !WIN */
+    typedef pthread_t tid_t;
+    tid_t CurrentTid () { return pthread_self(); }
+#endif /* !WIN */
+} // namespace util
+
+int g_NumThreads = 0;
+Harness::tid_t  g_Master = 0;
+
+class test_exception : public std::exception {
+    const char* my_description;
+public:
+    test_exception ( const char* description ) : my_description(description) {}
+
+    const char* what() const throw() { return my_description; }
+};
+
+class solitary_test_exception : public test_exception {
+public:
+    solitary_test_exception ( const char* description ) : test_exception(description) {}
+};
+
+#if TBB_USE_CAPTURED_EXCEPTION
+    typedef tbb::captured_exception PropagatedException;
+    #define EXCEPTION_NAME(e) e.name()
+#else
+    typedef test_exception PropagatedException;
+    #define EXCEPTION_NAME(e) typeid(e).name()
+#endif
+
+#define EXCEPTION_DESCR "Test exception"
+
+tbb::atomic<intptr_t> g_CurExecuted,
+                      g_ExecutedAtCatch;
+volatile intptr_t g_ExceptionThrown = 0;
+volatile bool g_ExceptionCaught = false,
+              g_UnknownException = false;
+
+volatile bool g_ThrowException = true,
+              g_Flog = false;
+
+bool    g_ExceptionInMaster = false;
+bool    g_SolitaryException = false;
+
+tbb::atomic<intptr_t> g_Exceptions; // number of exceptions propagated into the user users (i.e. intercepted by the tests)
+
+inline void ResetEhGlobals ( bool throwException = true, bool flog = false ) {
+    Harness::ConcurrencyTracker::Reset();
+    g_CurExecuted = g_ExecutedAtCatch = 0;
+    g_ExceptionCaught = false;
+    g_UnknownException = false;
+    g_ThrowException = throwException;
+    g_Flog = flog;
+    g_ExceptionThrown = 0;
+    g_Exceptions = 0;
+}
+
+#if HARNESS_EH_SIMPLE_MODE
+
+static void ThrowTestException () { 
+    g_ExceptionThrown = 1;
+    throw test_exception(EXCEPTION_DESCR);
+}
+
+#else /* !HARNESS_EH_SIMPLE_MODE */
+
+static void ThrowTestException ( intptr_t threshold ) {
+    if ( !g_ThrowException || (!g_Flog && (g_ExceptionInMaster ^ (Harness::CurrentTid() == g_Master))) )
+        return; 
+    while ( Existed() < threshold )
+        __TBB_Yield();
+    if ( !g_SolitaryException ) {
+        g_ExceptionThrown = 1;
+        REMARK ("About to throw one of multiple test_exceptions (thread %08x):", Harness::CurrentTid());
+        throw test_exception(EXCEPTION_DESCR);
+    }
+    if ( __TBB_CompareAndSwapW(&g_ExceptionThrown, 1, 0) == 0 ) {
+        REMARK ("About to throw solitary test_exception... :");
+        throw solitary_test_exception(EXCEPTION_DESCR);
+    }
+}
+#endif /* !HARNESS_EH_SIMPLE_MODE */
+
+#define TRY()   \
+    bool exceptionCaught = false, unknownException = false;    \
+    try {
+
+#define CATCH()     \
+    } catch ( PropagatedException& e ) { \
+        g_ExecutedAtCatch = g_CurExecuted; \
+        ASSERT (strcmp(EXCEPTION_NAME(e), (g_SolitaryException ? typeid(solitary_test_exception) : typeid(test_exception)).name() ) == 0, "Unexpected original exception name"); \
+        ASSERT (strcmp(e.what(), EXCEPTION_DESCR) == 0, "Unexpected original exception info"); \
+        g_ExceptionCaught = exceptionCaught = true; \
+        ++g_Exceptions; \
+    } catch ( ... ) { \
+        g_ExceptionCaught = exceptionCaught = true; \
+        g_UnknownException = unknownException = true; \
+    }
+
+#define ASSERT_EXCEPTION() \
+    ASSERT (g_ExceptionThrown ? g_ExceptionCaught : !g_ExceptionCaught, "throw without catch or catch without throw"); \
+    ASSERT (g_ExceptionCaught, "no exception occurred"); \
+    ASSERT (!g_UnknownException, "unknown exception was caught")
+
+#define CATCH_AND_ASSERT() \
+    CATCH() \
+    ASSERT_EXCEPTION()
+
+const int c_Timeout = 10000;
+
+void WaitUntilConcurrencyPeaks () {
+    if ( g_Flog )
+        return;
+    int n = 0;
+    while ( ++n < c_Timeout && (int)Harness::ConcurrencyTracker::InstantParallelism() < g_NumThreads )
+        __TBB_Yield();
+}
+
+inline bool IsMaster() {
+    return Harness::CurrentTid() == g_Master;
+}
+
+inline bool IsThrowingThread() {
+    return g_ExceptionInMaster ^ IsMaster() ? true : false;
+}
+
+class CancellatorTask : public tbb::task {
+    static volatile bool s_Ready;
+    tbb::task_group_context &m_groupToCancel;
+    intptr_t m_cancellationThreshold;
+
+    tbb::task* execute () {
+        s_Ready = true;
+        while ( g_CurExecuted < m_cancellationThreshold )
+            __TBB_Yield();
+        m_groupToCancel.cancel_group_execution();
+        g_ExecutedAtCatch = g_CurExecuted;
+        return NULL;
+    }
+public:
+    CancellatorTask ( tbb::task_group_context& ctx, intptr_t threshold )
+        : m_groupToCancel(ctx), m_cancellationThreshold(threshold)
+    {
+        s_Ready = false;
+    }
+
+    static void Reset () { s_Ready = false; }
+
+    static void WaitUntilReady () {
+        do {
+            __TBB_Yield();
+        } while( !s_Ready );
+    }
+};
+
+volatile bool CancellatorTask::s_Ready = false;
+
+template<class LauncherTaskT, class CancellatorTaskT>
+void RunCancellationTest ( intptr_t threshold = 1 )
+{
+    tbb::task_group_context  ctx;
+    tbb::empty_task &r = *new( tbb::task::allocate_root(ctx) ) tbb::empty_task;
+    r.set_ref_count(3);
+    r.spawn( *new( r.allocate_child() ) CancellatorTaskT(ctx, threshold) );
+    __TBB_Yield();
+    r.spawn( *new( r.allocate_child() ) LauncherTaskT(ctx) );
+    TRY();
+        r.wait_for_all();
+    CATCH();
+    r.destroy(r);
+    ASSERT (!g_ExceptionCaught && !exceptionCaught, "Cancelling tasks should not cause any exceptions");
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_iterator.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_iterator.h
new file mode 100644 (file)
index 0000000..226db98
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef harness_iterator_H
+#define harness_iterator_H
+
+#include <iterator>
+#include <memory>
+
+namespace Harness {
+
+template <class T>
+class InputIterator {
+    T * my_ptr;
+public:
+    typedef std::input_iterator_tag iterator_category;
+    typedef T value_type;
+    typedef typename std::allocator<T>::difference_type difference_type;
+    typedef typename std::allocator<T>::pointer pointer;
+    typedef typename std::allocator<T>::reference reference;
+   
+    explicit InputIterator( T * ptr): my_ptr(ptr){}
+    
+    T& operator* () { return *my_ptr; }
+    
+    InputIterator& operator++ () { ++my_ptr; return *this; }
+
+    bool operator== ( const InputIterator& r ) { return my_ptr == r.my_ptr; }
+};
+
+template <class T>
+class ForwardIterator {
+    T * my_ptr;
+public:
+    typedef std::forward_iterator_tag iterator_category;
+    typedef T value_type;
+    typedef typename std::allocator<T>::difference_type difference_type;
+    typedef typename std::allocator<T>::pointer pointer;
+    typedef typename std::allocator<T>::reference reference;
+   
+    explicit ForwardIterator ( T * ptr ) : my_ptr(ptr){}
+    
+    ForwardIterator ( const ForwardIterator& r ) : my_ptr(r.my_ptr){}
+    
+    T& operator* () { return *my_ptr; }
+    
+    ForwardIterator& operator++ () { ++my_ptr; return *this; }
+
+    bool operator== ( const ForwardIterator& r ) { return my_ptr == r.my_ptr; }
+};
+
+template <class T>
+class RandomIterator {
+    T * my_ptr;
+public:
+    typedef std::random_access_iterator_tag iterator_category;
+    typedef T value_type;
+    typedef typename std::allocator<T>::difference_type difference_type;
+    typedef typename std::allocator<T>::pointer pointer;
+    typedef typename std::allocator<T>::reference reference;
+
+    explicit RandomIterator ( T * ptr ) : my_ptr(ptr){}
+    RandomIterator ( const RandomIterator& r ) : my_ptr(r.my_ptr){}
+    T& operator* () { return *my_ptr; }
+    RandomIterator& operator++ () { ++my_ptr; return *this; }
+    bool operator== ( const RandomIterator& r ) { return my_ptr == r.my_ptr; }
+    difference_type operator- (const RandomIterator &r) {return my_ptr - r.my_ptr;}
+    RandomIterator operator+ (difference_type n) {return RandomIterator(my_ptr + n);}
+};
+
+}
+
+#endif //harness_iterator_H
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_lrb.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_lrb.h
new file mode 100644 (file)
index 0000000..f8a47af
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef tbb_test_harness_lrb_H
+#define tbb_test_harness_lrb_H
+
+#if !(__LRB__||__TBB_LRB_HOST)
+    #error test/harness_lrb.h should be included only when building for LRB platform
+#endif
+
+#define __TBB_LRB_COMM_MSG_SIZE_MAX 1024
+#define __TBB_LRB_COMMUNICATOR_NAME "__TBB_LRB_COMMUNICATOR"
+
+#define __TBB_MSG_DONE "done\n"
+#define __TBB_MSG_SKIP "skip\n"
+#define __TBB_MSG_ABORT "__TBB_abort__"
+
+#if __TBB_LRB_HOST
+
+#include "host/XN0_host.h"
+
+#else /* !__TBB_LRB_HOST */
+
+#include "lrb/XN0_lrb.h"
+#include <assert.h>
+
+#define __TBB_STDARGS_BROKEN 1
+#define __TBB_TEST_EXPORT XNNATIVELIBEXPORT
+
+#if XENSIM
+    #define __TBB_EXCEPTION_HANDLING_BROKEN 1
+    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1
+    #define __TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN 1
+#endif /* XENSIM */
+
+namespace Harness {
+    namespace internal {
+
+    class LrbReporter {
+        XNCOMMUNICATOR  m_communicator;
+
+    public:
+        LrbReporter () {
+            XNERROR res = XN0MessageCreateCommunicator( __TBB_LRB_COMMUNICATOR_NAME, 
+                                                        __TBB_LRB_COMM_MSG_SIZE_MAX, 
+                                                        &m_communicator );
+            assert( XN_SUCCESS == res );
+        }
+        
+        ~LrbReporter () {
+            XN0MessageDestroyCommunicator( m_communicator );
+        }
+
+        void Report ( const char* msg ) {
+            XN0MessageSend( m_communicator, msg, __TBB_LRB_COMM_MSG_SIZE_MAX );
+        }
+    }; // class LrbReporter
+
+    } // namespace internal
+} // namespace Harness
+
+#define TbbHarnessReporter LrbReporter
+
+#define REPORT_FATAL_ERROR  REPORT(__TBB_MSG_ABORT); REPORT
+
+#if XENSIM
+    #define TBB_EXIT_ON_ASSERT 1
+#else
+    #define TBB_TERMINATE_ON_ASSERT 1
+#endif
+
+// Suppress warnings caused by windows.h during NetSim build
+#pragma warning (disable: 4005)
+
+#endif /* !__TBB_LRB_HOST */
+
+#endif /* tbb_test_harness_lrb_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_lrb_host.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_lrb_host.cpp
new file mode 100644 (file)
index 0000000..5f62101
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/** @file harness_lrb_host.cpp     
+    This is the launcher for TBB tests compiled for LrbFSim or NetSim environments.
+**/
+
+#include <windows.h>
+#include <stdio.h>
+#include <assert.h>
+
+#define __TBB_LRB_HOST 1
+#include "harness_lrb.h"
+
+#define __TBB_HOST_EXIT(status)  exitStatus = status; goto hard_stop;
+
+bool IsSupportedTest ( int argc, char* argv[] ) {
+    const char* test[] = {
+        "test_model_plugin", 
+        "test_tbb_version",
+        "malloc_overload",
+        NULL
+        };
+    for ( size_t i = 0; test[i]; ++i ) {
+        for ( size_t j = 1; j < argc; ++j ) {
+            if ( strstr(argv[j], test[i]) )
+                return false;
+        }
+    }
+    return true;
+}
+
+bool IsCompletionMsg ( const char* msg ) {
+    return strncmp(msg, __TBB_MSG_DONE, __TBB_LRB_COMM_MSG_SIZE_MAX) == 0 ||
+           strncmp(msg, __TBB_MSG_SKIP, __TBB_LRB_COMM_MSG_SIZE_MAX) == 0;
+}
+
+int main( int argc, char* argv[] ) {
+    int exitStatus = 0;
+
+    if (argc < 2) {
+        printf( "Usage: %s test_name test_args\n", argv[0] );
+        __TBB_HOST_EXIT(-1);
+    }
+    if ( !IsSupportedTest(argc, argv) ) {
+        printf(__TBB_MSG_SKIP);
+        __TBB_HOST_EXIT(0);
+    }
+
+    XNENGINE engine;
+    XNERROR result = XN0EngineGetHandle(0, &engine);
+    assert( XN_SUCCESS == result );
+
+    // Try with a run schedule of one second
+    XN_RUN_SCHEDULE runSchedule;
+    runSchedule.executionQuantumInUsecs = 500000;
+    runSchedule.frequencyInHz = 1;
+
+    XNCONTEXT ctxHandle;
+    result = XN0ContextCreate(engine, &runSchedule, &ctxHandle);
+    assert( XN_SUCCESS == result );
+
+    XNCOMMUNICATOR communicator;
+    result = XN0MessageCreateCommunicator( __TBB_LRB_COMMUNICATOR_NAME, __TBB_LRB_COMM_MSG_SIZE_MAX, &communicator );
+    assert( XN_SUCCESS == result );
+
+    XNLIBRARY libHandle;
+    if ( argc == 2 )
+        result = XN0ContextLoadLib(ctxHandle, argv[1], &libHandle);
+    else
+        result = XN0ContextLoadLib1(ctxHandle, argv[1], argc - 1, argv + 1, &libHandle);
+    if( result != XN_SUCCESS ) {
+        printf( "ERROR: Loading module \"%s\" failed", argv[1] );
+        __TBB_HOST_EXIT(-2);
+    }
+
+    char msg[__TBB_LRB_COMM_MSG_SIZE_MAX + 1] = { 0 };
+    bool abort_signalled = false;
+    for( ; !IsCompletionMsg(msg); ) {
+        XN0MessageReceive( communicator, msg, __TBB_LRB_COMM_MSG_SIZE_MAX, NULL );
+        if ( strncmp(msg, __TBB_MSG_ABORT, __TBB_LRB_COMM_MSG_SIZE_MAX ) == 0 ) {
+            abort_signalled = true;
+            // The next message should provide the reason
+            continue;
+        }
+        printf("%s\n", msg); fflush(stdout);
+        if ( abort_signalled ) {
+            // After exit() or abort() was invoked in a LRB library, it cannot be 
+            // unloaded, and the host hangs in XN0ContextDestroy. Thus we have to 
+            // bypass the graceful termination code.
+            __TBB_HOST_EXIT(1);
+        }
+    }
+    XN0MessageDestroyCommunicator( communicator );
+
+    result = XN0ContextUnloadLib(libHandle, 10 * 1000, &exitStatus);
+    if( result == XN_TIME_OUT_REACHED ) {
+        printf("ERROR: timed out waiting for LRB module unload\n");
+    }
+    else {
+        result = XN0ContextDestroy(ctxHandle);
+        assert( XN_SUCCESS == result );
+    }
+    if ( exitStatus != 0 )
+        printf("ERROR: %s returned failure status %d", argv[1], exitStatus);
+hard_stop:
+    fflush(stdout);
+    // We do not need a dump of memory leaks statistics
+    TerminateProcess( GetCurrentProcess(), 0 );
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_m128.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_m128.h
new file mode 100644 (file)
index 0000000..e23ce53
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Header that sets HAVE_m128 if we have type __m128
+
+#if (__SSE__||_M_IX86) && !defined(__sun)
+#include <xmmintrin.h>
+#define HAVE_m128 1
+#endif /* __SSE__||_M_IX86 */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_memory.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_memory.h
new file mode 100644 (file)
index 0000000..509b3a2
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Declarations for simple estimate of the memory being used by a program.
+// Not yet implemented for Mac.
+// This header is an optional part of the test harness.
+// It assumes that "harness_assert.h" has already been included.
+
+#if __linux__ || __sun
+#include <sys/resource.h>
+#include <unistd.h>
+
+#elif __APPLE__
+#include <unistd.h>
+#include <mach/mach.h>
+#include <mach/shared_memory_server.h>
+#if SHARED_TEXT_REGION_SIZE || SHARED_DATA_REGION_SIZE
+const size_t shared_size = SHARED_TEXT_REGION_SIZE+SHARED_DATA_REGION_SIZE;
+#else
+const size_t shared_size = 0;
+#endif
+
+#elif _WIN32
+#include <windows.h>
+#include <psapi.h>
+#if _MSC_VER
+#pragma comment(lib, "psapi")
+#endif
+
+#endif /* OS selection */
+
+//! Return estimate of number of bytes of memory that this program is currently using.
+/* Returns 0 if not implemented on platform. */
+size_t GetMemoryUsage() { 
+#if __linux__
+    FILE* statsfile = fopen("/proc/self/statm","r");
+    size_t pagesize = getpagesize();
+    ASSERT(statsfile, NULL);
+    long total_mem;
+    int n = fscanf(statsfile,"%lu",&total_mem);
+    if( n!=1 ) {
+        REPORT("Warning: memory usage statistics wasn't obtained\n");
+        return 0;
+    }
+    fclose(statsfile);
+    return total_mem*pagesize;
+#elif __APPLE__
+    kern_return_t status;
+    task_basic_info info;
+    mach_msg_type_number_t msg_type = TASK_BASIC_INFO_COUNT;
+    status = task_info(mach_task_self(), TASK_BASIC_INFO, reinterpret_cast<task_info_t>(&info), &msg_type);
+    ASSERT(status==KERN_SUCCESS, NULL);
+    return info.virtual_size - shared_size;
+#elif _WIN32
+    PROCESS_MEMORY_COUNTERS mem;
+    bool status = GetProcessMemoryInfo(GetCurrentProcess(), &mem, sizeof(mem))!=0;
+    ASSERT(status, NULL);
+    return mem.PagefileUsage;
+#else
+    return 0;
+#endif
+}
+
+//! Use approximately a specified amount of stack space.
+/** Recursion is used here instead of alloca because some implementations of alloca do not use the stack. */
+void UseStackSpace( size_t amount, char* top=0 ) {
+    char x[1000];
+    memset( x, -1, sizeof(x) );
+    if( !top ) 
+        top = x;
+    ASSERT( x<=top, "test assumes that stacks grow downwards" );
+    if( size_t(top-x)<amount )
+        UseStackSpace( amount, top );
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_report.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/harness_report.h
new file mode 100644 (file)
index 0000000..c173f5d
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Just the tracing portion of the harness.
+//
+// This header defines TRACE and TRCAENL macros, which use REPORT like syntax and 
+// are useful for duplicating trace output to the standard debug output on Windows.
+// It is possible to add the ability of automatic extending messages with additional
+// info (file, line, function, time, thread ID, ...).
+//
+// Macros output nothing when test app runs in non-verbose mode (default).
+//
+// The full "harness.h" must be included before this header.
+
+#ifndef tbb_tests_harness_report_H
+#define tbb_tests_harness_report_H
+
+#if defined(MAX_TRACE_SIZE) && MAX_TRACE_SIZE < 1024
+    #undef MAX_TRACE_SIZE
+#endif
+#ifndef MAX_TRACE_SIZE
+    #define MAX_TRACE_SIZE  1024
+#endif
+
+#if __SUNPRO_CC
+#include <stdio.h>
+#else
+#include <cstdio>
+#endif
+
+#include <cstdarg>
+
+#if __LRB__
+#include "harness_lrb.h"
+#endif
+
+#if _MSC_VER
+    #define snprintf _snprintf
+#if _MSC_VER<=1400
+    #define vsnprintf _vsnprintf
+#endif
+#endif
+
+namespace Harness {
+    namespace internal {
+
+#ifndef TbbHarnessReporter
+    struct TbbHarnessReporter {
+        void Report ( const char* msg ) {
+            printf( "%s", msg );
+            fflush(stdout);
+#ifdef _WINDOWS_
+            OutputDebugStringA(msg);
+#endif
+        }
+    }; // struct TbbHarnessReporter
+#endif /* !TbbHarnessReporter */
+
+    class Tracer {
+    public:
+        int         m_flags;
+        const char  *m_file;
+        const char  *m_func;
+        size_t      m_line;
+
+        TbbHarnessReporter m_reporter;
+
+        enum  { 
+            prefix = 1,
+            need_lf = 2
+        };
+
+           Tracer*  set_trace_info ( int flags, const char *file, size_t line, const char *func ) {
+                   m_flags = flags;
+                   m_line = line;
+            m_file = file;
+            m_func = func;
+                   return  this;
+           }
+
+        void  trace ( const char* fmt, ... ) {
+            char    msg[MAX_TRACE_SIZE];
+            char    msg_fmt_buf[MAX_TRACE_SIZE];
+            const char  *msg_fmt = fmt;
+            if ( m_flags & prefix ) {
+                snprintf (msg_fmt_buf, MAX_TRACE_SIZE, "[%s] %s", m_func, fmt);
+                msg_fmt = msg_fmt_buf;
+            }
+            std::va_list argptr;
+            va_start (argptr, fmt);
+            int len = vsnprintf (msg, MAX_TRACE_SIZE, msg_fmt, argptr);
+            va_end (argptr);
+            if ( m_flags & need_lf &&  
+                 len < MAX_TRACE_SIZE - 1  &&  msg_fmt[len-1] != '\n' )
+            {
+                msg[len] = '\n';
+                msg[len + 1] = 0;
+            }
+            m_reporter.Report(msg);
+        }
+    }; // class Tracer
+
+    static Tracer tracer;
+
+    template<int>
+    bool not_the_first_call () {
+        static bool first_call = false;
+        bool res = first_call;
+        first_call = true;
+        return res;
+    }
+
+    } // namespace internal
+} // namespace Harness
+
+#if defined(_MSC_VER)  &&  _MSC_VER >= 1300  ||  defined(__GNUC__)  ||  defined(__GNUG__)
+       #define HARNESS_TRACE_ORIG_INFO __FILE__, __LINE__, __FUNCTION__
+#else
+       #define HARNESS_TRACE_ORIG_INFO __FILE__, __LINE__, ""
+    #define __FUNCTION__ ""
+#endif
+
+
+//! printf style tracing macro
+/** This variant of TRACE adds trailing line-feed (new line) character, if it is absent. **/
+#define TRACE Harness::internal::tracer.set_trace_info(Harness::internal::Tracer::need_lf, HARNESS_TRACE_ORIG_INFO)->trace
+
+//! printf style tracing macro without automatic new line character adding
+#define TRACENL Harness::internal::tracer.set_trace_info(0, HARNESS_TRACE_ORIG_INFO)->trace
+
+//! printf style tracing macro with additional information prefix (e.g. current function name)
+#define TRACEP Harness::internal::tracer.set_trace_info(Harness::internal::Tracer::prefix | \
+                                    Harness::internal::Tracer::need_lf, HARNESS_TRACE_ORIG_INFO)->trace
+
+//! printf style remark macro
+/** Produces output only when the test is run with the -v (verbose) option. **/
+#define REMARK  !Verbose ? (void)0 : TRACE
+
+//! printf style remark macro
+/** Produces output only when invoked first time. 
+    Only one instance of this macro is allowed per source code line. **/
+#define REMARK_ONCE (!Verbose || Harness::internal::not_the_first_call<__LINE__>()) ? (void)0 : TRACE
+
+//! printf style reporting macro
+/** On heterogeneous platforms redirects its output to the host side. **/
+#define REPORT TRACENL
+
+#endif /* tbb_tests_harness_report_H */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_ScalableAllocator.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_ScalableAllocator.cpp
new file mode 100644 (file)
index 0000000..18a04a7
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Test whether scalable_allocator complies with the requirements in 20.1.5 of ISO C++ Standard (1998).
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+
+#include "tbb/scalable_allocator.h"
+
+// the actual body of the test is there:
+#include "test_allocator.h"
+
+#if _MSC_VER
+#include <windows.h>
+#endif /* _MSC_VER */
+
+__TBB_TEST_EXPORT
+int main() {
+#if _MSC_VER && !__TBBMALLOC_NO_IMPLICIT_LINKAGE
+    #ifdef _DEBUG
+        ASSERT(!GetModuleHandle("tbbmalloc.dll") && GetModuleHandle("tbbmalloc_debug.dll"),
+            "debug application links with non-debug tbbmalloc library");
+    #else
+        ASSERT(!GetModuleHandle("tbbmalloc_debug.dll") && GetModuleHandle("tbbmalloc.dll"),
+            "non-debug application links with debug tbbmalloc library");
+    #endif
+#endif /* _MSC_VER && !__TBBMALLOC_NO_IMPLICIT_LINKAGE */
+    int result = TestMain<tbb::scalable_allocator<void> >();
+    REPORT("done\n");
+    return result;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_ScalableAllocator_STL.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_ScalableAllocator_STL.cpp
new file mode 100644 (file)
index 0000000..c54ad0a
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Test whether scalable_allocator works with some of the host's STL containers.
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "tbb/scalable_allocator.h"
+
+// The actual body of the test is there:
+#include "test_allocator_STL.h"
+
+__TBB_TEST_EXPORT
+int main() {
+    TestAllocatorWithSTL<tbb::scalable_allocator<void> >();
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_aligned_space.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_aligned_space.cpp
new file mode 100644 (file)
index 0000000..cfe9c38
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/tbb_config.h"
+
+#if __TBB_GCC_WARNING_SUPPRESSION_ENABLED
+#pragma GCC diagnostic ignored "-Wstrict-aliasing"
+#endif
+
+//! Wrapper around T where all members are private.
+/** Used to prove that aligned_space<T,N> never calls member of T. */
+template<typename T>
+class Minimal {
+    Minimal();
+    Minimal( Minimal& min );
+    ~Minimal();
+    void operator=( const Minimal& );
+    T pad;
+public:
+    friend void AssignToCheckAlignment( Minimal& dst, const Minimal& src ) {
+        dst.pad = src.pad;
+    }  
+};
+
+#include "tbb/aligned_space.h"
+#include "harness_assert.h"
+
+static bool SpaceWasted;
+
+template<typename U, size_t N>
+void TestAlignedSpaceN() {
+    typedef Minimal<U> T;
+    struct {
+        //! Pad byte increases chance that subsequent member will be misaligned if there is a problem.
+        char pad;
+        tbb::aligned_space<T ,N> space;
+    } x;
+    AssertSameType( static_cast< T *>(0), x.space.begin() );
+    AssertSameType( static_cast< T *>(0), x.space.end() );
+    ASSERT( reinterpret_cast<void *>(x.space.begin())==reinterpret_cast< void *>(&x.space), NULL );
+    ASSERT( x.space.end()-x.space.begin()==N, NULL );
+    ASSERT( reinterpret_cast<void *>(x.space.begin())>=reinterpret_cast< void *>(&x.space), NULL );
+    ASSERT( x.space.end()<=reinterpret_cast< T *>(&x.space+1), NULL );
+    // Though not required, a good implementation of aligned_space<T,N> does not use any more space than a T[N].
+    SpaceWasted |= sizeof(x.space)!=sizeof(T)*N;
+    for( size_t k=1; k<N; ++k )
+        AssignToCheckAlignment( x.space.begin()[k-1], x.space.begin()[k] );
+}
+
+static void PrintSpaceWastingWarning( const char* type_name );
+
+#include <typeinfo>
+
+template<typename T>
+void TestAlignedSpace() {
+    SpaceWasted = false;
+    TestAlignedSpaceN<T,1>();
+    TestAlignedSpaceN<T,2>();
+    TestAlignedSpaceN<T,3>();
+    TestAlignedSpaceN<T,4>();
+    TestAlignedSpaceN<T,5>();
+    TestAlignedSpaceN<T,6>();
+    TestAlignedSpaceN<T,7>();
+    TestAlignedSpaceN<T,8>();
+    if( SpaceWasted )
+        PrintSpaceWastingWarning( typeid(T).name() );
+}
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+
+#include "harness_m128.h"
+//#include <cstdio>         // Inclusion of <cstdio> deferred, to improve odds of detecting accidental dependences on it.
+
+__TBB_TEST_EXPORT
+int main() {
+    TestAlignedSpace<char>();
+    TestAlignedSpace<short>();
+    TestAlignedSpace<int>();
+    TestAlignedSpace<float>();
+    TestAlignedSpace<double>();
+    TestAlignedSpace<long double>();
+    TestAlignedSpace<size_t>();
+#if HAVE_m128
+    TestAlignedSpace<__m128>();
+#endif /* HAVE_m128 */
+    REPORT("done\n");
+    return 0;
+}
+
+static void PrintSpaceWastingWarning( const char* type_name ) {
+    REPORT("Consider rewriting aligned_space<%s,N> to waste less space\n", type_name ); 
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_allocator.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_allocator.h
new file mode 100644 (file)
index 0000000..948d1b5
--- /dev/null
@@ -0,0 +1,226 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Basic testing of an allocator
+// Tests against requirements in 20.1.5 of ISO C++ Standard (1998).
+// Does not check for thread safety or false sharing issues.
+//
+// Tests for compatibility with the host's STL are in 
+// test_Allocator_STL.h.  Those tests are in a separate file
+// because they bring in lots of STL headers, and the tests here
+// are supposed to work in the abscense of STL.
+
+#include "harness.h"
+
+template<typename A>
+struct is_zero_filling {
+    static const bool value = false;
+};
+
+int NumberOfFoo;
+
+template<typename T, size_t N>
+struct Foo {
+    T foo_array[N];
+    Foo() {
+        zero_fill<T>(foo_array, N);
+        ++NumberOfFoo;
+    }
+    Foo( const Foo& x ) {
+        *this = x;
+        ++NumberOfFoo;
+    }
+    ~Foo() {
+        --NumberOfFoo;
+    }
+};
+
+inline char PseudoRandomValue( size_t j, size_t k ) {
+    return char(j*3 ^ j>>4 ^ k);
+}
+
+//! T is type and A is allocator for that type 
+template<typename T, typename A>
+void TestBasic( A& a ) {
+    T x;
+    const T cx = T();
+
+    // See Table 32 in ISO ++ Standard
+    typename A::pointer px = &x;
+    typename A::const_pointer pcx = &cx;
+
+    typename A::reference rx = x;
+    ASSERT( &rx==&x, NULL );
+
+    typename A::const_reference rcx = cx;
+    ASSERT( &rcx==&cx, NULL );
+
+    typename A::value_type v = x;
+
+    typename A::size_type size;
+    size = 0;
+    --size;
+    ASSERT( size>0, "not an unsigned integral type?" );
+
+    typename A::difference_type difference;
+    difference = 0;
+    --difference;
+    ASSERT( difference<0, "not an signed integral type?" );
+
+    // "rebind" tested by our caller 
+
+    ASSERT( a.address(rx)==px, NULL );
+
+    ASSERT( a.address(rcx)==pcx, NULL );
+
+    typename A::pointer array[100];
+    size_t sizeof_T = sizeof(T);
+    for( size_t k=0; k<100; ++k ) {
+        array[k] = k&1 ? a.allocate(k,array[0]) : a.allocate(k);
+        char* s = reinterpret_cast<char*>(reinterpret_cast<void*>(array[k]));
+        for( size_t j=0; j<k*sizeof_T; ++j )
+            s[j] = PseudoRandomValue(j,k);
+    }
+
+    // Test hint argument. This can't be compiled when hint is void*, It should be const void*
+    typename A::pointer a_ptr;
+    const void * const_hint = NULL;    
+    a_ptr = a.allocate (1, const_hint);    
+    a.deallocate(a_ptr, 1);
+
+    // Test "a.deallocate(p,n)
+    for( size_t k=0; k<100; ++k ) {
+        char* s = reinterpret_cast<char*>(reinterpret_cast<void*>(array[k]));
+        for( size_t j=0; j<k*sizeof_T; ++j )
+            ASSERT( s[j] == PseudoRandomValue(j,k), NULL );
+        a.deallocate(array[k],k);
+    }
+
+    // Test "a.max_size()"
+    AssertSameType( a.max_size(), typename A::size_type(0) );
+    // Following assertion catches case where max_size() is so large that computation of 
+    // number of bytes for such an allocation would overflow size_type.
+    ASSERT( a.max_size()*typename A::size_type(sizeof(T))>=a.max_size(), "max_size larger than reasonable" ); 
+
+    // Test "a1==a2"
+    A a1, a2;
+    ASSERT( a1==a2, NULL );
+
+    // Test "a1!=a2"
+    ASSERT( !(a1!=a2), NULL );
+
+    // Test "a.construct(p,t)"
+    int n = NumberOfFoo;
+    typename A::pointer p = a.allocate(1);
+    a.construct( p, cx );
+    ASSERT( NumberOfFoo==n+1, "constructor for Foo not called?" );
+
+    // Test "a.destroy(p)"
+    a.destroy( p );
+    ASSERT( NumberOfFoo==n, "destructor for Foo not called?" );
+    a.deallocate(p,1);
+}
+
+#include "tbb/blocked_range.h"
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Workaround for erroneous "conditional expression is constant" warning in method check_allocate.
+    #pragma warning (disable: 4127)
+#endif
+
+// A is an allocator for some type
+template<typename A>
+struct Body: NoAssign {
+    static const size_t max_k = 100000;
+    A &a;
+    Body(A &a_) : a(a_) {}
+    void check_allocate( typename A::pointer array[], size_t i, size_t t ) const
+    {
+        ASSERT(array[i] == 0, NULL);
+        size_t size = i * (i&3);
+        array[i] = i&1 ? a.allocate(size, array[i>>3]) : a.allocate(size);
+        char* s = reinterpret_cast<char*>(reinterpret_cast<void*>(array[i]));
+        for( size_t j=0; j<size*sizeof(A); ++j ) {
+            if(is_zero_filling<typename A::template rebind<void>::other>::value)
+                ASSERT( !s[j], NULL);
+            s[j] = PseudoRandomValue(i, t);
+        }
+    }
+
+    void check_deallocate( typename A::pointer array[], size_t i, size_t t ) const
+    {
+        ASSERT(array[i] != 0, NULL);
+        size_t size = i * (i&3);
+        char* s = reinterpret_cast<char*>(reinterpret_cast<void*>(array[i]));
+        for( size_t j=0; j<size*sizeof(A); ++j )
+            ASSERT( s[j] == PseudoRandomValue(i, t), "Thread safety test failed" );
+        a.deallocate(array[i], size);
+        array[i] = 0;
+    }
+
+    void operator()( size_t thread_id ) const {
+        typename A::pointer array[256];
+
+        for( size_t k=0; k<256; ++k )
+            array[k] = 0;
+        for( size_t k=0; k<max_k; ++k ) {
+            size_t i = static_cast<unsigned char>(PseudoRandomValue(k,thread_id));
+            if(!array[i]) check_allocate(array, i, thread_id);
+            else check_deallocate(array, i, thread_id);
+        }
+        for( size_t k=0; k<256; ++k )
+            if(array[k])
+                check_deallocate(array, k, thread_id);
+    }
+};
+
+// A is an allocator for some type, and U is another type
+template<typename A, typename U>
+void Test() {
+    typename A::template rebind<U>::other b;
+    TestBasic<U>(b);
+
+    A a(b);
+    TestBasic<typename A::value_type>(a);
+
+    // thread safety
+    int n = NumberOfFoo;
+    NativeParallelFor( 4, Body<A>(a) );
+    ASSERT( NumberOfFoo==n, "Allocate/deallocate count mismatched" );
+    ASSERT( a==b, NULL );
+    ASSERT( !(a!=b), NULL );
+}
+
+template<typename Allocator>
+int TestMain() {
+    Test<typename Allocator::template rebind<Foo<char,1> >::other, Foo<int,17> >();
+    Test<typename Allocator::template rebind<Foo<double,1> >::other, Foo<float,23> >();
+    return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_allocator_STL.h b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_allocator_STL.h
new file mode 100644 (file)
index 0000000..a879119
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Tests for compatibility with the host's STL.
+
+#include "harness.h"
+
+template<typename Container>
+void TestSequence() {
+    Container c;
+    for( int i=0; i<1000; ++i )
+        c.push_back(i*i);    
+    typename Container::const_iterator p = c.begin();
+    for( int i=0; i<1000; ++i ) {
+        ASSERT( *p==i*i, NULL );
+        ++p;
+    }
+}
+
+template<typename Set>
+void TestSet() {
+    Set s;
+    typedef typename Set::value_type value_type;
+    for( int i=0; i<100; ++i ) 
+        s.insert(value_type(3*i));
+    for( int i=0; i<300; ++i ) {
+        ASSERT( s.erase(i)==size_t(i%3==0), NULL );
+    }
+}
+
+template<typename Map>
+void TestMap() {
+    Map m;
+    typedef typename Map::value_type value_type;
+    for( int i=0; i<100; ++i ) 
+        m.insert(value_type(i,i*i));
+    for( int i=0; i<100; ++i )
+        ASSERT( m.find(i)->second==i*i, NULL );
+}
+
+#include <deque>
+#include <list>
+#include <map>
+#include <set>
+#include <vector>
+
+template<typename Allocator>
+void TestAllocatorWithSTL() {
+    typedef typename Allocator::template rebind<int>::other Ai;
+    typedef typename Allocator::template rebind<const int>::other Aci;
+    typedef typename Allocator::template rebind<std::pair<const int, int> >::other Acii;
+    typedef typename Allocator::template rebind<std::pair<int, int> >::other Aii;
+
+    // Sequenced containers
+    TestSequence<std::deque <int,Ai> >();
+    TestSequence<std::list  <int,Ai> >();
+    TestSequence<std::vector<int,Ai> >();
+
+    // Associative containers
+    TestSet<std::set     <int, std::less<int>, Ai> >();
+    TestSet<std::multiset<int, std::less<int>, Ai> >();
+    TestMap<std::map     <int, int, std::less<int>, Acii> >();
+    TestMap<std::multimap<int, int, std::less<int>, Acii> >();
+
+#if _MSC_VER
+    // Test compatibility with Microsoft's implementation of std::allocator for some cases that
+    // are undefined according to the ISO standard but permitted by Microsoft.
+    TestSequence<std::deque <const int,Aci> >();
+#if _CPPLIB_VER>=500
+    TestSequence<std::list  <const int,Aci> >();
+#endif
+    TestSequence<std::vector<const int,Aci> >();
+    TestSet<std::set<const int, std::less<int>, Aci> >();
+    TestMap<std::map<int, int, std::less<int>, Aii> >();
+    TestMap<std::map<const int, int, std::less<int>, Acii> >();
+    TestMap<std::multimap<int, int, std::less<int>, Aii> >();
+    TestMap<std::multimap<const int, int, std::less<int>, Acii> >();
+#endif /* _MSC_VER */
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_assembly.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_assembly.cpp
new file mode 100644 (file)
index 0000000..c41c390
--- /dev/null
@@ -0,0 +1,291 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Program for basic correctness testing of assembly-language routines.
+// This program deliberately #includes ../internal/task.cpp so that
+// it can get intimate access to the scheduler.
+
+#define TEST_ASSEMBLY_ROUTINES 1
+#define __TBB_TASK_CPP_DIRECTLY_INCLUDED 1
+// to avoid usage of #pragma comment
+#define __TBB_NO_IMPLICIT_LINKAGE 1
+
+#include "../tbb/task.cpp"
+#include <new>
+#include "harness.h"
+
+namespace tbb {
+
+namespace internal {
+
+class TestTask: public task {
+public:
+    /*override*/ task* execute() {
+        return NULL;
+    }
+    const char* name;
+    TestTask( const char* name_ ) : name(name_) {}
+};
+
+void GenericScheduler::test_assembly_routines() {
+    __TBB_ASSERT( assert_okay(), NULL );
+#if __TBB_TASK_DEQUE
+    try_enter_arena();
+    ASSERT( arena_slot->task_pool == dummy_slot.task_pool, "entering arena must not lock the task pool" );
+    arena->mark_pool_full();
+    acquire_task_pool();
+    release_task_pool();
+    acquire_task_pool();    // leave_arena requires the pool to be locked
+    leave_arena();
+#else /* !__TBB_TASK_DEQUE */
+    try_enter_arena();
+    arena->mark_pool_full();
+    release_task_pool();
+    long steal_count = 0;
+    long get_count = 0;
+    const depth_type n = 5;
+    const depth_type array_size_proxy = array_size; // using proxy to reduce compilation warnings
+    ASSERT( array_size-array_size_proxy==0, NULL ); // check validity of the replacement
+    ASSERT( array_size_proxy>=n, NULL );
+    // Loop over insertion levels
+    for( depth_type i=0; i<n; ++i ) 
+        // Loop over values for "deepest"
+        for( depth_type d=-1; d<n; ++d )     
+            // Loop over values for "shallowest"
+            for( depth_type s=0; s<n; ++s ) 
+                // Loop over depth limits
+                for( depth_type limit=0; limit<n; ++limit ) 
+                    // Loop over whether to insert or not
+                    for( int insert=0; insert<2; ++insert ) 
+                        // Loop over whether to steal or get
+                        for( int steal=0; steal<2; ++steal ) {
+                            __TBB_ASSERT( assert_okay(), NULL );
+                            task** array = dummy_slot.task_pool->array;  
+                            for( depth_type k=0; k<array_size_proxy; ++k )
+                                array[k] = NULL;
+                            dummy_slot.task_pool->prefix().steal_begin = s;
+                            __TBB_ASSERT( assert_okay(), NULL );
+
+                            TestTask& w = *new( task::allocate_root() ) TestTask("w");
+                            __TBB_ASSERT( assert_okay(), NULL );
+                            if( d>=0 ) {
+                                w.prefix().depth = int(d);
+                                w.prefix().next = NULL;
+                                w.prefix().state = task::ready;
+                                dummy_slot.task_pool->array[d] = &w;
+                            }
+                            deepest = d;
+                            arena_slot->steal_end = 2*d;
+
+                            __TBB_ASSERT( assert_okay(), NULL );
+                            TestTask& x = *new( task::allocate_root() ) TestTask("x");
+                            TestTask& y = *new( task::allocate_root() ) TestTask("y");
+                            TestTask& z = *new( task::allocate_root() ) TestTask("z");
+                            __TBB_ASSERT( assert_okay(), NULL );
+                            x.prefix().next = &y;
+                            y.prefix().next = &z;       
+                            z.prefix().next = NULL;
+                            ASSERT( x.prefix().next==&y, NULL );
+                            for( task* p=&x; p; p=p->prefix().next ) 
+                                p->prefix().depth = int(i);
+                            __TBB_ASSERT( assert_okay(), NULL );
+                            z.prefix().next = (task*)(void*)-1;
+                            if( insert ) {
+                                spawn( x, z.prefix().next );
+                                __TBB_ASSERT( assert_okay(), NULL );
+                                depth_type expected_deepest = d>=i ? d : i;
+                                ASSERT( deepest==expected_deepest, NULL );
+                                depth_type expected_shallowest = i<=s ? i : s;
+                                ASSERT( dummy_slot.task_pool->prefix().steal_begin==expected_shallowest, NULL );
+                                ASSERT( array[i]==&x, NULL );
+                                ASSERT( x.prefix().next==&y, NULL );
+                            } 
+                            if( steal ) {
+                                task* expected_task = NULL;
+                                depth_type shallowest = dummy_slot.task_pool->prefix().steal_begin;
+                                depth_type expected_shallowest = shallowest;
+                                for( depth_type k=shallowest; k<array_size_proxy; ++k ) {
+                                    if( k>=limit && array[k] ) {
+                                        expected_task = array[k];
+                                        if( shallowest>=limit )
+                                            expected_shallowest = k;
+                                        break;
+                                    }
+                                }
+                                __TBB_ASSERT( assert_okay(), NULL );
+                                task* t = steal_task( *arena_slot, limit );
+                                ASSERT( (arena_slot->steal_end&1)==0, "forgot to release lock?" );
+                                __TBB_ASSERT( assert_okay(), NULL );
+                                ASSERT( t==expected_task, NULL );       
+                                shallowest = dummy_slot.task_pool->prefix().steal_begin;
+                                ASSERT( shallowest==expected_shallowest, NULL );        
+                                ++steal_count;
+                            } else {
+                                task* expected_task = NULL;
+                                for( depth_type k=array_size_proxy-1; k>=limit; --k ) {
+                                    if( array[k] ) {
+                                        expected_task = array[k];
+                                        ASSERT( deepest==k, NULL ); 
+                                        break;
+                                    }
+                                }
+                                __TBB_ASSERT( assert_okay(), NULL );
+                                task* t = get_task( limit );
+                                ASSERT( (arena_slot->steal_end&1)==0, "forgot to release lock?" );
+                                __TBB_ASSERT( assert_okay(), NULL );
+                                ASSERT( t==expected_task, NULL );       
+                                ++get_count;
+                            }
+                        }
+    ASSERT( array_size-array_size_proxy==0, NULL ); // check for any side effects affecting array_size
+    if( Verbose )
+        REPORT("%ld successful gets and %ld successful steals\n", get_count, steal_count );
+#endif /* !__TBB_TASK_DEQUE */
+}
+
+//! Test __TBB_CompareAndSwapW
+static void TestCompareExchange() {
+    ASSERT( intptr(-10)<10, "intptr not a signed integral type?" ); 
+    if( Verbose ) 
+        REPORT("testing __TBB_CompareAndSwapW\n");
+    for( intptr a=-10; a<10; ++a )
+        for( intptr b=-10; b<10; ++b )
+            for( intptr c=-10; c<10; ++c ) {
+// Workaround for a bug in GCC 4.3.0; and one more is below.
+#if __GNUC__==4&&__GNUC_MINOR__==3&&__GNUC_PATCHLEVEL__==0
+                intptr x;
+                __TBB_store_with_release( x, a );
+#else
+                intptr x = a;
+#endif
+                intptr y = __TBB_CompareAndSwapW(&x,b,c);
+                ASSERT( y==a, NULL ); 
+                if( a==c ) 
+                    ASSERT( x==b, NULL );
+                else
+                    ASSERT( x==a, NULL );
+            }
+}
+
+//! Test __TBB___TBB_FetchAndIncrement and __TBB___TBB_FetchAndDecrement
+static void TestAtomicCounter() {
+    // "canary" is a value used to detect illegal overwrites.
+    const internal::reference_count canary = ~(internal::uintptr)0/3;
+    if( Verbose ) 
+        REPORT("testing __TBB_FetchAndIncrement\n");
+    struct {
+        internal::reference_count prefix, i, suffix;
+    } x;
+    x.prefix = canary;
+    x.i = 0;
+    x.suffix = canary;
+    for( int k=0; k<10; ++k ) {
+        internal::reference_count j = __TBB_FetchAndIncrementWacquire((volatile void *)&x.i);
+        ASSERT( x.prefix==canary, NULL );
+        ASSERT( x.suffix==canary, NULL );
+        ASSERT( x.i==k+1, NULL );
+        ASSERT( j==k, NULL );
+    }
+    if( Verbose ) 
+        REPORT("testing __TBB_FetchAndDecrement\n");
+    x.i = 10;
+    for( int k=10; k>0; --k ) {
+        internal::reference_count j = __TBB_FetchAndDecrementWrelease((volatile void *)&x.i);
+        ASSERT( j==k, NULL );
+        ASSERT( x.i==k-1, NULL );
+        ASSERT( x.prefix==canary, NULL );
+        ASSERT( x.suffix==canary, NULL );
+    }
+}
+
+static void TestTinyLock() {
+    if( Verbose ) 
+        REPORT("testing __TBB_LockByte\n");
+    unsigned char flags[16];
+    for( int i=0; i<16; ++i )
+        flags[i] = i;
+#if __GNUC__==4&&__GNUC_MINOR__==3&&__GNUC_PATCHLEVEL__==0
+    __TBB_store_with_release( flags[8], 0 );
+#else
+    flags[8] = 0;
+#endif
+    __TBB_LockByte(flags[8]);
+    for( int i=0; i<16; ++i )
+        ASSERT( flags[i]==(i==8?1:i), NULL );
+}
+
+static void TestLog2() {
+    if( Verbose ) 
+        REPORT("testing __TBB_Log2\n");
+    for( uintptr_t i=1; i; i<<=1 ) {
+        for( uintptr_t j=1; j<1<<16; ++j ) {
+            if( uintptr_t k = i*j ) {
+                uintptr_t actual = __TBB_Log2(k);
+                const uintptr_t ONE = 1; // warning suppression again
+                ASSERT( k >= ONE<<actual, NULL );          
+                ASSERT( k>>1 < ONE<<actual, NULL );        
+            }
+        }
+    }
+}
+
+static void TestPause() {
+    if( Verbose ) 
+        REPORT("testing __TBB_Pause\n");
+    __TBB_Pause(1);
+}
+
+
+} // namespace internal 
+} // namespace tbb
+
+using namespace tbb;
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    try {
+        ParseCommandLine( argc, argv );
+        TestLog2();
+        TestTinyLock();
+        TestCompareExchange();
+        TestAtomicCounter();
+        TestPause();
+
+        task_scheduler_init init(1);
+
+        if( Verbose ) 
+            REPORT("testing __TBB_(scheduler assists)\n");
+        GenericScheduler* scheduler = internal::Governor::local_scheduler();
+        scheduler->test_assembly_routines();
+
+    } catch(...) {
+        ASSERT(0,"unexpected exception");
+    }
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_atomic.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_atomic.cpp
new file mode 100644 (file)
index 0000000..3354593
--- /dev/null
@@ -0,0 +1,820 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Put tbb/atomic.h first, so if it is missing a prerequisite header, we find out about it.
+// The tests here do *not* test for atomicity, just serial correctness. */
+
+#include "tbb/atomic.h"
+#include "harness_assert.h"
+#include <string.h> // memcmp
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // unary minus operator applied to unsigned type, result still unsigned
+    #pragma warning( push )
+    #pragma warning( disable: 4310 )
+#endif
+
+//! Structure that holds an atomic<T> and some guard bytes around it.
+template<typename T>
+struct TestStruct {
+    T prefix;
+    tbb::atomic<T> counter;
+    T suffix;
+    TestStruct( T i ) : prefix(T(0x1234)), suffix(T(0x5678)) {
+        counter = i;
+        ASSERT( sizeof(*this)==3*sizeof(T), NULL );
+    }
+    ~TestStruct() {
+        // Check for writes outside the counter.
+        ASSERT( prefix==T(0x1234), NULL );
+        ASSERT( suffix==T(0x5678), NULL );
+    }
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif
+
+//! Test compare_and_swap template members of class atomic<T> for memory_semantics=M
+template<typename T,tbb::memory_semantics M>
+void TestCompareAndSwapAcquireRelease( T i, T j, T k ) {
+    ASSERT( i!=k, "values must be distinct" ); 
+    // Test compare_and_swap that should fail
+    TestStruct<T> x(i);
+    T old = x.counter.template compare_and_swap<M>( j, k );
+    ASSERT( old==i, NULL );
+    ASSERT( x.counter==i, "old value not retained" );
+    // Test compare and swap that should suceed
+    old = x.counter.template compare_and_swap<M>( j, i );
+    ASSERT( old==i, NULL );
+    ASSERT( x.counter==j, "value not updated?" );
+}
+
+//! i, j, k must be different values
+template<typename T>
+void TestCompareAndSwap( T i, T j, T k ) {
+    ASSERT( i!=k, "values must be distinct" ); 
+    // Test compare_and_swap that should fail
+    TestStruct<T> x(i);
+    T old = x.counter.compare_and_swap( j, k );
+    ASSERT( old==i, NULL );
+    ASSERT( x.counter==i, "old value not retained" );
+    // Test compare and swap that should suceed
+    old = x.counter.compare_and_swap( j, i );
+    ASSERT( old==i, NULL );
+    if( x.counter==i ) {
+        ASSERT( x.counter==j, "value not updated?" );
+    } else {    
+        ASSERT( x.counter==j, "value trashed" );
+    }
+    TestCompareAndSwapAcquireRelease<T,tbb::acquire>(i,j,k);
+    TestCompareAndSwapAcquireRelease<T,tbb::release>(i,j,k);
+}
+
+//! memory_semantics variation on TestFetchAndStore
+template<typename T, tbb::memory_semantics M>
+void TestFetchAndStoreAcquireRelease( T i, T j ) {
+    ASSERT( i!=j, "values must be distinct" ); 
+    TestStruct<T> x(i);
+    T old = x.counter.template fetch_and_store<M>( j );
+    ASSERT( old==i, NULL );
+    ASSERT( x.counter==j, NULL );
+}
+
+//! i and j must be different values
+template<typename T>
+void TestFetchAndStore( T i, T j ) {
+    ASSERT( i!=j, "values must be distinct" ); 
+    TestStruct<T> x(i);
+    T old = x.counter.fetch_and_store( j );
+    ASSERT( old==i, NULL );
+    ASSERT( x.counter==j, NULL );
+    TestFetchAndStoreAcquireRelease<T,tbb::acquire>(i,j);
+    TestFetchAndStoreAcquireRelease<T,tbb::release>(i,j);
+}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // conversion from <bigger integer> to <smaller integer>, possible loss of data
+    // the warning seems a complete nonsense when issued for e.g. short+=short
+    #pragma warning( push )
+    #pragma warning( disable: 4244 )
+#endif
+
+//! Test fetch_and_add members of class atomic<T> for memory_semantics=M
+template<typename T,tbb::memory_semantics M>
+void TestFetchAndAddAcquireRelease( T i ) {
+    TestStruct<T> x(i);
+    T actual;
+    T expected = i;
+
+    // Test fetch_and_add member template
+    for( int j=0; j<10; ++j ) {
+        actual = x.counter.fetch_and_add(j);
+        ASSERT( actual==expected, NULL );
+        expected += j;
+    }
+    for( int j=0; j<10; ++j ) {
+        actual = x.counter.fetch_and_add(-j);
+        ASSERT( actual==expected, NULL );
+        expected -= j;
+    }
+
+    // Test fetch_and_increment member template
+    ASSERT( x.counter==i, NULL );
+    actual = x.counter.template fetch_and_increment<M>();
+    ASSERT( actual==i, NULL );
+    ASSERT( x.counter==T(i+1), NULL );
+
+    // Test fetch_and_decrement member template
+    actual = x.counter.template fetch_and_decrement<M>();
+    ASSERT( actual==T(i+1), NULL );
+    ASSERT( x.counter==i, NULL );
+}
+
+//! Test fetch_and_add and related operators
+template<typename T>
+void TestFetchAndAdd( T i ) {
+    TestStruct<T> x(i);
+    T value;
+    value = ++x.counter;
+    ASSERT( value==T(i+1), NULL );
+    value = x.counter++;
+    ASSERT( value==T(i+1), NULL );
+    value = x.counter--;
+    ASSERT( value==T(i+2), NULL );
+    value = --x.counter;
+    ASSERT( value==i, NULL );
+    T actual;
+    T expected = i;
+    for( int j=-100; j<=100; ++j ) {
+        expected += j;
+        actual = x.counter += j;
+        ASSERT( actual==expected, NULL );
+    }
+    for( int j=-100; j<=100; ++j ) {
+        expected -= j;
+        actual = x.counter -= j;
+        ASSERT( actual==expected, NULL );
+    }
+    // Test fetch_and_increment
+    ASSERT( x.counter==i, NULL );
+    actual = x.counter.fetch_and_increment();
+    ASSERT( actual==i, NULL );
+    ASSERT( x.counter==T(i+1), NULL );
+
+    // Test fetch_and_decrement
+    actual = x.counter.fetch_and_decrement();
+    ASSERT( actual==T(i+1), NULL );
+    ASSERT( x.counter==i, NULL );
+    x.counter = i;
+    ASSERT( x.counter==i, NULL );
+
+    TestFetchAndAddAcquireRelease<T,tbb::acquire>(i);
+    TestFetchAndAddAcquireRelease<T,tbb::release>(i);
+}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif // warning 4244 is back
+
+//! A type with unknown size.
+class IncompleteType;
+
+void TestFetchAndAdd( IncompleteType* ) {
+    // There are no fetch-and-add operations on a IncompleteType*.
+}
+void TestFetchAndAdd( void* ) {
+    // There are no fetch-and-add operations on a void*.
+}
+
+void TestFetchAndAdd( bool ) {
+    // There are no fetch-and-add operations on a bool.
+}
+
+template<typename T>
+void TestConst( T i ) { 
+    // Try const 
+    const TestStruct<T> x(i);
+    ASSERT( memcmp( &i, &x.counter, sizeof(T) )==0, "write to atomic<T> broken?" );;
+    ASSERT( x.counter==i, "read of atomic<T> broken?" );
+}
+
+template<typename T>
+void TestOperations( T i, T j, T k ) {
+    TestConst(i);
+    TestCompareAndSwap(i,j,k);
+    TestFetchAndStore(i,k);    // Pass i,k instead of i,j, because callee requires two distinct values.
+}
+
+template<typename T>
+void TestParallel( const char* name );
+
+bool ParallelError;
+
+template<typename T>
+struct AlignmentChecker {
+    char c;
+    tbb::atomic<T> i;
+};
+
+#include "harness.h"
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // unary minus operator applied to unsigned type, result still unsigned
+    #pragma warning( push )
+    #pragma warning( disable: 4146 )
+#endif
+
+/** T is an integral type. */
+template<typename T>
+void TestAtomicInteger( const char* name ) {
+    if( Verbose )
+        REPORT("testing atomic<%s>\n",name);
+#if ( __linux__ && __TBB_x86_32 && __GNUC__==3 && __GNUC_MINOR__==3 ) || defined(__SUNPRO_CC)
+    // gcc 3.3 has known problem for 32-bit Linux, so only warn if there is a problem.
+    // SUNPRO_CC does have this problem as well
+    if( sizeof(T)==8 ) {
+        if( sizeof(AlignmentChecker<T>)!=2*sizeof(tbb::atomic<T>) ) {
+            REPORT("Warning: alignment for atomic<%s> is wrong (known issue with gcc 3.3 and sunCC 5.9 2008/01/28 for IA32)\n",name);
+        }
+    } else
+#endif /* ( __linux__ && __TBB_x86_32 && __GNUC__==3 && __GNUC_MINOR__==3 ) || defined(__SUNPRO_CC) */
+    ASSERT( sizeof(AlignmentChecker<T>)==2*sizeof(tbb::atomic<T>), NULL );
+    TestOperations<T>(0L,T(-T(1)),T(1));
+    for( int k=0; k<int(sizeof(long))*8-1; ++k ) {
+        TestOperations<T>(T(1L<<k),T(~(1L<<k)),T(1-(1L<<k)));
+        TestOperations<T>(T(-1L<<k),T(~(-1L<<k)),T(1-(-1L<<k)));
+        TestFetchAndAdd<T>(T(-1L<<k));
+    }
+    TestParallel<T>( name );
+}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif
+
+
+template<typename T>
+struct Foo {
+    T x, y, z;
+};
+
+
+template<typename T>
+void TestIndirection() {
+    Foo<T> item;
+    tbb::atomic<Foo<T>*> pointer;
+    pointer = &item;
+    for( int k=-10; k<=10; ++k ) {
+        // Test various syntaxes for indirection to fields with non-zero offset.   
+        T value1=T(), value2=T();
+        for( size_t j=0; j<sizeof(T); ++j ) {
+            *(char*)&value1 = char(k^j);
+            *(char*)&value2 = char(k^j*j);
+        }
+        pointer->y = value1;
+        (*pointer).z = value2;
+        T result1 = (*pointer).y;
+        T result2 = pointer->z;
+        ASSERT( memcmp(&value1,&result1,sizeof(T))==0, NULL );
+        ASSERT( memcmp(&value2,&result2,sizeof(T))==0, NULL );
+    }
+}
+
+//! Test atomic<T*>
+template<typename T>
+void TestAtomicPointer() {
+    if( Verbose )
+        REPORT("testing atomic pointer (%d)\n",int(sizeof(T)));
+    T array[1000];
+    TestOperations<T*>(&array[500],&array[250],&array[750]);
+    TestFetchAndAdd<T*>(&array[500]);
+    TestIndirection<T>();
+    TestParallel<T*>( "pointer" );
+}
+
+//! Test atomic<Ptr> where Ptr is a pointer to a type of unknown size
+template<typename Ptr>
+void TestAtomicPointerToTypeOfUnknownSize( const char* name ) {
+    if( Verbose )
+        REPORT("testing atomic<%s>\n",name);
+    char array[1000];
+    TestOperations<Ptr>((Ptr)(void*)&array[500],(Ptr)(void*)&array[250],(Ptr)(void*)&array[750]);
+    TestParallel<Ptr>( name );
+}
+
+void TestAtomicBool() {
+    if( Verbose )
+        REPORT("testing atomic<bool>\n");
+    TestOperations<bool>(true,true,false);
+    TestOperations<bool>(false,false,true);
+    TestParallel<bool>( "bool" );
+}
+
+enum Color {Red=0,Green=1,Blue=-1};
+
+void TestAtomicEnum() {
+    if( Verbose )
+        REPORT("testing atomic<Color>\n");
+    TestOperations<Color>(Red,Green,Blue);
+    TestParallel<Color>( "Color" );
+}
+
+#if !__TBB_FLOATING_POINT_BROKEN 
+template<typename T>
+void TestAtomicFloat( const char* name ) {
+    if( Verbose )
+        REPORT("testing atomic<%s>\n", name );
+    TestOperations<T>(0.5,3.25,10.75);
+    TestParallel<T>( name );
+}
+#endif /* !__TBB_FLOATING_POINT_BROKEN */
+
+const int numMaskedOperations = 100000;
+const int testSpaceSize = 8;
+int prime[testSpaceSize] = {3,5,7,11,13,17,19,23};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // "possible loss of data" warning suppressed again
+    #pragma warning( push )
+    #pragma warning( disable: 4244 )
+#endif
+
+template<typename T>
+class TestMaskedCAS_Body: NoAssign {
+    T*  test_space_uncontended;
+    T*  test_space_contended;
+public:   
+    TestMaskedCAS_Body( T* _space1, T* _space2 ) : test_space_uncontended(_space1), test_space_contended(_space2) {}
+    void operator()( int my_idx ) const {
+        using tbb::internal::__TBB_MaskedCompareAndSwap;
+        const T my_prime = T(prime[my_idx]);
+        T* const my_ptr = test_space_uncontended+my_idx;
+        T old_value=0;
+        for( int i=0; i<numMaskedOperations; ++i, old_value+=my_prime ){
+            T result;
+        // Test uncontended case
+            T new_value = old_value + my_prime;
+            // The following CAS should always fail
+            result = __TBB_MaskedCompareAndSwap<sizeof(T),T>(my_ptr,new_value,old_value-1);
+            ASSERT(result!=old_value-1, "masked CAS succeeded while it should fail");
+            ASSERT(result==*my_ptr, "masked CAS result mismatch with real value");
+            // The following one should succeed
+            result = __TBB_MaskedCompareAndSwap<sizeof(T),T>(my_ptr,new_value,old_value);
+            ASSERT(result==old_value && *my_ptr==new_value, "masked CAS failed while it should succeed");
+            // The following one should fail again
+            result = __TBB_MaskedCompareAndSwap<sizeof(T),T>(my_ptr,new_value,old_value);
+            ASSERT(result!=old_value, "masked CAS succeeded while it should fail");
+            ASSERT(result==*my_ptr, "masked CAS result mismatch with real value");
+        // Test contended case
+            for( int j=0; j<testSpaceSize; ++j ){
+                // try adding my_prime until success
+                T value;
+                do {
+                    value = test_space_contended[j];
+                    result = __TBB_MaskedCompareAndSwap<sizeof(T),T>(test_space_contended+j,value+my_prime,value);
+                } while( result!=value );
+            }
+        }
+    }
+};
+
+template<typename T>
+struct intptr_as_array_of
+{
+    static const int how_many_Ts = sizeof(intptr_t)/sizeof(T);
+    union {
+        intptr_t result;
+        T space[ how_many_Ts ];
+    };
+};
+
+template<typename T>
+intptr_t getCorrectUncontendedValue(int slot_idx) {
+    intptr_as_array_of<T> slot;
+    slot.result = 0;
+    for( int i=0; i<slot.how_many_Ts; ++i ) {
+        const T my_prime = T(prime[slot_idx*slot.how_many_Ts + i]);
+        for( int j=0; j<numMaskedOperations; ++j )
+            slot.space[i] += my_prime;
+    }
+    return slot.result;
+}
+
+template<typename T>
+intptr_t getCorrectContendedValue() {
+    intptr_as_array_of<T>  slot;
+    slot.result = 0;
+    for( int i=0; i<slot.how_many_Ts; ++i )
+        for( int primes=0; primes<testSpaceSize; ++primes )
+            for( int j=0; j<numMaskedOperations; ++j )
+                slot.space[i] += prime[primes];
+    return slot.result;
+}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif // warning 4244 is back again
+
+template<typename T>
+void TestMaskedCAS() {
+    if( Verbose )
+        REPORT("testing masked CAS<%d>\n",int(sizeof(T)));
+
+    const int num_slots = sizeof(T)*testSpaceSize/sizeof(intptr_t);
+    intptr_t arr1[num_slots+2]; // two more "canary" slots at boundaries
+    intptr_t arr2[num_slots+2];
+    for(int i=0; i<num_slots+2; ++i)
+        arr2[i] = arr1[i] = 0;
+    T* test_space_uncontended = (T*)(arr1+1);
+    T* test_space_contended = (T*)(arr2+1);
+
+    NativeParallelFor( testSpaceSize, TestMaskedCAS_Body<T>(test_space_uncontended, test_space_contended) );
+
+    ASSERT( arr1[0]==0 && arr1[num_slots+1]==0 && arr2[0]==0 && arr2[num_slots+1]==0 , "adjacent memory was overwritten" );
+    const intptr_t correctContendedValue = getCorrectContendedValue<T>();
+    for(int i=0; i<num_slots; ++i) {
+        ASSERT( arr1[i+1]==getCorrectUncontendedValue<T>(i), "unexpected value in an uncontended slot" );
+        ASSERT( arr2[i+1]==correctContendedValue, "unexpected value in a contended slot" );
+    }
+}
+
+template<unsigned N>
+class ArrayElement {
+    char item[N];
+};
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    ParseCommandLine( argc, argv );
+#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400
+    TestAtomicInteger<unsigned long long>("unsigned long long");
+    TestAtomicInteger<long long>("long long");
+#else
+    REPORT("Warning: atomic<64-bits> not tested because of known problem in Microsoft compiler\n");
+#endif /*defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */
+    TestAtomicInteger<unsigned long>("unsigned long");
+    TestAtomicInteger<long>("long");
+    TestAtomicInteger<unsigned int>("unsigned int");
+    TestAtomicInteger<int>("int");
+    TestAtomicInteger<unsigned short>("unsigned short");
+    TestAtomicInteger<short>("short");
+    TestAtomicInteger<signed char>("signed char");
+    TestAtomicInteger<unsigned char>("unsigned char");
+    TestAtomicInteger<char>("char");
+    TestAtomicInteger<wchar_t>("wchar_t");
+    TestAtomicInteger<size_t>("size_t");
+    TestAtomicInteger<ptrdiff_t>("ptrdiff_t");
+    TestAtomicPointer<ArrayElement<1> >();
+    TestAtomicPointer<ArrayElement<2> >();
+    TestAtomicPointer<ArrayElement<3> >();
+    TestAtomicPointer<ArrayElement<4> >();
+    TestAtomicPointer<ArrayElement<5> >();
+    TestAtomicPointer<ArrayElement<6> >();
+    TestAtomicPointer<ArrayElement<7> >();
+    TestAtomicPointer<ArrayElement<8> >();
+    TestAtomicPointerToTypeOfUnknownSize<IncompleteType*>( "IncompleteType*" );
+    TestAtomicPointerToTypeOfUnknownSize<void*>( "void*" );
+    TestAtomicBool();
+    TestAtomicEnum();
+#if !__TBB_FLOATING_POINT_BROKEN 
+    TestAtomicFloat<float>("float");
+    TestAtomicFloat<double>("double");
+#endif /* !__TBB_FLOATING_POINT_BROKEN  */
+    ASSERT( !ParallelError, NULL );
+    TestMaskedCAS<unsigned char>();
+    TestMaskedCAS<unsigned short>();
+    REPORT("done\n");
+    return 0;
+}
+
+template<typename T>
+struct FlagAndMessage {
+    //! 0 if message not set yet, 1 if message is set.
+    tbb::atomic<T> flag;
+    /** Force flag and message to be on distinct cache lines for machines with cache line size <= 4096 bytes */
+    char pad[4096/sizeof(T)];
+    //! Non-zero if message is ready
+    T message;    
+};
+
+// A special template function used for summation.
+// Actually it is only necessary because of its specialization for void*
+template<typename T>
+T special_sum(intptr_t arg1, intptr_t arg2) {
+    return (T)((T)arg1 + arg2);
+}
+
+// The specialization for IncompleteType* is required
+// because pointer arithmetic (+) is impossible with IncompleteType*
+template<>
+IncompleteType* special_sum<IncompleteType*>(intptr_t arg1, intptr_t arg2) {
+    return (IncompleteType*)(arg1 + arg2);
+}
+
+// The specialization for void* is required
+// because pointer arithmetic (+) is impossible with void*
+template<>
+void* special_sum<void*>(intptr_t arg1, intptr_t arg2) {
+    return (void*)(arg1 + arg2);
+}
+
+// The specialization for bool is required to shut up gratuitous compiler warnings,
+// because some compilers warn about casting int to bool.
+template<>
+bool special_sum<bool>(intptr_t arg1, intptr_t arg2) {
+    return ((arg1!=0) + arg2)!=0;
+}
+
+volatile int One = 1;
+template<typename T>
+class HammerLoadAndStoreFence: NoAssign {
+    FlagAndMessage<T>* fam;
+    const int n;
+    const int p;
+    const int trial;
+    const char* name;
+    mutable T accum;
+public:
+    HammerLoadAndStoreFence( FlagAndMessage<T>* fam_, int n_, int p_, const char* name_, int trial_ ) : fam(fam_), n(n_), p(p_), trial(trial_), name(name_) {}
+    void operator()( int k ) const {
+        int one = One;
+        FlagAndMessage<T>* s = fam+k;
+        FlagAndMessage<T>* s_next = fam + (k+1)%p;
+        for( int i=0; i<n; ++i ) {
+            // The inner for loop is a spin-wait loop, which is normally considered very bad style. 
+            // But we must use it here because we are interested in examining subtle hardware effects.
+            for(unsigned short cnt=1; ; ++cnt) {
+                if( !cnt ) // to help 1-core systems complete the test, yield every 2^16 iterations
+                    __TBB_Yield();
+                // Compilers typically generate non-trivial sequence for division by a constant.
+                // The expression here is dependent on the loop index i, so it cannot be hoisted.
+#define COMPLICATED_ZERO (i*(one-1)/100)
+                // Read flag and then the message
+                T flag, message;
+                if( trial&1 ) { 
+                    // COMPLICATED_ZERO here tempts compiler to hoist load of message above reading of flag.
+                    flag = (s+COMPLICATED_ZERO)->flag;
+                    message = s->message;
+                } else {
+                    flag = s->flag;
+                    message = s->message;
+                }
+                if( flag ) {
+                    if( flag!=(T)-1 ) {
+                        REPORT("ERROR: flag!=(T)-1 k=%d i=%d trial=%x type=%s (atomicity problem?)\n", k, i, trial, name );
+                        ParallelError = true;
+                    } 
+                    if( message!=(T)-1 ) {
+                        REPORT("ERROR: message!=(T)-1 k=%d i=%d trial=%x type=%s (memory fence problem?)\n", k, i, trial, name );
+                        ParallelError = true;
+                    }
+                    s->message = T(0); 
+                    s->flag = T(0);
+                    // Set message and then the flag
+                    if( trial&2 ) {
+                        // COMPLICATED_ZERO here tempts compiler to sink store below setting of flag
+                        s_next->message = special_sum<T>(-1, COMPLICATED_ZERO);
+                        s_next->flag = (T)-1;
+                    } else {
+                        s_next->message = (T)-1;
+                        s_next->flag = (T)-1;
+                    }
+                    break;
+                } else {
+                    // Force compiler to use message anyway, so it cannot sink read of s->message below the if.
+                    accum = message;
+                }
+            }
+        }
+    }
+};
+
+//! Test that atomic<T> has acquire semantics for loads and release semantics for stores.
+/** Test performs round-robin passing of message among p processors, 
+    where p goes from MinThread to MaxThread. */
+template<typename T>
+void TestLoadAndStoreFences( const char* name ) {
+    for( int p=MinThread<2 ? 2 : MinThread; p<=MaxThread; ++p ) {
+        FlagAndMessage<T>* fam = new FlagAndMessage<T>[p];
+        // Each of four trials excercise slightly different expresion pattern within the test.
+        // See occurrences of COMPLICATED_ZERO for details. 
+        for( int trial=0; trial<4; ++trial ) {
+            memset( fam, 0, p*sizeof(FlagAndMessage<T>) );
+            fam->message = (T)-1;
+            fam->flag = (T)-1;
+            NativeParallelFor( p, HammerLoadAndStoreFence<T>( fam, 100, p, name, trial ) );
+            for( int k=0; k<p; ++k ) {
+                ASSERT( fam[k].message==(k==0 ? (T)-1 : 0), "incomplete round-robin?" ); 
+                ASSERT( fam[k].flag==(k==0 ? (T)-1 : 0), "incomplete round-robin?" ); 
+            }
+        }
+        delete[] fam;
+    }
+}
+
+//! Sparse set of values of integral type T.
+/** Set is designed so that if a value is read or written non-atomically, 
+    the resulting intermediate value is likely to not be a member of the set. */
+template<typename T>
+class SparseValueSet {
+    T factor;
+public:
+    SparseValueSet() {
+        // Compute factor such that:
+        // 1. It has at least one 1 in most of its bytes.
+        // 2. The bytes are typically different.
+        // 3. When multiplied by any value <=127, the product does not overflow.
+        factor = T(0);
+        for( unsigned i=0; i<sizeof(T)*8-7; i+=7 ) 
+            factor = T(factor | T(1)<<i);
+     }
+     //! Get ith member of set
+     T get( int i ) const {
+         // Create multiple of factor.  The & prevents overflow of the product.
+         return T((i&0x7F)*factor);
+     }        
+     //! True if set contains x
+     bool contains( T x ) const {
+         // True if 
+         return (x%factor)==0;
+     }
+};
+
+//! Specialization for pointer types.  The pointers are random and should not be dereferenced.
+template<typename T>
+class SparseValueSet<T*> {
+    SparseValueSet<ptrdiff_t> my_set;
+public:
+    T* get( int i ) const {return reinterpret_cast<T*>(my_set.get(i));} 
+    bool contains( T* x ) const {return my_set.contains(reinterpret_cast<ptrdiff_t>(x));}
+};
+
+//! Specialization for bool.  
+/** Checking bool for atomic read/write is pointless in practice, because 
+    there is no way to *not* atomically read or write a bool value. */
+template<>
+class SparseValueSet<bool> {
+public:
+    bool get( int i ) const {return i&1;}
+    bool contains( bool ) const {return true;}
+};
+
+#if !__TBB_FLOATING_POINT_BROKEN
+
+#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
+    // VS2008/VC9 seems to have an issue; limits pull in math.h
+    #pragma warning( push )
+    #pragma warning( disable: 4985 )
+#endif
+#include <limits> /* Need std::numeric_limits */
+#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif
+
+//! Commonality inherited by specializations for floating-point types.
+template<typename T>
+class SparseFloatSet: NoAssign {
+    const T epsilon;
+public:
+    SparseFloatSet() : epsilon(std::numeric_limits<T>::epsilon()) {}
+    T get( int i ) const {
+        return i==0 ? T(0) : 1/T((i&0x7F)+1);
+    }
+    bool contains( T x ) const {
+        if( x==T(0) ) {
+            return true;
+        } else {
+            int j = int(1/x+T(0.5));
+            if( 0<j && j<=128 ) {
+                T error = x*T(j)-T(1);
+                // In the calculation above, if x was indeed generated by method get, the error should be 
+                // at most epsilon, because x is off by at most 1/2 ulp from its infinitely precise value, 
+                // j is exact, and the multiplication incurs at most another 1/2 ulp of round-off error.
+                if( -epsilon<=error && error<=epsilon ) {
+                    return true;
+                } else {
+                    REPORT("Warning: excessive floating-point error encountered j=%d x=%.15g error=%.15g\n",j,x,error);
+                }
+            }
+            return false;
+        }
+    };
+};
+
+template<> 
+class SparseValueSet<float>: public SparseFloatSet<float> {};
+
+template<> 
+class SparseValueSet<double>: public SparseFloatSet<double> {};
+
+#endif /* !__TBB_FLOATING_POINT_BROKEN */
+
+template<typename T>
+class HammerAssignment: NoAssign {
+    tbb::atomic<T>& x;
+    const char* name;
+    SparseValueSet<T> set;
+public:   
+    HammerAssignment( tbb::atomic<T>& x_, const char* name_ ) : x(x_), name(name_) {}
+    void operator()( int k ) const {
+        const int n = 1000000;
+        if( k ) {
+            tbb::atomic<T> z;
+            AssertSameType( z=x, z );    // Check that return type from assignment is correct
+            for( int i=0; i<n; ++i ) {
+                // Read x atomically into z.
+                z = x;
+                if( !set.contains(z) ) {
+                    REPORT("ERROR: assignment of atomic<%s> is not atomic\n", name);
+                    ParallelError = true;
+                    return;
+                }
+            }
+        } else {
+            tbb::atomic<T> y;
+            for( int i=0; i<n; ++i ) {
+                // Get pseudo-random value. 
+                y = set.get(i);
+                // Write y atomically into x.
+                x = y;
+            }
+        }
+    }
+};
+
+// Compile-time check that a class method has the required signature.
+// Intended to check the assignment operator of tbb::atomic.
+template<typename T> void TestAssignmentSignature( T& (T::*)(const T&) ) {}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Suppress "conditional expression is constant" warning.
+    #pragma warning( push )
+    #pragma warning( disable: 4127 )
+#endif
+
+template<typename T>
+void TestAssignment( const char* name ) {
+    TestAssignmentSignature( &tbb::atomic<T>::operator= );
+    tbb::atomic<T> x;
+    x = T(0);
+    NativeParallelFor( 2, HammerAssignment<T>( x, name ) );
+#if __TBB_x86_32 && (__linux__ || __FreeBSD__ || _WIN32)
+    if( sizeof(T)==8 ) {
+        // Some compilers for IA-32 fail to provide 8-byte alignment of objects on the stack, 
+        // even if the object specifies 8-byte alignment.  On such platforms, the IA-32 implementation 
+        // of atomic<long long> and atomic<unsigned long long> use different tactics depending upon 
+        // whether the object is properly aligned or not.  The following abusive test ensures that we
+        // cover both the proper and improper alignment cases, one with the x above and the other with 
+        // the y below, perhaps not respectively.
+
+        // Allocate space big enough to always contain 8-byte locations that are aligned and misaligned.
+        char raw_space[15];
+        // Set delta to 0 if x is aligned, 4 otherwise.
+        uintptr_t delta = ((reinterpret_cast<uintptr_t>(&x)&7) ? 0 : 4); 
+        // y crosses 8-byte boundary if and only if x does not cross.
+        tbb::atomic<T>& y = *reinterpret_cast<tbb::atomic<T>*>((reinterpret_cast<uintptr_t>(&raw_space[7+delta])&~7u) - delta);
+        // Assertion checks that y really did end up somewhere inside "raw_space".
+        ASSERT( raw_space<=reinterpret_cast<char*>(&y), "y starts before raw_space" );
+        ASSERT( reinterpret_cast<char*>(&y+1) <= raw_space+sizeof(raw_space), "y starts after raw_space" );
+        y = T(0);
+        NativeParallelFor( 2, HammerAssignment<T>( y, name ) );
+    }
+#endif /* __TBB_x86_32 && (__linux__ || __FreeBSD__ || _WIN32) */
+}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif
+
+template<typename T>
+void TestParallel( const char* name ) {
+    TestLoadAndStoreFences<T>(name);
+    TestAssignment<T>(name);
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_blocked_range.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_blocked_range.cpp
new file mode 100644 (file)
index 0000000..ed69cdf
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/blocked_range.h"
+#include "harness_assert.h"
+
+// First test as much as we can without including other headers.
+// Doing so should catch problems arising from failing to include headers.
+
+class AbstractValueType {
+    AbstractValueType() {}
+    int value;
+public: 
+    friend AbstractValueType MakeAbstractValueType( int i );
+    friend int GetValueOf( const AbstractValueType& v ) {return v.value;}
+};
+
+AbstractValueType MakeAbstractValueType( int i ) {
+    AbstractValueType x;
+    x.value = i;
+    return x;
+}
+
+std::size_t operator-( const AbstractValueType& u, const AbstractValueType& v ) {
+    return GetValueOf(u)-GetValueOf(v);
+}
+
+bool operator<( const AbstractValueType& u, const AbstractValueType& v ) {
+    return GetValueOf(u)<GetValueOf(v);
+}
+
+AbstractValueType operator+( const AbstractValueType& u, std::size_t offset ) {
+    return MakeAbstractValueType(GetValueOf(u)+int(offset));
+}
+
+static void SerialTest() {
+    for( int x=-10; x<10; ++x )
+        for( int y=-10; y<10; ++y ) {
+            AbstractValueType i = MakeAbstractValueType(x);
+            AbstractValueType j = MakeAbstractValueType(y);
+            for( std::size_t k=1; k<10; ++k ) {
+                typedef tbb::blocked_range<AbstractValueType> range_type;
+                range_type r( i, j, k );
+                AssertSameType( r.empty(), true );
+                AssertSameType( range_type::size_type(), std::size_t() );
+                AssertSameType( static_cast<range_type::const_iterator*>(0), static_cast<AbstractValueType*>(0) );
+                AssertSameType( r.begin(), MakeAbstractValueType(0) );
+                AssertSameType( r.end(), MakeAbstractValueType(0) );
+                ASSERT( r.empty()==(y<=x), NULL );
+                ASSERT( r.grainsize()==k, NULL );
+                if( x<=y ) {
+                    AssertSameType( r.is_divisible(), true );
+                    ASSERT( r.is_divisible()==(std::size_t(y-x)>k), NULL );
+                    ASSERT( r.size()==std::size_t(y-x), NULL );
+                    if( r.is_divisible() ) {
+                        tbb::blocked_range<AbstractValueType> r2(r,tbb::split());
+                        ASSERT( GetValueOf(r.begin())==x, NULL );
+                        ASSERT( GetValueOf(r.end())==GetValueOf(r2.begin()), NULL );
+                        ASSERT( GetValueOf(r2.end())==y, NULL );
+                        ASSERT( r.grainsize()==k, NULL );
+                        ASSERT( r2.grainsize()==k, NULL );
+                    }
+                }
+            }
+        }
+}
+
+#include "harness.h"
+#include "tbb/parallel_for.h"
+
+const int N = 1<<22;
+
+unsigned char Array[N];
+
+struct Striker {
+    // Note: we use <int> here instead of <long> in order to test for Quad 407676
+    void operator()( const tbb::blocked_range<int>& r ) const {
+        for( tbb::blocked_range<int>::const_iterator i=r.begin(); i!=r.end(); ++i )
+            ++Array[i];
+    }
+};
+
+void ParallelTest() {
+    for( int i=0; i<N; i=i<3 ? i+1 : i*3 ) {
+        const tbb::blocked_range<int> r( 0, i, 10 );
+        tbb::parallel_for( r, Striker() );
+        for( int k=0; k<N; ++k ) {
+            ASSERT( Array[k]==(k<i), NULL );
+            Array[k] = 0;
+        }
+    }
+}
+
+#include "tbb/task_scheduler_init.h"
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    ParseCommandLine(argc,argv);
+    SerialTest();
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        tbb::task_scheduler_init init(p);
+        ParallelTest();
+    }
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_blocked_range2d.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_blocked_range2d.cpp
new file mode 100644 (file)
index 0000000..2322948
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/blocked_range2d.h"
+#include "harness_assert.h"
+
+// First test as much as we can without including other headers.
+// Doing so should catch problems arising from failing to include headers.
+
+template<typename Tag>
+class AbstractValueType {
+    AbstractValueType() {}
+    int value;
+public: 
+    template<typename OtherTag>
+    friend AbstractValueType<OtherTag> MakeAbstractValueType( int i );
+
+    friend int GetValueOf( const AbstractValueType& v ) {return v.value;}
+};
+
+template<typename Tag>
+AbstractValueType<Tag> MakeAbstractValueType( int i ) {
+    AbstractValueType<Tag> x;
+    x.value = i;
+    return x;
+}
+
+template<typename Tag>
+bool operator<( const AbstractValueType<Tag>& u, const AbstractValueType<Tag>& v ) {
+    return GetValueOf(u)<GetValueOf(v);
+}
+
+template<typename Tag>
+std::size_t operator-( const AbstractValueType<Tag>& u, const AbstractValueType<Tag>& v ) {
+    return GetValueOf(u)-GetValueOf(v);
+}
+
+template<typename Tag>
+AbstractValueType<Tag> operator+( const AbstractValueType<Tag>& u, std::size_t offset ) {
+    return MakeAbstractValueType<Tag>(GetValueOf(u)+int(offset));
+}
+
+struct RowTag {};
+struct ColTag {};
+
+static void SerialTest() {
+    typedef AbstractValueType<RowTag> row_type;
+    typedef AbstractValueType<ColTag> col_type;
+    typedef tbb::blocked_range2d<row_type,col_type> range_type;
+    for( int rowx=-10; rowx<10; ++rowx ) {
+        for( int rowy=rowx; rowy<10; ++rowy ) {
+            row_type rowi = MakeAbstractValueType<RowTag>(rowx);
+            row_type rowj = MakeAbstractValueType<RowTag>(rowy);
+            for( int rowg=1; rowg<10; ++rowg ) {
+                for( int colx=-10; colx<10; ++colx ) {
+                    for( int coly=colx; coly<10; ++coly ) {
+                        col_type coli = MakeAbstractValueType<ColTag>(colx);
+                        col_type colj = MakeAbstractValueType<ColTag>(coly);
+                        for( int colg=1; colg<10; ++colg ) {
+                            range_type r( rowi, rowj, rowg, coli, colj, colg );
+                            AssertSameType( r.is_divisible(), true );
+                            AssertSameType( r.empty(), true );
+                            AssertSameType( static_cast<range_type::row_range_type::const_iterator*>(0), static_cast<row_type*>(0) );
+                            AssertSameType( static_cast<range_type::col_range_type::const_iterator*>(0), static_cast<col_type*>(0) );
+                            AssertSameType( r.rows(), tbb::blocked_range<row_type>( rowi, rowj, 1 ));
+                            AssertSameType( r.cols(), tbb::blocked_range<col_type>( coli, colj, 1 ));
+                            ASSERT( r.empty()==(rowx==rowy||colx==coly), NULL );
+                            ASSERT( r.is_divisible()==(rowy-rowx>rowg||coly-colx>colg), NULL );
+                            if( r.is_divisible() ) {
+                                range_type r2(r,tbb::split());
+                                if( GetValueOf(r2.rows().begin())==GetValueOf(r.rows().begin()) ) {
+                                    ASSERT( GetValueOf(r2.rows().end())==GetValueOf(r.rows().end()), NULL );
+                                    ASSERT( GetValueOf(r2.cols().begin())==GetValueOf(r.cols().end()), NULL );
+                                } else {
+                                    ASSERT( GetValueOf(r2.cols().end())==GetValueOf(r.cols().end()), NULL );
+                                    ASSERT( GetValueOf(r2.rows().begin())==GetValueOf(r.rows().end()), NULL );
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+#include "harness.h"
+#include "tbb/parallel_for.h"
+
+const int N = 1<<10;
+
+unsigned char Array[N][N];
+
+struct Striker {
+   // Note: we use <int> here instead of <long> in order to test for problems similar to Quad 407676
+    void operator()( const tbb::blocked_range2d<int>& r ) const {
+        for( tbb::blocked_range<int>::const_iterator i=r.rows().begin(); i!=r.rows().end(); ++i )
+            for( tbb::blocked_range<int>::const_iterator j=r.cols().begin(); j!=r.cols().end(); ++j )
+                ++Array[i][j];
+    }
+};
+
+void ParallelTest() {
+    for( int i=0; i<N; i=i<3 ? i+1 : i*3 ) {
+        for( int j=0; j<N; j=j<3 ? j+1 : j*3 ) {
+            const tbb::blocked_range2d<int> r( 0, i, 7, 0, j, 5 );
+            tbb::parallel_for( r, Striker() );
+            for( int k=0; k<N; ++k ) {
+                for( int l=0; l<N; ++l ) {
+                    ASSERT( Array[k][l]==(k<i && l<j), NULL );
+                    Array[k][l] = 0;
+                }
+            }   
+        }
+    }
+}
+
+#include "tbb/task_scheduler_init.h"
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    ParseCommandLine(argc,argv);
+    SerialTest();
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        tbb::task_scheduler_init init(p);
+        ParallelTest();
+    }
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_blocked_range3d.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_blocked_range3d.cpp
new file mode 100644 (file)
index 0000000..b4a1fce
--- /dev/null
@@ -0,0 +1,186 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/blocked_range3d.h"
+#include "harness_assert.h"
+
+// First test as much as we can without including other headers.
+// Doing so should catch problems arising from failing to include headers.
+
+template<typename Tag>
+class AbstractValueType {
+    AbstractValueType() {}
+    int value;
+public: 
+    template<typename OtherTag>
+    friend AbstractValueType<OtherTag> MakeAbstractValueType( int i );
+
+    friend int GetValueOf( const AbstractValueType& v ) {return v.value;}
+};
+
+template<typename Tag>
+AbstractValueType<Tag> MakeAbstractValueType( int i ) {
+    AbstractValueType<Tag> x;
+    x.value = i;
+    return x;
+}
+
+template<typename Tag>
+bool operator<( const AbstractValueType<Tag>& u, const AbstractValueType<Tag>& v ) {
+    return GetValueOf(u)<GetValueOf(v);
+}
+
+template<typename Tag>
+std::size_t operator-( const AbstractValueType<Tag>& u, const AbstractValueType<Tag>& v ) {
+    return GetValueOf(u)-GetValueOf(v);
+}
+
+template<typename Tag>
+AbstractValueType<Tag> operator+( const AbstractValueType<Tag>& u, std::size_t offset ) {
+    return MakeAbstractValueType<Tag>(GetValueOf(u)+int(offset));
+}
+
+struct PageTag {};
+struct RowTag {};
+struct ColTag {};
+
+static void SerialTest() {
+    typedef AbstractValueType<PageTag> page_type;
+    typedef AbstractValueType<RowTag> row_type;
+    typedef AbstractValueType<ColTag> col_type;
+    typedef tbb::blocked_range3d<page_type,row_type,col_type> range_type;
+    for( int pagex=-4; pagex<4; ++pagex ) {
+        for( int pagey=pagex; pagey<4; ++pagey ) {
+            page_type pagei = MakeAbstractValueType<PageTag>(pagex);
+            page_type pagej = MakeAbstractValueType<PageTag>(pagey);
+            for( int pageg=1; pageg<4; ++pageg ) {
+                for( int rowx=-4; rowx<4; ++rowx ) {
+                    for( int rowy=rowx; rowy<4; ++rowy ) {
+                        row_type rowi = MakeAbstractValueType<RowTag>(rowx);
+                        row_type rowj = MakeAbstractValueType<RowTag>(rowy);
+                        for( int rowg=1; rowg<4; ++rowg ) {
+                            for( int colx=-4; colx<4; ++colx ) {
+                                for( int coly=colx; coly<4; ++coly ) {
+                                    col_type coli = MakeAbstractValueType<ColTag>(colx);
+                                    col_type colj = MakeAbstractValueType<ColTag>(coly);
+                                    for( int colg=1; colg<4; ++colg ) {
+                                        range_type r( pagei, pagej, pageg, rowi, rowj, rowg, coli, colj, colg );
+                                        AssertSameType( r.is_divisible(), true );
+                                   
+                                        AssertSameType( r.empty(), true );
+                                       
+                                        AssertSameType( static_cast<range_type::page_range_type::const_iterator*>(0), static_cast<page_type*>(0) );
+                                        AssertSameType( static_cast<range_type::row_range_type::const_iterator*>(0), static_cast<row_type*>(0) );
+                                        AssertSameType( static_cast<range_type::col_range_type::const_iterator*>(0), static_cast<col_type*>(0) );
+                            
+                                        AssertSameType( r.pages(), tbb::blocked_range<page_type>( pagei, pagej, 1 ));
+                                        AssertSameType( r.rows(), tbb::blocked_range<row_type>( rowi, rowj, 1 ));
+                                        AssertSameType( r.cols(), tbb::blocked_range<col_type>( coli, colj, 1 ));
+            
+                                        ASSERT( r.empty()==(pagex==pagey||rowx==rowy||colx==coly), NULL );
+                         
+                                        ASSERT( r.is_divisible()==(pagey-pagex>pageg||rowy-rowx>rowg||coly-colx>colg), NULL );
+                            
+                                        if( r.is_divisible() ) {
+                                            range_type r2(r,tbb::split());
+                                            if( (GetValueOf(r2.pages().begin())==GetValueOf(r.pages().begin())) && (GetValueOf(r2.rows().begin())==GetValueOf(r.rows().begin())) ) {
+                                                ASSERT( GetValueOf(r2.pages().end())==GetValueOf(r.pages().end()), NULL );
+                                                ASSERT( GetValueOf(r2.rows().end())==GetValueOf(r.rows().end()), NULL );
+                                                ASSERT( GetValueOf(r2.cols().begin())==GetValueOf(r.cols().end()), NULL );
+                                            } else {
+                                                if ( (GetValueOf(r2.pages().begin())==GetValueOf(r.pages().begin())) && (GetValueOf(r2.cols().begin())==GetValueOf(r.cols().begin())) ) {
+                                                    ASSERT( GetValueOf(r2.pages().end())==GetValueOf(r.pages().end()), NULL );
+                                                    ASSERT( GetValueOf(r2.cols().end())==GetValueOf(r.cols().end()), NULL );
+                                                    ASSERT( GetValueOf(r2.rows().begin())==GetValueOf(r.rows().end()), NULL );
+                                                } else {
+                                                   ASSERT( GetValueOf(r2.rows().end())==GetValueOf(r.rows().end()), NULL );
+                                                   ASSERT( GetValueOf(r2.cols().end())==GetValueOf(r.cols().end()), NULL );
+                                                   ASSERT( GetValueOf(r2.pages().begin())==GetValueOf(r.pages().end()), NULL );
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+#include "harness.h"
+#include "tbb/parallel_for.h"
+
+const int N = 1<<5;
+
+unsigned char Array[N][N][N];
+
+struct Striker {
+   // Note: we use <int> here instead of <long> in order to test for problems similar to Quad 407676
+    void operator()( const tbb::blocked_range3d<int>& r ) const {
+        for( tbb::blocked_range<int>::const_iterator i=r.pages().begin(); i!=r.pages().end(); ++i )
+            for( tbb::blocked_range<int>::const_iterator j=r.rows().begin(); j!=r.rows().end(); ++j )
+                for( tbb::blocked_range<int>::const_iterator k=r.cols().begin(); k!=r.cols().end(); ++k )
+                    ++Array[i][j][k];
+    }
+};
+
+void ParallelTest() {
+       for( int i=0; i<N; i=i<3 ? i+1 : i*3 ) {
+          for( int j=0; j<N; j=j<3 ? j+1 : j*3 ) {
+            for( int k=0; k<N; k=k<3 ? k+1 : k*3 ) {
+                const tbb::blocked_range3d<int> r( 0, i, 5, 0, j, 3, 0, k, 1 );
+                tbb::parallel_for( r, Striker() );
+                for( int l=0; l<N; ++l ) {
+                    for( int m=0; m<N; ++m ) {
+                        for( int n=0; n<N; ++n ) {
+                             ASSERT( Array[l][m][n]==(l<i && m<j && n<k), NULL );
+                             Array[l][m][n] = 0;
+                        }
+                    }
+                }   
+            }
+        }
+    }
+}
+
+#include "tbb/task_scheduler_init.h"
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    ParseCommandLine(argc,argv);
+    SerialTest(); 
+           for( int p=MinThread; p<=MaxThread; ++p ) {
+            tbb::task_scheduler_init init(p);
+            ParallelTest();
+    }
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_cache_aligned_allocator.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_cache_aligned_allocator.cpp
new file mode 100644 (file)
index 0000000..59865f7
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Test whether cache_aligned_allocator works with some of the host's STL containers.
+
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/tbb_allocator.h"
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+// the real body of the test is there:
+#include "test_allocator.h"
+
+template<>
+struct is_zero_filling<tbb::zero_allocator<void> > {
+    static const bool value = true;
+};
+
+__TBB_TEST_EXPORT
+int main() {
+    int result = TestMain<tbb::cache_aligned_allocator<void> >();
+    result += TestMain<tbb::tbb_allocator<void> >();
+    result += TestMain<tbb::zero_allocator<void> >();
+
+    REPORT("done\n");
+    return result;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_cache_aligned_allocator_STL.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_cache_aligned_allocator_STL.cpp
new file mode 100644 (file)
index 0000000..b2922a1
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Test whether cache_aligned_allocator works with some of the host's STL containers.
+
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/tbb_allocator.h"
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "test_allocator_STL.h"
+
+__TBB_TEST_EXPORT
+int main() {
+    TestAllocatorWithSTL<tbb::cache_aligned_allocator<void> >();
+    TestAllocatorWithSTL<tbb::tbb_allocator<void> >();
+    TestAllocatorWithSTL<tbb::zero_allocator<void> >();
+    REPORT("done\n");
+    return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_combinable.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_combinable.cpp
new file mode 100644 (file)
index 0000000..895b265
--- /dev/null
@@ -0,0 +1,458 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/combinable.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/parallel_reduce.h"
+#include "tbb/blocked_range.h"
+#include "tbb/tick_count.h"
+#include "tbb/tbb_allocator.h"
+#include "tbb/tbb_thread.h"
+
+#include <cstring>
+#include <vector>
+#include <utility>
+
+#include "harness_assert.h"
+#include "harness.h"
+
+#if __TBB_GCC_WARNING_SUPPRESSION_ENABLED
+#pragma GCC diagnostic ignored "-Wuninitialized"
+#endif
+
+static tbb::atomic<int> construction_counter;
+static tbb::atomic<int> destruction_counter;
+
+const int REPETITIONS = 10;
+const int N = 100000;
+const int VALID_NUMBER_OF_KEYS = 100;
+const double EXPECTED_SUM = (REPETITIONS + 1) * N;
+
+//
+// A minimal class
+// Define: default and copy constructor, and allow implicit operator&
+// also operator=
+//
+
+class minimal {
+private:
+    int my_value;
+public:
+    minimal(int val=0) : my_value(val) { ++construction_counter; }
+    minimal( const minimal &m ) : my_value(m.my_value) { ++construction_counter; }
+    minimal& operator=(const minimal& other) { my_value = other.my_value; return *this; }
+    minimal& operator+=(const minimal& other) { my_value += other.my_value; return *this; }
+    operator int() const { return my_value; }
+    ~minimal() { ++destruction_counter; }
+    void set_value( const int i ) { my_value = i; }
+    int value( ) const { return my_value; }
+};
+
+//// functors for initialization and combine
+
+// Addition
+template <typename T>
+struct FunctorAddFinit {
+    T operator()() { return 0; }
+};
+
+template <typename T>
+struct FunctorAddFinit7 {
+    T operator()() { return 7; }
+};
+
+template <typename T>
+struct FunctorAddCombine {
+    T operator()(T left, T right ) const {
+        return left + right;
+    }
+};
+
+template <typename T>
+struct FunctorAddCombineRef {
+    T operator()(const T& left, const T& right ) const {
+        return left + right;
+    }
+};
+
+template <typename T>
+T my_finit( ) { return 0; }
+
+template <typename T>
+T my_combine( T left, T right) { return left + right; }
+
+template <typename T>
+T my_combine_ref( const T &left, const T &right) { return left + right; }
+
+template <typename T>
+class CombineEachHelper {
+public:
+    CombineEachHelper(T& _result) : my_result(_result) {}
+    void operator()(const T& new_bit) { my_result +=  new_bit; }
+    CombineEachHelper& operator=(const CombineEachHelper& other) { 
+        my_result =  other; 
+        return *this; 
+    }
+private:
+    T& my_result;
+};
+
+template <typename T>
+class CombineEachHelperCnt {
+public:
+    CombineEachHelperCnt(T& _result, int& _nbuckets) : my_result(_result), nBuckets(_nbuckets) {}
+    void operator()(const T& new_bit) { my_result +=  new_bit; ++nBuckets; }
+    CombineEachHelperCnt& operator=(const CombineEachHelperCnt& other) { 
+        my_result =  other.my_result; 
+        nBuckets = other.nBuckets;
+        return *this; 
+    }
+private:
+    T& my_result;
+    int& nBuckets;
+};
+
+template <typename T>
+class CombineEachVectorHelper {
+public:
+    typedef std::vector<T, tbb::tbb_allocator<T> > ContainerType;
+    CombineEachVectorHelper(T& _result) : my_result(_result) { }
+    void operator()(const ContainerType& new_bit) { 
+        for(typename ContainerType::const_iterator ci = new_bit.begin(); ci != new_bit.end(); ++ci) {
+            my_result +=  *ci;
+        }
+    }
+    CombineEachVectorHelper& operator=(const CombineEachVectorHelper& other) { my_result=other.my_result; return *this;}
+private:
+    T& my_result;
+};
+
+
+
+//// end functors
+
+template< typename T >
+void run_serial_scalar_tests(const char *test_name) {
+    tbb::tick_count t0;
+    T sum = 0;
+
+    if (Verbose) REPORT("Testing serial %s... ", test_name);  
+    for (int t = -1; t < REPETITIONS; ++t) {
+        if (Verbose && t == 0) t0 = tbb::tick_count::now(); 
+        for (int i = 0; i < N; ++i) {
+            sum += 1; 
+        }
+    }
+    double ResultValue = sum;
+    ASSERT( EXPECTED_SUM == ResultValue, NULL);
+    if (Verbose)
+        REPORT("done\nserial %s, 0, %g, %g\n", test_name, ResultValue, ( tbb::tick_count::now() - t0).seconds());
+}
+
+
+template <typename T>
+class ParallelScalarBody: NoAssign {
+    
+    tbb::combinable<T> &sums;
+public:
+
+    ParallelScalarBody ( tbb::combinable<T> &_sums ) : sums(_sums) { }
+
+    void operator()( const tbb::blocked_range<int> &r ) const {
+        for (int i = r.begin(); i != r.end(); ++i) { 
+            bool was_there;
+            T& my_local = sums.local(was_there);
+            if(!was_there) my_local = 0;
+             my_local +=  1 ;
+        }
+    }
+   
+};
+
+// parallel body with no test for first access.
+template <typename T>
+class ParallelScalarBodyNoInit: NoAssign {
+    
+    tbb::combinable<T> &sums;
+public:
+
+    ParallelScalarBodyNoInit ( tbb::combinable<T> &_sums ) : sums(_sums) { }
+
+    void operator()( const tbb::blocked_range<int> &r ) const {
+        for (int i = r.begin(); i != r.end(); ++i) { 
+             sums.local() +=  1 ;
+        }
+    }
+   
+};
+
+template< typename T >
+void RunParallelScalarTests(const char *test_name) {
+
+    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
+
+    for (int p = MinThread; p <= MaxThread; ++p) { 
+
+
+        if (p == 0) continue;
+
+        if (Verbose) REPORT("Testing parallel %s on %d thread(s)... ", test_name, p); 
+        init.initialize(p);
+
+        tbb::tick_count t0;
+
+        T assign_sum(0);
+
+        T combine_sum(0);
+
+        T combine_ref_sum(0);
+
+        T combine_each_sum(0);
+
+        T combine_finit_sum(0);
+
+        for (int t = -1; t < REPETITIONS; ++t) {
+            if (Verbose && t == 0) t0 = tbb::tick_count::now(); 
+
+            tbb::combinable<T> sums;
+            FunctorAddFinit<T> my_finit_decl;
+            tbb::combinable<T> finit_combinable(my_finit_decl);
+                                    
+
+            tbb::parallel_for( tbb::blocked_range<int>( 0, N, 10000 ), ParallelScalarBodyNoInit<T>( finit_combinable ) );
+            tbb::parallel_for( tbb::blocked_range<int>( 0, N, 10000 ), ParallelScalarBody<T>( sums ) );
+
+            // Use combine
+            combine_sum +=  sums.combine(my_combine<T>);
+            combine_ref_sum +=  sums.combine(my_combine_ref<T>);
+
+            CombineEachHelper<T> my_helper(combine_each_sum);
+            sums.combine_each(my_helper);
+           
+            // test assignment
+            tbb::combinable<T> assigned;
+            assigned = sums;
+
+            assign_sum +=  assigned.combine(my_combine<T>);
+
+            combine_finit_sum += finit_combinable.combine(my_combine<T>);
+        }
+
+        ASSERT( EXPECTED_SUM == combine_sum, NULL);
+        ASSERT( EXPECTED_SUM == combine_ref_sum, NULL);
+        ASSERT( EXPECTED_SUM == assign_sum, NULL);
+        ASSERT( EXPECTED_SUM == combine_finit_sum, NULL);
+
+        if (Verbose)
+            REPORT("done\nparallel %s, %d, %g, %g\n", test_name, p, static_cast<double>(combine_sum), 
+                                                      ( tbb::tick_count::now() - t0).seconds());
+        init.terminate();
+    }
+}
+
+
+template <typename T>
+class ParallelVectorForBody: NoAssign {
+    
+    tbb::combinable< std::vector<T, tbb::tbb_allocator<T> > > &locals;
+public:
+
+    ParallelVectorForBody ( tbb::combinable< std::vector<T, tbb::tbb_allocator<T> > > &_locals ) : locals(_locals) { }
+
+    void operator()( const tbb::blocked_range<int> &r ) const {
+        T one = 1;
+
+        for (int i = r.begin(); i < r.end(); ++i) {
+            locals.local().push_back( one );
+        }
+    }
+   
+};
+
+template< typename T >
+void RunParallelVectorTests(const char *test_name) {
+    tbb::tick_count t0;
+    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
+    typedef std::vector<T, tbb::tbb_allocator<T> > ContainerType;
+
+    for (int p = MinThread; p <= MaxThread; ++p) { 
+
+        if (p == 0) continue;
+        if (Verbose) REPORT("Testing parallel %s on %d thread(s)... ", test_name, p);
+        init.initialize(p);
+
+        T sum = 0;
+        T sum2 = 0;
+        T sum3 = 0;
+
+        for (int t = -1; t < REPETITIONS; ++t) {
+            if (Verbose && t == 0) t0 = tbb::tick_count::now(); 
+            typedef typename tbb::combinable< ContainerType > CombinableType;
+            CombinableType vs;
+
+            tbb::parallel_for ( tbb::blocked_range<int> (0, N, 10000), ParallelVectorForBody<T>( vs ) );
+
+            // copy construct
+            CombinableType vs2(vs); // this causes an assertion failure, related to allocators...
+
+            // assign
+            CombinableType vs3;
+            vs3 = vs;
+
+            CombineEachVectorHelper<T> MyCombineEach(sum);
+            vs.combine_each(MyCombineEach);
+
+            CombineEachVectorHelper<T> MyCombineEach2(sum2);
+            vs2.combine_each(MyCombineEach2);
+
+            CombineEachVectorHelper<T> MyCombineEach3(sum3);
+            vs2.combine_each(MyCombineEach3);
+            // combine_each sums all elements of each vector into the result.
+        }
+
+        double ResultValue = sum;
+        ASSERT( EXPECTED_SUM == ResultValue, NULL);
+        ResultValue = sum2;
+        ASSERT( EXPECTED_SUM == ResultValue, NULL);
+        ResultValue = sum3;
+        ASSERT( EXPECTED_SUM == ResultValue, NULL);
+        if (Verbose)
+            REPORT("done\nparallel %s, %d, %g, %g\n", test_name, p, ResultValue, ( tbb::tick_count::now() - t0).seconds());
+        init.terminate();
+    }
+}
+
+#include "harness_barrier.h"
+
+Harness::SpinBarrier sBarrier;
+
+struct Body : NoAssign {
+    tbb::combinable<int>* locals;
+    const int nthread;
+    const int nIters;
+    Body( int nthread_, int niters_ ) : nthread(nthread_), nIters(niters_) { sBarrier.initialize(nthread_); }
+
+
+    void operator()(int thread_id ) const {
+        bool existed;
+        sBarrier.wait();
+        for(int i = 0; i < nIters; ++i ) {
+            existed = thread_id & 1;
+            int oldval = locals->local(existed);
+            ASSERT(existed == (i > 0), "Error on first reference");
+            ASSERT(!existed || (oldval == thread_id), "Error on fetched value");
+            existed = thread_id & 1;
+            locals->local(existed) = thread_id;
+            ASSERT(existed, "Error on assignment");
+        }
+    }
+};
+
+void
+TestLocalAllocations( int nthread ) {
+    ASSERT(nthread > 0, "nthread must be positive");
+#define NITERATIONS 1000
+    Body myBody(nthread, NITERATIONS);
+    tbb::combinable<int> myCombinable;
+    myBody.locals = &myCombinable;
+
+    NativeParallelFor( nthread, myBody );
+
+    int mySum = 0;
+    int mySlots = 0;
+    CombineEachHelperCnt<int> myCountCombine(mySum, mySlots);
+    myCombinable.combine_each(myCountCombine);
+
+    ASSERT(nthread == mySlots, "Incorrect number of slots");
+    ASSERT(mySum == (nthread - 1) * nthread / 2, "Incorrect values in result");
+}
+
+
+void 
+RunParallelTests() {
+    RunParallelScalarTests<int>("int");
+    RunParallelScalarTests<double>("double");
+    RunParallelScalarTests<minimal>("minimal");
+    RunParallelVectorTests<int>("std::vector<int, tbb::tbb_allocator<int> >");
+    RunParallelVectorTests<double>("std::vector<double, tbb::tbb_allocator<double> >");
+}
+
+template <typename T>
+void
+RunAssignmentAndCopyConstructorTest(const char *test_name) {
+    if (Verbose) REPORT("Testing assignment and copy construction for %s\n", test_name);
+
+    // test creation with finit function (combine returns finit return value if no threads have created locals)
+    FunctorAddFinit7<T> my_finit7_decl;
+    tbb::combinable<T> create2(my_finit7_decl);
+    ASSERT(7 == create2.combine(my_combine<T>), NULL);
+
+    // test copy construction with function initializer
+    tbb::combinable<T> copy2(create2);
+    ASSERT(7 == copy2.combine(my_combine<T>), NULL);
+
+    // test copy assignment with function initializer
+    FunctorAddFinit<T> my_finit_decl;
+    tbb::combinable<T> assign2(my_finit_decl);
+    assign2 = create2;
+    ASSERT(7 == assign2.combine(my_combine<T>), NULL);
+}
+
+void
+RunAssignmentAndCopyConstructorTests() {
+    if(Verbose) REPORT("Running assignment and copy constructor tests\n");
+    RunAssignmentAndCopyConstructorTest<int>("int");
+    RunAssignmentAndCopyConstructorTest<double>("double");
+    RunAssignmentAndCopyConstructorTest<minimal>("minimal");
+}
+
+__TBB_TEST_EXPORT
+int main(int argc, char *argv[]) {
+   ParseCommandLine(argc, argv);
+
+   if (MaxThread > 0) {
+      RunParallelTests();
+   }
+
+    RunAssignmentAndCopyConstructorTests();
+    for(int i = 1 <= MinThread ? MinThread : 1; i <= MaxThread; ++i) {
+        if(Verbose) REPORT("Testing local() allocation with nthreads=%d\n", i);
+        for(int j = 0; j < 100; ++j) {
+            TestLocalAllocations(i);
+        }
+    }
+
+   REPORT("done\n");
+   return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_compiler.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_compiler.cpp
new file mode 100644 (file)
index 0000000..827d427
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+
+union char2bool {
+    unsigned char c;
+    volatile bool b;
+} u;
+
+// The function proves the compiler uses 0 or 1 to store a bool. It
+// inspects what a compiler does when it loads a bool.  A compiler that
+// uses a value other than 0 or 1 to represent a bool will have to normalize
+// the value to 0 or 1 when the bool is cast to an unsigned char.
+// Compilers that pass this test do not do the normalization, and thus must
+// be assuming that a bool is a 0 or 1.
+int test_bool_representation() {
+    for( unsigned i=0; i<256; ++i ) {
+        u.c = (unsigned char)i;
+        unsigned char x = (unsigned char)u.b;
+        if( x != i ) {
+            REPORT("Test failed at iteration i=%d\n",i);
+            return 1;
+        }
+    }
+    return 0;
+}
+
+__TBB_TEST_EXPORT
+int main() {
+    if( test_bool_representation()!=0 )
+        REPORT("ERROR: bool representation test failed\n");
+    else
+        REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_concurrent_hash_map.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_concurrent_hash_map.cpp
new file mode 100644 (file)
index 0000000..4aea6a4
--- /dev/null
@@ -0,0 +1,885 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifndef TBB_USE_PERFORMANCE_WARNINGS
+#define TBB_USE_PERFORMANCE_WARNINGS 1
+#endif
+
+// Our tests usually include the header under test first.  But this test needs
+// to use the preprocessor to edit the identifier runtime_warning in concurrent_hash_map.h.
+// Hence we include a few other headers before doing the abusive edit.
+#include "tbb/tbb_stddef.h" /* Defines runtime_warning */
+#include "harness_assert.h" /* Prerequisite for defining hooked_warning */
+
+// The symbol internal::runtime_warning is normally an entry point into the TBB library.
+// Here for sake of testing, we define it to be hooked_warning, a routine peculiar to this unit test.
+#define runtime_warning hooked_warning
+
+static bool bad_hashing = false;
+
+namespace tbb { 
+    namespace internal {
+        static void hooked_warning( const char* /*format*/, ... ) {
+            ASSERT(bad_hashing, "unexpected bad hashing");
+        }
+    } // namespace internal
+} // namespace tbb
+
+#include "tbb/concurrent_hash_map.h"
+
+// Restore runtime_warning as an entry point into the TBB library.
+#undef runtime_warning
+
+// Test whether a sufficient set of headers were included to instantiate a concurernt_hash_map. OSS Bug #120 (& #130):
+// http://www.threadingbuildingblocks.org/bug_desc.php?id=120
+tbb::concurrent_hash_map<std::pair<std::pair<int,std::string>,const char*>,int> TestInstantiation;
+
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+#include "tbb/atomic.h"
+#include "tbb/tick_count.h"
+#include "harness.h"
+#include "harness_allocator.h"
+
+class MyException : public std::bad_alloc {
+public:
+    virtual const char *what() const throw() { return "out of items limit"; }
+    virtual ~MyException() throw() {}
+};
+
+/** Has tighly controlled interface so that we can verify
+    that concurrent_hash_map uses only the required interface. */
+class MyKey {
+private:
+    void operator=( const MyKey&  );    // Deny access
+    int key;
+    friend class MyHashCompare;
+    friend class YourHashCompare;
+public:
+    static MyKey make( int i ) {
+        MyKey result;
+        result.key = i;
+        return result;
+    }
+    int value_of() const {return key;}
+};
+
+tbb::atomic<long> MyDataCount;
+long MyDataCountLimit = 0;
+
+class MyData {
+protected:
+    friend class MyData2;
+    int data;
+    enum state_t {
+        LIVE=0x1234,
+        DEAD=0x5678
+    } my_state;
+    void operator=( const MyData& );    // Deny acces
+public:
+    MyData(int i = 0) {
+        my_state = LIVE;
+        data = i;
+        if(MyDataCountLimit && MyDataCount + 1 >= MyDataCountLimit)
+            throw MyException();
+        ++MyDataCount;
+    }
+    MyData( const MyData& other ) {
+        ASSERT( other.my_state==LIVE, NULL );
+        my_state = LIVE;
+        data = other.data;
+        if(MyDataCountLimit && MyDataCount + 1 >= MyDataCountLimit)
+            throw MyException();
+        ++MyDataCount;
+    }
+    ~MyData() {
+        --MyDataCount;
+        my_state = DEAD;
+    }
+    static MyData make( int i ) {   
+        MyData result;
+        result.data = i;
+        return result;
+    }
+    int value_of() const {
+        ASSERT( my_state==LIVE, NULL );
+        return data;
+    }
+    void set_value( int i ) {
+        ASSERT( my_state==LIVE, NULL );
+        data = i;
+    }
+    bool operator==( const MyData& other ) const {
+        ASSERT( other.my_state==LIVE, NULL );
+        ASSERT( my_state==LIVE, NULL );
+        return data == other.data;
+    }
+};
+
+class MyData2 : public MyData {
+public:
+    MyData2( ) {}
+    MyData2( const MyData& other ) {
+        ASSERT( other.my_state==LIVE, NULL );
+        ASSERT( my_state==LIVE, NULL );
+        data = other.data;
+    }
+    void operator=( const MyData& other ) {
+        ASSERT( other.my_state==LIVE, NULL );
+        ASSERT( my_state==LIVE, NULL );
+        data = other.data;
+    }
+    void operator=( const MyData2& other ) {
+        ASSERT( other.my_state==LIVE, NULL );
+        ASSERT( my_state==LIVE, NULL );
+        data = other.data;
+    }
+    bool operator==( const MyData2& other ) const {
+        ASSERT( other.my_state==LIVE, NULL );
+        ASSERT( my_state==LIVE, NULL );
+        return data == other.data;
+    }
+};
+
+class MyHashCompare {
+public:
+    bool equal( const MyKey& j, const MyKey& k ) const {
+        return j.key==k.key;
+    }
+    unsigned long hash( const MyKey& k ) const {
+        return k.key;
+    }   
+};
+
+class YourHashCompare {
+public:
+    bool equal( const MyKey& j, const MyKey& k ) const {
+        return j.key==k.key;
+    }
+    unsigned long hash( const MyKey& ) const {
+        return 1;
+    }   
+};
+
+typedef local_counting_allocator<std::allocator<MyData> > MyAllocator;
+typedef tbb::concurrent_hash_map<MyKey,MyData,MyHashCompare,MyAllocator> MyTable;
+typedef tbb::concurrent_hash_map<MyKey,MyData2,MyHashCompare> MyTable2;
+typedef tbb::concurrent_hash_map<MyKey,MyData,YourHashCompare> YourTable;
+
+template<typename MyTable>
+inline void CheckAllocator(MyTable &table, size_t expected_allocs, size_t expected_frees, bool exact = true) {
+    size_t items_allocated = table.get_allocator().items_allocated, items_freed = table.get_allocator().items_freed;
+    size_t allocations = table.get_allocator().allocations, frees = table.get_allocator().frees;
+    if(Verbose)
+        REPORT("checking allocators: items %u/%u, allocs %u/%u\n",
+            unsigned(items_allocated), unsigned(items_freed), unsigned(allocations), unsigned(frees) );
+    ASSERT( items_allocated == allocations, NULL); ASSERT( items_freed == frees, NULL);
+    if(exact) {
+        ASSERT( allocations == expected_allocs, NULL); ASSERT( frees == expected_frees, NULL);
+    } else {
+        ASSERT( allocations >= expected_allocs, NULL); ASSERT( frees >= expected_frees, NULL);
+        ASSERT( allocations - frees == expected_allocs - expected_frees, NULL );
+    }
+}
+
+inline bool UseKey( size_t i ) {
+    return (i&3)!=3;
+}
+
+struct Insert {
+    static void apply( MyTable& table, int i ) {
+        if( UseKey(i) ) {
+            if( i&4 ) {
+                MyTable::accessor a;
+                table.insert( a, MyKey::make(i) );
+                if( i&1 )
+                    (*a).second.set_value(i*i);
+                else
+                    a->second.set_value(i*i);
+            } else
+                if( i&1 ) {
+                    MyTable::accessor a;
+                    table.insert( a, std::make_pair(MyKey::make(i), MyData(i*i)) );
+                    ASSERT( (*a).second.value_of()==i*i, NULL );
+                } else {
+                    MyTable::const_accessor ca;
+                    table.insert( ca, std::make_pair(MyKey::make(i), MyData(i*i)) );
+                    ASSERT( ca->second.value_of()==i*i, NULL );
+                }
+        }
+    }
+};
+
+struct Find {
+    static void apply( MyTable& table, int i ) {
+        MyTable::accessor a;
+        const MyTable::accessor& ca = a;
+        bool b = table.find( a, MyKey::make(i) );
+        ASSERT( b==!a.empty(), NULL );
+        if( b ) {
+            if( !UseKey(i) )
+                REPORT("Line %d: unexpected key %d present\n",__LINE__,i);
+            AssertSameType( &*a, static_cast<MyTable::value_type*>(0) );
+            ASSERT( ca->second.value_of()==i*i, NULL );
+            ASSERT( (*ca).second.value_of()==i*i, NULL );
+            if( i&1 )
+                ca->second.set_value( ~ca->second.value_of() );
+            else
+                (*ca).second.set_value( ~ca->second.value_of() );
+        } else {
+            if( UseKey(i) ) 
+                REPORT("Line %d: key %d missing\n",__LINE__,i);
+        }
+    }
+};
+
+struct FindConst {
+    static void apply( const MyTable& table, int i ) {
+        MyTable::const_accessor a;
+        const MyTable::const_accessor& ca = a;
+        bool b = table.find( a, MyKey::make(i) );
+        ASSERT( b==(table.count(MyKey::make(i))>0), NULL );
+        ASSERT( b==!a.empty(), NULL );
+        ASSERT( b==UseKey(i), NULL );
+        if( b ) {
+            AssertSameType( &*ca, static_cast<const MyTable::value_type*>(0) );
+            ASSERT( ca->second.value_of()==~(i*i), NULL );
+            ASSERT( (*ca).second.value_of()==~(i*i), NULL );
+        }
+    }
+};
+
+tbb::atomic<int> EraseCount;
+
+struct Erase {
+    static void apply( MyTable& table, int i ) {
+        bool b;
+        if(i&4) {
+            if(i&8) {
+                MyTable::const_accessor a;
+                b = table.find( a, MyKey::make(i) ) && table.erase( a );
+            } else {
+                MyTable::accessor a;
+                b = table.find( a, MyKey::make(i) ) && table.erase( a );
+            }
+        } else
+            b = table.erase( MyKey::make(i) );
+        if( b ) ++EraseCount;
+        ASSERT( table.count(MyKey::make(i)) == 0, NULL );
+    }
+};
+
+static const int IE_SIZE = 2;
+tbb::atomic<YourTable::size_type> InsertEraseCount[IE_SIZE];
+
+struct InsertErase  {
+    static void apply( YourTable& table, int i ) {
+        if ( i%3 ) {
+            int key = i%IE_SIZE;
+            if ( table.insert( std::make_pair(MyKey::make(key), MyData2()) ) ) 
+                ++InsertEraseCount[key];
+        } else {
+            int key = i%IE_SIZE;
+            if( i&1 ) {
+                YourTable::accessor res;
+                if(table.find( res, MyKey::make(key) ) && table.erase( res ) )
+                    --InsertEraseCount[key];
+            } else {
+                YourTable::const_accessor res;
+                if(table.find( res, MyKey::make(key) ) && table.erase( res ) )
+                    --InsertEraseCount[key];
+            }
+        }
+    }
+};
+
+// Test for the deadlock discussed at:
+// http://softwarecommunity.intel.com/isn/Community/en-US/forums/permalink/30253302/30253302/ShowThread.aspx#30253302
+struct InnerInsert {
+    static void apply( YourTable& table, int i ) {
+        YourTable::accessor a1, a2;
+        if(i&1) __TBB_Yield();
+        table.insert( a1, MyKey::make(1) );
+        __TBB_Yield();
+        table.insert( a2, MyKey::make(1 + (1<<30)) ); // the same chain
+        table.erase( a2 ); // if erase by key it would lead to deadlock for single thread
+    }
+};
+
+template<typename Op, typename MyTable>
+class TableOperation: NoAssign {
+    MyTable& my_table;
+public:
+    void operator()( const tbb::blocked_range<int>& range ) const {
+        for( int i=range.begin(); i!=range.end(); ++i ) 
+            Op::apply(my_table,i);
+    }
+    TableOperation( MyTable& table ) : my_table(table) {}
+};
+
+template<typename Op, typename TableType>
+void DoConcurrentOperations( TableType& table, int n, const char* what, int nthread ) {
+    if( Verbose ) 
+        REPORT("testing %s with %d threads\n",what,nthread);
+    tbb::tick_count t0 = tbb::tick_count::now();
+    tbb::parallel_for( tbb::blocked_range<int>(0,n,100), TableOperation<Op,TableType>(table) );
+    tbb::tick_count t1 = tbb::tick_count::now();
+    if( Verbose )
+        REPORT("time for %s = %g with %d threads\n",what,(t1-t0).seconds(),nthread);
+}
+
+//! Test traversing the table with an iterator.
+void TraverseTable( MyTable& table, size_t n, size_t expected_size ) {
+    if( Verbose ) 
+        REPORT("testing traversal\n");
+    size_t actual_size = table.size();
+    ASSERT( actual_size==expected_size, NULL );
+    size_t count = 0;
+    bool* array = new bool[n];
+    memset( array, 0, n*sizeof(bool) );
+    const MyTable& const_table = table;
+    MyTable::const_iterator ci = const_table.begin();
+    for( MyTable::iterator i = table.begin(); i!=table.end(); ++i ) {
+        // Check iterator
+        int k = i->first.value_of();
+        ASSERT( UseKey(k), NULL );
+        ASSERT( (*i).first.value_of()==k, NULL );
+        ASSERT( 0<=k && size_t(k)<n, "out of bounds key" );
+        ASSERT( !array[k], "duplicate key" );
+        array[k] = true;
+        ++count;
+
+        // Check lower/upper bounds
+        std::pair<MyTable::iterator, MyTable::iterator> er = table.equal_range(i->first);
+        std::pair<MyTable::const_iterator, MyTable::const_iterator> cer = const_table.equal_range(i->first);
+        ASSERT(cer.first == er.first && cer.second == er.second, NULL);
+        ASSERT(cer.first == i, NULL);
+        ASSERT(std::distance(cer.first, cer.second) == 1, NULL);
+
+        // Check const_iterator
+        ASSERT( ci->first.value_of()==k, NULL );
+        ASSERT( (*ci).first.value_of()==k, NULL );
+        ++ci;
+    }
+    ASSERT( ci==const_table.end(), NULL );
+    delete[] array;
+    if( count!=expected_size ) {
+        REPORT("Line %d: count=%ld but should be %ld\n",__LINE__,long(count),long(expected_size));
+    }
+}
+
+typedef tbb::atomic<unsigned char> AtomicByte;
+
+template<typename RangeType>
+struct ParallelTraverseBody: NoAssign {
+    const size_t n;
+    AtomicByte* const array;
+    ParallelTraverseBody( AtomicByte array_[], size_t n_ ) : 
+        n(n_), 
+        array(array_)
+    {}
+    void operator()( const RangeType& range ) const {
+        for( typename RangeType::iterator i = range.begin(); i!=range.end(); ++i ) {
+            int k = i->first.value_of();
+            ASSERT( 0<=k && size_t(k)<n, NULL ); 
+            ++array[k];
+        }
+    }
+};
+
+void Check( AtomicByte array[], size_t n, size_t expected_size ) {
+    if( expected_size )
+        for( size_t k=0; k<n; ++k ) {
+            if( array[k] != int(UseKey(k)) ) {
+                REPORT("array[%d]=%d != %d=UseKey(%d)\n",
+                       int(k), int(array[k]), int(UseKey(k)), int(k));
+                ASSERT(false,NULL);
+            }
+        }
+}
+
+//! Test travering the tabel with a parallel range
+void ParallelTraverseTable( MyTable& table, size_t n, size_t expected_size ) {
+    if( Verbose ) 
+        REPORT("testing parallel traversal\n");
+    ASSERT( table.size()==expected_size, NULL );
+    AtomicByte* array = new AtomicByte[n];
+
+    memset( array, 0, n*sizeof(AtomicByte) );
+    MyTable::range_type r = table.range(10);
+    tbb::parallel_for( r, ParallelTraverseBody<MyTable::range_type>( array, n ));
+    Check( array, n, expected_size );
+
+    const MyTable& const_table = table;
+    memset( array, 0, n*sizeof(AtomicByte) );
+    MyTable::const_range_type cr = const_table.range(10);
+    tbb::parallel_for( cr, ParallelTraverseBody<MyTable::const_range_type>( array, n ));
+    Check( array, n, expected_size );
+
+    delete[] array;
+}
+
+void TestInsertFindErase( int nthread ) {
+    int n=250000; 
+
+    // compute m = number of unique keys
+    int m = 0;       
+    for( int i=0; i<n; ++i )
+        m += UseKey(i);
+    MyAllocator a; a.items_freed = a.frees = 100;
+    ASSERT( MyDataCount==0, NULL );
+    MyTable table(a);
+    TraverseTable(table,n,0);
+    ParallelTraverseTable(table,n,0);
+    CheckAllocator(table, 0, 100);
+
+    DoConcurrentOperations<Insert,MyTable>(table,n,"insert",nthread);
+    ASSERT( MyDataCount==m, NULL );
+    TraverseTable(table,n,m);
+    ParallelTraverseTable(table,n,m);
+    CheckAllocator(table, m, 100);
+
+    DoConcurrentOperations<Find,MyTable>(table,n,"find",nthread);
+    ASSERT( MyDataCount==m, NULL );
+    CheckAllocator(table, m, 100);
+
+    DoConcurrentOperations<FindConst,MyTable>(table,n,"find(const)",nthread);
+    ASSERT( MyDataCount==m, NULL );
+    CheckAllocator(table, m, 100);
+
+    EraseCount=0;
+    DoConcurrentOperations<Erase,MyTable>(table,n,"erase",nthread);
+    ASSERT( EraseCount==m, NULL );
+    ASSERT( MyDataCount==0, NULL );
+    TraverseTable(table,n,0);
+    CheckAllocator(table, m, m+100);
+
+    bad_hashing = true;
+    table.clear();
+    bad_hashing = false;
+
+    if(nthread > 1) {
+        YourTable ie_table;
+        for( int i=0; i<IE_SIZE; ++i )
+            InsertEraseCount[i] = 0;        
+        DoConcurrentOperations<InsertErase,YourTable>(ie_table,n/2,"insert_erase",nthread);
+        for( int i=0; i<IE_SIZE; ++i )
+            ASSERT( InsertEraseCount[i]==ie_table.count(MyKey::make(i)), NULL );
+
+        DoConcurrentOperations<InnerInsert,YourTable>(ie_table,2000,"inner insert",nthread);
+    }
+}
+
+volatile int Counter;
+
+class AddToTable: NoAssign {
+    MyTable& my_table;
+    const int my_nthread;
+    const int my_m;
+public:
+    AddToTable( MyTable& table, int nthread, int m ) : my_table(table), my_nthread(nthread), my_m(m) {}
+    void operator()( int ) const {
+        for( int i=0; i<my_m; ++i ) {
+            // Busy wait to synchronize threads
+            int j = 0;
+            while( Counter<i ) {
+                if( ++j==1000000 ) {
+                    // If Counter<i after a million iterations, then we almost surely have
+                    // more logical threads than physical threads, and should yield in 
+                    // order to let suspended logical threads make progress.
+                    j = 0;
+                    __TBB_Yield();
+                }
+            }
+            // Now all threads attempt to simultaneously insert a key.
+            int k;
+            {
+                MyTable::accessor a;
+                MyKey key = MyKey::make(i);
+                if( my_table.insert( a, key ) ) 
+                    a->second.set_value( 1 );
+                else 
+                    a->second.set_value( a->second.value_of()+1 );      
+                k = a->second.value_of();
+            }
+            if( k==my_nthread ) 
+                Counter=i+1;
+        }
+    }
+};
+
+class RemoveFromTable: NoAssign {
+    MyTable& my_table;
+    const int my_nthread;
+    const int my_m;
+public:
+    RemoveFromTable( MyTable& table, int nthread, int m ) : my_table(table), my_nthread(nthread), my_m(m) {}
+    void operator()(int) const {
+        for( int i=0; i<my_m; ++i ) {
+            bool b;
+            if(i&4) {
+                if(i&8) {
+                    MyTable::const_accessor a;
+                    b = my_table.find( a, MyKey::make(i) ) && my_table.erase( a );
+                } else {
+                    MyTable::accessor a;
+                    b = my_table.find( a, MyKey::make(i) ) && my_table.erase( a );
+                }
+            } else
+                b = my_table.erase( MyKey::make(i) );
+            if( b ) ++EraseCount;
+        }
+    }
+};
+
+//! Test for memory leak in concurrent_hash_map (TR #153).
+void TestConcurrency( int nthread ) {
+    if( Verbose ) 
+        REPORT("testing multiple insertions/deletions of same key with %d threads\n", nthread);
+    {
+        ASSERT( MyDataCount==0, NULL );
+        MyTable table;
+        const int m = 1000;
+        Counter = 0;
+        tbb::tick_count t0 = tbb::tick_count::now();
+        NativeParallelFor( nthread, AddToTable(table,nthread,m) );
+        tbb::tick_count t1 = tbb::tick_count::now();
+        if( Verbose )
+            REPORT("time for %u insertions = %g with %d threads\n",unsigned(MyDataCount),(t1-t0).seconds(),nthread);
+        ASSERT( MyDataCount==m, "memory leak detected" );
+
+        EraseCount = 0;
+        t0 = tbb::tick_count::now();
+        NativeParallelFor( nthread, RemoveFromTable(table,nthread,m) );
+        t1 = tbb::tick_count::now();
+        if( Verbose )
+            REPORT("time for %u deletions = %g with %d threads\n",unsigned(EraseCount),(t1-t0).seconds(),nthread);
+        ASSERT( MyDataCount==0, "memory leak detected" );
+        ASSERT( EraseCount==m, "return value of erase() is broken" );
+
+        CheckAllocator(table, m, m, /*exact*/nthread <= 1);
+    }
+    ASSERT( MyDataCount==0, "memory leak detected" );
+}
+
+void TestTypes() {
+    AssertSameType( static_cast<MyTable::key_type*>(0), static_cast<MyKey*>(0) );
+    AssertSameType( static_cast<MyTable::mapped_type*>(0), static_cast<MyData*>(0) );
+    AssertSameType( static_cast<MyTable::value_type*>(0), static_cast<std::pair<const MyKey,MyData>*>(0) );
+    AssertSameType( static_cast<MyTable::accessor::value_type*>(0), static_cast<MyTable::value_type*>(0) );
+    AssertSameType( static_cast<MyTable::const_accessor::value_type*>(0), static_cast<const MyTable::value_type*>(0) );
+    AssertSameType( static_cast<MyTable::size_type*>(0), static_cast<size_t*>(0) );
+    AssertSameType( static_cast<MyTable::difference_type*>(0), static_cast<ptrdiff_t*>(0) );
+}
+
+template<typename Iterator, typename T>
+void TestIteratorTraits() {
+    AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) );
+    AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) );
+    AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) );
+    AssertSameType( static_cast<typename Iterator::iterator_category*>(0), static_cast<std::forward_iterator_tag*>(0) );
+    T x;
+    typename Iterator::reference xr = x;
+    typename Iterator::pointer xp = &x;
+    ASSERT( &xr==xp, NULL );
+}
+
+template<typename Iterator1, typename Iterator2>
+void TestIteratorAssignment( Iterator2 j ) {
+    Iterator1 i(j), k;
+    ASSERT( i==j, NULL ); ASSERT( !(i!=j), NULL );
+    k = j;
+    ASSERT( k==j, NULL ); ASSERT( !(k!=j), NULL );
+}
+
+template<typename Range1, typename Range2>
+void TestRangeAssignment( Range2 r2 ) {
+    Range1 r1(r2); r1 = r2;
+}
+//------------------------------------------------------------------------
+// Test for copy constructor and assignment
+//------------------------------------------------------------------------
+
+template<typename MyTable>
+static void FillTable( MyTable& x, int n ) {
+    for( int i=1; i<=n; ++i ) {
+        MyKey key( MyKey::make(i) );
+        typename MyTable::accessor a;
+        bool b = x.insert(a,key); 
+        ASSERT(b,NULL); 
+        a->second.set_value( i*i );
+    }
+}
+
+template<typename MyTable>
+static void CheckTable( const MyTable& x, int n ) {
+    ASSERT( x.size()==size_t(n), "table is different size than expected" );
+    ASSERT( x.empty()==(n==0), NULL );
+    ASSERT( x.size()<=x.max_size(), NULL );
+    for( int i=1; i<=n; ++i ) {
+        MyKey key( MyKey::make(i) );
+        typename MyTable::const_accessor a;
+        bool b = x.find(a,key); 
+        ASSERT( b, NULL ); 
+        ASSERT( a->second.value_of()==i*i, NULL );
+    }
+    int count = 0;
+    int key_sum = 0;
+    for( typename MyTable::const_iterator i(x.begin()); i!=x.end(); ++i ) {
+        ++count;
+        key_sum += i->first.value_of();
+    }
+    ASSERT( count==n, NULL );
+    ASSERT( key_sum==n*(n+1)/2, NULL );
+}
+
+static void TestCopy() {
+    if( Verbose )
+        REPORT("testing copy\n");
+    MyTable t1;
+    for( int i=0; i<10000; i=(i<100 ? i+1 : i*3) ) {
+        MyDataCount = 0;
+
+        FillTable( t1, i );
+        CheckTable(t1,i);
+
+        MyTable t2(t1);
+        // Check that copy constructor did not mangle source table.
+        CheckTable(t1,i);
+        swap(t1, t2);
+        CheckTable(t1,i);
+        ASSERT( !(t1 != t2), NULL );
+
+        // Clear original table
+        t2.clear();
+        swap(t2, t1);
+        CheckTable(t1,0);
+
+        // Verify that copy of t1 is correct, even after t1 is cleared.
+        CheckTable(t2,i);
+        t2.clear();
+        t1.swap( t2 );
+        CheckTable(t1,0);
+        CheckTable(t2,0);
+        ASSERT( MyDataCount==0, "data leak?" );
+    }
+}
+
+void TestAssignment() {
+    if( Verbose )
+        REPORT("testing assignment\n");
+    for( int i=0; i<1000; i=(i<30 ? i+1 : i*5) ) {
+        for( int j=0; j<1000; j=(j<30 ? j+1 : j*7) ) {
+            MyTable t1;
+            MyTable t2;
+            FillTable(t1,i);
+            FillTable(t2,j);
+            ASSERT( (t1 == t2) == (i == j), NULL );
+            CheckTable(t1,i);
+            CheckTable(t2,j);
+
+            MyTable& tref = t2=t1; 
+            ASSERT( &tref==&t2, NULL );
+            CheckTable(t1,i);
+            CheckTable(t2,i);
+
+            t1.clear();
+            CheckTable(t1,0);
+            CheckTable(t2,i);
+            ASSERT( MyDataCount==i, "data leak?" );
+
+            t2.clear();
+            CheckTable(t1,0);
+            CheckTable(t2,0);
+            ASSERT( MyDataCount==0, "data leak?" );
+        }
+    }
+}
+
+void TestIteratorsAndRanges() {
+    if( Verbose )
+        REPORT("testing iterators compliance\n");
+    TestIteratorTraits<MyTable::iterator,MyTable::value_type>();
+    TestIteratorTraits<MyTable::const_iterator,const MyTable::value_type>();
+
+    MyTable v;
+    MyTable const &u = v;
+
+    TestIteratorAssignment<MyTable::const_iterator>( u.begin() );
+    TestIteratorAssignment<MyTable::const_iterator>( v.begin() );
+    TestIteratorAssignment<MyTable::iterator>( v.begin() );
+    // doesn't compile as expected: TestIteratorAssignment<typename V::iterator>( u.begin() );
+
+    // check for non-existing 
+    ASSERT(v.equal_range(MyKey::make(-1)) == std::make_pair(v.end(), v.end()), NULL);
+    ASSERT(u.equal_range(MyKey::make(-1)) == std::make_pair(u.end(), u.end()), NULL);
+
+    if( Verbose )
+        REPORT("testing ranges compliance\n");
+    TestRangeAssignment<MyTable::const_range_type>( u.range() );
+    TestRangeAssignment<MyTable::const_range_type>( v.range() );
+    TestRangeAssignment<MyTable::range_type>( v.range() );
+    // doesn't compile as expected: TestRangeAssignment<typename V::range_type>( u.range() );
+
+    if( Verbose )
+        REPORT("testing construction and insertion from iterators range\n");
+    FillTable( v, 1000 );
+    MyTable2 t(v.begin(), v.end());
+    CheckTable(t, 1000);
+    t.insert(v.begin(), v.end()); // do nothing
+    CheckTable(t, 1000);
+    t.clear();
+    t.insert(v.begin(), v.end()); // restore
+    CheckTable(t, 1000);
+
+    if( Verbose )
+        REPORT("testing comparison\n");
+    typedef tbb::concurrent_hash_map<MyKey,MyData2,YourHashCompare,MyAllocator> YourTable1;
+    typedef tbb::concurrent_hash_map<MyKey,MyData2,YourHashCompare> YourTable2;
+    YourTable1 t1;
+    FillTable( t1, 10 );
+    CheckTable(t1, 10 );
+    YourTable2 t2(t1.begin(), t1.end());
+    MyKey key( MyKey::make(5) ); MyData2 data;
+    ASSERT(t2.erase(key), NULL);
+    YourTable2::accessor a;
+    ASSERT(t2.insert(a, key), NULL);
+    data.set_value(0);   a->second = data;
+    ASSERT( t1 != t2, NULL);
+    data.set_value(5*5); a->second = data;
+    ASSERT( t1 == t2, NULL);
+}
+
+void TestExceptions() {
+    typedef local_counting_allocator<tbb::tbb_allocator<MyData2> > allocator_t;
+    typedef tbb::concurrent_hash_map<MyKey,MyData2,MyHashCompare,allocator_t> ThrowingTable;
+    enum methods {
+        zero_method = 0,
+        ctor_copy, op_assign, op_insert,
+        all_methods
+    };
+    if( Verbose )
+        REPORT("testing exception-safety guarantees\n");
+    ThrowingTable src;
+    FillTable( src, 1000 );
+    ASSERT( MyDataCount==1000, NULL );
+
+    try {
+        for(int t = 0; t < 2; t++) // exception type
+        for(int m = zero_method+1; m < all_methods; m++)
+        {
+            allocator_t a;
+            if(t) MyDataCountLimit = 101;
+            else a.set_limits(101);
+            ThrowingTable victim(a);
+            MyDataCount = 0;
+
+            try {
+                switch(m) {
+                case ctor_copy: {
+                        ThrowingTable acopy(src, a);
+                    } break;
+                case op_assign: {
+                        victim = src;
+                    } break;
+                case op_insert: {
+                        FillTable( victim, 1000 );
+                    } break;
+                default:;
+                }
+                ASSERT(false, "should throw an exception");
+            } catch(std::bad_alloc &e) {
+                MyDataCountLimit = 0;
+                size_t size = victim.size();
+                switch(m) {
+                case op_assign:
+                    ASSERT( MyDataCount==100, "data leak?" );
+                    ASSERT( size>=100, NULL );
+                    CheckAllocator(victim, 100+t, t);
+                case ctor_copy:
+                    CheckTable(src, 1000);
+                    break;
+                case op_insert:
+                    ASSERT( size==size_t(100-t), NULL );
+                    ASSERT( MyDataCount==100-t, "data leak?" );
+                    CheckTable(victim, 100-t);
+                    CheckAllocator(victim, 100, t);
+                    break;
+
+                default:; // nothing to check here
+                }
+                if( Verbose ) REPORT("Exception %d: %s\t- ok ()\n", m, e.what());
+            }
+        }
+    } catch(...) {
+        ASSERT(false, "unexpected exception");
+    }
+    src.clear(); MyDataCount = 0;
+}
+
+//------------------------------------------------------------------------
+// Test driver
+//------------------------------------------------------------------------
+
+#include "tbb/task_scheduler_init.h"
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    // Default minimum number of threads is 1.
+    MinThread = 1;
+
+    ParseCommandLine(argc,argv);
+    if( MinThread<0 ) {
+        REPORT("ERROR: must use at least one thread\n");
+        exit(1);
+    }
+
+    // Do serial tests
+    TestTypes();
+    TestCopy();
+    TestAssignment();
+    TestIteratorsAndRanges();
+#if !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
+    TestExceptions();
+#endif
+
+    // Do concurrency tests.
+    for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
+        tbb::task_scheduler_init init( nthread );
+        TestInsertFindErase( nthread );
+        TestConcurrency( nthread );
+    }
+    // check linking
+    if(bad_hashing) { //should be false
+        tbb::internal::runtime_warning("none\nERROR: it must not be executed");
+    }
+
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_concurrent_queue.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_concurrent_queue.cpp
new file mode 100644 (file)
index 0000000..2b3aa79
--- /dev/null
@@ -0,0 +1,896 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/concurrent_queue.h"
+#include "tbb/atomic.h"
+#include "tbb/tick_count.h"
+#include "harness.h"
+#include "harness_allocator.h"
+
+static tbb::atomic<long> FooConstructed;
+static tbb::atomic<long> FooDestroyed;
+
+class Foo {
+    enum state_t{
+        LIVE=0x1234,
+        DEAD=0xDEAD
+    };
+    state_t state;
+public:
+    int thread_id;
+    int serial;
+    Foo() : state(LIVE), thread_id(0), serial(0) {
+        ++FooConstructed;
+    }
+    Foo( const Foo& item ) : state(LIVE) {
+        ASSERT( item.state==LIVE, NULL );
+        ++FooConstructed;
+        thread_id = item.thread_id;
+        serial = item.serial;
+    }
+    ~Foo() {
+        ASSERT( state==LIVE, NULL );
+        ++FooDestroyed;
+        state=DEAD;
+        thread_id=0xDEAD;
+        serial=0xDEAD;
+    }
+    void operator=( Foo& item ) {
+        ASSERT( item.state==LIVE, NULL );
+        ASSERT( state==LIVE, NULL );
+        thread_id = item.thread_id;
+        serial = item.serial;
+    }
+    bool is_const() {return false;}
+    bool is_const() const {return true;}
+};
+
+// problem size
+static const int N = 50000;     // # of bytes
+
+//! Exception for concurrent_queue
+class Foo_exception : public std::bad_alloc {
+public:
+    virtual const char *what() const throw() { return "out of Foo limit"; }
+    virtual ~Foo_exception() throw() {}
+};
+
+static tbb::atomic<long> FooExConstructed;
+static tbb::atomic<long> FooExDestroyed;
+static tbb::atomic<long> serial_source;
+static long MaxFooCount = 0;
+static const long Threshold = 400;
+
+class FooEx {
+    enum state_t{
+        LIVE=0x1234,
+        DEAD=0xDEAD
+    };
+    state_t state;
+public:
+    int serial;
+    FooEx() : state(LIVE) {
+        ++FooExConstructed;
+        serial = serial_source++;
+    }
+
+    FooEx( const FooEx& item ) : state(LIVE) {
+        ++FooExConstructed;
+        if( MaxFooCount && (FooExConstructed-FooExDestroyed) >= MaxFooCount ) // in push()
+            throw Foo_exception();
+        serial = item.serial;
+    }
+    ~FooEx() {
+        ASSERT( state==LIVE, NULL );
+        ++FooExDestroyed;
+        state=DEAD;
+        serial=0xDEAD;
+    }
+    void operator=( FooEx& item ) {
+        ASSERT( item.state==LIVE, NULL );
+        ASSERT( state==LIVE, NULL );
+        serial = item.serial;
+        if( MaxFooCount==2*Threshold && (FooExConstructed-FooExDestroyed) <= MaxFooCount/4 ) // in pop()
+            throw Foo_exception();
+    }
+} ;
+
+const size_t MAXTHREAD = 256;
+
+static int Sum[MAXTHREAD];
+
+//! Count of various pop operations
+/** [0] = pop_if_present that failed
+    [1] = pop_if_present that succeeded
+    [2] = pop */
+static tbb::atomic<long> PopKind[3];
+
+const int M = 10000;
+
+#if TBB_DEPRECATED
+#define CALL_BLOCKING_POP(q,v) (q)->pop(v)
+#define CALL_TRY_POP(q,v,i) (((i)&0x2)?q->try_pop(v):q->pop_if_present(v))
+#define SIZE() size()
+#else
+#define CALL_BLOCKING_POP(q,v) while( !(q)->try_pop(v) ) __TBB_Yield()
+#define CALL_TRY_POP(q,v,i) q->try_pop(v)
+#define SIZE() unsafe_size()
+#endif
+
+struct Body: NoAssign {
+    tbb::concurrent_queue<Foo>* queue;
+    const int nthread;
+    Body( int nthread_ ) : nthread(nthread_) {}
+    void operator()( int thread_id ) const {
+        long pop_kind[3] = {0,0,0};
+        int serial[MAXTHREAD+1];
+        memset( serial, 0, nthread*sizeof(int) );
+        ASSERT( thread_id<nthread, NULL );
+
+        long sum = 0;
+        for( long j=0; j<M; ++j ) {
+            Foo f;
+            f.thread_id = 0xDEAD;
+            f.serial = 0xDEAD;
+            bool prepopped = false;
+            if( j&1 ) {
+                prepopped = CALL_TRY_POP(queue,f,j);
+                ++pop_kind[prepopped];
+            }
+            Foo g;
+            g.thread_id = thread_id;
+            g.serial = j+1;
+            queue->push( g );
+            if( !prepopped ) {
+                CALL_BLOCKING_POP(queue,f);
+                ++pop_kind[2];
+            }
+            ASSERT( f.thread_id<=nthread, NULL );
+            ASSERT( f.thread_id==nthread || serial[f.thread_id]<f.serial, "partial order violation" );
+            serial[f.thread_id] = f.serial;
+            sum += f.serial-1;
+        }
+        Sum[thread_id] = sum;
+        for( int k=0; k<3; ++k )
+            PopKind[k] += pop_kind[k];
+    }
+};
+
+void TestPushPop( size_t prefill, ptrdiff_t capacity, int nthread ) {
+    ASSERT( nthread>0, "nthread must be positive" );
+#if TBB_DEPRECATED
+    ptrdiff_t signed_prefill = ptrdiff_t(prefill);
+    if( signed_prefill+1>=capacity )
+        return;
+#endif
+    bool success = false;
+    for( int k=0; k<3; ++k )
+        PopKind[k] = 0;
+    for( int trial=0; !success; ++trial ) {
+        FooConstructed = 0;
+        FooDestroyed = 0;
+        Body body(nthread);
+        tbb::concurrent_queue<Foo> queue;
+#if TBB_DEPRECATED
+        queue.set_capacity( capacity );
+#endif
+        body.queue = &queue;
+        for( size_t i=0; i<prefill; ++i ) {
+            Foo f;
+            f.thread_id = nthread;
+            f.serial = 1+int(i);
+            queue.push(f);
+            ASSERT( unsigned(queue.SIZE())==i+1, NULL );
+            ASSERT( !queue.empty(), NULL );
+        }
+        tbb::tick_count t0 = tbb::tick_count::now();
+        NativeParallelFor( nthread, body );
+        tbb::tick_count t1 = tbb::tick_count::now();
+#if !__TBB_FLOATING_POINT_BROKEN
+        double timing = (t1-t0).seconds();
+        if( Verbose )
+            REPORT("prefill=%d capacity=%d time = %g = %g nsec/operation\n", int(prefill), int(capacity), timing, timing/(2*M*nthread)*1.E9);
+#else
+        ((void)capacity);   // touch it to suppress the warning
+#endif /* !__TBB_FLOATING_POINT_BROKEN */
+        int sum = 0;
+        for( int k=0; k<nthread; ++k )
+            sum += Sum[k];
+        int expected = int(nthread*((M-1)*M/2) + ((prefill-1)*prefill)/2);
+        for( int i=int(prefill); --i>=0; ) {
+            ASSERT( !queue.empty(), NULL );
+            Foo f;
+            bool result = queue.try_pop(f);
+            ASSERT( result, NULL );
+            ASSERT( int(queue.SIZE())==i, NULL );
+            sum += f.serial-1;
+        }
+        ASSERT( queue.empty(), NULL );
+        ASSERT( queue.SIZE()==0, NULL );
+        if( sum!=expected )
+            REPORT("sum=%d expected=%d\n",sum,expected);
+        ASSERT( FooConstructed==FooDestroyed, NULL );
+        // TODO: checks by counting allocators
+
+        success = true;
+        if( nthread>1 && prefill==0 ) {
+            // Check that pop_if_present got sufficient exercise
+            for( int k=0; k<2; ++k ) {
+#if (_WIN32||_WIN64)
+                // The TBB library on Windows seems to have a tough time generating
+                // the desired interleavings for pop_if_present, so the code tries longer, and settles
+                // for fewer desired interleavings.
+                const int max_trial = 100;
+                const int min_requirement = 20;
+#else
+                const int min_requirement = 100;
+                const int max_trial = 20;
+#endif /* _WIN32||_WIN64 */
+                if( PopKind[k]<min_requirement ) {
+                    if( trial>=max_trial ) {
+                        if( Verbose )
+                            REPORT("Warning: %d threads had only %ld pop_if_present operations %s after %d trials (expected at least %d). "
+                               "This problem may merely be unlucky scheduling. "
+                               "Investigate only if it happens repeatedly.\n",
+                               nthread, long(PopKind[k]), k==0?"failed":"succeeded", max_trial, min_requirement);
+                        else
+                            REPORT("Warning: the number of %s pop_if_present operations is less than expected for %d threads. Investigate if it happens repeatedly.\n",
+                               k==0?"failed":"succeeded", nthread ); 
+
+                    } else {
+                        success = false;
+                    }
+               }
+            }
+        }
+    }
+}
+
+class Bar {
+    enum state_t {
+        LIVE=0x1234,
+        DEAD=0xDEAD
+    };
+    state_t state;
+public:
+    ptrdiff_t my_id;
+    Bar() : state(LIVE), my_id(-1) {}
+    Bar(size_t _i) : state(LIVE), my_id(_i) {}
+    Bar( const Bar& a_bar ) : state(LIVE) {
+        ASSERT( a_bar.state==LIVE, NULL );
+        my_id = a_bar.my_id;
+    }
+    ~Bar() {
+        ASSERT( state==LIVE, NULL );
+        state = DEAD;
+        my_id = DEAD;
+    }
+    void operator=( const Bar& a_bar ) {
+        ASSERT( a_bar.state==LIVE, NULL );
+        ASSERT( state==LIVE, NULL );
+        my_id = a_bar.my_id;
+    }
+    friend bool operator==(const Bar& bar1, const Bar& bar2 ) ;
+} ;
+
+bool operator==(const Bar& bar1, const Bar& bar2) {
+    ASSERT( bar1.state==Bar::LIVE, NULL );
+    ASSERT( bar2.state==Bar::LIVE, NULL );
+    return bar1.my_id == bar2.my_id;
+}
+
+class BarIterator
+{
+    Bar* bar_ptr;
+    BarIterator(Bar* bp_) : bar_ptr(bp_) {}
+public:
+    ~BarIterator() {}
+    BarIterator& operator=( const BarIterator& other ) {
+        bar_ptr = other.bar_ptr;
+        return *this;
+    }
+    Bar& operator*() const {
+        return *bar_ptr;
+    }
+    BarIterator& operator++() {
+        ++bar_ptr;
+        return *this;
+    }
+    Bar* operator++(int) {
+        Bar* result = &operator*();
+        operator++();
+        return result;
+    }
+    friend bool operator==(const BarIterator& bia, const BarIterator& bib) ;
+    friend bool operator!=(const BarIterator& bia, const BarIterator& bib) ;
+    friend void TestConstructors ();
+} ;
+
+bool operator==(const BarIterator& bia, const BarIterator& bib) {
+    return bia.bar_ptr==bib.bar_ptr;
+}
+
+bool operator!=(const BarIterator& bia, const BarIterator& bib) {
+    return bia.bar_ptr!=bib.bar_ptr;
+}
+
+class Bar_exception : public std::bad_alloc {
+public:
+    virtual const char *what() const throw() { return "making the entry invalid"; }
+    virtual ~Bar_exception() throw() {}
+};
+
+class BarEx
+{
+    enum state_t {
+        LIVE=0x1234,
+        DEAD=0xDEAD
+    };
+    static int count;
+public:
+    state_t state;
+    typedef enum {
+        PREPARATION,
+        COPY_CONSTRUCT
+    } mode_t;
+    static mode_t mode;
+    ptrdiff_t my_id;
+    ptrdiff_t my_tilda_id;
+    static int button;
+    BarEx() : state(LIVE), my_id(-1), my_tilda_id(-1) {}
+    BarEx(size_t _i) : state(LIVE), my_id(_i), my_tilda_id(my_id^(-1)) {}
+    BarEx( const BarEx& a_bar ) : state(LIVE) {
+        ASSERT( a_bar.state==LIVE, NULL );
+        my_id = a_bar.my_id;
+        if( mode==PREPARATION ) 
+            if( !( ++count % 100 ) ) 
+                throw Bar_exception();
+        my_tilda_id = a_bar.my_tilda_id;
+    }
+    ~BarEx() {
+        ASSERT( state==LIVE, NULL );
+        state = DEAD;
+        my_id = DEAD;
+    }
+    static void set_mode( mode_t m ) { mode = m; }
+    void operator=( const BarEx& a_bar ) {
+        ASSERT( a_bar.state==LIVE, NULL );
+        ASSERT( state==LIVE, NULL );
+        my_id = a_bar.my_id;
+        my_tilda_id = a_bar.my_tilda_id;
+    }
+    friend bool operator==(const BarEx& bar1, const BarEx& bar2 ) ;
+} ;
+
+int    BarEx::count = 0;
+BarEx::mode_t BarEx::mode = BarEx::PREPARATION;
+
+bool operator==(const BarEx& bar1, const BarEx& bar2) {
+    ASSERT( bar1.state==BarEx::LIVE, NULL );
+    ASSERT( bar2.state==BarEx::LIVE, NULL );
+    ASSERT( (bar1.my_id ^ bar1.my_tilda_id) == -1, NULL );
+    ASSERT( (bar2.my_id ^ bar2.my_tilda_id) == -1, NULL );
+    return bar1.my_id==bar2.my_id && bar1.my_tilda_id==bar2.my_tilda_id;
+}
+
+#if TBB_DEPRECATED
+#define CALL_BEGIN(q,i) (((i)&0x1)?q.begin():q.unsafe_begin())
+#define CALL_END(q,i)   (((i)&0x1)?q.end():q.unsafe_end())
+#else
+#define CALL_BEGIN(q,i) q.unsafe_begin()
+#define CALL_END(q,i)   q.unsafe_end()
+#endif
+
+void TestConstructors ()
+{
+    tbb::concurrent_queue<Bar> src_queue;
+    tbb::concurrent_queue<Bar>::const_iterator dqb;
+    tbb::concurrent_queue<Bar>::const_iterator dqe;
+    tbb::concurrent_queue<Bar>::const_iterator iter;
+
+    for( size_t size=0; size<1001; ++size ) {
+        for( size_t i=0; i<size; ++i )
+            src_queue.push(Bar(i+(i^size)));
+        tbb::concurrent_queue<Bar>::const_iterator sqb( CALL_BEGIN(src_queue,size) );
+        tbb::concurrent_queue<Bar>::const_iterator sqe( CALL_END(src_queue,size));
+
+        tbb::concurrent_queue<Bar> dst_queue(sqb, sqe);
+
+        ASSERT(src_queue.SIZE()==dst_queue.SIZE(), "different size");
+
+        src_queue.clear();
+    }
+
+    Bar bar_array[1001];
+    for( size_t size=0; size<1001; ++size ) {
+        for( size_t i=0; i<size; ++i )
+            bar_array[i] = Bar(i+(i^size));
+
+        const BarIterator sab(bar_array+0);
+        const BarIterator sae(bar_array+size);
+
+        tbb::concurrent_queue<Bar> dst_queue2(sab, sae);
+
+        ASSERT( size==unsigned(dst_queue2.SIZE()), NULL );
+        ASSERT( sab==BarIterator(bar_array+0), NULL );
+        ASSERT( sae==BarIterator(bar_array+size), NULL );
+
+        dqb = CALL_BEGIN(dst_queue2,size);
+        dqe = CALL_END(dst_queue2,size);
+        BarIterator v_iter(sab);
+        for( ; dqb != dqe; ++dqb, ++v_iter )
+            ASSERT( *dqb == *v_iter, "unexpected element" );
+        ASSERT( v_iter==sae, "different size?" );
+    }
+
+    src_queue.clear();
+
+    tbb::concurrent_queue<Bar> dst_queue3( src_queue );
+    ASSERT( src_queue.SIZE()==dst_queue3.SIZE(), NULL );
+    ASSERT( 0==dst_queue3.SIZE(), NULL );
+
+    int k=0;
+    for( size_t i=0; i<1001; ++i ) {
+        Bar tmp_bar;
+        src_queue.push(Bar(++k));
+        src_queue.push(Bar(++k));
+        src_queue.try_pop(tmp_bar);
+
+        tbb::concurrent_queue<Bar> dst_queue4( src_queue );
+
+        ASSERT( src_queue.SIZE()==dst_queue4.SIZE(), NULL );
+
+        dqb = CALL_BEGIN(dst_queue4,i);
+        dqe = CALL_END(dst_queue4,i);
+        iter = CALL_BEGIN(src_queue,i);
+
+        for( ; dqb != dqe; ++dqb, ++iter )
+            ASSERT( *dqb == *iter, "unexpected element" );
+
+        ASSERT( iter==CALL_END(src_queue,i), "different size?" );
+    }
+
+    tbb::concurrent_queue<Bar> dst_queue5( src_queue );
+
+    ASSERT( src_queue.SIZE()==dst_queue5.SIZE(), NULL );
+    dqb = dst_queue5.unsafe_begin();
+    dqe = dst_queue5.unsafe_end();
+    iter = src_queue.unsafe_begin();
+    for( ; dqb != dqe; ++dqb, ++iter )
+        ASSERT( *dqb == *iter, "unexpected element" );
+
+    for( size_t i=0; i<100; ++i) {
+        Bar tmp_bar;
+        src_queue.push(Bar(i+1000));
+        src_queue.push(Bar(i+1000));
+        src_queue.try_pop(tmp_bar);
+
+        dst_queue5.push(Bar(i+1000));
+        dst_queue5.push(Bar(i+1000));
+        dst_queue5.try_pop(tmp_bar);
+    }
+
+    ASSERT( src_queue.SIZE()==dst_queue5.SIZE(), NULL );
+    dqb = dst_queue5.unsafe_begin();
+    dqe = dst_queue5.unsafe_end();
+    iter = src_queue.unsafe_begin();
+    for( ; dqb != dqe; ++dqb, ++iter )
+        ASSERT( *dqb == *iter, "unexpected element" );
+    ASSERT( iter==src_queue.unsafe_end(), "different size?" );
+
+#if __TBB_EXCEPTION_HANDLING_BROKEN || __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN
+    REPORT("Warning: Part of the constructor test is skipped due to a known issue.\n");
+#else
+    k = 0;
+#if TBB_DEPRECATED==0
+    unsigned
+#endif
+    int n_elements=0;
+    tbb::concurrent_queue<BarEx> src_queue_ex;
+    for( size_t size=0; size<1001; ++size ) {
+        BarEx tmp_bar_ex;
+        int n_successful_pushes=0;
+        BarEx::set_mode( BarEx::PREPARATION );
+        try {
+            src_queue_ex.push(BarEx(k+(k^size)));
+            ++n_successful_pushes;
+        } catch (...) {
+        }
+        ++k;
+        try {
+            src_queue_ex.push(BarEx(k+(k^size)));
+            ++n_successful_pushes;
+        } catch (...) {
+        }
+        ++k;
+        src_queue_ex.try_pop(tmp_bar_ex);
+        n_elements += (n_successful_pushes - 1);
+        ASSERT( src_queue_ex.SIZE()==n_elements, NULL);
+
+        BarEx::set_mode( BarEx::COPY_CONSTRUCT );
+        tbb::concurrent_queue<BarEx> dst_queue_ex( src_queue_ex );
+
+        ASSERT( src_queue_ex.SIZE()==dst_queue_ex.SIZE(), NULL );
+
+        tbb::concurrent_queue<BarEx>::const_iterator dqb_ex  = CALL_BEGIN(dst_queue_ex, size);
+        tbb::concurrent_queue<BarEx>::const_iterator dqe_ex  = CALL_END(dst_queue_ex, size);
+        tbb::concurrent_queue<BarEx>::const_iterator iter_ex = CALL_BEGIN(src_queue_ex, size);
+
+        for( ; dqb_ex != dqe_ex; ++dqb_ex, ++iter_ex )
+            ASSERT( *dqb_ex == *iter_ex, "unexpected element" );
+        ASSERT( iter_ex==CALL_END(src_queue_ex,size), "different size?" );
+    }
+#endif
+}
+
+template<typename Iterator1, typename Iterator2>
+void TestIteratorAux( Iterator1 i, Iterator2 j, int size ) {
+    // Now test iteration
+    Iterator1 old_i;
+    for( int k=0; k<size; ++k ) {
+        ASSERT( i!=j, NULL );
+        ASSERT( !(i==j), NULL );
+        Foo f;
+        if( k&1 ) {
+            // Test pre-increment
+            f = *old_i++;
+            // Test assignment
+            i = old_i;
+        } else {
+            // Test post-increment
+            f=*i++;
+            if( k<size-1 ) {
+                // Test "->"
+                ASSERT( k+2==i->serial, NULL );
+            }
+            // Test assignment
+            old_i = i;
+        }
+        ASSERT( k+1==f.serial, NULL );
+    }
+    ASSERT( !(i!=j), NULL );
+    ASSERT( i==j, NULL );
+}
+
+template<typename Iterator1, typename Iterator2>
+void TestIteratorAssignment( Iterator2 j ) {
+    Iterator1 i(j);
+    ASSERT( i==j, NULL );
+    ASSERT( !(i!=j), NULL );
+    Iterator1 k;
+    k = j;
+    ASSERT( k==j, NULL );
+    ASSERT( !(k!=j), NULL );
+}
+
+template<typename Iterator, typename T>
+void TestIteratorTraits() {
+    AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) );
+    AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) );
+    AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) );
+    AssertSameType( static_cast<typename Iterator::iterator_category*>(0), static_cast<std::forward_iterator_tag*>(0) );
+    T x;
+    typename Iterator::reference xr = x;
+    typename Iterator::pointer xp = &x;
+    ASSERT( &xr==xp, NULL );
+}
+
+//! Test the iterators for concurrent_queue
+void TestIterator() {
+    tbb::concurrent_queue<Foo> queue;
+    tbb::concurrent_queue<Foo>& const_queue = queue;
+    for( int j=0; j<500; ++j ) {
+        TestIteratorAux( CALL_BEGIN(queue,j)      , CALL_END(queue,j)      , j );
+        TestIteratorAux( CALL_BEGIN(const_queue,j), CALL_END(const_queue,j), j );
+        TestIteratorAux( CALL_BEGIN(const_queue,j), CALL_END(queue,j)      , j );
+        TestIteratorAux( CALL_BEGIN(queue,j)      , CALL_END(const_queue,j), j );
+        Foo f;
+        f.serial = j+1;
+        queue.push(f);
+    }
+    TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>( const_queue.unsafe_begin() );
+    TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>( queue.unsafe_begin() );
+    TestIteratorAssignment<tbb::concurrent_queue<Foo>::iterator>( queue.unsafe_begin() );
+    TestIteratorTraits<tbb::concurrent_queue<Foo>::const_iterator, const Foo>();
+    TestIteratorTraits<tbb::concurrent_queue<Foo>::iterator, Foo>();
+}
+
+void TestConcurrentQueueType() {
+    AssertSameType( tbb::concurrent_queue<Foo>::value_type(), Foo() );
+    Foo f;
+    const Foo g;
+    tbb::concurrent_queue<Foo>::reference r = f;
+    ASSERT( &r==&f, NULL );
+    ASSERT( !r.is_const(), NULL );
+    tbb::concurrent_queue<Foo>::const_reference cr = g;
+    ASSERT( &cr==&g, NULL );
+    ASSERT( cr.is_const(), NULL );
+}
+
+template<typename T>
+void TestEmptyQueue() {
+    const tbb::concurrent_queue<T> queue;
+    ASSERT( queue.SIZE()==0, NULL );
+#if TBB_DEPRECATED
+    ASSERT( queue.capacity()>0, NULL );
+    ASSERT( size_t(queue.capacity())>=size_t(-1)/(sizeof(void*)+sizeof(T)), NULL );
+#endif
+}
+
+#if TBB_DEPRECATED
+#define CALL_TRY_PUSH(q,f,i) (((i)&0x1)?(q).push_if_not_full(f):(q).try_push(f))
+void TestFullQueue() {
+    for( int n=0; n<10; ++n ) {
+        FooConstructed = 0;
+        FooDestroyed = 0;
+        tbb::concurrent_queue<Foo> queue;
+        queue.set_capacity(n);
+        for( int i=0; i<=n; ++i ) {
+            Foo f;
+            f.serial = i;
+            bool result = CALL_TRY_PUSH(queue, f, i );
+            ASSERT( result==(i<n), NULL );
+        }
+        for( int i=0; i<=n; ++i ) {
+            Foo f;
+            bool result = queue.pop_if_present( f );
+            ASSERT( result==(i<n), NULL );
+            ASSERT( !result || f.serial==i, NULL );
+        }
+        ASSERT( FooConstructed==FooDestroyed, NULL );
+    }
+}
+#endif /* if TBB_DEPRECATED */
+
+#if TBB_DEPRECATED
+#define CALL_PUSH_IF_NOT_FULL(q,v,i) (((i)&0x1)?q.push_if_not_full(v):(q.push(v), true))
+#else
+#define CALL_PUSH_IF_NOT_FULL(q,v,i) (q.push(v), true)
+#endif
+
+void TestClear() {
+    FooConstructed = 0;
+    FooDestroyed = 0;
+    const unsigned int n=5;
+        
+    tbb::concurrent_queue<Foo> queue;
+#if TBB_DEPRECATED
+    const int q_capacity=10;
+    queue.set_capacity(q_capacity);
+#endif
+    for( size_t i=0; i<n; ++i ) {
+        Foo f;
+        f.serial = int(i);
+        bool result = CALL_PUSH_IF_NOT_FULL(queue, f, i);
+        ASSERT( result, NULL );
+    }
+    ASSERT( unsigned(queue.SIZE())==n, NULL );
+    queue.clear();
+    ASSERT( queue.SIZE()==0, NULL );
+    for( size_t i=0; i<n; ++i ) {
+        Foo f;
+        f.serial = int(i);
+        bool result = CALL_PUSH_IF_NOT_FULL(queue, f, i);
+        ASSERT( result, NULL );
+    }
+    ASSERT( unsigned(queue.SIZE())==n, NULL );
+    queue.clear();
+    ASSERT( queue.SIZE()==0, NULL );
+    for( size_t i=0; i<n; ++i ) {
+        Foo f;
+        f.serial = int(i);
+        bool result = CALL_PUSH_IF_NOT_FULL(queue, f, i);
+        ASSERT( result, NULL );
+    }
+    ASSERT( unsigned(queue.SIZE())==n, NULL );
+}
+
+#if TBB_DEPRECATED
+template<typename T>
+struct TestNegativeQueueBody: NoAssign {
+    tbb::concurrent_queue<T>& queue;
+    const int nthread;
+    TestNegativeQueueBody( tbb::concurrent_queue<T>& q, int n ) : queue(q), nthread(n) {}
+    void operator()( int k ) const {
+        if( k==0 ) {
+            int number_of_pops = nthread-1;
+            // Wait for all pops to pend.
+            while( queue.size()>-number_of_pops ) {
+                __TBB_Yield();
+            }
+            for( int i=0; ; ++i ) {
+                ASSERT( queue.size()==i-number_of_pops, NULL );
+                ASSERT( queue.empty()==(queue.size()<=0), NULL );
+                if( i==number_of_pops ) break;
+                // Satisfy another pop
+                queue.push( T() );
+            }
+        } else {
+            // Pop item from queue
+            T item;
+            queue.pop(item);
+        }
+    }
+};
+
+//! Test a queue with a negative size.
+template<typename T>
+void TestNegativeQueue( int nthread ) {
+    tbb::concurrent_queue<T> queue;
+    NativeParallelFor( nthread, TestNegativeQueueBody<T>(queue,nthread) );
+}
+#endif /* if TBB_DEPRECATED */
+
+void TestExceptions() {
+    typedef static_counting_allocator<std::allocator<FooEx>, size_t> allocator_t;
+    typedef static_counting_allocator<std::allocator<char>, size_t> allocator_char_t;
+    typedef tbb::concurrent_queue<FooEx, allocator_t> concur_queue_t;
+
+    enum methods {
+        m_push = 0,
+        m_pop
+    };  
+
+    if( Verbose )
+        REPORT("Testing exception safety\n");
+    // verify 'clear()' on exception; queue's destructor calls its clear()
+    {
+        concur_queue_t queue_clear;
+        try {
+            allocator_char_t::init_counters();
+            allocator_char_t::set_limits(N/2);
+            for( int k=0; k<N; k++ )
+                queue_clear.push( FooEx() );
+        } catch (...) {
+            // TODO: some assert here?
+        }
+    }
+    if( Verbose )
+        REPORT("... queue destruction test passed\n");
+
+    try {
+        int n_pushed=0, n_popped=0;
+        for(int t = 0; t <= 1; t++)// exception type -- 0 : from allocator(), 1 : from Foo's constructor
+        {
+            concur_queue_t queue_test;
+            for( int m=m_push; m<=m_pop; m++ ) {
+                // concurrent_queue internally rebinds the allocator to one with 'char'
+                allocator_char_t::init_counters();
+
+                if(t) MaxFooCount = MaxFooCount + 400;
+                else allocator_char_t::set_limits(N/2);
+
+                try {
+                    switch(m) {
+                    case m_push:
+                            for( int k=0; k<N; k++ ) {
+                                queue_test.push( FooEx() );
+                                n_pushed++;
+                            }
+                            break;
+                    case m_pop:
+                            n_popped=0;
+                            for( int k=0; k<n_pushed; k++ ) {
+                                FooEx elt;
+                                queue_test.try_pop( elt );
+                                n_popped++;
+                            }
+                            n_pushed = 0;
+                            allocator_char_t::set_limits(); 
+                            break;
+                    }
+                    if( !t && m==m_push ) ASSERT(false, "should throw an exception");
+                } catch ( Foo_exception & ) {
+                    switch(m) {
+                    case m_push: {
+                                ASSERT( ptrdiff_t(queue_test.SIZE())==n_pushed, "incorrect queue size" );
+                                long tc = MaxFooCount;
+                                MaxFooCount = 0;
+                                for( int k=0; k<(int)tc; k++ ) {
+                                    queue_test.push( FooEx() );
+                                    n_pushed++;
+                                }
+                                MaxFooCount = tc;
+                            }
+                            break;
+                    case m_pop:
+                            MaxFooCount = 0; // disable exception
+                            n_pushed -= (n_popped+1); // including one that threw an exception
+                            ASSERT( n_pushed>=0, "n_pushed cannot be less than 0" );
+                            for( int k=0; k<1000; k++ ) {
+                                queue_test.push( FooEx() );
+                                n_pushed++;
+                            }
+                            ASSERT( !queue_test.empty(), "queue must not be empty" );
+                            ASSERT( ptrdiff_t(queue_test.SIZE())==n_pushed, "queue size must be equal to n pushed" );
+                            for( int k=0; k<n_pushed; k++ ) {
+                                FooEx elt;
+                                queue_test.try_pop( elt );
+                            }
+                            ASSERT( queue_test.empty(), "queue must be empty" );
+                            ASSERT( queue_test.SIZE()==0, "queue must be empty" );
+                            break;
+                    }
+                } catch ( std::bad_alloc & ) {
+                    allocator_char_t::set_limits(); // disable exception from allocator
+                    size_t size = queue_test.SIZE();
+                    switch(m) {
+                    case m_push:
+                            ASSERT( size>0, "incorrect queue size");
+                            break;
+                    case m_pop:
+                            if( !t ) ASSERT( false, "should not throw an exceptin" );
+                            break;
+                    }
+                }
+                if( Verbose )
+                    REPORT("... for t=%d and m=%d, exception test passed\n", t, m);
+            }
+        }
+    } catch(...) {
+        ASSERT(false, "unexpected exception");
+    }
+}
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    // Set default for minimum number of threads.
+    MinThread = 1;
+    ParseCommandLine(argc,argv);
+
+    TestEmptyQueue<char>();
+    TestEmptyQueue<Foo>();
+#if TBB_DEPRECATED
+    TestFullQueue();
+#endif
+    TestClear();
+    TestConcurrentQueueType();
+    TestIterator();
+    TestConstructors();
+
+    // Test concurrent operations
+    for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
+#if TBB_DEPRECATED
+        TestNegativeQueue<Foo>(nthread);
+#endif
+        for( size_t prefill=0; prefill<64; prefill+=(1+prefill/3) ) {
+            TestPushPop(prefill,ptrdiff_t(-1),nthread);
+            TestPushPop(prefill,ptrdiff_t(1),nthread);
+            TestPushPop(prefill,ptrdiff_t(2),nthread);
+            TestPushPop(prefill,ptrdiff_t(10),nthread);
+            TestPushPop(prefill,ptrdiff_t(100),nthread);
+        }
+    }
+#if __TBB_EXCEPTION_HANDLING_BROKEN
+    REPORT("Warning: Exception safety test is skipped due to a known issue.\n");
+#else
+    TestExceptions();
+#endif
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_concurrent_vector.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_concurrent_vector.cpp
new file mode 100644 (file)
index 0000000..4f2c7e6
--- /dev/null
@@ -0,0 +1,994 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/concurrent_vector.h"
+#include "tbb/tbb_allocator.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/tbb_exception.h"
+#include <cstdio>
+#include <cstdlib>
+#include <stdexcept>
+#include "harness_report.h"
+#include "harness_assert.h"
+#include "harness_allocator.h"
+
+static bool known_issue_verbose = false;
+#define KNOWN_ISSUE(msg) if(!known_issue_verbose) known_issue_verbose = true, REPORT(msg)
+
+tbb::atomic<long> FooCount;
+long MaxFooCount = 0;
+
+//! Problem size
+const size_t N = 500000;
+
+//! Exception for concurrent_vector
+class Foo_exception : public std::bad_alloc {
+public:
+    virtual const char *what() const throw() { return "out of Foo limit"; }
+    virtual ~Foo_exception() throw() {}
+};
+
+static const int initial_value_of_bar = 42;
+struct Foo {
+    int my_bar;
+public:
+    enum State {
+        ZeroInitialized=0,
+        DefaultInitialized=0xDEFAUL,
+        CopyInitialized=0xC0314,
+        Destroyed=0xDEADF00
+    } state;
+    bool is_valid() const {
+        return state==DefaultInitialized||state==CopyInitialized;
+    }
+    bool is_valid_or_zero() const {
+        return is_valid()||(state==ZeroInitialized && !my_bar);
+    }
+    int& zero_bar() {
+        ASSERT( is_valid_or_zero(), NULL );
+        return my_bar;
+    }
+    int& bar() {
+        ASSERT( is_valid(), NULL );
+        return my_bar;
+    }
+    int bar() const {
+        ASSERT( is_valid(), NULL );
+        return my_bar;
+    }
+    Foo( int bar = initial_value_of_bar ) {
+        my_bar = bar;
+        if(MaxFooCount && FooCount >= MaxFooCount)
+            throw Foo_exception();
+        FooCount++;
+        state = DefaultInitialized;
+    }
+    Foo( const Foo& foo ) {
+        my_bar = foo.my_bar;
+        ASSERT( foo.is_valid_or_zero(), "bad source for copy" );
+        if(MaxFooCount && FooCount >= MaxFooCount)
+            throw Foo_exception();
+        FooCount++;
+        state = CopyInitialized;
+    }
+    ~Foo() {
+        ASSERT( is_valid_or_zero(), NULL );
+        my_bar = ~initial_value_of_bar;
+        if(state != ZeroInitialized) --FooCount;
+        state = Destroyed;
+    }
+    bool operator==(const Foo &f) const { return my_bar == f.my_bar; }
+    bool operator<(const Foo &f) const { return my_bar < f.my_bar; }
+    bool is_const() const {return true;}
+    bool is_const() {return false;}
+protected:
+    char reserve[1];
+    void operator=( const Foo& ) {}
+};
+
+class FooWithAssign: public Foo {
+public:
+    void operator=( const FooWithAssign& x ) {
+        my_bar = x.my_bar;
+        ASSERT( x.is_valid_or_zero(), "bad source for assignment" );
+        ASSERT( is_valid(), NULL );
+    } 
+    bool operator==(const Foo &f) const { return my_bar == f.my_bar; }
+    bool operator<(const Foo &f) const { return my_bar < f.my_bar; }
+};
+
+class FooIterator: public std::iterator<std::input_iterator_tag,FooWithAssign> {
+    int x_bar;
+public:
+    FooIterator(int x) {
+        x_bar = x;
+    }
+    FooIterator &operator++() {
+        x_bar++; return *this;
+    }
+    FooWithAssign operator*() {
+        FooWithAssign foo; foo.bar() = x_bar;
+        return foo;
+    }
+    bool operator!=(const FooIterator &i) { return x_bar != i.x_bar; }
+};
+
+inline void NextSize( int& s ) {
+    if( s<=32 ) ++s;
+    else s += s/10;
+}
+
+//! Check vector have expected size and filling
+template<typename vector_t>
+static void CheckVector( const vector_t& cv, size_t expected_size, size_t old_size ) {
+    ASSERT( cv.capacity()>=expected_size, NULL );
+    ASSERT( cv.size()==expected_size, NULL );
+    ASSERT( cv.empty()==(expected_size==0), NULL );
+    for( int j=0; j<int(expected_size); ++j ) {
+        if( cv[j].bar()!=~j )
+            REPORT("ERROR on line %d for old_size=%ld expected_size=%ld j=%d\n",__LINE__,long(old_size),long(expected_size),j);
+    }
+}
+
+//! Test of assign, grow, copying with various sizes
+void TestResizeAndCopy() {
+    typedef static_counting_allocator<debug_allocator<Foo,std::allocator>, std::size_t> allocator_t;
+    typedef tbb::concurrent_vector<Foo, allocator_t> vector_t;
+    allocator_t::init_counters();
+    for( int old_size=0; old_size<=128; NextSize( old_size ) ) {
+        for( int new_size=0; new_size<=1280; NextSize( new_size ) ) {
+            long count = FooCount;
+            vector_t v;
+            ASSERT( count==FooCount, NULL );
+            v.assign(old_size/2, Foo() );
+            ASSERT( count+old_size/2==FooCount, NULL );
+            for( int j=0; j<old_size/2; ++j )
+                ASSERT( v[j].state == Foo::CopyInitialized, NULL);
+            v.assign(FooIterator(0), FooIterator(old_size));
+            v.resize(new_size, Foo(33) );
+            ASSERT( count+new_size==FooCount, NULL );
+            for( int j=0; j<new_size; ++j ) {
+                int expected = j<old_size ? j : 33;
+                if( v[j].bar()!=expected ) 
+                    REPORT("ERROR on line %d for old_size=%ld new_size=%ld v[%ld].bar()=%d != %d\n",__LINE__,long(old_size),long(new_size),long(j),v[j].bar(), expected);
+            }
+            ASSERT( v.size()==size_t(new_size), NULL );
+            for( int j=0; j<new_size; ++j ) {
+                v[j].bar() = ~j;
+            }
+            const vector_t& cv = v;
+            // Try copy constructor
+            vector_t copy_of_v(cv);
+            CheckVector(cv,new_size,old_size);
+            ASSERT( !(v != copy_of_v), NULL );
+            v.clear();
+            ASSERT( v.empty(), NULL );
+            swap(v, copy_of_v);
+            ASSERT( copy_of_v.empty(), NULL );
+            CheckVector(v,new_size,old_size);
+        }
+    }
+    ASSERT( allocator_t::items_allocated == allocator_t::items_freed, NULL);
+    ASSERT( allocator_t::allocations == allocator_t::frees, NULL);
+}
+
+//! Test reserve, compact, capacity
+void TestCapacity() {
+    typedef static_counting_allocator<debug_allocator<Foo,tbb::cache_aligned_allocator>, std::size_t> allocator_t;
+    typedef tbb::concurrent_vector<Foo, allocator_t> vector_t;
+    allocator_t::init_counters();
+    for( size_t old_size=0; old_size<=11000; old_size=(old_size<5 ? old_size+1 : 3*old_size) ) {
+        for( size_t new_size=0; new_size<=11000; new_size=(new_size<5 ? new_size+1 : 3*new_size) ) {
+            long count = FooCount; 
+            {
+                vector_t v; v.reserve(old_size);
+                ASSERT( v.capacity()>=old_size, NULL );
+                v.reserve( new_size );
+                ASSERT( v.capacity()>=old_size, NULL );
+                ASSERT( v.capacity()>=new_size, NULL );
+                ASSERT( v.empty(), NULL );
+                size_t fill_size = 2*new_size;
+                for( size_t i=0; i<fill_size; ++i ) {
+                    ASSERT( size_t(FooCount)==count+i, NULL );
+#if TBB_DEPRECATED
+                    size_t j = v.grow_by(1);
+#else
+                    size_t j = v.grow_by(1) - v.begin();
+#endif
+                    ASSERT( j==i, NULL );
+                    v[j].bar() = int(~j);
+                }
+                vector_t copy_of_v(v); // should allocate first segment with same size as for shrink_to_fit()
+                if(__TBB_Log2(/*reserved size*/old_size|1) > __TBB_Log2(fill_size|1) )
+                    ASSERT( v.capacity() != copy_of_v.capacity(), NULL );
+                v.shrink_to_fit();
+                ASSERT( v.capacity() == copy_of_v.capacity(), NULL );
+                CheckVector(v, new_size*2, old_size); // check vector correctness
+                ASSERT( v==copy_of_v, NULL ); // TODO: check also segments layout equality
+            }
+            ASSERT( FooCount==count, NULL );
+        }
+    } 
+    ASSERT( allocator_t::items_allocated == allocator_t::items_freed, NULL);
+    ASSERT( allocator_t::allocations == allocator_t::frees, NULL);
+}
+
+struct AssignElement {
+    typedef tbb::concurrent_vector<int>::range_type::iterator iterator;
+    iterator base;
+    void operator()( const tbb::concurrent_vector<int>::range_type& range ) const {
+        for( iterator i=range.begin(); i!=range.end(); ++i ) {
+            if( *i!=0 )
+                REPORT("ERROR for v[%ld]\n", long(i-base));
+            *i = int(i-base);
+        }
+    }
+    AssignElement( iterator base_ ) : base(base_) {}
+};
+
+struct CheckElement {
+    typedef tbb::concurrent_vector<int>::const_range_type::iterator iterator;
+    iterator base;
+    void operator()( const tbb::concurrent_vector<int>::const_range_type& range ) const {
+        for( iterator i=range.begin(); i!=range.end(); ++i )
+            if( *i != int(i-base) )
+                REPORT("ERROR for v[%ld]\n", long(i-base));
+    }
+    CheckElement( iterator base_ ) : base(base_) {}
+};
+
+#include "tbb/tick_count.h"
+#include "tbb/parallel_for.h"
+#include "harness.h"
+
+//! Test parallel access by iterators
+void TestParallelFor( int nthread ) {
+    typedef tbb::concurrent_vector<int> vector_t;
+    vector_t v;
+    v.resize(N);
+    tbb::tick_count t0 = tbb::tick_count::now();
+    if( Verbose )
+        REPORT("Calling parallel_for with %ld threads\n",long(nthread));
+    tbb::parallel_for( v.range(10000), AssignElement(v.begin()) );
+    tbb::tick_count t1 = tbb::tick_count::now();
+    const vector_t& u = v;
+    tbb::parallel_for( u.range(10000), CheckElement(u.begin()) );
+    tbb::tick_count t2 = tbb::tick_count::now();
+    if( Verbose )
+        REPORT("Time for parallel_for: assign time = %8.5f, check time = %8.5f\n",
+               (t1-t0).seconds(),(t2-t1).seconds());
+    for( long i=0; size_t(i)<v.size(); ++i )
+        if( v[i]!=i )
+            REPORT("ERROR for v[%ld]\n", i);
+}
+
+template<typename Iterator1, typename Iterator2>
+void TestIteratorAssignment( Iterator2 j ) {
+    Iterator1 i(j);
+    ASSERT( i==j, NULL );
+    ASSERT( !(i!=j), NULL );
+    Iterator1 k;
+    k = j;
+    ASSERT( k==j, NULL );
+    ASSERT( !(k!=j), NULL );
+}
+
+template<typename Range1, typename Range2>
+void TestRangeAssignment( Range2 r2 ) {
+    Range1 r1(r2); r1 = r2;
+}
+
+template<typename Iterator, typename T>
+void TestIteratorTraits() {
+    AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) ); 
+    AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) ); 
+    AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) ); 
+    AssertSameType( static_cast<typename Iterator::iterator_category*>(0), static_cast<std::random_access_iterator_tag*>(0) );
+    T x;
+    typename Iterator::reference xr = x;
+    typename Iterator::pointer xp = &x;
+    ASSERT( &xr==xp, NULL );
+}
+
+template<typename Vector, typename Iterator>
+void CheckConstIterator( const Vector& u, int i, const Iterator& cp ) {
+    typename Vector::const_reference pref = *cp;
+    if( pref.bar()!=i )
+        REPORT("ERROR for u[%ld] using const_iterator\n", long(i));
+    typename Vector::difference_type delta = cp-u.begin();
+    ASSERT( delta==i, NULL );
+    if( u[i].bar()!=i )
+        REPORT("ERROR for u[%ld] using subscripting\n", long(i));
+    ASSERT( u.begin()[i].bar()==i, NULL );
+}
+
+template<typename Iterator1, typename Iterator2, typename V> 
+void CheckIteratorComparison( V& u ) {
+    V u2 = u;
+    Iterator1 i = u.begin();
+
+    for( int i_count=0; i_count<100; ++i_count ) {
+        Iterator2 j = u.begin();
+        Iterator2 i2 = u2.begin();
+        for( int j_count=0; j_count<100; ++j_count ) {
+            ASSERT( (i==j)==(i_count==j_count), NULL );
+            ASSERT( (i!=j)==(i_count!=j_count), NULL );
+            ASSERT( (i-j)==(i_count-j_count), NULL );
+            ASSERT( (i<j)==(i_count<j_count), NULL );
+            ASSERT( (i>j)==(i_count>j_count), NULL );
+            ASSERT( (i<=j)==(i_count<=j_count), NULL );
+            ASSERT( (i>=j)==(i_count>=j_count), NULL );
+            ASSERT( !(i==i2), NULL ); 
+            ASSERT( i!=i2, NULL ); 
+            ++j;
+            ++i2;
+        }
+        ++i;
+    }
+}
+
+//! Test sequential iterators for vector type V.
+/** Also does timing. */
+template<typename T>
+void TestSequentialFor() {
+    typedef tbb::concurrent_vector<FooWithAssign> V;
+    V v(N);
+    ASSERT(v.grow_by(0) == v.grow_by(0, FooWithAssign()), NULL);
+
+    // Check iterator 
+    tbb::tick_count t0 = tbb::tick_count::now();
+    typename V::iterator p = v.begin();
+    ASSERT( !(*p).is_const(), NULL );
+    ASSERT( !p->is_const(), NULL );
+    for( int i=0; size_t(i)<v.size(); ++i, ++p ) {
+        if( (*p).state!=Foo::DefaultInitialized )
+            REPORT("ERROR for v[%ld]\n", long(i));
+        typename V::reference pref = *p;
+        pref.bar() = i;
+        typename V::difference_type delta = p-v.begin();
+        ASSERT( delta==i, NULL );
+        ASSERT( -delta<=0, "difference type not signed?" );
+    }
+    tbb::tick_count t1 = tbb::tick_count::now();
+    
+    // Check const_iterator going forwards
+    const V& u = v;
+    typename V::const_iterator cp = u.begin();
+    ASSERT( cp == v.cbegin(), NULL );
+    ASSERT( (*cp).is_const(), NULL );
+    ASSERT( cp->is_const(), NULL );
+    ASSERT( *cp == v.front(), NULL);
+    for( int i=0; size_t(i)<u.size(); ++i ) {
+        CheckConstIterator(u,i,cp);
+        V::const_iterator &cpr = ++cp;
+        ASSERT( &cpr == &cp, "preincrement not returning a reference?");
+    }
+    tbb::tick_count t2 = tbb::tick_count::now();
+    if( Verbose )
+        REPORT("Time for serial for:  assign time = %8.5f, check time = %8.5f\n",
+               (t1-t0).seconds(),(t2-t1).seconds());
+
+    // Now go backwards
+    cp = u.end();
+    ASSERT( cp == v.cend(), NULL );
+    for( int i=int(u.size()); i>0; ) {
+        --i;
+        V::const_iterator &cpr = --cp;
+        ASSERT( &cpr == &cp, "predecrement not returning a reference?");
+        if( i>0 ) {
+            typename V::const_iterator cp_old = cp--;
+            int here = (*cp_old).bar();
+            ASSERT( here==u[i].bar(), NULL );
+            typename V::const_iterator cp_new = cp++;
+            int prev = (*cp_new).bar();
+            ASSERT( prev==u[i-1].bar(), NULL );
+        }
+        CheckConstIterator(u,i,cp);
+    }
+
+    // Now go forwards and backwards
+    ptrdiff_t j = 0;
+    cp = u.begin();
+    for( size_t i=0; i<u.size(); ++i ) {
+        CheckConstIterator(u,int(j),cp);
+        typename V::difference_type delta = i*3 % u.size();
+        if( 0<=j+delta && size_t(j+delta)<u.size() ) {
+            V::const_iterator &cpr = (cp += delta);
+            ASSERT( &cpr == &cp, "+= not returning a reference?");
+            j += delta; 
+        } 
+        delta = i*7 % u.size();
+        if( 0<=j-delta && size_t(j-delta)<u.size() ) {
+            if( i&1 ) { 
+                V::const_iterator &cpr = (cp -= delta);
+                ASSERT( &cpr == &cp, "-= not returning a reference?");
+            } else
+                cp = cp - delta;        // Test operator-
+            j -= delta; 
+        } 
+    }
+    
+    for( int i=0; size_t(i)<u.size(); i=(i<50?i+1:i*3) )
+        for( int j=-i; size_t(i+j)<u.size(); j=(j<50?j+1:j*5) ) {
+            ASSERT( (u.begin()+i)[j].bar()==i+j, NULL );
+            ASSERT( (v.begin()+i)[j].bar()==i+j, NULL );
+            ASSERT((v.cbegin()+i)[j].bar()==i+j, NULL );
+            ASSERT( (i+u.begin())[j].bar()==i+j, NULL );
+            ASSERT( (i+v.begin())[j].bar()==i+j, NULL );
+            ASSERT((i+v.cbegin())[j].bar()==i+j, NULL );
+        }
+
+    CheckIteratorComparison<typename V::iterator, typename V::iterator>(v);
+    CheckIteratorComparison<typename V::iterator, typename V::const_iterator>(v);
+    CheckIteratorComparison<typename V::const_iterator, typename V::iterator>(v);
+    CheckIteratorComparison<typename V::const_iterator, typename V::const_iterator>(v);
+
+    TestIteratorAssignment<typename V::const_iterator>( u.begin() );
+    TestIteratorAssignment<typename V::const_iterator>( v.begin() );
+    TestIteratorAssignment<typename V::const_iterator>( v.cbegin() );
+    TestIteratorAssignment<typename V::iterator>( v.begin() );
+    // doesn't compile as expected: TestIteratorAssignment<typename V::iterator>( u.begin() );
+
+    TestRangeAssignment<typename V::const_range_type>( u.range() );
+    TestRangeAssignment<typename V::const_range_type>( v.range() );
+    TestRangeAssignment<typename V::range_type>( v.range() );
+    // doesn't compile as expected: TestRangeAssignment<typename V::range_type>( u.range() );
+
+    // Check reverse_iterator 
+    typename V::reverse_iterator rp = v.rbegin();
+    for( size_t i=v.size(); i>0; --i, ++rp ) {
+        typename V::reference pref = *rp;
+        ASSERT( size_t(pref.bar())==i-1, NULL );
+        ASSERT( rp!=v.rend(), NULL );
+    }
+    ASSERT( rp==v.rend(), NULL );
+    
+    // Check const_reverse_iterator 
+    typename V::const_reverse_iterator crp = u.rbegin();
+    ASSERT( crp == v.crbegin(), NULL );
+    ASSERT( *crp == v.back(), NULL);
+    for( size_t i=v.size(); i>0; --i, ++crp ) {
+        typename V::const_reference cpref = *crp;
+        ASSERT( size_t(cpref.bar())==i-1, NULL );
+        ASSERT( crp!=u.rend(), NULL );
+    }
+    ASSERT( crp == u.rend(), NULL );
+    ASSERT( crp == v.crend(), NULL );
+
+    TestIteratorAssignment<typename V::const_reverse_iterator>( u.rbegin() );
+    TestIteratorAssignment<typename V::reverse_iterator>( v.rbegin() );
+
+    // test compliance with C++ Standard 2003, clause 23.1.1p9
+    {
+        tbb::concurrent_vector<int> v1, v2(1, 100);
+        v1.assign(1, 100); ASSERT(v1 == v2, NULL);
+        ASSERT(v1.size() == 1 && v1[0] == 100, "used integral iterators");
+    }
+
+    // cross-allocator tests
+#if !defined(_WIN64) || defined(_CPPLIB_VER)
+    typedef local_counting_allocator<std::allocator<int>, size_t> allocator1_t;
+    typedef tbb::cache_aligned_allocator<void> allocator2_t;
+    typedef tbb::concurrent_vector<FooWithAssign, allocator1_t> V1;
+    typedef tbb::concurrent_vector<FooWithAssign, allocator2_t> V2;
+    V1 v1( v ); // checking cross-allocator copying
+    V2 v2( 10 ); v2 = v1; // checking cross-allocator assignment
+    ASSERT( (v1 == v) && !(v2 != v), NULL);
+    ASSERT( !(v1 < v) && !(v2 > v), NULL);
+    ASSERT( (v1 <= v) && (v2 >= v), NULL);
+#endif
+}
+
+static const size_t Modulus = 7;
+
+typedef static_counting_allocator<debug_allocator<Foo> > MyAllocator;
+typedef tbb::concurrent_vector<Foo, MyAllocator> MyVector;
+
+template<typename MyVector>
+class GrowToAtLeast: NoAssign {
+    MyVector& my_vector;
+public:
+    void operator()( const tbb::blocked_range<size_t>& range ) const {
+        for( size_t i=range.begin(); i!=range.end(); ++i ) {
+            size_t n = my_vector.size();
+            size_t req = (i % (2*n+1))+1;
+#if TBB_DEPRECATED
+            my_vector.grow_to_at_least(req);
+#else
+            typename MyVector::iterator p = my_vector.grow_to_at_least(req);
+            if( p-my_vector.begin() < typename MyVector::difference_type(req) )
+                ASSERT( p->state == Foo::DefaultInitialized || p->state == Foo::ZeroInitialized, NULL);
+#endif
+            ASSERT( my_vector.size()>=req, NULL );
+        }
+    }
+    GrowToAtLeast( MyVector& vector ) : my_vector(vector) {}
+};
+
+void TestConcurrentGrowToAtLeast() {
+    typedef static_counting_allocator< tbb::zero_allocator<Foo> > MyAllocator;
+    typedef tbb::concurrent_vector<Foo, MyAllocator> MyVector;
+    MyAllocator::init_counters();
+    MyVector v(2, Foo(), MyAllocator());
+    for( size_t s=1; s<1000; s*=10 ) {
+        tbb::parallel_for( tbb::blocked_range<size_t>(0,10000*s,s), GrowToAtLeast<MyVector>(v), tbb::simple_partitioner() );
+    }
+    v.clear();
+    ASSERT( 0 == v.get_allocator().frees, NULL);
+    v.shrink_to_fit();
+    size_t items_allocated = v.get_allocator().items_allocated,
+           items_freed = v.get_allocator().items_freed;
+    size_t allocations = v.get_allocator().allocations,
+           frees = v.get_allocator().frees;
+    ASSERT( items_allocated == items_freed, NULL);
+    ASSERT( allocations == frees, NULL);
+}
+
+//! Test concurrent invocations of method concurrent_vector::grow_by
+template<typename MyVector>
+class GrowBy: NoAssign {
+    MyVector& my_vector;
+public:
+    void operator()( const tbb::blocked_range<int>& range ) const {
+        ASSERT( range.begin() < range.end(), NULL );
+#if TBB_DEPRECATED
+        for( int i=range.begin(); i!=range.end(); ++i )
+#else
+        int i = range.begin(), h = (range.end() - i) / 2;
+        typename MyVector::iterator s = my_vector.grow_by(h);
+        for( h += i; i < h; ++i, ++s )
+            s->bar() = i;
+        for(; i!=range.end(); ++i )
+#endif
+        {
+            if( i&1 ) {
+#if TBB_DEPRECATED
+                typename MyVector::reference element = my_vector[my_vector.grow_by(1)]; 
+                element.bar() = i;
+#else
+                my_vector.grow_by(1)->bar() = i;
+#endif
+            } else {
+                typename MyVector::value_type f;
+                f.bar() = i;
+#if TBB_DEPRECATED
+                size_t r;
+#else
+                typename MyVector::iterator r;
+#endif
+                if( i&2 )
+                    r = my_vector.push_back( f );
+                else
+                    r = my_vector.grow_by(1, f);
+#if TBB_DEPRECATED
+                ASSERT( my_vector[r].bar()==i, NULL );
+#else
+                ASSERT( r->bar()==i, NULL );
+#endif
+            }
+        }
+    }
+    GrowBy( MyVector& vector ) : my_vector(vector) {}
+};
+
+//! Test concurrent invocations of method concurrent_vector::grow_by
+void TestConcurrentGrowBy( int nthread ) {
+    MyAllocator::init_counters();
+    {
+        int m = 100000; MyAllocator a;
+        MyVector v( a );
+        tbb::parallel_for( tbb::blocked_range<int>(0,m,100), GrowBy<MyVector>(v), tbb::simple_partitioner() );
+        ASSERT( v.size()==size_t(m), NULL );
+
+        // Verify that v is a permutation of 0..m
+        int inversions = 0, def_inits = 0, copy_inits = 0;
+        bool* found = new bool[m];
+        memset( found, 0, m );
+        for( int i=0; i<m; ++i ) {
+            if( v[i].state == Foo::DefaultInitialized ) ++def_inits;
+            else if( v[i].state == Foo::CopyInitialized ) ++copy_inits;
+            else {
+                if(Verbose) std::printf("i: %d ", i);
+                ASSERT( false, "v[i] seems not initialized");
+            }
+            int index = v[i].bar();
+            ASSERT( !found[index], NULL );
+            found[index] = true;
+            if( i>0 )
+                inversions += v[i].bar()<v[i-1].bar();
+        }
+        for( int i=0; i<m; ++i ) {
+            ASSERT( found[i], NULL );
+            ASSERT( nthread>1 || v[i].bar()==i, "sequential execution is wrong" );
+        }
+        delete[] found;
+        if(Verbose) REPORT("Initialization by default constructor: %d, by copy: %d\n", def_inits, copy_inits);
+        ASSERT( def_inits >= m/2, NULL );
+        ASSERT( copy_inits >= m/4, NULL );
+        if( nthread>1 && inversions<m/20 )
+            REPORT("Warning: not much concurrency in TestConcurrentGrowBy (%d inversions)\n", inversions);
+    }
+    size_t items_allocated = MyAllocator::items_allocated,
+           items_freed = MyAllocator::items_freed;
+    size_t allocations = MyAllocator::allocations,
+           frees = MyAllocator::frees;
+    ASSERT( items_allocated == items_freed, NULL);
+    ASSERT( allocations == frees, NULL);
+}
+
+//! Test the assignment operator and swap
+void TestAssign() {
+    typedef tbb::concurrent_vector<FooWithAssign, local_counting_allocator<std::allocator<FooWithAssign>, size_t > > vector_t;
+    local_counting_allocator<std::allocator<FooWithAssign>, size_t > init_alloc;
+    init_alloc.allocations = 100;
+    for( int dst_size=1; dst_size<=128; NextSize( dst_size ) ) {
+        for( int src_size=2; src_size<=128; NextSize( src_size ) ) {
+            vector_t u(FooIterator(0), FooIterator(src_size), init_alloc);
+            for( int i=0; i<src_size; ++i )
+                ASSERT( u[i].bar()==i, NULL );
+            vector_t v(dst_size, FooWithAssign(), init_alloc);
+            for( int i=0; i<dst_size; ++i ) {
+                ASSERT( v[i].state==Foo::CopyInitialized, NULL );
+                v[i].bar() = ~i;
+            }
+            ASSERT( v != u, NULL);
+            v.swap(u);
+            CheckVector(u, dst_size, src_size);
+            u.swap(v);
+            // using assignment
+            v = u;
+            ASSERT( v == u, NULL);
+            u.clear();
+            ASSERT( u.size()==0, NULL );
+            ASSERT( v.size()==size_t(src_size), NULL );
+            for( int i=0; i<src_size; ++i )
+                ASSERT( v[i].bar()==i, NULL );
+            ASSERT( 0 == u.get_allocator().frees, NULL);
+            u.shrink_to_fit(); // deallocate unused memory
+            size_t items_allocated = u.get_allocator().items_allocated,
+                   items_freed = u.get_allocator().items_freed;
+            size_t allocations = u.get_allocator().allocations,
+                   frees = u.get_allocator().frees + 100;
+            ASSERT( items_allocated == items_freed, NULL);
+            ASSERT( allocations == frees, NULL);
+        }
+    }
+}
+
+// Test the comparison operators
+#include <string>
+void TestComparison() {
+    std::string str[3]; str[0] = "abc";
+    str[1].assign("cba");
+    str[2].assign("abc"); // same as 0th
+    tbb::concurrent_vector<char> var[3];
+    var[0].assign(str[0].begin(), str[0].end());
+    var[1].assign(str[0].rbegin(), str[0].rend());
+    var[2].assign(var[1].rbegin(), var[1].rend()); // same as 0th
+    for (int i = 0; i < 3; ++i) {
+        for (int j = 0; j < 3; ++j) {
+            ASSERT( (var[i] == var[j]) == (str[i] == str[j]), NULL );
+            ASSERT( (var[i] != var[j]) == (str[i] != str[j]), NULL );
+            ASSERT( (var[i] < var[j]) == (str[i] < str[j]), NULL );
+            ASSERT( (var[i] > var[j]) == (str[i] > str[j]), NULL );
+            ASSERT( (var[i] <= var[j]) == (str[i] <= str[j]), NULL );
+            ASSERT( (var[i] >= var[j]) == (str[i] >= str[j]), NULL );
+        }
+    }
+}
+
+//------------------------------------------------------------------------
+// Regression test for problem where on oversubscription caused
+// concurrent_vector::grow_by to run very slowly (TR#196).
+//------------------------------------------------------------------------
+
+#include "tbb/task_scheduler_init.h"
+#include <math.h>
+
+typedef unsigned long Number;
+
+static tbb::concurrent_vector<Number> Primes;
+
+class FindPrimes {
+    bool is_prime( Number val ) const {
+        int limit, factor = 3;
+        if( val<5u ) 
+            return val==2;
+        else {
+            limit = long(sqrtf(float(val))+0.5f);
+            while( factor<=limit && val % factor )
+                ++factor;
+            return factor>limit;
+        }
+    }
+public:
+    void operator()( const tbb::blocked_range<Number>& r ) const {
+        for( Number i=r.begin(); i!=r.end(); ++i ) { 
+            if( i%2 && is_prime(i) ) {
+#if TBB_DEPRECATED
+                Primes[Primes.grow_by(1)] = i;
+#else
+                Primes.push_back( i );
+#endif
+            }
+        }
+    }
+};
+
+double TimeFindPrimes( int nthread ) {
+    Primes.clear();
+    Primes.reserve(1000000);// TODO: or compact()?
+    tbb::task_scheduler_init init(nthread);
+    tbb::tick_count t0 = tbb::tick_count::now();
+    tbb::parallel_for( tbb::blocked_range<Number>(0,1000000,500), FindPrimes() );
+    tbb::tick_count t1 = tbb::tick_count::now();
+    return (t1-t0).seconds();
+}
+
+void TestFindPrimes() {
+    // Time fully subscribed run.
+    double t2 = TimeFindPrimes( tbb::task_scheduler_init::automatic );
+
+    // Time parallel run that is very likely oversubscribed.  
+    double t128 = TimeFindPrimes(128);
+
+    if( Verbose ) 
+        REPORT("TestFindPrimes: t2==%g t128=%g k=%g\n", t2, t128, t128/t2);
+
+    // We allow the 128-thread run a little extra time to allow for thread overhead.
+    // Theoretically, following test will fail on machine with >128 processors.
+    // But that situation is not going to come up in the near future,
+    // and the generalization to fix the issue is not worth the trouble.
+    if( t128 > 1.3*t2 ) {
+        REPORT("Warning: grow_by is pathetically slow: t2==%g t128=%g k=%g\n", t2, t128, t128/t2);
+    } 
+}
+
+//------------------------------------------------------------------------
+// Test compatibility with STL sort.
+//------------------------------------------------------------------------
+
+#include <algorithm>
+
+void TestSort() {
+    for( int n=0; n<100; n=n*3+1 ) {
+        tbb::concurrent_vector<int> array(n);
+        for( int i=0; i<n; ++i )
+            array.at(i) = (i*7)%n;
+        std::sort( array.begin(), array.end() );
+        for( int i=0; i<n; ++i )
+            ASSERT( array[i]==i, NULL );
+    }
+}
+
+//------------------------------------------------------------------------
+// Test exceptions safety (from allocator and items constructors)
+//------------------------------------------------------------------------
+#if __TBB_EXCEPTIONS
+void TestExceptions() {
+    typedef static_counting_allocator<debug_allocator<FooWithAssign>, std::size_t> allocator_t;
+    typedef tbb::concurrent_vector<FooWithAssign, allocator_t> vector_t;
+
+    enum methods {
+        zero_method = 0,
+        ctor_copy, ctor_size, assign_nt, assign_ir, op_equ, reserve, compact, grow,
+        all_methods
+    };
+    ASSERT( !FooCount, NULL );
+
+    try {
+        vector_t src(FooIterator(0), FooIterator(N)); // original data
+
+        for(int t = 0; t < 2; ++t) // exception type
+        for(int m = zero_method+1; m < all_methods; ++m)
+        {
+            ASSERT( FooCount == N, "Previous iteration miss some Foo's de-/initialization" );
+            allocator_t::init_counters();
+            if(t) MaxFooCount = FooCount + N/4;
+            else allocator_t::set_limits(N/4);
+            vector_t victim;
+            try {
+                switch(m) {
+                case ctor_copy: {
+                        vector_t acopy(src);
+                    } break; // auto destruction after exception is checked by ~Foo
+                case ctor_size: {
+                        vector_t sized(N);
+                    } break; // auto destruction after exception is checked by ~Foo
+                // Do not test assignment constructor due to reusing of same methods as below 
+                case assign_nt: {
+                        victim.assign(N, FooWithAssign());
+                    } break;
+                case assign_ir: {
+                        victim.assign(FooIterator(0), FooIterator(N));
+                    } break;
+                case op_equ: {
+                        victim.reserve(2); victim = src; // fragmented assignment
+                    } break;
+                case reserve: {
+                        try {
+                            victim.reserve(victim.max_size()+1);
+                        } catch(std::length_error &) {
+                        } catch(...) {
+                            KNOWN_ISSUE("ERROR: unrecognized exception - known compiler issue\n");
+                        }
+                        victim.reserve(N);
+                    } break;
+                case compact: {
+                        if(t) MaxFooCount = 0; else allocator_t::set_limits(); // reset limits
+                        victim.reserve(2); victim = src; // fragmented assignment
+                        if(t) MaxFooCount = FooCount + 10; else allocator_t::set_limits(1, false); // block any allocation, check NULL return from allocator
+                        victim.shrink_to_fit(); // should start defragmenting first segment
+                    } break;
+                case grow: {
+                        tbb::task_scheduler_init init(2);
+                        if(t) MaxFooCount = FooCount + 31; // these numbers help to reproduce the live lock for versions < TBB2.2
+                        try {
+                            tbb::parallel_for( tbb::blocked_range<int>(0, N, 70), GrowBy<vector_t>(victim) );
+                        } catch(...) {
+#if TBB_USE_CAPTURED_EXCEPTION
+                            throw tbb::bad_last_alloc();
+#else
+                            throw;
+#endif
+                        }
+                    } break;
+                default:;
+                }
+                if(!t || m != reserve) ASSERT(false, "should throw an exception");
+            } catch(std::bad_alloc &e) {
+                allocator_t::set_limits(); MaxFooCount = 0;
+                size_t capacity = victim.capacity();
+                size_t size = victim.size();
+#if TBB_DEPRECATED
+                size_t req_size = victim.grow_by(0);
+#else
+                size_t req_size = victim.grow_by(0) - victim.begin();
+#endif
+                ASSERT( size <= capacity, NULL);
+                ASSERT( req_size >= size, NULL);
+                switch(m) {
+                case reserve:
+                    if(t) ASSERT(false, NULL);
+                case assign_nt:
+                case assign_ir:
+                    if(!t) {
+                        ASSERT(capacity < N/2, "unexpected capacity");
+                        ASSERT(size == 0, "unexpected size");
+                        break;
+                    } else {
+                        ASSERT(size == N, "unexpected size");
+                        ASSERT(capacity >= N, "unexpected capacity");
+                        int i;
+                        for(i = 1; ; ++i)
+                            if(!victim[i].zero_bar()) break;
+                            else ASSERT(victim[i].bar() == (m == assign_ir)? i : initial_value_of_bar, NULL);
+                        for(; size_t(i) < size; ++i) ASSERT(!victim[i].zero_bar(), NULL);
+                        ASSERT(size_t(i) == size, NULL);
+                        break;
+                    }
+                case grow:
+                case op_equ:
+                    if(!t) {
+                        ASSERT(capacity > 0, NULL);
+                        ASSERT(capacity < N, "unexpected capacity");
+                    }
+                    {
+                        vector_t copy_of_victim(victim);
+                        ASSERT(copy_of_victim.size() > 0, NULL);
+                        for(int i = 0; ; ++i) {
+                            try {
+                                FooWithAssign &foo = victim.at(i);
+                                if( !foo.is_valid_or_zero() ) {
+                                    std::printf("i: %d size: %zd req_size: %zd  state: %d\n", i, size, req_size, foo.state);
+                                }
+                                int bar = foo.zero_bar();
+                                if(m != grow) ASSERT( bar == i || (t && bar == 0), NULL);
+                                if(size_t(i) < copy_of_victim.size()) ASSERT( copy_of_victim[i].bar() == bar, NULL);
+                            } catch(std::range_error &) { // skip broken segment
+                                ASSERT( size_t(i) < req_size, NULL );
+                                if(m == op_equ) break;
+                            } catch(std::out_of_range &){
+                                ASSERT( i > 0, NULL ); break;
+                            } catch(...) {
+                                KNOWN_ISSUE("ERROR: unrecognized exception - known compiler issue\n"); break;
+                            }
+                        }
+                        vector_t copy_of_victim2(10); copy_of_victim2 = victim;
+                        ASSERT(copy_of_victim == copy_of_victim2, "assignment doesn't match copying");
+                        if(m == op_equ) {
+                            try {
+                                victim = copy_of_victim2;
+                            } catch(tbb::bad_last_alloc &) { break;
+                            } catch(...) {
+                                KNOWN_ISSUE("ERROR: unrecognized exception - known compiler issue\n"); break;
+                            }
+                            ASSERT(t, NULL);
+                        }
+                    } break;
+                case compact:
+                    ASSERT(capacity > 0, "unexpected capacity");
+                    ASSERT(victim == src, "shrink_to_fit() is broken");
+                    break;
+
+                default:; // nothing to check here
+                }
+                if( Verbose ) REPORT("Exception %d: %s\t- ok\n", m, e.what());
+            }
+        }
+    } catch(...) {
+        ASSERT(false, "unexpected exception");
+    }
+}
+#endif// __TBB_EXCEPTIONS
+//------------------------------------------------------------------------
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    // Test requires at least one thread.
+    MinThread = 1;
+    ParseCommandLine( argc, argv );
+    if( MinThread<1 ) {
+        REPORT("ERROR: MinThread=%d, but must be at least 1\n",MinThread); MinThread = 1;
+    }
+#if !TBB_DEPRECATED
+    TestIteratorTraits<tbb::concurrent_vector<Foo>::iterator,Foo>();
+    TestIteratorTraits<tbb::concurrent_vector<Foo>::const_iterator,const Foo>();
+    TestSequentialFor<FooWithAssign> ();
+    TestResizeAndCopy();
+    TestAssign();
+#endif
+    TestCapacity();
+    ASSERT( !FooCount, NULL );
+    for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
+        tbb::task_scheduler_init init( nthread );
+        TestParallelFor( nthread );
+        TestConcurrentGrowToAtLeast();
+        TestConcurrentGrowBy( nthread );
+    }
+    ASSERT( !FooCount, NULL );
+#if !TBB_DEPRECATED
+    TestComparison();
+#if !__TBB_FLOATING_POINT_BROKEN
+    TestFindPrimes();
+#endif
+    TestSort();
+#if __TBB_EXCEPTIONS
+#if __TBB_EXCEPTION_HANDLING_BROKEN
+    REPORT("Warning: Exception safety test is skipped due to a known issue.\n");
+#else
+    TestExceptions();
+#endif
+#endif//__TBB_EXCEPTIONS
+#endif//!TBB_DEPRECATED
+    ASSERT( !FooCount, NULL );
+    if( Verbose ) 
+        REPORT("sizeof(concurrent_vector<int>) == %d\n", (int)sizeof(tbb::concurrent_vector<int>));
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_eh_algorithms.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_eh_algorithms.cpp
new file mode 100644 (file)
index 0000000..730c4df
--- /dev/null
@@ -0,0 +1,1424 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <limits.h> // for INT_MAX
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tbb_exception.h"
+#include "tbb/task.h"
+#include "tbb/atomic.h"
+#include "tbb/parallel_for.h"
+#include "tbb/parallel_reduce.h"
+#include "tbb/parallel_do.h"
+#include "tbb/pipeline.h"
+#include "tbb/parallel_scan.h"
+#include "tbb/blocked_range.h"
+#include "harness_assert.h"
+
+#if __TBB_EXCEPTIONS && !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
+
+#define FLAT_RANGE  100000
+#define FLAT_GRAIN  1000
+#define NESTING_RANGE  100
+#define NESTING_GRAIN  10
+#define NESTED_RANGE  (FLAT_RANGE / NESTING_RANGE)
+#define NESTED_GRAIN  (FLAT_GRAIN / NESTING_GRAIN)
+
+tbb::atomic<intptr_t> g_FedTasksCount; // number of tasks added by parallel_do feeder
+
+inline intptr_t Existed () { return INT_MAX; }
+
+#include "harness_eh.h"
+
+inline void ResetGlobals (  bool throwException = true, bool flog = false ) {
+    ResetEhGlobals( throwException, flog );
+    g_FedTasksCount = 0;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Tests for tbb::parallel_for and tbb::parallel_reduce
+
+typedef size_t count_type;
+typedef tbb::blocked_range<count_type> range_type;
+
+inline intptr_t NumSubranges ( intptr_t length, intptr_t grain ) {
+    intptr_t n = 1;
+    for( ; length > grain; length -= length >> 1 )
+        n *= 2;
+    return n;
+}
+
+template<class Body>
+intptr_t TestNumSubrangesCalculation ( intptr_t length, intptr_t grain, intptr_t nested_length, intptr_t nested_grain ) {
+    ResetGlobals();
+    g_ThrowException = false;
+    intptr_t nestingCalls = NumSubranges(length, grain),
+             nestedCalls = NumSubranges(nested_length, nested_grain),
+             maxExecuted = nestingCalls * (nestedCalls + 1);
+    tbb::parallel_for( range_type(0, length, grain), Body() );
+    ASSERT (g_CurExecuted == maxExecuted, "Wrong estimation of bodies invocation count");
+    return maxExecuted;
+}
+
+class NoThrowParForBody {
+public:
+    void operator()( const range_type& r ) const {
+        volatile long x;
+        count_type end = r.end();
+        for( count_type i=r.begin(); i<end; ++i )
+            x = 0;
+    }
+};
+
+void Test0 () {
+    ResetGlobals();
+    tbb::simple_partitioner p;
+    for( size_t i=0; i<10; ++i ) {
+        tbb::parallel_for( range_type(0, 0, 1), NoThrowParForBody() );
+        tbb::parallel_for( range_type(0, 0, 1), NoThrowParForBody(), p );
+        tbb::parallel_for( range_type(0, 128, 8), NoThrowParForBody() );
+        tbb::parallel_for( range_type(0, 128, 8), NoThrowParForBody(), p );
+    }
+} // void Test0 ()
+
+//! Template that creates a functor suitable for parallel_reduce from a functor for parallel_for.
+template<typename ParForBody>
+class SimpleParReduceBody: NoAssign {
+    ParForBody m_Body;
+public:
+    void operator()( const range_type& r ) const { m_Body(r); }
+    SimpleParReduceBody() {}
+    SimpleParReduceBody( SimpleParReduceBody& left, tbb::split ) : m_Body(left.m_Body) {}
+    void join( SimpleParReduceBody& /*right*/ ) {}
+}; // SimpleParReduceBody
+
+//! Test parallel_for and parallel_reduce for a given partitioner.
+/** The Body need only be suitable for a parallel_for. */
+template<typename ParForBody, typename Partitioner>
+void TestParallelLoopAux( Partitioner& partitioner ) {
+    for( int i=0; i<2; ++i ) {
+        ResetGlobals();
+        TRY();
+            if( i==0 )
+                tbb::parallel_for( range_type(0, FLAT_RANGE, FLAT_GRAIN), ParForBody(), partitioner );
+            else {
+                SimpleParReduceBody<ParForBody> rb;
+                tbb::parallel_reduce( range_type(0, FLAT_RANGE, FLAT_GRAIN), rb, partitioner );
+            }
+        CATCH_AND_ASSERT();
+        ASSERT (exceptionCaught, "No exception thrown from the nesting parallel_for");
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+        ASSERT (g_Exceptions == 1, "No try_blocks in any body expected in this test");
+        if ( !g_SolitaryException )
+            ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+    }
+}
+
+//! Test with parallel_for and parallel_reduce, over all three kinds of partitioners.
+/** The Body only needs to be suitable for tbb::parallel_for. */
+template<typename Body>
+void TestParallelLoop() {
+    // The simple and auto partitioners should be const, but not the affinity partitioner.
+    const tbb::simple_partitioner p0;
+    TestParallelLoopAux<Body>( p0 );
+    const tbb::auto_partitioner p1;
+    TestParallelLoopAux<Body>( p1 );
+    tbb::affinity_partitioner p2;
+    TestParallelLoopAux<Body>( p2 );
+}
+
+class SimpleParForBody: NoAssign {
+public:
+    void operator()( const range_type& r ) const {
+        Harness::ConcurrencyTracker ct;
+        volatile long x;
+        for( count_type i = r.begin(); i != r.end(); ++i )
+            x = 0;
+        ++g_CurExecuted;
+        WaitUntilConcurrencyPeaks();
+        ThrowTestException(1);
+    }
+};
+
+void Test1() {
+    TestParallelLoop<SimpleParForBody>();
+} // void Test1 ()
+
+class NestingParForBody: NoAssign {
+public:
+    void operator()( const range_type& ) const {
+        Harness::ConcurrencyTracker ct;
+        ++g_CurExecuted;
+        tbb::parallel_for( tbb::blocked_range<size_t>(0, NESTED_RANGE, NESTED_GRAIN), SimpleParForBody() );
+    }
+};
+
+//! Uses parallel_for body containing a nested parallel_for with the default context not wrapped by a try-block.
+/** Nested algorithms are spawned inside the new bound context by default. Since
+    exceptions thrown from the nested parallel_for are not handled by the caller
+    (nesting parallel_for body) in this test, they will cancel all the sibling nested
+    algorithms. **/
+void Test2 () {
+    TestParallelLoop<NestingParForBody>();
+} // void Test2 ()
+
+class NestingParForBodyWithIsolatedCtx {
+public:
+    void operator()( const range_type& ) const {
+        tbb::task_group_context ctx(tbb::task_group_context::isolated);
+        ++g_CurExecuted;
+        tbb::parallel_for( tbb::blocked_range<size_t>(0, NESTED_RANGE, NESTED_GRAIN), SimpleParForBody(), tbb::simple_partitioner(), ctx );
+    }
+};
+
+//! Uses parallel_for body invoking a nested parallel_for with an isolated context without a try-block.
+/** Even though exceptions thrown from the nested parallel_for are not handled
+    by the caller in this test, they will not affect sibling nested algorithms
+    already running because of the isolated contexts. However because the first
+    exception cancels the root parallel_for only the first g_NumThreads subranges
+    will be processed (which launch nested parallel_fors) **/
+void Test3 () {
+    ResetGlobals();
+    typedef NestingParForBodyWithIsolatedCtx body_type;
+    intptr_t  nestedCalls = NumSubranges(NESTED_RANGE, NESTED_GRAIN),
+            minExecuted = (g_NumThreads - 1) * nestedCalls;
+    TRY();
+        tbb::parallel_for( range_type(0, NESTING_RANGE, NESTING_GRAIN), body_type() );
+    CATCH_AND_ASSERT();
+    ASSERT (exceptionCaught, "No exception thrown from the nesting parallel_for");
+    if ( g_SolitaryException ) {
+        ASSERT (g_CurExecuted > minExecuted, "Too few tasks survived exception");
+        ASSERT (g_CurExecuted <= minExecuted + (g_ExecutedAtCatch + g_NumThreads), "Too many tasks survived exception");
+    }
+    ASSERT (g_Exceptions == 1, "No try_blocks in any body expected in this test");
+    if ( !g_SolitaryException )
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+} // void Test3 ()
+
+class NestingParForExceptionSafeBody {
+public:
+    void operator()( const range_type& ) const {
+        tbb::task_group_context ctx(tbb::task_group_context::isolated);
+        TRY();
+            tbb::parallel_for( tbb::blocked_range<size_t>(0, NESTED_RANGE, NESTED_GRAIN), SimpleParForBody(), tbb::simple_partitioner(), ctx );
+        CATCH();
+    }
+};
+
+//! Uses parallel_for body invoking a nested parallel_for (with default bound context) inside a try-block.
+/** Since exception(s) thrown from the nested parallel_for are handled by the caller
+    in this test, they do not affect neither other tasks of the the root parallel_for
+    nor sibling nested algorithms. **/
+void Test4 () {
+    ResetGlobals( true, true );
+    intptr_t  nestedCalls = NumSubranges(NESTED_RANGE, NESTED_GRAIN),
+            nestingCalls = NumSubranges(NESTING_RANGE, NESTING_GRAIN),
+            maxExecuted = nestingCalls * nestedCalls;
+    TRY();
+        tbb::parallel_for( range_type(0, NESTING_RANGE, NESTING_GRAIN), NestingParForExceptionSafeBody() );
+    CATCH();
+    ASSERT (!exceptionCaught, "All exceptions must have been handled in the parallel_for body");
+    intptr_t  minExecuted = 0;
+    if ( g_SolitaryException ) {
+        minExecuted = maxExecuted - nestedCalls;
+        ASSERT (g_Exceptions == 1, "No exception registered");
+        ASSERT (g_CurExecuted >= minExecuted, "Too few tasks executed");
+        ASSERT (g_CurExecuted <= minExecuted + g_NumThreads, "Too many tasks survived exception");
+    }
+    else {
+        minExecuted = g_Exceptions;
+        ASSERT (g_Exceptions > 1 && g_Exceptions <= nestingCalls, "Unexpected actual number of exceptions");
+        ASSERT (g_CurExecuted >= minExecuted, "Too many executed tasks reported");
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived multiple exceptions");
+        ASSERT (g_CurExecuted <= nestingCalls * (1 + g_NumThreads), "Too many tasks survived exception");
+    }
+} // void Test4 ()
+
+class ParForBodyToCancel {
+public:
+    void operator()( const range_type& ) const {
+        ++g_CurExecuted;
+        CancellatorTask::WaitUntilReady();
+    }
+};
+
+template<class B>
+class ParForLauncherTask : public tbb::task {
+    tbb::task_group_context &my_ctx;
+
+    tbb::task* execute () {
+        tbb::parallel_for( range_type(0, FLAT_RANGE, FLAT_GRAIN), B(), tbb::simple_partitioner(), my_ctx );
+        return NULL;
+    }
+public:
+    ParForLauncherTask ( tbb::task_group_context& ctx ) : my_ctx(ctx) {}
+};
+
+//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).
+void Test5 () {
+    ResetGlobals( false );
+    RunCancellationTest<ParForLauncherTask<ParForBodyToCancel>, CancellatorTask>( NumSubranges(FLAT_RANGE, FLAT_GRAIN) / 4 );
+    ASSERT (g_CurExecuted < g_ExecutedAtCatch + g_NumThreads, "Too many tasks were executed after cancellation");
+} // void Test5 ()
+
+class CancellatorTask2 : public tbb::task {
+    tbb::task_group_context &m_GroupToCancel;
+
+    tbb::task* execute () {
+        Harness::ConcurrencyTracker ct;
+        WaitUntilConcurrencyPeaks();
+        m_GroupToCancel.cancel_group_execution();
+        g_ExecutedAtCatch = g_CurExecuted;
+        return NULL;
+    }
+public:
+    CancellatorTask2 ( tbb::task_group_context& ctx, intptr_t ) : m_GroupToCancel(ctx) {}
+};
+
+class ParForBodyToCancel2 {
+public:
+    void operator()( const range_type& ) const {
+        ++g_CurExecuted;
+        Harness::ConcurrencyTracker ct;
+        // The test will hang (and be timed out by the test system) if is_cancelled() is broken
+        while( !tbb::task::self().is_cancelled() )
+            __TBB_Yield();
+    }
+};
+
+//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).
+/** This version also tests task::is_cancelled() method. **/
+void Test6 () {
+    ResetGlobals();
+    RunCancellationTest<ParForLauncherTask<ParForBodyToCancel2>, CancellatorTask2>();
+    ASSERT (g_ExecutedAtCatch < g_NumThreads, "Somehow worker tasks started their execution before the cancellator task");
+    ASSERT (g_CurExecuted <= g_ExecutedAtCatch, "Some tasks were executed after cancellation");
+} // void Test6 ()
+
+////////////////////////////////////////////////////////////////////////////////
+// Regression test based on the contribution by the author of the following forum post:
+// http://softwarecommunity.intel.com/isn/Community/en-US/forums/thread/30254959.aspx
+
+#define LOOP_COUNT 16
+#define MAX_NESTING 3
+#define REDUCE_RANGE 1024
+#define REDUCE_GRAIN 256
+
+class Worker {
+public:
+    void DoWork (int & result, int nest);
+};
+
+class RecursiveParReduceBodyWithSharedWorker {
+    Worker * m_SharedWorker;
+    int m_NestingLevel;
+    int m_Result;
+public:
+    RecursiveParReduceBodyWithSharedWorker ( RecursiveParReduceBodyWithSharedWorker& src, tbb::split )
+        : m_SharedWorker(src.m_SharedWorker)
+        , m_NestingLevel(src.m_NestingLevel)
+        , m_Result(0)
+    {}
+    RecursiveParReduceBodyWithSharedWorker ( Worker *w, int nesting )
+        : m_SharedWorker(w)
+        , m_NestingLevel(nesting)
+        , m_Result(0)
+    {}
+
+    void operator() ( const tbb::blocked_range<size_t>& r ) {
+        for (size_t i = r.begin (); i != r.end (); ++i) {
+            int result = 0;
+            m_SharedWorker->DoWork (result, m_NestingLevel);
+            m_Result += result;
+        }
+    }
+    void join (const RecursiveParReduceBodyWithSharedWorker & x) {
+        m_Result += x.m_Result;
+    }
+    int result () { return m_Result; }
+};
+
+void Worker::DoWork ( int& result, int nest ) {
+    ++nest;
+    if ( nest < MAX_NESTING ) {
+        RecursiveParReduceBodyWithSharedWorker rt (this, nest);
+        tbb::parallel_reduce (tbb::blocked_range<size_t>(0, REDUCE_RANGE, REDUCE_GRAIN), rt);
+        result = rt.result ();
+    }
+    else
+        ++result;
+}
+
+//! Regression test for hanging that occurred with the first version of cancellation propagation
+void Test7 () {
+    Worker w;
+    int result = 0;
+    w.DoWork (result, 0);
+    ASSERT ( result == 1048576, "Wrong calculation result");
+}
+
+void RunParForAndReduceTests () {
+    REMARK( "parallel for and reduce tests" );
+    tbb::task_scheduler_init init (g_NumThreads);
+    g_Master = Harness::CurrentTid();
+
+    Test0();
+#if !__TBB_EXCEPTION_HANDLING_BROKEN
+    Test1();
+    Test3();
+    Test4();
+#endif
+    Test5();
+    Test6();
+    Test7();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Tests for tbb::parallel_do
+
+#define ITER_RANGE          1000
+#define ITEMS_TO_FEED       50
+#define NESTED_ITER_RANGE   100
+#define NESTING_ITER_RANGE  50
+
+#define PREPARE_RANGE(Iterator, rangeSize)  \
+    size_t test_vector[rangeSize + 1]; \
+    for (int i =0; i < rangeSize; i++) \
+        test_vector[i] = i; \
+    Iterator begin(&test_vector[0]); \
+    Iterator end(&test_vector[rangeSize])
+
+void Feed ( tbb::parallel_do_feeder<size_t> &feeder, size_t val ) {
+    if (g_FedTasksCount < ITEMS_TO_FEED) { 
+        ++g_FedTasksCount; 
+        feeder.add(val);
+    }
+}
+
+#include "harness_iterator.h"
+
+// Simple functor object with exception
+class SimpleParDoBody {
+public:
+    void operator() ( size_t &value ) const {
+        ++g_CurExecuted;
+        Harness::ConcurrencyTracker ct;
+        value += 1000;
+        WaitUntilConcurrencyPeaks();
+        ThrowTestException(1);
+    }
+};
+
+// Simple functor object with exception and feeder
+class SimpleParDoBodyWithFeeder : SimpleParDoBody {
+public:
+    void operator() ( size_t &value, tbb::parallel_do_feeder<size_t> &feeder ) const {
+        Feed(feeder, 0);
+        SimpleParDoBody::operator()(value);
+    }
+};
+
+// Tests exceptions without nesting
+template <class Iterator, class simple_body>
+void Test1_parallel_do () {
+    ResetGlobals();
+    PREPARE_RANGE(Iterator, ITER_RANGE);
+    TRY();
+        tbb::parallel_do<Iterator, simple_body>(begin, end, simple_body() );
+    CATCH_AND_ASSERT();
+    ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+    ASSERT (g_Exceptions == 1, "No try_blocks in any body expected in this test");
+    if ( !g_SolitaryException )
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+
+} // void Test1_parallel_do ()
+
+template <class Iterator>
+class NestingParDoBody {
+public:
+    void operator()( size_t& /*value*/ ) const {
+        ++g_CurExecuted;
+        PREPARE_RANGE(Iterator, NESTED_ITER_RANGE);
+        tbb::parallel_do<Iterator, SimpleParDoBody>(begin, end, SimpleParDoBody());
+    }
+};
+
+template <class Iterator>
+class NestingParDoBodyWithFeeder : NestingParDoBody<Iterator> {
+public:
+    void operator()( size_t& value, tbb::parallel_do_feeder<size_t>& feeder ) const {
+        Feed(feeder, 0);
+        NestingParDoBody<Iterator>::operator()(value);
+    }
+};
+
+//! Uses parallel_do body containing a nested parallel_do with the default context not wrapped by a try-block.
+/** Nested algorithms are spawned inside the new bound context by default. Since
+    exceptions thrown from the nested parallel_do are not handled by the caller
+    (nesting parallel_do body) in this test, they will cancel all the sibling nested
+    algorithms. **/
+template <class Iterator, class nesting_body>
+void Test2_parallel_do () {
+    ResetGlobals();
+    PREPARE_RANGE(Iterator, ITER_RANGE);
+    TRY();
+        tbb::parallel_do<Iterator, nesting_body >(begin, end, nesting_body() );
+    CATCH_AND_ASSERT();
+    ASSERT (exceptionCaught, "No exception thrown from the nesting parallel_for");
+    //if ( g_SolitaryException )
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+    ASSERT (g_Exceptions == 1, "No try_blocks in any body expected in this test");
+    if ( !g_SolitaryException )
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+} // void Test2_parallel_do ()
+
+template <class Iterator> 
+class NestingParDoBodyWithIsolatedCtx {
+public:
+    void operator()( size_t& /*value*/ ) const {
+        tbb::task_group_context ctx(tbb::task_group_context::isolated);
+        ++g_CurExecuted;
+        PREPARE_RANGE(Iterator, NESTED_ITER_RANGE);
+        tbb::parallel_do<Iterator, SimpleParDoBody>(begin, end, SimpleParDoBody(), ctx);
+    }
+};
+
+template <class Iterator> 
+class NestingParDoBodyWithIsolatedCtxWithFeeder : NestingParDoBodyWithIsolatedCtx<Iterator> {
+public:
+    void operator()( size_t& value, tbb::parallel_do_feeder<size_t> &feeder ) const {
+        Feed(feeder, 0);
+        NestingParDoBodyWithIsolatedCtx<Iterator>::operator()(value);
+    }
+};
+
+//! Uses parallel_do body invoking a nested parallel_do with an isolated context without a try-block.
+/** Even though exceptions thrown from the nested parallel_do are not handled
+    by the caller in this test, they will not affect sibling nested algorithms
+    already running because of the isolated contexts. However because the first
+    exception cancels the root parallel_do only the first g_NumThreads subranges
+    will be processed (which launch nested parallel_dos) **/
+template <class Iterator, class nesting_body>
+void Test3_parallel_do () {
+    ResetGlobals();
+    PREPARE_RANGE(Iterator, NESTING_ITER_RANGE);
+    intptr_t nestedCalls = NESTED_ITER_RANGE,
+             minExecuted = (g_NumThreads - 1) * nestedCalls;
+    TRY();
+        tbb::parallel_do<Iterator, nesting_body >(begin, end, nesting_body());
+    CATCH_AND_ASSERT();
+    ASSERT (exceptionCaught, "No exception thrown from the nesting parallel_for");
+    if ( g_SolitaryException ) {
+        ASSERT (g_CurExecuted > minExecuted, "Too few tasks survived exception");
+        ASSERT (g_CurExecuted <= minExecuted + (g_ExecutedAtCatch + g_NumThreads), "Too many tasks survived exception");
+    }
+    ASSERT (g_Exceptions == 1, "No try_blocks in any body expected in this test");
+    if ( !g_SolitaryException )
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+} // void Test3_parallel_do ()
+
+template <class Iterator>
+class NestingParDoWithEhBody {
+public:
+    void operator()( size_t& /*value*/ ) const {
+        tbb::task_group_context ctx(tbb::task_group_context::isolated);
+        PREPARE_RANGE(Iterator, NESTED_ITER_RANGE);
+        TRY();
+            tbb::parallel_do<Iterator, SimpleParDoBody>(begin, end, SimpleParDoBody(), ctx);
+        CATCH();
+    }
+};
+
+template <class Iterator>
+class NestingParDoWithEhBodyWithFeeder : NoAssign, NestingParDoWithEhBody<Iterator> {
+public:
+    void operator()( size_t &value, tbb::parallel_do_feeder<size_t> &feeder ) const {
+        Feed(feeder, 0);
+        NestingParDoWithEhBody<Iterator>::operator()(value);
+    }
+};
+
+//! Uses parallel_for body invoking a nested parallel_for (with default bound context) inside a try-block.
+/** Since exception(s) thrown from the nested parallel_for are handled by the caller
+    in this test, they do not affect neither other tasks of the the root parallel_for
+    nor sibling nested algorithms. **/
+template <class Iterator, class nesting_body_with_eh>
+void Test4_parallel_do () {
+    ResetGlobals( true, true );
+    PREPARE_RANGE(Iterator, NESTING_ITER_RANGE);
+    TRY();
+        tbb::parallel_do<Iterator, nesting_body_with_eh>(begin, end, nesting_body_with_eh());
+    CATCH();
+    ASSERT (!exceptionCaught, "All exceptions must have been handled in the parallel_do body");
+    intptr_t nestedCalls = NESTED_ITER_RANGE,
+             nestingCalls = NESTING_ITER_RANGE + g_FedTasksCount,
+             maxExecuted = nestingCalls * nestedCalls,
+             minExecuted = 0;
+    if ( g_SolitaryException ) {
+        minExecuted = maxExecuted - nestedCalls;
+        ASSERT (g_Exceptions == 1, "No exception registered");
+        ASSERT (g_CurExecuted >= minExecuted, "Too few tasks executed");
+        ASSERT (g_CurExecuted <= minExecuted + g_NumThreads, "Too many tasks survived exception");
+    }
+    else {
+        minExecuted = g_Exceptions;
+        ASSERT (g_Exceptions > 1 && g_Exceptions <= nestingCalls, "Unexpected actual number of exceptions");
+        ASSERT (g_CurExecuted >= minExecuted, "Too many executed tasks reported");
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived multiple exceptions");
+        ASSERT (g_CurExecuted <= nestingCalls * (1 + g_NumThreads), "Too many tasks survived exception");
+    }
+} // void Test4_parallel_do ()
+
+class ParDoBodyToCancel {
+public:
+    void operator()( size_t& /*value*/ ) const {
+        ++g_CurExecuted;
+        CancellatorTask::WaitUntilReady();
+    }
+};
+
+class ParDoBodyToCancelWithFeeder : ParDoBodyToCancel {
+public:
+    void operator()( size_t& value, tbb::parallel_do_feeder<size_t> &feeder ) const {
+        Feed(feeder, 0);
+        ParDoBodyToCancel::operator()(value);
+    }
+};
+
+template<class B, class Iterator>
+class ParDoWorkerTask : public tbb::task {
+    tbb::task_group_context &my_ctx;
+
+    tbb::task* execute () {
+        PREPARE_RANGE(Iterator, NESTED_ITER_RANGE);
+        tbb::parallel_do<Iterator, B>( begin, end, B(), my_ctx );
+        return NULL;
+    }
+public:
+    ParDoWorkerTask ( tbb::task_group_context& ctx ) : my_ctx(ctx) {}
+};
+
+//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).
+template <class Iterator, class body_to_cancel>
+void Test5_parallel_do () {
+    ResetGlobals( false );
+    intptr_t  threshold = 10;
+    tbb::task_group_context  ctx;
+    ctx.reset();
+    tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+    r.set_ref_count(3);
+    r.spawn( *new( r.allocate_child() ) CancellatorTask(ctx, threshold) );
+    __TBB_Yield();
+    r.spawn( *new( r.allocate_child() ) ParDoWorkerTask<body_to_cancel, Iterator>(ctx) );
+    TRY();
+        r.wait_for_all();
+    CATCH();
+    r.destroy(r);
+    ASSERT (!exceptionCaught, "Cancelling tasks should not cause any exceptions");
+    ASSERT (g_CurExecuted < g_ExecutedAtCatch + g_NumThreads, "Too many tasks were executed after cancellation");
+} // void Test5_parallel_do ()
+
+class ParDoBodyToCancel2 {
+public:
+    void operator()( size_t& /*value*/ ) const {
+        ++g_CurExecuted;
+        // The test will hang (and be timed out by the test system) if is_cancelled() is broken
+        while( !tbb::task::self().is_cancelled() )
+            __TBB_Yield();
+    }
+};
+
+class ParDoBodyToCancel2WithFeeder : ParDoBodyToCancel2 {
+public:
+    void operator()( size_t& value, tbb::parallel_do_feeder<size_t> &feeder ) const {
+        Feed(feeder, 0);
+        ParDoBodyToCancel2::operator()(value);
+    }
+};
+
+//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).
+/** This version also tests task::is_cancelled() method. **/
+template <class Iterator, class body_to_cancel>
+void Test6_parallel_do () {
+    ResetGlobals();
+    RunCancellationTest<ParDoWorkerTask<body_to_cancel, Iterator>, CancellatorTask2>();
+    ASSERT (g_CurExecuted <= g_ExecutedAtCatch, "Some tasks were executed after cancellation");
+} // void Test6_parallel_do ()
+
+// This body throws an exception only if the task was added by feeder
+class ParDoBodyWithThrowingFeederTasks {
+public:
+    //! This form of the function call operator can be used when the body needs to add more work during the processing
+    void operator() ( size_t &value, tbb::parallel_do_feeder<size_t> &feeder ) const {
+        ++g_CurExecuted;
+        Feed(feeder, 1);
+        if (value == 1)
+            ThrowTestException(1);
+    }
+}; // class ParDoBodyWithThrowingFeederTasks
+
+// Test exception in task, which was added by feeder.
+template <class Iterator>
+void Test8_parallel_do () {
+    ResetGlobals();
+    PREPARE_RANGE(Iterator, ITER_RANGE);
+    TRY();
+        tbb::parallel_do<Iterator, ParDoBodyWithThrowingFeederTasks>(begin, end, ParDoBodyWithThrowingFeederTasks());
+    CATCH();
+    if (g_SolitaryException)
+        ASSERT (exceptionCaught, "At least one exception should occur");
+} // void Test8_parallel_do ()
+
+#define RunWithSimpleBody(func, body)       \
+    func<Harness::RandomIterator<size_t>, body>();           \
+    func<Harness::RandomIterator<size_t>, body##WithFeeder>();  \
+    func<Harness::ForwardIterator<size_t>, body>();         \
+    func<Harness::ForwardIterator<size_t>, body##WithFeeder>()
+
+#define RunWithTemplatedBody(func, body)       \
+    func<Harness::RandomIterator<size_t>, body<Harness::RandomIterator<size_t> > >();           \
+    func<Harness::RandomIterator<size_t>, body##WithFeeder<Harness::RandomIterator<size_t> > >();  \
+    func<Harness::ForwardIterator<size_t>, body<Harness::ForwardIterator<size_t> > >();         \
+    func<Harness::ForwardIterator<size_t>, body##WithFeeder<Harness::ForwardIterator<size_t> > >()
+
+void RunParDoTests() {
+    REMARK( "parallel do tests" );
+    tbb::task_scheduler_init init (g_NumThreads);
+    g_Master = Harness::CurrentTid();
+#if !__TBB_EXCEPTION_HANDLING_BROKEN
+    RunWithSimpleBody(Test1_parallel_do, SimpleParDoBody);
+    RunWithTemplatedBody(Test2_parallel_do, NestingParDoBody);
+    RunWithTemplatedBody(Test3_parallel_do, NestingParDoBodyWithIsolatedCtx);
+    RunWithTemplatedBody(Test4_parallel_do, NestingParDoWithEhBody);
+#endif
+    RunWithSimpleBody(Test5_parallel_do, ParDoBodyToCancel);
+    RunWithSimpleBody(Test6_parallel_do, ParDoBodyToCancel2);
+#if !__TBB_EXCEPTION_HANDLING_BROKEN
+    Test8_parallel_do<Harness::ForwardIterator<size_t> >();
+    Test8_parallel_do<Harness::RandomIterator<size_t> >();
+#endif
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Tests for tbb::pipeline
+
+#define NUM_ITEMS   100
+
+const size_t c_DataEndTag = size_t(~0);
+
+size_t g_NumTokens = 0;
+
+// Simple input filter class, it assigns 1 to all array members
+// It stops when it receives item equal to -1
+class InputFilter: public tbb::filter {
+    tbb::atomic<size_t> m_Item;
+    size_t m_Buffer[NUM_ITEMS + 1];
+public:
+    InputFilter() : tbb::filter(parallel) {
+        m_Item = 0;
+        for (size_t i = 0; i < NUM_ITEMS; ++i )
+            m_Buffer[i] = 1;
+        m_Buffer[NUM_ITEMS] = c_DataEndTag;
+    }
+
+    void* operator()( void* ) {
+        size_t item = m_Item.fetch_and_increment();
+        if ( item >= NUM_ITEMS )
+            return NULL;
+        m_Buffer[item] = 1;
+        return &m_Buffer[item];
+    }
+
+    size_t* buffer() { return m_Buffer; }
+}; // class InputFilter
+
+// Pipeline filter, without exceptions throwing
+class NoThrowFilter : public tbb::filter {
+    size_t m_Value;
+public:
+    enum operation {
+        addition,
+        subtraction,
+        multiplication
+    } m_Operation;
+
+    NoThrowFilter(operation _operation, size_t value, bool is_parallel)
+        : filter(is_parallel? tbb::filter::parallel : tbb::filter::serial_in_order),
+        m_Value(value), m_Operation(_operation)
+    {}
+    void* operator()(void* item) {
+        size_t &value = *(size_t*)item;
+        ASSERT(value != c_DataEndTag, "terminator element is being processed");
+        switch (m_Operation){
+            case addition:
+                value += m_Value;
+                break;
+            case subtraction:
+                value -= m_Value;
+                break;
+            case multiplication:
+                value *= m_Value;
+                break;
+            default:
+                ASSERT(0, "Wrong operation parameter passed to NoThrowFilter");
+        } // switch (m_Operation)
+        return item;
+    }
+};
+
+// Test pipeline without exceptions throwing
+void Test0_pipeline () {
+    ResetGlobals();
+    // Run test when serial filter is the first non-input filter
+    InputFilter inputFilter;
+    NoThrowFilter filter1(NoThrowFilter::addition, 99, false);
+    NoThrowFilter filter2(NoThrowFilter::subtraction, 90, true);
+    NoThrowFilter filter3(NoThrowFilter::multiplication, 5, false);
+    // Result should be 50 for all items except the last
+    tbb::pipeline p;
+    p.add_filter(inputFilter);
+    p.add_filter(filter1);
+    p.add_filter(filter2);
+    p.add_filter(filter3);
+    p.run(8);
+    for (size_t i = 0; i < NUM_ITEMS; ++i)
+        ASSERT(inputFilter.buffer()[i] == 50, "pipeline didn't process items properly");
+} // void Test0_pipeline ()
+
+// Simple filter with exception throwing
+class SimpleFilter : public tbb::filter {
+public:
+    SimpleFilter (tbb::filter::mode _mode ) : filter (_mode) {}
+
+    void* operator()(void* item) {
+        Harness::ConcurrencyTracker ct;
+        ++g_CurExecuted;
+        WaitUntilConcurrencyPeaks();
+        ThrowTestException(1);
+        return item;
+    }
+}; // class SimpleFilter
+
+// This enumeration represents filters order in pipeline
+enum FilterSet {
+    parallel__parallel=0,
+    parallel__serial=1,
+    parallel__serial_out_of_order=2,
+    serial__parallel=4,
+    serial__serial=5,
+    serial__serial_out_of_order=6,
+    serial_out_of_order__parallel=8,
+    serial_out_of_order__serial=9,
+    serial_out_of_order__serial_out_of_order=10
+};
+
+// The function returns filter type using filter number in set
+tbb::filter::mode filter_mode (FilterSet set, int number) {
+    size_t tmp = set << (2 * (2 - number));
+    switch (tmp&12){
+        case 0:
+            return tbb::filter::parallel;
+        case 4:
+            return tbb::filter::serial_in_order;
+        case 8:
+            return tbb::filter::serial_out_of_order;
+    }
+    ASSERT(0, "Wrong filter set passed to get_filter_type");
+    return tbb::filter::parallel; // We should never get here, just to prevent compiler warnings
+}
+
+template<typename InFilter, typename Filter>
+class CustomPipeline : protected tbb::pipeline {
+    InFilter inputFilter;
+    Filter filter1;
+    Filter filter2;
+public:
+    CustomPipeline( FilterSet FilterSet )
+        : filter1(filter_mode(FilterSet, 1))
+        , filter2(filter_mode(FilterSet, 2))
+    {
+       add_filter(inputFilter);
+       add_filter(filter1);
+       add_filter(filter2);
+    }
+    void run () { tbb::pipeline::run(g_NumTokens); }
+    void run ( tbb::task_group_context& ctx ) { tbb::pipeline::run(g_NumTokens, ctx); }
+
+    using tbb::pipeline::add_filter;
+};
+
+typedef CustomPipeline<InputFilter, SimpleFilter> SimplePipeline;
+
+// Tests exceptions without nesting
+void Test1_pipeline ( FilterSet mode ) {
+    ResetGlobals();
+    SimplePipeline testPipeline(mode);
+    TRY();
+        testPipeline.run();
+        if ( g_CurExecuted == 2 * NUM_ITEMS ) {
+            // In case of all serial filters they might be all executed in the thread(s)
+            // where exceptions are not allowed by the common test logic. So we just quit.
+            return;
+        }
+    CATCH_AND_ASSERT();
+    ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+    ASSERT (g_Exceptions == 1, "No try_blocks in any body expected in this test");
+    if ( !g_SolitaryException )
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+
+} // void Test1_pipeline ()
+
+// Filter with nesting
+class NestingFilter : public tbb::filter {
+public:
+    NestingFilter( tbb::filter::mode _mode ) : tbb::filter( _mode) {}
+
+    void* operator()(void* item) {
+        ++g_CurExecuted;
+        SimplePipeline testPipeline(serial__parallel);
+        testPipeline.run();
+        return item;
+    }
+}; // class NestingFilter
+
+//! Uses pipeline containing a nested pipeline with the default context not wrapped by a try-block.
+/** Nested algorithms are spawned inside the new bound context by default. Since
+    exceptions thrown from the nested pipeline are not handled by the caller
+    (nesting pipeline body) in this test, they will cancel all the sibling nested
+    algorithms. **/
+void Test2_pipeline ( FilterSet mode ) {
+    ResetGlobals();
+    CustomPipeline<InputFilter, NestingFilter> testPipeline(mode);
+    TRY();
+        testPipeline.run();
+    CATCH_AND_ASSERT();
+    ASSERT (exceptionCaught, "No exception thrown from the nesting pipeline");
+    ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+    ASSERT (g_Exceptions == 1, "No try_blocks in any body expected in this test");
+    if ( !g_SolitaryException )
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+} // void Test2_pipeline ()
+
+class NestingFilterWithIsolatedCtx : public tbb::filter {
+public:
+    NestingFilterWithIsolatedCtx(tbb::filter::mode m ) : filter (m) {}
+
+    void* operator()(void* item) {
+        ++g_CurExecuted;
+        tbb::task_group_context ctx(tbb::task_group_context::isolated);
+        SimplePipeline testPipeline(serial__parallel);
+        testPipeline.run(ctx);
+        return item;
+    }
+}; // class NestingFilterWithIsolatedCtx
+
+//! Uses pipeline invoking a nested pipeline with an isolated context without a try-block.
+/** Even though exceptions thrown from the nested pipeline are not handled
+    by the caller in this test, they will not affect sibling nested algorithms
+    already running because of the isolated contexts. However because the first
+    exception cancels the root parallel_do only the first g_NumThreads subranges
+    will be processed (which launch nested pipelines) **/
+void Test3_pipeline ( FilterSet mode ) {
+    ResetGlobals();
+    intptr_t nestedCalls = 100,
+             minExecuted = (g_NumThreads - 1) * nestedCalls;
+    CustomPipeline<InputFilter, NestingFilterWithIsolatedCtx> testPipeline(mode);
+    TRY();
+        testPipeline.run();
+    CATCH_AND_ASSERT();
+    ASSERT (exceptionCaught, "No exception thrown from the nesting parallel_for");
+    if ( g_SolitaryException ) {
+        ASSERT (g_CurExecuted > minExecuted, "Too few tasks survived exception");
+        ASSERT (g_CurExecuted <= minExecuted + (g_ExecutedAtCatch + g_NumThreads), "Too many tasks survived exception");
+    }
+    ASSERT (g_Exceptions == 1, "No try_blocks in any body expected in this test");
+    if ( !g_SolitaryException )
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+} // void Test3_pipeline ()
+
+class NestingFilterWithEhBody : public tbb::filter {
+public:
+    NestingFilterWithEhBody(tbb::filter::mode m ) : filter(m) {}
+
+    void* operator()(void* item) {
+        tbb::task_group_context ctx(tbb::task_group_context::isolated);
+        SimplePipeline testPipeline(serial__parallel);
+        TRY();
+            testPipeline.run(ctx);
+        CATCH();
+        return item;
+    }
+}; // class NestingFilterWithEhBody
+
+//! Uses pipeline body invoking a nested pipeline (with default bound context) inside a try-block.
+/** Since exception(s) thrown from the nested pipeline are handled by the caller
+    in this test, they do not affect neither other tasks of the the root pipeline
+    nor sibling nested algorithms. **/
+
+void Test4_pipeline ( FilterSet mode ) {
+#if __GNUC__ && !__INTEL_COMPILER
+    if ( strncmp(__VERSION__, "4.1.0", 5) == 0 ) {
+        REMARK_ONCE("Warning: One of exception handling tests is skipped due to a known issue.\n");
+        return;
+    }
+#endif
+    ResetGlobals( true, true );
+    intptr_t nestedCalls = NUM_ITEMS + 1,
+             nestingCalls = 2 * (NUM_ITEMS + 1),
+             maxExecuted = nestingCalls * nestedCalls;
+    CustomPipeline<InputFilter, NestingFilterWithEhBody> testPipeline(mode);
+    TRY();
+        testPipeline.run();
+    CATCH_AND_ASSERT();
+    ASSERT (!exceptionCaught, "All exceptions must have been handled in the parallel_do body");
+    intptr_t  minExecuted = 0;
+    if ( g_SolitaryException ) {
+        minExecuted = maxExecuted - nestedCalls;
+        ASSERT (g_Exceptions == 1, "No exception registered");
+        ASSERT (g_CurExecuted <= minExecuted + g_NumThreads, "Too many tasks survived exception");
+    }
+    else {
+        minExecuted = g_Exceptions;
+        ASSERT (g_Exceptions > 1 && g_Exceptions <= nestingCalls, "Unexpected actual number of exceptions");
+        ASSERT (g_CurExecuted >= minExecuted, "Too many executed tasks reported");
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived multiple exceptions");
+        ASSERT (g_CurExecuted <= nestingCalls * (1 + g_NumThreads), "Too many tasks survived exception");
+    }
+} // void Test4_pipeline ()
+
+class FilterToCancel : public tbb::filter {
+public:
+    FilterToCancel(bool is_parallel)
+        : filter( is_parallel ? tbb::filter::parallel : tbb::filter::serial_in_order )
+    {}
+    void* operator()(void* item) {
+        ++g_CurExecuted;
+        CancellatorTask::WaitUntilReady();
+        return item;
+    }
+}; // class FilterToCancel
+
+template <class Filter_to_cancel> 
+class PipelineLauncherTask : public tbb::task {
+    tbb::task_group_context &my_ctx;
+public:
+    PipelineLauncherTask ( tbb::task_group_context& ctx ) : my_ctx(ctx) {}
+
+    tbb::task* execute () {
+        // Run test when serial filter is the first non-input filter
+        InputFilter inputFilter;
+        Filter_to_cancel filterToCancel(true);
+        tbb::pipeline p;
+        p.add_filter(inputFilter);
+        p.add_filter(filterToCancel);
+        p.run(g_NumTokens, my_ctx);
+        return NULL;
+    }
+};
+
+//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).
+void Test5_pipeline () {
+    ResetGlobals();
+    g_ThrowException = false;
+    intptr_t  threshold = 10;
+    tbb::task_group_context ctx;
+    ctx.reset();
+    tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+    r.set_ref_count(3);
+    r.spawn( *new( r.allocate_child() ) CancellatorTask(ctx, threshold) );
+    __TBB_Yield();
+    r.spawn( *new( r.allocate_child() ) PipelineLauncherTask<FilterToCancel>(ctx) );
+    TRY();
+        r.wait_for_all();
+    CATCH();
+    r.destroy(r);
+    ASSERT (!exceptionCaught, "Cancelling tasks should not cause any exceptions");
+    ASSERT (g_CurExecuted < g_ExecutedAtCatch + g_NumThreads, "Too many tasks were executed after cancellation");
+} // void Test5_pipeline ()
+
+class FilterToCancel2 : public tbb::filter {
+public:
+    FilterToCancel2(bool is_parallel)
+        : filter ( is_parallel ? tbb::filter::parallel : tbb::filter::serial_in_order)
+    {}
+
+    void* operator()(void* item) {
+        ++g_CurExecuted;
+        // The test will hang (and be timed out by the tesst system) if is_cancelled() is broken
+        while( !tbb::task::self().is_cancelled() )
+            __TBB_Yield();
+        return item;
+    }
+};
+
+//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).
+/** This version also tests task::is_cancelled() method. **/
+void Test6_pipeline () {
+    ResetGlobals();
+    RunCancellationTest<PipelineLauncherTask<FilterToCancel2>, CancellatorTask2>();
+    ASSERT (g_CurExecuted <= g_ExecutedAtCatch, "Some tasks were executed after cancellation");
+} // void Test6_pipeline ()
+
+//! Testing filter::finalize method
+#define BUFFER_SIZE     32
+#define NUM_BUFFERS     1024
+
+tbb::atomic<size_t> g_AllocatedCount; // Number of currently allocated buffers
+tbb::atomic<size_t> g_TotalCount; // Total number of allocated buffers
+
+//! Base class for all filters involved in finalize method testing
+class FinalizationBaseFilter : public tbb::filter {
+public:
+    FinalizationBaseFilter ( tbb::filter::mode m ) : filter(m) {}
+
+    // Deletes buffers if exception occured
+    virtual void finalize( void* item ) {
+        size_t* m_Item = (size_t*)item;
+        delete[] m_Item;
+        --g_AllocatedCount;
+    }
+};
+
+//! Input filter to test finalize method
+class InputFilterWithFinalization: public FinalizationBaseFilter {
+public:
+    InputFilterWithFinalization() : FinalizationBaseFilter(tbb::filter::serial) {
+        g_TotalCount = 0;
+    }
+    void* operator()( void* ){
+        if (g_TotalCount == NUM_BUFFERS)
+            return NULL;
+        size_t* item = new size_t[BUFFER_SIZE];
+        for (int i = 0; i < BUFFER_SIZE; i++)
+            item[i] = 1;
+        ++g_TotalCount;
+        ++g_AllocatedCount;
+        return item;
+    }
+};
+
+// The filter multiplies each buffer item by 10.
+class ProcessingFilterWithFinalization : public FinalizationBaseFilter {
+public:
+    ProcessingFilterWithFinalization (tbb::filter::mode _mode) : FinalizationBaseFilter (_mode) {}
+
+    void* operator()( void* item) {
+        if (g_TotalCount > NUM_BUFFERS / 2)
+            ThrowTestException(1);
+        size_t* m_Item = (size_t*)item;
+        for (int i = 0; i < BUFFER_SIZE; i++)
+            m_Item[i] *= 10;
+        return item;
+    }
+};
+
+// Output filter deletes previously allocated buffer
+class OutputFilterWithFinalization : public FinalizationBaseFilter {
+public:
+    OutputFilterWithFinalization (tbb::filter::mode m) : FinalizationBaseFilter (m) {}
+
+    void* operator()( void* item){
+        size_t* m_Item = (size_t*)item;
+        delete[] m_Item;
+        --g_AllocatedCount;
+        return NULL;
+    }
+};
+
+//! Tests filter::finalize method
+void Test8_pipeline (FilterSet mode) {
+    ResetGlobals();
+    g_AllocatedCount = 0;
+    CustomPipeline<InputFilterWithFinalization, ProcessingFilterWithFinalization> testPipeline(mode);
+    OutputFilterWithFinalization my_output_filter(tbb::filter::parallel);
+
+    testPipeline.add_filter(my_output_filter);
+    TRY();
+        testPipeline.run();
+    CATCH();
+    ASSERT (g_AllocatedCount == 0, "Memory leak: Some my_object weren't destroyed");
+} // void Test8_pipeline ()
+
+// Tests pipeline function passed with different combination of filters
+template<void testFunc(FilterSet)>
+void TestWithDifferentFilters() {
+    testFunc(parallel__parallel);
+    testFunc(parallel__serial);
+    testFunc(parallel__serial_out_of_order);
+    testFunc(serial__parallel);
+    testFunc(serial__serial);
+    testFunc(serial__serial_out_of_order);
+    testFunc(serial_out_of_order__parallel);
+    testFunc(serial_out_of_order__serial);
+    testFunc(serial_out_of_order__serial_out_of_order);
+}
+
+void RunPipelineTests() {
+    REMARK( "pipeline tests" );
+    tbb::task_scheduler_init init (g_NumThreads);
+    g_Master = Harness::CurrentTid();
+    g_NumTokens = 2 * g_NumThreads;
+
+    Test0_pipeline();
+#if !__TBB_EXCEPTION_HANDLING_BROKEN
+    TestWithDifferentFilters<Test1_pipeline>();
+    TestWithDifferentFilters<Test2_pipeline>();
+    TestWithDifferentFilters<Test3_pipeline>();
+    TestWithDifferentFilters<Test4_pipeline>();
+#endif /* !__TBB_EXCEPTION_HANDLING_BROKEN */
+    Test5_pipeline();
+    Test6_pipeline();
+#if !__TBB_EXCEPTION_HANDLING_BROKEN
+    TestWithDifferentFilters<Test8_pipeline>();
+#endif
+}
+#endif /* __TBB_EXCEPTIONS */
+
+////////////////////////////////////////////////////////////////////////////////
+// Tests for tbb::parallel_scan
+
+const int id = 0;
+const int PSCAN_SIZE_OF_BUFFER = 100;
+
+class PScanBodyNothrow : public tbb::internal::no_assign {
+    size_t sum;
+    const size_t* const x;
+    size_t* const y;
+public:
+    PScanBodyNothrow( size_t y_[], const size_t x_[] ) : sum(id), x(x_), y(y_) {}
+    size_t get_sum() const {return sum;}
+    template<typename Tag>
+    void operator()( const tbb::blocked_range<int>& r, Tag ) {
+        size_t temp = sum;
+        for( int i=r.begin(); i<r.end(); ++i ) {
+            temp = temp + x[i];
+            if( Tag::is_final_scan() )
+                y[i] = temp;
+        }
+        sum = temp;
+    }
+    PScanBodyNothrow( PScanBodyNothrow& b, tbb::split ) :  sum(id), x(b.x), y(b.y) {}
+    void reverse_join( PScanBodyNothrow& a ) { sum = a.sum + sum;}
+    void assign( PScanBodyNothrow& b ) {sum = b.sum;}
+};
+
+// Test parallel_scan without exceptions throwing
+void Test0_parallel_scan () {
+    ResetGlobals();
+
+    // TODO move to a function or macro
+    size_t x[100], y[100], y_ref[100], sum = 0;
+    for (size_t i = 0; i < 100; i ++)
+    {
+        x[i] = i;
+        y[i] = 0;
+        sum += x[i];
+        y_ref[i] = sum;
+    }
+
+    PScanBodyNothrow body(y,x);
+    tbb::parallel_scan( tbb::blocked_range<int>(0, 100, 1), body );
+    for (size_t i = 0; i < 100; i ++)
+    {
+        ASSERT(y[i] == y_ref[i], "Sum got from parallel_scan is different from serial one");
+    }
+    ASSERT(body.get_sum() == y_ref[99], "Sum got from parallel_scan is different from serial one");
+
+} // void Test0_parallel_scan ()
+
+// Simple parallel_scan body which throws an exception
+class SimplePscanBody {
+public:
+    SimplePscanBody( ) {}
+    template<typename Tag>
+    void operator()( const tbb::blocked_range<int>& , Tag ) {
+        ++g_CurExecuted;
+        Harness::ConcurrencyTracker ct;
+        WaitUntilConcurrencyPeaks();
+        ThrowTestException(1);
+    }
+    SimplePscanBody( SimplePscanBody&, tbb::split ) {}
+    void reverse_join( SimplePscanBody& ) {}
+    void assign( SimplePscanBody& ) {}
+};
+
+// Tests tbb::parallel_scan exceptions handling without nesting
+void Test1_parallel_scan()
+{
+    ResetGlobals();
+
+    TRY();
+        SimplePscanBody simple_body;
+        tbb::parallel_scan( tbb::blocked_range<int>(0, 100, 1), simple_body );
+    CATCH_AND_ASSERT();
+
+    ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+    ASSERT (g_Exceptions == 1, "No try_blocks in any body expected in this test");
+    if ( !g_SolitaryException )
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+} // void Test1_parallel_scan()
+
+class NestingPScanBody {
+public:
+    NestingPScanBody( ) {}
+    template<typename Tag>
+    void operator()( const tbb::blocked_range<int>&, Tag ) {
+        ++g_CurExecuted;
+        if ( Harness::CurrentTid() == g_Master )
+            __TBB_Yield();
+
+        SimplePscanBody simple_body;
+        tbb::parallel_scan( tbb::blocked_range<int>(0, 100, 1), simple_body );
+    }
+    NestingPScanBody( NestingPScanBody& , tbb::split ) {}
+    void reverse_join( NestingPScanBody& ) {}
+    void assign( NestingPScanBody& ) {}
+};
+
+//! Uses parallel_scan body containing a nested parallel_scan with the default context not wrapped by a try-block.
+/** Nested algorithms are spawned inside the new bound context by default. Since
+    exceptions thrown from the nested parallel_scan are not handled by the caller
+    (nesting parallel_scan body) in this test, they will cancel all the sibling nested
+    algorithms. **/
+void Test2_parallel_scan () {
+    ResetGlobals();
+
+    TRY();
+        NestingPScanBody nesting_body;
+        tbb::parallel_scan( tbb::blocked_range<int>(0, 100, 1), nesting_body );
+    CATCH_AND_ASSERT();
+
+    ASSERT (g_ExceptionThrown, "No exception thrown from the nesting parallel_scan");
+    ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+    ASSERT (g_Exceptions == 1, "No try_blocks in any body expected in this test");
+    if ( !g_SolitaryException )
+        ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
+} // void Test2_parallel_scan ()
+
+class PScanBodyToCancel {
+public:
+    PScanBodyToCancel( ) {}
+    template<typename Tag>
+    void operator()( const tbb::blocked_range<int>&, Tag ) {
+        ++g_CurExecuted;
+        CancellatorTask::WaitUntilReady();
+    }
+    PScanBodyToCancel( PScanBodyToCancel& , tbb::split ) {}
+    void reverse_join( PScanBodyToCancel& ) {}
+    void assign( PScanBodyToCancel& ) {}
+};
+
+typedef class EmptyClass {
+} Default_partitioner;
+
+template <typename Partitioner>
+class MyWorkerPScanTask : public tbb::task
+{
+    tbb::task_group_context &my_ctx;
+
+    tbb::task* execute () {
+        PScanBodyToCancel body_to_cancel;
+        tbb::parallel_scan( tbb::blocked_range<int>(0, 100, 1), body_to_cancel, Partitioner(), my_ctx );
+        return NULL;
+    }
+public:
+    MyWorkerPScanTask ( tbb::task_group_context& ctx ) : my_ctx(ctx) {}
+};
+
+template <>
+class MyWorkerPScanTask<Default_partitioner> : public tbb::task
+{
+    tbb::task_group_context &my_ctx;
+
+    tbb::task* execute () {
+        PScanBodyToCancel body_to_cancel;
+        tbb::parallel_scan( tbb::blocked_range<int>(0, 100, 1), body_to_cancel, my_ctx );
+        return NULL;
+    }
+public:
+    MyWorkerPScanTask ( tbb::task_group_context& ctx ) : my_ctx(ctx) {}
+};
+
+
+//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).
+template <typename Partitioner>
+void Test5_parallel_scan () {
+    ResetGlobals( false );
+    RunCancellationTest<MyWorkerPScanTask<Partitioner>, CancellatorTask>( 1 );
+    ASSERT (g_CurExecuted < g_ExecutedAtCatch + g_NumThreads, "Too many tasks were executed after cancellation");
+} // void Test5_parallel_scan ()
+
+
+void RunPScanTests()
+{
+    tbb::task_scheduler_init init (g_NumThreads);
+    g_Master = Harness::CurrentTid();
+
+    Test0_parallel_scan();
+#if !(__GLIBC__==2&&__GLIBC_MINOR__==3)
+    Test1_parallel_scan();
+    Test2_parallel_scan();
+#endif /* __GLIBC__ */
+    if (g_NumThreads > 2) {
+        Test5_parallel_scan<tbb::simple_partitioner>();
+        Test5_parallel_scan<tbb::auto_partitioner>();
+        Test5_parallel_scan<Default_partitioner>(); // default partitioner
+    }
+}
+
+/** If min and max thread numbers specified on the command line are different,
+    the test is run only for 2 sizes of the thread pool (MinThread and MaxThread)
+    to be able to test the high and low contention modes while keeping the test reasonably fast **/
+__TBB_TEST_EXPORT
+int main(int argc, char* argv[]) {
+    ParseCommandLine( argc, argv );
+    MinThread = max(2, MinThread);
+    MaxThread = max(MinThread, MaxThread);
+    ASSERT (FLAT_RANGE >= FLAT_GRAIN * MaxThread, "Fix defines");
+#if __TBB_EXCEPTIONS
+    int step = max(MaxThread - MinThread, 1);
+    for ( g_NumThreads = MinThread; g_NumThreads <= MaxThread; g_NumThreads += step ) {
+        REMARK ("Number of threads %d", g_NumThreads);
+        // Execute in all the possible modes
+        for ( size_t j = 0; j < 4; ++j ) {
+            g_ExceptionInMaster = (j & 1) == 1;
+            g_SolitaryException = (j & 2) == 1;
+            RunParForAndReduceTests();
+            RunParDoTests();
+            RunPipelineTests();
+            RunPScanTests();
+        }
+    }
+#if __TBB_EXCEPTION_HANDLING_BROKEN
+    REPORT("Warning: Exception handling tests are skipped due to a known issue.\n");
+#endif
+    REPORT("done\n");
+#else  /* !__TBB_EXCEPTION_HANDLING_BROKEN */
+    REPORT("skipped\n");
+#endif /* !__TBB_EXCEPTIONS */
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_eh_tasks.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_eh_tasks.cpp
new file mode 100644 (file)
index 0000000..18acf3e
--- /dev/null
@@ -0,0 +1,694 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// to avoid usage of #pragma comment
+#define __TBB_NO_IMPLICIT_LINKAGE 1
+
+#define  COUNT_TASK_NODES 1
+#define __TBB_TASK_CPP_DIRECTLY_INCLUDED 1
+#include "../tbb/task.cpp"
+
+#if __TBB_EXCEPTIONS && !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/tick_count.h"
+#include <string>
+
+#define NUM_CHILD_TASKS                 256
+#define NUM_ROOT_TASKS                  32
+#define NUM_ROOTS_IN_GROUP              8
+
+//! Statistics about number of tasks in different states
+class TaskStats {
+    typedef tbb::spin_mutex::scoped_lock lock_t;
+    //! Number of tasks allocated that was ever allocated
+    volatile intptr_t m_Existed;
+    //! Number of tasks executed to the moment
+    volatile intptr_t m_Executed;
+    //! Number of tasks allocated but not yet destroyed to the moment
+    volatile intptr_t m_Existing;
+
+    mutable tbb::spin_mutex  m_Mutex;
+public:
+    //! Assumes that assignment is noncontended for the left-hand operand
+    const TaskStats& operator= ( const TaskStats& rhs ) {
+        if ( this != &rhs ) {
+            lock_t lock(rhs.m_Mutex);
+            m_Existed = rhs.m_Existed;
+            m_Executed = rhs.m_Executed;
+            m_Existing = rhs.m_Existing;
+        }
+        return *this;
+    }
+    intptr_t Existed() const { return m_Existed; }
+    intptr_t Executed() const { return m_Executed; }
+    intptr_t Existing() const { return m_Existing; }
+    void IncExisted() { lock_t lock(m_Mutex); ++m_Existed; ++m_Existing; }
+    void IncExecuted() { lock_t lock(m_Mutex); ++m_Executed; }
+    void DecExisting() { lock_t lock(m_Mutex); --m_Existing; }
+    //! Assumed to be used in uncontended manner only
+    void Reset() { m_Executed = m_Existing = m_Existed = 0; }
+};
+
+TaskStats g_CurStat;
+
+inline intptr_t Existed () { return g_CurStat.Existed(); }
+
+#include "harness_eh.h"
+
+bool g_BoostExecutedCount = true;
+volatile bool g_TaskWasCancelled = false;
+
+inline void ResetGlobals () {
+    ResetEhGlobals();
+    g_BoostExecutedCount = true;
+    g_TaskWasCancelled = false;
+    g_CurStat.Reset();
+}
+
+inline void WaitForException () {
+    while ( !g_ExceptionCaught )
+        __TBB_Yield();
+}
+
+#define ASSERT_TEST_POSTCOND() \
+    ASSERT (g_CurStat.Existed() >= g_CurStat.Executed(), "Total number of tasks is less than executed");  \
+    ASSERT (!g_CurStat.Existing(), "Not all task objects have been destroyed"); \
+    ASSERT (!tbb::task::self().is_cancelled(), "Scheduler's default context has not been cleaned up properly");
+
+
+class SimpleThrowingTask : public tbb::task {
+public:
+    tbb::task* execute () { throw 0; }
+
+    ~SimpleThrowingTask() {
+#if !__TBB_RELAXED_OWNERSHIP
+        ASSERT( tbb::task::self().is_owned_by_current_thread(), NULL );
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+    }
+};
+
+//! Checks if innermost running task information is updated correctly during cancellation processing
+void Test0 () {
+    tbb::task_scheduler_init init (1);
+    tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+    tbb::task_list tl;
+    tl.push_back( *new( r.allocate_child() ) SimpleThrowingTask );
+    tl.push_back( *new( r.allocate_child() ) SimpleThrowingTask );
+    r.set_ref_count( 3 );
+    try {
+        r.spawn_and_wait_for_all( tl );
+    }
+    catch (...) {}
+    r.destroy( r );
+}
+
+class TaskBase : public tbb::task {
+    tbb::task* execute () {
+        tbb::task* t = NULL;
+        try { 
+            t = do_execute();
+        } catch ( ... ) { 
+            g_CurStat.IncExecuted(); 
+            throw;
+        }
+        g_CurStat.IncExecuted();
+        return t;
+    }
+protected:
+    TaskBase ( bool throwException = true ) : m_Throw(throwException) { g_CurStat.IncExisted(); }
+    ~TaskBase () { g_CurStat.DecExisting(); }
+
+    virtual tbb::task* do_execute () = 0;
+
+    bool m_Throw;
+}; // class TaskBase
+
+class LeafTask : public TaskBase
+{
+    tbb::task* do_execute () {
+        Harness::ConcurrencyTracker ct;
+        WaitUntilConcurrencyPeaks();
+        if ( g_BoostExecutedCount )
+            ++g_CurExecuted;
+        if ( m_Throw )
+            ThrowTestException(NUM_CHILD_TASKS/2);
+        if ( !g_ThrowException )
+            __TBB_Yield();
+        return NULL;
+    }
+public:
+    LeafTask ( bool throw_exception = true ) : TaskBase(throw_exception) {}
+};
+
+class SimpleRootTask : public TaskBase {
+    tbb::task* do_execute () {
+        set_ref_count(NUM_CHILD_TASKS + 1);
+        for ( size_t i = 0; i < NUM_CHILD_TASKS; ++i )
+            spawn( *new( allocate_child() ) LeafTask(m_Throw) );
+        wait_for_all();
+        return NULL;
+    }
+public:
+    SimpleRootTask ( bool throw_exception = true ) : TaskBase(throw_exception) {}
+};
+
+//! Default exception behavior test. 
+/** Allocates a root task that spawns a bunch of children, one or several of which throw 
+    a test exception in a worker or master thread (depending on the global setting). **/
+void Test1 () {
+    ResetGlobals();
+    tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+    ASSERT (!g_CurStat.Existing() && !g_CurStat.Existed() && !g_CurStat.Executed(), 
+            "something wrong with the task accounting");
+    r.set_ref_count(NUM_CHILD_TASKS + 1);
+    for ( int i = 0; i < NUM_CHILD_TASKS; ++i )
+        r.spawn( *new( r.allocate_child() ) LeafTask );
+    TRY();
+        r.wait_for_all();
+    CATCH_AND_ASSERT();
+    r.destroy(r);
+    ASSERT_TEST_POSTCOND();
+} // void Test1 ()
+
+//! Default exception behavior test. 
+/** Allocates and spawns root task that runs a bunch of children, one of which throws
+    a test exception in a worker thread. (Similar to Test1, except that the root task 
+    is spawned by the test function, and children are created by the root task instead 
+    of the test function body.) **/
+void Test2 () {
+    ResetGlobals();
+    SimpleRootTask &r = *new( tbb::task::allocate_root() ) SimpleRootTask;
+    ASSERT (g_CurStat.Existing() == 1 && g_CurStat.Existed() == 1 && !g_CurStat.Executed(), 
+            "something wrong with the task accounting");
+    TRY();
+        tbb::task::spawn_root_and_wait(r);
+    CATCH_AND_ASSERT();
+    ASSERT (g_ExceptionCaught, "no exception occurred");
+    ASSERT_TEST_POSTCOND();
+} // void Test2 ()
+
+//! The same as Test2() except the root task has explicit context.
+/** The context is initialized as bound in order to check correctness of its associating 
+    with a root task. **/
+void Test3 () {
+    ResetGlobals();
+    tbb::task_group_context  ctx(tbb::task_group_context::bound);
+    SimpleRootTask &r = *new( tbb::task::allocate_root(ctx) ) SimpleRootTask;
+    ASSERT (g_CurStat.Existing() == 1 && g_CurStat.Existed() == 1 && !g_CurStat.Executed(), 
+            "something wrong with the task accounting");
+    TRY();
+        tbb::task::spawn_root_and_wait(r);
+    CATCH_AND_ASSERT();
+    ASSERT (g_ExceptionCaught, "no exception occurred");
+    ASSERT_TEST_POSTCOND();
+} // void Test2 ()
+
+class RootLauncherTask : public TaskBase {
+    tbb::task_group_context::kind_type m_CtxKind;
+    tbb::task* do_execute () {
+        tbb::task_group_context  ctx (tbb::task_group_context::isolated);
+        SimpleRootTask &r = *new( allocate_root(ctx) ) SimpleRootTask;
+        TRY();
+            spawn_root_and_wait(r);
+            // Give a child of our siblings a chance to throw the test exception
+            WaitForException();
+        CATCH();
+        ASSERT (!g_UnknownException, "unknown exception was caught");
+        return NULL;
+    }
+public:
+    RootLauncherTask ( tbb::task_group_context::kind_type ctx_kind = tbb::task_group_context::isolated ) : m_CtxKind(ctx_kind) {}
+};
+
+/** Allocates and spawns a bunch of roots, which allocate and spawn new root with 
+    isolated context, which at last spawns a bunch of children each, one of which 
+    throws a test exception in a worker thread. **/
+void Test4 () {
+    ResetGlobals();
+    tbb::task_list  tl;
+    for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i )
+        tl.push_back( *new( tbb::task::allocate_root() ) RootLauncherTask );
+    TRY();
+        tbb::task::spawn_root_and_wait(tl);
+    CATCH_AND_ASSERT();
+    ASSERT (!exceptionCaught, "exception in this scope is unexpected");
+    intptr_t  num_tasks_expected = NUM_ROOT_TASKS * (NUM_CHILD_TASKS + 2);
+    ASSERT (g_CurStat.Existed() == num_tasks_expected, "Wrong total number of tasks");
+    if ( g_SolitaryException )
+        ASSERT (g_CurStat.Executed() >= num_tasks_expected - NUM_CHILD_TASKS, "Unexpected number of executed tasks");
+    ASSERT_TEST_POSTCOND();
+} // void Test4 ()
+
+class RootsGroupLauncherTask : public TaskBase {
+    tbb::task* do_execute () {
+        tbb::task_group_context  ctx (tbb::task_group_context::isolated);
+        tbb::task_list  tl;
+        for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i )
+            tl.push_back( *new( allocate_root(ctx) ) SimpleRootTask );
+        TRY();
+            spawn_root_and_wait(tl);
+            // Give worker a chance to throw exception
+            WaitForException();
+        CATCH_AND_ASSERT();
+        return NULL;
+    }
+};
+
+/** Allocates and spawns a bunch of roots, which allocate and spawn groups of roots 
+    with an isolated context shared by all group members, which at last spawn a bunch 
+    of children each, one of which throws a test exception in a worker thread. **/
+void Test5 () {
+    ResetGlobals();
+    tbb::task_list  tl;
+    for ( size_t i = 0; i < NUM_ROOTS_IN_GROUP; ++i )
+        tl.push_back( *new( tbb::task::allocate_root() ) RootsGroupLauncherTask );
+    TRY();
+        tbb::task::spawn_root_and_wait(tl);
+    CATCH_AND_ASSERT();
+    ASSERT (!exceptionCaught, "unexpected exception intercepted");
+    if ( g_SolitaryException )  {
+        intptr_t  num_tasks_expected = NUM_ROOTS_IN_GROUP * (1 + NUM_ROOT_TASKS * (1 + NUM_CHILD_TASKS));
+        intptr_t  min_num_tasks_executed = num_tasks_expected - NUM_ROOT_TASKS * (NUM_CHILD_TASKS + 1);
+        ASSERT (g_CurStat.Executed() >= min_num_tasks_executed, "Too few tasks executed");
+    }
+    ASSERT_TEST_POSTCOND();
+} // void Test5 ()
+
+class ThrowingRootLauncherTask : public TaskBase {
+    tbb::task* do_execute () {
+        tbb::task_group_context  ctx (tbb::task_group_context::bound);
+        SimpleRootTask &r = *new( allocate_root(ctx) ) SimpleRootTask(false);
+        TRY();
+            spawn_root_and_wait(r);
+        CATCH();
+        ASSERT (!exceptionCaught, "unexpected exception intercepted");
+        ThrowTestException(NUM_CHILD_TASKS);
+        g_TaskWasCancelled |= is_cancelled();
+        return NULL;
+    }
+};
+
+class BoundHierarchyLauncherTask : public TaskBase {
+    bool m_Recover;
+
+    void alloc_roots ( tbb::task_group_context& ctx, tbb::task_list& tl ) {
+        for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i )
+            tl.push_back( *new( allocate_root(ctx) ) ThrowingRootLauncherTask );
+    }
+
+    tbb::task* do_execute () {
+        tbb::task_group_context  ctx (tbb::task_group_context::isolated);
+        tbb::task_list tl;
+        alloc_roots(ctx, tl);
+        TRY();
+            spawn_root_and_wait(tl);
+        CATCH_AND_ASSERT();
+        ASSERT (exceptionCaught, "no exception occurred");
+        ASSERT (!tl.empty(), "task list was cleared somehow");
+        if ( g_SolitaryException )
+            ASSERT (g_TaskWasCancelled, "No tasks were cancelled despite of exception");
+        if ( m_Recover ) {
+            // Test task_group_context::unbind and task_group_context::reset methods
+            g_ThrowException = false;
+            exceptionCaught = false;
+            tl.clear();
+            alloc_roots(ctx, tl);
+            ctx.reset();
+            try {
+                spawn_root_and_wait(tl);
+            }
+            catch (...) {
+                exceptionCaught = true;
+            }
+            ASSERT (!exceptionCaught, "unexpected exception occurred");
+        }
+        return NULL;
+    }
+public:
+    BoundHierarchyLauncherTask ( bool recover = false ) : m_Recover(recover) {}
+
+}; // class BoundHierarchyLauncherTask
+
+//! Test for bound contexts forming 2 level tree. Exception is thrown on the 1st (root) level.
+/** Allocates and spawns a root that spawns a bunch of 2nd level roots sharing 
+    the same isolated context, each of which in their turn spawns a single 3rd level 
+    root with  the bound context, and these 3rd level roots spawn bunches of leaves 
+    in the end. Leaves do not generate exceptions. The test exception is generated 
+    by one of the 2nd level roots. **/
+void Test6 () {
+    ResetGlobals();
+    BoundHierarchyLauncherTask &r = *new( tbb::task::allocate_root() ) BoundHierarchyLauncherTask;
+    TRY();
+        tbb::task::spawn_root_and_wait(r);
+    CATCH_AND_ASSERT();
+    ASSERT (!exceptionCaught, "unexpected exception intercepted");
+    // After the first of the branches (ThrowingRootLauncherTask) completes, 
+    // the rest of the task tree may be collapsed before having a chance to execute leaves.
+    // A number of branches running concurrently with the first one will be able to spawn leaves though.
+    /// \todo: If additional checkpoints are added to scheduler the following assertion must weaken
+    intptr_t  num_tasks_expected = 1 + NUM_ROOT_TASKS * (2 + NUM_CHILD_TASKS);
+    intptr_t  min_num_tasks_created = 1 + g_NumThreads * 2 + NUM_CHILD_TASKS;
+    // 2 stands for BoundHierarchyLauncherTask and SimpleRootTask
+    // 1 corresponds to BoundHierarchyLauncherTask 
+    intptr_t  min_num_tasks_executed = 2 + 1 + NUM_CHILD_TASKS;
+    ASSERT (g_CurStat.Existed() <= num_tasks_expected, "Number of expected tasks is calculated incorrectly");
+    ASSERT (g_CurStat.Existed() >= min_num_tasks_created, "Too few tasks created");
+    ASSERT (g_CurStat.Executed() >= min_num_tasks_executed, "Too few tasks executed");
+    ASSERT_TEST_POSTCOND();
+} // void Test6 ()
+
+//! Tests task_group_context::unbind and task_group_context::reset methods.
+/** Allocates and spawns a root that spawns a bunch of 2nd level roots sharing 
+    the same isolated context, each of which in their turn spawns a single 3rd level 
+    root with  the bound context, and these 3rd level roots spawn bunches of leaves 
+    in the end. Leaves do not generate exceptions. The test exception is generated 
+    by one of the 2nd level roots. **/
+void Test7 () {
+    ResetGlobals();
+    BoundHierarchyLauncherTask &r = *new( tbb::task::allocate_root() ) BoundHierarchyLauncherTask;
+    TRY();
+        tbb::task::spawn_root_and_wait(r);
+    CATCH_AND_ASSERT();
+    ASSERT (!exceptionCaught, "unexpected exception intercepted");
+    ASSERT_TEST_POSTCOND();
+} // void Test6 ()
+
+class BoundHierarchyLauncherTask2 : public TaskBase {
+    tbb::task* do_execute () {
+        tbb::task_group_context  ctx;
+        tbb::task_list  tl;
+        for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i )
+            tl.push_back( *new( allocate_root(ctx) ) RootLauncherTask(tbb::task_group_context::bound) );
+        TRY();
+            spawn_root_and_wait(tl);
+        CATCH_AND_ASSERT();
+        // Exception must be intercepted by RootLauncherTask
+        ASSERT (!exceptionCaught, "no exception occurred");
+        return NULL;
+    }
+}; // class BoundHierarchyLauncherTask2
+
+//! Test for bound contexts forming 2 level tree. Exception is thrown in the 2nd (outer) level.
+/** Allocates and spawns a root that spawns a bunch of 2nd level roots sharing 
+    the same isolated context, each of which in their turn spawns a single 3rd level 
+    root with  the bound context, and these 3rd level roots spawn bunches of leaves 
+    in the end. The test exception is generated by one of the leaves. **/
+void Test8 () {
+    ResetGlobals();
+    BoundHierarchyLauncherTask2 &r = *new( tbb::task::allocate_root() ) BoundHierarchyLauncherTask2;
+    TRY();
+        tbb::task::spawn_root_and_wait(r);
+    CATCH_AND_ASSERT();
+    ASSERT (!exceptionCaught, "unexpected exception intercepted");
+    if ( g_SolitaryException )  {
+        intptr_t  num_tasks_expected = 1 + NUM_ROOT_TASKS * (2 + NUM_CHILD_TASKS);
+        intptr_t  min_num_tasks_created = 1 + g_NumThreads * (2 + NUM_CHILD_TASKS);
+        intptr_t  min_num_tasks_executed = num_tasks_expected - (NUM_CHILD_TASKS + 1);
+        ASSERT (g_CurStat.Existed() <= num_tasks_expected, "Number of expected tasks is calculated incorrectly");
+        ASSERT (g_CurStat.Existed() >= min_num_tasks_created, "Too few tasks created");
+        ASSERT (g_CurStat.Executed() >= min_num_tasks_executed, "Too few tasks executed");
+    }
+    ASSERT_TEST_POSTCOND();
+} // void Test8 ()
+
+template<class T>
+class CtxLauncherTask : public tbb::task {
+    tbb::task_group_context &m_Ctx;
+
+    tbb::task* execute () {
+        tbb::task::spawn_root_and_wait( *new( tbb::task::allocate_root(m_Ctx) ) T );
+        return NULL;
+    }
+public:
+    CtxLauncherTask ( tbb::task_group_context& ctx ) : m_Ctx(ctx) {}
+};
+
+//! Test for cancelling a task hierarchy from outside (from a task running in parallel with it).
+void Test9 () {
+    ResetGlobals();
+    g_ThrowException = false;
+    tbb::task_group_context  ctx;
+    tbb::task_list  tl;
+    tl.push_back( *new( tbb::task::allocate_root() ) CtxLauncherTask<SimpleRootTask>(ctx) );
+    tl.push_back( *new( tbb::task::allocate_root() ) CancellatorTask(ctx, NUM_CHILD_TASKS / 4) );
+    TRY();
+        tbb::task::spawn_root_and_wait(tl);
+    CATCH();
+    ASSERT (!exceptionCaught, "Cancelling tasks should not cause any exceptions");
+    ASSERT (g_CurStat.Executed() <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks were executed after cancellation");
+    ASSERT_TEST_POSTCOND();
+} // void Test9 ()
+
+template<typename T>
+void ThrowMovableException ( intptr_t threshold, const T& data ) {
+    if ( IsThrowingThread() )
+        return; 
+    if ( !g_SolitaryException ) {
+        g_ExceptionThrown = 1;
+        REMARK ("About to throw one of multiple movable_exceptions... :");
+        throw tbb::movable_exception<T>(data);
+    }
+    while ( g_CurStat.Existed() < threshold )
+        __TBB_Yield();
+    if ( __TBB_CompareAndSwapW(&g_ExceptionThrown, 1, 0) == 0 ) {
+        REMARK ("About to throw solitary movable_exception... :");
+        throw tbb::movable_exception<T>(data);
+    }
+}
+
+const int g_IntExceptionData = -375;
+const std::string g_StringExceptionData = "My test string";
+
+// Exception data class implementing minimal requirements of tbb::movable_exception 
+class ExceptionData {
+    const ExceptionData& operator = ( const ExceptionData& src );
+    explicit ExceptionData ( int n ) : m_Int(n), m_String(g_StringExceptionData) {}
+public:
+    ExceptionData ( const ExceptionData& src ) : m_Int(src.m_Int), m_String(src.m_String) {}
+    ~ExceptionData () {}
+
+    int m_Int;
+    std::string m_String;
+
+    // Simple way to provide an instance when all initializing constructors are private
+    // and to avoid memory reclamation problems.
+    static ExceptionData s_data;
+};
+
+ExceptionData ExceptionData::s_data(g_IntExceptionData);
+
+typedef tbb::movable_exception<int> SolitaryMovableException;
+typedef tbb::movable_exception<ExceptionData> MultipleMovableException;
+
+class LeafTaskWithMovableExceptions : public TaskBase {
+    bool m_IntAsData;
+
+    tbb::task* do_execute () {
+        Harness::ConcurrencyTracker ct;
+        WaitUntilConcurrencyPeaks();
+        if ( g_SolitaryException )
+            ThrowMovableException<int>(NUM_CHILD_TASKS/2, g_IntExceptionData);
+        else
+            ThrowMovableException<ExceptionData>(NUM_CHILD_TASKS/2, ExceptionData::s_data);
+        return NULL;
+    }
+};
+
+void CheckException ( tbb::tbb_exception& e ) {
+    ASSERT (strcmp(e.name(), (g_SolitaryException ? typeid(SolitaryMovableException) 
+                                                   : typeid(MultipleMovableException)).name() ) == 0, 
+                                                   "Unexpected original exception name");
+    ASSERT (strcmp(e.what(), "tbb::movable_exception") == 0, "Unexpected original exception info ");
+    if ( g_SolitaryException ) {
+        SolitaryMovableException& me = dynamic_cast<SolitaryMovableException&>(e);
+        ASSERT (me.data() == g_IntExceptionData, "Unexpected solitary movable_exception data");
+    }
+    else {
+        MultipleMovableException& me = dynamic_cast<MultipleMovableException&>(e);
+        ASSERT (me.data().m_Int == g_IntExceptionData, "Unexpected multiple movable_exception int data");
+        ASSERT (me.data().m_String == g_StringExceptionData, "Unexpected multiple movable_exception string data");
+    }
+}
+
+void CheckException () {
+    try {
+        throw;
+    } catch ( tbb::tbb_exception& e ) {
+        CheckException(e);
+    }
+    catch ( ... ) {
+    }
+}
+
+//! Test for movable_exception behavior, and external exception recording.
+/** Allocates a root task that spawns a bunch of children, one or several of which throw 
+    a movable exception in a worker or master thread (depending on the global settings).
+    The test also checks the correctness of multiple rethrowing of the pending exception. **/
+void Test10 () {
+    ResetGlobals();
+    tbb::task_group_context ctx;
+    tbb::empty_task *r = new( tbb::task::allocate_root() ) tbb::empty_task;
+    ASSERT (!g_CurStat.Existing() && !g_CurStat.Existed() && !g_CurStat.Executed(), 
+            "something wrong with the task accounting");
+    r->set_ref_count(NUM_CHILD_TASKS + 1);
+    for ( int i = 0; i < NUM_CHILD_TASKS; ++i )
+        r->spawn( *new( r->allocate_child() ) LeafTaskWithMovableExceptions );
+    TRY()
+        r->wait_for_all();
+    } catch ( ... ) {
+        ASSERT (!ctx.is_group_execution_cancelled(), "");
+        CheckException();
+        try {
+            throw;
+        } catch ( tbb::tbb_exception& e ) {
+            CheckException(e);
+            g_ExceptionCaught = exceptionCaught = true;
+        }
+        catch ( ... ) {
+            g_ExceptionCaught = true;
+            g_UnknownException = unknownException = true;
+        }
+        ctx.register_pending_exception();
+        ASSERT (ctx.is_group_execution_cancelled(), "After exception registration the context must be in the cancelled state");
+    }
+    r->destroy(*r);
+    ASSERT_EXCEPTION();
+    ASSERT_TEST_POSTCOND();
+
+    r = new( tbb::task::allocate_root(ctx) ) tbb::empty_task;
+    r->set_ref_count(1);
+    g_ExceptionCaught = g_UnknownException = false;
+    try {
+        r->wait_for_all();
+    } catch ( tbb::tbb_exception& e ) {
+        CheckException(e);
+        g_ExceptionCaught = true;
+    }
+    catch ( ... ) {
+        g_ExceptionCaught = true;
+        g_UnknownException = true;
+    }
+    ASSERT (g_ExceptionCaught, "no exception occurred");
+    ASSERT (!g_UnknownException, "unknown exception was caught");
+    r->destroy(*r);
+} // void Test10 ()
+
+
+const int MaxNestingDepth = 256;
+
+class CtxDestroyerTask : public tbb::task {
+    int m_nestingLevel;
+
+    tbb::task* execute () {
+        ASSERT ( m_nestingLevel >= 0 && m_nestingLevel < MaxNestingDepth, "Wrong nesting level. The test is broken" );
+        tbb::task_group_context  ctx;
+        tbb::task *t = new( tbb::task::allocate_root(ctx) ) tbb::empty_task;
+        int level = ++m_nestingLevel;
+        if ( level < MaxNestingDepth ) {
+            execute();
+        }
+        else {
+            CancellatorTask::WaitUntilReady();
+            ++g_CurExecuted;
+        }
+        if ( ctx.is_group_execution_cancelled() )
+            ++s_numCancelled;
+        t->destroy(*t);
+        return NULL;
+    }
+public:
+    CtxDestroyerTask () : m_nestingLevel(0) { s_numCancelled = 0; }
+
+    static int s_numCancelled;
+};
+
+int CtxDestroyerTask::s_numCancelled = 0;
+
+//! Test for data race between cancellation propagation and context destruction.
+/** If the data race ever occurs, an assertion inside TBB will be triggered. **/
+void TestCtxDestruction () {
+    for ( size_t i = 0; i < 10; ++i ) {
+        tbb::task_group_context  ctx;
+        tbb::task_list  tl;
+        ResetGlobals();
+        g_BoostExecutedCount = false;
+        g_ThrowException = false;
+        CancellatorTask::Reset();
+        // CtxLauncherTask just runs some work to cancel
+        //tl.push_back( *new( tbb::task::allocate_root() ) CtxLauncherTask<SimpleRootTask>(ctx) );
+        tl.push_back( *new( tbb::task::allocate_root() ) CtxLauncherTask<CtxDestroyerTask>(ctx) );
+        tl.push_back( *new( tbb::task::allocate_root() ) CancellatorTask(ctx, 1) );
+        tbb::task::spawn_root_and_wait(tl);
+        ASSERT( g_CurExecuted == 1, "Test is broken" );
+        ASSERT( CtxDestroyerTask::s_numCancelled <= MaxNestingDepth, "Test is broken" );
+    }
+} // void TestCtxDestruction()
+
+void RunTests ()
+{
+    REMARK ("Number of threads %d", g_NumThreads);
+    tbb::task_scheduler_init init (g_NumThreads);
+    g_Master = Harness::CurrentTid();
+    Test1();
+    Test2();
+    Test3();
+    Test4();
+    Test5();
+    Test6();
+    Test7();
+    Test8();
+    Test9();
+    Test10();
+    TestCtxDestruction();
+}
+#endif /* __TBB_EXCEPTIONS */
+
+__TBB_TEST_EXPORT
+int main(int argc, char* argv[]) {
+    ParseCommandLine( argc, argv );
+    MinThread = min(NUM_ROOTS_IN_GROUP, max(2, MinThread));
+    MaxThread = min(NUM_ROOTS_IN_GROUP, max(MinThread, MaxThread));
+    ASSERT (NUM_ROOTS_IN_GROUP < NUM_ROOT_TASKS, "Fix defines");
+#if __TBB_EXCEPTIONS
+    // Test0 always runs on one thread
+    Test0();
+    for ( g_NumThreads = MinThread; g_NumThreads <= MaxThread; ++g_NumThreads ) {
+        for ( size_t j = 0; j < 2; ++j ) {
+            g_SolitaryException = (j & 2) == 1;
+            RunTests();
+        }
+    }
+    REPORT("done\n");
+#else
+    REPORT("skipped\n");
+#endif /* __TBB_EXCEPTIONS */
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_enumerable_thread_specific.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_enumerable_thread_specific.cpp
new file mode 100644 (file)
index 0000000..f0b69c4
--- /dev/null
@@ -0,0 +1,951 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/enumerable_thread_specific.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/parallel_reduce.h"
+#include "tbb/blocked_range.h"
+#include "tbb/tick_count.h"
+#include "tbb/tbb_allocator.h"
+#include "tbb/tbb_thread.h"
+
+#include <cstring>
+#include <vector>
+#include <deque>
+#include <list>
+#include <map>
+#include <utility>
+
+#include "harness_assert.h"
+#include "harness.h"
+
+#if __TBB_GCC_WARNING_SUPPRESSION_ENABLED
+#pragma GCC diagnostic ignored "-Wuninitialized"
+#endif
+
+static tbb::atomic<int> construction_counter;
+static tbb::atomic<int> destruction_counter;
+
+const int REPETITIONS = 10;
+const int N = 100000;
+const int VALID_NUMBER_OF_KEYS = 100;
+const double EXPECTED_SUM = (REPETITIONS + 1) * N;
+
+//
+// A minimal class
+// Define: default and copy constructor, and allow implicit operator&
+// Hide: operator=
+//
+
+class minimal: NoAssign {
+private:
+    int my_value;
+public:
+    minimal(int val=0) : my_value(val) { ++construction_counter; }
+    minimal( const minimal &m ) : my_value(m.my_value) { ++construction_counter; }
+    ~minimal() { ++destruction_counter; }
+    void set_value( const int i ) { my_value = i; }
+    int value( ) const { return my_value; }
+};
+
+//
+// A helper class that simplifies writing the tests since minimal does not 
+// define = or + operators.
+//
+
+template< typename T >
+struct test_helper {
+   static inline void init(T &e) { e = static_cast<T>(0); }  
+   static inline void sum(T &e, const int addend ) { e += static_cast<T>(addend); }
+   static inline void sum(T &e, const double addend ) { e += static_cast<T>(addend); }
+   static inline void set(T &e, const int value ) { e = static_cast<T>(value); }
+   static inline double get(const T &e ) { return static_cast<double>(e); }
+};
+
+template< >
+struct test_helper<minimal> {
+   static inline void init(minimal &sum) { sum.set_value( 0 ); }  
+   static inline void sum(minimal &sum, const int addend ) { sum.set_value( sum.value() + addend); }
+   static inline void sum(minimal &sum, const double addend ) { sum.set_value( sum.value() + static_cast<int>(addend)); }
+   static inline void sum(minimal &sum, const minimal &addend ) { sum.set_value( sum.value() + addend.value()); }
+   static inline void set(minimal &v, const int value ) { v.set_value( static_cast<int>(value) ); }
+   static inline double get(const minimal &sum ) { return static_cast<double>(sum.value()); }
+};
+
+//// functors for initialization and combine
+
+// Addition
+template <typename T>
+struct FunctorAddFinit {
+    T operator()() { return 0; }
+};
+
+template <>
+struct FunctorAddFinit<minimal> {
+    minimal operator()() { return minimal(0); }
+};
+
+template <typename T>
+struct FunctorAddFinit7 {
+    T operator()() { return 7; }
+};
+
+template <>
+struct FunctorAddFinit7<minimal> {
+    minimal operator()() { return minimal(7); }
+};
+
+template <typename T>
+struct FunctorAddCombine {
+    T operator()(T left, T right ) const {
+        return left + right;
+    }
+};
+
+template <>
+struct FunctorAddCombine<minimal> {
+    minimal operator()(minimal left, minimal right ) {
+        return minimal(left.value() + right.value()); 
+    }
+};
+
+template <typename T>
+struct FunctorAddCombineRef {
+    T operator()(const T& left, const T& right ) const {
+        return left + right;
+    }
+};
+
+template <>
+struct FunctorAddCombineRef<minimal> {
+    minimal operator()(const minimal& left, const minimal& right ) const {
+        return minimal(left.value() + right.value());
+    }
+};
+
+template <typename T>
+T my_finit( ) { return 0; }
+
+template <typename T>
+T my_combine( T left, T right) { return left + right; }
+
+template <typename T>
+T my_combine_ref( const T &left, const T &right) { return left + right; }
+
+template <>
+minimal my_finit( ) { return minimal(0); }
+
+template <>
+minimal my_combine( minimal left, minimal right) { return minimal(left.value() + right.value()); }
+
+template <>
+minimal my_combine_ref( const minimal &left, const minimal &right) { return minimal(left.value() + right.value()); }
+
+template <typename T>
+class combine_one_helper {
+public:
+    combine_one_helper(T& _result) : my_result(_result) {}
+    void operator()(const T& new_bit) { test_helper<T>::sum(my_result, new_bit); }
+    combine_one_helper& operator=(const combine_one_helper& other) { 
+        test_helper<T>::set(my_result, test_helper<T>::get(other)); 
+        return *this; 
+    }
+private:
+    T& my_result;
+};
+
+
+
+//// end functors
+
+template< typename T >
+void run_serial_scalar_tests(const char *test_name) {
+    tbb::tick_count t0;
+    T sum;
+    test_helper<T>::init(sum);
+
+    if (Verbose) REPORT("Testing serial %s... ", test_name);  
+    for (int t = -1; t < REPETITIONS; ++t) {
+        if (Verbose && t == 0) t0 = tbb::tick_count::now(); 
+        for (int i = 0; i < N; ++i) {
+            test_helper<T>::sum(sum,1); 
+        }
+    }
+    double result_value = test_helper<T>::get(sum);
+    ASSERT( EXPECTED_SUM == result_value, NULL);
+    if (Verbose)
+        REPORT("done\nserial %s, 0, %g, %g\n", test_name, result_value, ( tbb::tick_count::now() - t0).seconds());
+}
+
+
+template <typename T>
+class parallel_scalar_body: NoAssign {
+    
+    tbb::enumerable_thread_specific<T> &sums;
+public:
+
+    parallel_scalar_body ( tbb::enumerable_thread_specific<T> &_sums ) : sums(_sums) { }
+
+    void operator()( const tbb::blocked_range<int> &r ) const {
+        for (int i = r.begin(); i != r.end(); ++i) 
+            test_helper<T>::sum( sums.local(), 1 );
+    }
+   
+};
+
+template< typename T >
+void run_parallel_scalar_tests(const char *test_name) {
+
+    static tbb::enumerable_thread_specific<T> static_sums(static_cast<T>(0));
+
+    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
+    T exemplar;
+    test_helper<T>::init(exemplar);
+    T exemplar23;
+    test_helper<T>::set(exemplar23,23);
+
+    for (int p = MinThread; p <= MaxThread; ++p) { 
+
+
+        if (p == 0) continue;
+
+        if (Verbose) REPORT("Testing parallel %s on %d thread(s)... ", test_name, p); 
+        init.initialize(p);
+
+        tbb::tick_count t0;
+
+        T iterator_sum;
+        test_helper<T>::init(iterator_sum);
+
+        T finit_ets_sum;
+        test_helper<T>::init(finit_ets_sum);
+
+        T const_iterator_sum; 
+        test_helper<T>::init(const_iterator_sum);
+
+        T range_sum;
+        test_helper<T>::init(range_sum);
+
+        T const_range_sum;
+        test_helper<T>::init(const_range_sum);
+
+        T cconst_sum;
+        test_helper<T>::init(cconst_sum);
+
+        T assign_sum;
+        test_helper<T>::init(assign_sum);
+
+        T cassgn_sum;
+        test_helper<T>::init(cassgn_sum);
+        T non_cassgn_sum;
+        test_helper<T>::init(non_cassgn_sum);
+
+        T combine_sum;
+        test_helper<T>::init(combine_sum);
+
+        T combine_ref_sum;
+        test_helper<T>::init(combine_ref_sum);
+
+        T combine_one_sum;
+        test_helper<T>::init(combine_one_sum);
+
+        T static_sum;
+        test_helper<T>::init(static_sum);
+
+        for (int t = -1; t < REPETITIONS; ++t) {
+            if (Verbose && t == 0) t0 = tbb::tick_count::now(); 
+
+            static_sums.clear();
+
+            tbb::enumerable_thread_specific<T> sums(exemplar);
+            FunctorAddFinit<T> my_finit;
+            tbb::enumerable_thread_specific<T> finit_ets(my_finit);
+
+            ASSERT( sums.empty(), NULL);
+            tbb::parallel_for( tbb::blocked_range<int>( 0, N, 10000 ), parallel_scalar_body<T>( sums ) );
+            ASSERT( !sums.empty(), NULL);
+
+            ASSERT( finit_ets.empty(), NULL);
+            tbb::parallel_for( tbb::blocked_range<int>( 0, N, 10000 ), parallel_scalar_body<T>( finit_ets ) );
+            ASSERT( !finit_ets.empty(), NULL);
+
+            ASSERT(static_sums.empty(), NULL);
+            tbb::parallel_for( tbb::blocked_range<int>( 0, N, 10000 ), parallel_scalar_body<T>( static_sums ) );
+            ASSERT( !static_sums.empty(), NULL);
+
+
+            // Use combine
+            test_helper<T>::sum(combine_sum, sums.combine(my_combine<T>));
+            test_helper<T>::sum(combine_ref_sum, sums.combine(my_combine_ref<T>));
+            test_helper<T>::sum(static_sum, static_sums.combine(my_combine<T>));
+
+            combine_one_helper<T> my_helper(combine_one_sum);
+            sums.combine_each(my_helper);
+
+            // use iterator
+            typename tbb::enumerable_thread_specific<T>::size_type size = 0;
+            for ( typename tbb::enumerable_thread_specific<T>::iterator i = sums.begin(); i != sums.end(); ++i ) {
+                 ++size;
+                 test_helper<T>::sum(iterator_sum, *i);
+            }
+            ASSERT( sums.size() == size, NULL);
+
+            // use const_iterator
+            for ( typename tbb::enumerable_thread_specific<T>::const_iterator i = sums.begin(); i != sums.end(); ++i ) {
+                 test_helper<T>::sum(const_iterator_sum, *i);
+            }
+           
+            // use range_type
+            typename tbb::enumerable_thread_specific<T>::range_type r = sums.range();  
+            for ( typename tbb::enumerable_thread_specific<T>::range_type::const_iterator i = r.begin(); i != r.end(); ++i ) {
+                 test_helper<T>::sum(range_sum, *i);
+            }
+           
+            // use const_range_type
+            typename tbb::enumerable_thread_specific<T>::const_range_type cr = sums.range();  
+            for ( typename tbb::enumerable_thread_specific<T>::const_range_type::iterator i = cr.begin(); i != cr.end(); ++i ) {
+                 test_helper<T>::sum(const_range_sum, *i);
+            }
+
+            // test copy constructor, with TLS-cached locals
+
+            typedef typename tbb::enumerable_thread_specific<T, tbb::cache_aligned_allocator<T>, tbb::ets_key_per_instance> cached_ets_type;
+
+            cached_ets_type cconst(sums); 
+            /// tbb::enumerable_thread_specific<T> cconst(sums);
+
+            for ( typename cached_ets_type::const_iterator i = cconst.begin(); i != cconst.end(); ++i ) {
+                 test_helper<T>::sum(cconst_sum, *i);
+            }
+           
+            // test assignment
+            tbb::enumerable_thread_specific<T> assigned;
+            assigned = sums;
+
+            for ( typename tbb::enumerable_thread_specific<T>::const_iterator i = assigned.begin(); i != assigned.end(); ++i ) {
+                 test_helper<T>::sum(assign_sum, *i);
+            }
+
+            // test assign to and from cached locals
+            cached_ets_type cassgn;
+            cassgn = sums;
+            for ( typename cached_ets_type::const_iterator i = cassgn.begin(); i != cassgn.end(); ++i ) {
+                 test_helper<T>::sum(cassgn_sum, *i);
+            }
+
+            tbb::enumerable_thread_specific<T> non_cassgn;
+            non_cassgn = cassgn;
+            for ( typename tbb::enumerable_thread_specific<T>::const_iterator i = non_cassgn.begin(); i != non_cassgn.end(); ++i ) {
+                 test_helper<T>::sum(non_cassgn_sum, *i);
+            }
+
+            // test finit-initialized ets
+            for(typename tbb::enumerable_thread_specific<T>::const_iterator i = finit_ets.begin(); i != finit_ets.end(); ++i) {
+                test_helper<T>::sum(finit_ets_sum, *i);
+            }
+
+        }
+
+        ASSERT( EXPECTED_SUM == test_helper<T>::get(iterator_sum), NULL);
+        ASSERT( EXPECTED_SUM == test_helper<T>::get(const_iterator_sum), NULL);
+        ASSERT( EXPECTED_SUM == test_helper<T>::get(range_sum), NULL);
+        ASSERT( EXPECTED_SUM == test_helper<T>::get(const_range_sum), NULL);
+
+        ASSERT( EXPECTED_SUM == test_helper<T>::get(combine_sum), NULL);
+        ASSERT( EXPECTED_SUM == test_helper<T>::get(combine_ref_sum), NULL);
+        ASSERT( EXPECTED_SUM == test_helper<T>::get(cconst_sum), NULL);
+        ASSERT( EXPECTED_SUM == test_helper<T>::get(assign_sum), NULL);
+        ASSERT( EXPECTED_SUM == test_helper<T>::get(cassgn_sum), NULL);
+        ASSERT( EXPECTED_SUM == test_helper<T>::get(non_cassgn_sum), NULL);
+        ASSERT( EXPECTED_SUM == test_helper<T>::get(finit_ets_sum), NULL);
+        ASSERT( EXPECTED_SUM == test_helper<T>::get(static_sum), NULL);
+
+        if (Verbose)
+            REPORT("done\nparallel %s, %d, %g, %g\n", test_name, p, test_helper<T>::get(iterator_sum), 
+                                                      ( tbb::tick_count::now() - t0).seconds());
+        init.terminate();
+    }
+}
+
+
+template <typename T>
+class parallel_vector_for_body: NoAssign {
+    
+    tbb::enumerable_thread_specific< std::vector<T, tbb::tbb_allocator<T> > > &locals;
+public:
+
+    parallel_vector_for_body ( tbb::enumerable_thread_specific< std::vector<T, tbb::tbb_allocator<T> > > &_locals ) : locals(_locals) { }
+
+    void operator()( const tbb::blocked_range<int> &r ) const {
+        T one;
+        test_helper<T>::set(one, 1);
+
+        for (int i = r.begin(); i < r.end(); ++i) {
+            locals.local().push_back( one );
+        }
+    }
+   
+};
+
+template <typename R, typename T>
+struct parallel_vector_reduce_body {
+
+    T sum;    
+    size_t count;    
+
+    parallel_vector_reduce_body ( ) : count(0) { test_helper<T>::init(sum); }
+    parallel_vector_reduce_body ( parallel_vector_reduce_body<R, T> &, tbb::split ) : count(0) {  test_helper<T>::init(sum); }
+
+    void operator()( const R &r ) {
+        for (typename R::iterator ri = r.begin(); ri != r.end(); ++ri) {
+            const std::vector< T, tbb::tbb_allocator<T>  > &v = *ri; 
+            ++count;
+            for (typename std::vector<T, tbb::tbb_allocator<T> >::const_iterator vi = v.begin(); vi != v.end(); ++vi) {
+                test_helper<T>::sum(sum, *vi);
+            }
+        }
+    }
+
+    void join( const parallel_vector_reduce_body &b ) {
+        test_helper<T>::sum(sum,b.sum);
+        count += b.count;
+    }
+   
+};
+
+template< typename T >
+void run_parallel_vector_tests(const char *test_name) {
+    tbb::tick_count t0;
+    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
+    typedef std::vector<T, tbb::tbb_allocator<T> > container_type;
+
+    for (int p = MinThread; p <= MaxThread; ++p) { 
+
+        if (p == 0) continue;
+        if (Verbose) REPORT("Testing parallel %s on %d thread(s)... ", test_name, p);
+        init.initialize(p);
+
+        T sum;
+        test_helper<T>::init(sum);
+
+        for (int t = -1; t < REPETITIONS; ++t) {
+            if (Verbose && t == 0) t0 = tbb::tick_count::now(); 
+            typedef typename tbb::enumerable_thread_specific< container_type > ets_type;
+            ets_type vs;
+
+            ASSERT( vs.empty(), NULL);
+            tbb::parallel_for ( tbb::blocked_range<int> (0, N, 10000), parallel_vector_for_body<T>( vs ) );
+            ASSERT( !vs.empty(), NULL);
+
+            // copy construct
+            ets_type vs2(vs); // this causes an assertion failure, related to allocators...
+
+            // assign
+            ets_type vs3;
+            vs3 = vs;
+
+            parallel_vector_reduce_body< typename tbb::enumerable_thread_specific< std::vector< T, tbb::tbb_allocator<T>  > >::const_range_type, T > pvrb;
+            tbb::parallel_reduce ( vs.range(1), pvrb );
+
+            test_helper<T>::sum(sum, pvrb.sum);
+
+            ASSERT( vs.size() == pvrb.count, NULL);
+
+            tbb::flattened2d<ets_type> fvs = flatten2d(vs);
+            size_t ccount = fvs.size();
+            size_t elem_cnt = 0;
+            for(typename tbb::flattened2d<ets_type>::const_iterator i = fvs.begin(); i != fvs.end(); ++i) {
+                ++elem_cnt;
+            };
+            ASSERT(ccount == elem_cnt, NULL);
+
+            elem_cnt = 0;
+            for(typename tbb::flattened2d<ets_type>::iterator i = fvs.begin(); i != fvs.end(); ++i) {
+                ++elem_cnt;
+            };
+            ASSERT(ccount == elem_cnt, NULL);
+        }
+
+        double result_value = test_helper<T>::get(sum);
+        ASSERT( EXPECTED_SUM == result_value, NULL);
+        if (Verbose)
+            REPORT("done\nparallel %s, %d, %g, %g\n", test_name, p, result_value, ( tbb::tick_count::now() - t0).seconds());
+        init.terminate();
+    }
+}
+
+template<typename T>
+void run_cross_type_vector_tests(const char *test_name) {
+    tbb::tick_count t0;
+    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
+    typedef std::vector<T, tbb::tbb_allocator<T> > container_type;
+
+    for (int p = MinThread; p <= MaxThread; ++p) { 
+
+        if (p == 0) continue;
+        if (Verbose) REPORT("Testing parallel %s on %d thread(s)... ", test_name, p);
+        init.initialize(p);
+
+        T sum;
+        test_helper<T>::init(sum);
+
+        for (int t = -1; t < REPETITIONS; ++t) {
+            if (Verbose && t == 0) t0 = tbb::tick_count::now(); 
+            typedef typename tbb::enumerable_thread_specific< container_type, tbb::cache_aligned_allocator<container_type>, tbb::ets_no_key > ets_nokey_type;
+            typedef typename tbb::enumerable_thread_specific< container_type, tbb::cache_aligned_allocator<container_type>, tbb::ets_key_per_instance > ets_tlskey_type;
+            ets_nokey_type vs;
+
+            ASSERT( vs.empty(), NULL);
+            tbb::parallel_for ( tbb::blocked_range<int> (0, N, 10000), parallel_vector_for_body<T>( vs ) );
+            ASSERT( !vs.empty(), NULL);
+
+            // copy construct
+            ets_tlskey_type vs2(vs);
+
+            // assign
+            ets_nokey_type vs3;
+            vs3 = vs2;
+
+            parallel_vector_reduce_body< typename tbb::enumerable_thread_specific< std::vector< T, tbb::tbb_allocator<T>  > >::const_range_type, T > pvrb;
+            tbb::parallel_reduce ( vs3.range(1), pvrb );
+
+            test_helper<T>::sum(sum, pvrb.sum);
+
+            ASSERT( vs3.size() == pvrb.count, NULL);
+
+            tbb::flattened2d<ets_nokey_type> fvs = flatten2d(vs3);
+            size_t ccount = fvs.size();
+            size_t elem_cnt = 0;
+            for(typename tbb::flattened2d<ets_nokey_type>::const_iterator i = fvs.begin(); i != fvs.end(); ++i) {
+                ++elem_cnt;
+            };
+            ASSERT(ccount == elem_cnt, NULL);
+
+            elem_cnt = 0;
+            for(typename tbb::flattened2d<ets_nokey_type>::iterator i = fvs.begin(); i != fvs.end(); ++i) {
+                ++elem_cnt;
+            };
+            ASSERT(ccount == elem_cnt, NULL);
+        }
+
+        double result_value = test_helper<T>::get(sum);
+        ASSERT( EXPECTED_SUM == result_value, NULL);
+        if (Verbose)
+            REPORT("done\nparallel %s, %d, %g, %g\n", test_name, p, result_value, ( tbb::tick_count::now() - t0).seconds());
+        init.terminate();
+    }
+}
+
+template< typename T >
+void run_serial_vector_tests(const char *test_name) {
+    tbb::tick_count t0;
+    T sum;
+    test_helper<T>::init(sum);
+    T one;
+    test_helper<T>::set(one, 1);
+
+    if (Verbose) REPORT("Testing serial %s... ", test_name);
+    for (int t = -1; t < REPETITIONS; ++t) {
+        if (Verbose && t == 0) t0 = tbb::tick_count::now(); 
+        std::vector<T, tbb::tbb_allocator<T> > v; 
+        for (int i = 0; i < N; ++i) {
+            v.push_back( one );
+        }
+        for (typename std::vector<T, tbb::tbb_allocator<T> >::const_iterator i = v.begin(); i != v.end(); ++i) 
+            test_helper<T>::sum(sum, *i); 
+    }
+
+    double result_value = test_helper<T>::get(sum);
+    ASSERT( EXPECTED_SUM == result_value, NULL);
+    if (Verbose)
+        REPORT("done\nserial %s, 0, %g, %g\n", test_name, result_value, ( tbb::tick_count::now() - t0).seconds());
+}
+
+void 
+run_serial_tests() {
+    run_serial_scalar_tests<int>("int");
+    run_serial_scalar_tests<double>("double");
+    run_serial_scalar_tests<minimal>("minimal");
+    run_serial_vector_tests<int>("std::vector<int, tbb::tbb_allocator<int> >");
+    run_serial_vector_tests<double>("std::vector<double, tbb::tbb_allocator<double> >");
+}
+
+void 
+run_parallel_tests() {
+    run_parallel_scalar_tests<int>("int");
+    run_parallel_scalar_tests<double>("double");
+    run_parallel_scalar_tests<minimal>("minimal");
+    run_parallel_vector_tests<int>("std::vector<int, tbb::tbb_allocator<int> >");
+    run_parallel_vector_tests<double>("std::vector<double, tbb::tbb_allocator<double> >");
+}
+
+void
+run_cross_type_tests() {
+    // cross-type scalar tests are part of run_serial_scalar_tests
+    run_cross_type_vector_tests<int>("std::vector<int, tbb::tbb_allocator<int> >");
+    run_parallel_vector_tests<double>("std::vector<double, tbb::tbb_allocator<double> >");
+}
+
+typedef tbb::enumerable_thread_specific<minimal> * minimal_ptr;
+
+class set_body {
+    minimal_ptr *a;
+
+public:
+    set_body( minimal_ptr *_a ) : a(_a) { }
+
+    void operator() ( ) const {
+        for (int i = 0; i < VALID_NUMBER_OF_KEYS; ++i) {
+            a[i]->local().set_value(i + 1);
+        }
+    }
+};
+
+void do_tbb_threads( int max_threads, minimal_ptr *a ) {
+    std::vector< tbb::tbb_thread * > threads;
+
+    for (int p = 0; p < max_threads; ++p) { 
+        threads.push_back( new tbb::tbb_thread ( set_body( a ) ) ); 
+    }
+
+    for (int p = 0; p < max_threads; ++p) {
+        threads[p]->join();
+    }
+    for(int p = 0; p < max_threads; ++p) {
+        delete threads[p];
+    }
+}
+
+void
+flog_key_creation_and_deletion() {
+
+    const int FLOG_REPETITIONS = 100;
+    minimal_ptr a[VALID_NUMBER_OF_KEYS];
+    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
+
+    for (int p = MinThread; p <= MaxThread; ++p) { 
+
+        if (p == 0) continue;
+
+        if (Verbose) REPORT("Testing repeated deletes on %d threads... ", p);
+
+        for (int j = 0; j < FLOG_REPETITIONS; ++j) {
+            construction_counter = 0;
+            destruction_counter = 0;
+
+            // causes VALID_NUMER_OF_KEYS exemplar instances to be constructed 
+            for (int i = 0; i < VALID_NUMBER_OF_KEYS; ++i) {
+                a[i] = new tbb::enumerable_thread_specific<minimal>;
+            }
+
+            // causes p * VALID_NUMBER_OF_KEYS minimals to be created
+            do_tbb_threads(p, a); 
+
+            for (int i = 0; i < VALID_NUMBER_OF_KEYS; ++i) {
+                for ( tbb::enumerable_thread_specific< minimal >::iterator tli = a[i]->begin();
+                      tli != a[i]->end(); ++tli ) {
+                    ASSERT( (*tli).value() == i+1, NULL );
+                }
+                delete a[i];
+                a[i] = NULL;
+            }
+        }
+
+        ASSERT( int(construction_counter) == (p+1)*VALID_NUMBER_OF_KEYS, NULL );
+        ASSERT( int(destruction_counter) == (p+1)*VALID_NUMBER_OF_KEYS, NULL );
+
+        if (Verbose) REPORT("done\nTesting repeated clears on %d threads... ", p);
+
+        construction_counter = 0;
+        destruction_counter = 0;
+
+        // causes VALID_NUMER_OF_KEYS exemplar instances to be constructed 
+        for (int i = 0; i < VALID_NUMBER_OF_KEYS; ++i) {
+            a[i] = new tbb::enumerable_thread_specific<minimal>;
+        }
+        for (int j = 0; j < FLOG_REPETITIONS; ++j) {
+
+            // causes p * VALID_NUMBER_OF_KEYS minimals to be created
+            do_tbb_threads(p, a);
+
+            for (int i = 0; i < VALID_NUMBER_OF_KEYS; ++i) {
+                for ( tbb::enumerable_thread_specific< minimal >::iterator tli = a[i]->begin();
+                      tli != a[i]->end(); ++tli ) {
+                    ASSERT( (*tli).value() == i+1, NULL );
+                }
+                a[i]->clear();
+                ASSERT( static_cast<int>(a[i]->end() - a[i]->begin()) == 0, NULL );
+            }
+
+        }
+
+        for (int i = 0; i < VALID_NUMBER_OF_KEYS; ++i) {
+            delete a[i];
+            a[i] = NULL;
+        }
+
+        ASSERT( int(construction_counter) == (FLOG_REPETITIONS*p+1)*VALID_NUMBER_OF_KEYS, NULL );
+        ASSERT( int(destruction_counter) == (FLOG_REPETITIONS*p+1)*VALID_NUMBER_OF_KEYS, NULL );
+
+        if (Verbose) REPORT("done\n");
+    }
+
+}
+
+template <typename inner_container>
+void 
+flog_segmented_interator() {
+
+    bool found_error = false;
+    typedef typename inner_container::value_type T;
+    typedef std::vector< inner_container > nested_vec;
+    inner_container my_inner_container;
+    my_inner_container.clear();
+    nested_vec my_vec;
+
+    // simple nested vector (neither level empty)
+    const int maxval = 10;
+    for(int i=0; i < maxval; i++) {
+        my_vec.push_back(my_inner_container);
+        for(int j = 0; j < maxval; j++) {
+            my_vec.at(i).push_back((T)(maxval * i + j));
+        }
+    }
+
+    tbb::internal::segmented_iterator<nested_vec, T> my_si(my_vec);
+
+    T ii;
+    for(my_si=my_vec.begin(), ii=0; my_si != my_vec.end(); ++my_si, ++ii) {
+        if((*my_si) != ii) {
+            found_error = true;
+            if(Verbose) REPORT( "*my_si=%d\n", int(*my_si));
+        }
+    }
+
+    // outer level empty
+    my_vec.clear();
+    for(my_si=my_vec.begin(); my_si != my_vec.end(); ++my_si) {
+        found_error = true;
+    }
+
+    // inner levels empty
+    my_vec.clear();
+    for(int i =0; i < maxval; ++i) {
+        my_vec.push_back(my_inner_container);
+    }
+    for(my_si = my_vec.begin(); my_si != my_vec.end(); ++my_si) {
+        found_error = true;
+    }
+
+    // every other inner container is empty
+    my_vec.clear();
+    for(int i=0; i < maxval; ++i) {
+        my_vec.push_back(my_inner_container);
+        if(i%2) {
+            for(int j = 0; j < maxval; ++j) {
+                my_vec.at(i).push_back((T)(maxval * (i/2) + j));
+            }
+        }
+    }
+    for(my_si = my_vec.begin(), ii=0; my_si != my_vec.end(); ++my_si, ++ii) {
+        if((*my_si) != ii) {
+            found_error = true;
+            if(Verbose) REPORT("*my_si=%d, ii=%d\n", (int)(*my_si), (int)ii);
+        }
+    }
+
+    tbb::internal::segmented_iterator<nested_vec, const T> my_csi(my_vec);
+    for(my_csi=my_vec.begin(), ii=0; my_csi != my_vec.end(); ++my_csi, ++ii) {
+        if((*my_csi) != ii) {
+            found_error = true;
+            if(Verbose) REPORT( "*my_csi=%d\n", int(*my_csi));
+        }
+    }
+
+    // outer level empty
+    my_vec.clear();
+    for(my_csi=my_vec.begin(); my_csi != my_vec.end(); ++my_csi) {
+        found_error = true;
+    }
+
+    // inner levels empty
+    my_vec.clear();
+    for(int i =0; i < maxval; ++i) {
+        my_vec.push_back(my_inner_container);
+    }
+    for(my_csi = my_vec.begin(); my_csi != my_vec.end(); ++my_csi) {
+        found_error = true;
+    }
+
+    // every other inner container is empty
+    my_vec.clear();
+    for(int i=0; i < maxval; ++i) {
+        my_vec.push_back(my_inner_container);
+        if(i%2) {
+            for(int j = 0; j < maxval; ++j) {
+                my_vec.at(i).push_back((T)(maxval * (i/2) + j));
+            }
+        }
+    }
+    for(my_csi = my_vec.begin(), ii=0; my_csi != my_vec.end(); ++my_csi, ++ii) {
+        if((*my_csi) != ii) {
+            found_error = true;
+            if(Verbose) REPORT("*my_csi=%d, ii=%d\n", (int)(*my_csi), (int)ii);
+        }
+    }
+
+
+    if(found_error) REPORT("segmented_iterator failed\n");
+}
+
+template <typename Key, typename Val>
+void
+flog_segmented_iterator_map() {
+   typedef typename std::map<Key, Val> my_map;
+   typedef std::vector< my_map > nested_vec;
+   my_map my_inner_container;
+   my_inner_container.clear();
+   nested_vec my_vec;
+   my_vec.clear();
+   bool found_error = false;
+
+   // simple nested vector (neither level empty)
+   const int maxval = 4;
+   for(int i=0; i < maxval; i++) {
+       my_vec.push_back(my_inner_container);
+       for(int j = 0; j < maxval; j++) {
+           my_vec.at(i).insert(std::make_pair<Key,Val>(maxval * i + j, 2*(maxval*i + j)));
+       }
+   }
+
+   tbb::internal::segmented_iterator<nested_vec, std::pair<const Key, Val> > my_si(my_vec);
+   Key ii;
+   for(my_si=my_vec.begin(), ii=0; my_si != my_vec.end(); ++my_si, ++ii) {
+       if(((*my_si).first != ii) || ((*my_si).second != 2*ii)) {
+           found_error = true;
+           if(Verbose) REPORT( "ii=%d, (*my_si).first=%d, second=%d\n",ii, int((*my_si).first), int((*my_si).second));
+       }
+   }
+
+   tbb::internal::segmented_iterator<nested_vec, const std::pair<const Key, Val> > my_csi(my_vec);
+   for(my_csi=my_vec.begin(), ii=0; my_csi != my_vec.end(); ++my_csi, ++ii) {
+       if(((*my_csi).first != ii) || ((*my_csi).second != 2*ii)) {
+           found_error = true;
+           if(Verbose) REPORT( "ii=%d, (*my_csi).first=%d, second=%d\n",ii, int((*my_csi).first), int((*my_csi).second));
+       }
+   }
+}
+
+void
+run_segmented_iterator_tests() {
+   // only the following containers can be used with the segmented iterator.
+    if(Verbose) REPORT("Running Segmented Iterator Tests\n");
+   flog_segmented_interator<std::vector< int > >();
+   flog_segmented_interator<std::vector< double > >();
+   flog_segmented_interator<std::deque< int > >();
+   flog_segmented_interator<std::deque< double > >();
+   flog_segmented_interator<std::list< int > >();
+   flog_segmented_interator<std::list< double > >();
+
+   flog_segmented_iterator_map<int, int>();
+   flog_segmented_iterator_map<int, double>(); 
+}
+
+template <typename T>
+void
+run_assign_and_copy_constructor_test(const char *test_name) {
+    if (Verbose) REPORT("Testing assignment and copy construction for %s\n", test_name);
+
+    // test initializer with exemplar (combine returns the exemplar value if no threads have created locals.)
+    T initializer0;
+    test_helper<T>::init(initializer0);
+    T initializer7;
+    test_helper<T>::set(initializer7,7);
+    tbb::enumerable_thread_specific<T> create1(initializer7);
+    ASSERT(7 == test_helper<T>::get(create1.combine(my_combine<T>)), NULL);
+
+    // test copy construction with exemplar initializer
+    tbb::enumerable_thread_specific<T> copy1(create1);
+    ASSERT(7 == test_helper<T>::get(copy1.combine(my_combine<T>)), NULL);
+
+    // test copy assignment with exemplar initializer
+    tbb::enumerable_thread_specific<T> assign1(initializer0);
+    assign1 = create1;
+    ASSERT(7 == test_helper<T>::get(assign1.combine(my_combine<T>)), NULL);
+
+    // test creation with finit function (combine returns finit return value if no threads have created locals)
+    FunctorAddFinit7<T> my_finit7;
+    tbb::enumerable_thread_specific<T> create2(my_finit7);
+    ASSERT(7 == test_helper<T>::get(create2.combine(my_combine<T>)), NULL);
+
+    // test copy construction with function initializer
+    tbb::enumerable_thread_specific<T> copy2(create2);
+    ASSERT(7 == test_helper<T>::get(copy2.combine(my_combine<T>)), NULL);
+
+    // test copy assignment with function initializer
+    FunctorAddFinit<T> my_finit;
+    tbb::enumerable_thread_specific<T> assign2(my_finit);
+    assign2 = create2;
+    ASSERT(7 == test_helper<T>::get(assign2.combine(my_combine<T>)), NULL);
+}
+
+void
+run_assignment_and_copy_constructor_tests() {
+    if(Verbose) REPORT("Running assignment and copy constructor tests\n");
+    run_assign_and_copy_constructor_test<int>("int");
+    run_assign_and_copy_constructor_test<double>("double");
+    run_assign_and_copy_constructor_test<minimal>("minimal");
+}
+
+__TBB_TEST_EXPORT
+int main(int argc, char *argv[]) {
+   ParseCommandLine(argc, argv);
+   run_segmented_iterator_tests();
+
+   flog_key_creation_and_deletion();
+
+   if (MinThread == 0) 
+      run_serial_tests();
+
+   if (MaxThread > 0) {
+      run_parallel_tests();
+      run_cross_type_tests();
+   }
+
+    run_assignment_and_copy_constructor_tests();
+
+   REPORT("done\n");
+   return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_halt.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_halt.cpp
new file mode 100644 (file)
index 0000000..990af30
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <cstdio>
+#include <cstdlib>
+#include <cassert>
+#include <utility>
+#include "tbb/task.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+#include "tbb/mutex.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/queuing_mutex.h"
+#include "harness.h"
+
+using namespace std;
+using namespace tbb;
+
+///////////////////// Parallel methods ////////////////////////
+
+// *** Serial shared by mutexes *** //
+int SharedI = 1, SharedN;
+template<typename M>
+class SharedSerialFibBody: NoAssign {
+    M &mutex;
+public:
+    SharedSerialFibBody( M &m ) : mutex( m ) {}
+    //! main loop
+    void operator()( const blocked_range<int>& /*range*/ ) const {
+        for(;;) {
+            typename M::scoped_lock lock( mutex );
+            if(SharedI >= SharedN) break;
+            volatile double sum = 7.3; 
+            sum *= 11.17;
+            ++SharedI;
+        }
+    }
+};
+
+//! Root function
+template<class M>
+void SharedSerialFib(int n)
+{
+    SharedI = 1; 
+    SharedN = n; 
+    M mutex;
+    parallel_for( blocked_range<int>(0,4,1), SharedSerialFibBody<M>( mutex ) );
+}
+
+/////////////////////////// Main ////////////////////////////////////////////////////
+
+double Tsum = 0; int Tnum = 0;
+
+typedef void (*MeasureFunc)(int);
+//! Measure ticks count in loop [2..n]
+void Measure(const char *name, MeasureFunc func, int n)
+{
+    tick_count t0;
+    tick_count::interval_t T;
+    if( Verbose )
+        REPORT("%s",name);
+    t0 = tick_count::now();
+    for(int number = 2; number <= n; number++)
+        func(number);
+    T = tick_count::now() - t0;
+    double avg = Tnum? Tsum/Tnum : 1;
+    if (avg == 0.0) avg = 1;
+    if(avg * 100 < T.seconds()) {
+        REPORT("Warning: halting detected (%g sec, av: %g)\n", T.seconds(), avg);
+        ASSERT(avg * 1000 > T.seconds(), "Too long halting period");
+    } else {
+        Tsum += T.seconds(); Tnum++;
+    }
+    if( Verbose )
+        REPORT("\t- in %f msec\n", T.seconds()*1000);
+}
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    MaxThread = 8; MinThread = 2;
+    ParseCommandLine( argc, argv );
+    int NumbersCount = 100;
+    short recycle = 100;
+
+    do {
+        for(int threads = 2; threads <= MaxThread; threads++)
+        {
+            task_scheduler_init scheduler_init(threads);
+            if( Verbose )
+                REPORT("Threads number is %d\t", threads);
+            Measure("Shared serial (wrapper mutex)\t", SharedSerialFib<mutex>, NumbersCount);
+            //sum = Measure("Shared serial (spin_mutex)", SharedSerialFib<tbb::spin_mutex>, NumbersCount);
+            //sum = Measure("Shared serial (queuing_mutex)", SharedSerialFib<tbb::queuing_mutex>, NumbersCount);
+        }
+    } while(--recycle);
+    if(!Verbose)
+        REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_handle_perror.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_handle_perror.cpp
new file mode 100644 (file)
index 0000000..ebf5e2a
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Program for basic correctness of handle_perror, which is internal
+// to the TBB shared library.
+
+#include <cerrno>
+#include <stdexcept>
+#include "../tbb/tbb_misc.h"
+#include "harness.h"
+
+static void TestHandlePerror() {
+    bool caught = false;
+    try {
+        tbb::internal::handle_perror( EAGAIN, "apple" );
+    } catch( std::runtime_error& e ) {
+       if( Verbose )
+           REPORT("caught runtime_exception('%s')\n",e.what());
+       ASSERT( memcmp(e.what(),"apple: ",7)==0, NULL );
+        ASSERT( strstr(e.what(),"unavailable")!=NULL, "bad error message?" ); 
+       caught = true;
+    }
+    ASSERT(caught,NULL);
+}
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    ParseCommandLine( argc, argv );
+#if !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
+    TestHandlePerror();
+#endif
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_inits_loop.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_inits_loop.cpp
new file mode 100644 (file)
index 0000000..7211732
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#if __APPLE__
+
+#include "harness.h"
+#include <cstdlib>
+#include "tbb/task_scheduler_init.h"
+
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+bool exec_test(const char *self) {
+    int status = 1;
+    pid_t p = fork();
+    if(p < 0) {
+        REPORT("fork error: errno=%d: %s\n", errno, strerror(errno));
+        return true;
+    }
+    else if(p) { // parent
+        if(waitpid(p, &status, 0) != p) {
+            REPORT("wait error: errno=%d: %s\n", errno, strerror(errno));
+            return true;
+        }
+        if(WIFEXITED(status)) {
+            if(!WEXITSTATUS(status)) return false; // ok
+            else REPORT("child has exited with return code 0x%x\n", WEXITSTATUS(status));
+        } else {
+            REPORT("child error 0x%x:%s%s ", status, WIFSIGNALED(status)?" signalled":"",
+                WIFSTOPPED(status)?" stopped":"");
+            if(WIFSIGNALED(status))
+                REPORT("%s%s", sys_siglist[WTERMSIG(status)], WCOREDUMP(status)?" core dumped":"");
+            if(WIFSTOPPED(status))
+                REPORT("with %d stop-code", WSTOPSIG(status));
+            REPORT("\n");
+        }
+    }
+    else { // child
+        // reproduces error much often
+        execl(self, self, "0", NULL);
+        REPORT("exec fails %s: %d: %s\n", self, errno, strerror(errno));
+        exit(2);
+    }
+    return true;
+}
+
+__TBB_TEST_EXPORT
+int main( int argc, char * argv[] ) {
+    MinThread = 3000;
+    ParseCommandLine( argc, argv );
+    if( MinThread <= 0 ) {
+        tbb::task_scheduler_init init( 2 ); // even number required for an error
+    } else {
+        for(int i = 0; i<MinThread; i++)
+            if(exec_test(argv[0])) {
+                REPORT("ERROR: execution fails at %d-th iteration!\n", i);
+                exit(1);
+            }
+
+        REPORT("done\n");
+    }
+    return 0;
+}
+
+#else /* !__APPLE__ */
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+
+__TBB_TEST_EXPORT
+int main() {
+    REPORT("skip\n");
+    return 0;
+}
+
+#endif /* !__APPLE__ */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_ittnotify.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_ittnotify.cpp
new file mode 100644 (file)
index 0000000..655dabd
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#if !TBB_USE_THREADING_TOOLS
+    #define TBB_USE_THREADING_TOOLS 1
+#endif
+
+#include "harness.h"
+
+#if DO_ITT_NOTIFY
+
+#include "tbb/spin_mutex.h"
+#include "tbb/spin_rw_mutex.h"
+#include "tbb/queuing_rw_mutex.h"
+#include "tbb/queuing_mutex.h"
+#include "tbb/mutex.h"
+#include "tbb/recursive_mutex.h"
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+#include "tbb/task_scheduler_init.h"
+
+
+#include "../tbb/itt_notify.h"
+
+
+template<typename M>
+class WorkEmulator: NoAssign {
+    M& m_mutex;
+    static volatile size_t s_anchor;
+public:
+    void operator()( tbb::blocked_range<size_t>& range ) const {
+        for( size_t i=range.begin(); i!=range.end(); ++i ) {
+            typename M::scoped_lock lock(m_mutex);
+            for ( size_t j = 0; j!=range.end(); ++j )
+                s_anchor = (s_anchor - i) / 2 + (s_anchor + j) / 2;
+        }
+    }
+    WorkEmulator( M& mutex ) : m_mutex(mutex) {}
+};
+
+template<typename M>
+volatile size_t WorkEmulator<M>::s_anchor = 0;
+
+
+template<class M>
+void Test( const char * name ) {
+    REMARK("%s time = ",name);
+    M mtx;
+    tbb::profiling::set_name(mtx, name);
+
+    const int n = 10000;
+    tbb::parallel_for( tbb::blocked_range<size_t>(0,n,n/100), WorkEmulator<M>(mtx) );
+}
+
+    #define TEST_MUTEX(type, name)  Test<tbb::type>( name )
+
+#endif /* !DO_ITT_NOTIFY */
+
+__TBB_TEST_EXPORT
+int main( int argc, char * argv[] ) {
+    // Default is to run on two threads
+    MinThread = MaxThread = 2;
+    ParseCommandLine( argc, argv );
+#if DO_ITT_NOTIFY
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        REMARK( "testing with %d workers\n", p );
+        tbb::task_scheduler_init init( p );
+        TEST_MUTEX( spin_mutex, "Spin Mutex" );
+        TEST_MUTEX( queuing_mutex, "Queuing Mutex" );
+        TEST_MUTEX( queuing_rw_mutex, "Queuing RW Mutex" );
+        TEST_MUTEX( spin_rw_mutex, "Spin RW Mutex" );
+    }
+    REPORT("done\n");
+#else /* !DO_ITT_NOTIFY */
+    REPORT("skip\n");
+#endif /* !DO_ITT_NOTIFY */
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_compliance.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_compliance.cpp
new file mode 100644 (file)
index 0000000..247f74c
--- /dev/null
@@ -0,0 +1,951 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+const int MByte = 1048576; //1MB
+
+/* _WIN32_WINNT should be defined at the very beginning, 
+   because other headers might include <windows.h>
+*/
+
+#if _WIN32 || _WIN64
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0500
+#include <windows.h>
+#include <stdio.h>
+#include "harness_report.h"
+
+void limitMem( int limit )
+{
+    static HANDLE hJob = NULL;
+    JOBOBJECT_EXTENDED_LIMIT_INFORMATION jobInfo;
+
+    jobInfo.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_PROCESS_MEMORY;
+    jobInfo.ProcessMemoryLimit = limit? limit*MByte : 2*1024LL*MByte;
+    if (NULL == hJob) {
+        if (NULL == (hJob = CreateJobObject(NULL, NULL))) {
+            REPORT("Can't assign create job object: %ld\n", GetLastError());
+            exit(1);
+        }
+        if (0 == AssignProcessToJobObject(hJob, GetCurrentProcess())) {
+            REPORT("Can't assign process to job object: %ld\n", GetLastError());
+            exit(1);
+        }
+    }
+    if (0 == SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, 
+                                     &jobInfo, sizeof(jobInfo))) {
+        REPORT("Can't set limits: %ld\n", GetLastError());
+        exit(1);
+    }
+}
+#else
+#include <sys/resource.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <sys/types.h>  // uint64_t on FreeBSD, needed for rlim_t
+#include "harness_report.h"
+
+void limitMem( int limit )
+{
+    rlimit rlim;
+    rlim.rlim_cur = limit? limit*MByte : (rlim_t)RLIM_INFINITY;
+    rlim.rlim_max = (rlim_t)RLIM_INFINITY;
+    int ret = setrlimit(RLIMIT_AS,&rlim);
+    if (0 != ret) {
+        REPORT("Can't set limits: errno %d\n", errno);
+        exit(1);
+    }
+}
+#endif 
+
+#include <time.h>
+#include <errno.h>
+#include <vector>
+#define __TBB_NO_IMPLICIT_LINKAGE 1
+#include "tbb/scalable_allocator.h"
+#include "tbb/tbb_machine.h"
+
+#include "harness.h"
+#include "harness_barrier.h"
+#if __linux__
+#include <stdint.h> // uintptr_t
+#endif
+#if _WIN32 || _WIN64
+#include <malloc.h> // _aligned_(malloc|free|realloc)
+#endif
+
+const size_t COUNT_ELEM_CALLOC = 2;
+const int COUNT_TESTS = 1000;
+const int COUNT_ELEM = 50000;
+const size_t MAX_SIZE = 1000;
+const int COUNTEXPERIMENT = 10000;
+
+const char strError[]="failed";
+const char strOk[]="done";
+
+typedef unsigned int UINT;
+typedef unsigned char UCHAR;
+typedef unsigned long DWORD;
+typedef unsigned char BYTE;
+
+
+typedef void* TestMalloc(size_t size);
+typedef void* TestCalloc(size_t num, size_t size);
+typedef void* TestRealloc(void* memblock, size_t size);
+typedef void  TestFree(void* memblock);
+typedef int   TestPosixMemalign(void **memptr, size_t alignment, size_t size);
+typedef void* TestAlignedMalloc(size_t size, size_t alignment);
+typedef void* TestAlignedRealloc(void* memblock, size_t size, size_t alignment);
+typedef void  TestAlignedFree(void* memblock);
+
+TestMalloc*  Tmalloc;
+TestCalloc*  Tcalloc;
+TestRealloc* Trealloc;
+TestFree*    Tfree;
+TestAlignedFree* Taligned_free;
+// call alignment-related function via pointer and check result's alignment
+int   Tposix_memalign(void **memptr, size_t alignment, size_t size);
+void* Taligned_malloc(size_t size, size_t alignment);
+void* Taligned_realloc(void* memblock, size_t size, size_t alignment);
+
+// pointers to alignment-related functions used while testing
+TestPosixMemalign*  Rposix_memalign;
+TestAlignedMalloc*  Raligned_malloc;
+TestAlignedRealloc* Raligned_realloc;
+
+bool error_occurred = false;
+
+#if __APPLE__
+// Tests that use the variable are skipped on Mac OS* X
+#else
+static bool perProcessLimits = true;
+#endif
+
+const size_t POWERS_OF_2 = 20;
+
+#if __linux__  && __ia64__
+/* Can't use Intel compiler intrinsic due to internal error reported by
+   10.1 compiler */
+pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+int32_t __TBB_machine_fetchadd4__TBB_full_fence (volatile void *ptr, int32_t value)
+{
+    pthread_mutex_lock(&counter_mutex);
+    int32_t result = *(int32_t*)ptr;
+    *(int32_t*)ptr = result + value;
+    pthread_mutex_unlock(&counter_mutex);
+    return result;
+}
+
+void __TBB_machine_pause(int32_t /*delay*/) {}
+
+#elif (_WIN32||_WIN64) && defined(_M_AMD64)
+
+void __TBB_machine_pause(__int32 /*delay*/ ) {}
+
+#endif
+
+struct MemStruct
+{
+    void* Pointer;
+    UINT Size;
+
+    MemStruct() : Pointer(NULL), Size(0) {}
+    MemStruct(void* Pointer, UINT Size) : Pointer(Pointer), Size(Size) {}
+};
+
+class CMemTest: NoAssign
+{
+    UINT CountErrors;
+    int total_threads;
+    bool FullLog;
+    Harness::SpinBarrier *limitBarrier;
+    static bool firstTime;
+
+public:
+    CMemTest(int total_threads, Harness::SpinBarrier *limitBarrier,
+             bool isVerbose=false) :
+        CountErrors(0), total_threads(total_threads), limitBarrier(limitBarrier)
+        {
+            srand((UINT)time(NULL));
+            FullLog=isVerbose;
+            rand();
+        }
+    void InvariantDataRealloc(bool aligned); //realloc does not change data
+    void NULLReturn(UINT MinSize, UINT MaxSize); // NULL pointer + check errno
+    void UniquePointer(); // unique pointer - check with padding
+    void AddrArifm(); // unique pointer - check with pointer arithmetic
+    bool ShouldReportError();
+    void Free_NULL(); // 
+    void Zerofilling(); // check if arrays are zero-filled
+    void TestAlignedParameters();
+    void RunAllTests(int total_threads);
+    ~CMemTest() {}
+};
+
+class Limit {
+    int limit;
+public:
+    Limit(int limit) : limit(limit) {}
+    void operator() () const {
+        limitMem(limit);
+    }
+};
+
+int argC;
+char** argV;
+
+struct RoundRobin: NoAssign {
+    const long number_of_threads;
+    mutable CMemTest test;
+
+    RoundRobin( long p, Harness::SpinBarrier *limitBarrier, bool verbose ) :
+        number_of_threads(p), test(p, limitBarrier, verbose) {}
+    void operator()( int /*id*/ ) const 
+        {
+            test.RunAllTests(number_of_threads);
+        }
+};
+
+bool CMemTest::firstTime = true;
+
+static void setSystemAllocs()
+{
+    Tmalloc=malloc;
+    Trealloc=realloc;
+    Tcalloc=calloc;
+    Tfree=free;
+#if _WIN32 || _WIN64
+    Raligned_malloc=_aligned_malloc;
+    Raligned_realloc=_aligned_realloc;
+    Taligned_free=_aligned_free;
+    Rposix_memalign=0;
+#elif  __APPLE__ || __sun //  Max OS X and Solaris don't have posix_memalign
+    Raligned_malloc=0;
+    Raligned_realloc=0;
+    Taligned_free=0;
+    Rposix_memalign=0;
+#else 
+    Raligned_malloc=0;
+    Raligned_realloc=0;
+    Taligned_free=0;
+    Rposix_memalign=posix_memalign;
+#endif
+}
+
+// check that realloc works as free and as malloc
+void ReallocParam()
+{
+    const int ITERS = 1000;
+    int i;
+    void *bufs[ITERS];
+
+    bufs[0] = Trealloc(NULL, 30*MByte);
+    ASSERT(bufs[0], "Can't get memory to start the test.");
+  
+    for (i=1; i<ITERS; i++)
+    {
+        bufs[i] = Trealloc(NULL, 30*MByte);
+        if (NULL == bufs[i])
+            break;
+    }
+    ASSERT(i<ITERS, "Limits should be decreased for the test to work.");
+  
+    Trealloc(bufs[0], 0);
+    /* There is a race for the free space between different threads at 
+       this point. So, have to run the test sequentially.
+    */
+    bufs[0] = Trealloc(NULL, 30*MByte);
+    ASSERT(bufs[0], NULL);
+  
+    for (int j=0; j<i; j++)
+        Trealloc(bufs[j], 0);
+}
+
+__TBB_TEST_EXPORT
+int main(int argc, char* argv[]) {
+    argC=argc;
+    argV=argv;
+    MaxThread = MinThread = 1;
+    Tmalloc=scalable_malloc;
+    Trealloc=scalable_realloc;
+    Tcalloc=scalable_calloc;
+    Tfree=scalable_free;
+    Rposix_memalign=scalable_posix_memalign;
+    Raligned_malloc=scalable_aligned_malloc;
+    Raligned_realloc=scalable_aligned_realloc;
+    Taligned_free=scalable_aligned_free;
+
+    // check if we were called to test standard behavior
+    for (int i=1; i< argc; i++) {
+        if (strcmp((char*)*(argv+i),"-s")==0)
+        {
+            setSystemAllocs();
+            argC--;
+            break;
+        }
+    }
+
+    ParseCommandLine( argC, argV );
+#if __linux__
+    /* According to man pthreads 
+       "NPTL threads do not share resource limits (fixed in kernel 2.6.10)".
+       Use per-threads limits for affected systems.
+     */
+    if ( LinuxKernelVersion() < 2*1000000 + 6*1000 + 10)
+        perProcessLimits = false;
+#endif    
+    //-------------------------------------
+#if __APPLE__
+    /* Skip due to lack of memory limit enforcing under Mac OS X. */
+#else
+    limitMem(200);
+    ReallocParam();
+    limitMem(0);
+#endif
+    for( int p=MaxThread; p>=MinThread; --p ) {
+        if( Verbose )
+            REPORT("testing with %d threads\n", p );
+        Harness::SpinBarrier *barrier = new Harness::SpinBarrier(p);
+        NativeParallelFor( p, RoundRobin(p, barrier, Verbose) );
+        delete barrier;
+    }
+    if( !error_occurred ) REPORT("done\n");
+    return 0;
+}
+
+struct TestStruct
+{
+    DWORD field1:2;
+    DWORD field2:6;
+    double field3;
+    UCHAR field4[100];
+    TestStruct* field5;
+//  std::string field6;
+    std::vector<int> field7;
+    double field8;
+    bool IzZero()
+        {
+            UCHAR *tmp;
+            tmp=(UCHAR*)this;
+            bool b=true;
+            for (int i=0; i<(int)sizeof(TestStruct); i++)
+                if (tmp[i]) b=false;
+            return b;
+        }
+};
+
+int Tposix_memalign(void **memptr, size_t alignment, size_t size)
+{
+    int ret = Rposix_memalign(memptr, alignment, size);
+    if (0 == ret)
+        ASSERT(0==((uintptr_t)*memptr & (alignment-1)),
+               "allocation result should be aligned");
+    return ret;
+}
+void* Taligned_malloc(size_t size, size_t alignment)
+{
+    void *ret = Raligned_malloc(size, alignment);
+    if (0 != ret)
+        ASSERT(0==((uintptr_t)ret & (alignment-1)),
+               "allocation result should be aligned");
+    return ret;
+}
+void* Taligned_realloc(void* memblock, size_t size, size_t alignment)
+{
+    void *ret = Raligned_realloc(memblock, size, alignment);
+    if (0 != ret)
+        ASSERT(0==((uintptr_t)ret & (alignment-1)),
+               "allocation result should be aligned");
+    return ret;
+}
+
+inline size_t choose_random_alignment() {
+    return sizeof(void*)<<(rand() % POWERS_OF_2);
+}
+
+void CMemTest::InvariantDataRealloc(bool aligned)
+{
+    size_t size, sizeMin;
+    CountErrors=0;
+    if (FullLog) REPORT("\nInvariant data by realloc....");
+    UCHAR* pchar;
+    sizeMin=size=rand()%MAX_SIZE+10;
+    pchar = aligned?
+        (UCHAR*)Taligned_realloc(NULL,size,choose_random_alignment())
+        : (UCHAR*)Trealloc(NULL,size);
+    if (NULL == pchar)
+        return;
+    for (size_t k=0; k<size; k++)
+        pchar[k]=(UCHAR)k%255+1;
+    for (int i=0; i<COUNTEXPERIMENT; i++)
+    {
+        size=rand()%MAX_SIZE+10;
+        UCHAR *pcharNew = aligned?
+            (UCHAR*)Taligned_realloc(pchar,size, choose_random_alignment())
+            : (UCHAR*)Trealloc(pchar,size);
+        if (NULL == pcharNew)
+            continue;
+        pchar = pcharNew;
+        sizeMin=size<sizeMin ? size : sizeMin;
+        for (size_t k=0; k<sizeMin; k++)
+            if (pchar[k] != (UCHAR)k%255+1)
+            {
+                CountErrors++;
+                if (ShouldReportError())
+                {
+                    REPORT("stand '%c', must stand '%c'\n",pchar[k],(UCHAR)k%255+1);
+                    REPORT("error: data changed (at %llu, SizeMin=%llu)\n",
+                           (long long unsigned)k,(long long unsigned)sizeMin);
+                }
+            }
+    }
+    if (aligned)
+        Taligned_realloc(pchar,0,choose_random_alignment());
+    else
+        Trealloc(pchar,0);
+    if (CountErrors) REPORT("%s\n",strError);
+    else if (FullLog) REPORT("%s\n",strOk);
+    error_occurred |= ( CountErrors>0 ) ;
+    //REPORT("end check\n");
+}
+
+struct PtrSize {
+    void  *ptr;
+    size_t size;
+};
+
+static int cmpAddrs(const void *p1, const void *p2)
+{
+    const PtrSize *a = (const PtrSize *)p1;
+    const PtrSize *b = (const PtrSize *)p2;
+
+    return a->ptr < b->ptr ? -1 : ( a->ptr == b->ptr ? 0 : 1);
+}
+
+void CMemTest::AddrArifm()
+{
+    PtrSize *arr = (PtrSize*)Tmalloc(COUNT_ELEM*sizeof(PtrSize));
+
+    if (FullLog) REPORT("\nUnique pointer using Address arithmetics\n");
+    if (FullLog) REPORT("malloc....");
+    ASSERT(arr, NULL);
+    for (int i=0; i<COUNT_ELEM; i++)
+    {
+        arr[i].size=rand()%MAX_SIZE;
+        arr[i].ptr=Tmalloc(arr[i].size);
+    }
+    qsort(arr, COUNT_ELEM, sizeof(PtrSize), cmpAddrs);
+
+    for (int i=0; i<COUNT_ELEM-1; i++)
+    {
+        if (NULL!=arr[i].ptr && NULL!=arr[i+1].ptr)
+            ASSERT((uintptr_t)arr[i].ptr+arr[i].size <= (uintptr_t)arr[i+1].ptr,
+                   "intersection detected");
+    }
+    //----------------------------------------------------------------
+    if (FullLog) REPORT("realloc....");
+    for (int i=0; i<COUNT_ELEM; i++)
+    {
+        size_t count=arr[i].size*2;
+        void *tmpAddr=Trealloc(arr[i].ptr,count);
+        if (NULL!=tmpAddr) {
+            arr[i].ptr = tmpAddr;
+            arr[i].size = count;
+        } else if (count==0) { // becasue realloc(..., 0) works as free
+            arr[i].ptr = NULL;
+            arr[i].size = 0;
+        }
+    }
+    qsort(arr, COUNT_ELEM, sizeof(PtrSize), cmpAddrs);
+
+    for (int i=0; i<COUNT_ELEM-1; i++)
+    {
+        if (NULL!=arr[i].ptr && NULL!=arr[i+1].ptr)
+            ASSERT((uintptr_t)arr[i].ptr+arr[i].size <= (uintptr_t)arr[i+1].ptr,
+                   "intersection detected");
+    }
+    for (int i=0; i<COUNT_ELEM; i++)
+    {
+        Tfree(arr[i].ptr);
+    }
+    //-------------------------------------------
+    if (FullLog) REPORT("calloc....");
+    for (int i=0; i<COUNT_ELEM; i++)
+    {
+        arr[i].size=rand()%MAX_SIZE;
+        arr[i].ptr=Tcalloc(arr[i].size,1);
+    }
+    qsort(arr, COUNT_ELEM, sizeof(PtrSize), cmpAddrs);
+
+    for (int i=0; i<COUNT_ELEM-1; i++)
+    {
+        if (NULL!=arr[i].ptr && NULL!=arr[i+1].ptr)
+            ASSERT((uintptr_t)arr[i].ptr+arr[i].size <= (uintptr_t)arr[i+1].ptr,
+                   "intersection detected");
+    }
+    for (int i=0; i<COUNT_ELEM; i++)
+    {
+        Tfree(arr[i].ptr);
+    }
+    Tfree(arr);
+}
+
+void CMemTest::Zerofilling()
+{
+    TestStruct* TSMas;
+    size_t CountElement;
+    CountErrors=0;
+    if (FullLog) REPORT("\nzeroings elements of array....");
+    //test struct
+    for (int i=0; i<COUNTEXPERIMENT; i++)
+    {
+        CountElement=rand()%MAX_SIZE;
+        TSMas=(TestStruct*)Tcalloc(CountElement,sizeof(TestStruct));
+        if (NULL == TSMas)
+            continue;
+        for (size_t j=0; j<CountElement; j++)
+        {
+            if (!(TSMas+j)->IzZero())
+            {
+                CountErrors++;
+                if (ShouldReportError()) REPORT("detect nonzero element at TestStruct\n");
+            }
+        }
+        Tfree(TSMas);
+    }
+    if (CountErrors) REPORT("%s\n",strError);
+    else if (FullLog) REPORT("%s\n",strOk);
+    error_occurred |= ( CountErrors>0 ) ;
+}
+
+// As several threads concurrently trying to push to memory limits, adding to 
+// vectors may have intermittent failures.  
+void reliablePushBack(std::vector<MemStruct> *vec, const MemStruct &mStruct)
+{
+    for (int i=0; i<10000; i++) {
+        try {
+            vec->push_back(mStruct);
+        } catch(std::bad_alloc) {
+            continue;
+        }
+        return;
+    }
+    ASSERT(0, "Unable to get free memory.");
+}
+
+void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize)
+{
+    std::vector<MemStruct> PointerList;
+    void *tmp;
+    CountErrors=0;
+    int CountNULL;
+    if (FullLog) REPORT("\nNULL return & check errno:\n");
+    UINT Size;
+    do {
+        Size=rand()%(MaxSize-MinSize)+MinSize;
+        tmp=Tmalloc(Size);
+        if (tmp != NULL)
+        {
+            memset(tmp, 0, Size);
+            reliablePushBack(&PointerList, MemStruct(tmp, Size));
+        }
+    } while(tmp != NULL);
+    if (FullLog) REPORT("\n");
+
+    // preparation complete, now running tests
+    // malloc
+    if (FullLog) REPORT("malloc....");
+    CountNULL = 0;
+    while (CountNULL==0)
+        for (int j=0; j<COUNT_TESTS; j++)
+        {
+            Size=rand()%(MaxSize-MinSize)+MinSize;
+            errno = ENOMEM+j+1;
+            tmp=Tmalloc(Size);
+            if (tmp == NULL)
+            {
+                CountNULL++;
+                if (errno != ENOMEM) {
+                    CountErrors++;
+                    if (ShouldReportError()) REPORT("NULL returned, error: errno (%d) != ENOMEM\n", errno);
+                }
+            }
+            else
+            {
+                // Technically, if malloc returns a non-NULL pointer, it is allowed to set errno anyway.
+                // However, on most systems it does not set errno.
+                bool known_issue = false;
+#if __linux__
+                if( errno==ENOMEM ) known_issue = true;
+#endif /* __linux__ */
+                if (errno != ENOMEM+j+1 && !known_issue) {
+                    CountErrors++;
+                    if (ShouldReportError()) REPORT("error: errno changed to %d though valid pointer was returned\n", errno);
+                }      
+                memset(tmp, 0, Size);
+                reliablePushBack(&PointerList, MemStruct(tmp, Size));
+            }
+        }
+    if (FullLog) REPORT("end malloc\n");
+    if (CountErrors) REPORT("%s\n",strError);
+    else if (FullLog) REPORT("%s\n",strOk);
+    error_occurred |= ( CountErrors>0 ) ;
+
+    CountErrors=0;
+    //calloc
+    if (FullLog) REPORT("calloc....");
+    CountNULL = 0;
+    while (CountNULL==0)
+        for (int j=0; j<COUNT_TESTS; j++)
+        {
+            Size=rand()%(MaxSize-MinSize)+MinSize;
+            errno = ENOMEM+j+1;
+            tmp=Tcalloc(COUNT_ELEM_CALLOC,Size);  
+            if (tmp == NULL)
+            {
+                CountNULL++;
+                if (errno != ENOMEM) {
+                    CountErrors++;
+                    if (ShouldReportError()) REPORT("NULL returned, error: errno(%d) != ENOMEM\n", errno);
+                }
+            }
+            else
+            {
+                // Technically, if calloc returns a non-NULL pointer, it is allowed to set errno anyway.
+                // However, on most systems it does not set errno.
+                bool known_issue = false;
+#if __linux__
+                if( errno==ENOMEM ) known_issue = true;
+#endif /* __linux__ */
+                if (errno != ENOMEM+j+1 && !known_issue) {
+                    CountErrors++;
+                    if (ShouldReportError()) REPORT("error: errno changed to %d though valid pointer was returned\n", errno);
+                }      
+                reliablePushBack(&PointerList, MemStruct(tmp, Size));
+            }
+        }
+    if (FullLog) REPORT("end calloc\n");
+    if (CountErrors) REPORT("%s\n",strError);
+    else if (FullLog) REPORT("%s\n",strOk);
+    error_occurred |= ( CountErrors>0 ) ;
+    CountErrors=0;
+    if (FullLog) REPORT("realloc....");
+    CountNULL = 0;
+    if (PointerList.size() > 0)
+        while (CountNULL==0)
+            for (size_t i=0; i<(size_t)COUNT_TESTS && i<PointerList.size(); i++)
+            {
+                errno = 0;
+                tmp=Trealloc(PointerList[i].Pointer,PointerList[i].Size*2);
+                if (PointerList[i].Pointer == tmp) // the same place
+                {
+                    bool known_issue = false;
+#if __linux__
+                    if( errno==ENOMEM ) known_issue = true;
+#endif /* __linux__ */
+                    if (errno != 0 && !known_issue) {
+                        CountErrors++;
+                        if (ShouldReportError()) REPORT("valid pointer returned, error: errno not kept\n");
+                    }      
+                    PointerList[i].Size *= 2;
+                }
+                else if (tmp != PointerList[i].Pointer && tmp != NULL) // another place
+                {
+                    bool known_issue = false;
+#if __linux__
+                    if( errno==ENOMEM ) known_issue = true;
+#endif /* __linux__ */
+                    if (errno != 0 && !known_issue) {
+                        CountErrors++;
+                        if (ShouldReportError()) REPORT("valid pointer returned, error: errno not kept\n");
+                    }      
+                    PointerList[i].Pointer = tmp;
+                    PointerList[i].Size *= 2;
+                }
+                else if (tmp == NULL)
+                {
+                    CountNULL++;
+                    if (errno != ENOMEM)
+                    {
+                        CountErrors++;
+                        if (ShouldReportError()) REPORT("NULL returned, error: errno(%d) != ENOMEM\n", errno);
+                    }
+                    // check data integrity
+                    BYTE *zer=(BYTE*)PointerList[i].Pointer;
+                    for (UINT k=0; k<PointerList[i].Size; k++)
+                        if (zer[k] != 0)
+                        {
+                            CountErrors++;
+                            if (ShouldReportError()) REPORT("NULL returned, error: data changed\n");
+                        }
+                }
+            }
+    if (FullLog) REPORT("realloc end\n");
+    if (CountErrors) REPORT("%s\n",strError);
+    else if (FullLog) REPORT("%s\n",strOk);
+    error_occurred |= ( CountErrors>0 ) ;
+    for (UINT i=0; i<PointerList.size(); i++)
+    {
+        Tfree(PointerList[i].Pointer);
+    }
+}
+
+
+void CMemTest::UniquePointer()
+{
+    CountErrors=0;
+    int **MasPointer = (int **)Tmalloc(sizeof(int*)*COUNT_ELEM);
+    size_t *MasCountElem = (size_t*)Tmalloc(sizeof(size_t)*COUNT_ELEM);
+    if (FullLog) REPORT("\nUnique pointer using 0\n");
+    ASSERT(MasCountElem && MasPointer, NULL);
+    //
+    //-------------------------------------------------------
+    //malloc
+    for (int i=0; i<COUNT_ELEM; i++)
+    {
+        MasCountElem[i]=rand()%MAX_SIZE;
+        MasPointer[i]=(int*)Tmalloc(MasCountElem[i]*sizeof(int));
+        if (NULL == MasPointer[i])
+            MasCountElem[i]=0;
+        for (UINT j=0; j<MasCountElem[i]; j++)
+            *(MasPointer[i]+j)=0;
+    }
+    if (FullLog) REPORT("malloc....");
+    for (UINT i=0; i<COUNT_ELEM-1; i++)
+    {
+        for (UINT j=0; j<MasCountElem[i]; j++)
+        {
+            if (*(*(MasPointer+i)+j)!=0)
+            {
+                CountErrors++;
+                if (ShouldReportError()) REPORT("error, detect 1 with 0x%p\n",(*(MasPointer+i)+j));
+            }
+            *(*(MasPointer+i)+j)+=1;
+        }
+    }
+    if (CountErrors) REPORT("%s\n",strError);
+    else if (FullLog) REPORT("%s\n",strOk);
+    error_occurred |= ( CountErrors>0 ) ;
+    //----------------------------------------------------------
+    //calloc
+    for (int i=0; i<COUNT_ELEM; i++)
+        Tfree(MasPointer[i]);
+    CountErrors=0;
+    for (long i=0; i<COUNT_ELEM; i++)
+    {
+        MasPointer[i]=(int*)Tcalloc(MasCountElem[i]*sizeof(int),2);
+        if (NULL == MasPointer[i])
+            MasCountElem[i]=0;
+    }
+    if (FullLog) REPORT("calloc....");
+    for (int i=0; i<COUNT_ELEM-1; i++)
+    {
+        for (UINT j=0; j<*(MasCountElem+i); j++)
+        {
+            if (*(*(MasPointer+i)+j)!=0)
+            {
+                CountErrors++;
+                if (ShouldReportError()) REPORT("error, detect 1 with 0x%p\n",(*(MasPointer+i)+j));
+            }
+            *(*(MasPointer+i)+j)+=1;
+        }
+    }
+    if (CountErrors) REPORT("%s\n",strError);
+    else if (FullLog) REPORT("%s\n",strOk);
+    error_occurred |= ( CountErrors>0 ) ;
+    //---------------------------------------------------------
+    //realloc
+    CountErrors=0;
+    for (int i=0; i<COUNT_ELEM; i++)
+    {
+        MasCountElem[i]*=2;
+        *(MasPointer+i)=
+            (int*)Trealloc(*(MasPointer+i),MasCountElem[i]*sizeof(int));
+        if (NULL == MasPointer[i])
+            MasCountElem[i]=0;
+        for (UINT j=0; j<MasCountElem[i]; j++)
+            *(*(MasPointer+i)+j)=0;
+    }
+    if (FullLog) REPORT("realloc....");
+    for (int i=0; i<COUNT_ELEM-1; i++)
+    {
+        for (UINT j=0; j<*(MasCountElem+i); j++)
+        {
+            if (*(*(MasPointer+i)+j)!=0)
+            {
+                CountErrors++;
+            }
+            *(*(MasPointer+i)+j)+=1;
+        }
+    }
+    if (CountErrors) REPORT("%s\n",strError);
+    else if (FullLog) REPORT("%s\n",strOk);
+    error_occurred |= ( CountErrors>0 ) ;
+    for (int i=0; i<COUNT_ELEM; i++)
+        Tfree(MasPointer[i]);
+    Tfree(MasCountElem);
+    Tfree(MasPointer);
+}
+
+bool CMemTest::ShouldReportError()
+{
+    if (FullLog)
+        return true;
+    else
+        if (firstTime) {
+            firstTime = false;
+            return true;
+        } else
+            return false;
+}
+
+void CMemTest::Free_NULL()
+{
+    CountErrors=0;
+    if (FullLog) REPORT("\ncall free with parameter NULL....");
+    errno = 0;
+    for (int i=0; i<COUNTEXPERIMENT; i++)
+    {
+        Tfree(NULL);
+        if (errno != 0)
+        {
+            CountErrors++;
+            if (ShouldReportError()) REPORT("error is found by a call free with parameter NULL\n");
+        }
+    }
+    if (CountErrors) REPORT("%s\n",strError);
+    else if (FullLog) REPORT("%s\n",strOk);
+    error_occurred |= ( CountErrors>0 ) ;
+}
+
+void CMemTest::TestAlignedParameters()
+{
+    void *memptr;
+    int ret;
+
+    if (Rposix_memalign) {
+        // alignment isn't power of 2
+        for (int bad_align=3; bad_align<16; bad_align++)
+            if (bad_align&(bad_align-1)) {
+                ret = Tposix_memalign(NULL, bad_align, 100);
+                ASSERT(EINVAL==ret, NULL);
+            }
+    
+        memptr = &ret;
+        ret = Tposix_memalign(&memptr, 5*sizeof(void*), 100);
+        ASSERT(memptr == &ret,
+               "memptr should not be changed after unsuccesful call");
+        ASSERT(EINVAL==ret, NULL);
+    
+        // alignment is power of 2, but not a multiple of sizeof(void *),
+        // we expect that sizeof(void*) > 2
+        ret = Tposix_memalign(NULL, 2, 100);
+        ASSERT(EINVAL==ret, NULL);
+    }
+    if (Raligned_malloc) {
+        // alignment isn't power of 2
+        for (int bad_align=3; bad_align<16; bad_align++)
+            if (bad_align&(bad_align-1)) {
+                memptr = Taligned_malloc(100, bad_align);
+                ASSERT(NULL==memptr, NULL);
+                ASSERT(EINVAL==errno, NULL);
+            }
+    
+        // size is zero
+        memptr = Taligned_malloc(0, 16);
+        ASSERT(NULL==memptr, "size is zero, so must return NULL");
+        ASSERT(EINVAL==errno, NULL);
+    }
+    if (Taligned_free) {
+        // NULL pointer is OK to free
+        errno = 0;
+        Taligned_free(NULL);
+        /* As there is no return value for free, strictly speaking we can't 
+           check errno here. But checked implementations obey the assertion.
+        */
+        ASSERT(0==errno, NULL);
+    }
+    if (Raligned_realloc) {
+        for (int i=1; i<20; i++) {
+            // checks that calls work correctly in presence of non-zero errno
+            errno = i;
+            void *ptr = Taligned_malloc(i*10, 128);
+            ASSERT(NULL!=ptr, NULL);
+            ASSERT(0!=errno, NULL);
+            // if size is zero and pointer is not NULL, works like free
+            memptr = Taligned_realloc(ptr, 0, 64);
+            ASSERT(NULL==memptr, NULL);
+            ASSERT(0!=errno, NULL);
+        }
+        // alignment isn't power of 2
+        for (int bad_align=3; bad_align<16; bad_align++)
+            if (bad_align&(bad_align-1)) {
+                void *ptr = &bad_align;
+                memptr = Taligned_realloc(&ptr, 100, bad_align);
+                ASSERT(NULL==memptr, NULL);
+                ASSERT(&bad_align==ptr, NULL);
+                ASSERT(EINVAL==errno, NULL);
+            }
+    }
+}
+
+void CMemTest::RunAllTests(int total_threads)
+{
+    Limit limit_200M(200*total_threads), no_limit(0);
+
+    Zerofilling();
+    Free_NULL();
+    InvariantDataRealloc(/*aligned=*/false);
+    if (Raligned_realloc)
+        InvariantDataRealloc(/*aligned=*/true);
+    TestAlignedParameters();
+#if __APPLE__
+    REPORT("Warning: skipping some tests (known issue on Mac OS* X)\n");
+#else
+    UniquePointer();
+    AddrArifm();
+    /* There is a bug in the specific verion of GLIBC (2.5-12) shipped 
+       with RHEL5 that leads to erroneous working of the test 
+       on Intel64 and IPF systems when setrlimit-related part is enabled.
+       Switching to GLIBC 2.5-18 from RHEL5.1 resolved the issue.
+     */
+    if (perProcessLimits)
+        limitBarrier->wait(limit_200M);
+    else
+        limitMem(200);
+#if !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
+    NULLReturn(1*MByte,100*MByte);
+#endif
+    if (perProcessLimits)
+        limitBarrier->wait(no_limit);
+    else
+        limitMem(0);
+#endif
+    if (FullLog) REPORT("All tests ended\nclearing memory...");
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_functionality.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_functionality.cpp
new file mode 100644 (file)
index 0000000..10415c0
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/scalable_allocator.h"
+#include "harness.h"
+#include "harness_barrier.h"
+
+// current minimal size of object that treated as large object
+const size_t minLargeObjectSize = 8065;
+// current difference between size of consequent cache bins
+const int largeObjectCacheStep = 8*1024;
+
+const int LARGE_MEM_SIZES_NUM = 10;
+const size_t MByte = 1024*1024;
+
+class AllocInfo {
+    int *p;
+    int val;
+    int size;
+public:
+    AllocInfo() : p(NULL), val(0), size(0) {}
+    explicit AllocInfo(int size) : p((int*)scalable_malloc(size*sizeof(int))),
+                                   val(rand()), size(size) {
+        ASSERT(p, NULL);
+        for (int k=0; k<size; k++)
+            p[k] = val;
+    }
+    void check() const {
+        for (int k=0; k<size; k++)
+            ASSERT(p[k] == val, NULL);
+    }
+    void clear() {
+        scalable_free(p);
+    }
+};
+
+class Run: NoAssign {
+    const int allThreads;
+    Harness::SpinBarrier *barrier;
+public:
+    static int largeMemSizes[LARGE_MEM_SIZES_NUM];
+
+    Run( int allThreads, Harness::SpinBarrier *barrier ) : 
+        allThreads(allThreads), barrier(barrier) {}
+    void operator()( int /*mynum*/ ) const {
+        testObjectCaching();
+    }
+private:
+    void testObjectCaching() const {
+        AllocInfo allocs[LARGE_MEM_SIZES_NUM];
+
+        // push to maximal cache limit
+        for (int i=0; i<2; i++) {
+            const int sizes[] = { MByte/sizeof(int),
+                                  (MByte-2*largeObjectCacheStep)/sizeof(int) };
+            for (int q=0; q<2; q++) {
+                size_t curr = 0;
+                for (int j=0; j<LARGE_MEM_SIZES_NUM; j++, curr++)
+                    new (allocs+curr) AllocInfo(sizes[q]);
+
+                for (size_t j=0; j<curr; j++) {
+                    allocs[j].check();
+                    allocs[j].clear();
+                }
+            }
+        }
+        
+        barrier->wait();
+
+        // check caching correctness
+        for (int i=0; i<1000; i++) {
+            size_t curr = 0;
+            for (int j=0; j<LARGE_MEM_SIZES_NUM-1; j++, curr++)
+                new (allocs+curr) AllocInfo(largeMemSizes[j]);
+
+            new (allocs+curr) 
+                AllocInfo((int)(4*minLargeObjectSize +
+                                2*minLargeObjectSize*(1.*rand()/RAND_MAX)));
+            curr++;
+
+            for (size_t j=0; j<curr; j++) {
+                allocs[j].check();
+                allocs[j].clear();
+            }
+        }
+    }
+};
+
+int Run::largeMemSizes[LARGE_MEM_SIZES_NUM];
+
+__TBB_TEST_EXPORT
+int main(int argc, char* argv[]) {
+    ParseCommandLine( argc, argv );
+
+    for (int i=0; i<LARGE_MEM_SIZES_NUM; i++)
+        Run::largeMemSizes[i] = (int)(minLargeObjectSize + 
+                                      2*minLargeObjectSize*(1.*rand()/RAND_MAX));
+
+    for( int p=MaxThread; p>=MinThread; --p ) {
+        Harness::SpinBarrier *barrier = new Harness::SpinBarrier(p);
+        NativeParallelFor( p, Run(p, barrier) );
+        delete barrier;
+    }
+
+    REPORT("done\n");
+    return 0;
+}
+
+/* On this platforms __TBB_machine_pause is defined in TBB library,
+ * so have to provide it manually. 
+ */
+#if (_WIN32||_WIN64) && defined(_M_AMD64)
+
+extern "C" void __TBB_machine_pause(__int32) { __TBB_Yield(); }
+
+#elif __linux__ && __ia64__
+extern "C" void __TBB_machine_pause(int32_t) { __TBB_Yield(); }
+
+pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+/* As atomics are used only as atomic addition in Harness::SpinBarrier 
+ * implementation, it's OK to have this mutex.
+ */
+int32_t __TBB_machine_fetchadd4__TBB_full_fence (volatile void *ptr, 
+                                                 int32_t value)
+{
+    pthread_mutex_lock(&counter_mutex);
+    int32_t result = *(int32_t*)ptr;
+    *(int32_t*)ptr = result + value;
+    pthread_mutex_unlock(&counter_mutex);
+    return result;
+}
+
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_overload.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_overload.cpp
new file mode 100644 (file)
index 0000000..f107bb0
--- /dev/null
@@ -0,0 +1,210 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+
+#if __linux__
+#define MALLOC_REPLACEMENT_AVAILABLE 1
+#elif _WIN32
+#define MALLOC_REPLACEMENT_AVAILABLE 2
+#include "tbb/tbbmalloc_proxy.h"
+#endif
+
+#if MALLOC_REPLACEMENT_AVAILABLE
+
+#include "harness_report.h"
+#include "harness_assert.h"
+#include <stdlib.h>
+#include <malloc.h>
+#include <stdio.h>
+#include <new>
+
+#if __linux__
+#include <dlfcn.h>
+#include <unistd.h> // for sysconf
+#include <stdint.h> // for uintptr_t
+
+#elif _WIN32
+#include <stddef.h>
+#if __MINGW32__
+#include <unistd.h>
+#else
+typedef unsigned __int32 uint32_t;
+typedef unsigned __int64 uint64_t;
+#endif
+
+#endif /* OS selection */
+
+#if _WIN32
+// On Windows, the tricky way to print "done" is necessary to create 
+// dependence on msvcpXX.dll, for sake of a regression test.
+// On Linux, C++ RTL headers are undesirable because of breaking strict ANSI mode.
+#include <string>
+#endif
+
+
+template<typename T>
+static inline T alignDown(T arg, uintptr_t alignment) {
+    return T( (uintptr_t)arg  & ~(alignment-1));
+}
+template<typename T>
+static inline bool isAligned(T arg, uintptr_t alignment) {
+    return 0==((uintptr_t)arg &  (alignment-1));
+}
+
+/* Below is part of MemoryAllocator.cpp. */
+
+/*
+ * The identifier to make sure that memory is allocated by scalable_malloc.
+ */
+const uint64_t theMallocUniqueID=0xE3C7AF89A1E2D8C1ULL; 
+
+struct LargeObjectHeader {
+    void        *unalignedResult;   /* The base of the memory returned from getMemory, this is what is used to return this to the OS */
+    size_t       unalignedSize;     /* The size that was requested from getMemory */
+    uint64_t     mallocUniqueID;    /* The field to check whether the memory was allocated by scalable_malloc */
+    size_t       objectSize;        /* The size originally requested by a client */
+};
+
+/*
+ * Objects of this size and larger are considered large objects.
+ */
+const uint32_t minLargeObjectSize = 8065;
+
+/* end of inclusion from MemoryAllocator.cpp */
+
+/* Correct only for large blocks, i.e. not smaller then minLargeObjectSize */
+static bool scalableMallocLargeBlock(void *object, size_t size)
+{
+    ASSERT(size >= minLargeObjectSize, NULL);
+#if MALLOC_REPLACEMENT_AVAILABLE == 2
+    // Check that _msize works correctly
+    ASSERT(_msize(object) >= size, NULL);
+#endif
+
+    LargeObjectHeader *h = (LargeObjectHeader*)((uintptr_t)object-sizeof(LargeObjectHeader));
+    return h->mallocUniqueID==theMallocUniqueID && h->objectSize==size;
+}
+
+struct BigStruct {
+    char f[minLargeObjectSize];
+};
+
+int main(int , char *[]) {
+    void *ptr, *ptr1;
+
+#if MALLOC_REPLACEMENT_AVAILABLE == 1
+    if (NULL == dlsym(RTLD_DEFAULT, "scalable_malloc")) {
+        REPORT("libtbbmalloc not found\nfail\n");
+        return 1;
+    }
+#endif
+
+    ptr = malloc(minLargeObjectSize);
+    ASSERT(ptr!=NULL && scalableMallocLargeBlock(ptr, minLargeObjectSize), NULL);
+    free(ptr);
+
+    ptr = calloc(minLargeObjectSize, 2);
+    ASSERT(ptr!=NULL && scalableMallocLargeBlock(ptr, minLargeObjectSize*2), NULL);
+    ptr1 = realloc(ptr, minLargeObjectSize*10);
+    ASSERT(ptr1!=NULL && scalableMallocLargeBlock(ptr1, minLargeObjectSize*10), NULL);
+    free(ptr1);
+
+#if MALLOC_REPLACEMENT_AVAILABLE == 1
+
+    int ret = posix_memalign(&ptr, 1024, 3*minLargeObjectSize);
+    ASSERT(0==ret && ptr!=NULL && scalableMallocLargeBlock(ptr, 3*minLargeObjectSize), NULL);
+    free(ptr);
+
+    ptr = memalign(128, 4*minLargeObjectSize);
+    ASSERT(ptr!=NULL && scalableMallocLargeBlock(ptr, 4*minLargeObjectSize), NULL);
+    free(ptr);
+
+    ptr = valloc(minLargeObjectSize);
+    ASSERT(ptr!=NULL && scalableMallocLargeBlock(ptr, minLargeObjectSize), NULL);
+    free(ptr);
+
+    long memoryPageSize = sysconf(_SC_PAGESIZE);
+    int sz = 1024*minLargeObjectSize;
+    ptr = pvalloc(sz);
+    ASSERT(ptr!=NULL &&                // align size up to the page size
+           scalableMallocLargeBlock(ptr, ((sz-1) | (memoryPageSize-1)) + 1), NULL);
+    free(ptr);
+
+    struct mallinfo info = mallinfo();
+    // right now mallinfo initialized by zero
+    ASSERT(!info.arena && !info.ordblks && !info.smblks && !info.hblks 
+           && !info.hblkhd && !info.usmblks && !info.fsmblks 
+           && !info.uordblks && !info.fordblks && !info.keepcost, NULL);
+
+#elif MALLOC_REPLACEMENT_AVAILABLE == 2
+
+    ptr = _aligned_malloc(minLargeObjectSize,16);
+    ASSERT(ptr!=NULL && scalableMallocLargeBlock(ptr, minLargeObjectSize), NULL);
+
+    ptr1 = _aligned_realloc(ptr, minLargeObjectSize*10,16);
+    ASSERT(ptr1!=NULL && scalableMallocLargeBlock(ptr1, minLargeObjectSize*10), NULL);
+    _aligned_free(ptr1);
+
+#endif
+
+    BigStruct *f = new BigStruct;
+    ASSERT(f!=NULL && scalableMallocLargeBlock(f, sizeof(BigStruct)), NULL);
+    delete f;
+
+    f = new BigStruct[10];
+    ASSERT(f!=NULL && scalableMallocLargeBlock(f, 10*sizeof(BigStruct)), NULL);
+    delete []f;
+
+    f = new(std::nothrow) BigStruct;
+    ASSERT(f!=NULL && scalableMallocLargeBlock(f, sizeof(BigStruct)), NULL);
+    delete f;
+
+    f = new(std::nothrow) BigStruct[2];
+    ASSERT(f!=NULL && scalableMallocLargeBlock(f, 2*sizeof(BigStruct)), NULL);
+    delete []f;
+
+#if _WIN32
+    std::string stdstring = "done";
+    const char* s = stdstring.c_str();
+#else
+    const char* s = "done";
+#endif
+    REPORT("%s\n", s);
+    return 0;
+}
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+
+#else  /* !MALLOC_REPLACEMENT_AVAILABLE */
+#include <stdio.h>
+
+int main(int , char *[]) {
+    printf("skip\n");
+}
+#endif /* !MALLOC_REPLACEMENT_AVAILABLE */
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_pure_c.c b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_pure_c.c
new file mode 100644 (file)
index 0000000..a9f1f2e
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#ifdef __cplusplus
+#error For testing purpose, this file should be compiled with a C compiler, not C++
+#endif /*__cplusplus */
+
+#include "tbb/scalable_allocator.h"
+#include <stdio.h>
+#include <assert.h>
+
+/*
+ *  The test is to check if the scalable_allocator.h and its functions
+ *  can be used from pure C programs; also some regression checks are done
+ */
+
+int main(void) {
+    size_t i, j;
+    void *p1, *p2;
+    for( i=0; i<=1<<16; ++i) {
+        p1 = scalable_malloc(i);
+        if( !p1 )
+            printf("Warning: there should be memory but scalable_malloc returned NULL\n");
+        scalable_free(p1);
+    }
+    p1 = p2 = NULL;
+    for( i=1024*1024; ; i/=2 )
+    {
+        scalable_free(p1);
+        p1 = scalable_realloc(p2, i);
+        p2 = scalable_calloc(i, 32);
+        if (p2) {
+            if (i<sizeof(size_t)) {
+                for (j=0; j<i; j++)
+                    assert(0==*((char*)p2+j));
+            } else {
+                for (j=0; j<i; j+=sizeof(size_t))
+                    assert(0==*((size_t*)p2+j));
+            }
+        }
+        scalable_free(p2);
+        p2 = scalable_malloc(i);
+        if (i==0) break;
+    }
+    for( i=1; i<1024*1024; i*=2 )
+    {
+        scalable_free(p1);
+        p1 = scalable_realloc(p2, i);
+        p2 = scalable_malloc(i);
+    }
+    scalable_free(p1);
+    scalable_free(p2);
+    printf("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_regression.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_malloc_regression.cpp
new file mode 100644 (file)
index 0000000..a6e5162
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+
+#include <stdio.h>
+#include "tbb/scalable_allocator.h"
+
+class minimalAllocFree {
+public:
+    void operator()(int size) const {
+        tbb::scalable_allocator<char> a;
+        char* str = a.allocate( size );
+        a.deallocate( str, size );
+    }
+};
+
+#include "harness.h"
+
+template<typename Body, typename Arg>
+void RunThread(const Body& body, const Arg& arg) {
+    NativeParallelForTask<Arg,Body> job(arg, body);
+    job.start();
+    job.wait_to_finish();
+}
+
+#include "harness_memory.h"
+
+// The regression test for bug #1518 where thread boot strap allocations "leaked"
+bool test_bootstrap_leak(void) {
+    // Check whether memory usage data can be obtained; if not, skip the test.
+    if( !GetMemoryUsage() )
+        return true;
+
+    /* In the bug 1518, each thread leaked ~384 bytes.
+       Initially, scalable allocator maps 1MB. Thus it is necessary to take out most of this space.
+       1MB is chunked into 16K blocks; of those, one block is for thread boot strap, and one more 
+       should be reserved for the test body. 62 blocks left, each can serve 15 objects of 1024 bytes.
+    */
+    const int alloc_size = 1024;
+    const int take_out_count = 15*62;
+
+    tbb::scalable_allocator<char> a;
+    char* array[take_out_count];
+    for( int i=0; i<take_out_count; ++i )
+        array[i] = a.allocate( alloc_size );
+
+    RunThread( minimalAllocFree(), alloc_size ); // for threading library to take some memory
+    size_t memory_in_use = GetMemoryUsage();
+    // Wait for memory usage data to "stabilize". The test number (1000) has nothing underneath.
+    for( int i=0; i<1000; i++) {
+        if( GetMemoryUsage()!=memory_in_use ) {
+            memory_in_use = GetMemoryUsage();
+            i = -1;
+        }
+    }
+
+    // Notice that 16K boot strap memory block is enough to serve 42 threads.
+    const int num_thread_runs = 200;
+    for( int i=0; i<num_thread_runs; ++i )
+        RunThread( minimalAllocFree(), alloc_size );
+
+    ptrdiff_t memory_leak = GetMemoryUsage() - memory_in_use;
+    if( memory_leak>0 ) { // possibly too strong?
+        REPORT( "Error: memory leak of up to %ld bytes\n", static_cast<long>(memory_leak));
+    }
+
+    for( int i=0; i<take_out_count; ++i )
+        a.deallocate( array[i], alloc_size );
+
+    return memory_leak<=0;
+}
+
+__TBB_TEST_EXPORT
+int main( int /*argc*/, char* argv[] ) {
+    bool passed = true;
+
+    passed &= test_bootstrap_leak();
+
+    if(passed) REPORT("done\n");
+    else       REPORT("%s failed\n", argv[0]);
+
+    return passed?0:1;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_model_plugin.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_model_plugin.cpp
new file mode 100644 (file)
index 0000000..79035d6
--- /dev/null
@@ -0,0 +1,221 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#if _WIN32 || _WIN64
+#include <windows.h>
+#else
+#include <dlfcn.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdexcept>
+#include "harness_report.h"
+
+#ifdef _USRDLL
+#include "tbb/task_scheduler_init.h"
+
+class CModel {
+public:
+    CModel(void) {};
+    static tbb::task_scheduler_init tbb_init;
+
+    void init_and_terminate( int );
+};
+
+tbb::task_scheduler_init CModel::tbb_init(1);
+
+//! Test that task::initialize and task::terminate work when doing nothing else.
+/** maxthread is treated as the "maximum" number of worker threads. */
+void CModel::init_and_terminate( int maxthread ) {
+    for( int i=0; i<200; ++i ) {
+        switch( i&3 ) {
+            default: {
+                tbb::task_scheduler_init init( rand() % maxthread + 1 );
+                break;
+            }
+            case 0: {
+                tbb::task_scheduler_init init;
+                break;
+            }
+            case 1: {
+                tbb::task_scheduler_init init( tbb::task_scheduler_init::automatic );
+                break;
+            }
+            case 2: {
+                tbb::task_scheduler_init init( tbb::task_scheduler_init::deferred );
+                init.initialize( rand() % maxthread + 1 );
+                init.terminate();
+                break;
+            }
+        }
+    }
+}
+
+extern "C"
+#if _WIN32 || _WIN64
+__declspec(dllexport)
+#endif
+void plugin_call(int maxthread)
+{
+    srand(2);
+    try {
+        CModel model;
+        model.init_and_terminate(maxthread);
+    } catch( std::runtime_error& error ) {
+        REPORT("ERROR: %s\n", error.what());
+    }
+}
+
+#else /* _USRDLL undefined */
+
+#define HARNESS_NO_ASSERT 1
+#include "harness.h"
+
+extern "C" void plugin_call(int);
+
+void report_error_in(const char* function_name)
+{
+#if _WIN32 || _WIN64
+    char* message;
+    int code = GetLastError();
+
+    FormatMessage(
+        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+        NULL, code,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+        (char*)&message, 0, NULL );
+#else
+    char* message = (char*)dlerror();
+    int code = 0;
+#endif
+    REPORT( "%s failed with error %d: %s\n", function_name, code, message);
+
+#if _WIN32 || _WIN64
+    LocalFree(message);
+#endif
+}
+
+int use_lot_of_tls() {
+    int count = 0;
+#if _WIN32 || _WIN64
+    DWORD last_handles[10];
+    DWORD result;
+    result = TlsAlloc();
+    while( result!=TLS_OUT_OF_INDEXES ) {
+        last_handles[++count%10] = result;
+        result = TlsAlloc();
+    }
+    for( int i=0; i<10; ++i )
+        TlsFree(last_handles[i]);
+#else
+    pthread_key_t last_handles[10];
+    pthread_key_t result;
+    int setspecific_dummy=10;
+    while( pthread_key_create(&result, NULL)==0 
+           && count < 4096 ) // Sun Solaris doesn't have any built-in limit, so we set something big enough
+    {
+        last_handles[++count%10] = result;
+        if(Verbose) REPORT("%d\n", count);
+        pthread_setspecific(result,&setspecific_dummy);
+    }
+    for( int i=0; i<10; ++i )
+        pthread_key_delete(last_handles[i]);
+#endif
+    return count-10;
+}
+
+typedef void (*PLUGIN_CALL)(int);
+
+__TBB_TEST_EXPORT
+int main(int argc, char* argv[]) {
+    ParseCommandLine( argc, argv );
+
+    PLUGIN_CALL my_plugin_call;
+
+    int tls_key_count = use_lot_of_tls();
+    if( Verbose )
+        REPORT("%d thread local objects allocated in advance\n", tls_key_count);
+
+    for( int i=1; i<100; ++i ) {  
+#if _WIN32 || _WIN64
+        HMODULE hLib = LoadLibrary("test_model_plugin.dll");
+        if (hLib==NULL){
+#if !__TBB_NO_IMPLICIT_LINKAGE
+            report_error_in("LoadLibrary");
+            return -1;
+#else
+            REPORT("skip\n");
+            return 0;
+#endif
+        }
+        my_plugin_call = (PLUGIN_CALL) GetProcAddress(hLib, "plugin_call");
+        if (my_plugin_call==NULL) {
+            report_error_in("GetProcAddress");
+            return -1;
+        }
+#else
+#if __APPLE__
+        const char *dllname = "test_model_plugin.dylib";
+#else
+        const char *dllname = "test_model_plugin.so";
+#endif
+        void* hLib = dlopen( dllname, RTLD_LAZY ); 
+        if (hLib==NULL){
+#if !__TBB_NO_IMPLICIT_LINKAGE
+            report_error_in("dlopen");
+            return -1;
+#else
+            REPORT("skip\n");
+            return 0;
+#endif
+        }
+        my_plugin_call = PLUGIN_CALL (dlsym(hLib, "plugin_call"));
+        if (my_plugin_call==NULL) {
+            report_error_in("dlsym");
+            return -1;
+        }
+#endif
+
+        if( Verbose )
+            REPORT("Iteration %d, calling plugin... ", i);
+        my_plugin_call(MaxThread);
+        if( Verbose )
+            REPORT("succeeded\n");
+
+#if _WIN32 || _WIN64
+        FreeLibrary(hLib);
+#else
+        dlclose(hLib);
+#endif
+    } // end for(1,100)
+
+    REPORT("done\n");
+    return 0;
+}
+
+#endif
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_mutex.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_mutex.cpp
new file mode 100644 (file)
index 0000000..8a13186
--- /dev/null
@@ -0,0 +1,630 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+//------------------------------------------------------------------------
+// Test TBB mutexes when used with parallel_for.h
+//
+// Usage: test_Mutex.exe [-v] nthread
+//
+// The -v option causes timing information to be printed.
+//
+// Compile with _OPENMP and -openmp
+//------------------------------------------------------------------------
+#include "tbb/spin_mutex.h"
+#include "tbb/spin_rw_mutex.h"
+#include "tbb/queuing_rw_mutex.h"
+#include "tbb/queuing_mutex.h"
+#include "tbb/mutex.h"
+#include "tbb/recursive_mutex.h"
+#include "tbb/null_mutex.h"
+#include "tbb/null_rw_mutex.h"
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+#include "tbb/tick_count.h"
+#include "tbb/atomic.h"
+#include "harness.h"
+#include <cstdlib>
+#include <cstdio>
+#if _OPENMP
+#include "test/OpenMP_Mutex.h"
+#endif /* _OPENMP */
+#include "tbb/tbb_profiling.h"
+
+#ifndef TBBTEST_LOW_WORKLOAD
+    #define TBBTEST_LOW_WORKLOAD TBB_USE_THREADING_TOOLS
+#endif
+
+// This test deliberately avoids a "using tbb" statement,
+// so that the error of putting types in the wrong namespace will be caught.
+
+template<typename M>
+struct Counter {
+    typedef M mutex_type;
+    M mutex;
+    volatile long value;
+};
+
+//! Function object for use with parallel_for.h.
+template<typename C>
+struct AddOne: NoAssign {
+    C& counter;
+    /** Increments counter once for each iteration in the iteration space. */
+    void operator()( tbb::blocked_range<size_t>& range ) const {
+        for( size_t i=range.begin(); i!=range.end(); ++i ) {
+            if( i&1 ) {
+                // Try implicit acquire and explicit release
+                typename C::mutex_type::scoped_lock lock(counter.mutex);
+                counter.value = counter.value+1;
+                lock.release();
+            } else {
+                // Try explicit acquire and implicit release
+                typename C::mutex_type::scoped_lock lock;
+                lock.acquire(counter.mutex);
+                counter.value = counter.value+1;
+            }
+        }
+    }
+    AddOne( C& counter_ ) : counter(counter_) {}
+};
+
+//! Adaptor for using ISO C++0x style mutex as a TBB-style mutex.
+template<typename M>
+class TBB_MutexFromISO_Mutex {
+    M my_iso_mutex;
+public:
+    typedef TBB_MutexFromISO_Mutex mutex_type;
+
+    class scoped_lock;
+    friend class scoped_lock;
+
+    class scoped_lock {
+        mutex_type* my_mutex;
+    public:
+        scoped_lock() : my_mutex(NULL) {}
+        scoped_lock( mutex_type& m ) : my_mutex(NULL) {
+            acquire(m);
+        }
+        scoped_lock( mutex_type& m, bool is_writer ) : my_mutex(NULL) {
+            acquire(m,is_writer);
+        }
+        void acquire( mutex_type& m ) {
+            m.my_iso_mutex.lock();
+            my_mutex = &m;
+        }
+        bool try_acquire( mutex_type& m ) {
+            if( m.my_iso_mutex.try_lock() ) {
+                my_mutex = &m;
+                return true;
+            } else {
+                return false;
+            }
+        }
+        void release() {
+            my_mutex->my_iso_mutex.unlock();
+            my_mutex = NULL;
+        }
+
+        // Methods for reader-writer mutex
+        // These methods can be instantiated only if M supports lock_read() and try_lock_read().
+        
+        void acquire( mutex_type& m, bool is_writer ) {
+            if( is_writer ) m.my_iso_mutex.lock();
+            else m.my_iso_mutex.lock_read();
+            my_mutex = &m;
+        } 
+        bool try_acquire( mutex_type& m, bool is_writer ) {
+            if( is_writer ? m.my_iso_mutex.try_lock() : m.my_iso_mutex.try_lock_read() ) {
+                my_mutex = &m;
+                return true;
+            } else {
+                return false;
+            }
+        }
+        bool upgrade_to_writer() {
+            my_mutex->my_iso_mutex.unlock();
+            my_mutex->my_iso_mutex.lock(); 
+            return false;
+        }
+        bool downgrade_to_reader() {
+            my_mutex->my_iso_mutex.unlock();
+            my_mutex->my_iso_mutex.lock_read(); 
+            return false;
+        }
+        ~scoped_lock() {
+            if( my_mutex ) 
+                release();
+        }
+    };    
+  
+    static const bool is_recursive_mutex = M::is_recursive_mutex;
+    static const bool is_rw_mutex = M::is_rw_mutex;
+};
+
+namespace tbb {
+    namespace profiling {
+        template<typename M>
+        void set_name( const TBB_MutexFromISO_Mutex<M>&, const char* ) {}  
+    }
+}
+
+//! Generic test of a TBB mutex type M.
+/** Does not test features specific to reader-writer locks. */
+template<typename M>
+void Test( const char * name ) {
+    REMARK("%s time = ",name);
+    Counter<M> counter;
+    counter.value = 0;
+    tbb::profiling::set_name(counter.mutex, name);
+#if TBBTEST_LOW_WORKLOAD
+    const int n = 10000;
+#else
+    const int n = 100000;
+#endif /* TBBTEST_LOW_WORKLOAD */
+    tbb::tick_count t0 = tbb::tick_count::now();
+    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,n/10),AddOne<Counter<M> >(counter));
+    tbb::tick_count t1 = tbb::tick_count::now();
+    REMARK("%g usec\n",(t1-t0).seconds());
+    if( counter.value!=n )
+        REPORT("ERROR for %s: counter.value=%ld\n",name,counter.value);
+}
+
+template<typename M, size_t N>
+struct Invariant {
+    typedef M mutex_type;
+    M mutex;
+    const char* mutex_name;
+    volatile long value[N];
+    volatile long single_value;
+    Invariant( const char* mutex_name_ ) :
+        mutex_name(mutex_name_)
+    {
+        single_value = 0;
+        for( size_t k=0; k<N; ++k )
+            value[k] = 0;
+        tbb::profiling::set_name(mutex, mutex_name_);
+    }
+    void update() {
+        for( size_t k=0; k<N; ++k )
+            ++value[k];
+    }
+    bool value_is( long expected_value ) const {
+        long tmp;
+        for( size_t k=0; k<N; ++k )
+            if( (tmp=value[k])!=expected_value ) {
+                REPORT("ERROR: %ld!=%ld\n", tmp, expected_value);
+                return false;
+            }
+        return true;
+    }
+    bool is_okay() {
+        return value_is( value[0] );
+    }
+};
+
+//! Function object for use with parallel_for.h.
+template<typename I>
+struct TwiddleInvariant: NoAssign {
+    I& invariant;
+    /** Increments counter once for each iteration in the iteration space. */
+    void operator()( tbb::blocked_range<size_t>& range ) const {
+        for( size_t i=range.begin(); i!=range.end(); ++i ) {
+            //! Every 8th access is a write access
+            bool write = (i%8)==7;
+            bool okay = true;
+            bool lock_kept = true;
+            if( (i/8)&1 ) {
+                // Try implicit acquire and explicit release
+                typename I::mutex_type::scoped_lock lock(invariant.mutex,write);
+                if( write ) {
+                    long my_value = invariant.value[0];
+                    invariant.update();
+                    if( i%16==7 ) {
+                        lock_kept = lock.downgrade_to_reader();
+                        if( !lock_kept )
+                            my_value = invariant.value[0] - 1;
+                        okay = invariant.value_is(my_value+1);
+                    }
+                } else {
+                    okay = invariant.is_okay();
+                    if( i%8==3 ) {
+                        long my_value = invariant.value[0];
+                        lock_kept = lock.upgrade_to_writer();
+                        if( !lock_kept )
+                            my_value = invariant.value[0];
+                        invariant.update();
+                        okay = invariant.value_is(my_value+1);
+                    }
+                }
+                lock.release();
+            } else {
+                // Try explicit acquire and implicit release
+                typename I::mutex_type::scoped_lock lock;
+                lock.acquire(invariant.mutex,write);
+                if( write ) {
+                    long my_value = invariant.value[0];
+                    invariant.update();
+                    if( i%16==7 ) {
+                        lock_kept = lock.downgrade_to_reader();
+                        if( !lock_kept )
+                            my_value = invariant.value[0] - 1;
+                        okay = invariant.value_is(my_value+1);
+                    }
+                } else {
+                    okay = invariant.is_okay();
+                    if( i%8==3 ) {
+                        long my_value = invariant.value[0];
+                        lock_kept = lock.upgrade_to_writer();
+                        if( !lock_kept )
+                            my_value = invariant.value[0];
+                        invariant.update();
+                        okay = invariant.value_is(my_value+1);
+                    }
+                }
+            }
+            if( !okay ) {
+                REPORT( "ERROR for %s at %ld: %s %s %s %s\n",invariant.mutex_name, long(i),
+                             write?"write,":"read,", write?(i%16==7?"downgrade,":""):(i%8==3?"upgrade,":""),
+                             lock_kept?"lock kept,":"lock not kept,", (i/8)&1?"imp/exp":"exp/imp" );
+            }
+        }
+    }
+    TwiddleInvariant( I& invariant_ ) : invariant(invariant_) {}
+};
+
+/** This test is generic so that we can test any other kinds of ReaderWriter locks we write later. */
+template<typename M>
+void TestReaderWriterLock( const char * mutex_name ) {
+    REMARK( "%s readers & writers time = ", mutex_name );
+    Invariant<M,8> invariant(mutex_name);
+#if TBBTEST_LOW_WORKLOAD
+    const size_t n = 10000;
+#else
+    const size_t n = 500000;
+#endif /* TBBTEST_LOW_WORKLOAD */
+    tbb::tick_count t0 = tbb::tick_count::now();
+    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,n/100),TwiddleInvariant<Invariant<M,8> >(invariant));
+    tbb::tick_count t1 = tbb::tick_count::now();
+    // There is either a writer or a reader upgraded to a writer for each 4th iteration
+    long expected_value = n/4;
+    if( !invariant.value_is(expected_value) )
+        REPORT("ERROR for %s: final invariant value is wrong\n",mutex_name);
+    REMARK( "%g usec\n", (t1-t0).seconds() );
+}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Suppress "conditional expression is constant" warning.
+    #pragma warning( push )
+    #pragma warning( disable: 4127 )
+#endif
+
+/** Test try_acquire_reader functionality of a non-reenterable reader-writer mutex */
+template<typename M>
+void TestTryAcquireReader_OneThread( const char * mutex_name ) {
+    M tested_mutex;
+    typename M::scoped_lock lock1;
+    if( M::is_rw_mutex ) {
+        if( lock1.try_acquire(tested_mutex, false) )
+            lock1.release();
+        else
+            REPORT("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
+        {
+            typename M::scoped_lock lock2(tested_mutex, false);
+            if( lock1.try_acquire(tested_mutex) )
+                REPORT("ERROR for %s: try_acquire succeeded though it should not\n", mutex_name);
+            lock2.release();
+            lock2.acquire(tested_mutex, true);
+            if( lock1.try_acquire(tested_mutex, false) )
+                REPORT("ERROR for %s: try_acquire succeeded though it should not\n", mutex_name);
+        }
+        if( lock1.try_acquire(tested_mutex, false) )
+            lock1.release();
+        else
+            REPORT("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
+    }
+}
+
+/** Test try_acquire functionality of a non-reenterable mutex */
+template<typename M>
+void TestTryAcquire_OneThread( const char * mutex_name ) {
+    M tested_mutex;
+    typename M::scoped_lock lock1;
+    if( lock1.try_acquire(tested_mutex) )
+        lock1.release();
+    else
+        REPORT("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
+    {
+        if( M::is_recursive_mutex ) {
+            typename M::scoped_lock lock2(tested_mutex);
+            if( lock1.try_acquire(tested_mutex) )
+                lock1.release();
+            else
+                REPORT("ERROR for %s: try_acquire on recursive lock failed though it should not\n", mutex_name);
+            //windows.. -- both are recursive
+        } else {
+            typename M::scoped_lock lock2(tested_mutex);
+            if( lock1.try_acquire(tested_mutex) )
+                REPORT("ERROR for %s: try_acquire succeeded though it should not\n", mutex_name);
+        }
+    }
+    if( lock1.try_acquire(tested_mutex) )
+        lock1.release();
+    else
+        REPORT("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
+} 
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif
+
+const int RecurN = 4;
+int RecurArray[ RecurN ];
+tbb::recursive_mutex RecurMutex[ RecurN ];
+
+struct RecursiveAcquisition {
+    /** x = number being decoded in base N
+        max_lock = index of highest lock acquired so far
+        mask = bit mask; ith bit set if lock i has been acquired. */
+    void Body( size_t x, int max_lock=-1, unsigned int mask=0 ) const
+    {
+        int i = (int) (x % RecurN);
+        bool first = (mask&1U<<i)==0;
+        if( first ) {
+            // first time to acquire lock
+            if( i<max_lock ) 
+                // out of order acquisition might lead to deadlock, so stop
+                return;
+            max_lock = i;
+        }
+
+        if( (i&1)!=0 ) {
+            // acquire lock on location RecurArray[i] using explict acquire
+            tbb::recursive_mutex::scoped_lock r_lock;
+            r_lock.acquire( RecurMutex[i] );
+            int a = RecurArray[i];
+            ASSERT( (a==0)==first, "should be either a==0 if it is the first time to acquire the lock or a!=0 otherwise" );
+            ++RecurArray[i];
+            if( x ) 
+                Body( x/RecurN, max_lock, mask|1U<<i );
+            --RecurArray[i];
+            ASSERT( a==RecurArray[i], "a is not equal to RecurArray[i]" );                        
+
+            // release lock on location RecurArray[i] using explicit release; otherwise, use implicit one
+            if( (i&2)!=0 ) r_lock.release();
+        } else {
+            // acquire lock on location RecurArray[i] using implicit acquire
+            tbb::recursive_mutex::scoped_lock r_lock( RecurMutex[i] );
+            int a = RecurArray[i];
+
+            ASSERT( (a==0)==first, "should be either a==0 if it is the first time to acquire the lock or a!=0 otherwise" );
+
+            ++RecurArray[i];
+            if( x ) 
+                Body( x/RecurN, max_lock, mask|1U<<i );
+            --RecurArray[i];
+
+            ASSERT( a==RecurArray[i], "a is not equal to RecurArray[i]" );                        
+
+            // release lock on location RecurArray[i] using explicit release; otherwise, use implicit one
+            if( (i&2)!=0 ) r_lock.release();
+        }
+    }
+
+    void operator()( const tbb::blocked_range<size_t> &r ) const
+    {   
+        for( size_t x=r.begin(); x<r.end(); x++ ) {
+            Body( x );
+        }
+    }
+};
+
+/** This test is generic so that we may test other kinds of recursive mutexes.*/
+template<typename M>
+void TestRecursiveMutex( const char * mutex_name )
+{
+    for ( int i = 0; i < RecurN; ++i ) {
+        tbb::profiling::set_name(RecurMutex[i], mutex_name);
+    }
+    tbb::tick_count t0 = tbb::tick_count::now();
+    tbb::parallel_for(tbb::blocked_range<size_t>(0,10000,500), RecursiveAcquisition());
+    tbb::tick_count t1 = tbb::tick_count::now();
+    REMARK( "%s recursive mutex time = %g usec\n", mutex_name, (t1-t0).seconds() );
+}
+
+template<typename C>
+struct NullRecursive: NoAssign {
+    void recurse_till( size_t i, size_t till ) const {
+        if( i==till ) {
+            counter.value = counter.value+1;
+            return;
+        }
+        if( i&1 ) {
+            typename C::mutex_type::scoped_lock lock2(counter.mutex);
+            recurse_till( i+1, till );
+            lock2.release();
+        } else {
+            typename C::mutex_type::scoped_lock lock2;
+            lock2.acquire(counter.mutex);
+            recurse_till( i+1, till );
+        }
+    }
+
+    void operator()( tbb::blocked_range<size_t>& range ) const {
+        typename C::mutex_type::scoped_lock lock(counter.mutex);
+        recurse_till( range.begin(), range.end() );
+    }
+    NullRecursive( C& counter_ ) : counter(counter_) {
+        ASSERT( C::mutex_type::is_recursive_mutex, "Null mutex should be a recursive mutex." );
+    }
+    C& counter;
+};
+
+template<typename M>
+struct NullUpgradeDowngrade: NoAssign {
+    void operator()( tbb::blocked_range<size_t>& range ) const {
+        typename M::scoped_lock lock2;
+        for( size_t i=range.begin(); i!=range.end(); ++i ) {
+            if( i&1 ) {
+                typename M::scoped_lock lock1(my_mutex, true) ;
+                if( lock1.downgrade_to_reader()==false )
+                    REPORT("ERROR for %s: downgrade should always succeed\n", name);
+            } else {
+                lock2.acquire( my_mutex, false );
+                if( lock2.upgrade_to_writer()==false )
+                    REPORT("ERROR for %s: upgrade should always succeed\n", name);
+                lock2.release();
+            }
+        }
+    }
+
+    NullUpgradeDowngrade( M& m_, const char* n_ ) : my_mutex(m_), name(n_) {}
+    M& my_mutex;
+    const char* name;
+} ;
+
+template<typename M>
+void TestNullMutex( const char * name ) {
+    Counter<M> counter;
+    counter.value = 0;
+    const int n = 100;
+    if( Verbose ) REPORT("%s ",name);
+    {
+        tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10),AddOne<Counter<M> >(counter));
+    }
+    counter.value = 0;
+    {
+        tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10),NullRecursive<Counter<M> >(counter));
+    }
+
+}
+
+template<typename M>
+void TestNullRWMutex( const char * name ) {
+    if( Verbose ) REPORT("%s ",name);
+    const int n = 100;
+    M m;
+    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10),NullUpgradeDowngrade<M>(m, name));
+}
+
+//! Test ISO C++0x compatibility portion of TBB mutex 
+template<typename M>
+void TestISO( const char * name ) {
+    typedef TBB_MutexFromISO_Mutex<M> tbb_from_iso;
+    Test<tbb_from_iso>( name );
+}
+
+//! Test ISO C++0x try_lock functionality of a non-reenterable mutex */
+template<typename M>
+void TestTryAcquire_OneThreadISO( const char * name ) {
+    typedef TBB_MutexFromISO_Mutex<M> tbb_from_iso;
+    TestTryAcquire_OneThread<tbb_from_iso>( name );
+}
+
+//! Test ISO-like C++0x compatibility portion of TBB reader-writer mutex 
+template<typename M>
+void TestReaderWriterLockISO( const char * name ) {
+    typedef TBB_MutexFromISO_Mutex<M> tbb_from_iso;
+    TestReaderWriterLock<tbb_from_iso>( name );
+    TestTryAcquireReader_OneThread<tbb_from_iso>( name );
+}
+
+//! Test ISO C++0x compatibility portion of TBB recursive mutex 
+template<typename M>
+void TestRecursiveMutexISO( const char * name ) {
+    typedef TBB_MutexFromISO_Mutex<M> tbb_from_iso;
+    TestRecursiveMutex<tbb_from_iso>(name); 
+}
+
+#include "tbb/task_scheduler_init.h"
+
+__TBB_TEST_EXPORT
+int main( int argc, char * argv[] ) {
+    // Default is to run on two threads
+    MinThread = MaxThread = 2;
+    ParseCommandLine( argc, argv );
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        tbb::task_scheduler_init init( p );
+        REMARK( "testing with %d workers\n", static_cast<int>(p) );
+#if TBBTEST_LOW_WORKLOAD
+        // The amount of work is decreased in this mode to bring the length 
+        // of the runs under tools into the tolerable limits.
+        const int n = 1;
+#else
+        const int n = 3;
+#endif
+        // Run each test several times.
+        for( int i=0; i<n; ++i ) {
+            TestNullMutex<tbb::null_mutex>( "Null Mutex" );
+            TestNullMutex<tbb::null_rw_mutex>( "Null RW Mutex" );
+            TestNullRWMutex<tbb::null_rw_mutex>( "Null RW Mutex" );
+            Test<tbb::spin_mutex>( "Spin Mutex" );
+#if _OPENMP
+            Test<OpenMP_Mutex>( "OpenMP_Mutex" );
+#endif /* _OPENMP */
+            Test<tbb::queuing_mutex>( "Queuing Mutex" );
+            Test<tbb::mutex>( "Wrapper Mutex" );
+            Test<tbb::recursive_mutex>( "Recursive Mutex" );
+            Test<tbb::queuing_rw_mutex>( "Queuing RW Mutex" );
+            Test<tbb::spin_rw_mutex>( "Spin RW Mutex" );
+
+            TestTryAcquire_OneThread<tbb::spin_mutex>("Spin Mutex");
+            TestTryAcquire_OneThread<tbb::queuing_mutex>("Queuing Mutex");
+#if USE_PTHREAD 
+            // under ifdef because on Windows tbb::mutex is reenterable and the test will fail
+            TestTryAcquire_OneThread<tbb::mutex>("Wrapper Mutex");
+#endif /* USE_PTHREAD */
+            TestTryAcquire_OneThread<tbb::recursive_mutex>( "Recursive Mutex" );
+            TestTryAcquire_OneThread<tbb::spin_rw_mutex>("Spin RW Mutex"); // only tests try_acquire for writers
+            TestTryAcquire_OneThread<tbb::queuing_rw_mutex>("Queuing RW Mutex"); // only tests try_acquire for writers
+            TestTryAcquireReader_OneThread<tbb::spin_rw_mutex>("Spin RW Mutex"); 
+            TestTryAcquireReader_OneThread<tbb::queuing_rw_mutex>("Queuing RW Mutex"); 
+
+            TestReaderWriterLock<tbb::queuing_rw_mutex>( "Queuing RW Mutex" );
+            TestReaderWriterLock<tbb::spin_rw_mutex>( "Spin RW Mutex" );
+
+            TestRecursiveMutex<tbb::recursive_mutex>( "Recursive Mutex" );
+
+            // Test ISO C++0x interface  
+            TestISO<tbb::spin_mutex>( "ISO Spin Mutex" );
+            TestISO<tbb::mutex>( "ISO Mutex" );
+            TestISO<tbb::spin_rw_mutex>( "ISO Spin RW Mutex" );
+            TestISO<tbb::recursive_mutex>( "ISO Recursive Mutex" );
+            TestTryAcquire_OneThreadISO<tbb::spin_mutex>( "ISO Spin Mutex" );
+#if USE_PTHREAD 
+            // under ifdef because on Windows tbb::mutex is reenterable and the test will fail
+            TestTryAcquire_OneThreadISO<tbb::mutex>( "ISO Mutex" );
+#endif /* USE_PTHREAD */
+            TestTryAcquire_OneThreadISO<tbb::spin_rw_mutex>( "ISO Spin RW Mutex" );
+            TestTryAcquire_OneThreadISO<tbb::recursive_mutex>( "ISO Recursive Mutex" );
+            TestReaderWriterLockISO<tbb::spin_rw_mutex>( "ISO Spin RW Mutex" );
+            TestRecursiveMutexISO<tbb::recursive_mutex>( "ISO Recursive Mutex" );
+        }
+        REMARK( "calling destructor for task_scheduler_init\n" );
+    }
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_mutex_native_threads.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_mutex_native_threads.cpp
new file mode 100644 (file)
index 0000000..948b7a7
--- /dev/null
@@ -0,0 +1,232 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/spin_mutex.h"
+#include "tbb/queuing_mutex.h"
+#include "tbb/queuing_rw_mutex.h"
+#include "tbb/spin_rw_mutex.h"
+#include "tbb/tick_count.h"
+#include "tbb/atomic.h"
+
+#include "harness.h"
+
+// This test deliberately avoids a "using tbb" statement,
+// so that the error of putting types in the wrong namespace will be caught.
+
+template<typename M>
+struct Counter {
+    typedef M mutex_type;
+    M mutex;
+    volatile long value; 
+    void flog_once( size_t mode );
+};
+
+template<typename M>
+void Counter<M>::flog_once(size_t mode)
+/** Increments counter once for each iteration in the iteration space. */
+{
+    if( mode&1 ) {
+        // Try implicit acquire and explicit release
+        typename mutex_type::scoped_lock lock(mutex);
+        value = value+1;
+        lock.release();
+    } else {
+        // Try explicit acquire and implicit release
+        typename mutex_type::scoped_lock lock;
+        lock.acquire(mutex);
+        value = value+1;
+    }
+}
+
+template<typename M, long N>
+struct Invariant {
+    typedef M mutex_type;
+    M mutex;
+    const char* mutex_name;
+    volatile long value[N];
+    volatile long single_value;
+    Invariant( const char* mutex_name_ ) :
+        mutex_name(mutex_name_)
+    {
+        single_value = 0;
+        for( long k=0; k<N; ++k )
+            value[k] = 0;
+    }
+    void update() {
+        for( long k=0; k<N; ++k )
+            ++value[k];
+    }
+    bool value_is( long expected_value ) const {
+        long tmp;
+        for( long k=0; k<N; ++k )
+            if( (tmp=value[k])!=expected_value ) {
+                REPORT("ERROR: %ld!=%ld\n", tmp, expected_value);
+                return false;
+            }
+        return true;
+    }
+    bool is_okay() {
+        return value_is( value[0] );
+    }
+    void flog_once( size_t mode ); 
+};
+
+template<typename M, long N>
+void Invariant<M,N>::flog_once( size_t mode )
+{
+    //! Every 8th access is a write access
+    bool write = (mode%8)==7;
+    bool okay = true;
+    bool lock_kept = true;
+    if( (mode/8)&1 ) {
+        // Try implicit acquire and explicit release
+        typename mutex_type::scoped_lock lock(mutex,write);
+        if( write ) {
+            long my_value = value[0];
+            update();
+            if( mode%16==7 ) {
+                lock_kept = lock.downgrade_to_reader();
+                if( !lock_kept )
+                    my_value = value[0] - 1;
+                okay = value_is(my_value+1);
+            }
+        } else {
+            okay = is_okay();
+            if( mode%8==3 ) {
+                long my_value = value[0];
+                lock_kept = lock.upgrade_to_writer();
+                if( !lock_kept )
+                    my_value = value[0];
+                update();
+                okay = value_is(my_value+1);
+            }
+        }
+        lock.release();
+    } else {
+        // Try explicit acquire and implicit release
+        typename mutex_type::scoped_lock lock;
+        lock.acquire(mutex,write);
+        if( write ) {
+            long my_value = value[0];
+            update();
+            if( mode%16==7 ) {
+                lock_kept = lock.downgrade_to_reader();
+                if( !lock_kept )
+                    my_value = value[0] - 1;
+                okay = value_is(my_value+1);
+            }
+        } else {
+            okay = is_okay();
+            if( mode%8==3 ) {
+                long my_value = value[0];
+                lock_kept = lock.upgrade_to_writer();
+                if( !lock_kept )
+                    my_value = value[0];
+                update();
+                okay = value_is(my_value+1);
+            }
+        }
+    }
+    if( !okay ) {
+        REPORT( "ERROR for %s at %ld: %s %s %s %s\n",mutex_name, long(mode),
+                write?"write,":"read,", write?(mode%16==7?"downgrade,":""):(mode%8==3?"upgrade,":""),
+                lock_kept?"lock kept,":"lock not kept,", (mode/8)&1?"imp/exp":"exp/imp" );
+    }
+}
+
+static tbb::atomic<size_t> Order;
+
+template<typename State, long TestSize>
+struct Work: NoAssign {
+    static const size_t chunk = 100;
+    State& state;
+    Work( State& state_ ) : state(state_) {}
+    void operator()( int ) const {
+        size_t step;
+        while( (step=Order.fetch_and_add<tbb::acquire>(chunk))<TestSize )
+            for( size_t i=0; i<chunk && step<TestSize; ++i, ++step ) 
+                state.flog_once(step);
+    }
+};
+
+//! Generic test of a TBB Mutex type M.
+/** Does not test features specific to reader-writer locks. */
+template<typename M>
+void Test( const char * name, int nthread ) {
+    if( Verbose )
+        REPORT("testing %s\n",name);
+    Counter<M> counter;
+    counter.value = 0;
+    Order = 0;
+    const long test_size = 100000;
+    tbb::tick_count t0 = tbb::tick_count::now();
+    NativeParallelFor( nthread, Work<Counter<M>, test_size>(counter) );
+    tbb::tick_count t1 = tbb::tick_count::now();
+
+    if( Verbose )
+        REPORT("%s time = %g usec\n",name, (t1-t0).seconds() );
+    if( counter.value!=test_size )
+        REPORT("ERROR for %s: counter.value=%ld != %ld=test_size\n",name,counter.value,test_size);
+}
+
+
+//! Generic test of TBB ReaderWriterMutex type M
+template<typename M>
+void TestReaderWriter( const char * mutex_name, int nthread ) {
+    if( Verbose )
+        REPORT("testing %s\n",mutex_name);
+    Invariant<M,8> invariant(mutex_name);
+    Order = 0;
+    static const long test_size = 1000000;
+    tbb::tick_count t0 = tbb::tick_count::now();
+    NativeParallelFor( nthread, Work<Invariant<M,8>, test_size>(invariant) );
+    tbb::tick_count t1 = tbb::tick_count::now();
+    // There is either a writer or a reader upgraded to a writer for each 4th iteration
+    long expected_value = test_size/4;
+    if( !invariant.value_is(expected_value) )
+        REPORT("ERROR for %s: final invariant value is wrong\n",mutex_name);
+    if( Verbose )
+        REPORT("%s readers & writers time = %g usec\n",mutex_name,(t1-t0).seconds());
+}
+
+__TBB_TEST_EXPORT
+int main( int argc, char * argv[] ) {
+    ParseCommandLine( argc, argv );
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        if( Verbose )
+            REPORT( "testing with %d threads\n", p );
+        Test<tbb::spin_mutex>( "spin_mutex", p );
+        Test<tbb::queuing_mutex>( "queuing_mutex", p );
+        Test<tbb::queuing_rw_mutex>( "queuing_rw_mutex", p );
+        Test<tbb::spin_rw_mutex>( "spin_rw_mutex", p );
+        TestReaderWriter<tbb::queuing_rw_mutex>( "queuing_rw_mutex", p );
+        TestReaderWriter<tbb::spin_rw_mutex>( "spin_rw_mutex", p );
+    }
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_openmp.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_openmp.cpp
new file mode 100644 (file)
index 0000000..4ea88de
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Test mixing OpenMP and TBB
+
+/* SCR #471 
+ Bellow is workaround to compile test within enviroment of Intel Compiler
+ but by Microsoft Compiler. So, there is wrong "omp.h" file included and
+ manifest section is missed from .exe file - restoring here.
+ */
+#if !defined(__INTEL_COMPILER) && _MSC_VER >= 1400
+    #include <crtassem.h>
+    #if !defined(_OPENMP)
+        #define _OPENMP
+        #if defined(_DEBUG)
+            #pragma comment(lib, "vcompd")
+        #else   // _DEBUG
+            #pragma comment(lib, "vcomp")
+        #endif  // _DEBUG
+    #endif // _OPENMP
+
+    #if defined(_DEBUG)
+        #if defined(_M_IX86)
+            #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
+                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".DebugOpenMP' "         \
+                "version='" _CRT_ASSEMBLY_VERSION "' "                          \
+                "processorArchitecture='x86' "                                  \
+                "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
+        #elif defined(_M_AMD64)
+            #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
+                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".DebugOpenMP' "         \
+                "version='" _CRT_ASSEMBLY_VERSION "' "                          \
+                "processorArchitecture='amd64' "                                  \
+                "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
+        #elif defined(_M_IA64)
+            #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
+                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".DebugOpenMP' "         \
+                "version='" _CRT_ASSEMBLY_VERSION "' "                          \
+                "processorArchitecture='ia64' "                                  \
+                "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
+        #endif
+    #else   // _DEBUG
+        #if defined(_M_IX86)
+            #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
+                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".OpenMP' "              \
+                "version='" _CRT_ASSEMBLY_VERSION "' "                          \
+                "processorArchitecture='x86' "                                  \
+                "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
+        #elif defined(_M_AMD64)
+            #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
+                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".OpenMP' "              \
+                "version='" _CRT_ASSEMBLY_VERSION "' "                          \
+                "processorArchitecture='amd64' "                                  \
+                "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
+        #elif defined(_M_IA64)
+            #pragma comment(linker,"/manifestdependency:\"type='win32' "            \
+                "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".OpenMP' "              \
+                "version='" _CRT_ASSEMBLY_VERSION "' "                          \
+                "processorArchitecture='ia64' "                                  \
+                "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
+        #endif
+    #endif  // _DEBUG
+    #define _OPENMP_NOFORCE_MANIFEST
+#endif
+
+#include <omp.h>
+
+
+typedef short T;
+
+void SerialConvolve( T c[], const T a[], int m, const T b[], int n ) {
+    for( int i=0; i<m+n-1; ++i ) {
+        int start = i<n ? 0 : i-n+1;
+        int finish = i<m ? i+1 : m; 
+        T sum = 0;
+        for( int j=start; j<finish; ++j ) 
+            sum += a[j]*b[i-j];
+        c[i] = sum;
+    }
+}
+
+#include "tbb/blocked_range.h"
+#include "tbb/parallel_for.h"
+#include "tbb/parallel_reduce.h"
+#include "tbb/task_scheduler_init.h"
+#include "harness.h"
+
+using namespace tbb;
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Suppress overzealous warning about short+=short
+    #pragma warning( push )
+    #pragma warning( disable: 4244 )
+#endif
+
+class InnerBody: NoAssign {
+    const T* my_a;
+    const T* my_b;
+    const int i;
+public:
+    T sum;
+    InnerBody( T /*c*/[], const T a[], const T b[], int i ) :
+        my_a(a), my_b(b), sum(0), i(i)
+    {}
+    InnerBody( InnerBody& x, split ) :
+        my_a(x.my_a), my_b(x.my_b), sum(0), i(x.i)
+    { 
+    }
+    void join( InnerBody& x ) {sum += x.sum;}
+    void operator()( const blocked_range<int>& range ) {
+        for( int j=range.begin(); j!=range.end(); ++j ) 
+            sum += my_a[j]*my_b[i-j];
+    }
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif
+
+//! Test OpenMMP loop around TBB loop
+void OpenMP_TBB_Convolve( T c[], const T a[], int m, const T b[], int n ) {
+    if( Verbose )
+        REPORT("testing OpenMP loop around TBB loop\n");
+#pragma omp parallel 
+    {
+        task_scheduler_init init;
+#pragma omp for
+        for( int i=0; i<m+n-1; ++i ) {
+            int start = i<n ? 0 : i-n+1;
+            int finish = i<m ? i+1 : m; 
+            InnerBody body(c,a,b,i);
+            parallel_reduce( blocked_range<int>(start,finish,10), body );
+            c[i] = body.sum;
+        }
+    }
+}
+
+class OuterBody: NoAssign {
+    const T* my_a;
+    const T* my_b;
+    T* my_c;
+    const int m;
+    const int n;
+public:
+    T sum;
+    OuterBody( T c[], const T a[], int m_, const T b[], int n_ ) :
+        my_c(c), my_a(a), my_b(b), m(m_), n(n_)
+    {}
+    void operator()( const blocked_range<int>& range ) const {
+        for( int i=range.begin(); i!=range.end(); ++i ) {
+            int start = i<n ? 0 : i-n+1;
+            int finish = i<m ? i+1 : m; 
+            T sum = 0;
+#pragma omp parallel for reduction(+:sum)
+            for( int j=start; j<finish; ++j ) 
+                sum += my_a[j]*my_b[i-j];
+            my_c[i] = sum;
+        }
+    }
+};
+
+//! Test TBB loop around OpenMP loop
+void TBB_OpenMP_Convolve( T c[], const T a[], int m, const T b[], int n ) {
+    if( Verbose )
+        REPORT("testing TBB loop around OpenMP loop\n");
+    parallel_for( blocked_range<int>(0,m+n-1,10), OuterBody( c, a, m, b, n ) );
+}
+
+#include <stdio.h>
+
+const int M = 17*17;
+const int N = 13*13;
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+#ifdef _PGO_INSTRUMENT
+    REPORT("Warning: test_openmp.exe has problems if compiled with -prof-genx; skipping\n");
+    return 0;
+#endif
+    ParseCommandLine(argc,argv);
+    MinThread = 1;
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        T a[M];
+        T b[N];
+        for( int m=1; m<=M; m*=17 ) {
+            for( int n=1; n<=M; n*=13 ) {
+                for( int i=0; i<m; ++i ) a[i] = T(1+i/5);
+                for( int i=0; i<n; ++i ) b[i] = T(1+i/7);
+                T expected[M+N];
+                SerialConvolve( expected, a, m, b, n );
+                task_scheduler_init init(p);
+                T actual[M+N];
+                for( int k = 0; k<2; ++k ) {
+                    memset( actual, -1, sizeof(actual) );
+                    switch(k) {
+                        case 0: 
+                            TBB_OpenMP_Convolve( actual, a, m, b, n ); 
+                            break;
+                        case 1: 
+                            OpenMP_TBB_Convolve( actual, a, m, b, n ); 
+                            break;
+                    }
+                    for( int i=0; i<m+n-1; ++i ) {
+                        ASSERT( actual[i]==expected[i], NULL );
+                    }
+                }
+            }
+        } 
+    }
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_do.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_do.cpp
new file mode 100644 (file)
index 0000000..3b74538
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/parallel_do.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/atomic.h"
+#include "harness.h"
+#include "harness_cpu.h"
+
+#if defined(_MSC_VER) && defined(_Wp64)
+    // Workaround for overzealous compiler warnings in /Wp64 mode
+    #pragma warning (disable: 4267)
+#endif /* _MSC_VER && _Wp64 */
+
+#define N_DEPTHS     20
+
+static tbb::atomic<int> g_values_counter;
+
+class value_t {
+    size_t x;
+    value_t& operator= ( const value_t& );
+public:
+    value_t ( size_t xx ) : x(xx) { ++g_values_counter; }
+    value_t ( const value_t& v ) : x(v.value()) { ++g_values_counter; }
+    ~value_t () { --g_values_counter; }
+    size_t value() const volatile { return x; }
+};
+
+#include "harness_iterator.h"
+
+static size_t g_tasks_expected = 0;
+static tbb::atomic<size_t> g_tasks_observed;
+
+size_t FindNumOfTasks ( size_t max_depth ) {
+    if( max_depth == 0 )
+        return 1;
+    return  max_depth * FindNumOfTasks( max_depth - 1 ) + 1;
+}
+
+//! Simplest form of the parallel_do functor object.
+class FakeTaskGeneratorBody {
+public:
+    //! The simplest form of the function call operator
+    /** It does not allow adding new tasks during its execution. **/
+    void operator() ( value_t depth ) const {
+        g_tasks_observed += FindNumOfTasks(depth.value());
+    }
+};
+
+/** Work item is passed by reference here. **/
+class FakeTaskGeneratorBody_RefVersion {
+public:
+    void operator() ( value_t& depth ) const {
+        g_tasks_observed += FindNumOfTasks(depth.value());
+    }
+};
+
+/** Work item is passed by reference to const here. **/
+class FakeTaskGeneratorBody_ConstRefVersion {
+public:
+    void operator() ( const value_t& depth ) const {
+        g_tasks_observed += FindNumOfTasks(depth.value());
+    }
+};
+
+/** Work item is passed by reference to volatile here. **/
+class FakeTaskGeneratorBody_VolatileRefVersion {
+public:
+    void operator() ( volatile value_t& depth, tbb::parallel_do_feeder<value_t>& ) const {
+        g_tasks_observed += FindNumOfTasks(depth.value());
+    }
+};
+
+void do_work ( const value_t& depth, tbb::parallel_do_feeder<value_t>& feeder ) {
+    ++g_tasks_observed;
+    size_t  d=depth.value();
+    --d;
+    for( size_t i = 0; i < depth.value(); ++i)
+        feeder.add(value_t(d));
+}
+
+//! Standard form of the parallel_do functor object.
+/** Allows adding new work items on the fly. **/
+class TaskGeneratorBody
+{
+public:
+    //! This form of the function call operator can be used when the body needs to add more work during the processing
+    void operator() ( value_t depth, tbb::parallel_do_feeder<value_t>& feeder ) const {
+        do_work(depth, feeder);
+    }
+private:
+    // Assert that parallel_do does not ever access body constructors
+    TaskGeneratorBody () {}
+    TaskGeneratorBody ( const TaskGeneratorBody& );
+    // TestBody() needs access to the default constructor
+    template<class Body, class Iterator> friend void TestBody( size_t );
+}; // class TaskGeneratorBody
+
+/** Work item is passed by reference here. **/
+class TaskGeneratorBody_RefVersion
+{
+public:
+    void operator() ( value_t& depth, tbb::parallel_do_feeder<value_t>& feeder ) const {
+        do_work(depth, feeder);
+    }
+}; // class TaskGeneratorBody
+
+/** Work item is passed as const here. Compilers must ignore the const qualifier. **/
+class TaskGeneratorBody_ConstVersion
+{
+public:
+    void operator() ( const value_t depth, tbb::parallel_do_feeder<value_t>& feeder ) const {
+        do_work(depth, feeder);
+    }
+}; // class TaskGeneratorBody
+
+/** Work item is passed by reference to const here. **/
+class TaskGeneratorBody_ConstRefVersion
+{
+public:
+    void operator() ( const value_t& depth, tbb::parallel_do_feeder<value_t>& feeder ) const {
+        do_work(depth, feeder);
+    }
+}; // class TaskGeneratorBody
+
+/** Work item is passed by reference to volatile here. **/
+class TaskGeneratorBody_VolatileRefVersion
+{
+public:
+    void operator() ( volatile value_t& depth, tbb::parallel_do_feeder<value_t>& feeder ) const {
+        do_work(const_cast<value_t&>(depth), feeder);
+    }
+}; // class TaskGeneratorBody
+
+/** Work item is passed by reference to volatile here. **/
+class TaskGeneratorBody_ConstVolatileRefVersion
+{
+public:
+    void operator() ( const volatile value_t& depth, tbb::parallel_do_feeder<value_t>& feeder ) const {
+        do_work(const_cast<value_t&>(depth), feeder);
+    }
+}; // class TaskGeneratorBody
+
+
+static value_t g_depths[N_DEPTHS] = {0, 1, 2, 3, 4, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 0, 1, 2};
+
+template<class Body, class Iterator>
+void TestBody ( size_t depth ) {
+    typedef typename std::iterator_traits<Iterator>::value_type value_type;
+    value_type a_depths[N_DEPTHS] = {0, 1, 2, 3, 4, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 0, 1, 2};
+    Body body;
+    Iterator begin(a_depths);
+    Iterator end(a_depths + depth);
+    g_tasks_observed = 0;
+    tbb::parallel_do(begin, end, body);
+    ASSERT (g_tasks_observed == g_tasks_expected, NULL);
+}
+
+template<class Iterator>
+void TestIterator_RvalueOnly ( int /*nthread*/, size_t depth ) {
+    g_values_counter = 0;
+    TestBody<FakeTaskGeneratorBody, Iterator> (depth);
+    TestBody<FakeTaskGeneratorBody_ConstRefVersion, Iterator> (depth);
+    TestBody<TaskGeneratorBody, Iterator> (depth);
+    TestBody<TaskGeneratorBody_ConstVersion, Iterator> (depth);
+    TestBody<TaskGeneratorBody_ConstRefVersion, Iterator> (depth);
+}
+
+template<class Iterator>
+void TestIterator ( int nthread, size_t depth ) {
+    TestIterator_RvalueOnly<Iterator>(nthread, depth);
+    TestBody<FakeTaskGeneratorBody_RefVersion, Iterator> (depth);
+    TestBody<FakeTaskGeneratorBody_VolatileRefVersion, Iterator> (depth);
+    TestBody<TaskGeneratorBody_RefVersion, Iterator> (depth);
+    TestBody<TaskGeneratorBody_VolatileRefVersion, Iterator> (depth);
+    TestBody<TaskGeneratorBody_ConstVolatileRefVersion, Iterator> (depth);
+}
+
+void Run( int nthread ) {
+    for( size_t depth = 0; depth <= N_DEPTHS; ++depth ) {
+        g_tasks_expected = 0;
+        for ( size_t i=0; i < depth; ++i )
+            g_tasks_expected += FindNumOfTasks( g_depths[i].value() );
+        // Test for iterators over values convertible to work item type
+        TestIterator_RvalueOnly<size_t*>(nthread, depth);
+        // Test for random access iterators
+        TestIterator<value_t*>(nthread, depth);
+        // Test for input iterators
+        TestIterator<Harness::InputIterator<value_t> >(nthread, depth);
+        // Test for forward iterators
+        TestIterator<Harness::ForwardIterator<value_t> >(nthread, depth);
+    }
+}
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    MinThread=1;
+    MaxThread=2;
+    ParseCommandLine( argc, argv );
+    if( MinThread<1 ) {
+        REPORT("number of threads must be positive\n");
+        exit(1);
+    }
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        tbb::task_scheduler_init init( p );
+        Run(p);
+        // Test that all workers sleep when no work
+        TestCPUUserTime(p);
+    }
+    // This check must be performed after the scheduler terminated because only in this 
+    // case there is a guarantee that the workers already destroyed their last tasks. 
+    ASSERT( g_values_counter == 0, "Value objects were leaked" );
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_for.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_for.cpp
new file mode 100644 (file)
index 0000000..2e1d223
--- /dev/null
@@ -0,0 +1,276 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Test for function template parallel_for.h
+
+#include "tbb/parallel_for.h"
+#include "tbb/atomic.h"
+#include "harness_assert.h"
+#include "harness.h"
+
+static tbb::atomic<int> FooBodyCount;
+
+//! An range object whose only public members are those required by the Range concept.
+template<size_t Pad>
+class FooRange {
+    //! Start of range
+    int start;
+
+    //! Size of range
+    int size;
+    FooRange( int start_, int size_ ) : start(start_), size(size_) {
+        zero_fill<char>(pad, Pad);
+        pad[Pad-1] = 'x';
+    }
+    template<size_t Pad_> friend void Flog( int nthread );
+    template<size_t Pad_> friend class FooBody;
+    void operator&();
+
+    char pad[Pad];
+public:
+    bool empty() const {return size==0;}
+    bool is_divisible() const {return size>1;}
+    FooRange( FooRange& original, tbb::split ) : size(original.size/2) {
+        original.size -= size;
+        start = original.start+original.size;
+        ASSERT( original.pad[Pad-1]=='x', NULL );
+        pad[Pad-1] = 'x';
+    }
+};
+
+//! An range object whose only public members are those required by the parallel_for.h body concept.
+template<size_t Pad>
+class FooBody {
+    static const int LIVE = 0x1234;
+    tbb::atomic<int>* array;
+    int state;
+    friend class FooRange<Pad>;
+    template<size_t Pad_> friend void Flog( int nthread );
+    FooBody( tbb::atomic<int>* array_ ) : array(array_), state(LIVE) {}
+public:
+    ~FooBody() {
+        --FooBodyCount;
+        for( size_t i=0; i<sizeof(*this); ++i )
+            reinterpret_cast<char*>(this)[i] = -1;
+    }
+    //! Copy constructor 
+    FooBody( const FooBody& other ) : array(other.array), state(other.state) {
+        ++FooBodyCount;
+        ASSERT( state==LIVE, NULL );
+    }
+    void operator()( FooRange<Pad>& r ) const {
+        for( int k=0; k<r.size; ++k )
+            array[r.start+k]++;
+    }
+};
+
+#include "tbb/tick_count.h"
+
+static const int N = 1000;
+static tbb::atomic<int> Array[N];
+
+template<size_t Pad>
+void Flog( int nthread ) {
+    tbb::tick_count T0 = tbb::tick_count::now();
+    for( int i=0; i<N; ++i ) {
+        for ( int mode = 0; mode < 4; ++mode) 
+        {
+            FooRange<Pad> r( 0, i );
+            const FooRange<Pad> rc = r;
+            FooBody<Pad> f( Array );
+            const FooBody<Pad> fc = f;
+            memset( Array, 0, sizeof(Array) );
+            FooBodyCount = 1;
+            switch (mode) {
+                case 0:
+                    tbb::parallel_for( rc, fc );
+                break;
+                case 1:
+                    tbb::parallel_for( rc, fc, tbb::simple_partitioner() );
+                break;
+                case 2:
+                    tbb::parallel_for( rc, fc, tbb::auto_partitioner() );
+                break;
+                case 3: {
+                    static tbb::affinity_partitioner affinity;
+                    tbb::parallel_for( rc, fc, affinity );
+                }
+                break;
+            }
+            for( int j=0; j<i; ++j ) 
+                ASSERT( Array[j]==1, NULL );
+            for( int j=i; j<N; ++j ) 
+                ASSERT( Array[j]==0, NULL );
+            // Destruction of bodies might take a while, but there should be at most one body per thread
+            // at this point.
+            while( FooBodyCount>1 && FooBodyCount<=nthread )
+                __TBB_Yield();
+            ASSERT( FooBodyCount==1, NULL );
+        }
+    }
+    tbb::tick_count T1 = tbb::tick_count::now();
+    if( Verbose )
+        REPORT("time=%g\tnthread=%d\tpad=%d\n",(T1-T0).seconds(),nthread,int(Pad));
+}
+
+// Testing parallel_for with step support
+const size_t PFOR_BUFFER_TEST_SIZE = 1024;
+// test_buffer has some extra items beyound right bound
+const size_t PFOR_BUFFER_ACTUAL_SIZE = PFOR_BUFFER_TEST_SIZE + 1024; 
+size_t pfor_buffer[PFOR_BUFFER_ACTUAL_SIZE];
+
+template<typename T>
+void TestFunction(T index){
+    pfor_buffer[index]++;
+}
+
+#include <stdexcept> // std::invalid_argument
+template <typename T>
+void TestParallelForWithStepSupport()
+{
+    const T pfor_buffer_test_size = static_cast<T>(PFOR_BUFFER_TEST_SIZE);
+    const T pfor_buffer_actual_size = static_cast<T>(PFOR_BUFFER_ACTUAL_SIZE);
+    // Testing parallel_for with different step values
+    for (T begin = 0; begin < pfor_buffer_test_size - 1; begin += pfor_buffer_test_size / 10 + 1) {
+        T step;
+        for (step = 1; step < pfor_buffer_test_size; step++) {
+            memset(pfor_buffer, 0, pfor_buffer_actual_size * sizeof(size_t));
+            tbb::parallel_for(begin, pfor_buffer_test_size, step, TestFunction<T>);
+            // Verifying that parallel_for processed all items it should
+            for (T i = begin; i < pfor_buffer_test_size; i = i + step) {
+                ASSERT(pfor_buffer[i] == 1, "parallel_for didn't process all required elements");
+                pfor_buffer[i] = 0;
+            }
+            // Verifying that no extra items were processed and right bound of array wasn't crossed
+            for (T i = 0; i < pfor_buffer_actual_size; i++) {
+                ASSERT(pfor_buffer[i] == 0, "parallel_for processed an extra element");
+            }
+        }
+    }
+
+    // Testing some corner cases
+    tbb::parallel_for(static_cast<T>(2), static_cast<T>(1), static_cast<T>(1), TestFunction<T>);
+#if !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
+    try{
+        tbb::parallel_for(static_cast<T>(1), static_cast<T>(100), static_cast<T>(0), TestFunction<T>);  // should cause std::invalid_argument
+    }catch(std::invalid_argument){
+        return;
+    }
+    ASSERT(0, "std::invalid_argument should be thrown");
+#endif
+}
+
+// Exception support test
+#define HARNESS_EH_SIMPLE_MODE 1
+#include "tbb/tbb_exception.h"
+#include "harness_eh.h"
+
+void test_function_with_exception(size_t)
+{
+    ThrowTestException();
+}
+
+void TestExceptionsSupport()
+{
+    REMARK (__FUNCTION__);
+    ResetEhGlobals();
+    TRY();
+        tbb::parallel_for((size_t)0, (size_t)PFOR_BUFFER_TEST_SIZE, (size_t)1, test_function_with_exception);
+    CATCH_AND_ASSERT();
+}
+
+// Cancellation support test
+void function_to_cancel(size_t ) {
+    ++g_CurExecuted;
+    CancellatorTask::WaitUntilReady();
+}
+
+class my_worker_pfor_step_task : public tbb::task
+{
+    tbb::task_group_context &my_ctx;
+
+    tbb::task* execute () {
+        tbb::parallel_for((size_t)0, (size_t)PFOR_BUFFER_TEST_SIZE, (size_t)1, function_to_cancel, my_ctx);
+        
+        return NULL;
+    }
+public:
+    my_worker_pfor_step_task ( tbb::task_group_context &context) : my_ctx(context) { }
+};
+
+void TestCancellation()
+{
+    ResetEhGlobals();
+    RunCancellationTest<my_worker_pfor_step_task, CancellatorTask>();
+}
+
+#include <cstdio>
+#include "tbb/task_scheduler_init.h"
+#include "harness_cpu.h"
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    MinThread = 1;
+    ParseCommandLine(argc,argv);
+    if( MinThread<1 ) {
+        REPORT("number of threads must be positive\n");
+        exit(1);
+    }
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        if( p>0 ) {
+            tbb::task_scheduler_init init( p );
+            Flog<1>(p);
+            Flog<10>(p);
+            Flog<100>(p);
+            Flog<1000>(p);
+            Flog<10000>(p);
+
+            // Testing with different integer types
+            TestParallelForWithStepSupport<short>();
+            TestParallelForWithStepSupport<unsigned short>();
+            TestParallelForWithStepSupport<int>();
+            TestParallelForWithStepSupport<unsigned int>();
+            TestParallelForWithStepSupport<long>();
+            TestParallelForWithStepSupport<unsigned long>();
+            TestParallelForWithStepSupport<long long>();
+            TestParallelForWithStepSupport<unsigned long long>();
+            TestParallelForWithStepSupport<size_t>();
+#if !__TBB_EXCEPTION_HANDLING_BROKEN && !(__GNUC__==4 && __GNUC_MINOR__==1 && __TBB_ipf)
+            TestExceptionsSupport();
+#endif
+            if (p>1) TestCancellation();
+            // Test that all workers sleep when no work
+            TestCPUUserTime(p);
+        }
+    }
+#if __TBB_EXCEPTION_HANDLING_BROKEN || (__GNUC__==4 && __GNUC_MINOR__==1 && __TBB_ipf)
+    REPORT("Warning: Exception handling tests are skipped due to a known issue.\n");
+#endif
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_for_each.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_for_each.cpp
new file mode 100644 (file)
index 0000000..54bf01b
--- /dev/null
@@ -0,0 +1,165 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/parallel_for_each.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/atomic.h"
+#include "harness.h"
+#include "harness_iterator.h"
+
+tbb::atomic<size_t> sum;
+// This function is called via parallel_for_each
+void TestFunction (size_t value) {
+    sum += (unsigned int)value;
+}
+
+const size_t NUMBER_OF_ELEMENTS = 1000;
+
+// Tests tbb::parallel_for_each functionality
+template <typename Iterator>
+void RunPForEachTests()
+{
+    size_t test_vector[NUMBER_OF_ELEMENTS + 1];
+
+    sum = 0;
+    size_t test_sum = 0;
+
+    for (size_t i =0; i < NUMBER_OF_ELEMENTS; i++) { 
+        test_vector[i] = i;
+        test_sum += i;
+    }
+    test_vector[NUMBER_OF_ELEMENTS] = 1000000; // parallel_for_each shouldn't touch this element
+
+    Iterator begin(&test_vector[0]);
+    Iterator end(&test_vector[NUMBER_OF_ELEMENTS]);
+
+    tbb::parallel_for_each(begin, end, TestFunction);
+    ASSERT(sum == test_sum, "Not all items of test vector were processed by parallel_for_each");
+    ASSERT(test_vector[NUMBER_OF_ELEMENTS] == 1000000, "parallel_for_each processed an extra element");
+}
+
+// Exception support test
+#define HARNESS_EH_SIMPLE_MODE 1
+#include "tbb/tbb_exception.h"
+#include "harness_eh.h"
+
+void test_function_with_exception(size_t)
+{
+    ThrowTestException();
+}
+
+template <typename Iterator>
+void TestExceptionsSupport()
+{
+    REMARK (__FUNCTION__);
+    size_t test_vector[NUMBER_OF_ELEMENTS + 1];
+
+    for (size_t i = 0; i < NUMBER_OF_ELEMENTS; i++) { 
+        test_vector[i] = i;
+    }
+
+    Iterator begin(&test_vector[0]);
+    Iterator end(&test_vector[NUMBER_OF_ELEMENTS]);
+
+    TRY();
+        tbb::parallel_for_each(begin, end, test_function_with_exception);
+    CATCH_AND_ASSERT();
+}
+
+// Cancellaton support test
+void function_to_cancel(size_t ) {
+    ++g_CurExecuted;
+    CancellatorTask::WaitUntilReady();
+}
+
+template <typename Iterator>
+class my_worker_pforeach_task : public tbb::task
+{
+    tbb::task_group_context &my_ctx;
+
+    tbb::task* execute () {
+        size_t test_vector[NUMBER_OF_ELEMENTS + 1];
+        for (size_t i = 0; i < NUMBER_OF_ELEMENTS; i++) { 
+            test_vector[i] = i;
+        }
+        Iterator begin(&test_vector[0]);
+        Iterator end(&test_vector[NUMBER_OF_ELEMENTS]);
+
+        tbb::parallel_for_each(begin, end, function_to_cancel);
+        
+        return NULL;
+    }
+public:
+    my_worker_pforeach_task ( tbb::task_group_context &context) : my_ctx(context) { }
+};
+
+template <typename Iterator>
+void TestCancellation()
+{
+    REMARK (__FUNCTION__);
+    ResetEhGlobals();
+    RunCancellationTest<my_worker_pforeach_task<Iterator>, CancellatorTask>();
+}
+
+#include "harness_cpu.h"
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    MinThread=1;
+    MaxThread=2;
+    ParseCommandLine( argc, argv );
+    if( MinThread<1 ) {
+        REPORT("number of threads must be positive\n");
+        exit(1);
+    }
+
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        tbb::task_scheduler_init init( p );
+        RunPForEachTests<Harness::RandomIterator<size_t> >();
+        RunPForEachTests<Harness::InputIterator<size_t> >();
+        RunPForEachTests<Harness::ForwardIterator<size_t> >();
+
+#if !__TBB_EXCEPTION_HANDLING_BROKEN
+        TestExceptionsSupport<Harness::RandomIterator<size_t> >();
+        TestExceptionsSupport<Harness::InputIterator<size_t> >();
+        TestExceptionsSupport<Harness::ForwardIterator<size_t> >();
+#endif
+        if (p > 1) {
+            TestCancellation<Harness::RandomIterator<size_t> >();
+            TestCancellation<Harness::InputIterator<size_t> >();
+            TestCancellation<Harness::ForwardIterator<size_t> >();
+        }
+        // Test that all workers sleep when no work
+        TestCPUUserTime(p);
+    }
+#if __TBB_EXCEPTION_HANDLING_BROKEN
+    REPORT("Warning: Exception handling tests are skipped due to a known issue.\n");
+#endif
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_invoke.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_invoke.cpp
new file mode 100644 (file)
index 0000000..d629508
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/parallel_invoke.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/atomic.h"
+#include "tbb/tbb_exception.h"
+#include "harness.h"
+
+static const size_t MAX_NUMBER_OF_PINVOKE_ARGS = 10;
+tbb::atomic<size_t> function_counter;
+
+// Some macros to make the test easier to read
+
+// 10 functions test0 ... test9 are defined
+// pointer to each function is also defined
+
+#define TEST_FUNCTION(value) void test##value () \
+{   \
+    ASSERT(!(function_counter & (1 << value)), "Test function has already been called"); \
+    function_counter += 1 << value; \
+}   \
+void (*test_pointer##value)(void) = &test##value;
+
+TEST_FUNCTION(0)
+TEST_FUNCTION(1)
+TEST_FUNCTION(2)
+TEST_FUNCTION(3)
+TEST_FUNCTION(4)
+TEST_FUNCTION(5)
+TEST_FUNCTION(6)
+TEST_FUNCTION(7)
+TEST_FUNCTION(8)
+TEST_FUNCTION(9)
+
+// The same with functors
+#define TEST_FUNCTOR(value) class test_functor##value  \
+{   \
+public: \
+    void operator() () const {  \
+        function_counter += 1 << value;   \
+    }   \
+} functor##value;
+
+TEST_FUNCTOR(0)
+TEST_FUNCTOR(1)
+TEST_FUNCTOR(2)
+TEST_FUNCTOR(3)
+TEST_FUNCTOR(4)
+TEST_FUNCTOR(5)
+TEST_FUNCTOR(6)
+TEST_FUNCTOR(7)
+TEST_FUNCTOR(8)
+TEST_FUNCTOR(9)
+
+#define INIT_TEST function_counter = 0;
+
+#define VALIDATE_INVOKE_RUN(number_of_args, test_type) \
+    ASSERT( (size_t)function_counter == (size_t)(1 << number_of_args) - 1, "parallel_invoke called with " #number_of_args " arguments didn't process all " #test_type);
+
+// Calls parallel_invoke for different number of arguments
+// It can be called with and without user context
+template <typename F0, typename F1, typename F2, typename F3, typename F4, typename F5,
+    typename F6, typename F7, typename F8, typename F9>
+void call_parallel_invoke( size_t n, F0& f0, F1& f1, F2& f2, F3& f3, F4 &f4, F5 &f5,
+                          F6& f6, F7 &f7, F8 &f8, F9 &f9, tbb::task_group_context* context) {
+    switch(n) {
+    default:
+        ASSERT(false, "number of arguments must be between 2 and 10");
+    case 2:
+        if (context)
+            tbb::parallel_invoke (f0, f1, *context);
+        else
+            tbb::parallel_invoke (f0, f1);
+        break;
+    case 3:
+        if (context)
+            tbb::parallel_invoke (f0, f1, f2, *context);
+        else
+            tbb::parallel_invoke (f0, f1, f2);
+        break;
+    case 4:
+        if(context)
+            tbb::parallel_invoke (f0, f1, f2, f3, *context);
+        else
+            tbb::parallel_invoke (f0, f1, f2, f3);
+        break;
+    case 5:
+        if(context)
+            tbb::parallel_invoke (f0, f1, f2, f3, f4, *context);
+        else
+            tbb::parallel_invoke (f0, f1, f2, f3, f4);
+        break;
+    case 6:
+        if(context)
+            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, *context);
+        else
+            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5);
+        break;
+    case 7:
+        if(context)
+            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, *context);
+        else
+            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6);
+        break;
+    case 8:
+        if(context)
+            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, f7, *context);
+        else
+            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, f7);
+        break;
+    case 9:
+        if(context)
+            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, f7, f8, *context);
+        else
+            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, f7, f8);
+        break;
+    case 10:
+        if(context)
+            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, *context);
+        else
+            tbb::parallel_invoke (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9);
+        break;
+    }
+}
+
+void test_parallel_invoke()
+{
+    REMARK (__FUNCTION__);
+    // Testing parallel_invoke with functions
+    for (int n = 2; n <=10; n++)
+    {
+        INIT_TEST;
+        call_parallel_invoke(n, test0, test1, test2, test3, test4, test5, test6, test7, test8, test9, NULL);
+        VALIDATE_INVOKE_RUN(n, "functions");
+    }
+    
+    // Testing with pointers to functions
+    for (int n = 2; n <=10; n++)
+    {
+        INIT_TEST;
+        call_parallel_invoke(n, test_pointer0, test_pointer1, test_pointer2, test_pointer3, test_pointer4,
+            test_pointer5, test_pointer6, test_pointer7, test_pointer8, test_pointer9, NULL);
+        VALIDATE_INVOKE_RUN(n, "pointers to function");
+    }
+
+    // Testing parallel_invoke with functors
+    for (int n = 2; n <=10; n++)
+    {
+        INIT_TEST;
+        call_parallel_invoke(n, functor0, functor1, functor2, functor3, functor4,
+            functor5, functor6, functor7, functor8, functor9, NULL);
+        VALIDATE_INVOKE_RUN(n, "functors");
+    }
+}
+
+// Exception handling support test
+
+#define HARNESS_EH_SIMPLE_MODE 1
+#include "harness_eh.h"
+
+volatile size_t exception_mask; // each bit represents whether the function should throw exception or not
+
+// throws exception if corresponding exception_mask bit is set
+#define TEST_FUNCTION_WITH_THROW(value) void test_with_throw##value () {\
+    if (exception_mask & (1 << value)){   \
+        ThrowTestException();    \
+    } \
+}
+
+TEST_FUNCTION_WITH_THROW(0)
+TEST_FUNCTION_WITH_THROW(1)
+TEST_FUNCTION_WITH_THROW(2)
+TEST_FUNCTION_WITH_THROW(3)
+TEST_FUNCTION_WITH_THROW(4)
+TEST_FUNCTION_WITH_THROW(5)
+TEST_FUNCTION_WITH_THROW(6)
+TEST_FUNCTION_WITH_THROW(7)
+TEST_FUNCTION_WITH_THROW(8)
+TEST_FUNCTION_WITH_THROW(9)
+
+void TestExceptionHandling()
+{
+    REMARK (__FUNCTION__);
+    for( size_t n = 2; n <= 10; ++n ) {
+        for( exception_mask = 1; exception_mask < (size_t) (1 << n); ++exception_mask ) {
+            ResetEhGlobals();
+            TRY();
+                REMARK("Calling parallel_invoke, number of functions = %d, exception_mask = %d\n", n, exception_mask);
+                call_parallel_invoke(n, test_with_throw0, test_with_throw1, test_with_throw2, test_with_throw3,
+                    test_with_throw4, test_with_throw5, test_with_throw6, test_with_throw7, test_with_throw8, test_with_throw9, NULL);
+            CATCH_AND_ASSERT();
+        }
+    }
+}
+
+// Cancellaton support test
+void function_to_cancel() {
+    ++g_CurExecuted;
+    CancellatorTask::WaitUntilReady();
+}
+
+// The function is used to test cancellation
+void simple_test_nothrow (){
+    ++g_CurExecuted;
+}
+
+size_t g_numFunctions,
+       g_functionToCancel;
+
+class ParInvokeLauncherTask : public tbb::task
+{
+    tbb::task_group_context &my_ctx;
+    void(*func_array[10])(void);
+
+    tbb::task* execute () {
+        func_array[g_functionToCancel] = &function_to_cancel;
+        call_parallel_invoke(g_numFunctions, func_array[0], func_array[1], func_array[2], func_array[3],
+            func_array[4], func_array[5], func_array[6], func_array[7], func_array[8], func_array[9], &my_ctx);
+        return NULL;
+    }
+public:
+    ParInvokeLauncherTask ( tbb::task_group_context& ctx ) : my_ctx(ctx) {
+        for (int i = 0; i <=9; ++i)
+            func_array[i] = &simple_test_nothrow;
+    }
+};
+
+void TestCancellation ()
+{
+    REMARK (__FUNCTION__);
+    for ( int n = 2; n <= 10; ++n ) {
+        for ( int m = 0; m <= n - 1; ++m ) {
+            g_numFunctions = n;
+            g_functionToCancel = m;
+            ResetEhGlobals();
+            RunCancellationTest<ParInvokeLauncherTask, CancellatorTask>();
+        }
+    }
+}
+
+//------------------------------------------------------------------------
+// Entry point
+//------------------------------------------------------------------------
+
+#include "harness_cpu.h"
+
+__TBB_TEST_EXPORT
+int main(int argc, char* argv[]) {
+    // Set default minimum number of threads
+    MinThread = 2;
+    ParseCommandLine( argc, argv );
+    MinThread = min(MinThread, MaxThread);
+    ASSERT (MinThread>=1, "Minimal number of threads must be 1 or more");
+    for ( int p = MinThread; p <= MaxThread; ++p ) {
+        tbb::task_scheduler_init init(p);
+        test_parallel_invoke();
+        if (p > 1) {
+#if __TBB_EXCEPTION_HANDLING_BROKEN
+            REPORT("Warning: Exception handling tests are skipped due to a known issue.\n");
+#else
+            TestExceptionHandling();
+#endif
+            TestCancellation();
+        }
+        TestCPUUserTime(p);
+    }
+    REPORT("done\n");
+    return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_reduce.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_reduce.cpp
new file mode 100644 (file)
index 0000000..5baceb4
--- /dev/null
@@ -0,0 +1,277 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/parallel_reduce.h"
+#include "tbb/atomic.h"
+#include "harness_assert.h"
+
+using namespace std;
+
+static tbb::atomic<long> ForkCount;
+static tbb::atomic<long> FooBodyCount;
+
+//! Class with public interface that is exactly minimal requirements for Range concept
+class MinimalRange {
+    size_t begin, end;
+    friend class FooBody;
+    explicit MinimalRange( size_t i ) : begin(0), end(i) {}
+    friend void Flog( int nthread, bool inteference );
+public:
+    MinimalRange( MinimalRange& r, tbb::split ) : end(r.end) {
+        begin = r.end = (r.begin+r.end)/2;
+    }
+    bool is_divisible() const {return end-begin>=2;}
+    bool empty() const {return begin==end;}
+};
+
+//! Class with public interface that is exactly minimal requirements for Body of a parallel_reduce
+class FooBody {
+private:
+    FooBody( const FooBody& );          // Deny access
+    void operator=( const FooBody& );   // Deny access
+    friend void Flog( int nthread, bool interference );
+    //! Parent that created this body via split operation.  NULL if original body.
+    FooBody* parent;
+    //! Total number of index values processed by body and its children.
+    size_t sum;
+    //! Number of join operations done so far on this body and its children.
+    long join_count;
+    //! Range that has been processed so far by this body and its children.
+    size_t begin, end;
+    //! True if body has not yet been processed at least once by operator().
+    bool is_new;
+    //! 1 if body was created by split; 0 if original body.
+    int forked;
+    FooBody() {++FooBodyCount;}
+public:
+    ~FooBody() {
+        forked = 0xDEADBEEF; 
+        sum=0xDEADBEEF;
+        join_count=0xDEADBEEF;
+        --FooBodyCount;
+    } 
+    FooBody( FooBody& other, tbb::split ) {
+        ++FooBodyCount;
+        ++ForkCount;
+        sum = 0;
+        parent = &other;
+        join_count = 0;
+        is_new = true;
+        forked = 1;
+    }
+    void join( FooBody& s ) {
+        ASSERT( s.forked==1, NULL );
+        ASSERT( this!=&s, NULL );
+        ASSERT( this==s.parent, NULL ); 
+        ASSERT( end==s.begin, NULL );
+        end = s.end;
+        sum += s.sum;
+        join_count += s.join_count + 1;
+        s.forked = 2;
+    }
+    void operator()( const MinimalRange& r ) {
+        for( size_t k=r.begin; k<r.end; ++k )
+            ++sum;
+        if( is_new ) {
+            is_new = false;
+            begin = r.begin;
+        } else
+            ASSERT( end==r.begin, NULL );
+        end = r.end;
+    }
+};
+
+#include <cstdio>
+#include "harness.h"
+#include "tbb/tick_count.h"
+
+void Flog( int nthread, bool interference=false ) {
+    for (int mode = 0;  mode < 4; mode++) {
+        tbb::tick_count T0 = tbb::tick_count::now();
+        long join_count = 0;        
+        tbb::affinity_partitioner ap;
+        for( size_t i=0; i<=1000; ++i ) {
+            FooBody f;
+            f.sum = 0;
+            f.parent = NULL;
+            f.join_count = 0;
+            f.is_new = true;
+            f.forked = 0;
+            f.begin = ~size_t(0);
+            f.end = ~size_t(0);
+            ASSERT( FooBodyCount==1, NULL );
+            switch (mode) {
+                case 0:
+                    tbb::parallel_reduce( MinimalRange(i), f );
+                    break;
+                case 1:
+                    tbb::parallel_reduce( MinimalRange(i), f, tbb::simple_partitioner() );
+                    break;
+                case 2:
+                    tbb::parallel_reduce( MinimalRange(i), f, tbb::auto_partitioner() );
+                    break;
+                case 3: 
+                    tbb::parallel_reduce( MinimalRange(i), f, ap );
+                    break;
+            }
+            join_count += f.join_count;
+            ASSERT( FooBodyCount==1, NULL );
+            ASSERT( f.sum==i, NULL );
+            ASSERT( f.begin==(i==0 ? ~size_t(0) : 0), NULL );
+            ASSERT( f.end==(i==0 ? ~size_t(0) : i), NULL );
+        }
+        tbb::tick_count T1 = tbb::tick_count::now();
+        if( Verbose )
+            REPORT("time=%g join_count=%ld ForkCount=%ld nthread=%d%s\n",
+                   (T1-T0).seconds(),join_count,long(ForkCount), nthread, interference ? " with interference)":"");
+    }
+}
+
+class DeepThief: public tbb::task {
+    /*override*/tbb::task* execute() {
+        if( !is_stolen_task() )
+            spawn(*child);
+        wait_for_all();
+        return NULL;
+    }
+    task* child;
+    friend void FlogWithInterference(int);
+public:
+    DeepThief() : child() {}
+};
+
+//! Test for problem in TBB 2.1 parallel_reduce where middle of a range is stolen.
+/** Warning: this test is a somewhat abusive use of TBB somewhat because 
+    it requires two or more threads to avoid deadlock. */
+void FlogWithInterference( int nthread ) {
+    ASSERT( nthread>=2, "requires too or more threads" );
+
+    // Build linear chain of tasks. 
+    // The purpose is to drive up "task depth" in TBB 2.1.
+    // An alternative would be to use add_to_depth, but that method is deprecated in TBB 2.2,
+    // and this way we generalize to catching problems with implicit depth calculations.
+    tbb::task* root = new( tbb::task::allocate_root() ) tbb::empty_task;
+    root->set_ref_count(2);
+    tbb::task* t = root;
+    for( int i=0; i<3; ++i ) {
+        t = new( t->allocate_child() ) tbb::empty_task;
+        t->set_ref_count(1);
+    }
+
+    // Append a DeepThief to the chain.
+    DeepThief* deep_thief = new( t->allocate_child() ) DeepThief;
+    deep_thief->set_ref_count(2);
+
+    // Append a leaf to the chain. 
+    tbb::task* leaf = new( deep_thief->allocate_child() ) tbb::empty_task;
+    deep_thief->child = leaf;
+
+    root->spawn(*deep_thief);
+
+    Flog(nthread,true);
+
+    if( root->ref_count()==2 ) {
+        // Spawn leaf, which when it finishes, cause the DeepThief and rest of the chain to finish.
+        root->spawn( *leaf );
+    }
+    // Wait for all tasks in the chain from root to leaf to finish.
+    root->wait_for_all();
+    root->destroy( *root );
+}
+
+#include "tbb/blocked_range.h"
+
+#if _MSC_VER
+    typedef tbb::internal::uint64_t ValueType;
+#else
+    typedef uint64_t ValueType;
+#endif
+
+struct Sum {
+    template<typename T>
+    T operator() ( const T& v1, const T& v2 ) const {
+        return v1 + v2;
+    }
+};
+
+struct Accumulator {
+    ValueType operator() ( const tbb::blocked_range<ValueType*>& r, ValueType value ) const {
+        for ( ValueType* pv = r.begin(); pv != r.end(); ++pv )
+            value += *pv;
+        return value;
+    }
+};
+
+void ParallelSum () {
+    const ValueType I = 0,
+                    N = 1000000,
+                    R = N * (N + 1) / 2;
+    ValueType *array = new ValueType[N + 1];
+    for ( ValueType i = 0; i < N; ++i )
+        array[i] = i + 1;
+    tbb::blocked_range<ValueType*> range(array, array + N);
+    ValueType r1 = tbb::parallel_reduce( range, I, Accumulator(), Sum() );
+    ASSERT( r1 == R, NULL );
+#if __TBB_LAMBDAS_PRESENT && !__TBB_LAMBDA_AS_TEMPL_PARAM_BROKEN
+    ValueType r2 = tbb::parallel_reduce( range, I, 
+        [](const tbb::blocked_range<ValueType*>& r, ValueType value) -> ValueType { 
+            for ( ValueType* pv = r.begin(); pv != r.end(); ++pv )
+                value += *pv;
+            return value;
+        },
+        Sum()
+    );
+    ASSERT( r2 == R, NULL );
+#endif /* LAMBDAS */
+    delete array;
+}
+
+#include "tbb/task_scheduler_init.h"
+#include "harness_cpu.h"
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    // Set default number of threads
+    MinThread = MaxThread = 2;
+    ParseCommandLine( argc, argv );
+    if( MinThread<0 ) {
+        REPORT("Usage: nthread must be positive\n");
+        exit(1);
+    }
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        tbb::task_scheduler_init init( p );
+        Flog(p);
+        if( p>=2 )
+            FlogWithInterference(p);
+        ParallelSum();
+        // Test that all workers sleep when no work
+        TestCPUUserTime(p);
+    }
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_scan.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_scan.cpp
new file mode 100644 (file)
index 0000000..d278e7b
--- /dev/null
@@ -0,0 +1,276 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/parallel_scan.h"
+#include "tbb/blocked_range.h"
+#include "harness_assert.h"
+
+typedef tbb::blocked_range<long> Range;
+
+static volatile bool ScanIsRunning = false;
+
+//! Sum of 0..i with wrap around on overflow.
+inline int TriangularSum( int i ) {
+    return i&1 ? ((i>>1)+1)*i : (i>>1)*(i+1); 
+}
+
+//! Verify that sum is sum of integers in closed interval [start_index..finish_index].
+/** line should be the source line of the caller */
+static void VerifySum( long start_index, long finish_index, int sum, int line );
+
+const int MAXN = 2000;
+
+enum AddendFlag {
+    UNUSED=0,
+    USED_NONFINAL=1,
+    USED_FINAL=2
+};
+
+//! Array recording how each addend was used. 
+/** 'unsigned char' instead of AddendFlag for sake of compactness. */
+static unsigned char AddendHistory[MAXN];
+
+//! Set to 1 for debugging output 
+#define PRINT_DEBUG 0
+
+#include "tbb/atomic.h"
+#if PRINT_DEBUG
+#include <stdio.h>
+tbb::atomic<long> NextBodyId;
+#endif /* PRINT_DEBUG */
+
+struct BodyId {
+#if PRINT_DEBUG
+    const int id;
+    BodyId() : id(NextBodyId++) {}
+#endif /* PRINT_DEBUG */
+};
+
+tbb::atomic<long> NumberOfLiveAccumulator;
+
+static void Snooze( bool scan_should_be_running ) {
+    ASSERT( ScanIsRunning==scan_should_be_running, NULL );
+}
+
+template<typename T>
+class Accumulator: BodyId {
+    T my_total;
+    const T* my_array;
+    T* my_sum;
+    Range my_range;
+    //! Equals this while object is fully constructed, NULL otherwise.
+    /** Used to detect premature destruction and accidental bitwise copy. */
+    Accumulator* self;
+    Accumulator( const T array[], T sum[] ) :
+        my_total(), my_array(array), my_sum(sum), my_range(-1,-1,1)
+    {
+        ++NumberOfLiveAccumulator;
+        // Set self as last action of constructor, to indicate that object is fully constructed.
+        self = this;
+    }
+    friend void TestAccumulator( int mode, int nthread );
+public:
+#if PRINT_DEBUG
+    void print() const {
+        REPORT("%d [%ld..%ld)\n", id,my_range.begin(),my_range.end() );
+    }
+#endif /* PRINT_DEBUG */
+    ~Accumulator() {
+#if PRINT_DEBUG
+        REPORT("%d [%ld..%ld) destroyed\n",id,my_range.begin(),my_range.end() ); 
+#endif /* PRINT_DEBUG */
+        // Clear self as first action of destructor, to indicate that object is not fully constructed.
+        self = 0;
+        --NumberOfLiveAccumulator;
+    }
+    Accumulator( Accumulator& a, tbb::split ) : 
+        my_total(0), my_array(a.my_array), my_sum(a.my_sum), my_range(-1,-1,1)  
+    {
+        ++NumberOfLiveAccumulator;
+#if PRINT_DEBUG
+        REPORT("%d forked from %d\n",id,a.id);
+#endif /* PRINT_DEBUG */
+        Snooze(true);
+        // Set self as last action of constructor, to indicate that object is fully constructed.
+        self = this;
+    }
+    template<typename Tag> 
+    void operator()( const Range& r, Tag /*tag*/ ) {
+        Snooze(true);
+#if PRINT_DEBUG
+        if( my_range.empty() )
+            REPORT("%d computing %s [%ld..%ld)\n",id,Tag::is_final_scan()?"final":"lookahead",r.begin(),r.end() );
+        else
+            REPORT("%d computing %s [%ld..%ld) [%ld..%ld)\n",id,Tag::is_final_scan()?"final":"lookahead",my_range.begin(),my_range.end(),r.begin(),r.end());
+#endif /* PRINT_DEBUG */
+        ASSERT( !Tag::is_final_scan() || (my_range.begin()==0 && my_range.end()==r.begin()) || (my_range.empty() && r.begin()==0), NULL );
+        for( long i=r.begin(); i<r.end(); ++i ) {
+            my_total += my_array[i];
+            if( Tag::is_final_scan() ) {
+                ASSERT( AddendHistory[i]<USED_FINAL, "addend used 'finally' twice?" );
+                AddendHistory[i] |= USED_FINAL;
+                my_sum[i] = my_total;
+                VerifySum( 0L, i, int(my_sum[i]), __LINE__ );
+            } else {
+                ASSERT( AddendHistory[i]==UNUSED, "addend used too many times" );
+                AddendHistory[i] |= USED_NONFINAL;
+            }   
+        }
+        if( my_range.empty() )
+            my_range = r;
+        else
+            my_range = Range(my_range.begin(), r.end(), 1 );
+        Snooze(true);
+        ASSERT( self==this, "this Accumulator corrupted or prematurely destroyed" );
+    }
+    void reverse_join( const Accumulator& left ) {
+#if PRINT_DEBUG
+        REPORT("reverse join %d [%ld..%ld) %d [%ld..%ld)\n",
+               left.id,left.my_range.begin(),left.my_range.end(),
+               id,my_range.begin(),my_range.end());
+#endif /* PRINT_DEBUG */
+        Snooze(true);
+        ASSERT( ScanIsRunning, NULL );     
+        ASSERT( left.my_range.end()==my_range.begin(), NULL );
+        my_total += left.my_total;
+        my_range = Range( left.my_range.begin(), my_range.end(), 1 );
+        ASSERT( ScanIsRunning, NULL );     
+        Snooze(true);
+        ASSERT( ScanIsRunning, NULL );     
+        ASSERT( self==this, NULL );
+        ASSERT( left.self==&left, NULL );
+    }
+    void assign( const Accumulator& other ) {
+        my_total = other.my_total;
+        my_range = other.my_range;
+        ASSERT( self==this, NULL );
+        ASSERT( other.self==&other, "other Accumulator corrupted or prematurely destroyed" );
+    }
+};
+
+#include "tbb/tick_count.h"
+#include "harness.h"
+
+static void VerifySum( long start_index, long finish_index, int sum, int line ) {
+    int expected = TriangularSum( finish_index ) - TriangularSum( start_index );
+    if( expected!=sum ) {
+        REPORT( "line %d: sum[%ld..%ld] should be = %d, but was computed as %d\n",
+                line, start_index, finish_index, expected, sum );
+        abort();
+    }
+}
+
+void TestAccumulator( int mode, int nthread ) {
+    typedef int T;
+    T* addend = new T[MAXN];
+    T* sum = new T[MAXN];
+    for( long n=0; n<=MAXN; ++n ) {
+        for( long i=0; i<MAXN; ++i ) {
+            addend[i] = -1;
+            sum[i] = -2;
+            AddendHistory[i] = UNUSED;
+        }
+        for( long i=0; i<n; ++i )
+            addend[i] = i;
+        Accumulator<T> acc( addend, sum );
+        tbb::tick_count t0 = tbb::tick_count::now();
+#if PRINT_DEBUG
+        REPORT("--------- mode=%d range=[0..%ld)\n",mode,n);
+#endif /* PRINT_DEBUG */
+        ScanIsRunning = true;
+
+        switch (mode) {
+            case 0:
+                tbb::parallel_scan( Range( 0, n, 1 ), acc );
+            break;
+            case 1:
+                tbb::parallel_scan( Range( 0, n, 1 ), acc, tbb::simple_partitioner() );
+            break;
+            case 2:
+                tbb::parallel_scan( Range( 0, n, 1 ), acc, tbb::auto_partitioner() );
+            break;
+        }
+
+        ScanIsRunning = false;
+#if PRINT_DEBUG
+        REPORT("=========\n");
+#endif /* PRINT_DEBUG */
+        Snooze(false);
+        tbb::tick_count t1 = tbb::tick_count::now();
+        long used_once_count = 0;
+        for( long i=0; i<n; ++i ) 
+            if( !(AddendHistory[i]&USED_FINAL) ) {
+                REPORT("failed to use addend[%ld] %s\n",i,AddendHistory[i]&USED_NONFINAL?"(but used nonfinal)":"");
+            }
+        for( long i=0; i<n; ++i ) {
+            VerifySum( 0, i, sum[i], __LINE__ );
+            used_once_count += AddendHistory[i]==USED_FINAL;
+        }
+        if( n )
+            ASSERT( acc.my_total==sum[n-1], NULL );
+        else
+            ASSERT( acc.my_total==0, NULL );
+        if( Verbose ) 
+            REPORT("time [n=%ld] = %g\tused_once%% = %g\tnthread=%d\n",n,(t1-t0).seconds(), n==0 ? 0 : 100.0*used_once_count/n,nthread);
+    }
+    delete[] addend;
+    delete[] sum;
+}
+
+static void TestScanTags() {
+    ASSERT( tbb::pre_scan_tag::is_final_scan()==false, NULL );
+    ASSERT( tbb::final_scan_tag::is_final_scan()==true, NULL );
+}
+
+#include "tbb/task_scheduler_init.h"
+#include "harness_cpu.h"
+
+__TBB_TEST_EXPORT
+int main(int argc, char* argv[]) {
+    // Default is to run on two threads.
+    MinThread = MaxThread = 2;
+    ParseCommandLine(argc,argv);
+    TestScanTags();
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        for (int mode = 0; mode < 3; mode++) {
+            tbb::task_scheduler_init init(p);
+            NumberOfLiveAccumulator = 0;
+            TestAccumulator(mode, p);
+
+            // Test that all workers sleep when no work
+            TestCPUUserTime(p);
+
+            // Checking has to be done late, because when parallel_scan makes copies of
+            // the user's "Body", the copies might be destroyed slightly after parallel_scan 
+            // returns.
+            ASSERT( NumberOfLiveAccumulator==0, NULL );
+        }
+    }
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_sort.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_sort.cpp
new file mode 100644 (file)
index 0000000..65febcc
--- /dev/null
@@ -0,0 +1,531 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <math.h>
+#include <algorithm>
+#include <iterator>
+#include <functional>
+#include <string>
+#include <cstring>
+#include <exception>
+
+#include "tbb/parallel_sort.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/concurrent_vector.h"
+#include "harness.h"
+
+/** Has tightly controlled interface so that we can verify
+    that parallel_sort uses only the required interface. */
+class Minimal {
+    int val;
+public:
+    Minimal() {}
+    void set_val(int i) { val = i; }
+    static bool CompareWith (const Minimal &a, const Minimal &b) { 
+        return (a.val < b.val);
+    }
+    static bool AreEqual( Minimal &a,  Minimal &b) { 
+       return a.val == b.val; 
+    }
+};
+
+//! Defines a comparison function object for Minimal 
+class MinimalCompare {
+public:
+    bool operator() (const Minimal &a, const Minimal &b) const { 
+        return Minimal::CompareWith(a,b);
+    }
+};
+
+//! The default validate; but it uses operator== which is not required
+template<typename RandomAccessIterator>
+bool Validate(RandomAccessIterator a, RandomAccessIterator b, size_t n) {
+    for (size_t i = 0; i < n; i++) {
+        ASSERT( a[i] == b[i], NULL );
+    }
+    return true;
+} 
+
+//! A Validate specialized to string for debugging-only 
+template<>
+bool Validate<std::string *>(std::string * a, std::string * b, size_t n) {
+    for (size_t i = 0; i < n; i++) {
+        if ( Verbose && a[i] != b[i]) {
+          for (size_t j = 0; j < n; j++) {
+              REPORT("a[%llu] == %s and b[%llu] == %s\n", static_cast<unsigned long long>(j), a[j].c_str(), static_cast<unsigned long long>(j), b[j].c_str());
+          }
+        }
+        ASSERT( a[i] == b[i], NULL );
+    }
+    return true;
+}
+
+//! A Validate specialized to Minimal since it does not define an operator== 
+template<>
+bool Validate<Minimal *>(Minimal *a, Minimal *b, size_t n) {
+    for (size_t i = 0; i < n; i++) {
+        ASSERT( Minimal::AreEqual(a[i],b[i]), NULL );
+    }
+    return true;
+} 
+
+//! A Validate specialized to concurrent_vector<Minimal> since it does not define an operator== 
+template<>
+bool Validate<tbb::concurrent_vector<Minimal>::iterator>(tbb::concurrent_vector<Minimal>::iterator a, 
+                                                         tbb::concurrent_vector<Minimal>::iterator b, size_t n) {
+    for (size_t i = 0; i < n; i++) {
+        ASSERT( Minimal::AreEqual(a[i],b[i]), NULL );
+    }
+    return true;
+}
+
+//! used in Verbose mode for identifying which data set is being used 
+static std::string test_type; 
+
+//! The default initialization routine.
+/*! This routine assumes that you can assign to the elements from a float.
+    It assumes that iter and sorted_list have already been allocated. It fills
+    them according to the current data set (tracked by a local static variable).
+    Returns true if a valid test has been setup, or false if there is no test to
+    perform.
+*/ 
+   
+template < typename RandomAccessIterator, typename Compare >
+bool init_iter(RandomAccessIterator iter, RandomAccessIterator sorted_list, size_t n, const Compare &compare, bool reset) {
+    static char test_case = 0; 
+    const char num_cases = 3; 
+
+    if (reset) test_case = 0;
+
+    if (test_case < num_cases) {
+        // switch on the current test case, filling the iter and sorted_list appropriately
+        switch(test_case) {
+            case 0:
+                /* use sin to generate the values */
+                test_type = "sin";
+                for (size_t i = 0; i < n; i++) 
+                    iter[i] = sorted_list[i] = static_cast<typename std::iterator_traits< RandomAccessIterator >::value_type>(sin(float(i)));
+                break;
+            case 1:
+                /* presorted list */ 
+                test_type = "pre-sorted";
+                for (size_t i = 0; i < n; i++) 
+                    iter[i] = sorted_list[i] = static_cast<typename std::iterator_traits< RandomAccessIterator >::value_type>(i);
+                break;
+            case 2:
+                /* reverse-sorted list */ 
+                test_type = "reverse-sorted";
+                for (size_t i = 0; i < n; i++) 
+                    iter[i] = sorted_list[i] = static_cast<typename std::iterator_traits< RandomAccessIterator >::value_type>(n - i);
+                break;
+        } 
+
+        // pre-sort sorted_list for later validity testing 
+        std::sort(sorted_list, sorted_list + n, compare);
+        test_case++;
+        return true;
+    }
+    return false;
+}
+
+template < typename T, typename Compare >
+bool init_iter(T * iter, T * sorted_list, size_t n, const Compare &compare, bool reset) {
+    static char test_case = 0;
+    const char num_cases = 3;
+
+    if (reset) test_case = 0;
+
+    if (test_case < num_cases) {
+        // switch on the current test case, filling the iter and sorted_list appropriately
+        switch(test_case) {
+            case 0:
+                /* use sin to generate the values */
+                test_type = "sin";
+                for (size_t i = 0; i < n; i++)
+                    iter[i] = sorted_list[i] = T(sin(float(i)));
+                break;
+            case 1:
+                /* presorted list */
+                test_type = "pre-sorted";
+                for (size_t i = 0; i < n; i++)
+                    iter[i] = sorted_list[i] = T(i);
+                break;
+            case 2:
+                /* reverse-sorted list */
+                test_type = "reverse-sorted";
+                for (size_t i = 0; i < n; i++)
+                    iter[i] = sorted_list[i] = T(n - i);
+                break;
+        }
+
+        // pre-sort sorted_list for later validity testing 
+        std::sort(sorted_list, sorted_list + n, compare);
+        test_case++;
+        return true;
+    }
+    return false;
+}
+
+
+//! The initialization routine specialized to the class Minimal 
+/*! Minimal cannot have floats assigned to it.  This function uses the set_val method
+*/
+
+template < >
+bool init_iter(Minimal* iter, Minimal * sorted_list, size_t n, const MinimalCompare &compare, bool reset) {
+    static char test_case = 0;
+    const char num_cases = 3; 
+
+    if (reset) test_case = 0;
+
+    if (test_case < num_cases) {
+        switch(test_case) {
+            case 0:
+                /* use sin to generate the values */
+                test_type = "sin";
+                for (size_t i = 0; i < n; i++) {
+                    iter[i].set_val( int( sin( float(i) ) * 1000.f) );
+                    sorted_list[i].set_val( int ( sin( float(i) ) * 1000.f) );
+                }
+                break;
+            case 1:
+                /* presorted list */ 
+                test_type = "pre-sorted";
+                for (size_t i = 0; i < n; i++) {
+                    iter[i].set_val( int(i) ); 
+                    sorted_list[i].set_val( int(i) );
+                }
+                break;
+            case 2:
+                /* reverse-sorted list */ 
+                test_type = "reverse-sorted";
+                for (size_t i = 0; i < n; i++) {
+                    iter[i].set_val( int(n-i) ); 
+                    sorted_list[i].set_val( int(n-i) );
+                }
+                break;
+        } 
+        std::sort(sorted_list, sorted_list + n, compare);
+        test_case++;
+        return true;
+    }
+    return false;
+}
+
+//! The initialization routine specialized to the class concurrent_vector<Minimal> 
+/*! Minimal cannot have floats assigned to it.  This function uses the set_val method
+*/
+
+template < >
+bool init_iter(tbb::concurrent_vector<Minimal>::iterator iter, tbb::concurrent_vector<Minimal>::iterator sorted_list, 
+               size_t n, const MinimalCompare &compare, bool reset) {
+    static char test_case = 0;
+    const char num_cases = 3;
+
+    if (reset) test_case = 0;
+
+    if (test_case < num_cases) {
+        switch(test_case) {
+            case 0:
+                /* use sin to generate the values */
+                test_type = "sin";
+                for (size_t i = 0; i < n; i++) {
+                    iter[i].set_val( int( sin( float(i) ) * 1000.f) );
+                    sorted_list[i].set_val( int ( sin( float(i) ) * 1000.f) );
+                }
+                break;
+            case 1:
+                /* presorted list */
+                test_type = "pre-sorted";
+                for (size_t i = 0; i < n; i++) {
+                    iter[i].set_val( int(i) );
+                    sorted_list[i].set_val( int(i) );
+                }
+                break;
+            case 2:
+                /* reverse-sorted list */
+                test_type = "reverse-sorted";
+                for (size_t i = 0; i < n; i++) {
+                    iter[i].set_val( int(n-i) );
+                    sorted_list[i].set_val( int(n-i) );
+                }
+                break;
+        }
+        std::sort(sorted_list, sorted_list + n, compare);
+        test_case++;
+        return true;
+    }
+    return false;
+}
+
+//! The initialization routine specialized to the class string 
+/*! strings are created from floats. 
+*/
+
+template<>
+bool init_iter(std::string *iter, std::string *sorted_list, size_t n, const std::less<std::string> &compare, bool reset) {
+    static char test_case = 0;
+    const char num_cases = 1; 
+    if (reset) test_case = 0;
+
+    if (test_case < num_cases) {
+        switch(test_case) {
+            case 0:
+                /* use sin to generate the values */
+                test_type = "sin";
+                for (size_t i = 0; i < n; i++) {
+                    char buffer[20];
+#if __STDC_SECURE_LIB__>=200411
+                    sprintf_s(buffer, sizeof(buffer), "%f", float(sin(float(i))));
+#else
+                    sprintf(buffer, "%f", float(sin(float(i))));
+#endif /* _MSC_VER>=1400 */
+                    sorted_list[i] = iter[i] = std::string(buffer);
+                }
+                break;
+        } 
+        std::sort(sorted_list, sorted_list + n, compare);
+        test_case++;
+        return true;
+    }
+    return false;
+}
+
+//! The current number of threads in use (for Verbose only) 
+static size_t current_p;
+
+//! The current data type being sorted (for Verbose only) 
+static std::string current_type; 
+
+//! The default test routine.
+/*! Tests all data set sizes from 0 to N, all grainsizes from 0 to G=10, and selects from 
+    all possible interfaces to parallel_sort depending on whether a scratch space and
+    compare have been provided.
+*/
+template<typename RandomAccessIterator, typename Compare>
+bool parallel_sortTest(size_t n, RandomAccessIterator iter, RandomAccessIterator sorted_list, const Compare *comp) {
+    bool passed = true;
+
+    Compare local_comp; 
+
+    init_iter(iter, sorted_list, n, local_comp, true);
+    do {
+        if ( Verbose) 
+            REPORT("%s %s p=%llu n=%llu :",current_type.c_str(), test_type.c_str(), 
+                   static_cast<unsigned long long>(current_p), static_cast<unsigned long long>(n));
+        if (comp != NULL) {
+            tbb::parallel_sort(iter, iter + n, local_comp );
+         } else {
+            tbb::parallel_sort(iter, iter + n );
+         }
+        if (!Validate(iter, sorted_list, n)) 
+            passed = false;
+        if ( Verbose ) REPORT("passed\n");
+    } while (init_iter(iter, sorted_list, n, local_comp, false));
+    return passed;
+}
+
+//! The test routine specialize to Minimal, since it does not have a less defined for it
+template<>
+bool parallel_sortTest(size_t n, Minimal * iter, Minimal * sorted_list, const MinimalCompare *compare) {
+    bool passed = true;
+
+    if (compare == NULL) return passed;
+
+    init_iter(iter, sorted_list, n, *compare, true);
+    do {
+        if ( Verbose) 
+            REPORT("%s %s p=%llu n=%llu :",current_type.c_str(), test_type.c_str(),
+                    static_cast<unsigned long long>(current_p), static_cast<unsigned long long>(n));
+
+        tbb::parallel_sort(iter, iter + n, *compare );
+
+        if (!Validate(iter, sorted_list, n))
+            passed = false;
+        if ( Verbose ) REPORT("passed\n");
+    } while (init_iter(iter, sorted_list, n, *compare, false));
+    return passed;
+}
+
+//! The test routine specialize to concurrent_vector of Minimal, since it does not have a less defined for it
+template<>
+bool parallel_sortTest(size_t n, tbb::concurrent_vector<Minimal>::iterator iter, 
+                       tbb::concurrent_vector<Minimal>::iterator sorted_list, const MinimalCompare *compare) {
+    bool passed = true;
+
+    if (compare == NULL) return passed;
+    
+    init_iter(iter, sorted_list, n, *compare, true);
+    do {
+        if ( Verbose) 
+            REPORT("%s %s p=%llu n=%llu :",current_type.c_str(), test_type.c_str(),
+                    static_cast<unsigned long long>(current_p), static_cast<unsigned long long>(n));
+    
+        tbb::parallel_sort(iter, iter + n, *compare );
+
+        if (!Validate(iter, sorted_list, n))
+            passed = false;
+        if ( Verbose ) REPORT("passed\n");
+    } while (init_iter(iter, sorted_list, n, *compare, false));
+    return passed;
+}
+
+//! The main driver for the tests.
+/*! Minimal, float and string types are used.  All interfaces to parallel_sort that are usable
+    by each type are tested.
+*/
+void Flog() {
+    // For each type create: 
+    // the list to be sorted by parallel_sort (array) 
+    // the list to be sort by STL sort (array_2)
+    // and a less function object
+
+    const size_t N = 50000;
+    
+    Minimal *minimal_array = new Minimal[N];
+    Minimal *minimal_array_2 = new Minimal[N];
+    MinimalCompare minimal_less;
+
+#if !__TBB_FLOATING_POINT_BROKEN
+    float *float_array = new float[N];
+    float *float_array_2 = new float[N];
+    std::less<float> float_less;
+
+    tbb::concurrent_vector<float> float_cv1;
+    tbb::concurrent_vector<float> float_cv2;
+    float_cv1.grow_to_at_least(N);
+    float_cv2.grow_to_at_least(N);
+#endif /* !__TBB_FLOATING_POINT_BROKEN */
+
+    std::string *string_array = new std::string[N];
+    std::string *string_array_2 = new std::string[N];
+    std::less<std::string> string_less;
+
+    tbb::concurrent_vector<Minimal> minimal_cv1;
+    tbb::concurrent_vector<Minimal> minimal_cv2;
+    minimal_cv1.grow_to_at_least(N);
+    minimal_cv2.grow_to_at_least(N);
+    // run the appropriate tests for each type
+
+    current_type = "Minimal(less)";
+    parallel_sortTest(0, minimal_array, minimal_array_2, &minimal_less);
+    parallel_sortTest(1, minimal_array, minimal_array_2, &minimal_less);
+    parallel_sortTest(10, minimal_array, minimal_array_2, &minimal_less);
+    parallel_sortTest(9999, minimal_array, minimal_array_2, &minimal_less);
+    parallel_sortTest(50000, minimal_array, minimal_array_2, &minimal_less);
+
+#if !__TBB_FLOATING_POINT_BROKEN
+    current_type = "float (no less)";
+    parallel_sortTest(0, float_array, float_array_2, static_cast<std::less<float> *>(NULL)); 
+    parallel_sortTest(1, float_array, float_array_2, static_cast<std::less<float> *>(NULL)); 
+    parallel_sortTest(10, float_array, float_array_2, static_cast<std::less<float> *>(NULL)); 
+    parallel_sortTest(9999, float_array, float_array_2, static_cast<std::less<float> *>(NULL)); 
+    parallel_sortTest(50000, float_array, float_array_2, static_cast<std::less<float> *>(NULL)); 
+
+    current_type = "float (less)";
+    parallel_sortTest(0, float_array, float_array_2, &float_less); 
+    parallel_sortTest(1, float_array, float_array_2, &float_less); 
+    parallel_sortTest(10, float_array, float_array_2, &float_less); 
+    parallel_sortTest(9999, float_array, float_array_2, &float_less); 
+    parallel_sortTest(50000, float_array, float_array_2, &float_less); 
+
+    current_type = "concurrent_vector<float> (no less)";
+    parallel_sortTest(0, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));
+    parallel_sortTest(1, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));
+    parallel_sortTest(10, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));
+    parallel_sortTest(9999, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));
+    parallel_sortTest(50000, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));
+
+    current_type = "concurrent_vector<float> (less)";
+    parallel_sortTest(0, float_cv1.begin(), float_cv2.begin(), &float_less);
+    parallel_sortTest(1, float_cv1.begin(), float_cv2.begin(), &float_less);
+    parallel_sortTest(10, float_cv1.begin(), float_cv2.begin(), &float_less);
+    parallel_sortTest(9999, float_cv1.begin(), float_cv2.begin(), &float_less);
+    parallel_sortTest(50000, float_cv1.begin(), float_cv2.begin(), &float_less);
+#endif /* !__TBB_FLOATING_POINT_BROKEN */
+
+    current_type = "string (no less)";
+    parallel_sortTest(0, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));
+    parallel_sortTest(1, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));
+    parallel_sortTest(10, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));
+    parallel_sortTest(9999, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));
+    parallel_sortTest(50000, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));
+
+    current_type = "string (less)";
+    parallel_sortTest(0, string_array, string_array_2, &string_less);
+    parallel_sortTest(1, string_array, string_array_2, &string_less);
+    parallel_sortTest(10, string_array, string_array_2, &string_less);
+    parallel_sortTest(9999, string_array, string_array_2, &string_less);
+    parallel_sortTest(50000, string_array, string_array_2, &string_less);
+
+    current_type = "concurrent_vector<Minimal> (less)";
+    parallel_sortTest(0, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);
+    parallel_sortTest(1, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);
+    parallel_sortTest(10, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);
+    parallel_sortTest(9999, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);
+    parallel_sortTest(50000, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);
+
+    delete [] minimal_array;
+    delete [] minimal_array_2;
+
+#if !__TBB_FLOATING_POINT_BROKEN
+    delete [] float_array;
+    delete [] float_array_2;
+#endif /* !__TBB_FLOATING_POINT_BROKEN */
+
+    delete [] string_array;
+    delete [] string_array_2;
+}
+
+#include <cstdio>
+#include "harness_cpu.h"
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    ParseCommandLine(argc,argv);
+    if( MinThread<1 ) {
+        REPORT("Usage: number of threads must be positive\n");
+        exit(1);
+    }
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        if( p>0 ) {
+            tbb::task_scheduler_init init( p );
+            current_p = p;
+            Flog();
+
+            // Test that all workers sleep when no work
+            TestCPUUserTime(p);
+        }
+    } 
+    REPORT("done\n");
+    return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_while.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_parallel_while.cpp
new file mode 100644 (file)
index 0000000..0397e93
--- /dev/null
@@ -0,0 +1,183 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/parallel_while.h"
+#include "harness.h"
+
+const int N = 200;
+
+typedef int Element;
+
+//! Representation of an array index with only those signatures required by parallel_while.
+class MinimalArgumentType {
+    void operator=( const MinimalArgumentType& );
+    long my_value;
+    enum {
+        DEAD=0xDEAD,
+        LIVE=0x2718,
+        INITIALIZED=0x3141 
+    } my_state;
+public:
+    ~MinimalArgumentType() {
+        ASSERT( my_state==LIVE||my_state==INITIALIZED, NULL );
+        my_state = DEAD;
+    }
+    MinimalArgumentType() {
+        my_state = LIVE;
+    }
+    void set_value( long i ) {
+        ASSERT( my_state==LIVE||my_state==INITIALIZED, NULL );
+        my_value = i;
+        my_state = INITIALIZED;
+    }
+    long get_value() const {
+        ASSERT( my_state==INITIALIZED, NULL );
+        return my_value;
+    } 
+};
+
+class IntegerStream {
+    long my_limit;
+    long my_index;
+public:
+    IntegerStream( long n ) : my_limit(n), my_index(0) {}
+    bool pop_if_present( MinimalArgumentType& v ) {
+        if( my_index>=my_limit ) 
+            return false;
+        v.set_value( my_index );
+        my_index+=2;
+        return true;
+    }
+};
+
+class MatrixMultiplyBody: NoAssign {
+    Element (*a)[N];
+    Element (*b)[N];
+    Element (*c)[N];
+    const int n;
+    tbb::parallel_while<MatrixMultiplyBody>& my_while;
+public:
+    typedef MinimalArgumentType argument_type;
+    void operator()( argument_type i_arg ) const {
+        long i = i_arg.get_value();
+        if( (i&1)==0 && i+1<N ) {
+            MinimalArgumentType value;
+            value.set_value(i+1);
+            my_while.add( value );
+        }
+        for( int j=0; j<n; ++j )    
+            c[i][j] = 0;
+        for( int k=0; k<n; ++k ) {
+            Element aik = a[i][k];
+            for( int j=0; j<n; ++j )    
+                c[i][j] += aik*b[k][j];
+        }
+    }
+    MatrixMultiplyBody( tbb::parallel_while<MatrixMultiplyBody>& w, Element c_[N][N], Element a_[N][N], Element b_[N][N], int n_ ) :
+        a(a_), b(b_), c(c_), n(n_),  my_while(w)
+    {}
+};
+
+void WhileMatrixMultiply( Element c[N][N], Element a[N][N], Element b[N][N], int n ) {
+    IntegerStream stream( N );
+    tbb::parallel_while<MatrixMultiplyBody> w;
+    MatrixMultiplyBody body(w,c,a,b,n);
+    w.run( stream, body );
+}
+
+#include "tbb/tick_count.h"
+#include <cstdlib>
+#include <cstdio>
+using namespace std;
+
+static long Iterations = 5;
+
+static void SerialMatrixMultiply( Element c[N][N], Element a[N][N], Element b[N][N], int n ) {
+    for( int i=0; i<n; ++i ) {   
+        for( int j=0; j<n; ++j )    
+            c[i][j] = 0;
+        for( int k=0; k<n; ++k ) {
+            Element aik = a[i][k];
+            for( int j=0; j<n; ++j )    
+                c[i][j] += aik*b[k][j];
+        }
+    }
+}
+
+static void InitializeMatrix( Element x[N][N], int n, int salt ) {
+    for( int i=0; i<n; ++i )
+        for( int j=0; j<n; ++j )
+            x[i][j] = (i*n+j)^salt;
+}
+
+static Element A[N][N], B[N][N], C[N][N], D[N][N];
+
+static void Run( int nthread, int n ) {
+    /* Initialize matrices */
+    InitializeMatrix(A,n,5);
+    InitializeMatrix(B,n,10);
+    InitializeMatrix(C,n,0);
+    InitializeMatrix(D,n,15);
+
+    tbb::tick_count t0 = tbb::tick_count::now();
+    for( long i=0; i<Iterations; ++i ) {
+        WhileMatrixMultiply( C, A, B, n );
+    }
+    tbb::tick_count t1 = tbb::tick_count::now();
+    SerialMatrixMultiply( D, A, B, n );
+
+    // Check result
+    for( int i=0; i<n; ++i )   
+        for( int j=0; j<n; ++j )    
+            ASSERT( C[i][j]==D[i][j], NULL );
+    if( Verbose ) 
+        REPORT("time=%g\tnthread=%d\tn=%d\n",(t1-t0).seconds(),nthread,n);
+}
+
+#include "tbb/task_scheduler_init.h"
+#include "harness_cpu.h"
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    ParseCommandLine( argc, argv );
+    if( MinThread<1 ) {
+        REPORT("number of threads must be positive\n");
+        exit(1);
+    }
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        tbb::task_scheduler_init init( p );
+        for( int n=N/4; n<=N; n+=N/4 )
+            Run(p,n);
+
+        // Test that all workers sleep when no work
+        TestCPUUserTime(p);
+    }
+    REPORT("done\n");
+    return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_pipeline.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_pipeline.cpp
new file mode 100644 (file)
index 0000000..f22c967
--- /dev/null
@@ -0,0 +1,326 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/tbb_stddef.h"
+#include "tbb/pipeline.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/atomic.h"
+#include <cstdlib>
+#include <cstdio>
+#include "harness.h"
+
+// In the test, variables related to token counting are declared
+// as unsigned long to match definition of tbb::internal::Token.
+
+struct Buffer {
+    //! Indicates that the buffer is not used.
+    static const unsigned long unused = ~0ul;
+    unsigned long id;
+    //! True if Buffer is in use.
+    bool is_busy;
+    unsigned long sequence_number;
+    Buffer() : id(unused), is_busy(false), sequence_number(unused) {}
+};
+
+class waiting_probe {
+    size_t check_counter;
+public:
+    waiting_probe() : check_counter(0) {}
+    bool required( ) {
+        ++check_counter;
+        return !((check_counter+1)&size_t(0x7FFF));
+    }
+    void probe( ); // defined below
+};
+
+static const unsigned MaxStreamSize = 8000;
+static const unsigned MaxStreamItemsPerThread = 1000;
+//! Maximum number of filters allowed
+static const unsigned MaxFilters = 5;
+static unsigned StreamSize;
+static const unsigned MaxBuffer = 8;
+static bool Done[MaxFilters][MaxStreamSize];
+static waiting_probe WaitTest;
+static unsigned out_of_order_count;
+
+#include "harness_concurrency_tracker.h"
+
+class BaseFilter: public tbb::filter {
+    bool* const my_done;
+    const bool my_is_last;  
+    bool my_is_running;
+public:
+    tbb::atomic<tbb::internal::Token> current_token;
+    BaseFilter( tbb::filter::mode type, bool done[], bool is_last ) : 
+        filter(type),
+        my_done(done),
+        my_is_last(is_last),
+        my_is_running(false),
+        current_token()
+    {}
+    virtual Buffer* get_buffer( void* item ) {
+        current_token++;
+        return static_cast<Buffer*>(item);
+    } 
+    /*override*/void* operator()( void* item ) {
+        Harness::ConcurrencyTracker ct;
+        if( is_serial() )
+            ASSERT( !my_is_running, "premature entry to serial stage" );
+        my_is_running = true;
+        Buffer* b = get_buffer(item);
+        if( b ) {
+            if( is_ordered() ) {
+                if( b->sequence_number == Buffer::unused ) 
+                    b->sequence_number = current_token-1;
+                else
+                    ASSERT( b->sequence_number==current_token-1, "item arrived out of order" );
+            } else if( is_serial() ) {
+                if( b->sequence_number != current_token-1 && b->sequence_number != Buffer::unused )
+                    out_of_order_count++;
+            }
+            ASSERT( b->id < StreamSize, NULL ); 
+            ASSERT( !my_done[b->id], "duplicate processing of token?" ); 
+            ASSERT( b->is_busy, NULL );
+            my_done[b->id] = true;
+            if( my_is_last ) {
+                b->id = Buffer::unused;
+                b->sequence_number = Buffer::unused;
+                __TBB_store_with_release(b->is_busy, false);
+            }
+        }
+        my_is_running = false;
+        return b;  
+    }
+};
+
+class InputFilter: public BaseFilter {
+    tbb::spin_mutex input_lock;
+    Buffer buffer[MaxBuffer];
+    const tbb::internal::Token my_number_of_tokens;
+public:
+    InputFilter( tbb::filter::mode type, tbb::internal::Token ntokens, bool done[], bool is_last ) :
+        BaseFilter(type, done, is_last),
+        my_number_of_tokens(ntokens)
+    {}
+    /*override*/Buffer* get_buffer( void* ) {
+        unsigned long next_input;
+        unsigned free_buffer = 0; 
+        { // lock protected scope
+            tbb::spin_mutex::scoped_lock lock(input_lock);
+            if( current_token>=StreamSize )
+                return NULL;
+            next_input = current_token++; 
+            // once in a while, emulate waiting for input; this only makes sense for serial input
+            if( is_serial() && WaitTest.required() )
+                WaitTest.probe( );
+            while( free_buffer<MaxBuffer )
+                if( __TBB_load_with_acquire(buffer[free_buffer].is_busy) )
+                    ++free_buffer;
+                else {
+                    buffer[free_buffer].is_busy = true;
+                    break;
+                }
+        }
+        ASSERT( free_buffer<my_number_of_tokens, "premature reuse of buffer" );
+        Buffer* b = &buffer[free_buffer]; 
+        ASSERT( &buffer[0] <= b, NULL ); 
+        ASSERT( b <= &buffer[MaxBuffer-1], NULL ); 
+        ASSERT( b->id == Buffer::unused, NULL);
+        b->id = next_input;
+        ASSERT( b->sequence_number == Buffer::unused, NULL);
+        return b;
+    }
+};
+
+//! The struct below repeats layout of tbb::pipeline.
+struct hacked_pipeline {
+    tbb::filter* filter_list;
+    tbb::filter* filter_end;
+    tbb::empty_task* end_counter;
+    tbb::atomic<tbb::internal::Token> input_tokens;
+    tbb::atomic<tbb::internal::Token> token_counter;
+    bool end_of_input;
+    bool has_thread_bound_filters;
+
+    virtual ~hacked_pipeline();
+};
+
+//! The struct below repeats layout of tbb::internal::input_buffer.
+struct hacked_input_buffer {
+    void* array; // This should be changed to task_info* if ever used
+    tbb::internal::Token array_size;
+    tbb::internal::Token low_token;
+    tbb::spin_mutex array_mutex;
+    tbb::internal::Token high_token;
+    bool is_ordered;
+    bool is_bound;
+};
+
+//! The struct below repeats layout of tbb::filter.
+struct hacked_filter {
+    tbb::filter* next_filter_in_pipeline;
+    hacked_input_buffer* my_input_buffer;
+    unsigned char my_filter_mode;
+    tbb::filter* prev_filter_in_pipeline;
+    tbb::pipeline* my_pipeline;
+    tbb::filter* next_segment;
+
+    virtual ~hacked_filter();
+};
+
+bool do_hacking_tests = true;
+const tbb::internal::Token tokens_before_wraparound = 0xF;
+
+void TestTrivialPipeline( unsigned nthread, unsigned number_of_filters ) {
+    // There are 3 filter types: parallel, serial_in_order and serial_out_of_order 
+    static const tbb::filter::mode filter_table[] = { tbb::filter::parallel, tbb::filter::serial_in_order, tbb::filter::serial_out_of_order}; 
+    const unsigned number_of_filter_types = sizeof(filter_table)/sizeof(filter_table[0]);
+    REMARK( "testing with %lu threads and %lu filters\n", nthread, number_of_filters );
+    ASSERT( number_of_filters<=MaxFilters, "too many filters" );
+    ASSERT( sizeof(hacked_pipeline) == sizeof(tbb::pipeline), "layout changed for tbb::pipeline?" );
+    ASSERT( sizeof(hacked_filter) == sizeof(tbb::filter), "layout changed for tbb::filter?" );
+    tbb::internal::Token ntokens = nthread<MaxBuffer ? nthread : MaxBuffer;
+    // Count maximum iterations number
+    unsigned limit = 1;
+    for( unsigned i=0; i<number_of_filters; ++i)
+        limit *= number_of_filter_types;
+    // Iterate over possible filter sequences
+    for( unsigned numeral=0; numeral<limit; ++numeral ) {
+        // Build pipeline
+        tbb::pipeline pipeline;
+        if( do_hacking_tests ) {
+            // A private member of pipeline is hacked there for sake of testing wrap-around immunity.
+            ((hacked_pipeline*)(void*)&pipeline)->token_counter = ~tokens_before_wraparound;
+        }
+        tbb::filter* filter[MaxFilters];
+        unsigned temp = numeral;
+        // parallelism_limit is the upper bound on the possible parallelism
+        unsigned parallelism_limit = 0;
+        for( unsigned i=0; i<number_of_filters; ++i, temp/=number_of_filter_types ) {
+            tbb::filter::mode filter_type = filter_table[temp%number_of_filter_types];
+            const bool is_last = i==number_of_filters-1;
+            if( i==0 )
+                filter[i] = new InputFilter(filter_type,ntokens,Done[i],is_last);
+            else
+                filter[i] = new BaseFilter(filter_type,Done[i],is_last);
+            pipeline.add_filter(*filter[i]);
+            // The ordered buffer of serial filters is hacked as well.
+            if ( filter[i]->is_serial() ) {
+                if( do_hacking_tests ) {
+                    ((hacked_filter*)(void*)filter[i])->my_input_buffer->low_token = ~tokens_before_wraparound;
+                    ((hacked_filter*)(void*)filter[i])->my_input_buffer->high_token = ~tokens_before_wraparound;
+                }
+                parallelism_limit += 1;
+            } else {
+                parallelism_limit = nthread;
+            }
+        }
+        // Account for clipping of parallelism.
+        if( parallelism_limit>nthread ) 
+            parallelism_limit = nthread;
+        if( parallelism_limit>ntokens )
+            parallelism_limit = (unsigned)ntokens;
+        Harness::ConcurrencyTracker::Reset();
+        unsigned streamSizeLimit = min( MaxStreamSize, nthread * MaxStreamItemsPerThread );
+        for( StreamSize=0; StreamSize<=streamSizeLimit; ) {
+            memset( Done, 0, sizeof(Done) );
+            for( unsigned i=0; i<number_of_filters; ++i ) {
+                static_cast<BaseFilter*>(filter[i])->current_token=0;
+            }
+            pipeline.run( ntokens );
+            ASSERT( !Harness::ConcurrencyTracker::InstantParallelism(), "filter still running?" );
+            for( unsigned i=0; i<number_of_filters; ++i )
+                ASSERT( static_cast<BaseFilter*>(filter[i])->current_token==StreamSize, NULL );
+            for( unsigned i=0; i<MaxFilters; ++i )
+                for( unsigned j=0; j<StreamSize; ++j ) {
+                    ASSERT( Done[i][j]==(i<number_of_filters), NULL );
+                }
+            if( StreamSize < min(nthread*8, 32u) ) {
+                ++StreamSize;
+            } else {
+                StreamSize = StreamSize*8/3;
+            }
+        }
+        if( Harness::ConcurrencyTracker::PeakParallelism() < parallelism_limit ) 
+            REMARK( "nthread=%lu ntokens=%lu MaxParallelism=%lu parallelism_limit=%lu\n",
+                nthread, ntokens, Harness::ConcurrencyTracker::PeakParallelism(), parallelism_limit );
+        for( unsigned i=0; i < number_of_filters; ++i ) {
+            delete filter[i];
+            filter[i] = NULL;
+        }
+        pipeline.clear();
+    }
+}
+
+#include "harness_cpu.h"
+
+static int nthread; // knowing number of threads is necessary to call TestCPUUserTime
+
+void waiting_probe::probe( ) {
+    if( nthread==1 ) return;
+    REMARK("emulating wait for input\n");
+    // Test that threads sleep while no work.
+    // The master doesn't sleep so there could be 2 active threads if a worker is waiting for input
+    TestCPUUserTime(nthread, 2);
+}
+
+#include "tbb/task_scheduler_init.h"
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    // Default is at least one thread.
+    MinThread = 1;
+    out_of_order_count = 0;
+    ParseCommandLine(argc,argv);
+    if( MinThread<1 ) {
+        REPORT("must have at least one thread");
+        exit(1);
+    }
+    if( tbb::TBB_runtime_interface_version()>TBB_INTERFACE_VERSION) {
+        if( Verbose )
+            REPORT("Warning: implementation dependent tests disabled\n");
+        do_hacking_tests = false;
+    }
+
+    // Test with varying number of threads.
+    for( nthread=MinThread; nthread<=MaxThread; ++nthread ) {
+        // Initialize TBB task scheduler
+        tbb::task_scheduler_init init(nthread);
+
+        // Test pipelines with n filters
+        for( unsigned n=0; n<=MaxFilters; ++n )
+            TestTrivialPipeline(nthread,n);
+
+        // Test that all workers sleep when no work
+        TestCPUUserTime(nthread);
+    }
+    if( !out_of_order_count )
+        REPORT("Warning: out of order serial filter received tokens in order\n");
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_pipeline_with_tbf.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_pipeline_with_tbf.cpp
new file mode 100644 (file)
index 0000000..5fc2965
--- /dev/null
@@ -0,0 +1,353 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/pipeline.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/atomic.h"
+#include "tbb/tbb_thread.h"
+#include <cstdlib>
+#include <cstdio>
+#include "harness.h"
+
+// In the test, variables related to token counting are declared
+// as unsigned long to match definition of tbb::internal::Token.
+
+struct Buffer {
+    //! Indicates that the buffer is not used.
+    static const unsigned long unused = ~0ul;
+    unsigned long id;
+    //! True if Buffer is in use.
+    bool is_busy;
+    unsigned long sequence_number;
+    Buffer() : id(unused), is_busy(false), sequence_number(unused) {}
+};
+
+class waiting_probe {
+    size_t check_counter;
+public:
+    waiting_probe() : check_counter(0) {}
+    bool required( ) {
+        ++check_counter;
+        return !((check_counter+1)&size_t(0x7FFF));
+    }
+    void probe( ); // defined below
+};
+
+static const unsigned MaxStreamSize = 8000;
+static const unsigned MaxStreamItemsPerThread = 1000;
+//! Maximum number of filters allowed
+static const unsigned MaxFilters = 4;
+static unsigned StreamSize;
+static const unsigned MaxBuffer = 8;
+static bool Done[MaxFilters][MaxStreamSize];
+static waiting_probe WaitTest;
+static unsigned out_of_order_count;
+
+#include "harness_concurrency_tracker.h"
+
+template<typename T>
+class BaseFilter: public T {
+    bool* const my_done;
+    const bool my_is_last;  
+    bool my_is_running;
+public:
+    tbb::atomic<tbb::internal::Token> current_token;
+    BaseFilter( tbb::filter::mode type, bool done[], bool is_last ) : 
+        T(type),
+        my_done(done),
+        my_is_last(is_last),
+        my_is_running(false),
+        current_token()
+    {}
+    virtual Buffer* get_buffer( void* item ) {
+        current_token++;
+        return static_cast<Buffer*>(item);
+    } 
+    /*override*/void* operator()( void* item ) {
+        Harness::ConcurrencyTracker ct;
+        if( this->is_serial() )
+            ASSERT( !my_is_running, "premature entry to serial stage" );
+        my_is_running = true;
+        Buffer* b = get_buffer(item);
+        if( b ) {
+            if( this->is_ordered() ) {
+                if( b->sequence_number == Buffer::unused ) 
+                    b->sequence_number = current_token-1;
+                else
+                    ASSERT( b->sequence_number==current_token-1, "item arrived out of order" );
+            } else if( this->is_serial() ) {
+                if( b->sequence_number != current_token-1 && b->sequence_number != Buffer::unused )
+                    out_of_order_count++;
+            }
+            ASSERT( b->id < StreamSize, NULL ); 
+            ASSERT( !my_done[b->id], "duplicate processing of token?" ); 
+            ASSERT( b->is_busy, NULL );
+            my_done[b->id] = true;
+            if( my_is_last ) {
+                b->id = Buffer::unused;
+                b->sequence_number = Buffer::unused;
+                __TBB_store_with_release(b->is_busy, false);
+            }
+        }
+        my_is_running = false;
+        return b;  
+    }
+};
+
+template<typename T>
+class InputFilter: public BaseFilter<T> {
+    tbb::spin_mutex input_lock;
+    Buffer buffer[MaxBuffer];
+    const tbb::internal::Token my_number_of_tokens;
+public:
+    InputFilter( tbb::filter::mode type, tbb::internal::Token ntokens, bool done[], bool is_last ) :
+        BaseFilter<T>(type, done, is_last),
+        my_number_of_tokens(ntokens)
+    {}
+    /*override*/Buffer* get_buffer( void* ) {
+        unsigned long next_input;
+        unsigned free_buffer = 0; 
+        { // lock protected scope
+            tbb::atomic<tbb::internal::Token>& current_token = this->current_token;
+            tbb::spin_mutex::scoped_lock lock(input_lock);
+            if( current_token>=StreamSize )
+                return NULL;
+            next_input = current_token++; 
+            // once in a while, emulate waiting for input; this only makes sense for serial input
+            if( this->is_serial() && WaitTest.required() )
+                WaitTest.probe( );
+            while( free_buffer<MaxBuffer )
+                if( __TBB_load_with_acquire(buffer[free_buffer].is_busy) )
+                    ++free_buffer;
+                else {
+                    buffer[free_buffer].is_busy = true;
+                    break;
+                }
+        }
+        ASSERT( free_buffer<my_number_of_tokens, "premature reuse of buffer" );
+        Buffer* b = &buffer[free_buffer]; 
+        ASSERT( &buffer[0] <= b, NULL ); 
+        ASSERT( b <= &buffer[MaxBuffer-1], NULL ); 
+        ASSERT( b->id == Buffer::unused, NULL);
+        b->id = next_input;
+        ASSERT( b->sequence_number == Buffer::unused, NULL);
+        return b;
+    }
+};
+
+class process_loop {
+public:
+    void operator()( tbb::thread_bound_filter* tbf ) {
+        tbb::thread_bound_filter::result_type flag;
+        do
+            flag = tbf->process_item();
+        while( flag != tbb::thread_bound_filter::end_of_stream );
+    }
+};
+
+//! The struct below repeats layout of tbb::pipeline.
+struct hacked_pipeline {
+    tbb::filter* filter_list;
+    tbb::filter* filter_end;
+    tbb::empty_task* end_counter;
+    tbb::atomic<tbb::internal::Token> input_tokens;
+    tbb::atomic<tbb::internal::Token> global_token_counter;
+    bool end_of_input;
+    bool has_thread_bound_filters;
+
+    virtual ~hacked_pipeline();
+};
+
+//! The struct below repeats layout of tbb::internal::ordered_buffer.
+struct hacked_ordered_buffer {
+    void* array; // This should be changed to task_info* if ever used
+    tbb::internal::Token array_size;
+    tbb::internal::Token low_token;
+    tbb::spin_mutex array_mutex;
+    tbb::internal::Token high_token;
+    bool is_ordered;
+    bool is_bound;
+};
+
+//! The struct below repeats layout of tbb::filter.
+struct hacked_filter {
+    tbb::filter* next_filter_in_pipeline;
+    hacked_ordered_buffer* input_buffer;
+    unsigned char my_filter_mode;
+    tbb::filter* prev_filter_in_pipeline;
+    tbb::pipeline* my_pipeline;
+    tbb::filter* next_segment;
+
+    virtual ~hacked_filter();
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Workaround for overzealous compiler warnings
+    // Suppress compiler warning about constant conditional expression
+    #pragma warning (disable: 4127)
+#endif
+
+void TestTrivialPipeline( unsigned nthread, unsigned number_of_filters ) {
+    // There are 3 non-thread-bound filter types: serial_in_order and serial_out_of_order, parallel
+    static const tbb::filter::mode non_tb_filters_table[] = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order, tbb::filter::parallel}; 
+    // There are 2 thread-bound filter types: serial_in_order and serial_out_of_order 
+    static const tbb::filter::mode tb_filters_table[] = { tbb::filter::serial_in_order, tbb::filter::serial_out_of_order }; 
+    
+    const unsigned number_of_non_tb_filter_types = sizeof(non_tb_filters_table)/sizeof(non_tb_filters_table[0]);
+    const unsigned number_of_tb_filter_types = sizeof(tb_filters_table)/sizeof(tb_filters_table[0]);
+    const unsigned number_of_filter_types = number_of_non_tb_filter_types + number_of_tb_filter_types;
+
+    REMARK( "testing with %lu threads and %lu filters\n", nthread, number_of_filters );
+    ASSERT( number_of_filters<=MaxFilters, "too many filters" );
+    tbb::internal::Token ntokens = nthread<MaxBuffer ? nthread : MaxBuffer;
+    // Count maximum iterations number
+    unsigned limit = 1;
+    for( unsigned i=0; i<number_of_filters; ++i)
+        limit *= number_of_filter_types;
+    // Iterate over possible filter sequences
+    for( unsigned numeral=0; numeral<limit; ++numeral ) {
+        REMARK( "testing configuration %lu of %lu\n", numeral, limit );
+        // Build pipeline
+        tbb::pipeline pipeline;
+        tbb::filter* filter[MaxFilters];
+        unsigned temp = numeral;
+        // parallelism_limit is the upper bound on the possible parallelism
+        unsigned parallelism_limit = 0;
+        // number of thread-bound-filters in the current sequence
+        unsigned number_of_tb_filters = 0;
+        // ordinal numbers of thread-bound-filters in the current sequence
+        unsigned array_of_tb_filter_numbers[MaxFilters];
+        for( unsigned i=0; i<number_of_filters; ++i, temp/=number_of_filter_types ) {
+            bool is_bound = temp%number_of_filter_types&0x1;
+            tbb::filter::mode filter_type;
+            if( is_bound ) {
+                filter_type = tb_filters_table[temp%number_of_filter_types/number_of_non_tb_filter_types];
+            } else
+                filter_type = non_tb_filters_table[temp%number_of_filter_types/number_of_tb_filter_types];
+            const bool is_last = i==number_of_filters-1;
+            if( is_bound ) {
+                if( i == 0 )
+                    filter[i] = new InputFilter<tbb::thread_bound_filter>(filter_type,ntokens,Done[i],is_last);
+                else
+                    filter[i] = new BaseFilter<tbb::thread_bound_filter>(filter_type,Done[i],is_last);
+                array_of_tb_filter_numbers[number_of_tb_filters] = i;
+                number_of_tb_filters++;
+            } else {
+                if( i == 0 )
+                   filter[i] = new InputFilter<tbb::filter>(filter_type,ntokens,Done[i],is_last);
+                else
+                    filter[i] = new BaseFilter<tbb::filter>(filter_type,Done[i],is_last);
+            }
+            pipeline.add_filter(*filter[i]);
+            if ( filter[i]->is_serial() ) {
+                parallelism_limit += 1;
+            } else {
+                parallelism_limit = nthread;
+            }
+        }
+        // Account for clipping of parallelism.
+        if( parallelism_limit>nthread ) 
+            parallelism_limit = nthread;
+        if( parallelism_limit>ntokens )
+            parallelism_limit = (unsigned)ntokens;
+        Harness::ConcurrencyTracker::Reset();
+        StreamSize = nthread; // min( MaxStreamSize, nthread * MaxStreamItemsPerThread );
+
+        memset( Done, 0, sizeof(Done) );
+        for( unsigned i=0; i<number_of_filters; ++i ) {
+            static_cast<BaseFilter<tbb::filter>*>(filter[i])->current_token=0;
+        }
+        tbb::tbb_thread* t[MaxFilters];
+        for( unsigned j = 0; j<number_of_tb_filters; j++)
+            t[j] = new tbb::tbb_thread(process_loop(), static_cast<tbb::thread_bound_filter*>(filter[array_of_tb_filter_numbers[j]]));
+        pipeline.run( ntokens );
+        for( unsigned j = 0; j<number_of_tb_filters; j++)
+           t[j]->join();
+        ASSERT( !Harness::ConcurrencyTracker::InstantParallelism(), "filter still running?" );
+        for( unsigned i=0; i<number_of_filters; ++i )
+            ASSERT( static_cast<BaseFilter<tbb::filter>*>(filter[i])->current_token==StreamSize, NULL );
+        for( unsigned i=0; i<MaxFilters; ++i )
+            for( unsigned j=0; j<StreamSize; ++j ) {
+                ASSERT( Done[i][j]==(i<number_of_filters), NULL );
+            }
+        if( Harness::ConcurrencyTracker::PeakParallelism() < parallelism_limit ) 
+            REMARK( "nthread=%lu ntokens=%lu MaxParallelism=%lu parallelism_limit=%lu\n",
+                nthread, ntokens, Harness::ConcurrencyTracker::PeakParallelism(), parallelism_limit );
+        for( unsigned i=0; i < number_of_filters; ++i ) {
+            delete filter[i];
+            filter[i] = NULL;
+        }
+        pipeline.clear();
+    }
+}
+
+#include "harness_cpu.h"
+
+static int nthread; // knowing number of threads is necessary to call TestCPUUserTime
+
+void waiting_probe::probe( ) {
+    if( nthread==1 ) return;
+    REMARK("emulating wait for input\n");
+    // Test that threads sleep while no work.
+    // The master doesn't sleep so there could be 2 active threads if a worker is waiting for input
+    TestCPUUserTime(nthread, 2);
+}
+
+#include "tbb/task_scheduler_init.h"
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    // Default is at least one thread.
+    MinThread = 1;
+    out_of_order_count = 0;
+    ParseCommandLine(argc,argv);
+    if( MinThread<1 ) {
+        REPORT("must have at least one thread");
+        exit(1);
+    }
+
+    // Test with varying number of threads.
+    for( nthread=MinThread; nthread<=MaxThread; ++nthread ) {
+        // Initialize TBB task scheduler
+        tbb::task_scheduler_init init(nthread);
+
+        // Test pipelines with n filters
+        for( unsigned n=MaxFilters; n<=MaxFilters; ++n ) {
+            // Thread-bound stages are serviced by user-created threads those 
+            // don't run the pipeline and don't service non-thread-bound stages 
+            TestTrivialPipeline(nthread,n);
+        }
+
+        // Test that all workers sleep when no work
+        TestCPUUserTime(nthread);
+    }
+    if( !out_of_order_count )
+        REPORT("Warning: out of order serial filter received tokens in order\n");
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_rwm_upgrade_downgrade.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_rwm_upgrade_downgrade.cpp
new file mode 100644 (file)
index 0000000..06f6a44
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/queuing_rw_mutex.h"
+#include "tbb/spin_rw_mutex.h"
+#include "harness.h"
+
+using namespace tbb;
+
+volatile int Count;
+
+template<typename RWMutex>
+struct Hammer: NoAssign {
+    RWMutex &MutexProtectingCount;
+    mutable volatile int dummy;
+
+    Hammer(RWMutex &m): MutexProtectingCount(m) {}
+    void operator()( int /*thread_id*/ ) const {
+        for( int j=0; j<100000; ++j ) {
+            typename RWMutex::scoped_lock lock(MutexProtectingCount,false);
+            int c = Count;
+            for( int j=0; j<10; ++j ) {
+                ++dummy;
+            }
+            if( lock.upgrade_to_writer() ) {
+                // The upgrade succeeded without any intervening writers
+                ASSERT( c==Count, "another thread modified Count while I held a read lock" );
+            } else {
+                c = Count;
+            }
+            for( int j=0; j<10; ++j ) {
+                ++Count;
+            }
+            lock.downgrade_to_reader();
+            for( int j=0; j<10; ++j ) {
+                ++dummy;
+            }
+        }
+    }
+};
+
+queuing_rw_mutex QRW_mutex;
+spin_rw_mutex SRW_mutex;
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[]) {
+    ParseCommandLine( argc, argv );
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        Count = 0;
+        NativeParallelFor( p, Hammer<queuing_rw_mutex>(QRW_mutex) ); 
+        Count = 0;
+        NativeParallelFor( p, Hammer<spin_rw_mutex>(SRW_mutex) );
+    }
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task.cpp
new file mode 100644 (file)
index 0000000..75deb54
--- /dev/null
@@ -0,0 +1,691 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/task.h"
+#include "tbb/atomic.h"
+#include "tbb/tbb_thread.h"
+#include "harness_assert.h"
+#include <cstdlib>
+
+//------------------------------------------------------------------------
+// Test for task::spawn_children and task_list
+//------------------------------------------------------------------------
+
+#if __TBB_TASK_DEQUE
+
+class UnboundedlyRecursiveOnUnboundedStealingTask : public tbb::task {
+    typedef UnboundedlyRecursiveOnUnboundedStealingTask this_type;
+
+    this_type *m_Parent;
+    const int m_Depth; 
+    volatile bool m_GoAhead;
+
+    volatile uintptr_t m_Anchor;
+
+    // Well, virtually unboundedly, for any practical purpose
+    static const int max_depth = 1000000; 
+
+public:
+    UnboundedlyRecursiveOnUnboundedStealingTask( this_type *parent = NULL, int depth = max_depth )
+        : m_Parent(parent)
+        , m_Depth(depth)
+        , m_GoAhead(true)
+        , m_Anchor(0)
+    {}
+
+    /*override*/
+    tbb::task* execute() {
+        if( !m_Parent || (m_Depth > 0 &&  m_Parent->m_GoAhead) ) {
+            if ( m_Parent ) {
+                // We are stolen, let our parent to start waiting for us
+                m_Parent->m_GoAhead = false;
+            }
+            tbb::task &t = *new( tbb::task::allocate_child() ) this_type(this, m_Depth - 1);
+            set_ref_count( 2 );
+            spawn( t );
+            // Give a willing thief a chance to steal
+            for( int i = 0; i < 1000000 && m_GoAhead; ++i ) {
+                m_Anchor += 1;
+                __TBB_Yield();
+            }
+            // If our child has not been stolen yet, then prohibit it siring ones 
+            // of its own (when this thread executes it inside the next wait_for_all)
+            m_GoAhead = false;
+            wait_for_all();
+        }
+        return NULL;
+    }
+}; // UnboundedlyRecursiveOnUnboundedStealingTask
+
+#endif /* __TBB_TASK_DEQUE */
+
+
+tbb::atomic<int> Count;
+
+class RecursiveTask: public tbb::task {
+    const int m_ChildCount;
+    const int m_Depth; 
+    //! Spawn tasks in list.  Exact method depends upon m_Depth&bit_mask.
+    void SpawnList( tbb::task_list& list, int bit_mask ) {
+        if( m_Depth&bit_mask ) {
+            spawn(list);
+            ASSERT( list.empty(), NULL );
+            wait_for_all();
+        } else {
+            spawn_and_wait_for_all(list);
+            ASSERT( list.empty(), NULL );
+        }
+    }
+public:
+    RecursiveTask( int child_count, int depth ) : m_ChildCount(child_count), m_Depth(depth) {}
+    /*override*/ tbb::task* execute() {
+        ++Count;
+        if( m_Depth>0 ) {
+            tbb::task_list list;
+            ASSERT( list.empty(), NULL );
+            for( int k=0; k<m_ChildCount; ++k ) {
+                list.push_back( *new( tbb::task::allocate_child() ) RecursiveTask(m_ChildCount/2,m_Depth-1 ) );
+                ASSERT( !list.empty(), NULL );
+            }
+            set_ref_count( m_ChildCount+1 );
+            SpawnList( list, 1 );
+            // Now try reusing this as the parent.
+            set_ref_count(2);
+            list.push_back( *new (tbb::task::allocate_child() ) tbb::empty_task() );
+            SpawnList( list, 2 );
+        }
+        return NULL;
+    }
+};
+
+//! Compute what Count should be after RecursiveTask(child_count,depth) runs.
+static int Expected( int child_count, int depth ) {
+    return depth<=0 ? 1 : 1+child_count*Expected(child_count/2,depth-1);
+}
+
+#include "tbb/task_scheduler_init.h"
+#include "harness.h"
+
+#if __TBB_TASK_DEQUE
+void TestStealLimit( int nthread ) {
+    REMARK( "testing steal limiting heuristics for %d threads\n", nthread );
+    tbb::task_scheduler_init init(nthread);
+    tbb::task &t = *new( tbb::task::allocate_root() ) UnboundedlyRecursiveOnUnboundedStealingTask();
+    tbb::task::spawn_root_and_wait(t);
+}
+#endif /* __TBB_TASK_DEQUE */
+
+//! Test task::spawn( task_list& )
+void TestSpawnChildren( int nthread ) {
+    REMARK("testing task::spawn_children for %d threads\n",nthread);
+    tbb::task_scheduler_init init(nthread);
+    for( int j=0; j<50; ++j ) {
+        Count = 0;
+        RecursiveTask& p = *new( tbb::task::allocate_root() ) RecursiveTask(j,4);
+        tbb::task::spawn_root_and_wait(p);
+        int expected = Expected(j,4);
+        ASSERT( Count==expected, NULL );
+    }
+}
+
+//! Test task::spawn_root_and_wait( task_list& )
+void TestSpawnRootList( int nthread ) {
+    REMARK("testing task::spawn_root_and_wait(task_list&) for %d threads\n",nthread);
+    tbb::task_scheduler_init init(nthread);
+    for( int j=0; j<5; ++j )
+        for( int k=0; k<10; ++k ) {
+            Count = 0;
+            tbb::task_list list; 
+            for( int i=0; i<k; ++i )
+                list.push_back( *new( tbb::task::allocate_root() ) RecursiveTask(j,4) );
+            tbb::task::spawn_root_and_wait(list);
+            int expected = k*Expected(j,4);
+            ASSERT( Count==expected, NULL );
+        }    
+}
+
+//------------------------------------------------------------------------
+// Test for task::recycle_as_safe_continuation
+//------------------------------------------------------------------------
+
+class TaskGenerator: public tbb::task {
+    int m_ChildCount;
+    int m_Depth;
+    
+public:
+    TaskGenerator( int child_count, int depth ) : m_ChildCount(child_count), m_Depth(depth) {}
+    ~TaskGenerator( ) { m_ChildCount = m_Depth = -125; }
+
+    /*override*/ tbb::task* execute() {
+        ASSERT( m_ChildCount>=0 && m_Depth>=0, NULL );
+        if( m_Depth>0 ) {
+            recycle_as_safe_continuation();
+            set_ref_count( m_ChildCount+1 );
+            for( int j=0; j<m_ChildCount; ++j ) {
+                tbb::task& t = *new( allocate_child() ) TaskGenerator(m_ChildCount/2,m_Depth-1);
+                spawn(t);
+            }
+            --m_Depth;
+            __TBB_Yield();
+            ASSERT( state()==recycle && ref_count()>0, NULL);
+        }
+        return NULL;
+    }
+};
+
+void TestSafeContinuation( int nthread ) {
+    REMARK("testing task::recycle_as_safe_continuation for %d threads\n",nthread);
+    tbb::task_scheduler_init init(nthread);
+    for( int j=8; j<33; ++j ) {
+        TaskGenerator& p = *new( tbb::task::allocate_root() ) TaskGenerator(j,5);
+        tbb::task::spawn_root_and_wait(p);
+    }
+}
+
+//------------------------------------------------------------------------
+// Test affinity interface
+//------------------------------------------------------------------------
+tbb::atomic<int> TotalCount;
+
+struct AffinityTask: public tbb::task {
+    const tbb::task::affinity_id expected_affinity_id; 
+    bool noted;
+    /** Computing affinities is NOT supported by TBB, and may disappear in the future.
+        It is done here for sake of unit testing. */
+    AffinityTask( int expected_affinity_id_ ) : 
+        expected_affinity_id(tbb::task::affinity_id(expected_affinity_id_)), 
+        noted(false) 
+    {
+        set_affinity(expected_affinity_id);
+        ASSERT( 0u-expected_affinity_id>0u, "affinity_id not an unsigned integral type?" );  
+        ASSERT( affinity()==expected_affinity_id, NULL );
+    } 
+    /*override*/ tbb::task* execute() {
+        ++TotalCount;
+        return NULL;
+    }
+    /*override*/ void note_affinity( affinity_id id ) {
+        // There is no guarantee in TBB that a task runs on its affinity thread.
+        // However, the current implementation does accidentally guarantee it
+        // under certain conditions, such as the conditions here.
+        // We exploit those conditions for sake of unit testing.
+        ASSERT( id!=expected_affinity_id, NULL );
+        ASSERT( !noted, "note_affinity_id called twice!" );
+        ASSERT ( &tbb::task::self() == (tbb::task*)this, "Wrong innermost running task" );
+        noted = true;
+    }
+};
+
+/** Note: This test assumes a lot about the internal implementation of affinity.
+    Do NOT use this as an example of good programming practice with TBB */
+void TestAffinity( int nthread ) {
+    TotalCount = 0;
+    int n = tbb::task_scheduler_init::default_num_threads();
+    if( n>nthread ) 
+        n = nthread;
+    tbb::task_scheduler_init init(n);
+    tbb::empty_task* t = new( tbb::task::allocate_root() ) tbb::empty_task;
+    tbb::task::affinity_id affinity_id = t->affinity();
+    ASSERT( affinity_id==0, NULL );
+    // Set ref_count for n-1 children, plus 1 for the wait.
+    t->set_ref_count(n);
+    // Spawn n-1 affinitized children.
+    for( int i=1; i<n; ++i ) 
+        t->spawn( *new(t->allocate_child()) AffinityTask(i) );
+    if( n>1 ) {
+        // Keep master from stealing
+        while( TotalCount!=n-1 ) 
+            __TBB_Yield();
+    }
+    // Wait for the children
+    t->wait_for_all();
+    t->destroy(*t);
+}
+
+struct NoteAffinityTask: public tbb::task {
+    bool noted;
+    NoteAffinityTask( int id ) : noted(false)
+    {
+        set_affinity(tbb::task::affinity_id(id));
+    }
+    ~NoteAffinityTask () {
+        ASSERT (noted, "note_affinity has not been called");
+    }
+    /*override*/ tbb::task* execute() {
+        return NULL;
+    }
+    /*override*/ void note_affinity( affinity_id /*id*/ ) {
+        noted = true;
+        ASSERT ( &tbb::task::self() == (tbb::task*)this, "Wrong innermost running task" );
+    }
+};
+
+// This test checks one of the paths inside the scheduler by affinitizing the child task 
+// to non-existent thread so that it is proxied in the local task pool but not retrieved 
+// by another thread. 
+void TestNoteAffinityContext() {
+    tbb::task_scheduler_init init(1);
+    tbb::empty_task* t = new( tbb::task::allocate_root() ) tbb::empty_task;
+    t->set_ref_count(2);
+    // This master in the absence of workers will have an affinity id of 1. 
+    // So use another number to make the task get proxied.
+    t->spawn( *new(t->allocate_child()) NoteAffinityTask(2) );
+    t->wait_for_all();
+    t->destroy(*t);
+}
+
+//------------------------------------------------------------------------
+// Test that recovery actions work correctly for task::allocate_* methods
+// when a task's constructor throws an exception.
+//------------------------------------------------------------------------
+
+static int TestUnconstructibleTaskCount;
+
+struct ConstructionFailure {
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Suppress pointless "unreachable code" warning.
+    #pragma warning (push)
+    #pragma warning (disable: 4702)
+#endif
+
+//! Task that cannot be constructed.  
+template<size_t N>
+struct UnconstructibleTask: public tbb::empty_task {
+    char space[N];
+    UnconstructibleTask() {
+        throw ConstructionFailure();
+    }
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning (pop)
+#endif
+
+#define TRY_BAD_CONSTRUCTION(x)                  \
+    {                                            \
+        try {                                    \
+            new(x) UnconstructibleTask<N>;       \
+        } catch( const ConstructionFailure& ) {                                                    \
+            ASSERT( parent()==original_parent, NULL ); \
+            ASSERT( ref_count()==original_ref_count, "incorrectly changed ref_count" );\
+            ++TestUnconstructibleTaskCount;      \
+        }                                        \
+    }
+
+template<size_t N>
+struct RootTaskForTestUnconstructibleTask: public tbb::task {
+    tbb::task* execute() {
+        tbb::task* original_parent = parent();
+        ASSERT( original_parent!=NULL, NULL );
+        int original_ref_count = ref_count();
+        TRY_BAD_CONSTRUCTION( allocate_root() );
+        TRY_BAD_CONSTRUCTION( allocate_child() );
+        TRY_BAD_CONSTRUCTION( allocate_continuation() );
+        TRY_BAD_CONSTRUCTION( allocate_additional_child_of(*this) );
+        return NULL;
+    }
+};
+
+template<size_t N>
+void TestUnconstructibleTask() {
+    TestUnconstructibleTaskCount = 0;
+    tbb::task_scheduler_init init;
+    tbb::task* t = new( tbb::task::allocate_root() ) RootTaskForTestUnconstructibleTask<N>;
+    tbb::task::spawn_root_and_wait(*t);
+    ASSERT( TestUnconstructibleTaskCount==4, NULL );
+}
+
+//------------------------------------------------------------------------
+// Test for alignment problems with task objects.
+//------------------------------------------------------------------------
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    // Workaround for pointless warning "structure was padded due to __declspec(align())
+    #pragma warning (push)
+    #pragma warning (disable: 4324)
+#endif
+
+//! Task with members of type T.
+/** The task recursively creates tasks. */
+template<typename T> 
+class TaskWithMember: public tbb::task {
+    T x;
+    T y;
+    unsigned char count;
+    /*override*/ tbb::task* execute() {
+        x = y;
+        if( count>0 ) { 
+            set_ref_count(2);
+            tbb::task* t = new( tbb::task::allocate_child() ) TaskWithMember<T>(count-1);
+            spawn_and_wait_for_all(*t);
+        }
+        return NULL;
+    }
+public:
+    TaskWithMember( unsigned char n ) : count(n) {}
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+    #pragma warning (pop)
+#endif
+
+template<typename T> 
+void TestAlignmentOfOneClass() {
+    typedef TaskWithMember<T> task_type;
+    tbb::task* t = new( tbb::task::allocate_root() ) task_type(10);
+    tbb::task::spawn_root_and_wait(*t);
+}
+
+#include "harness_m128.h"
+
+void TestAlignment() {
+    REMARK("testing alignment\n");
+    tbb::task_scheduler_init init;
+    // Try types that have variety of alignments
+    TestAlignmentOfOneClass<char>();
+    TestAlignmentOfOneClass<short>();
+    TestAlignmentOfOneClass<int>();
+    TestAlignmentOfOneClass<long>();
+    TestAlignmentOfOneClass<void*>();
+    TestAlignmentOfOneClass<float>();
+    TestAlignmentOfOneClass<double>();
+#if HAVE_m128
+    TestAlignmentOfOneClass<__m128>();
+#endif /* HAVE_m128 */
+}
+
+//------------------------------------------------------------------------
+// Test for recursing on left while spawning on right
+//------------------------------------------------------------------------
+
+int Fib( int n );
+
+struct RightFibTask: public tbb::task {
+    int* y;
+    const int n;
+    RightFibTask( int* y_, int n_ ) : y(y_), n(n_) {}
+    task* execute() {
+        *y = Fib(n-1);
+        return 0;
+    } 
+};
+
+int Fib( int n ) {
+    if( n<2 ) {
+        return n;
+    } else {
+        // y actually does not need to be initialized.  It is initialized solely to suppress
+        // a gratuitous warning "potentially uninitialized local variable". 
+        int y=-1;
+        tbb::task* root_task = new( tbb::task::allocate_root() ) tbb::empty_task;
+        root_task->set_ref_count(2);
+        root_task->spawn( *new( root_task->allocate_child() ) RightFibTask(&y,n) );
+        int x = Fib(n-2);
+        root_task->wait_for_all();
+        tbb::task::self().destroy(*root_task);
+        return y+x;
+    }
+}
+
+void TestLeftRecursion( int p ) {
+    REMARK("testing non-spawned roots for %d threads\n",p);
+    tbb::task_scheduler_init init(p);
+    int sum = 0; 
+    for( int i=0; i<100; ++i )
+        sum +=Fib(10);
+    ASSERT( sum==5500, NULL );
+}
+
+//------------------------------------------------------------------------
+// Test for computing with DAG of tasks.
+//------------------------------------------------------------------------
+
+class DagTask: public tbb::task {
+    typedef unsigned long long number_t;
+    const int i, j;
+    number_t sum_from_left, sum_from_above;
+    void check_sum( number_t sum ) {
+        number_t expected_sum = 1;
+        for( int k=i+1; k<=i+j; ++k ) 
+            expected_sum *= k;
+        for( int k=1; k<=j; ++k ) 
+            expected_sum /= k;
+        ASSERT(sum==expected_sum, NULL);
+    }
+public:
+    DagTask *successor_to_below, *successor_to_right;
+    DagTask( int i_, int j_ ) : i(i_), j(j_), sum_from_left(0), sum_from_above(0) {}
+    task* execute() {
+        __TBB_ASSERT( ref_count()==0, NULL );
+        number_t sum = i==0 && j==0 ? 1 : sum_from_left+sum_from_above;
+        check_sum(sum);
+        ++execution_count;
+        if( DagTask* t = successor_to_right ) {
+            t->sum_from_left = sum;
+            if( t->decrement_ref_count()==0 )
+                // Test using spawn to evaluate DAG
+                spawn( *t );
+        }
+        if( DagTask* t = successor_to_below ) {
+            t->sum_from_above = sum;
+            if( t->decrement_ref_count()==0 ) 
+                // Test using bypass to evaluate DAG
+                return t;
+        } 
+        return NULL;  
+    }
+    ~DagTask() {++destruction_count;}
+    static tbb::atomic<int> execution_count;
+    static tbb::atomic<int> destruction_count;
+};
+
+tbb::atomic<int> DagTask::execution_count;
+tbb::atomic<int> DagTask::destruction_count;
+
+void TestDag( int p ) {
+    REMARK("testing evaluation of DAG for %d threads\n",p);
+    tbb::task_scheduler_init init(p);
+    DagTask::execution_count=0;
+    DagTask::destruction_count=0;
+    const int n = 10;
+    DagTask* a[n][n];
+    for( int i=0; i<n; ++i ) 
+        for( int j=0; j<n; ++j )
+            a[i][j] = new( tbb::task::allocate_root() ) DagTask(i,j);
+    for( int i=0; i<n; ++i ) 
+        for( int j=0; j<n; ++j ) {
+            a[i][j]->successor_to_below = i+1<n ? a[i+1][j] : NULL;
+            a[i][j]->successor_to_right = j+1<n ? a[i][j+1] : NULL;
+            a[i][j]->set_ref_count((i>0)+(j>0));
+        }
+    a[n-1][n-1]->increment_ref_count();
+    a[n-1][n-1]->spawn_and_wait_for_all(*a[0][0]);
+    ASSERT( DagTask::execution_count == n*n - 1, NULL );
+    a[n-1][n-1]->destroy(*a[n-1][n-1]);
+    ASSERT( DagTask::destruction_count > n*n - p, NULL );
+    while ( DagTask::destruction_count != n*n )
+        __TBB_Yield();
+}
+
+#include "harness_barrier.h"
+
+class RelaxedOwnershipTask: public tbb::task {
+    tbb::task &m_taskToSpawn,
+              &m_taskToDestroy,
+              &m_taskToExecute;
+    static Harness::SpinBarrier m_barrier;
+
+    tbb::task* execute () {
+        tbb::task &p = *parent();
+        tbb::task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+        r.set_ref_count( 1 );
+        m_barrier.wait();
+        p.spawn( *new(p.allocate_child()) tbb::empty_task );
+        p.spawn( *new(p.allocate_additional_child_of(p)) tbb::empty_task );
+        p.spawn( m_taskToSpawn );
+        p.destroy( m_taskToDestroy );
+        r.spawn_and_wait_for_all( m_taskToExecute );
+        p.destroy( r );
+        return NULL;
+    }
+public:
+    RelaxedOwnershipTask ( tbb::task& toSpawn, tbb::task& toDestroy, tbb::task& toExecute )
+        : m_taskToSpawn(toSpawn)
+        , m_taskToDestroy(toDestroy)
+        , m_taskToExecute(toExecute)
+    {}
+    static void SetBarrier ( int numThreads ) { m_barrier.initialize( numThreads ); }
+};
+
+Harness::SpinBarrier RelaxedOwnershipTask::m_barrier;
+
+void TestRelaxedOwnership( int p ) {
+    if ( p < 2 )
+        return;
+#if __TEST_TBB_RML
+    if( unsigned(p)>tbb::tbb_thread::hardware_concurrency() )
+        return;
+#endif
+    REMARK("testing tasks exercising relaxed ownership freedom for %d threads\n", p);
+    tbb::task_scheduler_init init(p);
+    RelaxedOwnershipTask::SetBarrier(p);
+    tbb::task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+    tbb::task_list tl;
+    for ( int i = 0; i < p; ++i ) {
+        tbb::task &tS = *new( r.allocate_child() ) tbb::empty_task,
+                  &tD = *new( r.allocate_child() ) tbb::empty_task,
+                  &tE = *new( r.allocate_child() ) tbb::empty_task;
+        tl.push_back( *new( r.allocate_child() ) RelaxedOwnershipTask(tS, tD, tE) );
+    }
+    r.set_ref_count( 5 * p + 1 );
+    r.spawn_and_wait_for_all( tl );
+    r.destroy( r );
+}
+
+//------------------------------------------------------------------------
+// Test for running TBB scheduler on user-created thread.
+//------------------------------------------------------------------------
+
+void RunSchedulerInstanceOnUserThread( int n_child ) {
+    tbb::task* e = new( tbb::task::allocate_root() ) tbb::empty_task;
+    e->set_ref_count(1+n_child);
+    for( int i=0; i<n_child; ++i )
+        e->spawn( *new(e->allocate_child()) tbb::empty_task );
+    e->wait_for_all();
+    e->destroy(*e);
+}
+
+void TestUserThread( int p ) {
+    tbb::task_scheduler_init init(p);
+    // Try with both 0 and 1 children.  Only the latter scenario permits stealing.
+    for( int n_child=0; n_child<2; ++n_child ) {
+        tbb::tbb_thread t( RunSchedulerInstanceOnUserThread, n_child );
+        t.join();
+    }
+}
+
+
+class TaskWithChildToSteal : public tbb::task {
+    const int m_Depth; 
+    volatile bool m_GoAhead;
+
+public:
+    TaskWithChildToSteal( int depth )
+        : m_Depth(depth)
+        , m_GoAhead(false)
+    {}
+
+    /*override*/
+    tbb::task* execute() {
+        m_GoAhead = true;
+        if ( m_Depth > 0 ) {
+            TaskWithChildToSteal &t = *new( tbb::task::allocate_child() ) TaskWithChildToSteal(m_Depth - 1);
+            t.SpawnMeAndWaitOn( *this );
+        }
+        else
+            Harness::Sleep(50); // The last task in chain sleeps for 50 ms
+        return NULL;
+    }
+
+    void SpawnMeAndWaitOn( tbb::task& parent ) {
+        parent.set_ref_count( 2 );
+        parent.spawn( *this );
+        while (!this->m_GoAhead )
+            __TBB_Yield();
+        parent.wait_for_all();
+    }
+}; // TaskWithChildToSteal
+
+void TestDispatchLoopResponsiveness() {
+    REMARK("testing that dispatch loops do not go into eternal sleep when all remaining children are stolen\n");
+    // Recursion depth values test the following sorts of dispatch loops
+    // 0 - master's outermost
+    // 1 - worker's nested
+    // 2 - master's nested
+    tbb::task_scheduler_init init(2);
+    tbb::task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+    for ( int depth = 0; depth < 3; ++depth ) {
+        TaskWithChildToSteal &t = *new( r.allocate_child() ) TaskWithChildToSteal(depth);
+        t.SpawnMeAndWaitOn(r);
+    }
+    r.destroy(r);
+    // The success criteria of this test is not hanging
+}
+
+__TBB_TEST_EXPORT
+int main(int argc, char* argv[]) {
+    MinThread = 1;
+    ParseCommandLine( argc, argv );
+#if !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
+    TestUnconstructibleTask<1>();
+    TestUnconstructibleTask<10000>();
+#endif
+    TestAlignment();
+    TestNoteAffinityContext();
+    TestDispatchLoopResponsiveness();
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        TestSpawnChildren( p );
+        TestSpawnRootList( p );
+        TestSafeContinuation( p );
+        TestLeftRecursion( p );
+        TestDag( p );
+        TestAffinity( p );
+        TestUserThread( p );
+#if __TBB_TASK_DEQUE
+        TestStealLimit( p );
+#endif /* __TBB_TASK_DEQUE */
+#if __TBB_RELAXED_OWNERSHIP
+        TestRelaxedOwnership( p );
+#endif /* __TBB_RELAXED_OWNERSHIP */
+    }
+    REPORT("done\n");
+    return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_assertions.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_assertions.cpp
new file mode 100644 (file)
index 0000000..94d6784
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// to avoid usage of #pragma comment
+#define __TBB_NO_IMPLICIT_LINKAGE 1
+#define __TBB_TASK_CPP_DIRECTLY_INCLUDED 1
+#include "../tbb/task.cpp"
+
+//------------------------------------------------------------------------
+// Test that important assertions in class task fail as expected.
+//------------------------------------------------------------------------
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+#include "harness_bad_expr.h"
+
+//! Task that will be abused.
+tbb::task* volatile AbusedTask;
+
+//! Number of times that AbuseOneTask
+int AbuseOneTaskRan;
+
+//! Body used to create task in thread 0 and abuse it in thread 1.
+struct AbuseOneTask {
+    void operator()( int ) const {
+        tbb::task_scheduler_init init;
+        // Thread 1 attempts to incorrectly use the task created by thread 0.
+        tbb::task_list list;
+#if !__TBB_RELAXED_OWNERSHIP
+        TRY_BAD_EXPR(AbusedTask->spawn(*AbusedTask),"owne");
+        TRY_BAD_EXPR(AbusedTask->spawn_and_wait_for_all(*AbusedTask),"owne");
+        TRY_BAD_EXPR(tbb::task::spawn_root_and_wait(*AbusedTask),"owne");
+
+        // Try variant that operate on a tbb::task_list
+        TRY_BAD_EXPR(AbusedTask->spawn(list),"owne");
+        TRY_BAD_EXPR(AbusedTask->spawn_and_wait_for_all(list),"owne");
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+        // spawn_root_and_wait over empty list should vacuously succeed.
+        tbb::task::spawn_root_and_wait(list);
+
+        // Check that spawn_root_and_wait fails on non-empty list. 
+        list.push_back(*AbusedTask);
+#if !__TBB_RELAXED_OWNERSHIP
+        TRY_BAD_EXPR(tbb::task::spawn_root_and_wait(list),"owne");
+
+        TRY_BAD_EXPR(AbusedTask->destroy(*AbusedTask),"owne");
+        TRY_BAD_EXPR(AbusedTask->wait_for_all(),"owne");
+#endif /* !__TBB_RELAXED_OWNERSHIP */
+
+        // Try abusing recycle_as_continuation
+        TRY_BAD_EXPR(AbusedTask->recycle_as_continuation(), "execute" );
+        TRY_BAD_EXPR(AbusedTask->recycle_as_safe_continuation(), "execute" );
+        TRY_BAD_EXPR(AbusedTask->recycle_to_reexecute(), "execute" );
+
+#if !__TBB_TASK_DEQUE
+        // Check correct use of depth parameter
+        tbb::task::depth_type depth = AbusedTask->depth();
+        ASSERT( depth==0, NULL );
+        for( int k=1; k<=81; k*=3 ) {
+            AbusedTask->set_depth(depth+k);
+            ASSERT( AbusedTask->depth()==depth+k, NULL );
+            AbusedTask->add_to_depth(k+1);
+            ASSERT( AbusedTask->depth()==depth+2*k+1, NULL );
+        }
+        AbusedTask->set_depth(0);
+
+        // Try abusing the depth parameter
+        TRY_BAD_EXPR(AbusedTask->set_depth(-1),"negative");
+        TRY_BAD_EXPR(AbusedTask->add_to_depth(-1),"negative");
+#endif /* !__TBB_TASK_DEQUE */
+
+        ++AbuseOneTaskRan;
+    }
+};
+
+//! Test various __TBB_ASSERT assertions related to class tbb::task.
+void TestTaskAssertions() {
+#if TBB_USE_ASSERT
+    // Catch assertion failures
+    tbb::set_assertion_handler( AssertionFailureHandler );
+    tbb::task_scheduler_init init;
+    // Create task to be abused
+    AbusedTask = new( tbb::task::allocate_root() ) tbb::empty_task;
+    NativeParallelFor( 1, AbuseOneTask() );
+    ASSERT( AbuseOneTaskRan==1, NULL );
+    AbusedTask->destroy(*AbusedTask);
+    // Restore normal assertion handling
+    tbb::set_assertion_handler( NULL );
+#endif /* TBB_USE_ASSERT */
+}
+
+__TBB_TEST_EXPORT
+int main(int argc, char* argv[]) {
+#if __GLIBC__==2 && __GLIBC_MINOR__==3 || __TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
+    REPORT("skip\n");
+#else
+    TestTaskAssertions();
+    REPORT("done\n");
+#endif
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_auto_init.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_auto_init.cpp
new file mode 100644 (file)
index 0000000..e6bbead
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/task.h"
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+
+__TBB_TEST_EXPORT
+int main() {
+    // Testing automatic initialization of task scheduler, so do not put task_scheduler_init here.
+    tbb::task* root = new( tbb::task::allocate_root() ) tbb::empty_task;
+    root->set_ref_count(0);
+    tbb::task::spawn_root_and_wait(*root);
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_group.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_group.cpp
new file mode 100644 (file)
index 0000000..50c2406
--- /dev/null
@@ -0,0 +1,819 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+//! task_handle<T> cannot be instantiated with a function ptr withour explicit cast
+#define __TBB_FUNC_PTR_AS_TEMPL_PARAM_BROKEN ((__linux__ || __APPLE__) && __INTEL_COMPILER && __INTEL_COMPILER < 1100) || __SUNPRO_CC
+
+#if !TBBTEST_USE_TBB
+    #if _MSC_VER < 1600
+        #ifdef TBBTEST_USE_TBB
+            #undef TBBTEST_USE_TBB
+        #endif
+        #define TBBTEST_USE_TBB 1
+    #endif
+#endif
+
+#if TBBTEST_USE_TBB
+
+    #include "tbb/compat/ppl.h"
+    #include "tbb/task_scheduler_init.h"
+
+    #if _MSC_VER
+        typedef tbb::internal::uint32_t uint_t;
+    #else
+        typedef uint32_t uint_t;
+    #endif
+
+#else /* !TBBTEST_USE_TBB */
+
+    #pragma warning(disable: 4100 4180)
+
+    #include <ppl.h>
+
+    typedef unsigned int uint_t;
+
+    #define __TBB_SILENT_CANCELLATION_BROKEN  (_MSC_VER == 1600)
+
+#endif /* !TBBTEST_USE_TBB */
+
+
+#include "tbb/atomic.h"
+#include "harness_concurrency_tracker.h"
+
+unsigned g_MaxConcurrency = 0;
+
+typedef tbb::atomic<uint_t> atomic_t;
+typedef Concurrency::task_handle<void(*)()> handle_type;
+
+//------------------------------------------------------------------------
+// Tests for the thread safety of the task_group manipulations
+//------------------------------------------------------------------------
+
+#include "harness_barrier.h"
+
+enum SharingMode {
+    VagabondGroup = 1,
+    ParallelWait = 2
+};
+
+class  SharedGroupBodyImpl : NoCopy, Harness::NoAfterlife {
+    static const uint_t c_numTasks0 = 4096,
+                        c_numTasks1 = 1024;
+
+    const uint_t m_numThreads;
+    const uint_t m_sharingMode;
+
+    Concurrency::task_group *m_taskGroup;
+    atomic_t m_tasksSpawned,
+             m_threadsReady;
+    Harness::SpinBarrier m_barrier;
+
+    static atomic_t s_tasksExecuted;
+
+    struct TaskFunctor {
+        SharedGroupBodyImpl *m_pOwner;
+        void operator () () {
+            if ( m_pOwner->m_sharingMode & ParallelWait ) {
+                while ( Harness::ConcurrencyTracker::PeakParallelism() < m_pOwner->m_numThreads )
+                    __TBB_Yield();
+            }
+            ++s_tasksExecuted;
+        }
+    };
+
+    TaskFunctor m_taskFunctor;
+
+    void Spawn ( uint_t numTasks ) {
+        for ( uint_t i = 0; i < numTasks; ++i ) {
+            ++m_tasksSpawned;
+            Harness::ConcurrencyTracker ct;
+            m_taskGroup->run( m_taskFunctor );
+        }
+        ++m_threadsReady;
+    }
+
+    void DeleteTaskGroup () {
+        delete m_taskGroup;
+        m_taskGroup = NULL;
+    }
+
+    void Wait () {
+        while ( m_threadsReady != m_numThreads )
+            __TBB_Yield();
+        const uint_t numSpawned = c_numTasks0 + c_numTasks1 * (m_numThreads - 1);
+        ASSERT ( m_tasksSpawned == numSpawned, "Wrong number of spawned tasks. The test is broken" );
+        REMARK("Max spawning parallelism is %u out of %u", Harness::ConcurrencyTracker::PeakParallelism(), g_MaxConcurrency);
+        if ( m_sharingMode & ParallelWait ) {
+            m_barrier.wait( &Harness::ConcurrencyTracker::Reset );
+            {
+                Harness::ConcurrencyTracker ct;
+                m_taskGroup->wait();
+            }
+            ASSERT ( Harness::ConcurrencyTracker::PeakParallelism() > 1, "No parallel waiting detected" );
+            m_barrier.wait();
+        }
+        else
+            m_taskGroup->wait();
+        ASSERT ( m_tasksSpawned == numSpawned, "No tasks should be spawned after wait starts. The test is broken" );
+        ASSERT ( s_tasksExecuted == numSpawned, "Not all spawned tasks were executed" );
+    }
+
+public:
+    SharedGroupBodyImpl ( uint_t numThreads, uint_t sharingMode = 0 )
+        : m_numThreads(numThreads)
+        , m_sharingMode(sharingMode)
+        , m_taskGroup(NULL)
+        , m_barrier(numThreads)
+    {
+        ASSERT ( m_numThreads > 1, "SharedGroupBody tests require concurrency" );
+        ASSERT ( !(m_sharingMode & VagabondGroup) || m_numThreads == 2, "In vagabond mode SharedGroupBody must be used with 2 threads only" );
+        Harness::ConcurrencyTracker::Reset();
+        s_tasksExecuted = 0;
+        m_tasksSpawned = 0;
+        m_threadsReady = 0;
+        m_taskFunctor.m_pOwner = this;
+    }
+
+    void Run ( uint_t idx ) {
+#if TBBTEST_USE_TBB
+        tbb::task_scheduler_init init;
+#endif
+        AssertLive();
+        if ( idx == 0 ) {
+            ASSERT ( !m_taskGroup && !m_tasksSpawned, "SharedGroupBody must be reset before reuse");
+            m_taskGroup = new Concurrency::task_group;
+            Spawn( c_numTasks0 );
+            Wait();
+            if ( m_sharingMode & VagabondGroup )
+                m_barrier.wait();
+            else
+                DeleteTaskGroup();
+        }
+        else {
+            while ( m_tasksSpawned == 0 )
+                __TBB_Yield();
+            ASSERT ( m_taskGroup, "Task group is not initialized");
+            Spawn (c_numTasks1);
+            if ( m_sharingMode & ParallelWait )
+                Wait();
+            if ( m_sharingMode & VagabondGroup ) {
+                ASSERT ( idx == 1, "In vagabond mode SharedGroupBody must be used with 2 threads only" );
+                m_barrier.wait();
+                DeleteTaskGroup();
+            }
+        }
+        AssertLive();
+    }
+};
+
+atomic_t SharedGroupBodyImpl::s_tasksExecuted;
+
+class  SharedGroupBody : NoAssign, Harness::NoAfterlife {
+    bool m_bOwner;
+    mutable SharedGroupBodyImpl *m_pImpl;
+public:
+    SharedGroupBody ( uint_t numThreads, uint_t sharingMode = 0 )
+        : m_bOwner(true)
+        , m_pImpl( new SharedGroupBodyImpl(numThreads, sharingMode) )
+    {}
+    SharedGroupBody ( const SharedGroupBody& src )
+        : m_bOwner(false)
+        , m_pImpl(src.m_pImpl)
+    {}
+    ~SharedGroupBody () {
+        if ( m_bOwner )
+            delete m_pImpl;
+    }
+    void operator() ( uint_t idx ) const { m_pImpl->Run(idx); }
+};
+
+void TestParallelSpawn () {
+    NativeParallelFor( g_MaxConcurrency, SharedGroupBody(g_MaxConcurrency) );
+}
+
+void TestParallelWait () {
+    NativeParallelFor( g_MaxConcurrency, SharedGroupBody(g_MaxConcurrency, ParallelWait) );
+}
+
+// Tests non-stack-bound task group (the group that is allocated by one thread and destroyed by the other)
+void TestVagabondGroup () {
+    NativeParallelFor( 2, SharedGroupBody(2, VagabondGroup) );
+}
+
+//------------------------------------------------------------------------
+// Common requisites of the Fibonacci tests
+//------------------------------------------------------------------------
+
+const uint_t N = 20;
+const uint_t F = 6765;
+
+atomic_t g_Sum;
+
+#define FIB_TEST_PROLOGUE() \
+    const unsigned numRepeats = g_MaxConcurrency * (TBB_USE_DEBUG ? 4 : 16);    \
+    Harness::ConcurrencyTracker::Reset()
+
+#define FIB_TEST_EPILOGUE(sum) \
+    ASSERT( sum == numRepeats * F, NULL ); \
+    REMARK("Realized parallelism in Fib test is %u out of %u", Harness::ConcurrencyTracker::PeakParallelism(), g_MaxConcurrency)
+
+//------------------------------------------------------------------------
+// Test for a complex tree of task groups
+//
+// The test executes a tree of task groups of the same sort with asymmetric 
+// descendant nodes distribution at each level at each level. 
+//
+// The chores are specified as functor objects. Each task group contains only one chore.
+//------------------------------------------------------------------------
+
+template<uint_t Func(uint_t)>
+struct FibTask : NoAssign, Harness::NoAfterlife {
+    uint_t* m_pRes;
+    const uint_t m_Num;
+    FibTask( uint_t* y, uint_t n ) : m_pRes(y), m_Num(n) {}
+    void operator() () {
+        *m_pRes = Func(m_Num);
+    } 
+};
+
+uint_t Fib_SpawnRightChildOnly ( uint_t n ) {
+    Harness::ConcurrencyTracker ct;
+    if( n<2 ) {
+        return n;
+    } else {
+        uint_t y = ~0u;
+        Concurrency::task_group tg;
+        tg.run( FibTask<Fib_SpawnRightChildOnly>(&y, n-1) );
+        uint_t x = Fib_SpawnRightChildOnly(n-2);
+        tg.wait();
+        return y+x;
+    }
+}
+
+void TestFib1 () {
+    FIB_TEST_PROLOGUE();
+    uint_t sum = 0; 
+    for( unsigned i = 0; i < numRepeats; ++i )
+        sum += Fib_SpawnRightChildOnly(N);
+    FIB_TEST_EPILOGUE(sum);
+}
+
+
+//------------------------------------------------------------------------
+// Test for a mixed tree of task groups.
+//
+// The test executes a tree with multiple task of one sort at the first level, 
+// each of which originates in its turn a binary tree of descendant task groups.
+//
+// The chores are specified both as functor objects and as function pointers
+//------------------------------------------------------------------------
+
+uint_t Fib_SpawnBothChildren( uint_t n ) {
+    Harness::ConcurrencyTracker ct;
+    if( n<2 ) {
+        return n;
+    } else {
+        uint_t  y = ~0u,
+                x = ~0u;
+        Concurrency::task_group tg;
+        tg.run( FibTask<Fib_SpawnBothChildren>(&x, n-2) );
+        tg.run( FibTask<Fib_SpawnBothChildren>(&y, n-1) );
+        tg.wait();
+        return y + x;
+    }
+}
+
+void RunFib2 () {
+    g_Sum += Fib_SpawnBothChildren(N);
+}
+
+void TestFib2 () {
+    FIB_TEST_PROLOGUE();
+    g_Sum = 0; 
+    Concurrency::task_group rg;
+    for( unsigned i = 0; i < numRepeats; ++i )
+        rg.run( &RunFib2 );
+    rg.wait();
+    FIB_TEST_EPILOGUE(g_Sum);
+}
+
+
+//------------------------------------------------------------------------
+// Test for a complex tree of task groups
+// The chores are specified as task handles for recursive functor objects.
+//------------------------------------------------------------------------
+
+class FibTask_SpawnRightChildOnly : NoAssign, Harness::NoAfterlife {
+    uint_t* m_pRes;
+    uint_t m_Num;
+
+public:
+    FibTask_SpawnRightChildOnly( uint_t* y, uint_t n ) : m_pRes(y), m_Num(n) {}
+    void operator() () {
+        Harness::ConcurrencyTracker ct;
+        AssertLive();
+        if( m_Num < 2 ) {
+            *m_pRes = m_Num;
+        } else {
+            uint_t y = ~0u;
+            Concurrency::task_group tg;
+            Concurrency::task_handle<FibTask_SpawnRightChildOnly> h = FibTask_SpawnRightChildOnly(&y, m_Num-1);
+            tg.run( h );
+            m_Num -= 2;
+#if TBBTEST_USE_TBB
+            tg.run_and_wait( *this );
+#else    
+            (*this)();
+            tg.wait();
+#endif
+            *m_pRes += y;
+        }
+    }
+};
+
+uint_t RunFib3 ( uint_t n ) {
+    uint_t res = ~0u;
+    FibTask_SpawnRightChildOnly func(&res, n);
+    func();
+    return res;
+}
+
+void TestFib3 () {
+    FIB_TEST_PROLOGUE();
+    uint_t sum = 0; 
+    for( unsigned i = 0; i < numRepeats; ++i )
+        sum += RunFib3(N);
+    FIB_TEST_EPILOGUE(sum);
+}
+
+//------------------------------------------------------------------------
+// Test for a mixed tree of task groups.
+// The chores are specified as task handles for both functor objects and function pointers
+//------------------------------------------------------------------------
+
+template<class task_group_type>
+class FibTask_SpawnBothChildren : NoAssign, Harness::NoAfterlife {
+    uint_t* m_pRes;
+    uint_t m_Num;
+public:
+    FibTask_SpawnBothChildren( uint_t* y, uint_t n ) : m_pRes(y), m_Num(n) {}
+    void operator() () {
+        Harness::ConcurrencyTracker ct;
+        AssertLive();
+        if( m_Num < 2 ) {
+            *m_pRes = m_Num;
+        } else {
+            uint_t  x = ~0u, // initialized only to suppress warning 
+                    y = ~0u;
+            task_group_type tg;
+            Concurrency::task_handle<FibTask_SpawnBothChildren> h1 = FibTask_SpawnBothChildren(&y, m_Num-1),
+                                                                h2 = FibTask_SpawnBothChildren(&x, m_Num-2);
+            tg.run( h1 );
+            tg.run( h2 );
+            tg.wait();
+            *m_pRes = x + y;
+        }
+    }
+};
+
+template<class task_group_type>
+void RunFib4 () {
+    uint_t res = ~0u;
+    FibTask_SpawnBothChildren<task_group_type> func(&res, N);
+    func();
+    g_Sum += res;
+}
+
+template<class task_group_type>
+void TestFib4 () {
+    FIB_TEST_PROLOGUE();
+    g_Sum = 0; 
+    task_group_type rg;
+    const unsigned hSize = sizeof(handle_type);
+    char *handles = new char [numRepeats * hSize];
+    handle_type *h = NULL;
+    for( unsigned i = 0; ; ++i ) {
+        h = (handle_type*)(handles + i * hSize);
+#if __TBB_FUNC_PTR_AS_TEMPL_PARAM_BROKEN
+        new ( h ) handle_type((void(*)())RunFib4<task_group_type>);
+#else
+        new ( h ) handle_type(RunFib4<task_group_type>);
+#endif
+        if ( i == numRepeats - 1 )
+            break;
+        rg.run( *h );
+    }
+#if TBBTEST_USE_TBB
+    rg.run_and_wait( *h );
+#else    
+    (*h)();
+    rg.wait();
+#endif
+    for( unsigned i = 0; i < numRepeats; ++i )
+#if __GNUC__==3 && __GNUC_MINOR__<=2
+        ((handle_type*)(handles + i * hSize))->Concurrency::task_handle<void(*)()>::~task_handle();
+#else
+        ((handle_type*)(handles + i * hSize))->~handle_type();
+#endif
+    delete handles;
+    FIB_TEST_EPILOGUE(g_Sum);
+}
+
+#if __TBB_LAMBDAS_PRESENT && !__TBB_LAMBDA_AS_TEMPL_PARAM_BROKEN
+//------------------------------------------------------------------------
+// Test for a mixed tree of task groups.
+// The chores are specified as lambdas
+//------------------------------------------------------------------------
+
+void TestFibWithLambdas () {
+    REMARK ("Lambdas test");
+    FIB_TEST_PROLOGUE();
+    atomic_t sum;
+    sum = 0;
+    Concurrency::task_group rg;
+    for( unsigned i = 0; i < numRepeats; ++i )
+        rg.run( [&](){sum += Fib_SpawnBothChildren(N);} );
+    rg.wait();
+    FIB_TEST_EPILOGUE(sum);
+}
+#endif /* __TBB_LAMBDAS_PRESENT */
+
+
+//------------------------------------------------------------------------
+// Tests for exception handling and cancellation behavior.
+//------------------------------------------------------------------------
+
+class test_exception : public std::exception
+{
+    const char* m_strDescription;
+public:
+    test_exception ( const char* descr ) : m_strDescription(descr) {}
+
+    test_exception& operator= ( const test_exception& src ) {
+        m_strDescription = src.m_strDescription;
+        return *this;
+    }
+
+    const char* what() const throw() { return m_strDescription; }
+};
+
+#if TBB_USE_CAPTURED_EXCEPTION
+    #include "tbb/tbb_exception.h"
+    typedef tbb::captured_exception TestException;
+#else
+    typedef test_exception TestException;
+#endif
+
+#include <string.h>
+
+#define NUM_CHORES      512
+#define NUM_GROUPS      64
+#define SKIP_CHORES     (NUM_CHORES/4)
+#define SKIP_GROUPS     (NUM_GROUPS/4)
+#define EXCEPTION_DESCR1 "Test exception 1"
+#define EXCEPTION_DESCR2 "Test exception 2"
+
+atomic_t g_ExceptionCount;
+atomic_t g_TaskCount;
+unsigned g_ExecutedAtCancellation;
+bool g_Rethrow;
+bool g_Throw;
+#if __TBB_SILENT_CANCELLATION_BROKEN
+    volatile bool g_CancellationPropagationInProgress;
+    #define CATCH_ANY()                                     \
+        catch ( ... ) {                                     \
+            if ( g_CancellationPropagationInProgress ) {    \
+                if ( g_Throw ) {                            \
+                    exceptionCaught = true;                 \
+                    ++g_ExceptionCount;                     \
+                }                                           \
+            } else                                          \
+                ASSERT( false, "Unknown exception" );       \
+        }
+#else
+    #define CATCH_ANY()  catch ( ... ) { ASSERT( false, "Unknown exception" ); }
+#endif
+
+inline
+void ResetGlobals ( bool bThrow, bool bRethrow ) {
+    g_Throw = bThrow;
+    g_Rethrow = bRethrow;
+#if __TBB_SILENT_CANCELLATION_BROKEN
+    g_CancellationPropagationInProgress = false;
+#endif
+    g_ExceptionCount = 0;
+    g_TaskCount = 0;
+    Harness::ConcurrencyTracker::Reset();
+}
+
+class ThrowingTask : NoAssign, Harness::NoAfterlife {
+    atomic_t &m_TaskCount;
+public:
+    ThrowingTask( atomic_t& counter ) : m_TaskCount(counter) {}
+    void operator() () {
+        Harness::ConcurrencyTracker ct;
+        AssertLive();
+        if ( g_Throw ) {
+            if ( ++m_TaskCount == SKIP_CHORES ) 
+                throw test_exception(EXCEPTION_DESCR1);
+            __TBB_Yield();
+        }
+        else {
+            ++g_TaskCount;
+            while( !Concurrency::is_current_task_group_canceling() )
+                __TBB_Yield();
+        }
+    }
+};
+
+void LaunchChildren () {
+    atomic_t count;
+    count = 0;
+    Concurrency::task_group g;
+    bool exceptionCaught = false;
+    for( unsigned i = 0; i < NUM_CHORES; ++i )
+        g.run( ThrowingTask(count) );
+    Concurrency::task_group_status status = Concurrency::not_complete;
+    try {
+        status = g.wait();
+    } catch ( TestException& e ) {
+        ASSERT( e.what(), "Empty what() string" );
+        ASSERT( strcmp(e.what(), EXCEPTION_DESCR1) == 0, "Unknown exception" );
+        exceptionCaught = true;
+        ++g_ExceptionCount;
+    } CATCH_ANY();
+    ASSERT( !g_Throw || exceptionCaught || status == Concurrency::canceled, "No exception in the child task group" );
+    if ( g_Rethrow && g_ExceptionCount > SKIP_GROUPS ) {
+#if __TBB_SILENT_CANCELLATION_BROKEN
+        g_CancellationPropagationInProgress = true;
+#endif
+        throw test_exception(EXCEPTION_DESCR2);
+    }
+}
+
+void TestEh1 () {
+    ResetGlobals( true, false );
+    Concurrency::task_group rg;
+    for( unsigned i = 0; i < NUM_GROUPS; ++i )
+        // TBB version does not require taking function address 
+        rg.run( &LaunchChildren );
+    try {
+        rg.wait();
+    } catch ( ... ) {
+        ASSERT( false, "Unexpected exception" );
+    }
+    ASSERT( g_ExceptionCount <= NUM_GROUPS, "Too many exceptions from the child groups. The test is broken" );
+    ASSERT( g_ExceptionCount == NUM_GROUPS, "Not all child groups threw the exception" );
+}
+
+void TestEh2 () {
+    ResetGlobals( true, true );
+    Concurrency::task_group rg;
+    bool exceptionCaught = false;
+    for( unsigned i = 0; i < NUM_GROUPS; ++i )
+        // TBB version does not require taking function address 
+        rg.run( &LaunchChildren );
+    try {
+        rg.wait();
+    } catch ( TestException& e ) {
+        ASSERT( e.what(), "Empty what() string" );
+        ASSERT( strcmp(e.what(), EXCEPTION_DESCR2) == 0, "Unknown exception" );
+        ASSERT ( !rg.is_canceling(), "wait() has not reset cancellation state" );
+        exceptionCaught = true;
+    } CATCH_ANY();
+    ASSERT( exceptionCaught, "No exception thrown from the root task group" );
+    ASSERT( g_ExceptionCount >= SKIP_GROUPS, "Too few exceptions from the child groups. The test is broken" );
+    ASSERT( g_ExceptionCount <= NUM_GROUPS - SKIP_GROUPS, "Too many exceptions from the child groups. The test is broken" );
+    ASSERT( g_ExceptionCount < NUM_GROUPS - SKIP_GROUPS, "None of the child groups was cancelled" );
+}
+
+//------------------------------------------------------------------------
+// Tests for manual cancellation of the task_group hierarchy
+//------------------------------------------------------------------------
+
+void TestCancellation1 () {
+    ResetGlobals( false, false );
+    Concurrency::task_group rg;
+    for( unsigned i = 0; i < NUM_GROUPS; ++i )
+        // TBB version does not require taking function address 
+        rg.run( &LaunchChildren );
+    ASSERT ( !Concurrency::is_current_task_group_canceling(), "Unexpected cancellation" );
+    ASSERT ( !rg.is_canceling(), "Unexpected cancellation" );
+#if __TBB_SILENT_CANCELLATION_BROKEN
+    g_CancellationPropagationInProgress = true;
+#endif
+    while ( g_MaxConcurrency > 1 && g_TaskCount == 0 )
+        __TBB_Yield();
+    rg.cancel();
+    g_ExecutedAtCancellation = g_TaskCount;
+    ASSERT ( rg.is_canceling(), "No cancellation reported" );
+    rg.wait();
+    ASSERT( g_TaskCount <= NUM_GROUPS * NUM_CHORES, "Too many tasks reported. The test is broken" );
+    ASSERT( g_TaskCount < NUM_GROUPS * NUM_CHORES, "No tasks were cancelled. Cancellation model changed?" );
+    ASSERT( g_TaskCount <= g_ExecutedAtCancellation + Harness::ConcurrencyTracker::PeakParallelism(), "Too many tasks survived cancellation" );
+}
+
+//------------------------------------------------------------------------
+// Tests for manual cancellation of the structured_task_group hierarchy
+//------------------------------------------------------------------------
+
+void StructuredLaunchChildren () {
+    atomic_t count;
+    count = 0;
+    Concurrency::structured_task_group g;
+    bool exceptionCaught = false;
+    typedef Concurrency::task_handle<ThrowingTask> handle_type;
+    static const unsigned hSize = sizeof(handle_type);
+    char handles[NUM_CHORES * hSize];
+    for( unsigned i = 0; i < NUM_CHORES; ++i ) {
+        handle_type *h = (handle_type*)(handles + i * hSize);
+        new ( h ) handle_type( ThrowingTask(count) );
+        g.run( *h );
+    }
+    try {
+        g.wait();
+    } catch ( TestException& e ) {
+        ASSERT( e.what(), "Empty what() string" );
+        ASSERT( strcmp(e.what(), EXCEPTION_DESCR1) == 0, "Unknown exception" );
+#if __TBB_SILENT_CANCELLATION_BROKEN
+        ASSERT ( !g.is_canceling() || g_CancellationPropagationInProgress, "wait() has not reset cancellation state" );
+#else
+        ASSERT ( !g.is_canceling(), "wait() has not reset cancellation state" );
+#endif
+        exceptionCaught = true;
+        ++g_ExceptionCount;
+    } CATCH_ANY();
+    ASSERT( !g_Throw || exceptionCaught, "No exception in the child task group" );
+    for( unsigned i = 0; i < NUM_CHORES; ++i )
+        ((handle_type*)(handles + i * hSize))->~handle_type();
+    if ( g_Rethrow && g_ExceptionCount > SKIP_GROUPS ) {
+#if __TBB_SILENT_CANCELLATION_BROKEN
+        g_CancellationPropagationInProgress = true;
+#endif
+        throw test_exception(EXCEPTION_DESCR2);
+    }
+}
+
+class StructuredCancellationTestDriver {
+    static const unsigned hSize = sizeof(handle_type);
+    char m_handles[NUM_CHORES * hSize];
+
+public:
+    void Launch ( Concurrency::structured_task_group& rg ) {
+        ResetGlobals( false, false );
+        for( unsigned i = 0; i < NUM_GROUPS; ++i ) {
+            handle_type *h = (handle_type*)(m_handles + i * hSize);
+            new ( h ) handle_type( StructuredLaunchChildren );
+            rg.run( *h );
+        }
+        ASSERT ( !Concurrency::is_current_task_group_canceling(), "Unexpected cancellation" );
+        ASSERT ( !rg.is_canceling(), "Unexpected cancellation" );
+#if __TBB_SILENT_CANCELLATION_BROKEN
+        g_CancellationPropagationInProgress = true;
+#endif
+        while ( g_MaxConcurrency > 1 && g_TaskCount == 0 )
+            __TBB_Yield();
+    }
+
+    void Finish () {
+        for( unsigned i = 0; i < NUM_GROUPS; ++i )
+            ((handle_type*)(m_handles + i * hSize))->~handle_type();
+        ASSERT( g_TaskCount <= NUM_GROUPS * NUM_CHORES, "Too many tasks reported. The test is broken" );
+        ASSERT( g_TaskCount < NUM_GROUPS * NUM_CHORES, "No tasks were cancelled. Cancellation model changed?" );
+        ASSERT( g_TaskCount <= g_ExecutedAtCancellation + Harness::ConcurrencyTracker::PeakParallelism(), "Too many tasks survived cancellation" );
+    }
+}; // StructuredCancellationTestDriver
+
+void TestStructuredCancellation1 () {
+    StructuredCancellationTestDriver driver;
+    Concurrency::structured_task_group sg;
+    driver.Launch( sg );
+    sg.cancel();
+    g_ExecutedAtCancellation = g_TaskCount;
+    ASSERT ( sg.is_canceling(), "No cancellation reported" );
+    sg.wait();
+    driver.Finish();
+}
+
+#if defined(_MSC_VER)
+    #pragma warning (disable: 4127)
+#endif
+
+template<bool Throw>
+void TestStructuredCancellation2 () {
+    bool exception_occurred = false,
+         unexpected_exception = false;
+    StructuredCancellationTestDriver driver;
+    try {
+        Concurrency::structured_task_group tg;
+        driver.Launch( tg );
+        if ( Throw )
+            throw int(); // Initiate stack unwinding
+    }
+    catch ( const Concurrency::missing_wait& ) {
+        exception_occurred = true;
+        unexpected_exception = Throw;
+    }
+    catch ( int ) {
+        exception_occurred = true;
+        unexpected_exception = !Throw;
+    }
+    catch ( ... ) {
+        exception_occurred = unexpected_exception = true;
+    }
+    __TBB_ASSERT( exception_occurred, NULL );
+    __TBB_ASSERT( !unexpected_exception, NULL );
+    driver.Finish();
+}
+
+#include "harness_bad_expr.h"
+
+void EmptyFunction () {}
+
+void TestStructuredWait () {
+    Concurrency::structured_task_group sg;
+    handle_type h(EmptyFunction);
+    sg.run(h);
+    sg.wait();
+#if TBB_USE_ASSERT
+    tbb::set_assertion_handler( AssertionFailureHandler );
+    TRY_BAD_EXPR( sg.wait(), "wait()" );
+    tbb::set_assertion_handler( NULL );
+#endif /* TBB_USE_ASSERT */
+}
+
+__TBB_TEST_EXPORT
+int main(int argc, char* argv[]) {
+    MinThread = 1;
+    ParseCommandLine( argc, argv );
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        g_MaxConcurrency = p;
+#if TBBTEST_USE_TBB
+        tbb::task_scheduler_init init(p);
+#else
+        Concurrency::SchedulerPolicy sp( 4,
+                                Concurrency::SchedulerKind, Concurrency::ThreadScheduler,
+                                Concurrency::MinConcurrency, 1,
+                                Concurrency::MaxConcurrency    , p,
+                                Concurrency::TargetOversubscriptionFactor, 1);
+        Concurrency::Scheduler  *s = Concurrency::Scheduler::Create( sp );
+        if ( p > 1 ) {
+            TestVagabondGroup();
+        }
+#endif /* !TBBTEST_USE_TBB */
+        if ( p > 1 ) {
+            TestParallelSpawn();
+            TestParallelWait();
+        }
+        TestFib1();
+        TestFib2();
+        TestFib3();
+        TestFib4<Concurrency::task_group>();
+        TestFib4<Concurrency::structured_task_group>();
+#if __TBB_LAMBDAS_PRESENT && !__TBB_LAMBDA_AS_TEMPL_PARAM_BROKEN
+        TestFibWithLambdas();
+#endif
+        TestCancellation1();
+        TestStructuredCancellation1();
+#if !__TBB_EXCEPTION_HANDLING_BROKEN
+        TestEh1();
+        TestEh2();
+        TestStructuredWait();
+        TestStructuredCancellation2<true>();
+        TestStructuredCancellation2<false>();
+#endif /* !__TBB_EXCEPTION_HANDLING_BROKEN */
+#if !TBBTEST_USE_TBB
+        s->Release();
+#endif
+    }
+#if __TBB_EXCEPTION_HANDLING_BROKEN
+    REPORT("Warning: Exception handling tests are skipped because of a known issue.\n");
+#endif
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_leaks.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_leaks.cpp
new file mode 100644 (file)
index 0000000..cba17e0
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// to avoid usage of #pragma comment
+#define __TBB_NO_IMPLICIT_LINKAGE 1
+
+#define  COUNT_TASK_NODES 1
+#define __TBB_TASK_CPP_DIRECTLY_INCLUDED 1
+#include "../tbb/task.cpp"
+
+#include "tbb/atomic.h"
+#include "harness_assert.h"
+#include <cstdlib>
+
+//------------------------------------------------------------------------
+// Test for task::spawn_children
+//------------------------------------------------------------------------
+
+tbb::atomic<int> Count;
+tbb::atomic<tbb::task*> Exchanger;
+tbb::internal::scheduler* Producer;
+
+#include "tbb/task_scheduler_init.h"
+#include "harness.h"
+using namespace tbb;
+using namespace tbb::internal;
+
+class ChangeProducer: public tbb::task {
+public:
+    /*override*/ tbb::task* execute() {
+        if( is_stolen_task() ) {
+            Producer = internal::Governor::local_scheduler();
+        }
+        return NULL;
+    }
+};
+
+class TaskGenerator: public tbb::task {
+    const int my_child_count;
+    int my_depth;
+public:
+    TaskGenerator(int child_count, int depth) : my_child_count(child_count), my_depth(depth) {
+        ASSERT(my_child_count>1, "The TaskGenerator should produce at least two children");
+    }
+    /*override*/ tbb::task* execute() {
+        if( my_depth>0 ) {
+            int child_count = my_child_count;
+            scheduler* my_sched = internal::Governor::local_scheduler();
+            tbb::task& c  = *new( tbb::task::allocate_continuation() ) tbb::empty_task;
+            c.set_ref_count( child_count );
+            recycle_as_child_of(c);
+            --child_count;
+            if( Producer==my_sched ) {
+                // produce a task and put it into Exchanger
+                tbb::task* t = new( c.allocate_child() ) tbb::empty_task;
+                --child_count;
+                t = Exchanger.fetch_and_store(t);
+                if( t ) this->spawn(*t);
+            } else {
+                tbb::task* t = Exchanger.fetch_and_store(NULL);
+                if( t ) this->spawn(*t);
+            }
+            while( child_count ) {
+                c.spawn( *new( c.allocate_child() ) TaskGenerator(my_child_count, my_depth-1) );
+                --child_count;
+            }
+            --my_depth;
+            return this;
+        } else {
+            tbb::task* t = Exchanger.fetch_and_store(NULL);
+            if( t ) this->spawn(*t);
+            return NULL;
+        }
+    }
+};
+
+#include "harness_memory.h"
+#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
+    // VS2008/VC9 seems to have an issue
+    #pragma warning( push )
+    #pragma warning( disable: 4985 )
+#endif
+#include <math.h>
+#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
+    #pragma warning( pop )
+#endif
+
+void RunTaskGenerators( int i ) {
+    tbb::task* dummy_root;
+    if( i==250 ) {
+        Producer = NULL;
+    }
+    dummy_root = new( tbb::task::allocate_root() ) tbb::empty_task;
+    dummy_root->set_ref_count( 2 );
+    // If no producer, start elections; some worker will take the role
+    if( Producer )
+        dummy_root->spawn( *new( dummy_root->allocate_child() ) tbb::empty_task );
+    else
+        dummy_root->spawn( *new( dummy_root->allocate_child() ) ChangeProducer );
+    if( i==260 && !Producer ) {
+        REPORT("Warning: producer has not changed after 10 attempts; running on a single core?\n");
+    }
+    for( int j=0; j<100; ++j ) {
+        tbb::task& t = *new( tbb::task::allocate_root() ) TaskGenerator(/*child_count=*/4, /*depth=*/6);
+        tbb::task::spawn_root_and_wait(t);
+    }
+    dummy_root->wait_for_all();
+    dummy_root->destroy( *dummy_root );
+}
+
+//! Tests whether task scheduler allows thieves to hoard task objects.
+/** The test takes a while to run, so we run it only with the default
+    number of threads. */
+void TestTaskReclamation() {
+    if( Verbose )
+        REPORT("testing task reclamation\n");
+
+    size_t initial_amount_of_memory = 0;
+    double task_count_sum = 0;
+    double task_count_sum_square = 0;
+    double average, sigma;
+
+    tbb::task_scheduler_init init (MinThread);
+    if( Verbose )
+        REPORT("Starting with %d threads\n", MinThread);
+    // For now, the master will produce "additional" tasks; later a worker will replace it;
+    Producer  = internal::Governor::local_scheduler();
+    int N = 20;
+    // First N iterations fill internal buffers and collect initial statistics
+    for( int i=0; i<N; ++i ) {
+        // First N iterations fill internal buffers and collect initial statistics
+        RunTaskGenerators( i );
+
+        size_t m = GetMemoryUsage();
+        if( m-initial_amount_of_memory > 0)
+            initial_amount_of_memory = m;
+
+        intptr_t n = internal::Governor::local_scheduler()->get_task_node_count( /*count_arena_workers=*/true );
+        task_count_sum += n;
+        task_count_sum_square += n*n;
+
+        if( Verbose )
+            REPORT( "Consumed %ld bytes and %ld objects (iteration=%d)\n", long(m), long(n), i );
+    }
+    // Calculate statistical values
+    average = task_count_sum / N;
+    sigma   = sqrt( (task_count_sum_square - task_count_sum*task_count_sum/N)/N );
+    if( Verbose )
+        REPORT("Average task count: %g, sigma: %g, sum: %g, square sum:%g \n", average, sigma, task_count_sum, task_count_sum_square);
+
+    int error_count = 0;
+    for( int i=0; i<500; ++i ) {
+        // These iterations check for excessive memory use and unreasonable task count
+        RunTaskGenerators( i );
+
+        intptr_t n = internal::Governor::local_scheduler()->get_task_node_count( /*count_arena_workers=*/true );
+        size_t m = GetMemoryUsage();
+
+        if( (m-initial_amount_of_memory > 0) && (n > average+4*sigma) ) {
+            ++error_count;
+            // Use 4*sigma interval (for normal distribution, 3*sigma contains ~99% of values).
+            // Issue a warning for the first couple of times, then errors
+            REPORT( "%s: possible leak of up to %ld bytes; currently %ld cached task objects (iteration=%d)\n",
+                    error_count>3?"Error":"Warning", static_cast<unsigned long>(m-initial_amount_of_memory), long(n), i );
+            initial_amount_of_memory = m;
+            if( error_count>5 ) break;
+        } else {
+            if( Verbose )
+                REPORT( "Consumed %ld bytes and %ld objects (iteration=%d)\n", long(m), long(n), i );
+        }
+    }
+}
+
+__TBB_TEST_EXPORT
+int main(int argc, char* argv[]) {
+    MinThread = -1;
+    ParseCommandLine( argc, argv );
+    if( !GetMemoryUsage() ) {
+        if( Verbose )
+            REPORT("GetMemoryUsage is not implemented for this platform\n");
+        REPORT("skip\n");
+    } else {
+        TestTaskReclamation();
+        REPORT("done\n");
+    }
+    return 0;
+}
+
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_scheduler_init.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_scheduler_init.cpp
new file mode 100644 (file)
index 0000000..148d4c7
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/task_scheduler_init.h"
+#include <cstdlib>
+#include "harness_assert.h"
+
+//! Test that task::initialize and task::terminate work when doing nothing else.
+/** maxthread is treated as the "maximum" number of worker threads. */
+void InitializeAndTerminate( int maxthread ) {
+    for( int i=0; i<200; ++i ) {
+        switch( i&3 ) {
+            default: {
+                tbb::task_scheduler_init init( std::rand() % maxthread + 1 );
+                ASSERT(init.is_active(), NULL);
+                break;
+            }
+            case 0: {   
+                tbb::task_scheduler_init init;
+                ASSERT(init.is_active(), NULL);
+                break;
+            }
+            case 1: {
+                tbb::task_scheduler_init init( tbb::task_scheduler_init::automatic );
+                ASSERT(init.is_active(), NULL);
+                break;
+            }
+            case 2: {
+                tbb::task_scheduler_init init( tbb::task_scheduler_init::deferred );
+                ASSERT(!init.is_active(), "init should not be active; initialization was deferred");
+                init.initialize( std::rand() % maxthread + 1 );
+                ASSERT(init.is_active(), NULL);
+                init.terminate();
+                ASSERT(!init.is_active(), "init should not be active; it was terminated");
+                break;
+            }
+        }
+    }
+}
+
+#include <cstdio>
+#include <stdexcept>
+#include "harness.h"
+
+#if _WIN64
+namespace std {      // 64-bit Windows compilers have not caught up with 1998 ISO C++ standard
+    using ::srand;
+}
+#endif /* _WIN64 */
+
+struct ThreadedInit {
+    void operator()( int ) const {
+        try {
+            InitializeAndTerminate(MaxThread);
+        } catch( std::runtime_error& error ) {
+            REPORT("ERROR: %s\n", error.what() );
+        }
+    }
+};
+
+#if _MSC_VER
+#include <windows.h>
+#include <tchar.h>
+#endif /* _MSC_VER */
+
+__TBB_TEST_EXPORT
+int main(int argc, char* argv[]) {
+#if _MSC_VER && !__TBB_NO_IMPLICIT_LINKAGE
+    #ifdef _DEBUG
+        ASSERT(!GetModuleHandle(_T("tbb.dll")) && GetModuleHandle(_T("tbb_debug.dll")),
+            "debug application links with non-debug tbb library");
+    #else
+        ASSERT(!GetModuleHandle(_T("tbb_debug.dll")) && GetModuleHandle(_T("tbb.dll")),
+            "non-debug application links with debug tbb library");
+    #endif
+#endif /* _MSC_VER && !__TBB_NO_IMPLICIT_LINKAGE */
+    std::srand(2);
+    // Set defaults
+    MaxThread = MinThread = 2;
+    ParseCommandLine( argc, argv );
+    try {
+        InitializeAndTerminate(MaxThread);
+    } catch( std::runtime_error& error ) {
+        REPORT("ERROR: %s\n", error.what() );
+    }
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        if( Verbose ) REPORT("testing with %d threads\n", p );
+        NativeParallelFor( p, ThreadedInit() );
+    }
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_scheduler_observer.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_task_scheduler_observer.cpp
new file mode 100644 (file)
index 0000000..2d51184
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/task_scheduler_observer.h"
+
+typedef uintptr_t FlagType;
+const int MaxFlagIndex = sizeof(FlagType)*8-1;
+
+class MyObserver: public tbb::task_scheduler_observer {
+    FlagType flags;
+    /*override*/ void on_scheduler_entry( bool is_worker );
+    /*override*/ void on_scheduler_exit( bool is_worker );
+public:
+    MyObserver( FlagType flags_ ) : flags(flags_) {
+        observe(true);
+    }
+};
+
+#include "harness_assert.h"
+#include "tbb/atomic.h"
+
+tbb::atomic<int> EntryCount;
+tbb::atomic<int> ExitCount;
+
+struct State {
+    FlagType MyFlags;
+    bool IsMaster;
+    State() : MyFlags(), IsMaster() {}
+};
+
+#include "../tbb/tls.h"
+tbb::internal::tls<State*> LocalState;
+
+void MyObserver::on_scheduler_entry( bool is_worker ) {
+    State& state = *LocalState;
+    ASSERT( is_worker==!state.IsMaster, NULL );
+    ASSERT( (state.MyFlags & flags)==0, NULL );
+    ++EntryCount;
+    state.MyFlags |= flags;
+}
+
+void MyObserver::on_scheduler_exit( bool is_worker ) {
+    State& state = *LocalState;
+    ASSERT( is_worker==!state.IsMaster, NULL );
+    ++ExitCount;
+    state.MyFlags &= ~flags;
+}
+
+#include "tbb/task.h"
+
+class FibTask: public tbb::task {
+    const int n;
+    FlagType flags;
+public:
+    FibTask( int n_, FlagType flags_ ) : n(n_), flags(flags_) {}
+    /*override*/ tbb::task* execute() {
+        ASSERT( !(~LocalState->MyFlags & flags), NULL );
+        if( n>=2 ) {
+            set_ref_count(3);
+            spawn(*new( tbb::task::allocate_child() ) FibTask(n-1,flags));
+            spawn_and_wait_for_all(*new( tbb::task::allocate_child() ) FibTask(n-2,flags));
+        }
+        return NULL;
+    }
+};
+
+void DoFib( FlagType flags ) {
+    tbb::task* t = new( tbb::task::allocate_root() ) FibTask(10,flags);
+    tbb::task::spawn_root_and_wait(*t);
+}
+
+#include "tbb/task_scheduler_init.h"
+#include "harness.h"
+
+class DoTest {
+    int nthread;
+public:
+    DoTest( int n ) : nthread(n) {}
+    void operator()( int i ) const {
+        LocalState->IsMaster = true;
+        if( i==0 ) {   
+            tbb::task_scheduler_init(nthread);
+            DoFib(0);
+        } else {
+            FlagType f = i<=MaxFlagIndex? 1<<i : 0;
+            MyObserver w(f);
+            tbb::task_scheduler_init(nthread);
+            DoFib(f);
+        }
+    }
+};
+
+void TestObserver( int p, int q ) {
+    NativeParallelFor( p, DoTest(q) );
+}
+
+__TBB_TEST_EXPORT
+int main(int argc, char* argv[]) {
+    ParseCommandLine( argc, argv );
+
+    for( int p=MinThread; p<=MaxThread; ++p ) 
+        for( int q=MinThread; q<=MaxThread; ++q ) 
+            TestObserver(p,q);
+    ASSERT( EntryCount>0, "on_scheduler_entry not exercised" );
+    ASSERT( ExitCount>0, "on_scheduler_exit not exercised" );
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_tbb_header.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_tbb_header.cpp
new file mode 100644 (file)
index 0000000..d71ff52
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/**
+    This test ensures that tbb.h brings in all the public TBB interface definitions.
+
+    The test is compile-time only. Nothing is actually executed except prinitng 
+    the final "done" message.
+**/
+
+#include "tbb/tbb.h"
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+
+volatile size_t g_sink;
+
+#define TestTypeDefinitionPresence( Type) g_sink = sizeof(tbb::Type);
+#define TestTypeDefinitionPresence2(TypeStart, TypeEnd) g_sink = sizeof(tbb::TypeStart,TypeEnd);
+#define TestFuncDefinitionPresence(Fn, Args, ReturnType) { ReturnType (*pfn)Args = &tbb::Fn; (void)pfn; }
+
+struct Body {
+    void operator() () const {}
+};
+struct Body1 {
+    void operator() ( int ) const {}
+};
+struct Body2 {
+    Body2 () {}
+    Body2 ( const Body2&, tbb::split ) {}
+    void operator() ( const tbb::blocked_range<int>& ) const {}
+    void join( const Body2& ) {}
+};
+struct Body3 {
+    Body3 () {}
+    Body3 ( const Body3&, tbb::split ) {}
+    void operator() ( const tbb::blocked_range2d<int>&, tbb::pre_scan_tag ) const {}
+    void operator() ( const tbb::blocked_range2d<int>&, tbb::final_scan_tag ) const {}
+    void reverse_join( Body3& ) {}
+    void assign( const Body3& ) {}
+};
+
+__TBB_TEST_EXPORT
+int main(int /*argc*/, char* /*argv*/[]) {
+    TestTypeDefinitionPresence2(aligned_space<int, 1> );
+    TestTypeDefinitionPresence( atomic<int> );
+    TestTypeDefinitionPresence( cache_aligned_allocator<int> );
+    TestTypeDefinitionPresence( tbb_hash_compare<int> );
+    TestTypeDefinitionPresence2(concurrent_hash_map<int, int> );
+    TestTypeDefinitionPresence( concurrent_bounded_queue<int> );
+    TestTypeDefinitionPresence( deprecated::concurrent_queue<int> );
+    TestTypeDefinitionPresence( strict_ppl::concurrent_queue<int> );
+    TestTypeDefinitionPresence( concurrent_vector<int> );
+    TestTypeDefinitionPresence( enumerable_thread_specific<int> );
+    TestTypeDefinitionPresence( mutex );
+    TestTypeDefinitionPresence( null_mutex );
+    TestTypeDefinitionPresence( null_rw_mutex );
+    TestTypeDefinitionPresence( queuing_mutex );
+    TestTypeDefinitionPresence( queuing_rw_mutex );
+    TestTypeDefinitionPresence( recursive_mutex );
+    TestTypeDefinitionPresence( spin_mutex );
+    TestTypeDefinitionPresence( spin_rw_mutex );
+    TestTypeDefinitionPresence( tbb_exception );
+    TestTypeDefinitionPresence( captured_exception );
+    TestTypeDefinitionPresence( movable_exception<int> );
+#if !TBB_USE_CAPTURED_EXCEPTION
+    TestTypeDefinitionPresence( tbb_exception_ptr );
+#endif /* !TBB_USE_CAPTURED_EXCEPTION */
+    TestTypeDefinitionPresence( blocked_range3d<int> );
+    TestFuncDefinitionPresence( parallel_invoke, (Body&, Body&), void );
+    TestFuncDefinitionPresence( parallel_do, (int*, int*, const Body1&), void );
+    TestFuncDefinitionPresence( parallel_for_each, (int*, int*, Body1), Body1 );
+    TestFuncDefinitionPresence( parallel_for, (const tbb::blocked_range<int>&, const Body2&, const tbb::simple_partitioner&), void );
+    TestFuncDefinitionPresence( parallel_reduce, (const tbb::blocked_range<int>&, Body2&, tbb::affinity_partitioner&), void );
+    TestFuncDefinitionPresence( parallel_scan, (const tbb::blocked_range2d<int>&, Body3&, const tbb::auto_partitioner&), void );
+    TestFuncDefinitionPresence( parallel_sort, (int*, int*), void );
+    TestTypeDefinitionPresence( pipeline );
+    TestTypeDefinitionPresence( task );
+    TestTypeDefinitionPresence( empty_task );
+    TestTypeDefinitionPresence( task_list );
+    TestTypeDefinitionPresence( task_group_context );
+    TestTypeDefinitionPresence( task_group );
+    TestTypeDefinitionPresence( task_handle<Body> );
+    TestTypeDefinitionPresence( task_scheduler_init );
+    TestTypeDefinitionPresence( task_scheduler_observer );
+    TestTypeDefinitionPresence( tbb_thread );
+    TestTypeDefinitionPresence( tbb_allocator<int> );
+    TestTypeDefinitionPresence( zero_allocator<int> );
+    TestTypeDefinitionPresence( tick_count );
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_tbb_thread.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_tbb_thread.cpp
new file mode 100644 (file)
index 0000000..b8b23f2
--- /dev/null
@@ -0,0 +1,284 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/tbb_thread.h"
+#include "tbb/atomic.h"
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness_report.h"
+#include "harness_assert.h"
+
+static const int THRDS = 3;
+static const int THRDS_DETACH = 2;
+static tbb::atomic<int> sum;
+static tbb::atomic<int> BaseCount;
+static tbb::tbb_thread::id real_ids[THRDS+THRDS_DETACH];
+
+class Base {
+    mutable int copy_throws;
+    friend void RunTests();
+    friend void CheckExceptionSafety();
+    void operator=( const Base& );   // Deny access
+protected:
+    Base() : copy_throws(100) {++BaseCount;}
+    Base( const Base& c ) : copy_throws(c.copy_throws) {
+        if( --copy_throws<=0 ) 
+            throw 0;
+        ++BaseCount; 
+    }
+    ~Base() {--BaseCount;}
+};
+
+template<int N>
+class Data: Base {
+    Data();                          // Deny access
+    explicit Data(int v) : value(v) {}
+
+    friend void RunTests();
+    friend void CheckExceptionSafety();
+public:
+    int value;
+};
+
+
+#include "harness_barrier.h"
+
+class ThreadFunc: Base {
+    ThreadFunc() {}
+
+    static Harness::SpinBarrier init_barrier;
+
+    friend void RunTests();
+public:
+    void operator()(){
+        real_ids[0] = tbb::this_tbb_thread::get_id();
+        init_barrier.wait();
+        
+        sum.fetch_and_add(1);
+    }
+    void operator()(int num){
+        real_ids[num] = tbb::this_tbb_thread::get_id();
+        init_barrier.wait();
+
+        sum.fetch_and_add(num);
+    }
+    void operator()(int num, Data<0> dx) { 
+        real_ids[num] = tbb::this_tbb_thread::get_id();
+
+        const double WAIT = .1;
+        tbb::tick_count t0 = tbb::tick_count::now();
+        tbb::this_tbb_thread::sleep( tbb::tick_count::interval_t(WAIT) );
+        tbb::tick_count t1 = tbb::tick_count::now();
+        ASSERT( ( WAIT - (t1-t0).seconds() ) < 1e-10 
+                || (t1-t0).seconds() > WAIT, "Should sleep enough.");
+
+        init_barrier.wait();
+
+        sum.fetch_and_add(num);
+        sum.fetch_and_add(dx.value);
+    }
+    void operator()(Data<0> d) {
+        tbb::this_tbb_thread::sleep( tbb::tick_count::interval_t(d.value*1.) );
+    }
+};
+
+Harness::SpinBarrier ThreadFunc::init_barrier(THRDS);
+
+void CheckRelations( const tbb::tbb_thread::id ids[], int n, bool duplicates_allowed ) {
+    for( int i=0; i<n; ++i ) {
+        const tbb::tbb_thread::id x = ids[i];
+        for( int j=0; j<n; ++j ) {
+            const tbb::tbb_thread::id y = ids[j];
+            ASSERT( (x==y)==!(x!=y), NULL );
+            ASSERT( (x<y)==!(x>=y), NULL );
+            ASSERT( (x>y)==!(x<=y), NULL );
+            ASSERT( (x<y)+(x==y)+(x>y)==1, NULL );
+            ASSERT( x!=y || i==j || duplicates_allowed, NULL );
+            for( int k=0; k<n; ++k ) {
+                const tbb::tbb_thread::id z = ids[j];
+                ASSERT( !(x<y && y<z) || x<z, "< is not transitive" );
+            }    
+        }
+    }
+}
+
+class AnotherThreadFunc: Base {
+public:
+    void operator()() {}
+    void operator()(const Data<1>&) {}
+    void operator()(const Data<1>&, const Data<2>&) {}
+    friend void CheckExceptionSafety();
+};
+
+void CheckExceptionSafety() { 
+    int original_count = BaseCount;
+    // d loops over number of copies before throw occurs 
+    for( int d=1; d<=3; ++d ) {
+        // Try all combinations of throw/nothrow for f, x, and y's copy constructor.
+        for( int i=0; i<8; ++i ) {
+            { 
+                const AnotherThreadFunc f = AnotherThreadFunc();
+                if( i&1 ) f.copy_throws = d;
+                const Data<1> x(0);
+                if( i&2 ) x.copy_throws = d;
+                const Data<2> y(0);
+                if( i&4 ) y.copy_throws = d;
+                bool exception_caught = false;
+                for( int j=0; j<3; ++j ) {
+                    try { 
+                        switch(j) {
+                            case 0: {tbb::tbb_thread t(f); t.join();} break;
+                            case 1: {tbb::tbb_thread t(f,x); t.join();} break;
+                            case 2: {tbb::tbb_thread t(f,x,y); t.join();} break;
+                        }
+                    } catch(...) {
+                        exception_caught = true;
+                    } 
+                    ASSERT( !exception_caught||(i&((1<<(j+1))-1))!=0, NULL );
+                }
+            }
+// Intel Compiler sometimes fails to destroy all implicitly generated copies 
+// of an object when a copy constructor throws an exception.
+// Problem was reported as Quad issue 482935.
+// This #if should be removed or tightened when the bug is fixed.
+#if !((_WIN32 || _WIN64) && defined(__INTEL_COMPILER))
+            ASSERT( BaseCount==original_count, "object leak detected" );
+#endif
+        }
+    }
+}
+
+#include <cstdio>
+
+void RunTests() {
+
+    ThreadFunc t;
+    Data<0> d100(100), d1(1), d0(0);
+    tbb::tbb_thread::id id;
+    tbb::tbb_thread::id id0, uniq_ids[THRDS];
+    
+    tbb::tbb_thread thrs[THRDS];
+    tbb::tbb_thread thr;
+    tbb::tbb_thread thr0(t);
+    tbb::tbb_thread thr1(t, 2);
+    tbb::tbb_thread thr2(t, 1, d100);
+    
+    ASSERT( thr0.get_id() != id, NULL );
+    id0 = thr0.get_id();
+    tbb::move(thrs[0], thr0);
+    ASSERT( thr0.get_id() == id, NULL );
+    ASSERT( thrs[0].get_id() == id0, NULL );
+
+    tbb::tbb_thread::native_handle_type h1 = thr1.native_handle();
+    tbb::tbb_thread::native_handle_type h2 = thr2.native_handle();
+    tbb::tbb_thread::id id1 = thr1.get_id();
+    tbb::tbb_thread::id id2 = thr2.get_id();
+    tbb::swap(thr1, thr2);
+    ASSERT( thr1.native_handle() == h2, NULL );
+    ASSERT( thr2.native_handle() == h1, NULL );
+    ASSERT( thr1.get_id() == id2, NULL );
+    ASSERT( thr2.get_id() == id1, NULL );
+
+    tbb::move(thrs[1], thr1);
+    ASSERT( thr1.get_id() == id, NULL );
+
+    tbb::move(thrs[2], thr2);
+    ASSERT( thr2.get_id() == id, NULL );
+
+    for (int i=0; i<THRDS; i++)
+        uniq_ids[i] = thrs[i].get_id();
+
+    ASSERT( thrs[2].joinable(), NULL );
+
+    for (int i=0; i<THRDS; i++)
+        thrs[i].join();
+    for (int i=0; i<THRDS; i++)
+        ASSERT(  real_ids[i] == uniq_ids[i], NULL );
+
+    int current_sum = sum;
+    ASSERT( current_sum == 104, NULL );
+    ASSERT( ! thrs[2].joinable(), NULL );
+    ASSERT( BaseCount==4, "object leak detected" );
+
+#if !__TBB_EXCEPTION_HANDLING_TOTALLY_BROKEN
+    CheckExceptionSafety(); 
+#endif
+
+    // Note: all tests involving BaseCount should be put before the tests
+    // involing detached threads, because there is no way of knowing when 
+    // a detached thread destroys its arguments.
+
+    tbb::tbb_thread thr_detach_0(t, d0);
+    real_ids[THRDS] = thr_detach_0.get_id();
+    thr_detach_0.detach();
+    ASSERT( thr_detach_0.get_id() == id, NULL );
+
+    tbb::tbb_thread thr_detach_1(t, d1);
+    real_ids[THRDS+1] = thr_detach_1.get_id();
+    thr_detach_1.detach();
+    ASSERT( thr_detach_1.get_id() == id, NULL );
+
+    CheckRelations(real_ids, THRDS+THRDS_DETACH, true);
+
+    CheckRelations(uniq_ids, THRDS, false);
+
+    for (int i=0; i<2; i++) {
+        AnotherThreadFunc empty_func;
+        tbb::tbb_thread thr_to(empty_func), thr_from(empty_func);
+        tbb::tbb_thread::id from_id = thr_from.get_id();
+        if (i) thr_to.join(); 
+        thr_to = thr_from;
+        ASSERT( thr_from.get_id() == tbb::tbb_thread::id(), NULL );
+        ASSERT( thr_to.get_id() == from_id, NULL );
+    }
+
+    ASSERT( tbb::tbb_thread::hardware_concurrency() > 0, NULL);
+}
+
+typedef bool (*id_relation)( tbb::tbb_thread::id, tbb::tbb_thread::id );
+
+id_relation CheckSignatures() {
+    id_relation r[6] = {&tbb::operator==,
+                        &tbb::operator!=,
+                        &tbb::operator<,
+                        &tbb::operator>,
+                        &tbb::operator<=,
+                        &tbb::operator>=};
+    return r[1];
+}
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+
+__TBB_TEST_EXPORT
+int main( int , char *[] ) {
+    CheckSignatures();
+    RunTests();
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_tbb_version.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_tbb_version.cpp
new file mode 100644 (file)
index 0000000..7484361
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <vector>
+#include <string>
+#include <utility>
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "tbb/task_scheduler_init.h"
+#include "harness.h"
+
+#if defined (_WIN32) || defined (_WIN64)
+#define TEST_SYSTEM_COMMAND "test_tbb_version.exe 1"
+#define putenv _putenv
+#else
+#define TEST_SYSTEM_COMMAND "./test_tbb_version.exe 1"
+#endif
+
+enum string_required {
+    required,
+    not_required
+    };
+
+typedef std::pair <std::string, string_required> string_pair;
+
+void initialize_strings_vector(std::vector <string_pair>* vector);
+
+const char stderr_stream[] = "version_test.err";
+const char stdout_stream[] = "version_test.out";
+
+__TBB_TEST_EXPORT
+int main(int argc, char*[] ) {
+/* We first introduced runtime version identification in 3014 */
+#if TBB_INTERFACE_VERSION>=3014 
+    // For now, just test that run-time TBB version matches the compile-time version,
+    // since otherwise the subsequent test of "TBB: INTERFACE VERSION" string will fail anyway.
+    // We need something more clever in future.
+    ASSERT(tbb::TBB_runtime_interface_version()==TBB_INTERFACE_VERSION,
+           "Running with the library of different version than the test was compiled against");
+#endif
+    try{
+        FILE *stream_out;
+        FILE *stream_err;   
+        char psBuffer[512];
+        
+        if(argc>1) {
+            stream_err = freopen( stderr_stream, "w", stderr );
+            if( stream_err == NULL ){
+                REPORT( "Internal test error (freopen)\n" );
+                exit( 1 );
+            }
+            stream_out = freopen( stdout_stream, "w", stdout );
+            if( stream_out == NULL ){
+                REPORT( "Internal test error (freopen)\n" );
+                exit( 1 );
+            }
+            {
+                tbb::task_scheduler_init init(1);
+            }
+            fclose( stream_out );
+            fclose( stream_err );
+            exit(0);
+        }
+        //1st step check that output is empty if TBB_VERSION is not defined.
+        if ( getenv("TBB_VERSION") ){
+            REPORT( "TBB_VERSION defined, skipping step 1 (empty output check)\n" );
+        }else{
+            if( ( system(TEST_SYSTEM_COMMAND) ) != 0 ){
+                REPORT( "Error (step 1): Internal test error\n" );
+                exit( 1 );
+            }
+            //Checking output streams - they should be empty
+            stream_err = fopen( stderr_stream, "r" );
+            if( stream_err == NULL ){
+                REPORT( "Error (step 1):Internal test error (stderr open)\n" );
+                exit( 1 );
+            }
+            while( !feof( stream_err ) ) {
+                if( fgets( psBuffer, 512, stream_err ) != NULL ){
+                    REPORT( "Error (step 1): stderr should be empty\n" );
+                    exit( 1 );
+                }
+            }
+            fclose( stream_err );
+            stream_out = fopen( stdout_stream, "r" );
+            if( stream_out == NULL ){
+                REPORT( "Error (step 1):Internal test error (stdout open)\n" );
+                exit( 1 );
+            }
+            while( !feof( stream_out ) ) {
+                if( fgets( psBuffer, 512, stream_out ) != NULL ){
+                    REPORT( "Error (step 1): stdout should be empty\n" );
+                    exit( 1 );
+                }
+            }
+            fclose( stream_out );
+        }
+
+        //Setting TBB_VERSION in case it is not set
+        if ( !getenv("TBB_VERSION") ){
+            putenv(const_cast<char*>("TBB_VERSION=1"));
+        }
+
+        if( ( system(TEST_SYSTEM_COMMAND) ) != 0 ){
+            REPORT( "Error (step 2):Internal test error\n" );
+            exit( 1 );
+        }
+        //Checking pipe - it should contain version data
+        std::vector <string_pair> strings_vector;
+        std::vector <string_pair>::iterator strings_iterator;
+
+        initialize_strings_vector( &strings_vector );
+        strings_iterator = strings_vector.begin();
+
+        stream_out = fopen( stdout_stream, "r" );
+        if( stream_out == NULL ){
+            REPORT( "Error (step 2):Internal test error (stdout open)\n" );
+            exit( 1 );
+        }
+        while( !feof( stream_out ) ) {
+            if( fgets( psBuffer, 512, stream_out ) != NULL ){
+                REPORT( "Error (step 2): stdout should be empty\n" );
+                exit( 1 );
+            }
+        }
+        fclose( stream_out );
+
+        stream_err = fopen( stderr_stream, "r" );
+        if( stream_err == NULL ){
+            REPORT( "Error (step 1):Internal test error (stderr open)\n" );
+            exit( 1 );
+        }
+        
+        int skip_line = 0;
+        
+        while( !feof( stream_err ) ) {
+            if( fgets( psBuffer, 512, stream_err ) != NULL ){
+                do{
+                    if ( strings_iterator == strings_vector.end() ){
+                        REPORT( "Error: version string dictionary ended prematurely.\n" );
+                        REPORT( "No match for: \t%s", psBuffer );
+                        exit( 1 );
+                    }
+                    if ( strstr( psBuffer, strings_iterator->first.c_str() ) == NULL ){
+                        if( strings_iterator->second == required ){
+                            REPORT( "Error: version strings do not match.\n" );
+                            REPORT( "Expected \"%s\" not found in:\n\t%s", strings_iterator->first.c_str(), psBuffer );
+                            exit( 1 );
+                        }else{
+                            //Do we need to print in case there is no non-required string?
+                            skip_line = 1;
+                        }
+                    }else{
+                           skip_line = 0;
+                    }
+                    if ( strings_iterator != strings_vector.end() ) strings_iterator ++;
+                }while( skip_line );
+            }
+        }
+        fclose( stream_err );
+    } catch(...) {
+        ASSERT( 0,"unexpected exception" );
+    }
+    REPORT("done\n");
+    return 0;
+}
+
+
+// Fill dictionary with version strings for platforms 
+void initialize_strings_vector(std::vector <string_pair>* vector)
+{
+    vector->push_back(string_pair("TBB: VERSION\t\t2.2", required));          // check TBB_VERSION
+    vector->push_back(string_pair("TBB: INTERFACE VERSION\t4001", required)); // check TBB_INTERFACE_VERSION
+    vector->push_back(string_pair("TBB: BUILD_DATE", required));
+    vector->push_back(string_pair("TBB: BUILD_HOST", required));
+    vector->push_back(string_pair("TBB: BUILD_OS", required));
+#if _WIN32||_WIN64
+#if !__MINGW32__
+    vector->push_back(string_pair("TBB: BUILD_CL", required));
+#endif
+    vector->push_back(string_pair("TBB: BUILD_COMPILER", required));
+#elif __APPLE__
+    vector->push_back(string_pair("TBB: BUILD_KERNEL", required));
+    vector->push_back(string_pair("TBB: BUILD_GCC", required));
+    vector->push_back(string_pair("TBB: BUILD_COMPILER", not_required)); //if( getenv("COMPILER_VERSION") )
+#elif __sun
+    vector->push_back(string_pair("TBB: BUILD_KERNEL", required));
+    vector->push_back(string_pair("TBB: BUILD_SUNCC", required));
+    vector->push_back(string_pair("TBB: BUILD_COMPILER", not_required)); //if( getenv("COMPILER_VERSION") )
+#else //We use version_info_linux.sh for unsupported OSes
+    vector->push_back(string_pair("TBB: BUILD_KERNEL", required));
+    vector->push_back(string_pair("TBB: BUILD_GCC", required));
+    vector->push_back(string_pair("TBB: BUILD_COMPILER", not_required)); //if( getenv("COMPILER_VERSION") )
+    vector->push_back(string_pair("TBB: BUILD_GLIBC", required));
+    vector->push_back(string_pair("TBB: BUILD_LD", required));
+#endif
+    vector->push_back(string_pair("TBB: BUILD_TARGET", required));
+    vector->push_back(string_pair("TBB: BUILD_COMMAND", required));
+    vector->push_back(string_pair("TBB: TBB_USE_DEBUG", required));
+    vector->push_back(string_pair("TBB: TBB_USE_ASSERT", required));
+    vector->push_back(string_pair("TBB: DO_ITT_NOTIFY", required));
+    vector->push_back(string_pair("TBB: ITT", not_required)); //#ifdef DO_ITT_NOTIFY
+    vector->push_back(string_pair("TBB: ALLOCATOR", required));
+    vector->push_back(string_pair("TBB: RML", not_required));
+    vector->push_back(string_pair("TBB: Intel(R) RML library built:", not_required));
+    vector->push_back(string_pair("TBB: SCHEDULER", required));
+
+    return;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_tick_count.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_tick_count.cpp
new file mode 100644 (file)
index 0000000..57748ee
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#include "tbb/tick_count.h"
+#include "harness.h"
+#include <cstdio>
+
+//! Assert that two times in seconds are very close.
+void AssertNear( double x, double y ) {
+    ASSERT( -1.0E-10 <= x-y && x-y <=1.0E-10, NULL );
+}
+
+//! Test arithmetic operators on tick_count::interval_t
+void TestArithmetic( const tbb::tick_count& t0, const tbb::tick_count& t1, const tbb::tick_count& t2 ) {
+    tbb::tick_count::interval_t i= t1-t0;
+    tbb::tick_count::interval_t j = t2-t1;
+    tbb::tick_count::interval_t k = t2-t0;
+    AssertSameType( tbb::tick_count::interval_t(), i-j );
+    AssertSameType( tbb::tick_count::interval_t(), i+j );
+    ASSERT( i.seconds()>1E-9, NULL );
+    ASSERT( j.seconds()>1E-9, NULL );
+    ASSERT( k.seconds()>2E-9, NULL );
+    AssertNear( (i+j).seconds(), k.seconds() );
+    AssertNear( (k-j).seconds(), i.seconds() );
+    AssertNear( ((k-j)+(j-i)).seconds(), k.seconds()-i.seconds() );
+    tbb::tick_count::interval_t sum;
+    sum += i;
+    sum += j;
+    AssertNear( sum.seconds(), k.seconds() );
+    sum -= i;
+    AssertNear( sum.seconds(), j.seconds() );
+    sum -= j;
+    AssertNear( sum.seconds(), 0.0 );
+}
+
+//------------------------------------------------------------------------
+// Test for overhead in calls to tick_count 
+//------------------------------------------------------------------------
+
+//! Wait for given duration.
+/** The duration parameter is in units of seconds. */
+static void WaitForDuration( double duration ) {
+    tbb::tick_count start = tbb::tick_count::now();
+    while( (tbb::tick_count::now()-start).seconds() < duration )
+        continue;
+}
+
+//! Test that average timer overhead is within acceptable limit.
+/** The 'tolerance' value inside the test specifies the limit. */
+void TestSimpleDelay( int ntrial, double duration, double tolerance ) {
+    double total_worktime = 0;
+    // Iteration -1 warms up the code cache.
+    for( int trial=-1; trial<ntrial; ++trial ) {
+        tbb::tick_count t0 = tbb::tick_count::now();
+        if( duration ) WaitForDuration(duration);
+        tbb::tick_count t1 = tbb::tick_count::now();
+        if( trial>=0 ) {
+            total_worktime += (t1-t0).seconds(); 
+        }
+    }
+    // Compute average worktime and average delta
+    double worktime = total_worktime/ntrial;
+    double delta = worktime-duration;
+    if (Verbose)
+        REPORT("worktime=%g delta=%g tolerance=%g\n", worktime, delta, tolerance);
+
+    // Check that delta is acceptable
+    if( delta<0 ) 
+        REPORT("ERROR: delta=%g < 0\n",delta); 
+    if( delta>tolerance )
+        REPORT("%s: delta=%g > %g=tolerance where duration=%g\n",delta>3*tolerance?"ERROR":"Warning",delta,tolerance,duration);
+}
+
+//------------------------------------------------------------------------
+// Test for subtracting calls to tick_count from different threads.
+//------------------------------------------------------------------------
+
+#include "tbb/atomic.h"
+const int MAX_NTHREAD = 1000;
+static tbb::atomic<int> Counter;
+static volatile bool Flag;
+static tbb::tick_count tick_countArray[MAX_NTHREAD];
+
+struct tick_countDifferenceBody {
+    void operator()( int id ) const {
+        if( --Counter==0 ) Flag = true;
+        while( !Flag ) continue;
+        tick_countArray[id] = tbb::tick_count::now();
+    }
+};
+
+//! Test that two tick_count values recorded on different threads can be meaningfully subtracted.
+void Testtick_countDifference( int n ) {
+    double tolerance = 3E-4;
+    for( int trial=0; trial<10; ++trial ) {
+        Counter = n;
+        Flag = false;
+        NativeParallelFor( n, tick_countDifferenceBody() ); 
+        ASSERT( Counter==0, NULL ); 
+        for( int i=0; i<n; ++i )
+            for( int j=0; j<i; ++j ) {
+                double diff = (tick_countArray[i]-tick_countArray[j]).seconds();
+                if( diff<0 ) diff = -diff;
+                if( diff>tolerance ) {
+                    REPORT("%s: cross-thread tick_count difference = %g > %g = tolerance\n",
+                           diff>3*tolerance?"ERROR":"Warning",diff,tolerance);
+                }
+            }
+    }
+}
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[]) {
+    ParseCommandLine(argc, argv);
+
+    tbb::tick_count t0 = tbb::tick_count::now();
+    TestSimpleDelay(/*ntrial=*/1000000,/*duration=*/0,    /*tolerance=*/2E-6);
+    tbb::tick_count t1 = tbb::tick_count::now();
+    TestSimpleDelay(/*ntrial=*/10,     /*duration=*/0.125,/*tolerance=*/5E-6);
+    tbb::tick_count t2 = tbb::tick_count::now();
+    TestArithmetic(t0,t1,t2);
+
+    for( int n=MinThread; n<=MaxThread; ++n ) {
+        Testtick_countDifference(n);
+    }
+    REPORT("done\n");
+    return 0;
+}
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_user_events.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_user_events.cpp
new file mode 100644 (file)
index 0000000..48bc5e4
--- /dev/null
@@ -0,0 +1,210 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+#define DO_ITT_NOTIFY 1
+#define TBB_USE_ASSERT 1
+#define TBB_DO_ITT_EVENTS 1
+
+/* to do implicite linkage under Windows, but __TBB_BUILD stops it */
+#include "tbb/tbb_stddef.h" 
+
+#if _MSC_VER /* need this to overcome _declspec( dllimport ) for ITT_event */
+#define __TBB_BUILD 1
+#endif
+
+#include "../tbb/itt_notify.cpp"
+
+#undef DO_ITT_NOTIFY
+
+#include <string>
+#include <vector>
+#include <sstream> 
+#include <iostream> 
+#include <tbb/atomic.h>
+#include <tbb/tbb_thread.h>
+#include <tbb/concurrent_hash_map.h>
+#include "harness_assert.h"
+
+namespace tbb {
+namespace internal {
+
+void DoOneTimeInitializations() {}
+bool GetBoolEnvironmentVariable(char const*) { return true; }
+bool FillDynamicLinks(const char*, const DynamicLinkDescriptor [], size_t) {
+    return true;
+}
+void PrintExtraVersionInfo( const char* , const char*  ) {}
+
+struct EvName {
+    int event;
+    char name[100];
+    
+    EvName(int event, const char *n) : event(event) {
+        strcpy(name, n);
+    }
+};
+
+struct Hash_Cmp {
+    static size_t hash(int event) {
+        return event;
+    }
+    static bool equal(int e1, int e2) {
+        return e1==e2;
+    }
+};
+
+typedef concurrent_hash_map<__itt_event,std::string,Hash_Cmp> EvNames;
+
+static EvNames ev_names;
+
+static atomic<int> uniq_itt_event;
+
+__itt_event test_event_create(const char *name, int)
+{
+    __itt_event my_cnt = uniq_itt_event++;
+    EvNames::accessor acc;
+    std::string str(name);
+    
+    ev_names.insert( acc, my_cnt );
+    acc->second = str;
+
+    return my_cnt;
+}
+
+struct IdxStr {
+    itt_event_t h;
+    std::string str;
+};
+
+static ITT_Event_Hnd_to_Event<true> ev;
+static IdxStr *idxs;
+static atomic<int> waiting_threads;
+
+class Pusher
+{
+    int my_num;
+    int events_per_thread;
+    
+    void barrier() {
+        waiting_threads--;
+        while(waiting_threads)
+            ;
+    }
+public:
+    Pusher(int my_num, int events_per_thread) :
+        my_num(my_num), events_per_thread(events_per_thread) {}
+    void operator()(){
+        barrier();
+
+        for (int i=events_per_thread*my_num; 
+             i<events_per_thread*(my_num+1); i++) {
+            IdxStr i_s;
+            char buf[100];
+
+            sprintf(buf, "%d", i);
+            i_s.str = buf;
+            i_s.h = ev.add_event(buf);
+
+            idxs[i] = i_s;
+        }
+    }
+    void operator()(int thread_id){
+        std::vector<itt_event_t> l_idx;
+        barrier();
+        
+        for (int i=0; i<events_per_thread; i++) {
+            char buf[100];
+
+            sprintf(buf, "%d_%d", thread_id, i);
+
+            itt_event_t idx = ev.add_event(buf);
+            int event = ev.get_event_by_handler( idx );
+
+            EvNames::const_accessor acc;
+            bool ok = ev_names.find(acc, event);
+            ASSERT(ok, "itt_event should exists");
+            ASSERT(0==acc->second.compare(buf), "different event names");
+
+            l_idx.push_back(idx);
+        }
+
+        for (int i=0; i<events_per_thread; i++) {
+            ev.get_event_by_handler( l_idx[i] );
+        }
+    }
+};
+
+
+void Test()
+{
+    ITT_Handler_event_create = test_event_create;
+    uniq_itt_event = 77;
+    const int init_num_thr = 8;
+    const int events_per_thread = 1000;
+
+    tbb::tbb_thread threads[init_num_thr];
+    waiting_threads = init_num_thr;
+    idxs = new IdxStr[init_num_thr*events_per_thread];
+    for (int i=0; i<init_num_thr; i++)
+        new(threads+i) tbb::tbb_thread(Pusher(i, events_per_thread));
+
+    for (int i=0; i<init_num_thr; i++)
+        threads[i].join();
+
+    ev.switch_to_event_creation();
+
+    for (int i=0; i<init_num_thr*events_per_thread; i++) {
+        std::ostringstream out;
+        out << i;
+
+        __itt_event e = ev.get_event_by_handler(idxs[i].h);
+
+        EvNames::const_accessor acc;
+        bool ok = ev_names.find(acc, e);
+        ASSERT(ok, "itt_event should exists");
+        ASSERT(0==acc->second.compare(out.str()), "different event names");
+    }
+
+    waiting_threads = init_num_thr;
+    for (int i=0; i<init_num_thr; i++)
+        new(threads+i) tbb::tbb_thread(Pusher(i, events_per_thread), i);
+    for (int i=0; i<init_num_thr; i++)
+        threads[i].join();
+}
+
+}  // namespace internal
+}  // namespace tbb
+
+__TBB_TEST_EXPORT
+int main() {
+    tbb::internal::Test();
+    REPORT("done\n");
+}
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
diff --git a/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_yield.cpp b/deal.II/contrib/tbb/tbb22_20090809oss/src/test/test_yield.cpp
new file mode 100644 (file)
index 0000000..009a182
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+    Copyright 2005-2009 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+// Test that __TBB_Yield works.
+// On Red Hat EL4 U1, it does not work, because sched_yield is broken.
+
+#include "tbb/tbb_machine.h"
+#include "tbb/tick_count.h"
+#include "harness.h"
+
+static volatile long CyclicCounter;
+static volatile bool Quit;
+double SingleThreadTime;
+
+struct RoundRobin: NoAssign {
+    const int number_of_threads;
+    RoundRobin( long p ) : number_of_threads(p) {}
+    void operator()( long k ) const {
+        tbb::tick_count t0 = tbb::tick_count::now();
+        for( long i=0; i<10000; ++i ) {
+            // Wait for previous thread to notify us 
+            for( int j=0; CyclicCounter!=k && !Quit; ++j ) {
+                __TBB_Yield();
+                if( j%100==0 ) {
+                    tbb::tick_count t1 = tbb::tick_count::now();
+                    if( (t1-t0).seconds()>=1.0*number_of_threads ) {
+                        REPORT("Warning: __TBB_Yield failing to yield with %d threads (or system is heavily loaded)\n",number_of_threads);
+                        Quit = true;
+                        return;
+                    }
+                }
+            }
+            // Notify next thread that it can run            
+            CyclicCounter = (k+1)%number_of_threads;
+        }
+    }
+};
+
+__TBB_TEST_EXPORT
+int main( int argc, char* argv[] ) {
+    // Set defaults
+    MaxThread = MinThread = 3;
+    ParseCommandLine( argc, argv );
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+        if( Verbose ) REPORT("testing with %d threads\n", p );
+        CyclicCounter = 0;
+        Quit = false;
+        NativeParallelFor( long(p), RoundRobin(p) );
+    }
+    REPORT("done\n");
+    return 0;
+}
+

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.